!ZU      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST Safe2"language-javascript records the location of a token in the input text. It has three fields: the address (number of characters preceding the token), line number and column of a token within the file. Note: The lexer assumes the usual eight character tab stops. (c) 2009 Bernie Pope BSD-stylebjpop@csse.unimelb.edu.au experimentalghcSafe2/N language-javascriptfLexical tokens. Each may be annotated with any comment occurring between the prior token and this onelanguage-javascriptSingle line comment. language-javascriptWhite space, for preservation. language-javascript Identifier. language-javascriptLiteral: Decimal language-javascriptLiteral: Hexadecimal Integer language-javascriptLiteral: Octal Integerlanguage-javascript<Literal: string, delimited by either single or double quoteslanguage-javascriptLiteral: Regular Expressionwlanguage-javascriptStuff between last JS and EOFxlanguage-javascript End of fileUlanguage-javascript]Produce a string from a token containing detailed information. Mainly intended for debugging.z  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~U (c) 2012 Alan Zimmerman BSD-style experimentalghcSafe4Vlanguage-javascriptthe previous tokenWlanguage-javascriptthe previous comment, if anyXlanguage-javascript3whether the parser is expecting template charactersYZVWX[ Safe5 \]^_`abcdefNoneF6glanguage-javascriptBEncode a Haskell String to a list of Word8 values, in UTF8 format.{  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{{  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ NoneBhlanguage-javascriptGCreates an exception without a message. The default implementation is i "".ilanguage-javascriptDCreates an exception with a message. The default implementation of i s is h.jlanguage-javascriptlAn error from the parser. Token found where it should not be. Note: tokens contain their own source span.klanguage-javascript@An error from the lexer. Character found where it should not be.llanguage-javascript@A generic error containing a string message. No source location.mihnjklSafe2=?glanguage-javascriptexpr, rb, suffixlanguage-javascriptlist, trailing commalanguage-javascriptlistlanguage-javascripthead, comma, alanguage-javascriptsingle element (no comma)language-javascript)Accessors for JSObjectProperty is either get or set.language-javascript lb, expr, rblanguage-javascript, name, lb, params, rb, blocklanguage-javascript$get/set, name, lb, params, rb, blocklanguage-javascriptname, colon, valuelanguage-javascriptassignop, initializerlanguage-javascriptexpr,colon,stmtlistlanguage-javascriptcolon,stmtlistlanguage-javascriptlbrace, stmts, rbracelanguage-javascript finally,blocklanguage-javascriptcatch,lb,ident,rb,blocklanguage-javascriptcatch,lb,ident,if,expr,rb,blocklanguage-javascript Terminalslanguage-javascriptlb, contents, rblanguage-javascriptlhs, assignop, rhslanguage-javascript await, exprlanguage-javascriptexpr, bl, args, rblanguage-javascriptexpr, dot, exprlanguage-javascriptexpr, [, expr, ]language-javascriptAclass, optional identifier, optional extends clause, lb, body, rblanguage-javascriptexpression componentslanguage-javascript lhs, op, rhslanguage-javascriptlb,expression,rblanguage-javascriptexpression, operator language-javascriptcond, ?, trueval, :, falseval language-javascriptparameter list,arrow,block` language-javascript$fn,name,lb, parameter list,rb,block` language-javascript&fn,*,name,lb, parameter list,rb,block` language-javascriptfirstpart, dot, namelanguage-javascriptnew, name, lb, args, rblanguage-javascriptfirstpart, lb, expr, rblanguage-javascript new, exprlanguage-javascriptlbrace contents rbracelanguage-javascript optional tag, lquot, head, partslanguage-javascriptidentifier, initializerlanguage-javascriptyield, optional exprlanguage-javascriptyield, *, exprlanguage-javascriptlbrace, stmts, rbrace, autosemilanguage-javascript#break,optional identifier, autosemilanguage-javascriptconst, decl, autosemilanguage-javascript<class, name, optional extends clause, lb, body, rb, autosemilanguage-javascriptconst, decl, autosemilanguage-javascript&continue, optional identifier,autosemi language-javascript!do,stmt,while,lb,expr,rb,autosemi!language-javascript'for,lb,expr,semi,expr,semi,expr,rb.stmt"language-javascriptfor,lb,expr,in,expr,rb,stmt#language-javascript.for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt$language-javascript"for,lb,var,vardecl,in,expr,rb,stmt%language-javascript.for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt&language-javascript"for,lb,var,vardecl,in,expr,rb,stmt'language-javascript"for,lb,var,vardecl,in,expr,rb,stmt(language-javascript.for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt)language-javascript"for,lb,var,vardecl,in,expr,rb,stmt*language-javascript"for,lb,var,vardecl,in,expr,rb,stmt+language-javascriptfor,lb,expr,in,expr,rb,stmt,language-javascript"for,lb,var,vardecl,in,expr,rb,stmt-language-javascript,fn,name, lb,parameter list,rb,block,autosemi.language-javascript,fn,name, lb,parameter list,rb,block,autosemi/language-javascript.fn,*,name, lb,parameter list,rb,block,autosemi0language-javascriptif,(,expr,),stmt1language-javascriptif,(,expr,),stmt,else,rest2language-javascriptidentifier,colon,stmt5language-javascriptlhs, assignop, rhs, autosemi7language-javascriptoptional expression,autosemi8language-javascript$switch,lb,expr,rb,caseblock,autosemi9language-javascriptthrow val autosemi:language-javascripttry,block,catches,finally;language-javascriptvar, decl, autosemi<language-javascriptwhile,lb,expr,rb,stmt=language-javascriptwith,lb,expr,rb,stmt list?language-javascriptident@language-javascriptident1, as, ident2Blanguage-javascriptlb, specifiers, rbDlanguage-javascriptexports, module, semiElanguage-javascriptexports, autosemiFlanguage-javascript!body, autosemi | JSExportDefaultGlanguage-javascriptNote that this data type is separate from ExportSpecifier because the grammar is slightly different (e.g. in handling of reserved words).Hlanguage-javascriptidentIlanguage-javascriptident, as, identJlanguage-javascript/Named imports, e.g. '{ foo, bar, baz as quux }'Klanguage-javascriptlb, specifiers, rbLlanguage-javascript&Import namespace, e.g. '* as whatever'Mlanguage-javascript , as, identOlanguage-javascript-from, string literal, string literal contentsQlanguage-javascriptdefaultRlanguage-javascript namespaceSlanguage-javascript named importsTlanguage-javascriptdefault, comma, namespaceUlanguage-javascriptdefault, comma, named importsWlanguage-javascriptimports, module, semiXlanguage-javascriptmodule, module, semiZlanguage-javascript import,decl[language-javascript export,decl^language-javascript$source elements, trailing whitespacedlanguage-javascript7Annotation: position and comment/whitespace informationelanguage-javascriptA single space characterflanguage-javascript No annotationglanguage-javascript5Show the AST elements stripped of their JSAnnot data.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh     cdef !"#$%&'()*+,-./0123456789:;<=]^_`abYZ[\VWXPQRSTUNOLMJKGHICDEFAB>?@hgNone=?FhQolanguage-javascript lb, args, rbplanguage-javascriptmkUnary : The parser detects q and rp as the binary version of these operator. This function converts from the binary version to the unary version.s9 t9 Nonelanguage-javascriptParse JavaScript Program (Script) Parse one compound statement, or a sequence of simple statements. Generally used for interactive input, such as from the command line of an interpreter. Return comments in addition to the parsed statements.language-javascriptParse JavaScript modulelanguage-javascript{Parse the given file. For UTF-8 support, make sure your locale is set such that "System.IO.localeEncoding" returns "utf8"language-javascriptNParse the given file, explicitly setting the encoding to UTF8 when reading itlanguage-javascriptParse one compound statement, or a sequence of simple statements. Generally used for interactive input, such as from the command line of an interpreter. Return comments in addition to the parsed statements.language-javascript*The input stream (Javascript source code).language-javascript=The name of the Javascript source (filename or input device).language-javascriptgAn error or maybe the abstract syntax tree (AST) of zero or more Javascript statements, plus comments.language-javascript*The input stream (JavaScript source code).language-javascript=The name of the JavaScript source (filename or input device).language-javascriptgAn error or maybe the abstract syntax tree (AST) of zero or more JavaScript statements, plus comments.language-javascriptThe parser to be usedlanguage-javascript*The input stream (Javascript source code).language-javascript=The name of the Javascript source (filename or input device).language-javascriptgAn error or maybe the abstract syntax tree (AST) of zero or more Javascript statements, plus comments.  None=?4None|}~      !"#$%&'()*+,-./0123456789:;<=]^_`abcdef     cdef !"#$%&'()*+,-./0123456789:;<=]^_`ab|}~Safe=?55u               ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGHHIJKLMMNOOPPQQRSTUVWXXYZ[\]^_`abcddefghijklmnopqrstuvwxyz{|}~g      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR S T U V W W X Y Z [ \ ] ^ _ ` a b cd e f g h i j klmnopnoqrrs2language-javascript-0.7.1.0-4lRMHTq6Dcf5VWnFOJ4Uvc&Language.JavaScript.Parser.SrcLocation Language.JavaScript.Parser.LexerLanguage.JavaScript.ParserLanguage.JavaScript.Parser.AST#Language.JavaScript.Parser.Grammar7!Language.JavaScript.Parser.Parser"Language.JavaScript.Pretty.Printer"Language.JavaScript.Process.Minify Language.JavaScript.Parser.Token&Language.JavaScript.Parser.ParserMonad%Language.JavaScript.Parser.LexerUtils%Language.JavaScript.Parser.ParseError TokenPosnTokenPntokenPosnEmpty $fEqTokenPosn$fShowTokenPosn$fReadTokenPosn$fDataTokenPosnToken CommentTokenWsTokenIdentifierToken DecimalTokenHexIntegerToken OctalToken StringToken RegExToken AsyncToken AwaitToken BreakToken CaseToken CatchToken ClassToken ConstTokenLetToken ContinueToken DebuggerToken DefaultToken DeleteTokenDoToken ElseToken EnumToken ExtendsToken FalseToken FinallyTokenForToken FunctionToken FromTokenIfTokenInTokenInstanceofTokenNewToken NullTokenOfToken ReturnToken StaticToken SuperToken SwitchToken ThisToken ThrowToken TrueTokenTryToken TypeofTokenVarToken VoidToken WhileToken YieldToken ImportToken WithToken ExportToken FutureTokenGetTokenSetToken AutoSemiTokenSemiColonToken CommaToken HookToken ColonTokenOrTokenAndTokenBitwiseOrTokenBitwiseXorTokenBitwiseAndToken StrictEqTokenEqTokenTimesAssignTokenDivideAssignTokenModAssignTokenPlusAssignTokenMinusAssignTokenLshAssignTokenRshAssignTokenUrshAssignTokenAndAssignTokenXorAssignToken OrAssignTokenSimpleAssignToken StrictNeTokenNeTokenLshTokenLeTokenLtToken UrshTokenRshTokenGeTokenGtTokenIncrementTokenDecrementToken PlusToken MinusTokenMulTokenDivTokenModTokenNotTokenBitwiseNotToken ArrowToken SpreadTokenDotTokenLeftBracketTokenRightBracketTokenLeftCurlyTokenRightCurlyTokenLeftParenTokenRightParenTokenCondcommentEndTokenNoSubstitutionTemplateTokenTemplateHeadTokenTemplateMiddleTokenTemplateTailTokenAsToken TailTokenEOFToken tokenSpan tokenLiteral tokenCommentCommentAnnotationCommentA WhiteSpace NoCommentAlexrunAlex alexErroralexTestTokeniserlexCont setInTemplate $fMonadAlex$fApplicativeAlex $fFunctorAlex $fEqAlexPosn$fShowAlexPosnJSClassElementJSClassInstanceMethodJSClassStaticMethod JSClassSemiJSClassHeritage JSExtends JSExtendsNoneJSTemplatePartJSCommaTrailingList JSCTLComma JSCTLNone JSCommaListJSLConsJSLOneJSLNilJSArrayElement JSArrayCommaJSIdent JSIdentName JSIdentNone JSAccessor JSAccessorGet JSAccessorSetJSObjectPropertyListJSPropertyNameJSPropertyIdentJSPropertyStringJSPropertyNumberJSPropertyComputedJSMethodDefinitionJSGeneratorMethodDefinitionJSPropertyAccessorJSObjectPropertyJSPropertyNameandValueJSPropertyIdentRefJSObjectMethodJSVarInitializer JSVarInit JSVarInitNone JSSwitchPartsJSCase JSDefaultJSBlock JSTryFinally JSFinally JSNoFinally JSTryCatchJSCatch JSCatchIf JSAssignOpJSAssign JSTimesAssignJSDivideAssign JSModAssign JSPlusAssign JSMinusAssign JSLshAssign JSRshAssign JSUrshAssign JSBwAndAssign JSBwXorAssign JSBwOrAssignJSSemi JSSemiAuto JSUnaryOp JSUnaryOpDecrJSUnaryOpDelete JSUnaryOpIncrJSUnaryOpMinus JSUnaryOpNot JSUnaryOpPlusJSUnaryOpTildeJSUnaryOpTypeof JSUnaryOpVoidJSBinOp JSBinOpAnd JSBinOpBitAnd JSBinOpBitOr JSBinOpBitXor JSBinOpDivide JSBinOpEq JSBinOpGe JSBinOpGt JSBinOpInJSBinOpInstanceOf JSBinOpLe JSBinOpLsh JSBinOpLt JSBinOpMinus JSBinOpMod JSBinOpNeq JSBinOpOf JSBinOpOr JSBinOpPlus JSBinOpRshJSBinOpStrictEqJSBinOpStrictNeq JSBinOpTimes JSBinOpUrshJSArrowParameterListJSUnparenthesizedArrowParameter!JSParenthesizedArrowParameterList JSExpression JSIdentifier JSDecimal JSLiteral JSHexIntegerJSOctalJSStringLiteralJSRegExJSArrayLiteralJSAssignExpressionJSAwaitExpressionJSCallExpressionJSCallExpressionDotJSCallExpressionSquareJSClassExpressionJSCommaExpressionJSExpressionBinaryJSExpressionParenJSExpressionPostfixJSExpressionTernaryJSArrowExpressionJSFunctionExpressionJSGeneratorExpression JSMemberDotJSMemberExpression JSMemberNewJSMemberSquareJSNewExpressionJSObjectLiteralJSSpreadExpressionJSTemplateLiteralJSUnaryExpressionJSVarInitExpressionJSYieldExpressionJSYieldFromExpression JSStatementJSStatementBlockJSBreakJSLetJSClass JSConstant JSContinue JSDoWhileJSForJSForInJSForVar JSForVarInJSForLet JSForLetIn JSForLetOf JSForConst JSForConstIn JSForConstOfJSForOf JSForVarOfJSAsyncFunction JSFunction JSGeneratorJSIfJSIfElse JSLabelledJSEmptyStatementJSExpressionStatementJSAssignStatement JSMethodCallJSReturnJSSwitchJSThrowJSTry JSVariableJSWhileJSWithJSExportSpecifierJSExportSpecifierAsJSExportClauseJSExportDeclaration JSExportFromJSExportLocalsJSExportJSImportSpecifierJSImportSpecifierAsJSImportsNamedJSImportNameSpace JSFromClauseJSImportClauseJSImportClauseDefaultJSImportClauseNameSpaceJSImportClauseNamedJSImportClauseDefaultNameSpaceJSImportClauseDefaultNamedJSImportDeclarationJSImportDeclarationBare JSModuleItemJSModuleImportDeclarationJSModuleExportDeclarationJSModuleStatementListItemJSAST JSAstProgram JSAstModuleJSAstStatementJSAstExpression JSAstLiteralJSAnnot JSAnnotSpace JSNoAnnot showStrippedbinOpEq$fShowStripped[]!$fShowStrippedJSCommaTrailingList$fShowStrippedJSCommaList$fShowStrippedJSClassElement$fShowStrippedJSClassHeritage$fShowStrippedJSTemplatePart$fShowStrippedJSArrayElement$fShowStrippedJSSemi$fShowStrippedJSVarInitializer$fShowStrippedJSAssignOp$fShowStrippedJSUnaryOp$fShowStrippedJSBinOp$fShowStrippedJSSwitchParts$fShowStrippedJSBlock$fShowStrippedJSAccessor$fShowStrippedJSPropertyName $fShowStrippedJSMethodDefinition$fShowStrippedJSObjectProperty$fShowStrippedJSIdent$fShowStrippedJSTryFinally$fShowStrippedJSTryCatch$fShowStrippedJSExportSpecifier$fShowStrippedJSExportClause!$fShowStrippedJSExportDeclaration$fShowStrippedJSImportSpecifier$fShowStrippedJSImportsNamed$fShowStrippedJSImportNameSpace$fShowStrippedJSFromClause$fShowStrippedJSImportClause!$fShowStrippedJSImportDeclaration$fShowStrippedJSModuleItem"$fShowStrippedJSArrowParameterList$fShowStrippedJSExpression$fShowStrippedJSStatement $fDataJSAnnot $fEqJSAnnot $fShowJSAnnot$fDataJSFromClause$fEqJSFromClause$fShowJSFromClause $fDataJSBinOp $fEqJSBinOp $fShowJSBinOp$fDataJSUnaryOp $fEqJSUnaryOp$fShowJSUnaryOp $fDataJSSemi $fEqJSSemi $fShowJSSemi$fDataJSAssignOp$fEqJSAssignOp$fShowJSAssignOp$fDataJSAccessor$fEqJSAccessor$fShowJSAccessor $fDataJSIdent $fEqJSIdent $fShowJSIdent$fDataJSExportSpecifier$fEqJSExportSpecifier$fShowJSExportSpecifier$fDataJSImportSpecifier$fEqJSImportSpecifier$fShowJSImportSpecifier$fDataJSImportNameSpace$fEqJSImportNameSpace$fShowJSImportNameSpace$fDataJSCommaList$fEqJSCommaList$fShowJSCommaList$fDataJSExportClause$fEqJSExportClause$fShowJSExportClause$fDataJSImportsNamed$fEqJSImportsNamed$fShowJSImportsNamed$fDataJSImportClause$fEqJSImportClause$fShowJSImportClause$fDataJSImportDeclaration$fEqJSImportDeclaration$fShowJSImportDeclaration$fDataJSCommaTrailingList$fEqJSCommaTrailingList$fShowJSCommaTrailingList$fDataJSClassElement$fEqJSClassElement$fShowJSClassElement$fDataJSMethodDefinition$fEqJSMethodDefinition$fShowJSMethodDefinition$fDataJSPropertyName$fEqJSPropertyName$fShowJSPropertyName$fDataJSExpression$fEqJSExpression$fShowJSExpression$fDataJSClassHeritage$fEqJSClassHeritage$fShowJSClassHeritage$fDataJSTemplatePart$fEqJSTemplatePart$fShowJSTemplatePart$fDataJSArrayElement$fEqJSArrayElement$fShowJSArrayElement$fDataJSObjectProperty$fEqJSObjectProperty$fShowJSObjectProperty$fDataJSVarInitializer$fEqJSVarInitializer$fShowJSVarInitializer $fDataJSBlock $fEqJSBlock $fShowJSBlock$fDataJSStatement$fEqJSStatement$fShowJSStatement$fDataJSSwitchParts$fEqJSSwitchParts$fShowJSSwitchParts$fDataJSTryFinally$fEqJSTryFinally$fShowJSTryFinally$fDataJSTryCatch$fEqJSTryCatch$fShowJSTryCatch$fDataJSArrowParameterList$fEqJSArrowParameterList$fShowJSArrowParameterList$fDataJSExportDeclaration$fEqJSExportDeclaration$fShowJSExportDeclaration$fDataJSModuleItem$fEqJSModuleItem$fShowJSModuleItem $fDataJSAST $fEqJSAST $fShowJSAST parseProgram parseModule parseLiteralparseExpressionparseStatementparsereadJs readJsModule parseFile parseFileUtf8showStrippedMaybe parseUsingrenderJSrenderToString renderToText$fRenderJSJSClassElement $fRenderJS[]$fRenderJSJSClassHeritage$fRenderJSJSTemplatePart $fRenderJS[]0$fRenderJSJSVarInitializer$fRenderJSMaybe$fRenderJSJSIdent$fRenderJSJSCommaTrailingList$fRenderJSJSCommaList$fRenderJSJSExportSpecifier$fRenderJSJSExportClause$fRenderJSJSExportDeclaration$fRenderJSJSImportSpecifier$fRenderJSJSImportsNamed$fRenderJSJSImportNameSpace$fRenderJSJSFromClause$fRenderJSJSImportClause$fRenderJSJSImportDeclaration $fRenderJS[]1$fRenderJSJSArrayElement$fRenderJSJSAccessor$fRenderJSJSPropertyName$fRenderJSJSMethodDefinition$fRenderJSJSObjectProperty$fRenderJSJSBlock$fRenderJSJSModuleItem $fRenderJS[]2 $fRenderJS[]3$fRenderJSJSStatement $fRenderJS[]4$fRenderJSJSSwitchParts$fRenderJSJSTryFinally $fRenderJS[]5$fRenderJSJSTryCatch$fRenderJSJSSemi$fRenderJSJSAssignOp$fRenderJSJSUnaryOp$fRenderJSJSBinOp $fRenderJS[]6$fRenderJSCommentAnnotation $fRenderJS[]7$fRenderJSTokenPosn $fRenderJS[]8$fRenderJSJSAnnot$fRenderJSJSArrowParameterList$fRenderJSJSExpression$fRenderJSJSASTminifyJS $fMinifyJS[]$fMinifyJSJSClassHeritage$fMinifyJSJSTemplatePart$fMinifyJSJSVarInitializer$fMinifyJSMaybe$fMinifyJSJSIdent$fMinifyJSJSCommaTrailingList$fMinifyJSJSCommaList$fMinifyJSJSArrayElement$fMinifyJSJSAccessor$fMinifyJSJSPropertyName$fMinifyJSJSMethodDefinition$fMinifyJSJSObjectProperty$fMinifyJSJSBlock$fMinifyJSJSTryFinally$fMinifyJSJSTryCatch$fMinifyJSJSExportSpecifier$fMinifyJSJSExportClause$fMinifyJSJSExportDeclaration$fMinifyJSJSImportSpecifier$fMinifyJSJSImportsNamed$fMinifyJSJSImportNameSpace$fMinifyJSJSFromClause$fMinifyJSJSImportClause$fMinifyJSJSImportDeclaration$fMinifyJSJSModuleItem$fMinifyJSJSAssignOp$fMinifyJSJSUnaryOp$fMinifyJSJSBinOp$fMinifyJSJSArrowParameterList$fMinifyJSJSExpressiondebugTokenString previousTokencomment inTemplate AlexUserStatealexInitUserState StartCode symbolTokenmkString mkString' decimalTokenhexIntegerToken octalToken regExToken stringToken commentTokenwsToken utf8EncodenoMsgstrMsgUnexpectedTokenUnexpectedCharStrErrorError ParseError JSArgumentsmkUnarybaseGHC.Num+-HappyStk