Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

cashc

Package Overview
Dependencies
Maintainers
1
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cashc - npm Package Compare versions

Comparing version 0.5.7 to 0.6.0

dist/main/compiler.d.ts

23

dist/main/artifact/Artifact.d.ts

@@ -0,24 +1,3 @@

import { Artifact, Script } from '@cashscript/utils';
import { Ast } from '../ast/AST';
import { Script } from '../generation/Script';
export interface AbiInput {
name: string;
type: string;
}
export interface AbiFunction {
name: string;
covenant: boolean;
inputs: AbiInput[];
}
export interface Artifact {
contractName: string;
constructorInputs: AbiInput[];
abi: AbiFunction[];
bytecode: string;
source: string;
compiler: {
name: string;
version: string;
};
updatedAt: string;
}
export declare function generateArtifact(ast: Ast, script: Script, source: string): Artifact;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateArtifact = void 0;
const utils_1 = require("@cashscript/utils");
const __1 = require("..");
const util_1 = require("../util");
function generateArtifact(ast, script, source) {

@@ -17,3 +18,3 @@ const { contract } = ast;

}));
const bytecode = util_1.Data.scriptToAsm(script);
const bytecode = utils_1.scriptToAsm(script);
return {

@@ -20,0 +21,0 @@ contractName: contract.name,

@@ -0,1 +1,2 @@

import { Type } from '@cashscript/utils';
import { TimeOp, PreimageField } from './Globals';

@@ -5,3 +6,2 @@ import AstVisitor from './AstVisitor';

import { Location } from './Location';
import { Type } from './Type';
import { SymbolTable, Symbol } from './SymbolTable';

@@ -8,0 +8,0 @@ export declare type Ast = SourceFileNode;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Type_1 = require("./Type");
exports.HexLiteralNode = exports.StringLiteralNode = exports.IntLiteralNode = exports.BoolLiteralNode = exports.LiteralNode = exports.IdentifierNode = exports.ArrayNode = exports.UnaryOpNode = exports.BinaryOpNode = exports.TupleIndexOpNode = exports.InstantiationNode = exports.FunctionCallNode = exports.CastNode = exports.ExpressionNode = exports.BlockNode = exports.BranchNode = exports.RequireNode = exports.TimeOpNode = exports.AssignNode = exports.VariableDefinitionNode = exports.StatementNode = exports.ParameterNode = exports.FunctionDefinitionNode = exports.ContractNode = exports.SourceFileNode = exports.Node = void 0;
const utils_1 = require("@cashscript/utils");
class Node {

@@ -221,3 +222,3 @@ }

this.value = value;
this.type = Type_1.PrimitiveType.BOOL;
this.type = utils_1.PrimitiveType.BOOL;
}

@@ -233,3 +234,3 @@ accept(visitor) {

this.value = value;
this.type = Type_1.PrimitiveType.INT;
this.type = utils_1.PrimitiveType.INT;
}

@@ -246,3 +247,3 @@ accept(visitor) {

this.quote = quote;
this.type = Type_1.PrimitiveType.STRING;
this.type = utils_1.PrimitiveType.STRING;
}

@@ -258,3 +259,3 @@ accept(visitor) {

this.value = value;
this.type = new Type_1.BytesType(value.byteLength);
this.type = new utils_1.BytesType(value.byteLength);
}

@@ -261,0 +262,0 @@ accept(visitor) {

@@ -39,3 +39,4 @@ import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor';

createStringLiteral(ctx: LiteralContext): StringLiteralNode;
createDateLiteral(ctx: LiteralContext): IntLiteralNode;
createHexLiteral(ctx: LiteralContext): HexLiteralNode;
}

@@ -7,2 +7,3 @@ "use strict";

const libauth_1 = require("@bitauth/libauth");
const utils_1 = require("@cashscript/utils");
const AbstractParseTreeVisitor_1 = require("antlr4ts/tree/AbstractParseTreeVisitor");

@@ -16,3 +17,2 @@ const semver_1 = __importDefault(require("semver"));

const Errors_1 = require("../Errors");
const Type_1 = require("./Type");
class AstBuilder extends AbstractParseTreeVisitor_1.AbstractParseTreeVisitor {

@@ -74,3 +74,3 @@ constructor(tree) {

visitParameter(ctx) {
const type = Type_1.parseType(ctx.typeName().text);
const type = utils_1.parseType(ctx.typeName().text);
const name = ctx.Identifier().text;

@@ -82,3 +82,3 @@ const parameter = new AST_1.ParameterNode(type, name);

visitVariableDefinition(ctx) {
const type = Type_1.parseType(ctx.typeName().text);
const type = utils_1.parseType(ctx.typeName().text);
const name = ctx.Identifier().text;

@@ -128,3 +128,3 @@ const expression = this.visit(ctx.expression());

visitCast(ctx) {
const type = Type_1.parseType(ctx.typeName().text);
const type = utils_1.parseType(ctx.typeName().text);
const expression = this.visit(ctx._castable);

@@ -208,2 +208,5 @@ const size = ctx._size && this.visit(ctx._size);

}
if (ctx.DateLiteral()) {
return this.createDateLiteral(ctx);
}
if (ctx.HexLiteral()) {

@@ -239,2 +242,16 @@ return this.createHexLiteral(ctx);

}
createDateLiteral(ctx) {
const rawString = ctx.DateLiteral().text;
const stringValue = rawString.substring(6, rawString.length - 2).trim();
if (!/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d$/.test(stringValue)) {
throw new Errors_1.ParseError('Date should be in format `YYYY-MM-DDThh:mm:ss`', Location_1.Location.fromCtx(ctx));
}
const timestamp = Math.round(Date.parse(stringValue) / 1000);
if (Number.isNaN(timestamp)) {
throw new Errors_1.ParseError(`Incorrectly formatted date "${stringValue}"`, Location_1.Location.fromCtx(ctx));
}
const intLiteral = new AST_1.IntLiteralNode(timestamp);
intLiteral.location = Location_1.Location.fromCtx(ctx);
return intLiteral;
}
createHexLiteral(ctx) {

@@ -241,0 +258,0 @@ const hexString = ctx.HexLiteral().text;

@@ -14,3 +14,3 @@ "use strict";

visitOptionalList(nodes) {
return nodes && nodes.map((n) => this.visit(n));
return nodes && this.visitList(nodes);
}

@@ -17,0 +17,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GLOBAL_SYMBOL_TABLE = exports.PreimageField = exports.Class = exports.TimeOp = exports.GlobalFunction = exports.NumberUnit = void 0;
const utils_1 = require("@cashscript/utils");
const SymbolTable_1 = require("./SymbolTable");
const Type_1 = require("./Type");
exports.NumberUnit = {

@@ -58,29 +59,29 @@ SATOSHIS: 1,

// Preimage fields
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.VERSION, new Type_1.BytesType(4)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHPREVOUTS, new Type_1.BytesType(32)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHSEQUENCE, new Type_1.BytesType(32)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.OUTPOINT, new Type_1.BytesType(36)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.BYTECODE, new Type_1.BytesType()));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.VALUE, new Type_1.BytesType(8)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.SEQUENCE, new Type_1.BytesType(4)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHOUTPUTS, new Type_1.BytesType(32)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.LOCKTIME, new Type_1.BytesType(4)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHTYPE, new Type_1.BytesType(4)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.VERSION, new utils_1.BytesType(4)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHPREVOUTS, new utils_1.BytesType(32)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHSEQUENCE, new utils_1.BytesType(32)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.OUTPOINT, new utils_1.BytesType(36)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.BYTECODE, new utils_1.BytesType()));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.VALUE, new utils_1.BytesType(8)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.SEQUENCE, new utils_1.BytesType(4)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHOUTPUTS, new utils_1.BytesType(32)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.LOCKTIME, new utils_1.BytesType(4)));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.global(PreimageField.HASHTYPE, new utils_1.BytesType(4)));
// Classes
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.class(Class.OUTPUT_P2SH, new Type_1.BytesType(32), [new Type_1.BytesType(8), new Type_1.BytesType(20)]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.class(Class.OUTPUT_P2PKH, new Type_1.BytesType(34), [new Type_1.BytesType(8), new Type_1.BytesType(20)]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.class(Class.OUTPUT_NULLDATA, new Type_1.BytesType(), [new Type_1.ArrayType(new Type_1.BytesType())]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.class(Class.OUTPUT_P2SH, new utils_1.BytesType(32), [new utils_1.BytesType(8), new utils_1.BytesType(20)]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.class(Class.OUTPUT_P2PKH, new utils_1.BytesType(34), [new utils_1.BytesType(8), new utils_1.BytesType(20)]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.class(Class.OUTPUT_NULLDATA, new utils_1.BytesType(), [new utils_1.ArrayType(new utils_1.BytesType())]));
// Global functions
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.ABS, Type_1.PrimitiveType.INT, [Type_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.MIN, Type_1.PrimitiveType.INT, [Type_1.PrimitiveType.INT, Type_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.MAX, Type_1.PrimitiveType.INT, [Type_1.PrimitiveType.INT, Type_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.WITHIN, Type_1.PrimitiveType.BOOL, [Type_1.PrimitiveType.INT, Type_1.PrimitiveType.INT, Type_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.RIPEMD160, new Type_1.BytesType(20), [Type_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.SHA1, new Type_1.BytesType(20), [Type_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.SHA256, new Type_1.BytesType(32), [Type_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.HASH160, new Type_1.BytesType(20), [Type_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.HASH256, new Type_1.BytesType(32), [Type_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.CHECKSIG, Type_1.PrimitiveType.BOOL, [Type_1.PrimitiveType.SIG, Type_1.PrimitiveType.PUBKEY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.CHECKMULTISIG, Type_1.PrimitiveType.BOOL, [new Type_1.ArrayType(Type_1.PrimitiveType.SIG), new Type_1.ArrayType(Type_1.PrimitiveType.PUBKEY)]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.CHECKDATASIG, Type_1.PrimitiveType.BOOL, [Type_1.PrimitiveType.DATASIG, new Type_1.BytesType(), Type_1.PrimitiveType.PUBKEY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.ABS, utils_1.PrimitiveType.INT, [utils_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.MIN, utils_1.PrimitiveType.INT, [utils_1.PrimitiveType.INT, utils_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.MAX, utils_1.PrimitiveType.INT, [utils_1.PrimitiveType.INT, utils_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.WITHIN, utils_1.PrimitiveType.BOOL, [utils_1.PrimitiveType.INT, utils_1.PrimitiveType.INT, utils_1.PrimitiveType.INT]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.RIPEMD160, new utils_1.BytesType(20), [utils_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.SHA1, new utils_1.BytesType(20), [utils_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.SHA256, new utils_1.BytesType(32), [utils_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.HASH160, new utils_1.BytesType(20), [utils_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.HASH256, new utils_1.BytesType(32), [utils_1.PrimitiveType.ANY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.CHECKSIG, utils_1.PrimitiveType.BOOL, [utils_1.PrimitiveType.SIG, utils_1.PrimitiveType.PUBKEY]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.CHECKMULTISIG, utils_1.PrimitiveType.BOOL, [new utils_1.ArrayType(utils_1.PrimitiveType.SIG), new utils_1.ArrayType(utils_1.PrimitiveType.PUBKEY)]));
exports.GLOBAL_SYMBOL_TABLE.set(SymbolTable_1.Symbol.function(GlobalFunction.CHECKDATASIG, utils_1.PrimitiveType.BOOL, [utils_1.PrimitiveType.DATASIG, new utils_1.BytesType(), utils_1.PrimitiveType.PUBKEY]));
//# sourceMappingURL=Globals.js.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Point = exports.Location = void 0;
class Location {

@@ -11,3 +12,3 @@ constructor(start, end) {

const stop = ((_a = ctx.stop) === null || _a === void 0 ? void 0 : _a.text) ? ctx.stop : ctx.start;
const textLength = (_b = stop.text, (_b !== null && _b !== void 0 ? _b : '')).length;
const textLength = ((_b = stop.text) !== null && _b !== void 0 ? _b : '').length;
const start = new Point(ctx.start.line, ctx.start.charPositionInLine);

@@ -19,3 +20,3 @@ const end = new Point(stop.line, stop.charPositionInLine + textLength);

var _a;
const textLength = (_a = token.text, (_a !== null && _a !== void 0 ? _a : '')).length;
const textLength = ((_a = token.text) !== null && _a !== void 0 ? _a : '').length;
const start = new Point(token.line, token.charPositionInLine);

@@ -22,0 +23,0 @@ const end = new Point(token.line, token.charPositionInLine + textLength);

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BinaryOperator = exports.UnaryOperator = void 0;
var UnaryOperator;

@@ -4,0 +5,0 @@ (function (UnaryOperator) {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getVersionOpFromCtx = exports.getPragmaName = exports.VersionOp = exports.PragmaName = void 0;
var PragmaName;

@@ -4,0 +5,0 @@ (function (PragmaName) {

@@ -0,3 +1,3 @@

import { Type } from '@cashscript/utils';
import { VariableDefinitionNode, ParameterNode, IdentifierNode, Node } from './AST';
import { Type } from './Type';
export declare class Symbol {

@@ -4,0 +4,0 @@ name: string;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SymbolTable = exports.SymbolType = exports.Symbol = void 0;
class Symbol {

@@ -48,6 +49,4 @@ constructor(name, type, symbolType, definition, parameters) {

get(name) {
var _a;
let symbol = this.symbols.get(name);
symbol = (symbol !== null && symbol !== void 0 ? symbol : (_a = this.parent) === null || _a === void 0 ? void 0 : _a.get(name));
return symbol;
var _a, _b;
return (_a = this.symbols.get(name)) !== null && _a !== void 0 ? _a : (_b = this.parent) === null || _b === void 0 ? void 0 : _b.get(name);
}

@@ -54,0 +53,0 @@ getFromThis(name) {

import { ANTLRErrorListener, RecognitionException, Recognizer } from 'antlr4ts';
/**
* ANTLR Error Listener that immediately throws on error. This is used so that
* ANTLR doesn't attempt any error recovery during lexing/parsing and fails early.
*/
export default class ThrowingErrorListener implements ANTLRErrorListener<any> {
static readonly INSTANCE: ThrowingErrorListener;
syntaxError<T>(recognizer: Recognizer<T, any>, offendingSymbol: T, line: number, charPositionInLine: number, msg: string, e?: RecognitionException): void;
syntaxError<T>(recognizer: Recognizer<T, any>, offendingSymbol: T, line: number, charPositionInLine: number, message: string, e?: RecognitionException): void;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Errors_1 = require("../Errors");
const Location_1 = require("./Location");
/**
* ANTLR Error Listener that immediately throws on error. This is used so that
* ANTLR doesn't attempt any error recovery during lexing/parsing and fails early.
*/
class ThrowingErrorListener {
syntaxError(recognizer, offendingSymbol, line, charPositionInLine, msg, e) {
throw new Errors_1.ParseError(`line ${line}:${charPositionInLine} ${msg}`);
syntaxError(recognizer, offendingSymbol, line, charPositionInLine, message, e) {
const capitalisedMessage = message.charAt(0).toUpperCase() + message.slice(1);
throw new Errors_1.ParseError(capitalisedMessage, new Location_1.Point(line, charPositionInLine));
}

@@ -11,0 +14,0 @@ }

@@ -8,2 +8,3 @@ #! /usr/bin/env node

const libauth_1 = require("@bitauth/libauth");
const utils_1 = require("@cashscript/utils");
const commander_1 = require("commander");

@@ -13,3 +14,2 @@ const fs_1 = __importDefault(require("fs"));

const _1 = require(".");
const util_1 = require("./util");
commander_1.program

@@ -25,6 +25,2 @@ .storeOptionsAsProperties(false)

.option('-s, --size', 'Display the size in bytes of the compiled bytecode.')
.option('-a, --args <args...>', 'List of constructor arguments to pass into the contract. '
+ 'Can only be used in combination with either the --hex or --asm flags. '
+ 'When compiling to a JSON artifact, contract instantiation should be done through the CashScript SDK. '
+ 'Note that NO type checking is performed by the cashc CLI, so it is safer to use the CashScript SDK.')
.parse();

@@ -42,26 +38,6 @@ const opts = commander_1.program.opts();

try {
const artifact = _1.CashCompiler.compileFile(sourceFile);
const script = util_1.Data.asmToScript(artifact.bytecode);
// Parse any provided args and add these to the front of the script
if (opts.args) {
opts.args.forEach((arg) => {
if (arg === 'true') {
script.unshift(util_1.Data.encodeBool(true));
}
else if (arg === 'false') {
script.unshift(util_1.Data.encodeBool(false));
}
else if (arg.startsWith('0x')) {
script.unshift(libauth_1.hexToBin(arg.substring(2)));
}
else if (!Number.isNaN(Number(arg))) {
script.unshift(util_1.Data.encodeInt(Number(arg)));
}
else {
script.unshift(util_1.Data.encodeString(arg));
}
});
}
const opcount = util_1.countOpcodes(script);
const bytesize = util_1.calculateBytesize(script);
const artifact = _1.compileFile(sourceFile);
const script = utils_1.asmToScript(artifact.bytecode);
const opcount = utils_1.countOpcodes(script);
const bytesize = utils_1.calculateBytesize(script);
if (opcount > 201) {

@@ -74,7 +50,7 @@ console.warn('Warning: Your contract\'s opcount is over the limit of 201 and will not be accepted by the BCH network');

if (opts.asm) {
console.log(util_1.Data.scriptToAsm(script));
console.log(utils_1.scriptToAsm(script));
return;
}
if (opts.hex) {
console.log(libauth_1.binToHex(util_1.Data.scriptToBytecode(script)));
console.log(libauth_1.binToHex(utils_1.scriptToBytecode(script)));
return;

@@ -98,3 +74,3 @@ }

}
_1.Artifacts.export(artifact, outputFile);
utils_1.exportArtifact(artifact, outputFile);
}

@@ -101,0 +77,0 @@ else {

@@ -1,4 +0,5 @@

import { IdentifierNode, FunctionDefinitionNode, VariableDefinitionNode, ParameterNode, Node, FunctionCallNode, BinaryOpNode, UnaryOpNode, TimeOpNode, CastNode, AssignNode, BranchNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode } from './ast/AST';
import { Type, PrimitiveType } from './ast/Type';
import { Type, PrimitiveType } from '@cashscript/utils';
import { IdentifierNode, FunctionDefinitionNode, VariableDefinitionNode, ParameterNode, Node, FunctionCallNode, BinaryOpNode, UnaryOpNode, TimeOpNode, CastNode, AssignNode, BranchNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode, StatementNode, ContractNode } from './ast/AST';
import { Symbol, SymbolType } from './ast/SymbolTable';
import { Location, Point } from './ast/Location';
export declare class CashScriptError extends Error {

@@ -9,2 +10,3 @@ node: Node;

export declare class ParseError extends Error {
constructor(message: string, location?: Point | Location);
}

@@ -34,6 +36,18 @@ export declare class UndefinedReferenceError extends CashScriptError {

}
export declare class EmptyContractError extends CashScriptError {
node: ContractNode;
constructor(node: ContractNode);
}
export declare class EmptyFunctionError extends CashScriptError {
node: FunctionDefinitionNode;
constructor(node: FunctionDefinitionNode);
}
export declare class FinalRequireStatementError extends CashScriptError {
node: StatementNode;
constructor(node: StatementNode);
}
export declare class TypeError extends CashScriptError {
actual?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined;
expected?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined;
constructor(node: Node, actual?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined, expected?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined, message?: string);
actual?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined;
expected?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined;
constructor(node: Node, actual?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined, expected?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined, message?: string);
}

@@ -40,0 +54,0 @@ export declare class InvalidParameterTypeError extends TypeError {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UnverifiedCovenantError = exports.VersionError = exports.IndexOutOfBoundsError = exports.ArrayElementError = exports.ConstantConditionError = exports.AssignTypeError = exports.CastSizeError = exports.CastTypeError = exports.UnsupportedTypeError = exports.UnequalTypeError = exports.InvalidParameterTypeError = exports.TypeError = exports.FinalRequireStatementError = exports.EmptyFunctionError = exports.EmptyContractError = exports.UnusedVariableError = exports.VariableRedefinitionError = exports.FunctionRedefinitionError = exports.RedefinitionError = exports.InvalidSymbolTypeError = exports.UndefinedReferenceError = exports.ParseError = exports.CashScriptError = void 0;
const utils_1 = require("@cashscript/utils");
const AST_1 = require("./ast/AST");
const Type_1 = require("./ast/Type");
const Location_1 = require("./ast/Location");
class CashScriptError extends Error {

@@ -17,2 +19,10 @@ constructor(node, message) {

class ParseError extends Error {
constructor(message, location) {
const start = location instanceof Location_1.Point ? location : location === null || location === void 0 ? void 0 : location.start;
if (start) {
message += ` at ${start}`;
}
super(message);
this.name = this.constructor.name;
}
}

@@ -60,5 +70,26 @@ exports.ParseError = ParseError;

exports.UnusedVariableError = UnusedVariableError;
class EmptyContractError extends CashScriptError {
constructor(node) {
super(node, `Contract ${node.name} contains no functions`);
this.node = node;
}
}
exports.EmptyContractError = EmptyContractError;
class EmptyFunctionError extends CashScriptError {
constructor(node) {
super(node, `Function ${node.name} contains no statements`);
this.node = node;
}
}
exports.EmptyFunctionError = EmptyFunctionError;
class FinalRequireStatementError extends CashScriptError {
constructor(node) {
super(node, 'Final statement is expected to be a require() statement');
this.node = node;
}
}
exports.FinalRequireStatementError = FinalRequireStatementError;
class TypeError extends CashScriptError {
constructor(node, actual, expected, message) {
super(node, (message !== null && message !== void 0 ? message : `Found type '${actual}' where type '${expected}' was expected`));
super(node, message !== null && message !== void 0 ? message : `Found type '${actual}' where type '${expected}' was expected`);
this.actual = actual;

@@ -87,3 +118,3 @@ this.expected = expected;

if (node instanceof AST_1.BinaryOpNode && node.operator.startsWith('.')) {
if (expected === Type_1.PrimitiveType.INT) {
if (expected === utils_1.PrimitiveType.INT) {
super(node, actual, expected, `Tried to call member 'split' with unsupported parameter type '${actual}'`);

@@ -90,0 +121,0 @@ }

@@ -0,5 +1,5 @@

import { Script } from '@cashscript/utils';
import { ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode, SourceFileNode, Node, InstantiationNode } from '../ast/AST';
import AstTraversal from '../ast/AstTraversal';
import { PreimageField } from '../ast/Globals';
import { Script } from './Script';
export default class GenerateTargetTraversal extends AstTraversal {

@@ -22,2 +22,3 @@ output: Script;

decodePreimage(fields: PreimageField[]): void;
removeFinalVerify(): void;
cleanStack(): void;

@@ -24,0 +25,0 @@ visitParameter(node: ParameterNode): Node;

@@ -7,10 +7,9 @@ "use strict";

const libauth_1 = require("@bitauth/libauth");
const utils_1 = require("@cashscript/utils");
const AST_1 = require("../ast/AST");
const AstTraversal_1 = __importDefault(require("../ast/AstTraversal"));
const Globals_1 = require("../ast/Globals");
const Type_1 = require("../ast/Type");
const Script_1 = require("./Script");
const util_1 = require("../util");
const preimage_1 = require("./preimage");
const Operator_1 = require("../ast/Operator");
const utils_2 = require("./utils");
class GenerateTargetTraversal extends AstTraversal_1.default {

@@ -61,3 +60,3 @@ constructor() {

// Minimally encode output by going Script -> ASM -> Script
this.output = util_1.Data.asmToScript(util_1.Data.scriptToAsm(this.output));
this.output = utils_1.asmToScript(utils_1.scriptToAsm(this.output));
return node;

@@ -75,23 +74,23 @@ }

const selectorIndex = this.getStackIndex('$$');
this.emit(util_1.Data.encodeInt(selectorIndex));
this.emit(utils_1.encodeInt(selectorIndex));
if (i === node.functions.length - 1) {
this.emit(Script_1.Op.OP_ROLL);
this.emit(utils_1.Op.OP_ROLL);
this.removeFromStack(selectorIndex);
}
else {
this.emit(Script_1.Op.OP_PICK);
this.emit(utils_1.Op.OP_PICK);
}
// All functions are if-else statements, except the final one which is
// enforced with NUMEQUALVERIFY
this.emit(util_1.Data.encodeInt(i));
this.emit(Script_1.Op.OP_NUMEQUAL);
this.emit(utils_1.encodeInt(i));
this.emit(utils_1.Op.OP_NUMEQUAL);
if (i < node.functions.length - 1) {
this.emit(Script_1.Op.OP_IF);
this.emit(utils_1.Op.OP_IF);
}
else {
this.emit(Script_1.Op.OP_VERIFY);
this.emit(utils_1.Op.OP_VERIFY);
}
f = this.visit(f);
if (i < node.functions.length - 1) {
this.emit(Script_1.Op.OP_ELSE);
this.emit(utils_1.Op.OP_ELSE);
}

@@ -102,3 +101,3 @@ this.stack = [...stackCopy];

for (let i = 0; i < node.functions.length - 1; i += 1) {
this.emit(Script_1.Op.OP_ENDIF);
this.emit(utils_1.Op.OP_ENDIF);
}

@@ -116,13 +115,3 @@ }

node.body = this.visit(node.body);
// Remove final OP_VERIFY
// If the final opcodes are OP_CHECK{LOCKTIME|SEQUENCE}VERIFY OP_DROP
// Or if the final opcode is OP_ENDIF
// Or if the remaining stack size >=5 (2DROP 2DROP 1 < NIP NIP NIP NIP)
// then push it back to the script, and push OP_TRUE (OP_1) to the stack
const finalOp = this.output.pop();
this.pushToStack('(value)');
if (finalOp === Script_1.Op.OP_DROP || finalOp === Script_1.Op.OP_ENDIF || (finalOp && this.stack.length >= 5)) {
this.emit(finalOp);
this.emit(Script_1.Op.OP_1);
}
this.removeFinalVerify();
this.cleanStack();

@@ -134,4 +123,4 @@ return node;

this.pushToStack('$preimage', true);
this.emit(util_1.Data.encodeInt(this.getStackIndex('$preimage')));
this.emit(Script_1.Op.OP_PICK);
this.emit(utils_1.encodeInt(this.getStackIndex('$preimage')));
this.emit(utils_1.Op.OP_PICK);
const cuts = {

@@ -150,8 +139,8 @@ fromStart: 0,

if (start !== 0) {
this.emit(util_1.Data.encodeInt(start));
this.emit(Script_1.Op.OP_SPLIT);
this.emit(Script_1.Op.OP_NIP);
this.emit(utils_1.encodeInt(start));
this.emit(utils_1.Op.OP_SPLIT);
this.emit(utils_1.Op.OP_NIP);
}
this.emit(util_1.Data.encodeInt(part.size));
this.emit(Script_1.Op.OP_SPLIT);
this.emit(utils_1.encodeInt(part.size));
this.emit(utils_1.Op.OP_SPLIT);
this.pushToStack(field);

@@ -166,10 +155,10 @@ cuts.fromStart = part.fromStart + part.size;

// See ReplaceBytecodeNop.ts
this.emit(Script_1.Op.OP_NOP);
this.emit(util_1.Data.encodeInt(start));
this.emit(Script_1.Op.OP_SPLIT);
this.emit(Script_1.Op.OP_NIP);
this.emit(Script_1.Op.OP_SIZE);
this.emit(util_1.Data.encodeInt(part.size));
this.emit(Script_1.Op.OP_SUB);
this.emit(Script_1.Op.OP_SPLIT);
this.emit(utils_1.Op.OP_NOP);
this.emit(utils_1.encodeInt(start));
this.emit(utils_1.Op.OP_SPLIT);
this.emit(utils_1.Op.OP_NIP);
this.emit(utils_1.Op.OP_SIZE);
this.emit(utils_1.encodeInt(part.size));
this.emit(utils_1.Op.OP_SUB);
this.emit(utils_1.Op.OP_SPLIT);
this.pushToStack(Globals_1.PreimageField.BYTECODE);

@@ -190,12 +179,12 @@ cuts.fromStart = 0;

if (end > 0) {
this.emit(Script_1.Op.OP_SIZE);
this.emit(util_1.Data.encodeInt(end));
this.emit(Script_1.Op.OP_SUB);
this.emit(Script_1.Op.OP_SPLIT);
this.emit(Script_1.Op.OP_NIP);
this.emit(utils_1.Op.OP_SIZE);
this.emit(utils_1.encodeInt(end));
this.emit(utils_1.Op.OP_SUB);
this.emit(utils_1.Op.OP_SPLIT);
this.emit(utils_1.Op.OP_NIP);
}
else if (start !== 0) {
this.emit(util_1.Data.encodeInt(start));
this.emit(Script_1.Op.OP_SPLIT);
this.emit(Script_1.Op.OP_NIP);
this.emit(utils_1.encodeInt(start));
this.emit(utils_1.Op.OP_SPLIT);
this.emit(utils_1.Op.OP_NIP);
}

@@ -205,4 +194,4 @@ this.pushToStack(field);

return;
this.emit(util_1.Data.encodeInt(part.size));
this.emit(Script_1.Op.OP_SPLIT);
this.emit(utils_1.encodeInt(part.size));
this.emit(utils_1.Op.OP_SPLIT);
cuts.fromStart = part.fromStart + part.size;

@@ -213,5 +202,27 @@ cuts.fromEnd = part.fromEnd - part.size;

if (!fields.includes(Globals_1.PreimageField.HASHTYPE)) {
this.emit(Script_1.Op.OP_DROP);
this.emit(utils_1.Op.OP_DROP);
}
}
removeFinalVerify() {
// After EnsureFinalRequireTraversal, we know that the final opcodes are either
// "OP_VERIFY", "OP_CHECK{LOCKTIME|SEQUENCE}VERIFY OP_DROP" or "OP_ENDIF"
const finalOp = this.output.pop();
// If the final op is OP_VERIFY and the stack size is less than 4 we remove it from the script
// - We have the stack size check because it is more efficient to use 2DROP rather than NIP
// if >= 4 elements are left (5 including final value) (e.g. 2DROP 2DROP 1 < NIP NIP NIP NIP)
if (finalOp === utils_1.Op.OP_VERIFY && this.stack.length < 4) {
// Since the final value is no longer popped from the stack by OP_VERIFY,
// we add it back to the stack
this.pushToStack('(value)');
}
else {
this.emit(finalOp);
// At this point there is no verification value left on the stack:
// - scoped stack is cleared inside branch ended by OP_ENDIF
// - OP_CHECK{LOCKTIME|SEQUENCE}VERIFY OP_DROP does not leave a verification value
// so we add OP_1 to the script (indicating success)
this.emit(utils_1.Op.OP_1);
this.pushToStack('(value)');
}
}
cleanStack() {

@@ -221,3 +232,3 @@ // Keep final verification value, OP_NIP the other stack values

for (let i = 0; i < stackSize - 1; i += 1) {
this.emit(Script_1.Op.OP_NIP);
this.emit(utils_1.Op.OP_NIP);
this.nipFromStack();

@@ -251,13 +262,13 @@ }

emitReplace(index) {
this.emit(util_1.Data.encodeInt(index));
this.emit(Script_1.Op.OP_ROLL);
this.emit(Script_1.Op.OP_DROP);
this.emit(utils_1.encodeInt(index));
this.emit(utils_1.Op.OP_ROLL);
this.emit(utils_1.Op.OP_DROP);
for (let i = 0; i < index - 1; i += 1) {
this.emit(Script_1.Op.OP_SWAP);
this.emit(utils_1.Op.OP_SWAP);
if (i < index - 2) {
this.emit(Script_1.Op.OP_TOALTSTACK);
this.emit(utils_1.Op.OP_TOALTSTACK);
}
}
for (let i = 0; i < index - 2; i += 1) {
this.emit(Script_1.Op.OP_FROMALTSTACK);
this.emit(utils_1.Op.OP_FROMALTSTACK);
}

@@ -267,3 +278,3 @@ }

node.expression = this.visit(node.expression);
this.emit(Script_1.toOps.fromTimeOp(node.timeOp));
this.emit(utils_2.compileTimeOp(node.timeOp));
this.popFromStack();

@@ -277,3 +288,3 @@ return node;

this.isCheckSigVerify = false;
this.emit(Script_1.Op.OP_VERIFY);
this.emit(utils_1.Op.OP_VERIFY);
this.popFromStack();

@@ -293,3 +304,3 @@ return node;

this.scopeDepth += 1;
this.emit(Script_1.Op.OP_IF);
this.emit(utils_1.Op.OP_IF);
let stackDepth = this.stack.length;

@@ -299,3 +310,3 @@ node.ifBlock = this.visit(node.ifBlock);

if (node.elseBlock) {
this.emit(Script_1.Op.OP_ELSE);
this.emit(utils_1.Op.OP_ELSE);
stackDepth = this.stack.length;

@@ -305,3 +316,3 @@ node.elseBlock = this.visit(node.elseBlock);

}
this.emit(Script_1.Op.OP_ENDIF);
this.emit(utils_1.Op.OP_ENDIF);
this.scopeDepth -= 1;

@@ -313,3 +324,3 @@ return node;

for (let i = 0; i < dropCount; i += 1) {
this.emit(Script_1.Op.OP_DROP);
this.emit(utils_1.Op.OP_DROP);
this.popFromStack();

@@ -323,6 +334,6 @@ }

node.size = this.visit(node.size);
this.emit(Script_1.Op.OP_NUM2BIN);
this.emit(utils_1.Op.OP_NUM2BIN);
this.popFromStack();
}
this.emit(Script_1.toOps.fromCast(node.expression.type, node.type));
this.emit(utils_2.compileCast(node.expression.type, node.type));
this.popFromStack();

@@ -339,3 +350,3 @@ this.pushToStack('(value)');

this.verifyCovenant();
this.emit(Script_1.toOps.fromFunction(node.identifier.name));
this.emit(utils_2.compileGlobalFunction(node.identifier.name));
this.popFromStack(node.parameters.length);

@@ -346,5 +357,5 @@ this.pushToStack('(value)');

visitMultiSig(node) {
this.emit(util_1.Data.encodeBool(false));
this.emit(utils_1.encodeBool(false));
node.parameters = this.visitList(node.parameters);
this.emit(Script_1.Op.OP_CHECKMULTISIG);
this.emit(utils_1.Op.OP_CHECKMULTISIG);
const sigs = node.parameters[0];

@@ -369,17 +380,17 @@ const pks = node.parameters[1];

// Duplicate [s, pk] that are on stack
this.emit(Script_1.Op.OP_2DUP);
this.emit(utils_1.Op.OP_2DUP);
this.pushToStack('(value)');
this.pushToStack('(value)');
// Turn sig into datasig
this.emit([Script_1.Op.OP_SWAP, Script_1.Op.OP_SIZE, Script_1.Op.OP_1SUB, Script_1.Op.OP_SPLIT, Script_1.Op.OP_DROP]);
this.emit([utils_1.Op.OP_SWAP, utils_1.Op.OP_SIZE, utils_1.Op.OP_1SUB, utils_1.Op.OP_SPLIT, utils_1.Op.OP_DROP]);
// Retrieve preimage from stack and hash it
const preimageIndex = this.getStackIndex('$preimage');
this.removeFromStack(preimageIndex);
this.emit(util_1.Data.encodeInt(preimageIndex));
this.emit(Script_1.Op.OP_ROLL);
this.emit(Script_1.Op.OP_SHA256);
this.emit(utils_1.encodeInt(preimageIndex));
this.emit(utils_1.Op.OP_ROLL);
this.emit(utils_1.Op.OP_SHA256);
this.pushToStack('(value)');
// Order arguments and perform OP_CHECKDATASIGVERIFY
this.emit(Script_1.Op.OP_ROT);
this.emit(Script_1.Op.OP_CHECKDATASIGVERIFY);
this.emit(utils_1.Op.OP_ROT);
this.emit(utils_1.Op.OP_CHECKDATASIGVERIFY);
this.popFromStack(3);

@@ -394,9 +405,9 @@ this.covenantNeedsToBeVerified = false;

this.emit(libauth_1.hexToBin('1976a914'));
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
// <pkh>
this.visit(node.parameters[1]);
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
// OP_EQUAL OP_CHECKSIG
this.emit(libauth_1.hexToBin('88ac'));
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
this.popFromStack(2);

@@ -409,9 +420,9 @@ }

this.emit(libauth_1.hexToBin('17a914'));
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
// <script hash>
this.visit(node.parameters[1]);
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
// OP_EQUAL
this.emit(libauth_1.hexToBin('87'));
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
this.popFromStack(2);

@@ -432,3 +443,3 @@ }

// Push the element's size (and calculate VarInt)
this.emit(Script_1.Op.OP_SIZE);
this.emit(utils_1.Op.OP_SIZE);
if (el instanceof AST_1.HexLiteralNode) {

@@ -438,4 +449,4 @@ // If the argument is a literal, we know its size

this.emit(libauth_1.hexToBin('4c'));
this.emit(Script_1.Op.OP_SWAP);
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_SWAP);
this.emit(utils_1.Op.OP_CAT);
}

@@ -445,22 +456,22 @@ }

// If the argument is not a literal, the script needs to check size
this.emit(Script_1.Op.OP_DUP);
this.emit(util_1.Data.encodeInt(75));
this.emit(Script_1.Op.OP_GREATERTHAN);
this.emit(Script_1.Op.OP_IF);
this.emit(utils_1.Op.OP_DUP);
this.emit(utils_1.encodeInt(75));
this.emit(utils_1.Op.OP_GREATERTHAN);
this.emit(utils_1.Op.OP_IF);
this.emit(libauth_1.hexToBin('4c'));
this.emit(Script_1.Op.OP_SWAP);
this.emit(Script_1.Op.OP_CAT);
this.emit(Script_1.Op.OP_ENDIF);
this.emit(utils_1.Op.OP_SWAP);
this.emit(utils_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_ENDIF);
}
// Concat size and arguments
this.emit(Script_1.Op.OP_SWAP);
this.emit(Script_1.Op.OP_CAT);
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_SWAP);
this.emit(utils_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
this.popFromStack();
});
// <VarInt total script size>
this.emit(Script_1.Op.OP_SIZE);
this.emit(Script_1.Op.OP_SWAP);
this.emit(Script_1.Op.OP_CAT);
this.emit(Script_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_SIZE);
this.emit(utils_1.Op.OP_SWAP);
this.emit(utils_1.Op.OP_CAT);
this.emit(utils_1.Op.OP_CAT);
this.popFromStack(2);

@@ -477,7 +488,7 @@ }

if (node.index === 0) {
this.emit(Script_1.Op.OP_DROP);
this.emit(utils_1.Op.OP_DROP);
this.popFromStack();
}
else if (node.index === 1) {
this.emit(Script_1.Op.OP_NIP);
this.emit(utils_1.Op.OP_NIP);
this.nipFromStack();

@@ -490,3 +501,4 @@ }

node.right = this.visit(node.right);
this.emit(Script_1.toOps.fromBinaryOp(node.operator, Type_1.resultingType(node.left.type, node.right.type) === Type_1.PrimitiveType.INT));
const isNumeric = utils_1.resultingType(node.left.type, node.right.type) === utils_1.PrimitiveType.INT;
this.emit(utils_2.compileBinaryOp(node.operator, isNumeric));
this.popFromStack(2);

@@ -500,3 +512,3 @@ this.pushToStack('(value)');

node.expression = this.visit(node.expression);
this.emit(Script_1.toOps.fromUnaryOp(node.operator));
this.emit(utils_2.compileUnaryOp(node.operator));
this.popFromStack();

@@ -508,3 +520,3 @@ this.pushToStack('(value)');

node.elements = this.visitList(node.elements);
this.emit(util_1.Data.encodeInt(node.elements.length));
this.emit(utils_1.encodeInt(node.elements.length));
this.pushToStack('(value)');

@@ -515,11 +527,11 @@ return node;

const stackIndex = this.getStackIndex(node.name);
this.emit(util_1.Data.encodeInt(stackIndex));
this.emit(utils_1.encodeInt(stackIndex));
// If the final use is inside an if-statement, we still OP_PICK it
// We do this so that there's no difference in stack depths between execution paths
if (this.isOpRoll(node)) {
this.emit(Script_1.Op.OP_ROLL);
this.emit(utils_1.Op.OP_ROLL);
this.removeFromStack(stackIndex);
}
else {
this.emit(Script_1.Op.OP_PICK);
this.emit(utils_1.Op.OP_PICK);
}

@@ -533,3 +545,3 @@ this.pushToStack('(value)');

visitBoolLiteral(node) {
this.emit(util_1.Data.encodeBool(node.value));
this.emit(utils_1.encodeBool(node.value));
this.pushToStack('(value)');

@@ -539,3 +551,3 @@ return node;

visitIntLiteral(node) {
this.emit(util_1.Data.encodeInt(node.value));
this.emit(utils_1.encodeInt(node.value));
this.pushToStack('(value)');

@@ -545,3 +557,3 @@ return node;

visitStringLiteral(node) {
this.emit(util_1.Data.encodeString(node.value));
this.emit(utils_1.encodeString(node.value));
this.pushToStack('(value)');

@@ -548,0 +560,0 @@ return node;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PreimageParts = void 0;
const Globals_1 = require("../ast/Globals");

@@ -4,0 +5,0 @@ exports.PreimageParts = {

@@ -56,9 +56,10 @@ import { ATN } from "antlr4ts/atn/ATN";

static readonly StringLiteral = 50;
static readonly HexLiteral = 51;
static readonly TxVar = 52;
static readonly PreimageField = 53;
static readonly Identifier = 54;
static readonly WHITESPACE = 55;
static readonly COMMENT = 56;
static readonly LINE_COMMENT = 57;
static readonly DateLiteral = 51;
static readonly HexLiteral = 52;
static readonly TxVar = 53;
static readonly PreimageField = 54;
static readonly Identifier = 55;
static readonly WHITESPACE = 56;
static readonly COMMENT = 57;
static readonly LINE_COMMENT = 58;
static readonly channelNames: string[];

@@ -65,0 +66,0 @@ static readonly modeNames: string[];

"use strict";
// Generated from src/grammar/CashScript.g4 by ANTLR 4.7.3-SNAPSHOT
// Generated from src/grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CashScriptLexer = void 0;
const ATNDeserializer_1 = require("antlr4ts/atn/ATNDeserializer");

@@ -95,9 +108,10 @@ const Lexer_1 = require("antlr4ts/Lexer");

CashScriptLexer.StringLiteral = 50;
CashScriptLexer.HexLiteral = 51;
CashScriptLexer.TxVar = 52;
CashScriptLexer.PreimageField = 53;
CashScriptLexer.Identifier = 54;
CashScriptLexer.WHITESPACE = 55;
CashScriptLexer.COMMENT = 56;
CashScriptLexer.LINE_COMMENT = 57;
CashScriptLexer.DateLiteral = 51;
CashScriptLexer.HexLiteral = 52;
CashScriptLexer.TxVar = 53;
CashScriptLexer.PreimageField = 54;
CashScriptLexer.Identifier = 55;
CashScriptLexer.WHITESPACE = 56;
CashScriptLexer.COMMENT = 57;
CashScriptLexer.LINE_COMMENT = 58;
// tslint:disable:no-trailing-whitespace

@@ -118,4 +132,4 @@ CashScriptLexer.channelNames = [

"T__41", "T__42", "VersionLiteral", "BooleanLiteral", "NumberUnit", "NumberLiteral",
"Bytes", "Bound", "StringLiteral", "HexLiteral", "TxVar", "PreimageField",
"Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
"Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", "TxVar",
"PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
];

@@ -138,8 +152,8 @@ CashScriptLexer._LITERAL_NAMES = [

undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit",
"NumberLiteral", "Bytes", "Bound", "StringLiteral", "HexLiteral", "TxVar",
"PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
"NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral",
"TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
];
CashScriptLexer.VOCABULARY = new VocabularyImpl_1.VocabularyImpl(CashScriptLexer._LITERAL_NAMES, CashScriptLexer._SYMBOLIC_NAMES, []);
CashScriptLexer._serializedATNSegments = 2;
CashScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02;\u0271\b\x01" +
CashScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02<\u027C\b\x01" +
"\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +

@@ -153,284 +167,288 @@ "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +

"+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" +
"4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x03\x02\x03\x02\x03" +
"\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04\x03" +
"4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x03\x02\x03" +
"\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03" +
"\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" +
"\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\t" +
"\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03" +
"\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F" +
"\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11" +
"\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" +
"\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15" +
"\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18\x03\x18" +
"\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" +
"\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" +
"\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D\x03\x1D" +
"\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 \x03 \x03" +
"!\x03!\x03!\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03%\x03&" +
"\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03)\x03)" +
"\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03+\x03" +
"+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x06-\u0126\n" +
"-\r-\x0E-\u0127\x03-\x03-\x06-\u012C\n-\r-\x0E-\u012D\x03-\x03-\x06-\u0132" +
"\n-\r-\x0E-\u0133\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x05.\u013F" +
"\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03" +
"\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" +
"\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F" +
"\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10" +
"\x03\x11\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" +
"\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" +
"\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18" +
"\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" +
"\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" +
"\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" +
"\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 " +
"\x03 \x03!\x03!\x03!\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03" +
"%\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03" +
")\x03)\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" +
"+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x06-\u0128" +
"\n-\r-\x0E-\u0129\x03-\x03-\x06-\u012E\n-\r-\x0E-\u012F\x03-\x03-\x06" +
"-\u0134\n-\r-\x0E-\u0135\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03." +
"\x05.\u0141\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/" +
"\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x05/\u017A\n/\x030\x050\u017D\n0\x030\x060\u0180\n0\r0\x0E0\u0181" +
"\x030\x030\x060\u0186\n0\r0\x0E0\u0187\x050\u018A\n0\x031\x031\x031\x03" +
"1\x031\x031\x031\x051\u0193\n1\x032\x032\x072\u0197\n2\f2\x0E2\u019A\v" +
"2\x033\x033\x033\x033\x073\u01A0\n3\f3\x0E3\u01A3\v3\x033\x033\x033\x03" +
"3\x033\x073\u01AA\n3\f3\x0E3\u01AD\v3\x033\x053\u01B0\n3\x034\x034\x03" +
"4\x074\u01B5\n4\f4\x0E4\u01B8\v4\x035\x035\x035\x035\x035\x035\x035\x03" +
"5\x035\x035\x035\x035\x035\x055\u01C7\n5\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x056\u0249\n6\x03" +
"7\x037\x077\u024D\n7\f7\x0E7\u0250\v7\x038\x068\u0253\n8\r8\x0E8\u0254" +
"\x038\x038\x039\x039\x039\x039\x079\u025D\n9\f9\x0E9\u0260\v9\x039\x03" +
"9\x039\x039\x039\x03:\x03:\x03:\x03:\x07:\u026B\n:\f:\x0E:\u026E\v:\x03" +
":\x03:\x05\u01A1\u01AB\u025E\x02\x02;\x03\x02\x03\x05\x02\x04\x07\x02" +
"\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02" +
"\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12" +
"#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02" +
"\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C" +
"\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02" +
".[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02" +
":s\x02;\x03\x02\x0E\x03\x022;\x03\x02//\x04\x02GGgg\x03\x023;\x05\x02" +
"\f\f\x0F\x0F$$\x05\x02\f\f\x0F\x0F))\x04\x02ZZzz\x05\x022;CHch\x04\x02" +
"C\\c|\x06\x022;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02" +
"\u0298\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02" +
"\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02" +
"\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02" +
"\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02" +
"\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02" +
"\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02" +
"\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03" +
"\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02" +
"\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02" +
";\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02" +
"\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02" +
"\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03" +
"\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02" +
"\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02" +
"]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02" +
"\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02" +
"\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03" +
"\x02\x02\x02\x02s\x03\x02\x02\x02\x03u\x03\x02\x02\x02\x05|\x03\x02\x02" +
"\x02\x07~\x03\x02\x02\x02\t\x89\x03\x02\x02\x02\v\x8B\x03\x02\x02\x02" +
"\r\x8D\x03\x02\x02\x02\x0F\x90\x03\x02\x02\x02\x11\x92\x03\x02\x02\x02" +
"\x13\x94\x03\x02\x02\x02\x15\x97\x03\x02\x02\x02\x17\x99\x03\x02\x02\x02" +
"\x19\xA2\x03\x02\x02\x02\x1B\xA4\x03\x02\x02\x02\x1D\xA6\x03\x02\x02\x02" +
"\x1F\xAF\x03\x02\x02\x02!\xB1\x03\x02\x02\x02#\xB3\x03\x02\x02\x02%\xB5" +
"\x03\x02\x02\x02\'\xBD\x03\x02\x02\x02)\xC0\x03\x02\x02\x02+\xC5\x03\x02" +
"\x02\x02-\xC9\x03\x02\x02\x02/\xCB\x03\x02\x02\x021\xCD\x03\x02\x02\x02" +
"3\xD8\x03\x02\x02\x025\xE0\x03\x02\x02\x027\xE2\x03\x02\x02\x029\xE4\x03" +
"\x02\x02\x02;\xEB\x03\x02\x02\x02=\xED\x03\x02\x02\x02?\xEF\x03\x02\x02" +
"\x02A\xF1\x03\x02\x02\x02C\xF4\x03\x02\x02\x02E\xF7\x03\x02\x02\x02G\xF9" +
"\x03\x02\x02\x02I\xFB\x03\x02\x02\x02K\xFE\x03\x02\x02\x02M\u0101\x03" +
"\x02\x02\x02O\u0105\x03\x02\x02\x02Q\u010A\x03\x02\x02\x02S\u0111\x03" +
"\x02\x02\x02U\u0118\x03\x02\x02\x02W\u011C\x03\x02\x02\x02Y\u0125\x03" +
"\x02\x02\x02[\u013E\x03\x02\x02\x02]\u0179\x03\x02\x02\x02_\u017C\x03" +
"\x02\x02\x02a\u018B\x03\x02\x02\x02c\u0194\x03\x02\x02\x02e\u01AF\x03" +
"\x02\x02\x02g\u01B1\x03\x02\x02\x02i\u01C6\x03\x02\x02\x02k\u0248\x03" +
"\x02\x02\x02m\u024A\x03\x02\x02\x02o\u0252\x03\x02\x02\x02q\u0258\x03" +
"\x02\x02\x02s\u0266\x03\x02\x02\x02uv\x07r\x02\x02vw\x07t\x02\x02wx\x07" +
"c\x02\x02xy\x07i\x02\x02yz\x07o\x02\x02z{\x07c\x02\x02{\x04\x03\x02\x02" +
"\x02|}\x07=\x02\x02}\x06\x03\x02\x02\x02~\x7F\x07e\x02\x02\x7F\x80\x07" +
"c\x02\x02\x80\x81\x07u\x02\x02\x81\x82\x07j\x02\x02\x82\x83\x07u\x02\x02" +
"\x83\x84\x07e\x02\x02\x84\x85\x07t\x02\x02\x85\x86\x07k\x02\x02\x86\x87" +
"\x07r\x02\x02\x87\x88\x07v\x02\x02\x88\b\x03\x02\x02\x02\x89\x8A\x07`" +
"\x02\x02\x8A\n\x03\x02\x02\x02\x8B\x8C\x07\x80\x02\x02\x8C\f\x03\x02\x02" +
"\x02\x8D\x8E\x07@\x02\x02\x8E\x8F\x07?\x02\x02\x8F\x0E\x03\x02\x02\x02" +
"\x90\x91\x07@\x02\x02\x91\x10\x03\x02\x02\x02\x92\x93\x07>\x02\x02\x93" +
"\x12\x03\x02\x02\x02\x94\x95\x07>\x02\x02\x95\x96\x07?\x02\x02\x96\x14" +
"\x03\x02\x02\x02\x97\x98\x07?\x02\x02\x98\x16\x03\x02\x02\x02\x99\x9A" +
"\x07e\x02\x02\x9A\x9B\x07q\x02\x02\x9B\x9C\x07p\x02\x02\x9C\x9D\x07v\x02" +
"\x02\x9D\x9E\x07t\x02\x02\x9E\x9F\x07c\x02\x02\x9F\xA0\x07e\x02\x02\xA0" +
"\xA1\x07v\x02\x02\xA1\x18\x03\x02\x02\x02\xA2\xA3\x07}\x02\x02\xA3\x1A" +
"\x03\x02\x02\x02\xA4\xA5\x07\x7F\x02\x02\xA5\x1C\x03\x02\x02\x02\xA6\xA7" +
"\x07h\x02\x02\xA7\xA8\x07w\x02\x02\xA8\xA9\x07p\x02\x02\xA9\xAA\x07e\x02" +
"\x02\xAA\xAB\x07v\x02\x02\xAB\xAC\x07k\x02\x02\xAC\xAD\x07q\x02\x02\xAD" +
"\xAE\x07p\x02\x02\xAE\x1E\x03\x02\x02\x02\xAF\xB0\x07*\x02\x02\xB0 \x03" +
"\x02\x02\x02\xB1\xB2\x07.\x02\x02\xB2\"\x03\x02\x02\x02\xB3\xB4\x07+\x02" +
"\x02\xB4$\x03\x02\x02\x02\xB5\xB6\x07t\x02\x02\xB6\xB7\x07g\x02\x02\xB7" +
"\xB8\x07s\x02\x02\xB8\xB9\x07w\x02\x02\xB9\xBA\x07k\x02\x02\xBA\xBB\x07" +
"t\x02\x02\xBB\xBC\x07g\x02\x02\xBC&\x03\x02\x02\x02\xBD\xBE\x07k\x02\x02" +
"\xBE\xBF\x07h\x02\x02\xBF(\x03\x02\x02\x02\xC0\xC1\x07g\x02\x02\xC1\xC2" +
"\x07n\x02\x02\xC2\xC3\x07u\x02\x02\xC3\xC4\x07g\x02\x02\xC4*\x03\x02\x02" +
"\x02\xC5\xC6\x07p\x02\x02\xC6\xC7\x07g\x02\x02\xC7\xC8\x07y\x02\x02\xC8" +
",\x03\x02\x02\x02\xC9\xCA\x07]\x02\x02\xCA.\x03\x02\x02\x02\xCB\xCC\x07" +
"_\x02\x02\xCC0\x03\x02\x02\x02\xCD\xCE\x070\x02\x02\xCE\xCF\x07t\x02\x02" +
"\xCF\xD0\x07g\x02\x02\xD0\xD1\x07x\x02\x02\xD1\xD2\x07g\x02\x02\xD2\xD3" +
"\x07t\x02\x02\xD3\xD4\x07u\x02\x02\xD4\xD5\x07g\x02\x02\xD5\xD6\x07*\x02" +
"\x02\xD6\xD7\x07+\x02\x02\xD72\x03\x02\x02\x02\xD8\xD9\x070\x02\x02\xD9" +
"\xDA\x07n\x02\x02\xDA\xDB\x07g\x02\x02\xDB\xDC\x07p\x02\x02\xDC\xDD\x07" +
"i\x02\x02\xDD\xDE\x07v\x02\x02\xDE\xDF\x07j\x02\x02\xDF4\x03\x02\x02\x02" +
"\xE0\xE1\x07#\x02\x02\xE16\x03\x02\x02\x02\xE2\xE3\x07/\x02\x02\xE38\x03" +
"\x02\x02\x02\xE4\xE5\x070\x02\x02\xE5\xE6\x07u\x02\x02\xE6\xE7\x07r\x02" +
"\x02\xE7\xE8\x07n\x02\x02\xE8\xE9\x07k\x02\x02\xE9\xEA\x07v\x02\x02\xEA" +
":\x03\x02\x02\x02\xEB\xEC\x071\x02\x02\xEC<\x03\x02\x02\x02\xED\xEE\x07" +
"\'\x02\x02\xEE>\x03\x02\x02\x02\xEF\xF0\x07-\x02\x02\xF0@\x03\x02\x02" +
"\x02\xF1\xF2\x07?\x02\x02\xF2\xF3\x07?\x02\x02\xF3B\x03\x02\x02\x02\xF4" +
"\xF5\x07#\x02\x02\xF5\xF6\x07?\x02\x02\xF6D\x03\x02\x02\x02\xF7\xF8\x07" +
"(\x02\x02\xF8F\x03\x02\x02\x02\xF9\xFA\x07~\x02\x02\xFAH\x03\x02\x02\x02" +
"\xFB\xFC\x07(\x02\x02\xFC\xFD\x07(\x02\x02\xFDJ\x03\x02\x02\x02\xFE\xFF" +
"\x07~\x02\x02\xFF\u0100\x07~\x02\x02\u0100L\x03\x02\x02\x02\u0101\u0102" +
"\x07k\x02\x02\u0102\u0103\x07p\x02\x02\u0103\u0104\x07v\x02\x02\u0104" +
"N\x03\x02\x02\x02\u0105\u0106\x07d\x02\x02\u0106\u0107\x07q\x02\x02\u0107" +
"\u0108\x07q\x02\x02\u0108\u0109\x07n\x02\x02\u0109P\x03\x02\x02\x02\u010A" +
"\u010B\x07u\x02\x02\u010B\u010C\x07v\x02\x02\u010C\u010D\x07t\x02\x02" +
"\u010D\u010E\x07k\x02\x02\u010E\u010F\x07p\x02\x02\u010F\u0110\x07i\x02" +
"\x02\u0110R\x03\x02\x02\x02\u0111\u0112\x07r\x02\x02\u0112\u0113\x07w" +
"\x02\x02\u0113\u0114\x07d\x02\x02\u0114\u0115\x07m\x02\x02\u0115\u0116" +
"\x07g\x02\x02\u0116\u0117\x07{\x02\x02\u0117T\x03\x02\x02\x02\u0118\u0119" +
"\x07u\x02\x02\u0119\u011A\x07k\x02\x02\u011A\u011B\x07i\x02\x02\u011B" +
"V\x03\x02\x02\x02\u011C\u011D\x07f\x02\x02\u011D\u011E\x07c\x02\x02\u011E" +
"\u011F\x07v\x02\x02\u011F\u0120\x07c\x02\x02\u0120\u0121\x07u\x02\x02" +
"\u0121\u0122\x07k\x02\x02\u0122\u0123\x07i\x02\x02\u0123X\x03\x02\x02" +
"\x02\u0124\u0126\t\x02\x02\x02\u0125\u0124\x03\x02\x02\x02\u0126\u0127" +
"\x03\x02\x02\x02\u0127\u0125\x03\x02\x02\x02\u0127\u0128\x03\x02\x02\x02" +
"\u0128\u0129\x03\x02\x02\x02\u0129\u012B\x070\x02\x02\u012A\u012C\t\x02" +
"\x02\x02\u012B\u012A\x03\x02\x02\x02\u012C\u012D\x03\x02\x02\x02\u012D" +
"\u012B\x03\x02\x02\x02\u012D\u012E\x03\x02\x02\x02\u012E\u012F\x03\x02" +
"\x02\x02\u012F\u0131\x070\x02\x02\u0130\u0132\t\x02\x02\x02\u0131\u0130" +
"\x03\x02\x02\x02\u0132\u0133\x03\x02\x02\x02\u0133\u0131\x03\x02\x02\x02" +
"\u0133\u0134\x03\x02\x02\x02\u0134Z\x03\x02\x02\x02\u0135\u0136\x07v\x02" +
"\x02\u0136\u0137\x07t\x02\x02\u0137\u0138\x07w\x02\x02\u0138\u013F\x07" +
"g\x02\x02\u0139\u013A\x07h\x02\x02\u013A\u013B\x07c\x02\x02\u013B\u013C" +
"\x07n\x02\x02\u013C\u013D\x07u\x02\x02\u013D\u013F\x07g\x02\x02\u013E" +
"\u0135\x03\x02\x02\x02\u013E\u0139\x03\x02\x02\x02\u013F\\\x03\x02\x02" +
"\x02\u0140\u0141\x07u\x02\x02\u0141\u0142\x07c\x02\x02\u0142\u0143\x07" +
"v\x02\x02\u0143\u0144\x07q\x02\x02\u0144\u0145\x07u\x02\x02\u0145\u0146" +
"\x07j\x02\x02\u0146\u0147\x07k\x02\x02\u0147\u017A\x07u\x02\x02\u0148" +
"\u0149\x07u\x02\x02\u0149\u014A\x07c\x02\x02\u014A\u014B\x07v\x02\x02" +
"\u014B\u017A\x07u\x02\x02\u014C\u014D\x07h\x02\x02\u014D\u014E\x07k\x02" +
"\x02\u014E\u014F\x07p\x02\x02\u014F\u0150\x07p\x02\x02\u0150\u0151\x07" +
"g\x02\x02\u0151\u017A\x07{\x02\x02\u0152\u0153\x07d\x02\x02\u0153\u0154" +
"\x07k\x02\x02\u0154\u0155\x07v\x02\x02\u0155\u017A\x07u\x02\x02\u0156" +
"\u0157\x07d\x02\x02\u0157\u0158\x07k\x02\x02\u0158\u0159\x07v\x02\x02" +
"\u0159\u015A\x07e\x02\x02\u015A\u015B\x07q\x02\x02\u015B\u015C\x07k\x02" +
"\x02\u015C\u017A\x07p\x02\x02\u015D\u015E\x07u\x02\x02\u015E\u015F\x07" +
"g\x02\x02\u015F\u0160\x07e\x02\x02\u0160\u0161\x07q\x02\x02\u0161\u0162" +
"\x07p\x02\x02\u0162\u0163\x07f\x02\x02\u0163\u017A\x07u\x02\x02\u0164" +
"\u0165\x07o\x02\x02\u0165\u0166\x07k\x02\x02\u0166\u0167\x07p\x02\x02" +
"\u0167\u0168\x07w\x02\x02\u0168\u0169\x07v\x02\x02\u0169\u016A\x07g\x02" +
"\x02\u016A\u017A\x07u\x02\x02\u016B\u016C\x07j\x02\x02\u016C\u016D\x07" +
"q\x02\x02\u016D\u016E\x07w\x02\x02\u016E\u016F\x07t\x02\x02\u016F\u017A" +
"\x07u\x02\x02\u0170\u0171\x07f\x02\x02\u0171\u0172\x07c\x02\x02\u0172" +
"\u0173\x07{\x02\x02\u0173\u017A\x07u\x02\x02\u0174\u0175\x07y\x02\x02" +
"\u0175\u0176\x07g\x02\x02\u0176\u0177\x07g\x02\x02\u0177\u0178\x07m\x02" +
"\x02\u0178\u017A\x07u\x02\x02\u0179\u0140\x03\x02\x02\x02\u0179\u0148" +
"\x03\x02\x02\x02\u0179\u014C\x03\x02\x02\x02\u0179\u0152\x03\x02\x02\x02" +
"\u0179\u0156\x03\x02\x02\x02\u0179\u015D\x03\x02\x02\x02\u0179\u0164\x03" +
"\x02\x02\x02\u0179\u016B\x03\x02\x02\x02\u0179\u0170\x03\x02\x02\x02\u0179" +
"\u0174\x03\x02\x02\x02\u017A^\x03\x02\x02\x02\u017B\u017D\t\x03\x02\x02" +
"\u017C\u017B\x03\x02\x02\x02\u017C\u017D\x03\x02\x02\x02\u017D\u017F\x03" +
"\x02\x02\x02\u017E\u0180\t\x02\x02\x02\u017F\u017E\x03\x02\x02\x02\u0180" +
"\u0181\x03\x02\x02\x02\u0181\u017F\x03\x02\x02\x02\u0181\u0182\x03\x02" +
"\x02\x02\u0182\u0189\x03\x02\x02\x02\u0183\u0185\t\x04\x02\x02\u0184\u0186" +
"\t\x02\x02\x02\u0185\u0184\x03\x02\x02\x02\u0186\u0187\x03\x02\x02\x02" +
"\u0187\u0185\x03\x02\x02\x02\u0187\u0188\x03\x02\x02\x02\u0188\u018A\x03" +
"\x02\x02\x02\u0189\u0183\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A" +
"`\x03\x02\x02\x02\u018B\u018C\x07d\x02\x02\u018C\u018D\x07{\x02\x02\u018D" +
"\u018E\x07v\x02\x02\u018E\u018F\x07g\x02\x02\u018F\u0190\x07u\x02\x02" +
"\u0190\u0192\x03\x02\x02\x02\u0191\u0193\x05c2\x02\u0192\u0191\x03\x02" +
"\x02\x02\u0192\u0193\x03\x02\x02\x02\u0193b\x03\x02\x02\x02\u0194\u0198" +
"\t\x05\x02\x02\u0195\u0197\t\x02\x02\x02\u0196\u0195\x03\x02\x02\x02\u0197" +
"\u019A\x03\x02\x02\x02\u0198\u0196\x03\x02\x02\x02\u0198\u0199\x03\x02" +
"\x02\x02\u0199d\x03\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019B\u01A1" +
"\x07$\x02\x02\u019C\u019D\x07^\x02\x02\u019D\u01A0\x07$\x02\x02\u019E" +
"\u01A0\n\x06\x02\x02\u019F\u019C\x03\x02\x02\x02\u019F\u019E\x03\x02\x02" +
"\x02\u01A0\u01A3\x03\x02\x02\x02\u01A1\u01A2\x03\x02\x02\x02\u01A1\u019F" +
"\x03\x02\x02\x02\u01A2\u01A4\x03\x02\x02\x02\u01A3\u01A1\x03\x02\x02\x02" +
"\u01A4\u01B0\x07$\x02\x02\u01A5\u01AB\x07)\x02\x02\u01A6\u01A7\x07^\x02" +
"\x02\u01A7\u01AA\x07)\x02\x02\u01A8\u01AA\n\x07\x02\x02\u01A9\u01A6\x03" +
"\x02\x02\x02\u01A9\u01A8\x03\x02\x02\x02\u01AA\u01AD\x03\x02\x02\x02\u01AB" +
"\u01AC\x03\x02\x02\x02\u01AB\u01A9\x03\x02\x02\x02\u01AC\u01AE\x03\x02" +
"\x02\x02\u01AD\u01AB\x03\x02\x02\x02\u01AE\u01B0\x07)\x02\x02\u01AF\u019B" +
"\x03\x02\x02\x02\u01AF\u01A5\x03\x02\x02\x02\u01B0f\x03\x02\x02\x02\u01B1" +
"\u01B2\x072\x02\x02\u01B2\u01B6\t\b\x02\x02\u01B3\u01B5\t\t\x02\x02\u01B4" +
"\u01B3\x03\x02\x02\x02\u01B5\u01B8\x03\x02\x02\x02\u01B6\u01B4\x03\x02" +
"\x02\x02\u01B6\u01B7\x03\x02\x02\x02\u01B7h\x03\x02\x02\x02\u01B8\u01B6" +
"\x03\x02\x02\x02\u01B9\u01BA\x07v\x02\x02\u01BA\u01BB\x07z\x02\x02\u01BB" +
"\u01BC\x070\x02\x02\u01BC\u01BD\x07c\x02\x02\u01BD\u01BE\x07i\x02\x02" +
"\u01BE\u01C7\x07g\x02\x02\u01BF\u01C0\x07v\x02\x02\u01C0\u01C1\x07z\x02" +
"\x02\u01C1\u01C2\x070\x02\x02\u01C2\u01C3\x07v\x02\x02\u01C3\u01C4\x07" +
"k\x02\x02\u01C4\u01C5\x07o\x02\x02\u01C5\u01C7\x07g\x02\x02\u01C6\u01B9" +
"\x03\x02\x02\x02\u01C6\u01BF\x03\x02\x02\x02\u01C7j\x03\x02\x02\x02\u01C8" +
"\u01C9\x07v\x02\x02\u01C9\u01CA\x07z\x02\x02\u01CA\u01CB\x070\x02\x02" +
"\u01CB\u01CC\x07x\x02\x02\u01CC\u01CD\x07g\x02\x02\u01CD\u01CE\x07t\x02" +
"\x02\u01CE\u01CF\x07u\x02\x02\u01CF\u01D0\x07k\x02\x02\u01D0\u01D1\x07" +
"q\x02\x02\u01D1\u0249\x07p\x02\x02\u01D2\u01D3\x07v\x02\x02\u01D3\u01D4" +
"\x07z\x02\x02\u01D4\u01D5\x070\x02\x02\u01D5\u01D6\x07j\x02\x02\u01D6" +
"\u01D7\x07c\x02\x02\u01D7\u01D8\x07u\x02\x02\u01D8\u01D9\x07j\x02\x02" +
"\u01D9\u01DA\x07R\x02\x02\u01DA\u01DB\x07t\x02\x02\u01DB\u01DC\x07g\x02" +
"\x02\u01DC\u01DD\x07x\x02\x02\u01DD\u01DE\x07q\x02\x02\u01DE\u01DF\x07" +
"w\x02\x02\u01DF\u01E0\x07v\x02\x02\u01E0\u0249\x07u\x02\x02\u01E1\u01E2" +
"\x07v\x02\x02\u01E2\u01E3\x07z\x02\x02\u01E3\u01E4\x070\x02\x02\u01E4" +
"\u01E5\x07j\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6\u01E7\x07u\x02\x02" +
"\u01E7\u01E8\x07j\x02\x02\u01E8\u01E9\x07U\x02\x02\u01E9\u01EA\x07g\x02" +
"\x02\u01EA\u01EB\x07s\x02\x02\u01EB\u01EC\x07w\x02\x02\u01EC\u01ED\x07" +
"g\x02\x02\u01ED\u01EE\x07p\x02\x02\u01EE\u01EF\x07e\x02\x02\u01EF\u0249" +
"\x07g\x02\x02\u01F0\u01F1\x07v\x02\x02\u01F1\u01F2\x07z\x02\x02\u01F2" +
"\u01F3\x070\x02\x02\u01F3\u01F4\x07q\x02\x02\u01F4\u01F5\x07w\x02\x02" +
"\u01F5\u01F6\x07v\x02\x02\u01F6\u01F7\x07r\x02\x02\u01F7\u01F8\x07q\x02" +
"\x02\u01F8\u01F9\x07k\x02\x02\u01F9\u01FA\x07p\x02\x02\u01FA\u0249\x07" +
"v\x02\x02\u01FB\u01FC\x07v\x02\x02\u01FC\u01FD\x07z\x02\x02\u01FD\u01FE" +
"\x070\x02\x02\u01FE\u01FF\x07d\x02\x02\u01FF\u0200\x07{\x02\x02\u0200" +
"\u0201\x07v\x02\x02\u0201\u0202\x07g\x02\x02\u0202\u0203\x07e\x02\x02" +
"\u0203\u0204\x07q\x02\x02\u0204\u0205\x07f\x02\x02\u0205\u0249\x07g\x02" +
"\x02\u0206\u0207\x07v\x02\x02\u0207\u0208\x07z\x02\x02\u0208\u0209\x07" +
"0\x02\x02\u0209\u020A\x07x\x02\x02\u020A\u020B\x07c\x02\x02\u020B\u020C" +
"\x07n\x02\x02\u020C\u020D\x07w\x02\x02\u020D\u0249\x07g\x02\x02\u020E" +
"\u020F\x07v\x02\x02\u020F\u0210\x07z\x02\x02\u0210\u0211\x070\x02\x02" +
"\u0211\u0212\x07u\x02\x02\u0212\u0213\x07g\x02\x02\u0213\u0214\x07s\x02" +
"\x02\u0214\u0215\x07w\x02\x02\u0215\u0216\x07g\x02\x02\u0216\u0217\x07" +
"p\x02\x02\u0217\u0218\x07e\x02\x02\u0218\u0249\x07g\x02\x02\u0219\u021A" +
"\x07v\x02\x02\u021A\u021B\x07z\x02\x02\u021B\u021C\x070\x02\x02\u021C" +
"\u021D\x07j\x02\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07u\x02\x02" +
"\u021F\u0220\x07j\x02\x02\u0220\u0221\x07Q\x02\x02\u0221\u0222\x07w\x02" +
"\x02\u0222\u0223\x07v\x02\x02\u0223\u0224\x07r\x02\x02\u0224\u0225\x07" +
"w\x02\x02\u0225\u0226\x07v\x02\x02\u0226\u0249\x07u\x02\x02\u0227\u0228" +
"\x07";
CashScriptLexer._serializedATNSegment1 = "v\x02\x02\u0228\u0229\x07z\x02\x02\u0229\u022A\x070\x02\x02\u022A\u022B" +
"\x07n\x02\x02\u022B\u022C\x07q\x02\x02\u022C\u022D\x07e\x02\x02\u022D" +
"\u022E\x07m\x02\x02\u022E\u022F\x07v\x02\x02\u022F\u0230\x07k\x02\x02" +
"\u0230\u0231\x07o\x02\x02\u0231\u0249\x07g\x02\x02\u0232\u0233\x07v\x02" +
"\x02\u0233\u0234\x07z\x02\x02\u0234\u0235\x070\x02\x02\u0235\u0236\x07" +
"j\x02\x02\u0236\u0237\x07c\x02\x02\u0237\u0238\x07u\x02\x02\u0238\u0239" +
"\x07j\x02\x02\u0239\u023A\x07v\x02\x02\u023A\u023B\x07{\x02\x02\u023B" +
"\u023C\x07r\x02\x02\u023C\u0249\x07g\x02\x02\u023D\u023E\x07v\x02\x02" +
"\u023E\u023F\x07z\x02\x02\u023F\u0240\x070\x02\x02\u0240\u0241\x07r\x02" +
"\x02\u0241\u0242\x07t\x02\x02\u0242\u0243\x07g\x02\x02\u0243\u0244\x07" +
"k\x02\x02\u0244\u0245\x07o\x02\x02\u0245\u0246\x07c\x02\x02\u0246\u0247" +
"\x07i\x02\x02\u0247\u0249\x07g\x02\x02\u0248\u01C8\x03\x02\x02\x02\u0248" +
"\u01D2\x03\x02\x02\x02\u0248\u01E1\x03\x02\x02\x02\u0248\u01F0\x03\x02" +
"\x02\x02\u0248\u01FB\x03\x02\x02\x02\u0248\u0206\x03\x02\x02\x02\u0248" +
"\u020E\x03\x02\x02\x02\u0248\u0219\x03\x02\x02\x02\u0248\u0227\x03\x02" +
"\x02\x02\u0248\u0232\x03\x02\x02\x02\u0248\u023D\x03\x02\x02\x02\u0249" +
"l\x03\x02\x02\x02\u024A\u024E\t\n\x02\x02\u024B\u024D\t\v\x02\x02\u024C" +
"\u024B\x03\x02\x02\x02\u024D\u0250\x03\x02\x02\x02\u024E\u024C\x03\x02" +
"\x02\x02\u024E\u024F\x03\x02\x02\x02\u024Fn\x03\x02\x02\x02\u0250\u024E" +
"\x03\x02\x02\x02\u0251\u0253\t\f\x02\x02\u0252\u0251\x03\x02\x02\x02\u0253" +
"\u0254\x03\x02\x02\x02\u0254\u0252\x03\x02\x02\x02\u0254\u0255\x03\x02" +
"\x02\x02\u0255\u0256\x03\x02\x02\x02\u0256\u0257\b8\x02\x02\u0257p\x03" +
"\x02\x02\x02\u0258\u0259\x071\x02\x02\u0259\u025A\x07,\x02\x02\u025A\u025E" +
"\x03\x02\x02\x02\u025B\u025D\v\x02\x02\x02\u025C\u025B\x03\x02\x02\x02" +
"\u025D\u0260\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025E\u025C\x03" +
"\x02\x02\x02\u025F\u0261\x03\x02\x02\x02\u0260\u025E\x03\x02\x02\x02\u0261" +
"\u0262\x07,\x02\x02\u0262\u0263\x071\x02\x02\u0263\u0264\x03\x02\x02\x02" +
"\u0264\u0265\b9\x03\x02\u0265r\x03\x02\x02\x02\u0266\u0267\x071\x02\x02" +
"\u0267\u0268\x071\x02\x02\u0268\u026C\x03\x02\x02\x02\u0269\u026B\n\r" +
"\x02\x02\u026A\u0269\x03\x02\x02\x02\u026B\u026E\x03\x02\x02\x02\u026C" +
"\u026A\x03\x02\x02\x02\u026C\u026D\x03\x02\x02\x02\u026D\u026F\x03\x02" +
"\x02\x02\u026E\u026C\x03\x02\x02\x02\u026F\u0270\b:\x03\x02\u0270t\x03" +
"\x02\x02\x02\x1A\x02\u0127\u012D\u0133\u013E\u0179\u017C\u0181\u0187\u0189" +
"\u0192\u0198\u019F\u01A1\u01A9\u01AB\u01AF\u01B6\u01C6\u0248\u024E\u0254" +
"\u025E\u026C\x04\b\x02\x02\x02\x03\x02";
"/\x03/\x03/\x03/\x03/\x05/\u017C\n/\x030\x050\u017F\n0\x030\x060\u0182" +
"\n0\r0\x0E0\u0183\x030\x030\x060\u0188\n0\r0\x0E0\u0189\x050\u018C\n0" +
"\x031\x031\x031\x031\x031\x031\x031\x051\u0195\n1\x032\x032\x072\u0199" +
"\n2\f2\x0E2\u019C\v2\x033\x033\x033\x033\x073\u01A2\n3\f3\x0E3\u01A5\v" +
"3\x033\x033\x033\x033\x033\x073\u01AC\n3\f3\x0E3\u01AF\v3\x033\x053\u01B2" +
"\n3\x034\x034\x034\x034\x034\x034\x034\x034\x034\x035\x035\x035\x075\u01C0" +
"\n5\f5\x0E5\u01C3\v5\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x056\u01D2\n6\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x057\u0254\n7\x038\x038\x07" +
"8\u0258\n8\f8\x0E8\u025B\v8\x039\x069\u025E\n9\r9\x0E9\u025F\x039\x03" +
"9\x03:\x03:\x03:\x03:\x07:\u0268\n:\f:\x0E:\u026B\v:\x03:\x03:\x03:\x03" +
":\x03:\x03;\x03;\x03;\x03;\x07;\u0276\n;\f;\x0E;\u0279\v;\x03;\x03;\x05" +
"\u01A3\u01AD\u0269\x02\x02<\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02" +
"\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02" +
"\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%" +
"\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B" +
"5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02" +
"%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_" +
"\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02" +
"<\x03\x02\x0E\x03\x022;\x03\x02//\x04\x02GGgg\x03\x023;\x05\x02\f\f\x0F" +
"\x0F$$\x05\x02\f\f\x0F\x0F))\x04\x02ZZzz\x05\x022;CHch\x04\x02C\\c|\x06" +
"\x022;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02\u02A3\x02" +
"\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02" +
"\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F" +
"\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15" +
"\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B" +
"\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!" +
"\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02" +
"\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02" +
"\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03" +
"\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02" +
"\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02" +
"C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02" +
"\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02" +
"\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03" +
"\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02" +
"\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02" +
"e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02" +
"\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02" +
"\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x03w\x03\x02\x02\x02\x05~\x03" +
"\x02\x02\x02\x07\x80\x03\x02\x02\x02\t\x8B\x03\x02\x02\x02\v\x8D\x03\x02" +
"\x02\x02\r\x8F\x03\x02\x02\x02\x0F\x92\x03\x02\x02\x02\x11\x94\x03\x02" +
"\x02\x02\x13\x96\x03\x02\x02\x02\x15\x99\x03\x02\x02\x02\x17\x9B\x03\x02" +
"\x02\x02\x19\xA4\x03\x02\x02\x02\x1B\xA6\x03\x02\x02\x02\x1D\xA8\x03\x02" +
"\x02\x02\x1F\xB1\x03\x02\x02\x02!\xB3\x03\x02\x02\x02#\xB5\x03\x02\x02" +
"\x02%\xB7\x03\x02\x02\x02\'\xBF\x03\x02\x02\x02)\xC2\x03\x02\x02\x02+" +
"\xC7\x03\x02\x02\x02-\xCB\x03\x02\x02\x02/\xCD\x03\x02\x02\x021\xCF\x03" +
"\x02\x02\x023\xDA\x03\x02\x02\x025\xE2\x03\x02\x02\x027\xE4\x03\x02\x02" +
"\x029\xE6\x03\x02\x02\x02;\xED\x03\x02\x02\x02=\xEF\x03\x02\x02\x02?\xF1" +
"\x03\x02\x02\x02A\xF3\x03\x02\x02\x02C\xF6\x03\x02\x02\x02E\xF9\x03\x02" +
"\x02\x02G\xFB\x03\x02\x02\x02I\xFD\x03\x02\x02\x02K\u0100\x03\x02\x02" +
"\x02M\u0103\x03\x02\x02\x02O\u0107\x03\x02\x02\x02Q\u010C\x03\x02\x02" +
"\x02S\u0113\x03\x02\x02\x02U\u011A\x03\x02\x02\x02W\u011E\x03\x02\x02" +
"\x02Y\u0127\x03\x02\x02\x02[\u0140\x03\x02\x02\x02]\u017B\x03\x02\x02" +
"\x02_\u017E\x03\x02\x02\x02a\u018D\x03\x02\x02\x02c\u0196\x03\x02\x02" +
"\x02e\u01B1\x03\x02\x02\x02g\u01B3\x03\x02\x02\x02i\u01BC\x03\x02\x02" +
"\x02k\u01D1\x03\x02\x02\x02m\u0253\x03\x02\x02\x02o\u0255\x03\x02\x02" +
"\x02q\u025D\x03\x02\x02\x02s\u0263\x03\x02\x02\x02u\u0271\x03\x02\x02" +
"\x02wx\x07r\x02\x02xy\x07t\x02\x02yz\x07c\x02\x02z{\x07i\x02\x02{|\x07" +
"o\x02\x02|}\x07c\x02\x02}\x04\x03\x02\x02\x02~\x7F\x07=\x02\x02\x7F\x06" +
"\x03\x02\x02\x02\x80\x81\x07e\x02\x02\x81\x82\x07c\x02\x02\x82\x83\x07" +
"u\x02\x02\x83\x84\x07j\x02\x02\x84\x85\x07u\x02\x02\x85\x86\x07e\x02\x02" +
"\x86\x87\x07t\x02\x02\x87\x88\x07k\x02\x02\x88\x89\x07r\x02\x02\x89\x8A" +
"\x07v\x02\x02\x8A\b\x03\x02\x02\x02\x8B\x8C\x07`\x02\x02\x8C\n\x03\x02" +
"\x02\x02\x8D\x8E\x07\x80\x02\x02\x8E\f\x03\x02\x02\x02\x8F\x90\x07@\x02" +
"\x02\x90\x91\x07?\x02\x02\x91\x0E\x03\x02\x02\x02\x92\x93\x07@\x02\x02" +
"\x93\x10\x03\x02\x02\x02\x94\x95\x07>\x02\x02\x95\x12\x03\x02\x02\x02" +
"\x96\x97\x07>\x02\x02\x97\x98\x07?\x02\x02\x98\x14\x03\x02\x02\x02\x99" +
"\x9A\x07?\x02\x02\x9A\x16\x03\x02\x02\x02\x9B\x9C\x07e\x02\x02\x9C\x9D" +
"\x07q\x02\x02\x9D\x9E\x07p\x02\x02\x9E\x9F\x07v\x02\x02\x9F\xA0\x07t\x02" +
"\x02\xA0\xA1\x07c\x02\x02\xA1\xA2\x07e\x02\x02\xA2\xA3\x07v\x02\x02\xA3" +
"\x18\x03\x02\x02\x02\xA4\xA5\x07}\x02\x02\xA5\x1A\x03\x02\x02\x02\xA6" +
"\xA7\x07\x7F\x02\x02\xA7\x1C\x03\x02\x02\x02\xA8\xA9\x07h\x02\x02\xA9" +
"\xAA\x07w\x02\x02\xAA\xAB\x07p\x02\x02\xAB\xAC\x07e\x02\x02\xAC\xAD\x07" +
"v\x02\x02\xAD\xAE\x07k\x02\x02\xAE\xAF\x07q\x02\x02\xAF\xB0\x07p\x02\x02" +
"\xB0\x1E\x03\x02\x02\x02\xB1\xB2\x07*\x02\x02\xB2 \x03\x02\x02\x02\xB3" +
"\xB4\x07.\x02\x02\xB4\"\x03\x02\x02\x02\xB5\xB6\x07+\x02\x02\xB6$\x03" +
"\x02\x02\x02\xB7\xB8\x07t\x02\x02\xB8\xB9\x07g\x02\x02\xB9\xBA\x07s\x02" +
"\x02\xBA\xBB\x07w\x02\x02\xBB\xBC\x07k\x02\x02\xBC\xBD\x07t\x02\x02\xBD" +
"\xBE\x07g\x02\x02\xBE&\x03\x02\x02\x02\xBF\xC0\x07k\x02\x02\xC0\xC1\x07" +
"h\x02\x02\xC1(\x03\x02\x02\x02\xC2\xC3\x07g\x02\x02\xC3\xC4\x07n\x02\x02" +
"\xC4\xC5\x07u\x02\x02\xC5\xC6\x07g\x02\x02\xC6*\x03\x02\x02\x02\xC7\xC8" +
"\x07p\x02\x02\xC8\xC9\x07g\x02\x02\xC9\xCA\x07y\x02\x02\xCA,\x03\x02\x02" +
"\x02\xCB\xCC\x07]\x02\x02\xCC.\x03\x02\x02\x02\xCD\xCE\x07_\x02\x02\xCE" +
"0\x03\x02\x02\x02\xCF\xD0\x070\x02\x02\xD0\xD1\x07t\x02\x02\xD1\xD2\x07" +
"g\x02\x02\xD2\xD3\x07x\x02\x02\xD3\xD4\x07g\x02\x02\xD4\xD5\x07t\x02\x02" +
"\xD5\xD6\x07u\x02\x02\xD6\xD7\x07g\x02\x02\xD7\xD8\x07*\x02\x02\xD8\xD9" +
"\x07+\x02\x02\xD92\x03\x02\x02\x02\xDA\xDB\x070\x02\x02\xDB\xDC\x07n\x02" +
"\x02\xDC\xDD\x07g\x02\x02\xDD\xDE\x07p\x02\x02\xDE\xDF\x07i\x02\x02\xDF" +
"\xE0\x07v\x02\x02\xE0\xE1\x07j\x02\x02\xE14\x03\x02\x02\x02\xE2\xE3\x07" +
"#\x02\x02\xE36\x03\x02\x02\x02\xE4\xE5\x07/\x02\x02\xE58\x03\x02\x02\x02" +
"\xE6\xE7\x070\x02\x02\xE7\xE8\x07u\x02\x02\xE8\xE9\x07r\x02\x02\xE9\xEA" +
"\x07n\x02\x02\xEA\xEB\x07k\x02\x02\xEB\xEC\x07v\x02\x02\xEC:\x03\x02\x02" +
"\x02\xED\xEE\x071\x02\x02\xEE<\x03\x02\x02\x02\xEF\xF0\x07\'\x02\x02\xF0" +
">\x03\x02\x02\x02\xF1\xF2\x07-\x02\x02\xF2@\x03\x02\x02\x02\xF3\xF4\x07" +
"?\x02\x02\xF4\xF5\x07?\x02\x02\xF5B\x03\x02\x02\x02\xF6\xF7\x07#\x02\x02" +
"\xF7\xF8\x07?\x02\x02\xF8D\x03\x02\x02\x02\xF9\xFA\x07(\x02\x02\xFAF\x03" +
"\x02\x02\x02\xFB\xFC\x07~\x02\x02\xFCH\x03\x02\x02\x02\xFD\xFE\x07(\x02" +
"\x02\xFE\xFF\x07(\x02\x02\xFFJ\x03\x02\x02\x02\u0100\u0101\x07~\x02\x02" +
"\u0101\u0102\x07~\x02\x02\u0102L\x03\x02\x02\x02\u0103\u0104\x07k\x02" +
"\x02\u0104\u0105\x07p\x02\x02\u0105\u0106\x07v\x02\x02\u0106N\x03\x02" +
"\x02\x02\u0107\u0108\x07d\x02\x02\u0108\u0109\x07q\x02\x02\u0109\u010A" +
"\x07q\x02\x02\u010A\u010B\x07n\x02\x02\u010BP\x03\x02\x02\x02\u010C\u010D" +
"\x07u\x02\x02\u010D\u010E\x07v\x02\x02\u010E\u010F\x07t\x02\x02\u010F" +
"\u0110\x07k\x02\x02\u0110\u0111\x07p\x02\x02\u0111\u0112\x07i\x02\x02" +
"\u0112R\x03\x02\x02\x02\u0113\u0114\x07r\x02\x02\u0114\u0115\x07w\x02" +
"\x02\u0115\u0116\x07d\x02\x02\u0116\u0117\x07m\x02\x02\u0117\u0118\x07" +
"g\x02\x02\u0118\u0119\x07{\x02\x02\u0119T\x03\x02\x02\x02\u011A\u011B" +
"\x07u\x02\x02\u011B\u011C\x07k\x02\x02\u011C\u011D\x07i\x02\x02\u011D" +
"V\x03\x02\x02\x02\u011E\u011F\x07f\x02\x02\u011F\u0120\x07c\x02\x02\u0120" +
"\u0121\x07v\x02\x02\u0121\u0122\x07c\x02\x02\u0122\u0123\x07u\x02\x02" +
"\u0123\u0124\x07k\x02\x02\u0124\u0125\x07i\x02\x02\u0125X\x03\x02\x02" +
"\x02\u0126\u0128\t\x02\x02\x02\u0127\u0126\x03\x02\x02\x02\u0128\u0129" +
"\x03\x02\x02\x02\u0129\u0127\x03\x02\x02\x02\u0129\u012A\x03\x02\x02\x02" +
"\u012A\u012B\x03\x02\x02\x02\u012B\u012D\x070\x02\x02\u012C\u012E\t\x02" +
"\x02\x02\u012D\u012C\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F" +
"\u012D\x03\x02\x02\x02\u012F\u0130\x03\x02\x02\x02\u0130\u0131\x03\x02" +
"\x02\x02\u0131\u0133\x070\x02\x02\u0132\u0134\t\x02\x02\x02\u0133\u0132" +
"\x03\x02\x02\x02\u0134\u0135\x03\x02\x02\x02\u0135\u0133\x03\x02\x02\x02" +
"\u0135\u0136\x03\x02\x02\x02\u0136Z\x03\x02\x02\x02\u0137\u0138\x07v\x02" +
"\x02\u0138\u0139\x07t\x02\x02\u0139\u013A\x07w\x02\x02\u013A\u0141\x07" +
"g\x02\x02\u013B\u013C\x07h\x02\x02\u013C\u013D\x07c\x02\x02\u013D\u013E" +
"\x07n\x02\x02\u013E\u013F\x07u\x02\x02\u013F\u0141\x07g\x02\x02\u0140" +
"\u0137\x03\x02\x02\x02\u0140\u013B\x03\x02\x02\x02\u0141\\\x03\x02\x02" +
"\x02\u0142\u0143\x07u\x02\x02\u0143\u0144\x07c\x02\x02\u0144\u0145\x07" +
"v\x02\x02\u0145\u0146\x07q\x02\x02\u0146\u0147\x07u\x02\x02\u0147\u0148" +
"\x07j\x02\x02\u0148\u0149\x07k\x02\x02\u0149\u017C\x07u\x02\x02\u014A" +
"\u014B\x07u\x02\x02\u014B\u014C\x07c\x02\x02\u014C\u014D\x07v\x02\x02" +
"\u014D\u017C\x07u\x02\x02\u014E\u014F\x07h\x02\x02\u014F\u0150\x07k\x02" +
"\x02\u0150\u0151\x07p\x02\x02\u0151\u0152\x07p\x02\x02\u0152\u0153\x07" +
"g\x02\x02\u0153\u017C\x07{\x02\x02\u0154\u0155\x07d\x02\x02\u0155\u0156" +
"\x07k\x02\x02\u0156\u0157\x07v\x02\x02\u0157\u017C\x07u\x02\x02\u0158" +
"\u0159\x07d\x02\x02\u0159\u015A\x07k\x02\x02\u015A\u015B\x07v\x02\x02" +
"\u015B\u015C\x07e\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07k\x02" +
"\x02\u015E\u017C\x07p\x02\x02\u015F\u0160\x07u\x02\x02\u0160\u0161\x07" +
"g\x02\x02\u0161\u0162\x07e\x02\x02\u0162\u0163\x07q\x02\x02\u0163\u0164" +
"\x07p\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u017C\x07u\x02\x02\u0166" +
"\u0167\x07o\x02\x02\u0167\u0168\x07k\x02\x02\u0168\u0169\x07p\x02\x02" +
"\u0169\u016A\x07w\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07g\x02" +
"\x02\u016C\u017C\x07u\x02\x02\u016D\u016E\x07j\x02\x02\u016E\u016F\x07" +
"q\x02\x02\u016F\u0170\x07w\x02\x02\u0170\u0171\x07t\x02\x02\u0171\u017C" +
"\x07u\x02\x02\u0172\u0173\x07f\x02\x02\u0173\u0174\x07c\x02\x02\u0174" +
"\u0175\x07{\x02\x02\u0175\u017C\x07u\x02\x02\u0176\u0177\x07y\x02\x02" +
"\u0177\u0178\x07g\x02\x02\u0178\u0179\x07g\x02\x02\u0179\u017A\x07m\x02" +
"\x02\u017A\u017C\x07u\x02\x02\u017B\u0142\x03\x02\x02\x02\u017B\u014A" +
"\x03\x02\x02\x02\u017B\u014E\x03\x02\x02\x02\u017B\u0154\x03\x02\x02\x02" +
"\u017B\u0158\x03\x02\x02\x02\u017B\u015F\x03\x02\x02\x02\u017B\u0166\x03" +
"\x02\x02\x02\u017B\u016D\x03\x02\x02\x02\u017B\u0172\x03\x02\x02\x02\u017B" +
"\u0176\x03\x02\x02\x02\u017C^\x03\x02\x02\x02\u017D\u017F\t\x03\x02\x02" +
"\u017E\u017D\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0181\x03" +
"\x02\x02\x02\u0180\u0182\t\x02\x02\x02\u0181\u0180\x03\x02\x02\x02\u0182" +
"\u0183\x03\x02\x02\x02\u0183\u0181\x03\x02\x02\x02\u0183\u0184\x03\x02" +
"\x02\x02\u0184\u018B\x03\x02\x02\x02\u0185\u0187\t\x04\x02\x02\u0186\u0188" +
"\t\x02\x02\x02\u0187\u0186\x03\x02\x02\x02\u0188\u0189\x03\x02\x02\x02" +
"\u0189\u0187\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A\u018C\x03" +
"\x02\x02\x02\u018B\u0185\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C" +
"`\x03\x02\x02\x02\u018D\u018E\x07d\x02\x02\u018E\u018F\x07{\x02\x02\u018F" +
"\u0190\x07v\x02\x02\u0190\u0191\x07g\x02\x02\u0191\u0192\x07u\x02\x02" +
"\u0192\u0194\x03\x02\x02\x02\u0193\u0195\x05c2\x02\u0194\u0193\x03\x02" +
"\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195b\x03\x02\x02\x02\u0196\u019A" +
"\t\x05\x02\x02\u0197\u0199\t\x02\x02\x02\u0198\u0197\x03\x02\x02\x02\u0199" +
"\u019C\x03\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019A\u019B\x03\x02" +
"\x02\x02\u019Bd\x03\x02\x02\x02\u019C\u019A\x03\x02\x02\x02\u019D\u01A3" +
"\x07$\x02\x02\u019E\u019F\x07^\x02\x02\u019F\u01A2\x07$\x02\x02\u01A0" +
"\u01A2\n\x06\x02\x02\u01A1\u019E\x03\x02\x02\x02\u01A1\u01A0\x03\x02\x02" +
"\x02\u01A2\u01A5\x03\x02\x02\x02\u01A3\u01A4\x03\x02\x02\x02\u01A3\u01A1" +
"\x03\x02\x02\x02\u01A4\u01A6\x03\x02\x02\x02\u01A5\u01A3\x03\x02\x02\x02" +
"\u01A6\u01B2\x07$\x02\x02\u01A7\u01AD\x07)\x02\x02\u01A8\u01A9\x07^\x02" +
"\x02\u01A9\u01AC\x07)\x02\x02\u01AA\u01AC\n\x07\x02\x02\u01AB\u01A8\x03" +
"\x02\x02\x02\u01AB\u01AA\x03\x02\x02\x02\u01AC\u01AF\x03\x02\x02\x02\u01AD" +
"\u01AE\x03\x02\x02\x02\u01AD\u01AB\x03\x02\x02\x02\u01AE\u01B0\x03\x02" +
"\x02\x02\u01AF\u01AD\x03\x02\x02\x02\u01B0\u01B2\x07)\x02\x02\u01B1\u019D" +
"\x03\x02\x02\x02\u01B1\u01A7\x03\x02\x02\x02\u01B2f\x03\x02\x02\x02\u01B3" +
"\u01B4\x07f\x02\x02\u01B4\u01B5\x07c\x02\x02\u01B5\u01B6\x07v\x02\x02" +
"\u01B6\u01B7\x07g\x02\x02\u01B7\u01B8\x07*\x02\x02\u01B8\u01B9\x03\x02" +
"\x02\x02\u01B9\u01BA\x05e3\x02\u01BA\u01BB\x07+\x02\x02\u01BBh\x03\x02" +
"\x02\x02\u01BC\u01BD\x072\x02\x02\u01BD\u01C1\t\b\x02\x02\u01BE\u01C0" +
"\t\t\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01C0\u01C3\x03\x02\x02\x02\u01C1" +
"\u01BF\x03\x02\x02\x02\u01C1\u01C2\x03\x02\x02\x02\u01C2j\x03\x02\x02" +
"\x02\u01C3\u01C1\x03\x02\x02\x02\u01C4\u01C5\x07v\x02\x02\u01C5\u01C6" +
"\x07z\x02\x02\u01C6\u01C7\x070\x02\x02\u01C7\u01C8\x07c\x02\x02\u01C8" +
"\u01C9\x07i\x02\x02\u01C9\u01D2\x07g\x02\x02\u01CA\u01CB\x07v\x02\x02" +
"\u01CB\u01CC\x07z\x02\x02\u01CC\u01CD\x070\x02\x02\u01CD\u01CE\x07v\x02" +
"\x02\u01CE\u01CF\x07k\x02\x02\u01CF\u01D0\x07o\x02\x02\u01D0\u01D2\x07" +
"g\x02\x02\u01D1\u01C4\x03\x02\x02\x02\u01D1\u01CA\x03\x02\x02\x02\u01D2" +
"l\x03\x02\x02\x02\u01D3\u01D4\x07v\x02\x02\u01D4\u01D5\x07z\x02\x02\u01D5" +
"\u01D6\x070\x02\x02\u01D6\u01D7\x07x\x02\x02\u01D7\u01D8\x07g\x02\x02" +
"\u01D8\u01D9\x07t\x02\x02\u01D9\u01DA\x07u\x02\x02\u01DA\u01DB\x07k\x02" +
"\x02\u01DB\u01DC\x07q\x02\x02\u01DC\u0254\x07p\x02\x02\u01DD\u01DE\x07" +
"v\x02\x02\u01DE\u01DF\x07z\x02\x02\u01DF\u01E0\x070\x02\x02\u01E0\u01E1" +
"\x07j\x02\x02\u01E1\u01E2\x07c\x02\x02\u01E2\u01E3\x07u\x02\x02\u01E3" +
"\u01E4\x07j\x02\x02\u01E4\u01E5\x07R\x02\x02\u01E5\u01E6\x07t\x02\x02" +
"\u01E6\u01E7\x07g\x02\x02\u01E7\u01E8\x07x\x02\x02\u01E8\u01E9\x07q\x02" +
"\x02\u01E9\u01EA\x07w\x02\x02\u01EA\u01EB\x07v\x02\x02\u01EB\u0254\x07" +
"u\x02\x02\u01EC\u01ED\x07v\x02\x02\u01ED\u01EE\x07z\x02\x02\u01EE\u01EF" +
"\x070\x02\x02\u01EF\u01F0\x07j\x02\x02\u01F0\u01F1\x07c\x02\x02\u01F1" +
"\u01F2\x07u\x02\x02\u01F2\u01F3\x07j\x02\x02\u01F3\u01F4\x07U\x02\x02" +
"\u01F4\u01F5\x07g\x02\x02\u01F5\u01F6\x07s\x02\x02\u01F6\u01F7\x07w\x02" +
"\x02\u01F7\u01F8\x07g\x02\x02\u01F8\u01F9\x07p\x02\x02\u01F9\u01FA\x07" +
"e\x02\x02\u01FA\u0254\x07g\x02\x02\u01FB\u01FC\x07v\x02\x02\u01FC\u01FD" +
"\x07z\x02\x02\u01FD\u01FE\x070\x02\x02\u01FE\u01FF\x07q\x02\x02\u01FF" +
"\u0200\x07w\x02\x02\u0200\u0201\x07v\x02\x02\u0201\u0202\x07r\x02\x02" +
"\u0202\u0203\x07q\x02\x02\u0203\u0204\x07k\x02\x02\u0204\u0205\x07p\x02" +
"\x02\u0205\u0254\x07v\x02\x02\u0206\u0207\x07v\x02\x02\u0207\u0208\x07" +
"z\x02\x02\u0208\u0209\x070\x02\x02\u0209\u020A\x07d\x02\x02\u020A\u020B" +
"\x07{\x02\x02\u020B\u020C\x07v\x02\x02\u020C\u020D\x07g\x02\x02\u020D" +
"\u020E\x07e\x02\x02\u020E\u020F\x07q\x02\x02\u020F\u0210\x07f\x02\x02" +
"\u0210\u0254\x07g\x02\x02\u0211\u0212\x07v\x02\x02\u0212\u0213\x07z\x02" +
"\x02\u0213\u0214\x070\x02\x02\u0214\u0215\x07x\x02\x02\u0215\u0216\x07" +
"c\x02\x02\u0216\u0217\x07n\x02\x02\u0217\u0218\x07w\x02\x02\u0218\u0254" +
"\x07g\x02\x02\u0219\u021A\x07v\x02\x02\u021A\u021B\x07z\x02\x02\u021B" +
"\u021C\x070\x02\x02\u021C\u021D\x07u\x02\x02\u021D\u021E\x07g\x02\x02" +
"\u021E\u021F\x07s\x02\x02\u021F\u0220\x07w\x02\x02\u0220\u0221\x07g\x02" +
"\x02\u0221\u0222\x07p\x02\x02\u0222\u0223\x07e\x02\x02\u0223\u0254";
CashScriptLexer._serializedATNSegment1 = "\x07g\x02\x02\u0224\u0225\x07v\x02\x02\u0225\u0226\x07z\x02\x02\u0226" +
"\u0227\x070\x02\x02\u0227\u0228\x07j\x02\x02\u0228\u0229\x07c\x02\x02" +
"\u0229\u022A\x07u\x02\x02\u022A\u022B\x07j\x02\x02\u022B\u022C\x07Q\x02" +
"\x02\u022C\u022D\x07w\x02\x02\u022D\u022E\x07v\x02\x02\u022E\u022F\x07" +
"r\x02\x02\u022F\u0230\x07w\x02\x02\u0230\u0231\x07v\x02\x02\u0231\u0254" +
"\x07u\x02\x02\u0232\u0233\x07v\x02\x02\u0233\u0234\x07z\x02\x02\u0234" +
"\u0235\x070\x02\x02\u0235\u0236\x07n\x02\x02\u0236\u0237\x07q\x02\x02" +
"\u0237\u0238\x07e\x02\x02\u0238\u0239\x07m\x02\x02\u0239\u023A\x07v\x02" +
"\x02\u023A\u023B\x07k\x02\x02\u023B\u023C\x07o\x02\x02\u023C\u0254\x07" +
"g\x02\x02\u023D\u023E\x07v\x02\x02\u023E\u023F\x07z\x02\x02\u023F\u0240" +
"\x070\x02\x02\u0240\u0241\x07j\x02\x02\u0241\u0242\x07c\x02\x02\u0242" +
"\u0243\x07u\x02\x02\u0243\u0244\x07j\x02\x02\u0244\u0245\x07v\x02\x02" +
"\u0245\u0246\x07{\x02\x02\u0246\u0247\x07r\x02\x02\u0247\u0254\x07g\x02" +
"\x02\u0248\u0249\x07v\x02\x02\u0249\u024A\x07z\x02\x02\u024A\u024B\x07" +
"0\x02\x02\u024B\u024C\x07r\x02\x02\u024C\u024D\x07t\x02\x02\u024D\u024E" +
"\x07g\x02\x02\u024E\u024F\x07k\x02\x02\u024F\u0250\x07o\x02\x02\u0250" +
"\u0251\x07c\x02\x02\u0251\u0252\x07i\x02\x02\u0252\u0254\x07g\x02\x02" +
"\u0253\u01D3\x03\x02\x02\x02\u0253\u01DD\x03\x02\x02\x02\u0253\u01EC\x03" +
"\x02\x02\x02\u0253\u01FB\x03\x02\x02\x02\u0253\u0206\x03\x02\x02\x02\u0253" +
"\u0211\x03\x02\x02\x02\u0253\u0219\x03\x02\x02\x02\u0253\u0224\x03\x02" +
"\x02\x02\u0253\u0232\x03\x02\x02\x02\u0253\u023D\x03\x02\x02\x02\u0253" +
"\u0248\x03\x02\x02\x02\u0254n\x03\x02\x02\x02\u0255\u0259\t\n\x02\x02" +
"\u0256\u0258\t\v\x02\x02\u0257\u0256\x03\x02\x02\x02\u0258\u025B\x03\x02" +
"\x02\x02\u0259\u0257\x03\x02\x02\x02\u0259\u025A\x03\x02\x02\x02\u025A" +
"p\x03\x02\x02\x02\u025B\u0259\x03\x02\x02\x02\u025C\u025E\t\f\x02\x02" +
"\u025D\u025C\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025F\u025D\x03" +
"\x02\x02\x02\u025F\u0260\x03\x02\x02\x02\u0260\u0261\x03\x02\x02\x02\u0261" +
"\u0262\b9\x02\x02\u0262r\x03\x02\x02\x02\u0263\u0264\x071\x02\x02\u0264" +
"\u0265\x07,\x02\x02\u0265\u0269\x03\x02\x02\x02\u0266\u0268\v\x02\x02" +
"\x02\u0267\u0266\x03\x02\x02\x02\u0268\u026B\x03\x02\x02\x02\u0269\u026A" +
"\x03\x02\x02\x02\u0269\u0267\x03\x02\x02\x02\u026A\u026C\x03\x02\x02\x02" +
"\u026B\u0269\x03\x02\x02\x02\u026C\u026D\x07,\x02\x02\u026D\u026E\x07" +
"1\x02\x02\u026E\u026F\x03\x02\x02\x02\u026F\u0270\b:\x03\x02\u0270t\x03" +
"\x02\x02\x02\u0271\u0272\x071\x02\x02\u0272\u0273\x071\x02\x02\u0273\u0277" +
"\x03\x02\x02\x02\u0274\u0276\n\r\x02\x02\u0275\u0274\x03\x02\x02\x02\u0276" +
"\u0279\x03\x02\x02\x02\u0277\u0275\x03\x02\x02\x02\u0277\u0278\x03\x02" +
"\x02\x02\u0278\u027A\x03\x02\x02\x02\u0279\u0277\x03\x02\x02\x02\u027A" +
"\u027B\b;\x03\x02\u027Bv\x03\x02\x02\x02\x1A\x02\u0129\u012F\u0135\u0140" +
"\u017B\u017E\u0183\u0189\u018B\u0194\u019A\u01A1\u01A3\u01AB\u01AD\u01B1" +
"\u01C1\u01D1\u0253\u0259\u025F\u0269\u0277\x04\b\x02\x02\x02\x03\x02";
CashScriptLexer._serializedATN = Utils.join([

@@ -437,0 +455,0 @@ CashScriptLexer._serializedATNSegment0,

"use strict";
// Generated from src/grammar/CashScript.g4 by ANTLR 4.7.3-SNAPSHOT
// Generated from src/grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=CashScriptListener.js.map
import { ATN } from "antlr4ts/atn/ATN";
import { FailedPredicateException } from "antlr4ts/FailedPredicateException";
import { Parser } from "antlr4ts/Parser";

@@ -62,9 +63,10 @@ import { ParserRuleContext } from "antlr4ts/ParserRuleContext";

static readonly StringLiteral = 50;
static readonly HexLiteral = 51;
static readonly TxVar = 52;
static readonly PreimageField = 53;
static readonly Identifier = 54;
static readonly WHITESPACE = 55;
static readonly COMMENT = 56;
static readonly LINE_COMMENT = 57;
static readonly DateLiteral = 51;
static readonly HexLiteral = 52;
static readonly TxVar = 53;
static readonly PreimageField = 54;
static readonly Identifier = 55;
static readonly WHITESPACE = 56;
static readonly COMMENT = 57;
static readonly LINE_COMMENT = 58;
static readonly RULE_sourceFile = 0;

@@ -101,2 +103,3 @@ static readonly RULE_pragmaDirective = 1;

get serializedATN(): string;
protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException;
constructor(input: TokenStream);

@@ -411,2 +414,3 @@ sourceFile(): SourceFileContext;

StringLiteral(): TerminalNode | undefined;
DateLiteral(): TerminalNode | undefined;
HexLiteral(): TerminalNode | undefined;

@@ -413,0 +417,0 @@ constructor(parent: ParserRuleContext | undefined, invokingState: number);

"use strict";
// Generated from src/grammar/CashScript.g4 by ANTLR 4.7.3-SNAPSHOT
// Generated from src/grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=CashScriptVisitor.js.map
export * from './Errors';
export { Artifact, AbiFunction, AbiInput } from './artifact/Artifact';
export { Op, Script } from './generation/Script';
export { PrimitiveType, Type, BytesType, ArrayType, TupleType, parseType, } from './ast/Type';
export { Data, Artifacts, CashCompiler, } from './util';
export declare const version = "0.5.7";
export * as utils from '@cashscript/utils';
export { compileFile, compileString } from './compiler';
export declare const version = "0.6.0";
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./Errors"));
var Script_1 = require("./generation/Script");
exports.Op = Script_1.Op;
var Type_1 = require("./ast/Type");
exports.PrimitiveType = Type_1.PrimitiveType;
exports.BytesType = Type_1.BytesType;
exports.ArrayType = Type_1.ArrayType;
exports.TupleType = Type_1.TupleType;
exports.parseType = Type_1.parseType;
var util_1 = require("./util");
exports.Data = util_1.Data;
exports.Artifacts = util_1.Artifacts;
exports.CashCompiler = util_1.CashCompiler;
exports.version = '0.5.7';
exports.version = exports.compileString = exports.compileFile = exports.utils = void 0;
__exportStar(require("./Errors"), exports);
exports.utils = __importStar(require("@cashscript/utils"));
var compiler_1 = require("./compiler");
Object.defineProperty(exports, "compileFile", { enumerable: true, get: function () { return compiler_1.compileFile; } });
Object.defineProperty(exports, "compileString", { enumerable: true, get: function () { return compiler_1.compileString; } });
exports.version = '0.6.0';
//# sourceMappingURL=index.js.map

@@ -1,2 +0,2 @@

import { Node, ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, BlockNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode } from '../ast/AST';
import { Node, ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, BlockNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode } from '../ast/AST';
import AstTraversal from '../ast/AstTraversal';

@@ -23,2 +23,3 @@ export default class OutputSourceCodeTraversal extends AstTraversal {

visitFunctionCall(node: FunctionCallNode): Node;
visitInstantiation(node: InstantiationNode): Node;
visitTupleIndexOp(node: TupleIndexOpNode): Node;

@@ -25,0 +26,0 @@ visitBinaryOp(node: BinaryOpNode): Node;

@@ -128,2 +128,10 @@ "use strict";

}
visitInstantiation(node) {
this.addOutput('new ');
node.identifier = this.visit(node.identifier);
this.addOutput('(');
node.parameters = this.visitCommaList(node.parameters);
this.addOutput(')');
return node;
}
visitTupleIndexOp(node) {

@@ -130,0 +138,0 @@ node.tuple = this.visit(node.tuple);

@@ -6,5 +6,5 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@cashscript/utils");
const AstTraversal_1 = __importDefault(require("../ast/AstTraversal"));
const Errors_1 = require("../Errors");
const Type_1 = require("../ast/Type");
const Operator_1 = require("../ast/Operator");

@@ -32,3 +32,3 @@ const Globals_1 = require("../ast/Globals");

const parameters = node.expression.type ? [node.expression.type] : [];
expectParameters(node, parameters, [Type_1.PrimitiveType.BOOL]);
expectParameters(node, parameters, [utils_1.PrimitiveType.BOOL]);
return node;

@@ -40,4 +40,4 @@ }

node.elseBlock = this.visitOptional(node.elseBlock);
if (!Type_1.implicitlyCastable(node.condition.type, Type_1.PrimitiveType.BOOL)) {
throw new Errors_1.TypeError(node, node.condition.type, Type_1.PrimitiveType.BOOL);
if (!utils_1.implicitlyCastable(node.condition.type, utils_1.PrimitiveType.BOOL)) {
throw new Errors_1.TypeError(node, node.condition.type, utils_1.PrimitiveType.BOOL);
}

@@ -49,3 +49,3 @@ return node;

node.size = this.visitOptional(node.size);
if (!Type_1.explicitlyCastable(node.expression.type, node.type)) {
if (!utils_1.explicitlyCastable(node.expression.type, node.type)) {
throw new Errors_1.CastTypeError(node);

@@ -55,3 +55,3 @@ }

if (node.size) {
if (node.expression.type !== Type_1.PrimitiveType.INT || node.type.toString() !== 'bytes') {
if (node.expression.type !== utils_1.PrimitiveType.INT || node.type.toString() !== 'bytes') {
throw new Errors_1.CastSizeError(node);

@@ -104,3 +104,3 @@ }

node.right = this.visit(node.right);
const resType = Type_1.resultingType(node.left.type, node.right.type);
const resType = utils_1.resultingType(node.left.type, node.right.type);
if (!resType && !node.operator.startsWith('.')) {

@@ -111,8 +111,8 @@ throw new Errors_1.UnequalTypeError(node);

case Operator_1.BinaryOperator.PLUS:
expectAnyOfTypes(node, resType, [Type_1.PrimitiveType.INT, Type_1.PrimitiveType.STRING, new Type_1.BytesType()]);
expectAnyOfTypes(node, resType, [utils_1.PrimitiveType.INT, utils_1.PrimitiveType.STRING, new utils_1.BytesType()]);
node.type = resType;
// Infer new bounded bytes type if both operands are bounded bytes types
if (node.left.type instanceof Type_1.BytesType && node.right.type instanceof Type_1.BytesType) {
if (node.left.type instanceof utils_1.BytesType && node.right.type instanceof utils_1.BytesType) {
if (node.left.type.bound && node.right.type.bound) {
node.type = new Type_1.BytesType(node.left.type.bound + node.right.type.bound);
node.type = new utils_1.BytesType(node.left.type.bound + node.right.type.bound);
}

@@ -132,7 +132,7 @@ }

expectInt(node, resType);
node.type = Type_1.PrimitiveType.BOOL;
node.type = utils_1.PrimitiveType.BOOL;
return node;
case Operator_1.BinaryOperator.EQ:
case Operator_1.BinaryOperator.NE:
node.type = Type_1.PrimitiveType.BOOL;
node.type = utils_1.PrimitiveType.BOOL;
return node;

@@ -142,3 +142,3 @@ case Operator_1.BinaryOperator.AND:

expectBool(node, resType);
node.type = Type_1.PrimitiveType.BOOL;
node.type = utils_1.PrimitiveType.BOOL;
return node;

@@ -152,6 +152,6 @@ case Operator_1.BinaryOperator.BIT_AND:

case Operator_1.BinaryOperator.SPLIT:
expectAnyOfTypes(node, node.left.type, [new Type_1.BytesType(), Type_1.PrimitiveType.STRING]);
expectAnyOfTypes(node, node.left.type, [new utils_1.BytesType(), utils_1.PrimitiveType.STRING]);
expectInt(node, node.right.type);
// Result of split are two unbounded bytes types (could be improved to do type inference)
node.type = new Type_1.TupleType(node.left.type instanceof Type_1.BytesType ? new Type_1.BytesType() : Type_1.PrimitiveType.STRING);
node.type = new utils_1.TupleType(node.left.type instanceof utils_1.BytesType ? new utils_1.BytesType() : utils_1.PrimitiveType.STRING);
return node;

@@ -167,14 +167,14 @@ default:

expectBool(node, node.expression.type);
node.type = Type_1.PrimitiveType.BOOL;
node.type = utils_1.PrimitiveType.BOOL;
return node;
case Operator_1.UnaryOperator.NEGATE:
expectInt(node, node.expression.type);
node.type = Type_1.PrimitiveType.INT;
node.type = utils_1.PrimitiveType.INT;
return node;
case Operator_1.UnaryOperator.SIZE:
expectAnyOfTypes(node, node.expression.type, [new Type_1.BytesType(), Type_1.PrimitiveType.STRING]);
node.type = Type_1.PrimitiveType.INT;
expectAnyOfTypes(node, node.expression.type, [new utils_1.BytesType(), utils_1.PrimitiveType.STRING]);
node.type = utils_1.PrimitiveType.INT;
return node;
case Operator_1.UnaryOperator.REVERSE:
expectAnyOfTypes(node, node.expression.type, [new Type_1.BytesType(), Type_1.PrimitiveType.STRING]);
expectAnyOfTypes(node, node.expression.type, [new utils_1.BytesType(), utils_1.PrimitiveType.STRING]);
// Type is preserved

@@ -194,7 +194,7 @@ node.type = node.expression.type;

});
const elementType = Type_1.arrayType(elementTypes);
const elementType = utils_1.arrayType(elementTypes);
if (!elementType) {
throw new Errors_1.ArrayElementError(node);
}
node.type = new Type_1.ArrayType(elementType);
node.type = new utils_1.ArrayType(elementType);
return node;

@@ -213,3 +213,3 @@ }

return;
if (expectedTypes.find((expected) => Type_1.implicitlyCastable(actual, expected))) {
if (expectedTypes.find((expected) => utils_1.implicitlyCastable(actual, expected))) {
return;

@@ -220,10 +220,10 @@ }

function expectBool(node, actual) {
expectAnyOfTypes(node, actual, [Type_1.PrimitiveType.BOOL]);
expectAnyOfTypes(node, actual, [utils_1.PrimitiveType.BOOL]);
}
function expectInt(node, actual) {
expectAnyOfTypes(node, actual, [Type_1.PrimitiveType.INT]);
expectAnyOfTypes(node, actual, [utils_1.PrimitiveType.INT]);
}
function expectSameSizeBytes(node, left, right) {
if (!(left instanceof Type_1.BytesType) || !(right instanceof Type_1.BytesType)) {
throw new Errors_1.UnsupportedTypeError(node, left, new Type_1.BytesType());
if (!(left instanceof utils_1.BytesType) || !(right instanceof utils_1.BytesType)) {
throw new Errors_1.UnsupportedTypeError(node, left, new utils_1.BytesType());
}

@@ -235,8 +235,8 @@ if (left.bound !== right.bound) {

function expectTuple(node, actual) {
if (!(actual instanceof Type_1.TupleType)) {
throw new Errors_1.UnsupportedTypeError(node, actual, new Type_1.TupleType());
if (!(actual instanceof utils_1.TupleType)) {
throw new Errors_1.UnsupportedTypeError(node, actual, new utils_1.TupleType());
}
}
function expectAssignable(node, actual, expected) {
if (!Type_1.implicitlyCastable(actual, expected)) {
if (!utils_1.implicitlyCastable(actual, expected)) {
throw new Errors_1.AssignTypeError(node);

@@ -246,3 +246,3 @@ }

function expectParameters(node, actual, expected) {
if (!Type_1.implicitlyCastableSignature(actual, expected)) {
if (!utils_1.implicitlyCastableSignature(actual, expected)) {
throw new Errors_1.InvalidParameterTypeError(node, actual, expected);

@@ -249,0 +249,0 @@ }

@@ -0,24 +1,3 @@

import { Artifact, Script } from '@cashscript/utils';
import { Ast } from '../ast/AST';
import { Script } from '../generation/Script';
export interface AbiInput {
name: string;
type: string;
}
export interface AbiFunction {
name: string;
covenant: boolean;
inputs: AbiInput[];
}
export interface Artifact {
contractName: string;
constructorInputs: AbiInput[];
abi: AbiFunction[];
bytecode: string;
source: string;
compiler: {
name: string;
version: string;
};
updatedAt: string;
}
export declare function generateArtifact(ast: Ast, script: Script, source: string): Artifact;

@@ -0,3 +1,3 @@

import { scriptToAsm } from '@cashscript/utils';
import { version } from '..';
import { Data } from '../util';
export function generateArtifact(ast, script, source) {

@@ -15,3 +15,3 @@ const { contract } = ast;

}));
const bytecode = Data.scriptToAsm(script);
const bytecode = scriptToAsm(script);
return {

@@ -18,0 +18,0 @@ contractName: contract.name,

@@ -0,1 +1,2 @@

import { Type } from '@cashscript/utils';
import { TimeOp, PreimageField } from './Globals';

@@ -5,3 +6,2 @@ import AstVisitor from './AstVisitor';

import { Location } from './Location';
import { Type } from './Type';
import { SymbolTable, Symbol } from './SymbolTable';

@@ -8,0 +8,0 @@ export declare type Ast = SourceFileNode;

@@ -1,2 +0,2 @@

import { PrimitiveType, BytesType } from './Type';
import { PrimitiveType, BytesType } from '@cashscript/utils';
export class Node {

@@ -3,0 +3,0 @@ }

@@ -39,3 +39,4 @@ import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor';

createStringLiteral(ctx: LiteralContext): StringLiteralNode;
createDateLiteral(ctx: LiteralContext): IntLiteralNode;
createHexLiteral(ctx: LiteralContext): HexLiteralNode;
}
import { hexToBin } from '@bitauth/libauth';
import { parseType } from '@cashscript/utils';
import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor';

@@ -9,4 +10,3 @@ import semver from 'semver';

import { version } from '..';
import { VersionError } from '../Errors';
import { parseType } from './Type';
import { ParseError, VersionError } from '../Errors';
export default class AstBuilder extends AbstractParseTreeVisitor {

@@ -199,2 +199,5 @@ constructor(tree) {

}
if (ctx.DateLiteral()) {
return this.createDateLiteral(ctx);
}
if (ctx.HexLiteral()) {

@@ -230,2 +233,16 @@ return this.createHexLiteral(ctx);

}
createDateLiteral(ctx) {
const rawString = ctx.DateLiteral().text;
const stringValue = rawString.substring(6, rawString.length - 2).trim();
if (!/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d$/.test(stringValue)) {
throw new ParseError('Date should be in format `YYYY-MM-DDThh:mm:ss`', Location.fromCtx(ctx));
}
const timestamp = Math.round(Date.parse(stringValue) / 1000);
if (Number.isNaN(timestamp)) {
throw new ParseError(`Incorrectly formatted date "${stringValue}"`, Location.fromCtx(ctx));
}
const intLiteral = new IntLiteralNode(timestamp);
intLiteral.location = Location.fromCtx(ctx);
return intLiteral;
}
createHexLiteral(ctx) {

@@ -232,0 +249,0 @@ const hexString = ctx.HexLiteral().text;

@@ -12,5 +12,5 @@ export default class AstVisitor {

visitOptionalList(nodes) {
return nodes && nodes.map((n) => this.visit(n));
return nodes && this.visitList(nodes);
}
}
//# sourceMappingURL=AstVisitor.js.map

@@ -0,3 +1,3 @@

import { PrimitiveType, ArrayType, BytesType } from '@cashscript/utils';
import { SymbolTable, Symbol } from './SymbolTable';
import { PrimitiveType, ArrayType, BytesType } from './Type';
export const NumberUnit = {

@@ -4,0 +4,0 @@ SATOSHIS: 1,

@@ -9,3 +9,3 @@ export class Location {

const stop = ((_a = ctx.stop) === null || _a === void 0 ? void 0 : _a.text) ? ctx.stop : ctx.start;
const textLength = (_b = stop.text, (_b !== null && _b !== void 0 ? _b : '')).length;
const textLength = ((_b = stop.text) !== null && _b !== void 0 ? _b : '').length;
const start = new Point(ctx.start.line, ctx.start.charPositionInLine);

@@ -17,3 +17,3 @@ const end = new Point(stop.line, stop.charPositionInLine + textLength);

var _a;
const textLength = (_a = token.text, (_a !== null && _a !== void 0 ? _a : '')).length;
const textLength = ((_a = token.text) !== null && _a !== void 0 ? _a : '').length;
const start = new Point(token.line, token.charPositionInLine);

@@ -20,0 +20,0 @@ const end = new Point(token.line, token.charPositionInLine + textLength);

@@ -0,3 +1,3 @@

import { Type } from '@cashscript/utils';
import { VariableDefinitionNode, ParameterNode, IdentifierNode, Node } from './AST';
import { Type } from './Type';
export declare class Symbol {

@@ -4,0 +4,0 @@ name: string;

@@ -45,6 +45,4 @@ export class Symbol {

get(name) {
var _a;
let symbol = this.symbols.get(name);
symbol = (symbol !== null && symbol !== void 0 ? symbol : (_a = this.parent) === null || _a === void 0 ? void 0 : _a.get(name));
return symbol;
var _a, _b;
return (_a = this.symbols.get(name)) !== null && _a !== void 0 ? _a : (_b = this.parent) === null || _b === void 0 ? void 0 : _b.get(name);
}

@@ -51,0 +49,0 @@ getFromThis(name) {

import { ANTLRErrorListener, RecognitionException, Recognizer } from 'antlr4ts';
/**
* ANTLR Error Listener that immediately throws on error. This is used so that
* ANTLR doesn't attempt any error recovery during lexing/parsing and fails early.
*/
export default class ThrowingErrorListener implements ANTLRErrorListener<any> {
static readonly INSTANCE: ThrowingErrorListener;
syntaxError<T>(recognizer: Recognizer<T, any>, offendingSymbol: T, line: number, charPositionInLine: number, msg: string, e?: RecognitionException): void;
syntaxError<T>(recognizer: Recognizer<T, any>, offendingSymbol: T, line: number, charPositionInLine: number, message: string, e?: RecognitionException): void;
}
import { ParseError } from '../Errors';
import { Point } from './Location';
/**
* ANTLR Error Listener that immediately throws on error. This is used so that
* ANTLR doesn't attempt any error recovery during lexing/parsing and fails early.
*/
export default class ThrowingErrorListener {
syntaxError(recognizer, offendingSymbol, line, charPositionInLine, msg, e) {
throw new ParseError(`line ${line}:${charPositionInLine} ${msg}`);
syntaxError(recognizer, offendingSymbol, line, charPositionInLine, message, e) {
const capitalisedMessage = message.charAt(0).toUpperCase() + message.slice(1);
throw new ParseError(capitalisedMessage, new Point(line, charPositionInLine));
}

@@ -9,0 +12,0 @@ }

#! /usr/bin/env node
import { binToHex, hexToBin } from '@bitauth/libauth';
import { binToHex } from '@bitauth/libauth';
import { asmToScript, calculateBytesize, countOpcodes, exportArtifact, scriptToAsm, scriptToBytecode, } from '@cashscript/utils';
import { program } from 'commander';
import fs from 'fs';
import path from 'path';
import { CashCompiler, Artifacts, version } from '.';
import { countOpcodes, Data, calculateBytesize } from './util';
import { compileFile, version } from '.';
program

@@ -18,6 +18,2 @@ .storeOptionsAsProperties(false)

.option('-s, --size', 'Display the size in bytes of the compiled bytecode.')
.option('-a, --args <args...>', 'List of constructor arguments to pass into the contract. '
+ 'Can only be used in combination with either the --hex or --asm flags. '
+ 'When compiling to a JSON artifact, contract instantiation should be done through the CashScript SDK. '
+ 'Note that NO type checking is performed by the cashc CLI, so it is safer to use the CashScript SDK.')
.parse();

@@ -35,24 +31,4 @@ const opts = program.opts();

try {
const artifact = CashCompiler.compileFile(sourceFile);
const script = Data.asmToScript(artifact.bytecode);
// Parse any provided args and add these to the front of the script
if (opts.args) {
opts.args.forEach((arg) => {
if (arg === 'true') {
script.unshift(Data.encodeBool(true));
}
else if (arg === 'false') {
script.unshift(Data.encodeBool(false));
}
else if (arg.startsWith('0x')) {
script.unshift(hexToBin(arg.substring(2)));
}
else if (!Number.isNaN(Number(arg))) {
script.unshift(Data.encodeInt(Number(arg)));
}
else {
script.unshift(Data.encodeString(arg));
}
});
}
const artifact = compileFile(sourceFile);
const script = asmToScript(artifact.bytecode);
const opcount = countOpcodes(script);

@@ -67,7 +43,7 @@ const bytesize = calculateBytesize(script);

if (opts.asm) {
console.log(Data.scriptToAsm(script));
console.log(scriptToAsm(script));
return;
}
if (opts.hex) {
console.log(binToHex(Data.scriptToBytecode(script)));
console.log(binToHex(scriptToBytecode(script)));
return;

@@ -91,3 +67,3 @@ }

}
Artifacts.export(artifact, outputFile);
exportArtifact(artifact, outputFile);
}

@@ -94,0 +70,0 @@ else {

@@ -1,4 +0,5 @@

import { IdentifierNode, FunctionDefinitionNode, VariableDefinitionNode, ParameterNode, Node, FunctionCallNode, BinaryOpNode, UnaryOpNode, TimeOpNode, CastNode, AssignNode, BranchNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode } from './ast/AST';
import { Type, PrimitiveType } from './ast/Type';
import { Type, PrimitiveType } from '@cashscript/utils';
import { IdentifierNode, FunctionDefinitionNode, VariableDefinitionNode, ParameterNode, Node, FunctionCallNode, BinaryOpNode, UnaryOpNode, TimeOpNode, CastNode, AssignNode, BranchNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode, StatementNode, ContractNode } from './ast/AST';
import { Symbol, SymbolType } from './ast/SymbolTable';
import { Location, Point } from './ast/Location';
export declare class CashScriptError extends Error {

@@ -9,2 +10,3 @@ node: Node;

export declare class ParseError extends Error {
constructor(message: string, location?: Point | Location);
}

@@ -34,6 +36,18 @@ export declare class UndefinedReferenceError extends CashScriptError {

}
export declare class EmptyContractError extends CashScriptError {
node: ContractNode;
constructor(node: ContractNode);
}
export declare class EmptyFunctionError extends CashScriptError {
node: FunctionDefinitionNode;
constructor(node: FunctionDefinitionNode);
}
export declare class FinalRequireStatementError extends CashScriptError {
node: StatementNode;
constructor(node: StatementNode);
}
export declare class TypeError extends CashScriptError {
actual?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined;
expected?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined;
constructor(node: Node, actual?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined, expected?: PrimitiveType | import("./ast/Type").ArrayType | import("./ast/Type").TupleType | import("./ast/Type").BytesType | Type[] | undefined, message?: string);
actual?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined;
expected?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined;
constructor(node: Node, actual?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined, expected?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined, message?: string);
}

@@ -40,0 +54,0 @@ export declare class InvalidParameterTypeError extends TypeError {

@@ -0,3 +1,4 @@

import { PrimitiveType } from '@cashscript/utils';
import { BinaryOpNode, UnaryOpNode, TimeOpNode, AssignNode, TupleIndexOpNode, RequireNode, } from './ast/AST';
import { PrimitiveType } from './ast/Type';
import { Point } from './ast/Location';
export class CashScriptError extends Error {

@@ -14,2 +15,10 @@ constructor(node, message) {

export class ParseError extends Error {
constructor(message, location) {
const start = location instanceof Point ? location : location === null || location === void 0 ? void 0 : location.start;
if (start) {
message += ` at ${start}`;
}
super(message);
this.name = this.constructor.name;
}
}

@@ -50,5 +59,23 @@ export class UndefinedReferenceError extends CashScriptError {

}
export class EmptyContractError extends CashScriptError {
constructor(node) {
super(node, `Contract ${node.name} contains no functions`);
this.node = node;
}
}
export class EmptyFunctionError extends CashScriptError {
constructor(node) {
super(node, `Function ${node.name} contains no statements`);
this.node = node;
}
}
export class FinalRequireStatementError extends CashScriptError {
constructor(node) {
super(node, 'Final statement is expected to be a require() statement');
this.node = node;
}
}
export class TypeError extends CashScriptError {
constructor(node, actual, expected, message) {
super(node, (message !== null && message !== void 0 ? message : `Found type '${actual}' where type '${expected}' was expected`));
super(node, message !== null && message !== void 0 ? message : `Found type '${actual}' where type '${expected}' was expected`);
this.actual = actual;

@@ -55,0 +82,0 @@ this.expected = expected;

@@ -0,5 +1,5 @@

import { Script } from '@cashscript/utils';
import { ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode, SourceFileNode, Node, InstantiationNode } from '../ast/AST';
import AstTraversal from '../ast/AstTraversal';
import { PreimageField } from '../ast/Globals';
import { Script } from './Script';
export default class GenerateTargetTraversal extends AstTraversal {

@@ -22,2 +22,3 @@ output: Script;

decodePreimage(fields: PreimageField[]): void;
removeFinalVerify(): void;
cleanStack(): void;

@@ -24,0 +25,0 @@ visitParameter(node: ParameterNode): Node;

import { hexToBin } from '@bitauth/libauth';
import { asmToScript, encodeBool, encodeInt, encodeString, Op, PrimitiveType, resultingType, scriptToAsm, } from '@cashscript/utils';
import { FunctionCallNode, HexLiteralNode, } from '../ast/AST';
import AstTraversal from '../ast/AstTraversal';
import { GlobalFunction, PreimageField, Class } from '../ast/Globals';
import { resultingType, PrimitiveType } from '../ast/Type';
import { Op, toOps, } from './Script';
import { Data } from '../util';
import { PreimageParts } from './preimage';
import { BinaryOperator } from '../ast/Operator';
import { compileBinaryOp, compileCast, compileGlobalFunction, compileTimeOp, compileUnaryOp, } from './utils';
export default class GenerateTargetTraversal extends AstTraversal {

@@ -55,3 +54,3 @@ constructor() {

// Minimally encode output by going Script -> ASM -> Script
this.output = Data.asmToScript(Data.scriptToAsm(this.output));
this.output = asmToScript(scriptToAsm(this.output));
return node;

@@ -69,3 +68,3 @@ }

const selectorIndex = this.getStackIndex('$$');
this.emit(Data.encodeInt(selectorIndex));
this.emit(encodeInt(selectorIndex));
if (i === node.functions.length - 1) {

@@ -80,3 +79,3 @@ this.emit(Op.OP_ROLL);

// enforced with NUMEQUALVERIFY
this.emit(Data.encodeInt(i));
this.emit(encodeInt(i));
this.emit(Op.OP_NUMEQUAL);

@@ -110,13 +109,3 @@ if (i < node.functions.length - 1) {

node.body = this.visit(node.body);
// Remove final OP_VERIFY
// If the final opcodes are OP_CHECK{LOCKTIME|SEQUENCE}VERIFY OP_DROP
// Or if the final opcode is OP_ENDIF
// Or if the remaining stack size >=5 (2DROP 2DROP 1 < NIP NIP NIP NIP)
// then push it back to the script, and push OP_TRUE (OP_1) to the stack
const finalOp = this.output.pop();
this.pushToStack('(value)');
if (finalOp === Op.OP_DROP || finalOp === Op.OP_ENDIF || (finalOp && this.stack.length >= 5)) {
this.emit(finalOp);
this.emit(Op.OP_1);
}
this.removeFinalVerify();
this.cleanStack();

@@ -128,3 +117,3 @@ return node;

this.pushToStack('$preimage', true);
this.emit(Data.encodeInt(this.getStackIndex('$preimage')));
this.emit(encodeInt(this.getStackIndex('$preimage')));
this.emit(Op.OP_PICK);

@@ -144,7 +133,7 @@ const cuts = {

if (start !== 0) {
this.emit(Data.encodeInt(start));
this.emit(encodeInt(start));
this.emit(Op.OP_SPLIT);
this.emit(Op.OP_NIP);
}
this.emit(Data.encodeInt(part.size));
this.emit(encodeInt(part.size));
this.emit(Op.OP_SPLIT);

@@ -161,7 +150,7 @@ this.pushToStack(field);

this.emit(Op.OP_NOP);
this.emit(Data.encodeInt(start));
this.emit(encodeInt(start));
this.emit(Op.OP_SPLIT);
this.emit(Op.OP_NIP);
this.emit(Op.OP_SIZE);
this.emit(Data.encodeInt(part.size));
this.emit(encodeInt(part.size));
this.emit(Op.OP_SUB);

@@ -185,3 +174,3 @@ this.emit(Op.OP_SPLIT);

this.emit(Op.OP_SIZE);
this.emit(Data.encodeInt(end));
this.emit(encodeInt(end));
this.emit(Op.OP_SUB);

@@ -192,3 +181,3 @@ this.emit(Op.OP_SPLIT);

else if (start !== 0) {
this.emit(Data.encodeInt(start));
this.emit(encodeInt(start));
this.emit(Op.OP_SPLIT);

@@ -200,3 +189,3 @@ this.emit(Op.OP_NIP);

return;
this.emit(Data.encodeInt(part.size));
this.emit(encodeInt(part.size));
this.emit(Op.OP_SPLIT);

@@ -211,2 +200,24 @@ cuts.fromStart = part.fromStart + part.size;

}
removeFinalVerify() {
// After EnsureFinalRequireTraversal, we know that the final opcodes are either
// "OP_VERIFY", "OP_CHECK{LOCKTIME|SEQUENCE}VERIFY OP_DROP" or "OP_ENDIF"
const finalOp = this.output.pop();
// If the final op is OP_VERIFY and the stack size is less than 4 we remove it from the script
// - We have the stack size check because it is more efficient to use 2DROP rather than NIP
// if >= 4 elements are left (5 including final value) (e.g. 2DROP 2DROP 1 < NIP NIP NIP NIP)
if (finalOp === Op.OP_VERIFY && this.stack.length < 4) {
// Since the final value is no longer popped from the stack by OP_VERIFY,
// we add it back to the stack
this.pushToStack('(value)');
}
else {
this.emit(finalOp);
// At this point there is no verification value left on the stack:
// - scoped stack is cleared inside branch ended by OP_ENDIF
// - OP_CHECK{LOCKTIME|SEQUENCE}VERIFY OP_DROP does not leave a verification value
// so we add OP_1 to the script (indicating success)
this.emit(Op.OP_1);
this.pushToStack('(value)');
}
}
cleanStack() {

@@ -245,3 +256,3 @@ // Keep final verification value, OP_NIP the other stack values

emitReplace(index) {
this.emit(Data.encodeInt(index));
this.emit(encodeInt(index));
this.emit(Op.OP_ROLL);

@@ -261,3 +272,3 @@ this.emit(Op.OP_DROP);

node.expression = this.visit(node.expression);
this.emit(toOps.fromTimeOp(node.timeOp));
this.emit(compileTimeOp(node.timeOp));
this.popFromStack();

@@ -315,3 +326,3 @@ return node;

}
this.emit(toOps.fromCast(node.expression.type, node.type));
this.emit(compileCast(node.expression.type, node.type));
this.popFromStack();

@@ -328,3 +339,3 @@ this.pushToStack('(value)');

this.verifyCovenant();
this.emit(toOps.fromFunction(node.identifier.name));
this.emit(compileGlobalFunction(node.identifier.name));
this.popFromStack(node.parameters.length);

@@ -335,3 +346,3 @@ this.pushToStack('(value)');

visitMultiSig(node) {
this.emit(Data.encodeBool(false));
this.emit(encodeBool(false));
node.parameters = this.visitList(node.parameters);

@@ -366,3 +377,3 @@ this.emit(Op.OP_CHECKMULTISIG);

this.removeFromStack(preimageIndex);
this.emit(Data.encodeInt(preimageIndex));
this.emit(encodeInt(preimageIndex));
this.emit(Op.OP_ROLL);

@@ -431,3 +442,3 @@ this.emit(Op.OP_SHA256);

this.emit(Op.OP_DUP);
this.emit(Data.encodeInt(75));
this.emit(encodeInt(75));
this.emit(Op.OP_GREATERTHAN);

@@ -474,3 +485,4 @@ this.emit(Op.OP_IF);

node.right = this.visit(node.right);
this.emit(toOps.fromBinaryOp(node.operator, resultingType(node.left.type, node.right.type) === PrimitiveType.INT));
const isNumeric = resultingType(node.left.type, node.right.type) === PrimitiveType.INT;
this.emit(compileBinaryOp(node.operator, isNumeric));
this.popFromStack(2);

@@ -484,3 +496,3 @@ this.pushToStack('(value)');

node.expression = this.visit(node.expression);
this.emit(toOps.fromUnaryOp(node.operator));
this.emit(compileUnaryOp(node.operator));
this.popFromStack();

@@ -492,3 +504,3 @@ this.pushToStack('(value)');

node.elements = this.visitList(node.elements);
this.emit(Data.encodeInt(node.elements.length));
this.emit(encodeInt(node.elements.length));
this.pushToStack('(value)');

@@ -499,3 +511,3 @@ return node;

const stackIndex = this.getStackIndex(node.name);
this.emit(Data.encodeInt(stackIndex));
this.emit(encodeInt(stackIndex));
// If the final use is inside an if-statement, we still OP_PICK it

@@ -517,3 +529,3 @@ // We do this so that there's no difference in stack depths between execution paths

visitBoolLiteral(node) {
this.emit(Data.encodeBool(node.value));
this.emit(encodeBool(node.value));
this.pushToStack('(value)');

@@ -523,3 +535,3 @@ return node;

visitIntLiteral(node) {
this.emit(Data.encodeInt(node.value));
this.emit(encodeInt(node.value));
this.pushToStack('(value)');

@@ -529,3 +541,3 @@ return node;

visitStringLiteral(node) {
this.emit(Data.encodeString(node.value));
this.emit(encodeString(node.value));
this.pushToStack('(value)');

@@ -532,0 +544,0 @@ return node;

@@ -56,9 +56,10 @@ import { ATN } from "antlr4ts/atn/ATN";

static readonly StringLiteral = 50;
static readonly HexLiteral = 51;
static readonly TxVar = 52;
static readonly PreimageField = 53;
static readonly Identifier = 54;
static readonly WHITESPACE = 55;
static readonly COMMENT = 56;
static readonly LINE_COMMENT = 57;
static readonly DateLiteral = 51;
static readonly HexLiteral = 52;
static readonly TxVar = 53;
static readonly PreimageField = 54;
static readonly Identifier = 55;
static readonly WHITESPACE = 56;
static readonly COMMENT = 57;
static readonly LINE_COMMENT = 58;
static readonly channelNames: string[];

@@ -65,0 +66,0 @@ static readonly modeNames: string[];

@@ -1,2 +0,2 @@

// Generated from src/grammar/CashScript.g4 by ANTLR 4.7.3-SNAPSHOT
// Generated from src/grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT
import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer";

@@ -85,9 +85,10 @@ import { Lexer } from "antlr4ts/Lexer";

CashScriptLexer.StringLiteral = 50;
CashScriptLexer.HexLiteral = 51;
CashScriptLexer.TxVar = 52;
CashScriptLexer.PreimageField = 53;
CashScriptLexer.Identifier = 54;
CashScriptLexer.WHITESPACE = 55;
CashScriptLexer.COMMENT = 56;
CashScriptLexer.LINE_COMMENT = 57;
CashScriptLexer.DateLiteral = 51;
CashScriptLexer.HexLiteral = 52;
CashScriptLexer.TxVar = 53;
CashScriptLexer.PreimageField = 54;
CashScriptLexer.Identifier = 55;
CashScriptLexer.WHITESPACE = 56;
CashScriptLexer.COMMENT = 57;
CashScriptLexer.LINE_COMMENT = 58;
// tslint:disable:no-trailing-whitespace

@@ -108,4 +109,4 @@ CashScriptLexer.channelNames = [

"T__41", "T__42", "VersionLiteral", "BooleanLiteral", "NumberUnit", "NumberLiteral",
"Bytes", "Bound", "StringLiteral", "HexLiteral", "TxVar", "PreimageField",
"Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
"Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", "TxVar",
"PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
];

@@ -128,8 +129,8 @@ CashScriptLexer._LITERAL_NAMES = [

undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit",
"NumberLiteral", "Bytes", "Bound", "StringLiteral", "HexLiteral", "TxVar",
"PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
"NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral",
"TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT",
];
CashScriptLexer.VOCABULARY = new VocabularyImpl(CashScriptLexer._LITERAL_NAMES, CashScriptLexer._SYMBOLIC_NAMES, []);
CashScriptLexer._serializedATNSegments = 2;
CashScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02;\u0271\b\x01" +
CashScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02<\u027C\b\x01" +
"\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +

@@ -143,284 +144,288 @@ "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +

"+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" +
"4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x03\x02\x03\x02\x03" +
"\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04\x03" +
"4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x03\x02\x03" +
"\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03" +
"\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" +
"\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\t" +
"\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03" +
"\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F" +
"\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x11" +
"\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" +
"\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15" +
"\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18\x03\x18" +
"\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" +
"\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" +
"\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D\x03\x1D" +
"\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 \x03 \x03" +
"!\x03!\x03!\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03%\x03&" +
"\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03)\x03)" +
"\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03+\x03" +
"+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x06-\u0126\n" +
"-\r-\x0E-\u0127\x03-\x03-\x06-\u012C\n-\r-\x0E-\u012D\x03-\x03-\x06-\u0132" +
"\n-\r-\x0E-\u0133\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x05.\u013F" +
"\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03" +
"\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" +
"\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F" +
"\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10" +
"\x03\x11\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" +
"\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" +
"\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18" +
"\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" +
"\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" +
"\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" +
"\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 " +
"\x03 \x03!\x03!\x03!\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03" +
"%\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03" +
")\x03)\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" +
"+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x06-\u0128" +
"\n-\r-\x0E-\u0129\x03-\x03-\x06-\u012E\n-\r-\x0E-\u012F\x03-\x03-\x06" +
"-\u0134\n-\r-\x0E-\u0135\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03." +
"\x05.\u0141\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/" +
"\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" +
"/\x03/\x05/\u017A\n/\x030\x050\u017D\n0\x030\x060\u0180\n0\r0\x0E0\u0181" +
"\x030\x030\x060\u0186\n0\r0\x0E0\u0187\x050\u018A\n0\x031\x031\x031\x03" +
"1\x031\x031\x031\x051\u0193\n1\x032\x032\x072\u0197\n2\f2\x0E2\u019A\v" +
"2\x033\x033\x033\x033\x073\u01A0\n3\f3\x0E3\u01A3\v3\x033\x033\x033\x03" +
"3\x033\x073\u01AA\n3\f3\x0E3\u01AD\v3\x033\x053\u01B0\n3\x034\x034\x03" +
"4\x074\u01B5\n4\f4\x0E4\u01B8\v4\x035\x035\x035\x035\x035\x035\x035\x03" +
"5\x035\x035\x035\x035\x035\x055\u01C7\n5\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x056\u0249\n6\x03" +
"7\x037\x077\u024D\n7\f7\x0E7\u0250\v7\x038\x068\u0253\n8\r8\x0E8\u0254" +
"\x038\x038\x039\x039\x039\x039\x079\u025D\n9\f9\x0E9\u0260\v9\x039\x03" +
"9\x039\x039\x039\x03:\x03:\x03:\x03:\x07:\u026B\n:\f:\x0E:\u026E\v:\x03" +
":\x03:\x05\u01A1\u01AB\u025E\x02\x02;\x03\x02\x03\x05\x02\x04\x07\x02" +
"\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02" +
"\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12" +
"#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02" +
"\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C" +
"\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02" +
".[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02" +
":s\x02;\x03\x02\x0E\x03\x022;\x03\x02//\x04\x02GGgg\x03\x023;\x05\x02" +
"\f\f\x0F\x0F$$\x05\x02\f\f\x0F\x0F))\x04\x02ZZzz\x05\x022;CHch\x04\x02" +
"C\\c|\x06\x022;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02" +
"\u0298\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02" +
"\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02" +
"\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02" +
"\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02" +
"\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02" +
"\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02" +
"\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03" +
"\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02" +
"\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02" +
";\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02" +
"\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02" +
"\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03" +
"\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02" +
"\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02" +
"]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02" +
"\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02" +
"\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03" +
"\x02\x02\x02\x02s\x03\x02\x02\x02\x03u\x03\x02\x02\x02\x05|\x03\x02\x02" +
"\x02\x07~\x03\x02\x02\x02\t\x89\x03\x02\x02\x02\v\x8B\x03\x02\x02\x02" +
"\r\x8D\x03\x02\x02\x02\x0F\x90\x03\x02\x02\x02\x11\x92\x03\x02\x02\x02" +
"\x13\x94\x03\x02\x02\x02\x15\x97\x03\x02\x02\x02\x17\x99\x03\x02\x02\x02" +
"\x19\xA2\x03\x02\x02\x02\x1B\xA4\x03\x02\x02\x02\x1D\xA6\x03\x02\x02\x02" +
"\x1F\xAF\x03\x02\x02\x02!\xB1\x03\x02\x02\x02#\xB3\x03\x02\x02\x02%\xB5" +
"\x03\x02\x02\x02\'\xBD\x03\x02\x02\x02)\xC0\x03\x02\x02\x02+\xC5\x03\x02" +
"\x02\x02-\xC9\x03\x02\x02\x02/\xCB\x03\x02\x02\x021\xCD\x03\x02\x02\x02" +
"3\xD8\x03\x02\x02\x025\xE0\x03\x02\x02\x027\xE2\x03\x02\x02\x029\xE4\x03" +
"\x02\x02\x02;\xEB\x03\x02\x02\x02=\xED\x03\x02\x02\x02?\xEF\x03\x02\x02" +
"\x02A\xF1\x03\x02\x02\x02C\xF4\x03\x02\x02\x02E\xF7\x03\x02\x02\x02G\xF9" +
"\x03\x02\x02\x02I\xFB\x03\x02\x02\x02K\xFE\x03\x02\x02\x02M\u0101\x03" +
"\x02\x02\x02O\u0105\x03\x02\x02\x02Q\u010A\x03\x02\x02\x02S\u0111\x03" +
"\x02\x02\x02U\u0118\x03\x02\x02\x02W\u011C\x03\x02\x02\x02Y\u0125\x03" +
"\x02\x02\x02[\u013E\x03\x02\x02\x02]\u0179\x03\x02\x02\x02_\u017C\x03" +
"\x02\x02\x02a\u018B\x03\x02\x02\x02c\u0194\x03\x02\x02\x02e\u01AF\x03" +
"\x02\x02\x02g\u01B1\x03\x02\x02\x02i\u01C6\x03\x02\x02\x02k\u0248\x03" +
"\x02\x02\x02m\u024A\x03\x02\x02\x02o\u0252\x03\x02\x02\x02q\u0258\x03" +
"\x02\x02\x02s\u0266\x03\x02\x02\x02uv\x07r\x02\x02vw\x07t\x02\x02wx\x07" +
"c\x02\x02xy\x07i\x02\x02yz\x07o\x02\x02z{\x07c\x02\x02{\x04\x03\x02\x02" +
"\x02|}\x07=\x02\x02}\x06\x03\x02\x02\x02~\x7F\x07e\x02\x02\x7F\x80\x07" +
"c\x02\x02\x80\x81\x07u\x02\x02\x81\x82\x07j\x02\x02\x82\x83\x07u\x02\x02" +
"\x83\x84\x07e\x02\x02\x84\x85\x07t\x02\x02\x85\x86\x07k\x02\x02\x86\x87" +
"\x07r\x02\x02\x87\x88\x07v\x02\x02\x88\b\x03\x02\x02\x02\x89\x8A\x07`" +
"\x02\x02\x8A\n\x03\x02\x02\x02\x8B\x8C\x07\x80\x02\x02\x8C\f\x03\x02\x02" +
"\x02\x8D\x8E\x07@\x02\x02\x8E\x8F\x07?\x02\x02\x8F\x0E\x03\x02\x02\x02" +
"\x90\x91\x07@\x02\x02\x91\x10\x03\x02\x02\x02\x92\x93\x07>\x02\x02\x93" +
"\x12\x03\x02\x02\x02\x94\x95\x07>\x02\x02\x95\x96\x07?\x02\x02\x96\x14" +
"\x03\x02\x02\x02\x97\x98\x07?\x02\x02\x98\x16\x03\x02\x02\x02\x99\x9A" +
"\x07e\x02\x02\x9A\x9B\x07q\x02\x02\x9B\x9C\x07p\x02\x02\x9C\x9D\x07v\x02" +
"\x02\x9D\x9E\x07t\x02\x02\x9E\x9F\x07c\x02\x02\x9F\xA0\x07e\x02\x02\xA0" +
"\xA1\x07v\x02\x02\xA1\x18\x03\x02\x02\x02\xA2\xA3\x07}\x02\x02\xA3\x1A" +
"\x03\x02\x02\x02\xA4\xA5\x07\x7F\x02\x02\xA5\x1C\x03\x02\x02\x02\xA6\xA7" +
"\x07h\x02\x02\xA7\xA8\x07w\x02\x02\xA8\xA9\x07p\x02\x02\xA9\xAA\x07e\x02" +
"\x02\xAA\xAB\x07v\x02\x02\xAB\xAC\x07k\x02\x02\xAC\xAD\x07q\x02\x02\xAD" +
"\xAE\x07p\x02\x02\xAE\x1E\x03\x02\x02\x02\xAF\xB0\x07*\x02\x02\xB0 \x03" +
"\x02\x02\x02\xB1\xB2\x07.\x02\x02\xB2\"\x03\x02\x02\x02\xB3\xB4\x07+\x02" +
"\x02\xB4$\x03\x02\x02\x02\xB5\xB6\x07t\x02\x02\xB6\xB7\x07g\x02\x02\xB7" +
"\xB8\x07s\x02\x02\xB8\xB9\x07w\x02\x02\xB9\xBA\x07k\x02\x02\xBA\xBB\x07" +
"t\x02\x02\xBB\xBC\x07g\x02\x02\xBC&\x03\x02\x02\x02\xBD\xBE\x07k\x02\x02" +
"\xBE\xBF\x07h\x02\x02\xBF(\x03\x02\x02\x02\xC0\xC1\x07g\x02\x02\xC1\xC2" +
"\x07n\x02\x02\xC2\xC3\x07u\x02\x02\xC3\xC4\x07g\x02\x02\xC4*\x03\x02\x02" +
"\x02\xC5\xC6\x07p\x02\x02\xC6\xC7\x07g\x02\x02\xC7\xC8\x07y\x02\x02\xC8" +
",\x03\x02\x02\x02\xC9\xCA\x07]\x02\x02\xCA.\x03\x02\x02\x02\xCB\xCC\x07" +
"_\x02\x02\xCC0\x03\x02\x02\x02\xCD\xCE\x070\x02\x02\xCE\xCF\x07t\x02\x02" +
"\xCF\xD0\x07g\x02\x02\xD0\xD1\x07x\x02\x02\xD1\xD2\x07g\x02\x02\xD2\xD3" +
"\x07t\x02\x02\xD3\xD4\x07u\x02\x02\xD4\xD5\x07g\x02\x02\xD5\xD6\x07*\x02" +
"\x02\xD6\xD7\x07+\x02\x02\xD72\x03\x02\x02\x02\xD8\xD9\x070\x02\x02\xD9" +
"\xDA\x07n\x02\x02\xDA\xDB\x07g\x02\x02\xDB\xDC\x07p\x02\x02\xDC\xDD\x07" +
"i\x02\x02\xDD\xDE\x07v\x02\x02\xDE\xDF\x07j\x02\x02\xDF4\x03\x02\x02\x02" +
"\xE0\xE1\x07#\x02\x02\xE16\x03\x02\x02\x02\xE2\xE3\x07/\x02\x02\xE38\x03" +
"\x02\x02\x02\xE4\xE5\x070\x02\x02\xE5\xE6\x07u\x02\x02\xE6\xE7\x07r\x02" +
"\x02\xE7\xE8\x07n\x02\x02\xE8\xE9\x07k\x02\x02\xE9\xEA\x07v\x02\x02\xEA" +
":\x03\x02\x02\x02\xEB\xEC\x071\x02\x02\xEC<\x03\x02\x02\x02\xED\xEE\x07" +
"\'\x02\x02\xEE>\x03\x02\x02\x02\xEF\xF0\x07-\x02\x02\xF0@\x03\x02\x02" +
"\x02\xF1\xF2\x07?\x02\x02\xF2\xF3\x07?\x02\x02\xF3B\x03\x02\x02\x02\xF4" +
"\xF5\x07#\x02\x02\xF5\xF6\x07?\x02\x02\xF6D\x03\x02\x02\x02\xF7\xF8\x07" +
"(\x02\x02\xF8F\x03\x02\x02\x02\xF9\xFA\x07~\x02\x02\xFAH\x03\x02\x02\x02" +
"\xFB\xFC\x07(\x02\x02\xFC\xFD\x07(\x02\x02\xFDJ\x03\x02\x02\x02\xFE\xFF" +
"\x07~\x02\x02\xFF\u0100\x07~\x02\x02\u0100L\x03\x02\x02\x02\u0101\u0102" +
"\x07k\x02\x02\u0102\u0103\x07p\x02\x02\u0103\u0104\x07v\x02\x02\u0104" +
"N\x03\x02\x02\x02\u0105\u0106\x07d\x02\x02\u0106\u0107\x07q\x02\x02\u0107" +
"\u0108\x07q\x02\x02\u0108\u0109\x07n\x02\x02\u0109P\x03\x02\x02\x02\u010A" +
"\u010B\x07u\x02\x02\u010B\u010C\x07v\x02\x02\u010C\u010D\x07t\x02\x02" +
"\u010D\u010E\x07k\x02\x02\u010E\u010F\x07p\x02\x02\u010F\u0110\x07i\x02" +
"\x02\u0110R\x03\x02\x02\x02\u0111\u0112\x07r\x02\x02\u0112\u0113\x07w" +
"\x02\x02\u0113\u0114\x07d\x02\x02\u0114\u0115\x07m\x02\x02\u0115\u0116" +
"\x07g\x02\x02\u0116\u0117\x07{\x02\x02\u0117T\x03\x02\x02\x02\u0118\u0119" +
"\x07u\x02\x02\u0119\u011A\x07k\x02\x02\u011A\u011B\x07i\x02\x02\u011B" +
"V\x03\x02\x02\x02\u011C\u011D\x07f\x02\x02\u011D\u011E\x07c\x02\x02\u011E" +
"\u011F\x07v\x02\x02\u011F\u0120\x07c\x02\x02\u0120\u0121\x07u\x02\x02" +
"\u0121\u0122\x07k\x02\x02\u0122\u0123\x07i\x02\x02\u0123X\x03\x02\x02" +
"\x02\u0124\u0126\t\x02\x02\x02\u0125\u0124\x03\x02\x02\x02\u0126\u0127" +
"\x03\x02\x02\x02\u0127\u0125\x03\x02\x02\x02\u0127\u0128\x03\x02\x02\x02" +
"\u0128\u0129\x03\x02\x02\x02\u0129\u012B\x070\x02\x02\u012A\u012C\t\x02" +
"\x02\x02\u012B\u012A\x03\x02\x02\x02\u012C\u012D\x03\x02\x02\x02\u012D" +
"\u012B\x03\x02\x02\x02\u012D\u012E\x03\x02\x02\x02\u012E\u012F\x03\x02" +
"\x02\x02\u012F\u0131\x070\x02\x02\u0130\u0132\t\x02\x02\x02\u0131\u0130" +
"\x03\x02\x02\x02\u0132\u0133\x03\x02\x02\x02\u0133\u0131\x03\x02\x02\x02" +
"\u0133\u0134\x03\x02\x02\x02\u0134Z\x03\x02\x02\x02\u0135\u0136\x07v\x02" +
"\x02\u0136\u0137\x07t\x02\x02\u0137\u0138\x07w\x02\x02\u0138\u013F\x07" +
"g\x02\x02\u0139\u013A\x07h\x02\x02\u013A\u013B\x07c\x02\x02\u013B\u013C" +
"\x07n\x02\x02\u013C\u013D\x07u\x02\x02\u013D\u013F\x07g\x02\x02\u013E" +
"\u0135\x03\x02\x02\x02\u013E\u0139\x03\x02\x02\x02\u013F\\\x03\x02\x02" +
"\x02\u0140\u0141\x07u\x02\x02\u0141\u0142\x07c\x02\x02\u0142\u0143\x07" +
"v\x02\x02\u0143\u0144\x07q\x02\x02\u0144\u0145\x07u\x02\x02\u0145\u0146" +
"\x07j\x02\x02\u0146\u0147\x07k\x02\x02\u0147\u017A\x07u\x02\x02\u0148" +
"\u0149\x07u\x02\x02\u0149\u014A\x07c\x02\x02\u014A\u014B\x07v\x02\x02" +
"\u014B\u017A\x07u\x02\x02\u014C\u014D\x07h\x02\x02\u014D\u014E\x07k\x02" +
"\x02\u014E\u014F\x07p\x02\x02\u014F\u0150\x07p\x02\x02\u0150\u0151\x07" +
"g\x02\x02\u0151\u017A\x07{\x02\x02\u0152\u0153\x07d\x02\x02\u0153\u0154" +
"\x07k\x02\x02\u0154\u0155\x07v\x02\x02\u0155\u017A\x07u\x02\x02\u0156" +
"\u0157\x07d\x02\x02\u0157\u0158\x07k\x02\x02\u0158\u0159\x07v\x02\x02" +
"\u0159\u015A\x07e\x02\x02\u015A\u015B\x07q\x02\x02\u015B\u015C\x07k\x02" +
"\x02\u015C\u017A\x07p\x02\x02\u015D\u015E\x07u\x02\x02\u015E\u015F\x07" +
"g\x02\x02\u015F\u0160\x07e\x02\x02\u0160\u0161\x07q\x02\x02\u0161\u0162" +
"\x07p\x02\x02\u0162\u0163\x07f\x02\x02\u0163\u017A\x07u\x02\x02\u0164" +
"\u0165\x07o\x02\x02\u0165\u0166\x07k\x02\x02\u0166\u0167\x07p\x02\x02" +
"\u0167\u0168\x07w\x02\x02\u0168\u0169\x07v\x02\x02\u0169\u016A\x07g\x02" +
"\x02\u016A\u017A\x07u\x02\x02\u016B\u016C\x07j\x02\x02\u016C\u016D\x07" +
"q\x02\x02\u016D\u016E\x07w\x02\x02\u016E\u016F\x07t\x02\x02\u016F\u017A" +
"\x07u\x02\x02\u0170\u0171\x07f\x02\x02\u0171\u0172\x07c\x02\x02\u0172" +
"\u0173\x07{\x02\x02\u0173\u017A\x07u\x02\x02\u0174\u0175\x07y\x02\x02" +
"\u0175\u0176\x07g\x02\x02\u0176\u0177\x07g\x02\x02\u0177\u0178\x07m\x02" +
"\x02\u0178\u017A\x07u\x02\x02\u0179\u0140\x03\x02\x02\x02\u0179\u0148" +
"\x03\x02\x02\x02\u0179\u014C\x03\x02\x02\x02\u0179\u0152\x03\x02\x02\x02" +
"\u0179\u0156\x03\x02\x02\x02\u0179\u015D\x03\x02\x02\x02\u0179\u0164\x03" +
"\x02\x02\x02\u0179\u016B\x03\x02\x02\x02\u0179\u0170\x03\x02\x02\x02\u0179" +
"\u0174\x03\x02\x02\x02\u017A^\x03\x02\x02\x02\u017B\u017D\t\x03\x02\x02" +
"\u017C\u017B\x03\x02\x02\x02\u017C\u017D\x03\x02\x02\x02\u017D\u017F\x03" +
"\x02\x02\x02\u017E\u0180\t\x02\x02\x02\u017F\u017E\x03\x02\x02\x02\u0180" +
"\u0181\x03\x02\x02\x02\u0181\u017F\x03\x02\x02\x02\u0181\u0182\x03\x02" +
"\x02\x02\u0182\u0189\x03\x02\x02\x02\u0183\u0185\t\x04\x02\x02\u0184\u0186" +
"\t\x02\x02\x02\u0185\u0184\x03\x02\x02\x02\u0186\u0187\x03\x02\x02\x02" +
"\u0187\u0185\x03\x02\x02\x02\u0187\u0188\x03\x02\x02\x02\u0188\u018A\x03" +
"\x02\x02\x02\u0189\u0183\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A" +
"`\x03\x02\x02\x02\u018B\u018C\x07d\x02\x02\u018C\u018D\x07{\x02\x02\u018D" +
"\u018E\x07v\x02\x02\u018E\u018F\x07g\x02\x02\u018F\u0190\x07u\x02\x02" +
"\u0190\u0192\x03\x02\x02\x02\u0191\u0193\x05c2\x02\u0192\u0191\x03\x02" +
"\x02\x02\u0192\u0193\x03\x02\x02\x02\u0193b\x03\x02\x02\x02\u0194\u0198" +
"\t\x05\x02\x02\u0195\u0197\t\x02\x02\x02\u0196\u0195\x03\x02\x02\x02\u0197" +
"\u019A\x03\x02\x02\x02\u0198\u0196\x03\x02\x02\x02\u0198\u0199\x03\x02" +
"\x02\x02\u0199d\x03\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019B\u01A1" +
"\x07$\x02\x02\u019C\u019D\x07^\x02\x02\u019D\u01A0\x07$\x02\x02\u019E" +
"\u01A0\n\x06\x02\x02\u019F\u019C\x03\x02\x02\x02\u019F\u019E\x03\x02\x02" +
"\x02\u01A0\u01A3\x03\x02\x02\x02\u01A1\u01A2\x03\x02\x02\x02\u01A1\u019F" +
"\x03\x02\x02\x02\u01A2\u01A4\x03\x02\x02\x02\u01A3\u01A1\x03\x02\x02\x02" +
"\u01A4\u01B0\x07$\x02\x02\u01A5\u01AB\x07)\x02\x02\u01A6\u01A7\x07^\x02" +
"\x02\u01A7\u01AA\x07)\x02\x02\u01A8\u01AA\n\x07\x02\x02\u01A9\u01A6\x03" +
"\x02\x02\x02\u01A9\u01A8\x03\x02\x02\x02\u01AA\u01AD\x03\x02\x02\x02\u01AB" +
"\u01AC\x03\x02\x02\x02\u01AB\u01A9\x03\x02\x02\x02\u01AC\u01AE\x03\x02" +
"\x02\x02\u01AD\u01AB\x03\x02\x02\x02\u01AE\u01B0\x07)\x02\x02\u01AF\u019B" +
"\x03\x02\x02\x02\u01AF\u01A5\x03\x02\x02\x02\u01B0f\x03\x02\x02\x02\u01B1" +
"\u01B2\x072\x02\x02\u01B2\u01B6\t\b\x02\x02\u01B3\u01B5\t\t\x02\x02\u01B4" +
"\u01B3\x03\x02\x02\x02\u01B5\u01B8\x03\x02\x02\x02\u01B6\u01B4\x03\x02" +
"\x02\x02\u01B6\u01B7\x03\x02\x02\x02\u01B7h\x03\x02\x02\x02\u01B8\u01B6" +
"\x03\x02\x02\x02\u01B9\u01BA\x07v\x02\x02\u01BA\u01BB\x07z\x02\x02\u01BB" +
"\u01BC\x070\x02\x02\u01BC\u01BD\x07c\x02\x02\u01BD\u01BE\x07i\x02\x02" +
"\u01BE\u01C7\x07g\x02\x02\u01BF\u01C0\x07v\x02\x02\u01C0\u01C1\x07z\x02" +
"\x02\u01C1\u01C2\x070\x02\x02\u01C2\u01C3\x07v\x02\x02\u01C3\u01C4\x07" +
"k\x02\x02\u01C4\u01C5\x07o\x02\x02\u01C5\u01C7\x07g\x02\x02\u01C6\u01B9" +
"\x03\x02\x02\x02\u01C6\u01BF\x03\x02\x02\x02\u01C7j\x03\x02\x02\x02\u01C8" +
"\u01C9\x07v\x02\x02\u01C9\u01CA\x07z\x02\x02\u01CA\u01CB\x070\x02\x02" +
"\u01CB\u01CC\x07x\x02\x02\u01CC\u01CD\x07g\x02\x02\u01CD\u01CE\x07t\x02" +
"\x02\u01CE\u01CF\x07u\x02\x02\u01CF\u01D0\x07k\x02\x02\u01D0\u01D1\x07" +
"q\x02\x02\u01D1\u0249\x07p\x02\x02\u01D2\u01D3\x07v\x02\x02\u01D3\u01D4" +
"\x07z\x02\x02\u01D4\u01D5\x070\x02\x02\u01D5\u01D6\x07j\x02\x02\u01D6" +
"\u01D7\x07c\x02\x02\u01D7\u01D8\x07u\x02\x02\u01D8\u01D9\x07j\x02\x02" +
"\u01D9\u01DA\x07R\x02\x02\u01DA\u01DB\x07t\x02\x02\u01DB\u01DC\x07g\x02" +
"\x02\u01DC\u01DD\x07x\x02\x02\u01DD\u01DE\x07q\x02\x02\u01DE\u01DF\x07" +
"w\x02\x02\u01DF\u01E0\x07v\x02\x02\u01E0\u0249\x07u\x02\x02\u01E1\u01E2" +
"\x07v\x02\x02\u01E2\u01E3\x07z\x02\x02\u01E3\u01E4\x070\x02\x02\u01E4" +
"\u01E5\x07j\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6\u01E7\x07u\x02\x02" +
"\u01E7\u01E8\x07j\x02\x02\u01E8\u01E9\x07U\x02\x02\u01E9\u01EA\x07g\x02" +
"\x02\u01EA\u01EB\x07s\x02\x02\u01EB\u01EC\x07w\x02\x02\u01EC\u01ED\x07" +
"g\x02\x02\u01ED\u01EE\x07p\x02\x02\u01EE\u01EF\x07e\x02\x02\u01EF\u0249" +
"\x07g\x02\x02\u01F0\u01F1\x07v\x02\x02\u01F1\u01F2\x07z\x02\x02\u01F2" +
"\u01F3\x070\x02\x02\u01F3\u01F4\x07q\x02\x02\u01F4\u01F5\x07w\x02\x02" +
"\u01F5\u01F6\x07v\x02\x02\u01F6\u01F7\x07r\x02\x02\u01F7\u01F8\x07q\x02" +
"\x02\u01F8\u01F9\x07k\x02\x02\u01F9\u01FA\x07p\x02\x02\u01FA\u0249\x07" +
"v\x02\x02\u01FB\u01FC\x07v\x02\x02\u01FC\u01FD\x07z\x02\x02\u01FD\u01FE" +
"\x070\x02\x02\u01FE\u01FF\x07d\x02\x02\u01FF\u0200\x07{\x02\x02\u0200" +
"\u0201\x07v\x02\x02\u0201\u0202\x07g\x02\x02\u0202\u0203\x07e\x02\x02" +
"\u0203\u0204\x07q\x02\x02\u0204\u0205\x07f\x02\x02\u0205\u0249\x07g\x02" +
"\x02\u0206\u0207\x07v\x02\x02\u0207\u0208\x07z\x02\x02\u0208\u0209\x07" +
"0\x02\x02\u0209\u020A\x07x\x02\x02\u020A\u020B\x07c\x02\x02\u020B\u020C" +
"\x07n\x02\x02\u020C\u020D\x07w\x02\x02\u020D\u0249\x07g\x02\x02\u020E" +
"\u020F\x07v\x02\x02\u020F\u0210\x07z\x02\x02\u0210\u0211\x070\x02\x02" +
"\u0211\u0212\x07u\x02\x02\u0212\u0213\x07g\x02\x02\u0213\u0214\x07s\x02" +
"\x02\u0214\u0215\x07w\x02\x02\u0215\u0216\x07g\x02\x02\u0216\u0217\x07" +
"p\x02\x02\u0217\u0218\x07e\x02\x02\u0218\u0249\x07g\x02\x02\u0219\u021A" +
"\x07v\x02\x02\u021A\u021B\x07z\x02\x02\u021B\u021C\x070\x02\x02\u021C" +
"\u021D\x07j\x02\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07u\x02\x02" +
"\u021F\u0220\x07j\x02\x02\u0220\u0221\x07Q\x02\x02\u0221\u0222\x07w\x02" +
"\x02\u0222\u0223\x07v\x02\x02\u0223\u0224\x07r\x02\x02\u0224\u0225\x07" +
"w\x02\x02\u0225\u0226\x07v\x02\x02\u0226\u0249\x07u\x02\x02\u0227\u0228" +
"\x07";
CashScriptLexer._serializedATNSegment1 = "v\x02\x02\u0228\u0229\x07z\x02\x02\u0229\u022A\x070\x02\x02\u022A\u022B" +
"\x07n\x02\x02\u022B\u022C\x07q\x02\x02\u022C\u022D\x07e\x02\x02\u022D" +
"\u022E\x07m\x02\x02\u022E\u022F\x07v\x02\x02\u022F\u0230\x07k\x02\x02" +
"\u0230\u0231\x07o\x02\x02\u0231\u0249\x07g\x02\x02\u0232\u0233\x07v\x02" +
"\x02\u0233\u0234\x07z\x02\x02\u0234\u0235\x070\x02\x02\u0235\u0236\x07" +
"j\x02\x02\u0236\u0237\x07c\x02\x02\u0237\u0238\x07u\x02\x02\u0238\u0239" +
"\x07j\x02\x02\u0239\u023A\x07v\x02\x02\u023A\u023B\x07{\x02\x02\u023B" +
"\u023C\x07r\x02\x02\u023C\u0249\x07g\x02\x02\u023D\u023E\x07v\x02\x02" +
"\u023E\u023F\x07z\x02\x02\u023F\u0240\x070\x02\x02\u0240\u0241\x07r\x02" +
"\x02\u0241\u0242\x07t\x02\x02\u0242\u0243\x07g\x02\x02\u0243\u0244\x07" +
"k\x02\x02\u0244\u0245\x07o\x02\x02\u0245\u0246\x07c\x02\x02\u0246\u0247" +
"\x07i\x02\x02\u0247\u0249\x07g\x02\x02\u0248\u01C8\x03\x02\x02\x02\u0248" +
"\u01D2\x03\x02\x02\x02\u0248\u01E1\x03\x02\x02\x02\u0248\u01F0\x03\x02" +
"\x02\x02\u0248\u01FB\x03\x02\x02\x02\u0248\u0206\x03\x02\x02\x02\u0248" +
"\u020E\x03\x02\x02\x02\u0248\u0219\x03\x02\x02\x02\u0248\u0227\x03\x02" +
"\x02\x02\u0248\u0232\x03\x02\x02\x02\u0248\u023D\x03\x02\x02\x02\u0249" +
"l\x03\x02\x02\x02\u024A\u024E\t\n\x02\x02\u024B\u024D\t\v\x02\x02\u024C" +
"\u024B\x03\x02\x02\x02\u024D\u0250\x03\x02\x02\x02\u024E\u024C\x03\x02" +
"\x02\x02\u024E\u024F\x03\x02\x02\x02\u024Fn\x03\x02\x02\x02\u0250\u024E" +
"\x03\x02\x02\x02\u0251\u0253\t\f\x02\x02\u0252\u0251\x03\x02\x02\x02\u0253" +
"\u0254\x03\x02\x02\x02\u0254\u0252\x03\x02\x02\x02\u0254\u0255\x03\x02" +
"\x02\x02\u0255\u0256\x03\x02\x02\x02\u0256\u0257\b8\x02\x02\u0257p\x03" +
"\x02\x02\x02\u0258\u0259\x071\x02\x02\u0259\u025A\x07,\x02\x02\u025A\u025E" +
"\x03\x02\x02\x02\u025B\u025D\v\x02\x02\x02\u025C\u025B\x03\x02\x02\x02" +
"\u025D\u0260\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025E\u025C\x03" +
"\x02\x02\x02\u025F\u0261\x03\x02\x02\x02\u0260\u025E\x03\x02\x02\x02\u0261" +
"\u0262\x07,\x02\x02\u0262\u0263\x071\x02\x02\u0263\u0264\x03\x02\x02\x02" +
"\u0264\u0265\b9\x03\x02\u0265r\x03\x02\x02\x02\u0266\u0267\x071\x02\x02" +
"\u0267\u0268\x071\x02\x02\u0268\u026C\x03\x02\x02\x02\u0269\u026B\n\r" +
"\x02\x02\u026A\u0269\x03\x02\x02\x02\u026B\u026E\x03\x02\x02\x02\u026C" +
"\u026A\x03\x02\x02\x02\u026C\u026D\x03\x02\x02\x02\u026D\u026F\x03\x02" +
"\x02\x02\u026E\u026C\x03\x02\x02\x02\u026F\u0270\b:\x03\x02\u0270t\x03" +
"\x02\x02\x02\x1A\x02\u0127\u012D\u0133\u013E\u0179\u017C\u0181\u0187\u0189" +
"\u0192\u0198\u019F\u01A1\u01A9\u01AB\u01AF\u01B6\u01C6\u0248\u024E\u0254" +
"\u025E\u026C\x04\b\x02\x02\x02\x03\x02";
"/\x03/\x03/\x03/\x03/\x05/\u017C\n/\x030\x050\u017F\n0\x030\x060\u0182" +
"\n0\r0\x0E0\u0183\x030\x030\x060\u0188\n0\r0\x0E0\u0189\x050\u018C\n0" +
"\x031\x031\x031\x031\x031\x031\x031\x051\u0195\n1\x032\x032\x072\u0199" +
"\n2\f2\x0E2\u019C\v2\x033\x033\x033\x033\x073\u01A2\n3\f3\x0E3\u01A5\v" +
"3\x033\x033\x033\x033\x033\x073\u01AC\n3\f3\x0E3\u01AF\v3\x033\x053\u01B2" +
"\n3\x034\x034\x034\x034\x034\x034\x034\x034\x034\x035\x035\x035\x075\u01C0" +
"\n5\f5\x0E5\u01C3\v5\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" +
"6\x036\x036\x036\x056\u01D2\n6\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" +
"7\x037\x037\x037\x037\x037\x037\x037\x037\x057\u0254\n7\x038\x038\x07" +
"8\u0258\n8\f8\x0E8\u025B\v8\x039\x069\u025E\n9\r9\x0E9\u025F\x039\x03" +
"9\x03:\x03:\x03:\x03:\x07:\u0268\n:\f:\x0E:\u026B\v:\x03:\x03:\x03:\x03" +
":\x03:\x03;\x03;\x03;\x03;\x07;\u0276\n;\f;\x0E;\u0279\v;\x03;\x03;\x05" +
"\u01A3\u01AD\u0269\x02\x02<\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02" +
"\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02" +
"\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%" +
"\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B" +
"5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02" +
"%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_" +
"\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02" +
"<\x03\x02\x0E\x03\x022;\x03\x02//\x04\x02GGgg\x03\x023;\x05\x02\f\f\x0F" +
"\x0F$$\x05\x02\f\f\x0F\x0F))\x04\x02ZZzz\x05\x022;CHch\x04\x02C\\c|\x06" +
"\x022;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02\u02A3\x02" +
"\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02" +
"\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F" +
"\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15" +
"\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B" +
"\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!" +
"\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02" +
"\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02" +
"\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03" +
"\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02" +
"\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02" +
"C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02" +
"\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02" +
"\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03" +
"\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02" +
"\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02" +
"e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02" +
"\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02" +
"\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x03w\x03\x02\x02\x02\x05~\x03" +
"\x02\x02\x02\x07\x80\x03\x02\x02\x02\t\x8B\x03\x02\x02\x02\v\x8D\x03\x02" +
"\x02\x02\r\x8F\x03\x02\x02\x02\x0F\x92\x03\x02\x02\x02\x11\x94\x03\x02" +
"\x02\x02\x13\x96\x03\x02\x02\x02\x15\x99\x03\x02\x02\x02\x17\x9B\x03\x02" +
"\x02\x02\x19\xA4\x03\x02\x02\x02\x1B\xA6\x03\x02\x02\x02\x1D\xA8\x03\x02" +
"\x02\x02\x1F\xB1\x03\x02\x02\x02!\xB3\x03\x02\x02\x02#\xB5\x03\x02\x02" +
"\x02%\xB7\x03\x02\x02\x02\'\xBF\x03\x02\x02\x02)\xC2\x03\x02\x02\x02+" +
"\xC7\x03\x02\x02\x02-\xCB\x03\x02\x02\x02/\xCD\x03\x02\x02\x021\xCF\x03" +
"\x02\x02\x023\xDA\x03\x02\x02\x025\xE2\x03\x02\x02\x027\xE4\x03\x02\x02" +
"\x029\xE6\x03\x02\x02\x02;\xED\x03\x02\x02\x02=\xEF\x03\x02\x02\x02?\xF1" +
"\x03\x02\x02\x02A\xF3\x03\x02\x02\x02C\xF6\x03\x02\x02\x02E\xF9\x03\x02" +
"\x02\x02G\xFB\x03\x02\x02\x02I\xFD\x03\x02\x02\x02K\u0100\x03\x02\x02" +
"\x02M\u0103\x03\x02\x02\x02O\u0107\x03\x02\x02\x02Q\u010C\x03\x02\x02" +
"\x02S\u0113\x03\x02\x02\x02U\u011A\x03\x02\x02\x02W\u011E\x03\x02\x02" +
"\x02Y\u0127\x03\x02\x02\x02[\u0140\x03\x02\x02\x02]\u017B\x03\x02\x02" +
"\x02_\u017E\x03\x02\x02\x02a\u018D\x03\x02\x02\x02c\u0196\x03\x02\x02" +
"\x02e\u01B1\x03\x02\x02\x02g\u01B3\x03\x02\x02\x02i\u01BC\x03\x02\x02" +
"\x02k\u01D1\x03\x02\x02\x02m\u0253\x03\x02\x02\x02o\u0255\x03\x02\x02" +
"\x02q\u025D\x03\x02\x02\x02s\u0263\x03\x02\x02\x02u\u0271\x03\x02\x02" +
"\x02wx\x07r\x02\x02xy\x07t\x02\x02yz\x07c\x02\x02z{\x07i\x02\x02{|\x07" +
"o\x02\x02|}\x07c\x02\x02}\x04\x03\x02\x02\x02~\x7F\x07=\x02\x02\x7F\x06" +
"\x03\x02\x02\x02\x80\x81\x07e\x02\x02\x81\x82\x07c\x02\x02\x82\x83\x07" +
"u\x02\x02\x83\x84\x07j\x02\x02\x84\x85\x07u\x02\x02\x85\x86\x07e\x02\x02" +
"\x86\x87\x07t\x02\x02\x87\x88\x07k\x02\x02\x88\x89\x07r\x02\x02\x89\x8A" +
"\x07v\x02\x02\x8A\b\x03\x02\x02\x02\x8B\x8C\x07`\x02\x02\x8C\n\x03\x02" +
"\x02\x02\x8D\x8E\x07\x80\x02\x02\x8E\f\x03\x02\x02\x02\x8F\x90\x07@\x02" +
"\x02\x90\x91\x07?\x02\x02\x91\x0E\x03\x02\x02\x02\x92\x93\x07@\x02\x02" +
"\x93\x10\x03\x02\x02\x02\x94\x95\x07>\x02\x02\x95\x12\x03\x02\x02\x02" +
"\x96\x97\x07>\x02\x02\x97\x98\x07?\x02\x02\x98\x14\x03\x02\x02\x02\x99" +
"\x9A\x07?\x02\x02\x9A\x16\x03\x02\x02\x02\x9B\x9C\x07e\x02\x02\x9C\x9D" +
"\x07q\x02\x02\x9D\x9E\x07p\x02\x02\x9E\x9F\x07v\x02\x02\x9F\xA0\x07t\x02" +
"\x02\xA0\xA1\x07c\x02\x02\xA1\xA2\x07e\x02\x02\xA2\xA3\x07v\x02\x02\xA3" +
"\x18\x03\x02\x02\x02\xA4\xA5\x07}\x02\x02\xA5\x1A\x03\x02\x02\x02\xA6" +
"\xA7\x07\x7F\x02\x02\xA7\x1C\x03\x02\x02\x02\xA8\xA9\x07h\x02\x02\xA9" +
"\xAA\x07w\x02\x02\xAA\xAB\x07p\x02\x02\xAB\xAC\x07e\x02\x02\xAC\xAD\x07" +
"v\x02\x02\xAD\xAE\x07k\x02\x02\xAE\xAF\x07q\x02\x02\xAF\xB0\x07p\x02\x02" +
"\xB0\x1E\x03\x02\x02\x02\xB1\xB2\x07*\x02\x02\xB2 \x03\x02\x02\x02\xB3" +
"\xB4\x07.\x02\x02\xB4\"\x03\x02\x02\x02\xB5\xB6\x07+\x02\x02\xB6$\x03" +
"\x02\x02\x02\xB7\xB8\x07t\x02\x02\xB8\xB9\x07g\x02\x02\xB9\xBA\x07s\x02" +
"\x02\xBA\xBB\x07w\x02\x02\xBB\xBC\x07k\x02\x02\xBC\xBD\x07t\x02\x02\xBD" +
"\xBE\x07g\x02\x02\xBE&\x03\x02\x02\x02\xBF\xC0\x07k\x02\x02\xC0\xC1\x07" +
"h\x02\x02\xC1(\x03\x02\x02\x02\xC2\xC3\x07g\x02\x02\xC3\xC4\x07n\x02\x02" +
"\xC4\xC5\x07u\x02\x02\xC5\xC6\x07g\x02\x02\xC6*\x03\x02\x02\x02\xC7\xC8" +
"\x07p\x02\x02\xC8\xC9\x07g\x02\x02\xC9\xCA\x07y\x02\x02\xCA,\x03\x02\x02" +
"\x02\xCB\xCC\x07]\x02\x02\xCC.\x03\x02\x02\x02\xCD\xCE\x07_\x02\x02\xCE" +
"0\x03\x02\x02\x02\xCF\xD0\x070\x02\x02\xD0\xD1\x07t\x02\x02\xD1\xD2\x07" +
"g\x02\x02\xD2\xD3\x07x\x02\x02\xD3\xD4\x07g\x02\x02\xD4\xD5\x07t\x02\x02" +
"\xD5\xD6\x07u\x02\x02\xD6\xD7\x07g\x02\x02\xD7\xD8\x07*\x02\x02\xD8\xD9" +
"\x07+\x02\x02\xD92\x03\x02\x02\x02\xDA\xDB\x070\x02\x02\xDB\xDC\x07n\x02" +
"\x02\xDC\xDD\x07g\x02\x02\xDD\xDE\x07p\x02\x02\xDE\xDF\x07i\x02\x02\xDF" +
"\xE0\x07v\x02\x02\xE0\xE1\x07j\x02\x02\xE14\x03\x02\x02\x02\xE2\xE3\x07" +
"#\x02\x02\xE36\x03\x02\x02\x02\xE4\xE5\x07/\x02\x02\xE58\x03\x02\x02\x02" +
"\xE6\xE7\x070\x02\x02\xE7\xE8\x07u\x02\x02\xE8\xE9\x07r\x02\x02\xE9\xEA" +
"\x07n\x02\x02\xEA\xEB\x07k\x02\x02\xEB\xEC\x07v\x02\x02\xEC:\x03\x02\x02" +
"\x02\xED\xEE\x071\x02\x02\xEE<\x03\x02\x02\x02\xEF\xF0\x07\'\x02\x02\xF0" +
">\x03\x02\x02\x02\xF1\xF2\x07-\x02\x02\xF2@\x03\x02\x02\x02\xF3\xF4\x07" +
"?\x02\x02\xF4\xF5\x07?\x02\x02\xF5B\x03\x02\x02\x02\xF6\xF7\x07#\x02\x02" +
"\xF7\xF8\x07?\x02\x02\xF8D\x03\x02\x02\x02\xF9\xFA\x07(\x02\x02\xFAF\x03" +
"\x02\x02\x02\xFB\xFC\x07~\x02\x02\xFCH\x03\x02\x02\x02\xFD\xFE\x07(\x02" +
"\x02\xFE\xFF\x07(\x02\x02\xFFJ\x03\x02\x02\x02\u0100\u0101\x07~\x02\x02" +
"\u0101\u0102\x07~\x02\x02\u0102L\x03\x02\x02\x02\u0103\u0104\x07k\x02" +
"\x02\u0104\u0105\x07p\x02\x02\u0105\u0106\x07v\x02\x02\u0106N\x03\x02" +
"\x02\x02\u0107\u0108\x07d\x02\x02\u0108\u0109\x07q\x02\x02\u0109\u010A" +
"\x07q\x02\x02\u010A\u010B\x07n\x02\x02\u010BP\x03\x02\x02\x02\u010C\u010D" +
"\x07u\x02\x02\u010D\u010E\x07v\x02\x02\u010E\u010F\x07t\x02\x02\u010F" +
"\u0110\x07k\x02\x02\u0110\u0111\x07p\x02\x02\u0111\u0112\x07i\x02\x02" +
"\u0112R\x03\x02\x02\x02\u0113\u0114\x07r\x02\x02\u0114\u0115\x07w\x02" +
"\x02\u0115\u0116\x07d\x02\x02\u0116\u0117\x07m\x02\x02\u0117\u0118\x07" +
"g\x02\x02\u0118\u0119\x07{\x02\x02\u0119T\x03\x02\x02\x02\u011A\u011B" +
"\x07u\x02\x02\u011B\u011C\x07k\x02\x02\u011C\u011D\x07i\x02\x02\u011D" +
"V\x03\x02\x02\x02\u011E\u011F\x07f\x02\x02\u011F\u0120\x07c\x02\x02\u0120" +
"\u0121\x07v\x02\x02\u0121\u0122\x07c\x02\x02\u0122\u0123\x07u\x02\x02" +
"\u0123\u0124\x07k\x02\x02\u0124\u0125\x07i\x02\x02\u0125X\x03\x02\x02" +
"\x02\u0126\u0128\t\x02\x02\x02\u0127\u0126\x03\x02\x02\x02\u0128\u0129" +
"\x03\x02\x02\x02\u0129\u0127\x03\x02\x02\x02\u0129\u012A\x03\x02\x02\x02" +
"\u012A\u012B\x03\x02\x02\x02\u012B\u012D\x070\x02\x02\u012C\u012E\t\x02" +
"\x02\x02\u012D\u012C\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F" +
"\u012D\x03\x02\x02\x02\u012F\u0130\x03\x02\x02\x02\u0130\u0131\x03\x02" +
"\x02\x02\u0131\u0133\x070\x02\x02\u0132\u0134\t\x02\x02\x02\u0133\u0132" +
"\x03\x02\x02\x02\u0134\u0135\x03\x02\x02\x02\u0135\u0133\x03\x02\x02\x02" +
"\u0135\u0136\x03\x02\x02\x02\u0136Z\x03\x02\x02\x02\u0137\u0138\x07v\x02" +
"\x02\u0138\u0139\x07t\x02\x02\u0139\u013A\x07w\x02\x02\u013A\u0141\x07" +
"g\x02\x02\u013B\u013C\x07h\x02\x02\u013C\u013D\x07c\x02\x02\u013D\u013E" +
"\x07n\x02\x02\u013E\u013F\x07u\x02\x02\u013F\u0141\x07g\x02\x02\u0140" +
"\u0137\x03\x02\x02\x02\u0140\u013B\x03\x02\x02\x02\u0141\\\x03\x02\x02" +
"\x02\u0142\u0143\x07u\x02\x02\u0143\u0144\x07c\x02\x02\u0144\u0145\x07" +
"v\x02\x02\u0145\u0146\x07q\x02\x02\u0146\u0147\x07u\x02\x02\u0147\u0148" +
"\x07j\x02\x02\u0148\u0149\x07k\x02\x02\u0149\u017C\x07u\x02\x02\u014A" +
"\u014B\x07u\x02\x02\u014B\u014C\x07c\x02\x02\u014C\u014D\x07v\x02\x02" +
"\u014D\u017C\x07u\x02\x02\u014E\u014F\x07h\x02\x02\u014F\u0150\x07k\x02" +
"\x02\u0150\u0151\x07p\x02\x02\u0151\u0152\x07p\x02\x02\u0152\u0153\x07" +
"g\x02\x02\u0153\u017C\x07{\x02\x02\u0154\u0155\x07d\x02\x02\u0155\u0156" +
"\x07k\x02\x02\u0156\u0157\x07v\x02\x02\u0157\u017C\x07u\x02\x02\u0158" +
"\u0159\x07d\x02\x02\u0159\u015A\x07k\x02\x02\u015A\u015B\x07v\x02\x02" +
"\u015B\u015C\x07e\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07k\x02" +
"\x02\u015E\u017C\x07p\x02\x02\u015F\u0160\x07u\x02\x02\u0160\u0161\x07" +
"g\x02\x02\u0161\u0162\x07e\x02\x02\u0162\u0163\x07q\x02\x02\u0163\u0164" +
"\x07p\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u017C\x07u\x02\x02\u0166" +
"\u0167\x07o\x02\x02\u0167\u0168\x07k\x02\x02\u0168\u0169\x07p\x02\x02" +
"\u0169\u016A\x07w\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07g\x02" +
"\x02\u016C\u017C\x07u\x02\x02\u016D\u016E\x07j\x02\x02\u016E\u016F\x07" +
"q\x02\x02\u016F\u0170\x07w\x02\x02\u0170\u0171\x07t\x02\x02\u0171\u017C" +
"\x07u\x02\x02\u0172\u0173\x07f\x02\x02\u0173\u0174\x07c\x02\x02\u0174" +
"\u0175\x07{\x02\x02\u0175\u017C\x07u\x02\x02\u0176\u0177\x07y\x02\x02" +
"\u0177\u0178\x07g\x02\x02\u0178\u0179\x07g\x02\x02\u0179\u017A\x07m\x02" +
"\x02\u017A\u017C\x07u\x02\x02\u017B\u0142\x03\x02\x02\x02\u017B\u014A" +
"\x03\x02\x02\x02\u017B\u014E\x03\x02\x02\x02\u017B\u0154\x03\x02\x02\x02" +
"\u017B\u0158\x03\x02\x02\x02\u017B\u015F\x03\x02\x02\x02\u017B\u0166\x03" +
"\x02\x02\x02\u017B\u016D\x03\x02\x02\x02\u017B\u0172\x03\x02\x02\x02\u017B" +
"\u0176\x03\x02\x02\x02\u017C^\x03\x02\x02\x02\u017D\u017F\t\x03\x02\x02" +
"\u017E\u017D\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0181\x03" +
"\x02\x02\x02\u0180\u0182\t\x02\x02\x02\u0181\u0180\x03\x02\x02\x02\u0182" +
"\u0183\x03\x02\x02\x02\u0183\u0181\x03\x02\x02\x02\u0183\u0184\x03\x02" +
"\x02\x02\u0184\u018B\x03\x02\x02\x02\u0185\u0187\t\x04\x02\x02\u0186\u0188" +
"\t\x02\x02\x02\u0187\u0186\x03\x02\x02\x02\u0188\u0189\x03\x02\x02\x02" +
"\u0189\u0187\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A\u018C\x03" +
"\x02\x02\x02\u018B\u0185\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C" +
"`\x03\x02\x02\x02\u018D\u018E\x07d\x02\x02\u018E\u018F\x07{\x02\x02\u018F" +
"\u0190\x07v\x02\x02\u0190\u0191\x07g\x02\x02\u0191\u0192\x07u\x02\x02" +
"\u0192\u0194\x03\x02\x02\x02\u0193\u0195\x05c2\x02\u0194\u0193\x03\x02" +
"\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195b\x03\x02\x02\x02\u0196\u019A" +
"\t\x05\x02\x02\u0197\u0199\t\x02\x02\x02\u0198\u0197\x03\x02\x02\x02\u0199" +
"\u019C\x03\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019A\u019B\x03\x02" +
"\x02\x02\u019Bd\x03\x02\x02\x02\u019C\u019A\x03\x02\x02\x02\u019D\u01A3" +
"\x07$\x02\x02\u019E\u019F\x07^\x02\x02\u019F\u01A2\x07$\x02\x02\u01A0" +
"\u01A2\n\x06\x02\x02\u01A1\u019E\x03\x02\x02\x02\u01A1\u01A0\x03\x02\x02" +
"\x02\u01A2\u01A5\x03\x02\x02\x02\u01A3\u01A4\x03\x02\x02\x02\u01A3\u01A1" +
"\x03\x02\x02\x02\u01A4\u01A6\x03\x02\x02\x02\u01A5\u01A3\x03\x02\x02\x02" +
"\u01A6\u01B2\x07$\x02\x02\u01A7\u01AD\x07)\x02\x02\u01A8\u01A9\x07^\x02" +
"\x02\u01A9\u01AC\x07)\x02\x02\u01AA\u01AC\n\x07\x02\x02\u01AB\u01A8\x03" +
"\x02\x02\x02\u01AB\u01AA\x03\x02\x02\x02\u01AC\u01AF\x03\x02\x02\x02\u01AD" +
"\u01AE\x03\x02\x02\x02\u01AD\u01AB\x03\x02\x02\x02\u01AE\u01B0\x03\x02" +
"\x02\x02\u01AF\u01AD\x03\x02\x02\x02\u01B0\u01B2\x07)\x02\x02\u01B1\u019D" +
"\x03\x02\x02\x02\u01B1\u01A7\x03\x02\x02\x02\u01B2f\x03\x02\x02\x02\u01B3" +
"\u01B4\x07f\x02\x02\u01B4\u01B5\x07c\x02\x02\u01B5\u01B6\x07v\x02\x02" +
"\u01B6\u01B7\x07g\x02\x02\u01B7\u01B8\x07*\x02\x02\u01B8\u01B9\x03\x02" +
"\x02\x02\u01B9\u01BA\x05e3\x02\u01BA\u01BB\x07+\x02\x02\u01BBh\x03\x02" +
"\x02\x02\u01BC\u01BD\x072\x02\x02\u01BD\u01C1\t\b\x02\x02\u01BE\u01C0" +
"\t\t\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01C0\u01C3\x03\x02\x02\x02\u01C1" +
"\u01BF\x03\x02\x02\x02\u01C1\u01C2\x03\x02\x02\x02\u01C2j\x03\x02\x02" +
"\x02\u01C3\u01C1\x03\x02\x02\x02\u01C4\u01C5\x07v\x02\x02\u01C5\u01C6" +
"\x07z\x02\x02\u01C6\u01C7\x070\x02\x02\u01C7\u01C8\x07c\x02\x02\u01C8" +
"\u01C9\x07i\x02\x02\u01C9\u01D2\x07g\x02\x02\u01CA\u01CB\x07v\x02\x02" +
"\u01CB\u01CC\x07z\x02\x02\u01CC\u01CD\x070\x02\x02\u01CD\u01CE\x07v\x02" +
"\x02\u01CE\u01CF\x07k\x02\x02\u01CF\u01D0\x07o\x02\x02\u01D0\u01D2\x07" +
"g\x02\x02\u01D1\u01C4\x03\x02\x02\x02\u01D1\u01CA\x03\x02\x02\x02\u01D2" +
"l\x03\x02\x02\x02\u01D3\u01D4\x07v\x02\x02\u01D4\u01D5\x07z\x02\x02\u01D5" +
"\u01D6\x070\x02\x02\u01D6\u01D7\x07x\x02\x02\u01D7\u01D8\x07g\x02\x02" +
"\u01D8\u01D9\x07t\x02\x02\u01D9\u01DA\x07u\x02\x02\u01DA\u01DB\x07k\x02" +
"\x02\u01DB\u01DC\x07q\x02\x02\u01DC\u0254\x07p\x02\x02\u01DD\u01DE\x07" +
"v\x02\x02\u01DE\u01DF\x07z\x02\x02\u01DF\u01E0\x070\x02\x02\u01E0\u01E1" +
"\x07j\x02\x02\u01E1\u01E2\x07c\x02\x02\u01E2\u01E3\x07u\x02\x02\u01E3" +
"\u01E4\x07j\x02\x02\u01E4\u01E5\x07R\x02\x02\u01E5\u01E6\x07t\x02\x02" +
"\u01E6\u01E7\x07g\x02\x02\u01E7\u01E8\x07x\x02\x02\u01E8\u01E9\x07q\x02" +
"\x02\u01E9\u01EA\x07w\x02\x02\u01EA\u01EB\x07v\x02\x02\u01EB\u0254\x07" +
"u\x02\x02\u01EC\u01ED\x07v\x02\x02\u01ED\u01EE\x07z\x02\x02\u01EE\u01EF" +
"\x070\x02\x02\u01EF\u01F0\x07j\x02\x02\u01F0\u01F1\x07c\x02\x02\u01F1" +
"\u01F2\x07u\x02\x02\u01F2\u01F3\x07j\x02\x02\u01F3\u01F4\x07U\x02\x02" +
"\u01F4\u01F5\x07g\x02\x02\u01F5\u01F6\x07s\x02\x02\u01F6\u01F7\x07w\x02" +
"\x02\u01F7\u01F8\x07g\x02\x02\u01F8\u01F9\x07p\x02\x02\u01F9\u01FA\x07" +
"e\x02\x02\u01FA\u0254\x07g\x02\x02\u01FB\u01FC\x07v\x02\x02\u01FC\u01FD" +
"\x07z\x02\x02\u01FD\u01FE\x070\x02\x02\u01FE\u01FF\x07q\x02\x02\u01FF" +
"\u0200\x07w\x02\x02\u0200\u0201\x07v\x02\x02\u0201\u0202\x07r\x02\x02" +
"\u0202\u0203\x07q\x02\x02\u0203\u0204\x07k\x02\x02\u0204\u0205\x07p\x02" +
"\x02\u0205\u0254\x07v\x02\x02\u0206\u0207\x07v\x02\x02\u0207\u0208\x07" +
"z\x02\x02\u0208\u0209\x070\x02\x02\u0209\u020A\x07d\x02\x02\u020A\u020B" +
"\x07{\x02\x02\u020B\u020C\x07v\x02\x02\u020C\u020D\x07g\x02\x02\u020D" +
"\u020E\x07e\x02\x02\u020E\u020F\x07q\x02\x02\u020F\u0210\x07f\x02\x02" +
"\u0210\u0254\x07g\x02\x02\u0211\u0212\x07v\x02\x02\u0212\u0213\x07z\x02" +
"\x02\u0213\u0214\x070\x02\x02\u0214\u0215\x07x\x02\x02\u0215\u0216\x07" +
"c\x02\x02\u0216\u0217\x07n\x02\x02\u0217\u0218\x07w\x02\x02\u0218\u0254" +
"\x07g\x02\x02\u0219\u021A\x07v\x02\x02\u021A\u021B\x07z\x02\x02\u021B" +
"\u021C\x070\x02\x02\u021C\u021D\x07u\x02\x02\u021D\u021E\x07g\x02\x02" +
"\u021E\u021F\x07s\x02\x02\u021F\u0220\x07w\x02\x02\u0220\u0221\x07g\x02" +
"\x02\u0221\u0222\x07p\x02\x02\u0222\u0223\x07e\x02\x02\u0223\u0254";
CashScriptLexer._serializedATNSegment1 = "\x07g\x02\x02\u0224\u0225\x07v\x02\x02\u0225\u0226\x07z\x02\x02\u0226" +
"\u0227\x070\x02\x02\u0227\u0228\x07j\x02\x02\u0228\u0229\x07c\x02\x02" +
"\u0229\u022A\x07u\x02\x02\u022A\u022B\x07j\x02\x02\u022B\u022C\x07Q\x02" +
"\x02\u022C\u022D\x07w\x02\x02\u022D\u022E\x07v\x02\x02\u022E\u022F\x07" +
"r\x02\x02\u022F\u0230\x07w\x02\x02\u0230\u0231\x07v\x02\x02\u0231\u0254" +
"\x07u\x02\x02\u0232\u0233\x07v\x02\x02\u0233\u0234\x07z\x02\x02\u0234" +
"\u0235\x070\x02\x02\u0235\u0236\x07n\x02\x02\u0236\u0237\x07q\x02\x02" +
"\u0237\u0238\x07e\x02\x02\u0238\u0239\x07m\x02\x02\u0239\u023A\x07v\x02" +
"\x02\u023A\u023B\x07k\x02\x02\u023B\u023C\x07o\x02\x02\u023C\u0254\x07" +
"g\x02\x02\u023D\u023E\x07v\x02\x02\u023E\u023F\x07z\x02\x02\u023F\u0240" +
"\x070\x02\x02\u0240\u0241\x07j\x02\x02\u0241\u0242\x07c\x02\x02\u0242" +
"\u0243\x07u\x02\x02\u0243\u0244\x07j\x02\x02\u0244\u0245\x07v\x02\x02" +
"\u0245\u0246\x07{\x02\x02\u0246\u0247\x07r\x02\x02\u0247\u0254\x07g\x02" +
"\x02\u0248\u0249\x07v\x02\x02\u0249\u024A\x07z\x02\x02\u024A\u024B\x07" +
"0\x02\x02\u024B\u024C\x07r\x02\x02\u024C\u024D\x07t\x02\x02\u024D\u024E" +
"\x07g\x02\x02\u024E\u024F\x07k\x02\x02\u024F\u0250\x07o\x02\x02\u0250" +
"\u0251\x07c\x02\x02\u0251\u0252\x07i\x02\x02\u0252\u0254\x07g\x02\x02" +
"\u0253\u01D3\x03\x02\x02\x02\u0253\u01DD\x03\x02\x02\x02\u0253\u01EC\x03" +
"\x02\x02\x02\u0253\u01FB\x03\x02\x02\x02\u0253\u0206\x03\x02\x02\x02\u0253" +
"\u0211\x03\x02\x02\x02\u0253\u0219\x03\x02\x02\x02\u0253\u0224\x03\x02" +
"\x02\x02\u0253\u0232\x03\x02\x02\x02\u0253\u023D\x03\x02\x02\x02\u0253" +
"\u0248\x03\x02\x02\x02\u0254n\x03\x02\x02\x02\u0255\u0259\t\n\x02\x02" +
"\u0256\u0258\t\v\x02\x02\u0257\u0256\x03\x02\x02\x02\u0258\u025B\x03\x02" +
"\x02\x02\u0259\u0257\x03\x02\x02\x02\u0259\u025A\x03\x02\x02\x02\u025A" +
"p\x03\x02\x02\x02\u025B\u0259\x03\x02\x02\x02\u025C\u025E\t\f\x02\x02" +
"\u025D\u025C\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025F\u025D\x03" +
"\x02\x02\x02\u025F\u0260\x03\x02\x02\x02\u0260\u0261\x03\x02\x02\x02\u0261" +
"\u0262\b9\x02\x02\u0262r\x03\x02\x02\x02\u0263\u0264\x071\x02\x02\u0264" +
"\u0265\x07,\x02\x02\u0265\u0269\x03\x02\x02\x02\u0266\u0268\v\x02\x02" +
"\x02\u0267\u0266\x03\x02\x02\x02\u0268\u026B\x03\x02\x02\x02\u0269\u026A" +
"\x03\x02\x02\x02\u0269\u0267\x03\x02\x02\x02\u026A\u026C\x03\x02\x02\x02" +
"\u026B\u0269\x03\x02\x02\x02\u026C\u026D\x07,\x02\x02\u026D\u026E\x07" +
"1\x02\x02\u026E\u026F\x03\x02\x02\x02\u026F\u0270\b:\x03\x02\u0270t\x03" +
"\x02\x02\x02\u0271\u0272\x071\x02\x02\u0272\u0273\x071\x02\x02\u0273\u0277" +
"\x03\x02\x02\x02\u0274\u0276\n\r\x02\x02\u0275\u0274\x03\x02\x02\x02\u0276" +
"\u0279\x03\x02\x02\x02\u0277\u0275\x03\x02\x02\x02\u0277\u0278\x03\x02" +
"\x02\x02\u0278\u027A\x03\x02\x02\x02\u0279\u0277\x03\x02\x02\x02\u027A" +
"\u027B\b;\x03\x02\u027Bv\x03\x02\x02\x02\x1A\x02\u0129\u012F\u0135\u0140" +
"\u017B\u017E\u0183\u0189\u018B\u0194\u019A\u01A1\u01A3\u01AB\u01AD\u01B1" +
"\u01C1\u01D1\u0253\u0259\u025F\u0269\u0277\x04\b\x02\x02\x02\x03\x02";
CashScriptLexer._serializedATN = Utils.join([

@@ -427,0 +432,0 @@ CashScriptLexer._serializedATNSegment0,

@@ -1,2 +0,3 @@

// Generated from src/grammar/CashScript.g4 by ANTLR 4.7.3-SNAPSHOT
// Generated from src/grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT
export {};
//# sourceMappingURL=CashScriptListener.js.map
import { ATN } from "antlr4ts/atn/ATN";
import { FailedPredicateException } from "antlr4ts/FailedPredicateException";
import { Parser } from "antlr4ts/Parser";

@@ -62,9 +63,10 @@ import { ParserRuleContext } from "antlr4ts/ParserRuleContext";

static readonly StringLiteral = 50;
static readonly HexLiteral = 51;
static readonly TxVar = 52;
static readonly PreimageField = 53;
static readonly Identifier = 54;
static readonly WHITESPACE = 55;
static readonly COMMENT = 56;
static readonly LINE_COMMENT = 57;
static readonly DateLiteral = 51;
static readonly HexLiteral = 52;
static readonly TxVar = 53;
static readonly PreimageField = 54;
static readonly Identifier = 55;
static readonly WHITESPACE = 56;
static readonly COMMENT = 57;
static readonly LINE_COMMENT = 58;
static readonly RULE_sourceFile = 0;

@@ -101,2 +103,3 @@ static readonly RULE_pragmaDirective = 1;

get serializedATN(): string;
protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException;
constructor(input: TokenStream);

@@ -411,2 +414,3 @@ sourceFile(): SourceFileContext;

StringLiteral(): TerminalNode | undefined;
DateLiteral(): TerminalNode | undefined;
HexLiteral(): TerminalNode | undefined;

@@ -413,0 +417,0 @@ constructor(parent: ParserRuleContext | undefined, invokingState: number);

@@ -1,2 +0,3 @@

// Generated from src/grammar/CashScript.g4 by ANTLR 4.7.3-SNAPSHOT
// Generated from src/grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT
export {};
//# sourceMappingURL=CashScriptVisitor.js.map
export * from './Errors';
export { Artifact, AbiFunction, AbiInput } from './artifact/Artifact';
export { Op, Script } from './generation/Script';
export { PrimitiveType, Type, BytesType, ArrayType, TupleType, parseType, } from './ast/Type';
export { Data, Artifacts, CashCompiler, } from './util';
export declare const version = "0.5.7";
export * as utils from '@cashscript/utils';
export { compileFile, compileString } from './compiler';
export declare const version = "0.6.0";
export * from './Errors';
export { Op } from './generation/Script';
export { PrimitiveType, BytesType, ArrayType, TupleType, parseType, } from './ast/Type';
export { Data, Artifacts, CashCompiler, } from './util';
export const version = '0.5.7';
export * as utils from '@cashscript/utils';
export { compileFile, compileString } from './compiler';
export const version = '0.6.0';
//# sourceMappingURL=index.js.map

@@ -1,2 +0,2 @@

import { Node, ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, BlockNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode } from '../ast/AST';
import { Node, ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, BlockNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode } from '../ast/AST';
import AstTraversal from '../ast/AstTraversal';

@@ -23,2 +23,3 @@ export default class OutputSourceCodeTraversal extends AstTraversal {

visitFunctionCall(node: FunctionCallNode): Node;
visitInstantiation(node: InstantiationNode): Node;
visitTupleIndexOp(node: TupleIndexOpNode): Node;

@@ -25,0 +26,0 @@ visitBinaryOp(node: BinaryOpNode): Node;

@@ -123,2 +123,10 @@ import { binToHex } from '@bitauth/libauth';

}
visitInstantiation(node) {
this.addOutput('new ');
node.identifier = this.visit(node.identifier);
this.addOutput('(');
node.parameters = this.visitCommaList(node.parameters);
this.addOutput(')');
return node;
}
visitTupleIndexOp(node) {

@@ -125,0 +133,0 @@ node.tuple = this.visit(node.tuple);

@@ -0,4 +1,4 @@

import { PrimitiveType, explicitlyCastable, implicitlyCastable, implicitlyCastableSignature, resultingType, arrayType, ArrayType, TupleType, BytesType, } from '@cashscript/utils';
import AstTraversal from '../ast/AstTraversal';
import { InvalidParameterTypeError, UnequalTypeError, UnsupportedTypeError, CastTypeError, TypeError, AssignTypeError, ArrayElementError, IndexOutOfBoundsError, CastSizeError, } from '../Errors';
import { PrimitiveType, explicitlyCastable, implicitlyCastable, implicitlyCastableSignature, resultingType, arrayType, ArrayType, TupleType, BytesType, } from '../ast/Type';
import { BinaryOperator, UnaryOperator } from '../ast/Operator';

@@ -5,0 +5,0 @@ import { GlobalFunction } from '../ast/Globals';

{
"name": "cashc",
"version": "0.5.7",
"version": "0.6.0",
"description": "Compile Bitcoin Cash contracts to Bitcoin Cash Script or artifacts",

@@ -49,15 +49,15 @@ "keywords": [

"dependencies": {
"@bitauth/libauth": "^1.17.2",
"@types/semver": "^6.0.2",
"antlr4ts": "^0.5.0-alpha.3",
"commander": "^6.0.0",
"semver": "^6.3.0"
"@bitauth/libauth": "^1.18.1",
"@cashscript/utils": "^0.6.0",
"antlr4ts": "^0.5.0-alpha.4",
"commander": "^7.1.0",
"semver": "^7.3.4"
},
"devDependencies": {
"delay": "^4.3.0",
"eslint": "^6.6.0",
"jest": "^24.9.0",
"ts-jest": "^24.3.0",
"typescript": "3.7.5"
"@types/semver": "^7.3.4",
"eslint": "^7.20.0",
"jest": "^26.6.3",
"ts-jest": "^26.5.1",
"typescript": "^4.1.5"
}
}

@@ -17,3 +17,3 @@ # CashScript

## The CashScript Compiler
CashScript features a compiler as a standalone command line tool, called `cashc`. It can be installed through npm and used to compile `.cash` files into `.json` artifact files. These artifact files can be imported into the CashScript JavaScript SDK (or other SDKs in the future). Note that the CashScript SDK also has a function to import and compile `.cash` files directly, so it is not required to use the `cashc` command line tool.
CashScript features a compiler as a standalone command line tool, called `cashc`. It can be installed through npm and used to compile `.cash` files into `.json` artifact files. These artifact files can be imported into the CashScript JavaScript SDK (or other SDKs in the future). The `cashc` NPM package can also be imported inside JavaScript files to compile `.cash` files without using the command line tool.

@@ -37,10 +37,4 @@ ### Installation

--size, -s Display the size in bytes of the compiled bytecode [boolean]
--args, -a List of constructor arguments to pass into the contract. Can
only be used in combination with either the --hex or --asm
flags. When compiling to a JSON artifact, contract
instantiation should be done through the CashScript SDK. Note
that NO type checking is performed by the cashc CLI, so it is
safer to use the CashScript SDK. [array]
--help Show help [boolean]
--version Show version number [boolean]
```

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc