S5      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ K L M N O P Q R S TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  <A collection of Websocket functions to ease converting a URINoneL prop_getURI_full prop_getURI_full        ,Internal definitions for EJson functionalityNone26HM#A helpful prism that looks up values of type EJ{"foo" : "bar", ...} with a Text key "foo" and returns Just "bar", or Nothing. Used frequently for checking message types and ids.. !"#$%&'()*+,-.  !"#$%&'()*+,-. .%&'()*+,-"#$ !%  !"#$%&'()*+,-.None////Aeson instances for EJsonValueNone0qA ToJSON instance is provided for EJsonValue in order to be able to take advantage of the Aeson functionality.This is not used internally.1sA FromJSON instance is provided for EJsonValue in order to be able to take advantage of the Aeson functionality.This is not used internally.011001;Convert between Aeson values and EJson Extended JSON valuesNoneHM5,A function to check if all of the values in a match values that exist in b. Not the same as equality. 8 { x = L == { x = L , y = M  =c == , y = M , z = N == , z = N } ... , a = ... }  is still considered as matching. Matching is applied recursively.@Items that are not EJObjects are compared for equality directly.6{putInPath is a method for placing a value into an EJsonValue object at a point indicated by a path The path is a list of text values indicating successive object keys. This can't be done with simple lenses, as the nested obects may not exist. If they do exist, then it is simply an update. However, if they don't exist then EJObjects are created during the traversal. Examples:*putInPath ["a"] "b" (ejobject [("x","y")])Right {"a":"b","x":"y"}EputInPath ["a","q","r"] (ejobject [("s","t")]) (ejobject [("x","y")]))Right {"a":{"q":{"r":{"s":"t"}}},"x":"y"}If you attempt to update a value as if it were an EJObject when in-fact it is something else, then you will receive an Error.Example:3putInPath ["a", "b"] "c" (ejobject [("a","hello")])3Left "Value \"hello\" does not match path [\"b\"]."7ZA variatnt of putInPath that leaves the EJsonValue unchanged if the update is not sensibleExample:putInPath' ["a"] "b" "hello""hello"8TmodifyInPath modifies values in an EJsonValue object at a point indicated by a path. Examples:=modifyInPath [] (ejobject [("q","r")]) (ejobject [("x","y")])Right {"q":"r","x":"y"}If you attempt to update a value as if it were an EJObject when in-fact it is something else, then you will receive an Error.Example:6modifyInPath ["a", "b"] "c" (ejobject [("a","hello")])ALeft "Path [\"a\",\"b\"] not present in object {\"a\":\"hello\"}"6modifyInPath ["a", "b"] (ejobject [("a","hello")]) "c"5Left "Path [\"a\",\"b\"] not present in object \"c\""9^A variatnt of modifyInPath that leaves the EJsonValue unchanged if the update is not sensible.Example:7modifyInPath' ["a", "b"] "c" (ejobject [("a","hello")]) {"a":"hello"}7modifyInPath' ["a", "b"] (ejobject [("a","hello")]) "c""c":WremoveFromPath removes values from an EJsonValue object at a point indicated by a path.DThe path is a list of text values indicating successive object keys. Examples:5removeFromPath ["a"] (ejobject [("a","b"),("x","y")])Right {"x":"y"}If you attempt to update a value as if it were an EJObject when in-fact it is something else, then you will receive an Error.Example:3removeFromPath ["a","q","r"] (ejobject [("x","y")])CLeft "Path [\"a\",\"q\",\"r\"] not present in object {\"x\":\"y\"}";SgetInPath fetches a value from an EJsonValue object at a point indicated by a path.DThe path is a list of text values indicating successive object keys. Examples:0getInPath ["a"] (ejobject [("a","b"),("x","y")])Just "b"UIf you attempt to retrieve a value that does not exist, then you will get Nothing.Example:.getInPath ["a","q","r"] (ejobject [("x","y")])Nothing<6Constructs a Traversal' along a path of EJObject keys.Both ends of the traversal are maybes in order to allow self-composition, and to allow the insertion/deletion of values at a point in the path.=_A variatnt of removeFromPath that leaves the EJsonValue unchanged if the update is not sensibleExample:MremoveFromPath' ["a","b"] (ejobject [("a", ejobject [("b","c")]), ("d","e")]){"a":{},"d":"e"}removeFromPath' ["a"] "hello""hello"mTakes a path and an EJsonValue and wraps the EJsonValue in successive EJObjects for each item in the path.>/Construct a simple message object with no data.? Examples:isEJObject EJNullFalseConstructor tests...@ Examples:isEJObject EJNullFalseConstructor tests...A Examples:isEJObject EJNullFalseConstructor tests...B Examples:isEJObject EJNullFalseConstructor tests...C Examples:isEJObject EJNullFalseConstructor tests...D Examples:isEJObject EJNullFalseConstructor tests...E Examples:isEJObject EJNullFalseConstructor tests...F Examples:isEJObject EJNullFalseConstructor tests...G Examples:isEJObject EJNullFalseConstructor tests...23456789:;<=>?@ABCDEFG?      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./23456789:;<=>?@ABCDEFG2345;6789:=<>?@ABCDEFG23456789:;<=>?@ABCDEFG'Basic communication primitives for DDP.NoneH?Sends an EJsonValue to the server over the connection provided.IHPossibly gets an EJsonValue from the server over the connection providedHIHIHIHI  A small helper to generate GUIDsNone*0BHMR7Construct a matcher for subscription-ready based on ID.TODO: Allow for propper matcher behavior and abstraction a-la clojure's midje methods. This is important as there could be multiple subscription ids listed here...S9Construct a matcher for subscription failure based on ID.JKLMNOPQRS JKLMNOPQRS JOKLMNPQRSJKLMNOPQRS;An EDSL designed to make writing deadpan applications easy!NoneBHMT=The LookupItem data-type is used to store a set of callbacks.C_ident is a reference to the callback, not the expected message id.Z%Callbacks to match against by message[&Shared data Expected to be an EJObject\Network connection to serverr0The order of these args match that of runReaderT}AGet the raw app state. Reads the value out of the TVar container.~UGet the app state in conjunction with a Prism, allowing for more succing state accessA low-level function intended to be able to send any arbitrary data to the server. Given that all messages to the server are intended to fit the "message" format, You should probably use  instead.Send a particular type of message (indicated by the key) to the server. This should be the primary means of [client -> server] communication by a client application.`Send a connection message to the server and specify the DDP API version that you wish to use.0Send a generic connection message to the server.CProvides a way to fork a background thread running the app providedGRuns fetchMessages and kills the thread when the supplied app finishes.iNote: Any DeadpanApp calls made after this one will not be able to interact with server-sent messages.#Continuously pull down messages from the server in a background thread and respond to each message with the callback set. Returns a ThreadId so that this can be killed explicitly before the program exits in order to avoid the "recv: invalid argument (Bad file descriptor)" error.Loop through all callbacksUEach callback is responsible for discarding messages that it doesn't care about...5TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~|      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./23456789:;<=>?@ABCDEFGJKLMNOPQRSTUVWXYZ[\]^_`abcdefklmnopqrstuvwxyz{|}~7TUVW_^]XYZ[\fedc`abjihgoknmlpqrstuvwxyz{|}~)TUVWXYZ[\]^_`abcdefghijknmlopqrstuvwxyz{|}~ AIntended to provide a set of callbacks for various server events.None<Initiate a subscription to a named collection on the server.5Provide an id to refer to the subscription in future. H sub (client -> server): id: string (an arbitrary client-determined identifier for this subscription) name: string (the name of the subscription) params: optional array of EJSON items (parameters to the subscription) EActivates a subscription with an auto-generated ID, returning the ID.>Unsubscribe from an existing subscription indicated by its ID. = unsub (client -> server): id: string (the id passed to sub)  Synonym for -As explained in the Meteor DDP documentation: j method: string (method name) params: optional array of EJSON items (parameters to the method) id: string (an arbitrary client-determined identifier for this method call) randomSeed: optional JSON value (an arbitrary client-determined seed for pseudo-random generators) TLike clientRPCMethod, except that it blocks, returning the response from the server.TODO: Should we use the seed? JA collection of utilities to provide a way to create and run Deadpan apps.None7Run a DeadpanApp against a set of connection parametersNOnly runs the app. Does not send connection request. Does not respond to ping!7Run a DeadpanApp after establishing a server conncetionDoes not respond to ping!YRun a DeadpanApp after registering a ping handler, then establishing a server conncetion.9Same as runPingClient above but allows specifying version%Automatically respond to server pings$Log all incomming messages to STDOUTLPasses all messages through a Chan in order to not intermingle output lines.EReturns the chan so that it can be used by other sections of the app.;Alternatively just set LineBuffering on your output handle.YA variant of log-everything returning a chan to recieve messages on instead of STDOUT.5A client that responds to server collection messages.^Warning: this overwrites the "subscription-data" key of the collections field of the AppState.;An app to handle the addition of subscription data items...6For Example: {"collection":"lists","msg":"added","id":F73xFyAuKrqsb2J3m=,"fields":{"incompleteCount":6,"name":"Favorite Scientists"}}8Not especially useful on its own. You would usually use  instead.?An app to handle the modification of subscription data items...8For Example: {"collection":"lists","msg":"changed","id":TThFzYerrZaxmgjA7 ,"fields":{"name":"List Aasdf"}}8Not especially useful on its own. You would usually use  instead.:An app to handle the removal of subscription data items...8For Example: {"collection":"lists","msg":"removed","id":By8CtgWGvbZfJPFsd}8Not especially useful on its own. You would usually use  instead.aA helper lens into the subscription data inside the collections section of the dynamic app state.Example::set -XOverloadedStringsm_collections $ set (subscriptions . _EJObjectKey "songs") (Just ejnull) (AppState undefined ejnull undefined)nullpA client that sets the session id if the server sends it {"server_id":"83752cf1-a9bf-a15e-b06a-91f110383550"}3The handler deletes itself when the session is set.XA client that sets the server_id if the server sends it {"msg":"connected","session":T6gBRv5RpCTwKcMSW}9TODO: The handler deletes itself when the session is set.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./23456789:;<=>?@ABCDEFGJKLMNOPQRSTUVWXYZ[\]^_`abcdefklmnopqrstuvwxyz{|}~    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY Z [ \ ] ^ _ ` a b cdefghhijklmnoopqrstuvwxyz{|}~       !"#"$"%"&"'"(")"*"+","-"."/"01213454678797:7;7<7=7>7?7@7A7B7C7D7E7FGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG[G\G]G^G_G`GaGbGcGdGeGfghgigjgkglgmgngngogpqrqsqtquqvqwqxqyqzq{q|q}q~qqqqqqqqqqqqqqqqqqqqqqq      !"#$%&'()*+,-./012345678797:7;7<7=7>7?7@7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7[7\7]7^7_7`7a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z7{7|7}7~7777777777777777777777777777777      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH[H\H]H^H_H`HaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzH{H|H}H~HHHHHHHH Z          Deadpan-DDP-0.9.3.0Web.DDP.Deadpan.DSLWeb.DDP.DeadpanWeb.DDP.Deadpan.WebsocketsData.EJson.EJsonData.EJson.EJson2ValueData.EJson.Aeson Data.EJsonWeb.DDP.Deadpan.CommsWeb.DDP.Deadpan.GUIDWeb.DDP.Deadpan.Callbacks text-1.2.0.4Data.Text.InternalText Data.Textpacktransformers-0.3.0.0Control.Monad.IO.ClassliftIOParamsErrorPathPortDomainURL?>>>getURIprop_getURI_fullprop_getURI_missingPortexecURIsetupApp EJsonValueEJNullEJUserEJBinaryEJDateEJBoolEJNumberEJStringEJArrayEJObject _EJObject_EJArray _EJString _EJNumber_EJBool_EJDate _EJBinary_EJUser_EJNull _EJObjectKey_EJObjectKeyString _EJAraryIndexejobjectejarrayejstringejnumberejboolejdateejbinaryejuserejnull value2EJson ejson2value$fToJSONEJsonValue$fFromJSONEJsonValue decodeText decodeStringdecodeByteStringmatches putInPath putInPath' modifyInPath modifyInPath'removeFromPath getInPathpathToTraversal'removeFromPath'makeMsg isEJObject isEJArray isEJString isEJNumberisEJBoolisEJDate isEJBinaryisEJUserisEJNullsendEJgetEJGUID hashTriple newGuidInt newGuidString newGuidTextnewGuid makeEJsonId ejson2guid guid2SubReady guid2NoSub LookupItemLI_ident_bodyAppState _callbackSet _collections _connectionLookupbodyident DeadpanApp _deadpanAppCallback callbackSet collections connection$fMonadIODeadpanApp$fApplicativeDeadpanApp$fFunctorDeadpanApp$fMonadDeadpanAppVersionV1Vpre2Vpre1 deadpanAppversion2stringreverseVersions runDeadpannewID addHandler setHandler onMatchessetMatchHandler setIdHandler setMsgHandlersetCatchAllHandlerdeleteHandlerIDmodifyAppState getAppState getAppStateLgetCollectionssendData sendMessageconnectVersionconnectforkfetchMessagesThenExit fetchMessagesgetServerMessagerespondToMessage pingCallback clientDataSub subscribesubscribeWaitId subscribeWaitclientDataUnsub unsubscribeclientRPCMethodrpcrpcWait runBareClientrunConnectClientrunConnectClientVersion runPingClientrunPingClientVersion handlePings logEverythinglogEverythingViacollectdataOver dataAdded dataChanged dataRemoved subscriptions setServerID putInBase setSession simpleKey parseDate parseBinary parseUser parseEscapedgetDate getBinarygetUser getEscaped simpleObj escapeObject$fNumEJsonValue$fMonoidEJsonValue$fIsStringEJsonValuemakeUser makeJsonDate$fShowEJsonValueexpand simpleMergebaseData.Traversable TraversabletraverseControl.ApplicativegetConstConst Data.Monoid<>mconcatmappendmemptyMonoidgetDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProductgetFirstFirstgetLastLastbifunctors-4.2Data.Bifunctorbimap BifunctorData.Functor.IdentityIdentity runIdentitycontravariant-1.2.0.1Data.Functor.Contravariant>$ contramap Contravariantlens-4.7Control.Lens.THdefaultFieldRulesmakeFieldsWith makeFieldsabbreviatedFieldscamelCaseFieldsunderscoreFields makeWrappeddeclareLensesWith declareFieldsdeclareWrapped declarePrismsdeclareClassyFor declareClassydeclareLensesFor declareLensesmakeLensesWith makeClassyFor makeLensesFor makeClassy_ makeClassy makeLenses classyRules_ classyRules lensRulesFor lensRules lensClass lensField createClassgenerateUpdateableOpticsgenerateSignatures simpleLensesControl.Lens.Internal.PrismTHmakeClassyPrisms makePrismsControl.Lens.Internal.FieldTH LensRulesTopName MethodNameDefNameControl.Lens.AtsansixAtIndexcontainsContainsIxValueixIxedatAtControl.Lens.Consunsnocsnoc|>_last_init_tail_headunconscons<|_ConsCons_SnocSnocControl.Lens.EacheachEachControl.Lens.Empty_EmptyAsEmptyControl.Lens.Wrappedalafala _Unwrapping _Wrapping _Unwrapping' _Wrapping'op _Unwrapped_Wrapped _Unwrapped' _Wrapped' UnwrappedWrapped Rewrapped RewrappingControl.Lens.Iso bimappingrmappinglmapping dimapping contramappingimagmamagma involutedreversedlazyflipped uncurriedcurriedanonnon'nonmappingenumunderaufaucloneIsowithIsofromisoAnIsoAnIso'swappedSwappedstrictStrictControl.Lens.EqualitysimplesimplyfromEqmapEqsubstEqrunEq Identical AnEquality AnEquality'Control.Lens.Platedparts composOpFoldparaparaOf holesOnOfholesOnholes contextsOnOf contextsOn contextsOfcontextstransformMOnOf transformMOf transformMOn transformM transformOnOf transformOf transformOn transform universeOnOf universeOn universeOfuniverse rewriteMOnOf rewriteMOn rewriteMOfrewriteM rewriteOnOf rewriteOn rewriteOfrewritechildrendeep...platePlatedControl.Lens.ReifiedrunLensLens ReifiedLens ReifiedLens'runIndexedLens IndexedLensReifiedIndexedLensReifiedIndexedLens'runIndexedTraversalIndexedTraversalReifiedIndexedTraversalReifiedIndexedTraversal' runTraversal TraversalReifiedTraversalReifiedTraversal' runGetterGetter ReifiedGetterrunIndexedGetter IndexedGetterReifiedIndexedGetterrunFoldFold ReifiedFoldrunIndexedFold IndexedFoldReifiedIndexedFold runSetterSetter ReifiedSetterReifiedSetter'runIndexedSetter IndexedSetterReifiedIndexedSetterReifiedIndexedSetter'runIsoIso ReifiedIso ReifiedIso'runPrismPrism ReifiedPrism ReifiedPrism'Control.Lens.LevelilevelslevelsControl.Lens.Indexed ifoldMapByOf ifoldMapBy imapAccumL imapAccumRiforMimapMiforitoListifoldlMifoldrMifind iconcatMapiforM_imapM_ifor_ itraverse_noneinoneiallianyindexindicesasIndex withIndexicompose<.> reindexed selfIndex.><.imappedimapFunctorWithIndexifoldl'ifoldr'ifoldlifoldrifoldedifoldMapFoldableWithIndex itraversed itraverseTraversableWithIndexControl.Lens.TraversaldeepOffailing ifailoverfailoverelements elementsOfelement elementOfignored traversed64 traversed1 traversed imapAccumLOf imapAccumROfiforMOfimapMOfiforOf itraverseOfcloneIndexedTraversal1cloneIndexPreservingTraversal1cloneTraversal1cloneIndexedTraversalcloneIndexPreservingTraversalcloneTraversaldroppingtakingbesidebothunsafeSingularsingularholesOfiunsafePartsOf'unsafePartsOf'iunsafePartsOf unsafePartsOf ipartsOf'partsOf'ipartsOfpartsOfilocilociscanl1Ofscanr1Of mapAccumLOf mapAccumROf transposeOf sequenceOfforMOfmapMOf sequenceAOfforOf traverseOf ATraversal ATraversal' ATraversal1 ATraversal1'AnIndexedTraversalAnIndexedTraversal1AnIndexedTraversal'AnIndexedTraversal1' Traversing Traversing1 Traversing' Traversing1' traverseMin TraverseMin traverseMax TraverseMaxControl.Lens.Fold foldMapByOf foldMapByfoldByOffoldByheadOfidroppingWhile itakingWhile ifiltered^@?!^@?^@.. itoListOf ifoldlMOf ifoldrMOf ifoldlOf' ifoldrOf'ifindMOfifindOf iconcatMapOfiforMOf_imapMOf_iforOf_ itraverseOf_inoneOfiallOfianyOfifoldlOfifoldrOf ifoldMapOf backwardsipreusespreusesipreusepreuse ipreviewspreviewsipreviewpreviewipreprehasn'thasfoldlMOffoldrMOf foldl1Of' foldr1Of'foldlOf'foldrOf'foldl1Offoldr1OffindMOffindOf minimumByOf maximumByOf minimumOf maximumOf notNullOfnullOflastOffirstOf^?!^?lengthOfconcatOf concatMapOf notElemOfelemOfmsumOfasumOf sequenceOf_forMOf_mapMOf_ sequenceAOf_forOf_ traverseOf_sumOf productOfnoneOfallOfanyOforOfandOf^..toListOffoldlOffoldrOffoldOf foldMapOflinedworded droppingWhile takingWhilefilterediteratedunfoldedcycled replicatedrepeatedfolded64foldedifoldingfoldingControl.Lens.ZoomzoomZoommagnifyMagnifyControl.Lens.Prism_Shownearlyonly_Void_Nothing_Just_Right_Leftmatchingisn'tbelowasidewithoutoutsideprism'prism clonePrism withPrismAPrismAPrism'Control.Lens.Reviewreusesreusereviews#reviewreununtoReviewAReviewControl.Lens.Gettercoerced^@.iusesiuseiviewsiview ilistenings listenings ilistening listeningusesuse^.viewsviewitotoGettingIndexedGetting AccessingControl.Lens.Tuple_1Field1_2Field2_3Field3_4Field4_5Field5_6Field6_7Field7_8Field8_9Field9Control.Lens.LoupeLoupe SimpleLoupeControl.Lens.Lensuniteddevoid<#=<#~#%%=<#%=<#%~#%=#=#%%~#%~#~storing^#<<%@=<%@=%%@=%%@~<<%@~<%@~overA<<>=<<>~<<~<<<>=<<&&=<<||=<<**=<<^^=<<^=<~<<&&~<<||~<<**~<<^^~<<^~<&%%=%%~&~ilensiplenslensALensALens' AnIndexedLensAnIndexedLens'Control.Lens.SetterimapOfmapOfassignA%@=%@~isetsiover icensoring censoringipassingpassingscribe<>=<>~>=>>fmapreturn Control.MonadguardliftMjoinMonadFunctor MonadPlusmplusmzeromfilterapliftM5liftM4liftM3liftM2unlesswhen replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMvoidforever<=<>=>msumforM_forMfilterMmapM_mapM sequence_sequence=<<