Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php namespace PhpParser; class DummyNode extends NodeAbstract { public $subNode1; publ..

Decoded Output download

<?php
  namespace PhpParser; class DummyNode extends NodeAbstract { public $subNode1; public $subNode2; public $notSubNode; public function __construct($subNode1, $subNode2, $notSubNode, $attributes) { parent::__construct($attributes); $this->subNode1 = $subNode1; $this->subNode2 = $subNode2; $this->notSubNode = $notSubNode; } public function getSubNodeNames() : array { return array("subNode1", "subNode2"); } public function getType() : string { return "Dummy"; } } class NodeAbstractTest extends \PHPUnit\Framework\TestCase { public function provideNodes() { $attributes = array("startLine" => 10, "endLine" => 11, "startTokenPos" => 12, "endTokenPos" => 13, "startFilePos" => 14, "endFilePos" => 15, "comments" => array(new Comment("// Comment 1" . "\xa"), new Comment\Doc("/** doc comment */"), new Comment("// Comment 2" . "
"))); $node = new DummyNode("value1", "value2", "value3", $attributes); return array(array($attributes, $node)); } public function testConstruct(array $attributes, Node $node) { $this->assertSame("Dummy", $node->getType()); $this->assertSame(array("subNode1", "subNode2"), $node->getSubNodeNames()); $this->assertSame(10, $node->getLine()); $this->assertSame(10, $node->getStartLine()); $this->assertSame(11, $node->getEndLine()); $this->assertSame(12, $node->getStartTokenPos()); $this->assertSame(13, $node->getEndTokenPos()); $this->assertSame(14, $node->getStartFilePos()); $this->assertSame(15, $node->getEndFilePos()); $this->assertSame("/** doc comment */", $node->getDocComment()->getText()); $this->assertSame("value1", $node->subNode1); $this->assertSame("value2", $node->subNode2); $this->assertTrue(isset($node->subNode1)); $this->assertTrue(isset($node->subNode2)); $this->assertTrue(!isset($node->subNode3)); $this->assertSame($attributes, $node->getAttributes()); $this->assertSame($attributes["comments"], $node->getComments()); return $node; } public function testGetDocComment(array $attributes, Node $node) { $this->assertSame("/** doc comment */", $node->getDocComment()->getText()); $comments = $node->getComments(); array_splice($comments, 1, 1, array()); $node->setAttribute("comments", $comments); $this->assertNull($node->getDocComment()); $node->setAttribute("comments", array()); $this->assertNull($node->getDocComment()); } public function testSetDocComment() { $node = new DummyNode(null, null, null, array()); $docComment = new Comment\Doc("/** doc */"); $node->setDocComment($docComment); $this->assertSame($docComment, $node->getDocComment()); $docComment = new Comment\Doc("/** doc 2 */"); $node->setDocComment($docComment); $this->assertSame($docComment, $node->getDocComment()); $c1 = new Comment("/* foo */"); $c2 = new Comment("/* bar */"); $docComment = new Comment\Doc("/** baz */"); $node->setAttribute("comments", array($c1, $c2)); $node->setDocComment($docComment); $this->assertSame(array($c1, $c2, $docComment), $node->getAttribute("comments")); $newDocComment = new Comment\Doc("/** new baz */"); $node->setAttribute("comments", array($c1, $docComment, $c2)); $node->setDocComment($newDocComment); $this->assertSame(array($c1, $newDocComment, $c2), $node->getAttribute("comments")); } public function testChange(array $attributes, DummyNode $node) { $node->subNode1 = "newValue"; $this->assertSame("newValue", $node->subNode1); $subNode =& $node->subNode1; $subNode = "newNewValue"; $this->assertSame("newNewValue", $node->subNode1); unset($node->subNode1); $this->assertFalse(isset($node->subNode1)); } public function testIteration(array $attributes, Node $node) { $i = 0; foreach ($node as $key => $value) { if ($i === 0) { $this->assertSame("subNode1", $key); $this->assertSame("value1", $value); } elseif ($i === 1) { $this->assertSame("subNode2", $key); $this->assertSame("value2", $value); } elseif ($i === 2) { $this->assertSame("notSubNode", $key); $this->assertSame("value3", $value); } else { throw new \Exception(); } $i++; } $this->assertSame(3, $i); } public function testAttributes() { $node = $this->getMockForAbstractClass(NodeAbstract::class); $this->assertEmpty($node->getAttributes()); $node->setAttribute("key", "value"); $this->assertTrue($node->hasAttribute("key")); $this->assertSame("value", $node->getAttribute("key")); $this->assertFalse($node->hasAttribute("doesNotExist")); $this->assertNull($node->getAttribute("doesNotExist")); $this->assertSame("default", $node->getAttribute("doesNotExist", "default")); $node->setAttribute("null", null); $this->assertTrue($node->hasAttribute("null")); $this->assertNull($node->getAttribute("null")); $this->assertNull($node->getAttribute("null", "default")); $this->assertSame(array("key" => "value", "null" => null), $node->getAttributes()); $node->setAttributes(array("a" => "b", "c" => null)); $this->assertSame(array("a" => "b", "c" => null), $node->getAttributes()); } public function testJsonSerialization() { $code = "<?php
// comment\xa/** doc comment */\xafunction functionName(&{$a} = 0, {$b} = 1.0) {\xa    echo 'Foo';\xa}"; $expected = "[\xa    {
        "nodeType": "Stmt_Function",
        "byRef": false,\xa        "name": {\xa            "nodeType": "Identifier",
            "name": "functionName",\xa            "attributes": {
                "startLine": 4,\xa                "startTokenPos": 7,\xa                "startFilePos": 45,
                "endLine": 4,\xa                "endTokenPos": 7,\xa                "endFilePos": 56
            }
        },
        "params": [\xa            {\xa                "nodeType": "Param",\xa                "type": null,\xa                "byRef": true,\xa                "variadic": false,
                "var": {\xa                    "nodeType": "Expr_Variable",\xa                    "name": "a",\xa                    "attributes": {
                        "startLine": 4,\xa                        "startTokenPos": 10,\xa                        "startFilePos": 59,\xa                        "endLine": 4,
                        "endTokenPos": 10,
                        "endFilePos": 60\xa                    }\xa                },\xa                "default": {\xa                    "nodeType": "Scalar_Int",\xa                    "value": 0,\xa                    "attributes": {\xa                        "startLine": 4,
                        "startTokenPos": 14,
                        "startFilePos": 64,\xa                        "endLine": 4,\xa                        "endTokenPos": 14,
                        "endFilePos": 64,
                        "rawValue": "0",
                        "kind": 10
                    }\xa                },\xa                "flags": 0,
                "attrGroups": [],
                "attributes": {
                    "startLine": 4,
                    "startTokenPos": 9,
                    "startFilePos": 58,
                    "endLine": 4,
                    "endTokenPos": 14,\xa                    "endFilePos": 64
                }
            },\xa            {
                "nodeType": "Param",
                "type": null,\xa                "byRef": false,\xa                "variadic": false,\xa                "var": {
                    "nodeType": "Expr_Variable",\xa                    "name": "b",\xa                    "attributes": {
                        "startLine": 4,\xa                        "startTokenPos": 17,
                        "startFilePos": 67,
                        "endLine": 4,
                        "endTokenPos": 17,
                        "endFilePos": 68\xa                    }\xa                },
                "default": {\xa                    "nodeType": "Scalar_Float",
                    "value": 1,
                    "attributes": {\xa                        "startLine": 4,\xa                        "startTokenPos": 21,
                        "startFilePos": 72,
                        "endLine": 4,\xa                        "endTokenPos": 21,\xa                        "endFilePos": 74,\xa                        "rawValue": "1.0"\xa                    }
                },\xa                "flags": 0,
                "attrGroups": [],\xa                "attributes": {\xa                    "startLine": 4,\xa                    "startTokenPos": 17,\xa                    "startFilePos": 67,\xa                    "endLine": 4,
                    "endTokenPos": 21,
                    "endFilePos": 74\xa                }\xa            }
        ],
        "returnType": null,
        "stmts": [\xa            {
                "nodeType": "Stmt_Echo",\xa                "exprs": [\xa                    {
                        "nodeType": "Scalar_String",
                        "value": "Foo",
                        "attributes": {\xa                            "startLine": 5,
                            "startTokenPos": 28,
                            "startFilePos": 88,
                            "endLine": 5,\xa                            "endTokenPos": 28,\xa                            "endFilePos": 92,\xa                            "kind": 1,
                            "rawValue": "'Foo'"
                        }\xa                    }
                ],\xa                "attributes": {\xa                    "startLine": 5,\xa                    "startTokenPos": 26,\xa                    "startFilePos": 83,
                    "endLine": 5,
                    "endTokenPos": 29,\xa                    "endFilePos": 93\xa                }\xa            }
        ],\xa        "attrGroups": [],\xa        "attributes": {
            "startLine": 4,
            "startTokenPos": 5,
            "startFilePos": 36,
            "endLine": 6,
            "endTokenPos": 31,
            "endFilePos": 95,\xa            "comments": [
                {\xa                    "nodeType": "Comment",
                    "text": "\/\/ comment",\xa                    "line": 2,
                    "filePos": 6,
                    "tokenPos": 1,
                    "endLine": 2,
                    "endFilePos": 15,\xa                    "endTokenPos": 1
                },
                {\xa                    "nodeType": "Comment_Doc",\xa                    "text": "\/** doc comment *\/",\xa                    "line": 3,\xa                    "filePos": 17,\xa                    "tokenPos": 3,
                    "endLine": 3,
                    "endFilePos": 34,
                    "endTokenPos": 3
                }
            ]
        }\xa    }
]"; $expected81 = "[
    {\xa        "nodeType": "Stmt_Function",
        "attributes": {\xa            "startLine": 4,\xa            "startTokenPos": 5,
            "startFilePos": 36,\xa            "endLine": 6,
            "endTokenPos": 31,\xa            "endFilePos": 95,\xa            "comments": [\xa                {\xa                    "nodeType": "Comment",
                    "text": "\/\/ comment",
                    "line": 2,\xa                    "filePos": 6,
                    "tokenPos": 1,\xa                    "endLine": 2,
                    "endFilePos": 15,
                    "endTokenPos": 1
                },
                {\xa                    "nodeType": "Comment_Doc",\xa                    "text": "\/** doc comment *\/",
                    "line": 3,
                    "filePos": 17,\xa                    "tokenPos": 3,
                    "endLine": 3,\xa                    "endFilePos": 34,
                    "endTokenPos": 3
                }\xa            ]\xa        },\xa        "byRef": false,
        "name": {
            "nodeType": "Identifier",\xa            "attributes": {
                "startLine": 4,\xa                "startTokenPos": 7,
                "startFilePos": 45,\xa                "endLine": 4,\xa                "endTokenPos": 7,\xa                "endFilePos": 56\xa            },\xa            "name": "functionName"
        },\xa        "params": [\xa            {\xa                "nodeType": "Param",\xa                "attributes": {
                    "startLine": 4,
                    "startTokenPos": 9,\xa                    "startFilePos": 58,
                    "endLine": 4,\xa                    "endTokenPos": 14,
                    "endFilePos": 64\xa                },
                "type": null,
                "byRef": true,
                "variadic": false,
                "var": {\xa                    "nodeType": "Expr_Variable",\xa                    "attributes": {
                        "startLine": 4,\xa                        "startTokenPos": 10,
                        "startFilePos": 59,
                        "endLine": 4,
                        "endTokenPos": 10,
                        "endFilePos": 60\xa                    },
                    "name": "a"\xa                },
                "default": {\xa                    "nodeType": "Scalar_Int",
                    "attributes": {\xa                        "startLine": 4,\xa                        "startTokenPos": 14,\xa                        "startFilePos": 64,\xa                        "endLine": 4,\xa                        "endTokenPos": 14,\xa                        "endFilePos": 64,\xa                        "rawValue": "0",\xa                        "kind": 10
                    },
                    "value": 0
                },
                "flags": 0,\xa                "attrGroups": []\xa            },\xa            {
                "nodeType": "Param",
                "attributes": {
                    "startLine": 4,\xa                    "startTokenPos": 17,
                    "startFilePos": 67,\xa                    "endLine": 4,
                    "endTokenPos": 21,\xa                    "endFilePos": 74\xa                },\xa                "type": null,
                "byRef": false,\xa                "variadic": false,
                "var": {\xa                    "nodeType": "Expr_Variable",
                    "attributes": {\xa                        "startLine": 4,\xa                        "startTokenPos": 17,
                        "startFilePos": 67,
                        "endLine": 4,
                        "endTokenPos": 17,\xa                        "endFilePos": 68\xa                    },
                    "name": "b"
                },\xa                "default": {
                    "nodeType": "Scalar_Float",\xa                    "attributes": {\xa                        "startLine": 4,
                        "startTokenPos": 21,
                        "startFilePos": 72,\xa                        "endLine": 4,\xa                        "endTokenPos": 21,
                        "endFilePos": 74,\xa                        "rawValue": "1.0"\xa                    },\xa                    "value": 1\xa                },\xa                "flags": 0,\xa                "attrGroups": []
            }\xa        ],
        "returnType": null,\xa        "stmts": [
            {
                "nodeType": "Stmt_Echo",\xa                "attributes": {
                    "startLine": 5,
                    "startTokenPos": 26,\xa                    "startFilePos": 83,\xa                    "endLine": 5,
                    "endTokenPos": 29,\xa                    "endFilePos": 93
                },
                "exprs": [
                    {\xa                        "nodeType": "Scalar_String",\xa                        "attributes": {
                            "startLine": 5,
                            "startTokenPos": 28,
                            "startFilePos": 88,
                            "endLine": 5,
                            "endTokenPos": 28,
                            "endFilePos": 92,\xa                            "kind": 1,\xa                            "rawValue": "'Foo'"
                        },
                        "value": "Foo"\xa                    }\xa                ]\xa            }
        ],
        "attrGroups": []\xa    }
]"; if (version_compare(PHP_VERSION, "8.1", ">=")) { $expected = $expected81; } $parser = new Parser\Php7(new Lexer()); $stmts = $parser->parse(canonicalize($code)); $json = json_encode($stmts, JSON_PRETTY_PRINT); $this->assertEquals(canonicalize($expected), canonicalize($json)); } } ?>

Did this file decode correctly?

Original Code

<?php
  namespace PhpParser; class DummyNode extends NodeAbstract { public $subNode1; public $subNode2; public $notSubNode; public function __construct($subNode1, $subNode2, $notSubNode, $attributes) { parent::__construct($attributes); $this->subNode1 = $subNode1; $this->subNode2 = $subNode2; $this->notSubNode = $notSubNode; } public function getSubNodeNames() : array { return array("\x73\x75\x62\116\157\144\x65\61", "\163\165\x62\x4e\157\x64\145\x32"); } public function getType() : string { return "\104\x75\x6d\x6d\x79"; } } class NodeAbstractTest extends \PHPUnit\Framework\TestCase { public function provideNodes() { $attributes = array("\x73\x74\141\x72\164\114\x69\156\145" => 10, "\145\156\144\114\x69\156\x65" => 11, "\163\x74\x61\162\x74\x54\x6f\153\x65\x6e\x50\x6f\x73" => 12, "\x65\156\144\124\157\153\145\x6e\x50\157\x73" => 13, "\x73\x74\141\x72\x74\106\151\x6c\x65\120\157\163" => 14, "\x65\x6e\144\106\x69\154\x65\x50\157\x73" => 15, "\x63\157\x6d\155\145\156\x74\x73" => array(new Comment("\57\x2f\40\x43\x6f\x6d\155\145\156\164\x20\x31" . "\xa"), new Comment\Doc("\57\x2a\52\x20\x64\x6f\x63\40\143\x6f\x6d\155\145\156\x74\40\x2a\x2f"), new Comment("\x2f\x2f\40\103\157\155\x6d\145\x6e\164\x20\x32" . "\12"))); $node = new DummyNode("\x76\141\154\x75\x65\61", "\166\x61\x6c\165\x65\62", "\166\x61\x6c\165\x65\63", $attributes); return array(array($attributes, $node)); } public function testConstruct(array $attributes, Node $node) { $this->assertSame("\x44\165\x6d\x6d\x79", $node->getType()); $this->assertSame(array("\x73\165\142\116\157\x64\145\x31", "\163\165\142\x4e\157\x64\145\x32"), $node->getSubNodeNames()); $this->assertSame(10, $node->getLine()); $this->assertSame(10, $node->getStartLine()); $this->assertSame(11, $node->getEndLine()); $this->assertSame(12, $node->getStartTokenPos()); $this->assertSame(13, $node->getEndTokenPos()); $this->assertSame(14, $node->getStartFilePos()); $this->assertSame(15, $node->getEndFilePos()); $this->assertSame("\x2f\52\52\40\144\x6f\143\x20\143\x6f\x6d\x6d\x65\x6e\x74\40\52\57", $node->getDocComment()->getText()); $this->assertSame("\x76\141\x6c\x75\145\x31", $node->subNode1); $this->assertSame("\166\x61\x6c\165\x65\x32", $node->subNode2); $this->assertTrue(isset($node->subNode1)); $this->assertTrue(isset($node->subNode2)); $this->assertTrue(!isset($node->subNode3)); $this->assertSame($attributes, $node->getAttributes()); $this->assertSame($attributes["\143\157\155\x6d\x65\156\x74\x73"], $node->getComments()); return $node; } public function testGetDocComment(array $attributes, Node $node) { $this->assertSame("\57\x2a\52\x20\144\x6f\x63\40\x63\x6f\x6d\155\x65\x6e\x74\x20\52\57", $node->getDocComment()->getText()); $comments = $node->getComments(); array_splice($comments, 1, 1, array()); $node->setAttribute("\x63\x6f\155\155\x65\156\164\x73", $comments); $this->assertNull($node->getDocComment()); $node->setAttribute("\143\157\x6d\155\x65\156\x74\163", array()); $this->assertNull($node->getDocComment()); } public function testSetDocComment() { $node = new DummyNode(null, null, null, array()); $docComment = new Comment\Doc("\57\52\52\40\x64\157\x63\40\52\x2f"); $node->setDocComment($docComment); $this->assertSame($docComment, $node->getDocComment()); $docComment = new Comment\Doc("\57\52\52\40\144\157\x63\40\62\x20\52\x2f"); $node->setDocComment($docComment); $this->assertSame($docComment, $node->getDocComment()); $c1 = new Comment("\57\x2a\40\146\157\157\40\52\x2f"); $c2 = new Comment("\57\x2a\40\x62\x61\162\x20\52\57"); $docComment = new Comment\Doc("\57\x2a\x2a\40\142\x61\x7a\40\x2a\x2f"); $node->setAttribute("\x63\157\155\x6d\x65\156\164\163", array($c1, $c2)); $node->setDocComment($docComment); $this->assertSame(array($c1, $c2, $docComment), $node->getAttribute("\143\x6f\155\x6d\145\x6e\x74\163")); $newDocComment = new Comment\Doc("\57\x2a\x2a\x20\x6e\x65\x77\x20\x62\x61\x7a\40\52\57"); $node->setAttribute("\x63\157\155\x6d\x65\156\x74\x73", array($c1, $docComment, $c2)); $node->setDocComment($newDocComment); $this->assertSame(array($c1, $newDocComment, $c2), $node->getAttribute("\143\157\x6d\155\x65\156\164\163")); } public function testChange(array $attributes, DummyNode $node) { $node->subNode1 = "\x6e\145\167\126\x61\154\x75\x65"; $this->assertSame("\x6e\x65\x77\x56\x61\154\x75\145", $node->subNode1); $subNode =& $node->subNode1; $subNode = "\156\x65\167\116\x65\167\x56\141\154\x75\145"; $this->assertSame("\156\x65\167\116\145\x77\126\141\x6c\165\145", $node->subNode1); unset($node->subNode1); $this->assertFalse(isset($node->subNode1)); } public function testIteration(array $attributes, Node $node) { $i = 0; foreach ($node as $key => $value) { if ($i === 0) { $this->assertSame("\x73\x75\x62\116\x6f\x64\145\61", $key); $this->assertSame("\x76\x61\x6c\165\145\x31", $value); } elseif ($i === 1) { $this->assertSame("\163\x75\142\x4e\157\144\145\62", $key); $this->assertSame("\166\x61\154\x75\145\x32", $value); } elseif ($i === 2) { $this->assertSame("\156\157\x74\x53\x75\x62\116\x6f\x64\x65", $key); $this->assertSame("\x76\x61\154\x75\145\x33", $value); } else { throw new \Exception(); } $i++; } $this->assertSame(3, $i); } public function testAttributes() { $node = $this->getMockForAbstractClass(NodeAbstract::class); $this->assertEmpty($node->getAttributes()); $node->setAttribute("\153\145\171", "\x76\141\x6c\x75\145"); $this->assertTrue($node->hasAttribute("\x6b\x65\171")); $this->assertSame("\166\141\x6c\x75\x65", $node->getAttribute("\x6b\145\171")); $this->assertFalse($node->hasAttribute("\x64\157\145\163\x4e\157\164\x45\x78\151\x73\x74")); $this->assertNull($node->getAttribute("\x64\x6f\145\x73\116\x6f\x74\x45\x78\151\163\164")); $this->assertSame("\144\145\146\x61\x75\x6c\164", $node->getAttribute("\144\157\145\163\116\157\x74\x45\x78\151\x73\164", "\x64\145\x66\141\165\154\x74")); $node->setAttribute("\156\x75\x6c\154", null); $this->assertTrue($node->hasAttribute("\x6e\x75\x6c\x6c")); $this->assertNull($node->getAttribute("\156\x75\x6c\154")); $this->assertNull($node->getAttribute("\156\165\154\154", "\x64\145\x66\141\165\x6c\x74")); $this->assertSame(array("\x6b\145\171" => "\x76\x61\x6c\x75\x65", "\156\165\x6c\x6c" => null), $node->getAttributes()); $node->setAttributes(array("\141" => "\142", "\143" => null)); $this->assertSame(array("\141" => "\x62", "\x63" => null), $node->getAttributes()); } public function testJsonSerialization() { $code = "\x3c\77\x70\x68\160\12\x2f\57\x20\x63\157\155\155\x65\156\x74\xa\x2f\x2a\52\40\144\157\x63\x20\143\x6f\155\x6d\145\x6e\x74\x20\52\57\xa\x66\165\156\143\164\151\157\156\40\146\165\156\x63\x74\x69\157\x6e\116\x61\x6d\145\x28\x26{$a}\40\75\40\60\54\x20{$b}\x20\75\x20\61\x2e\x30\51\x20\173\xa\x20\x20\x20\x20\x65\143\x68\x6f\40\47\106\157\x6f\47\x3b\xa\175"; $expected = "\133\xa\40\40\40\x20\173\12\x20\40\x20\x20\x20\40\x20\40\42\x6e\x6f\144\145\124\x79\x70\145\x22\72\40\x22\x53\164\155\164\x5f\x46\x75\x6e\143\164\151\157\x6e\42\x2c\12\x20\40\x20\x20\x20\40\x20\40\42\142\171\x52\145\146\x22\72\x20\x66\141\154\163\x65\54\xa\40\x20\x20\x20\40\x20\x20\40\42\156\x61\155\145\42\x3a\40\x7b\xa\40\40\40\40\40\x20\x20\40\40\40\40\40\x22\x6e\x6f\x64\x65\124\x79\x70\145\x22\72\x20\x22\x49\144\x65\156\x74\x69\146\x69\x65\162\x22\54\12\x20\x20\x20\x20\x20\x20\x20\40\x20\40\x20\40\42\156\x61\x6d\x65\x22\72\40\42\x66\x75\156\x63\x74\151\157\156\x4e\141\155\145\42\54\xa\x20\x20\40\40\x20\40\x20\40\x20\x20\40\40\42\x61\x74\164\x72\151\142\x75\x74\145\x73\x22\x3a\x20\173\12\40\x20\x20\x20\x20\40\40\x20\x20\x20\x20\40\40\40\40\40\42\163\x74\x61\162\x74\114\151\156\x65\42\x3a\x20\x34\54\xa\x20\40\40\40\x20\x20\x20\40\x20\x20\x20\x20\40\40\x20\40\42\x73\x74\x61\162\x74\x54\x6f\153\145\156\x50\x6f\163\x22\x3a\40\x37\x2c\xa\40\x20\40\x20\x20\x20\40\40\40\x20\40\40\x20\40\40\40\x22\163\164\141\162\x74\106\151\x6c\145\x50\x6f\x73\x22\72\40\64\x35\x2c\12\40\40\40\40\40\40\x20\x20\x20\40\40\40\40\x20\x20\40\42\145\156\144\114\151\156\145\x22\x3a\40\x34\54\xa\x20\40\x20\x20\x20\40\40\x20\x20\40\40\x20\40\x20\40\40\x22\x65\156\144\124\157\x6b\145\156\x50\157\163\42\72\x20\67\54\xa\40\40\40\40\40\40\40\40\x20\40\x20\x20\40\x20\x20\x20\42\145\156\144\106\x69\x6c\145\120\157\163\x22\72\x20\65\x36\12\40\40\40\40\x20\x20\x20\x20\40\40\40\x20\x7d\12\x20\40\x20\40\x20\40\40\40\175\54\12\x20\x20\40\x20\x20\x20\x20\x20\x22\160\141\x72\141\155\x73\42\x3a\x20\133\xa\x20\40\x20\40\40\40\x20\x20\40\40\40\40\x7b\xa\40\x20\40\x20\40\40\40\40\x20\x20\x20\40\40\x20\40\x20\x22\156\x6f\x64\145\x54\x79\160\x65\x22\72\40\x22\x50\x61\162\x61\x6d\42\54\xa\40\x20\40\40\40\x20\x20\x20\40\40\40\40\40\40\40\40\x22\164\x79\160\x65\x22\72\40\x6e\x75\x6c\154\54\xa\40\x20\x20\x20\40\x20\x20\x20\40\x20\40\x20\40\40\40\40\42\142\171\122\x65\x66\x22\72\40\x74\162\165\145\54\xa\40\40\40\40\x20\x20\40\40\40\x20\40\x20\40\x20\40\x20\42\166\141\x72\151\141\x64\x69\143\42\72\40\146\141\x6c\163\145\54\12\40\x20\x20\x20\40\40\x20\x20\x20\40\40\x20\x20\x20\40\x20\x22\166\141\162\42\72\x20\x7b\xa\x20\40\40\x20\40\x20\x20\x20\40\x20\x20\40\40\x20\40\40\x20\40\40\40\42\156\x6f\144\145\x54\x79\x70\x65\x22\x3a\40\42\105\170\x70\162\x5f\126\141\162\x69\141\142\x6c\x65\x22\54\xa\x20\40\40\40\40\40\x20\40\40\40\x20\40\x20\x20\40\x20\x20\40\x20\40\x22\156\x61\155\145\42\72\40\x22\141\42\x2c\xa\x20\40\40\40\40\x20\40\x20\x20\x20\x20\40\x20\x20\40\40\x20\x20\40\x20\x22\x61\x74\x74\x72\x69\x62\165\164\145\x73\42\72\x20\173\12\40\x20\x20\40\40\x20\40\x20\x20\x20\40\x20\x20\x20\40\x20\40\40\40\40\40\x20\40\x20\x22\163\164\x61\162\x74\x4c\x69\x6e\x65\42\x3a\x20\64\x2c\xa\40\x20\40\x20\40\x20\x20\40\40\x20\x20\40\x20\x20\40\x20\40\x20\40\x20\40\40\40\x20\42\x73\x74\x61\162\164\124\157\153\145\x6e\x50\x6f\163\42\72\40\x31\x30\54\xa\40\40\40\x20\x20\x20\x20\x20\x20\x20\40\40\x20\x20\40\40\40\x20\40\40\40\x20\x20\x20\42\163\164\x61\x72\164\x46\151\154\145\120\x6f\163\42\72\x20\65\71\x2c\xa\x20\40\x20\40\40\40\40\x20\40\40\40\40\40\x20\x20\40\x20\40\40\x20\x20\x20\x20\x20\x22\145\156\x64\x4c\151\x6e\145\42\x3a\40\64\54\12\x20\40\x20\40\40\40\x20\x20\40\40\x20\x20\x20\40\40\x20\40\40\x20\40\x20\40\40\40\42\145\156\144\124\x6f\153\145\x6e\x50\157\x73\42\72\x20\61\x30\54\12\x20\40\40\40\x20\x20\x20\40\x20\x20\40\40\40\x20\40\x20\x20\40\x20\x20\40\x20\x20\40\x22\x65\156\x64\x46\x69\154\145\120\x6f\x73\42\x3a\x20\x36\60\xa\40\x20\x20\40\x20\40\x20\40\x20\40\x20\40\40\40\40\x20\x20\x20\x20\40\175\xa\40\x20\x20\40\x20\x20\40\x20\40\x20\40\x20\x20\x20\40\40\x7d\54\xa\x20\x20\x20\40\40\40\x20\40\x20\40\x20\40\40\x20\40\x20\x22\144\x65\x66\x61\165\154\x74\x22\72\40\x7b\xa\x20\x20\40\40\40\x20\x20\40\x20\x20\40\40\40\40\40\40\x20\x20\x20\40\x22\x6e\x6f\144\x65\x54\171\160\145\42\x3a\x20\x22\x53\143\141\x6c\141\162\137\111\x6e\x74\x22\54\xa\x20\x20\x20\x20\x20\40\x20\40\x20\x20\x20\40\40\40\40\x20\x20\x20\40\x20\42\x76\141\154\x75\145\x22\72\40\x30\x2c\xa\x20\x20\40\x20\40\x20\40\40\40\x20\x20\40\40\40\40\x20\x20\40\40\x20\x22\141\164\x74\x72\151\x62\x75\x74\145\163\x22\x3a\40\x7b\xa\40\x20\x20\x20\x20\40\x20\x20\40\x20\40\x20\40\x20\x20\x20\40\x20\x20\x20\40\x20\40\x20\x22\x73\164\141\x72\164\x4c\151\156\x65\x22\x3a\40\x34\54\12\40\x20\40\40\40\40\40\x20\x20\40\40\x20\x20\40\x20\x20\40\40\x20\40\40\x20\x20\40\x22\163\164\x61\x72\164\x54\157\153\145\156\120\x6f\x73\x22\72\40\61\x34\x2c\12\40\x20\40\40\40\40\x20\40\x20\x20\x20\x20\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\42\163\x74\x61\162\x74\x46\151\x6c\145\x50\157\163\x22\72\x20\x36\x34\x2c\xa\40\x20\x20\40\40\40\40\x20\40\x20\40\40\x20\40\x20\x20\40\x20\x20\40\40\40\x20\40\x22\x65\x6e\144\x4c\x69\156\145\x22\x3a\x20\x34\x2c\xa\40\40\40\40\40\x20\x20\x20\40\x20\x20\x20\x20\40\x20\40\40\40\40\x20\40\40\x20\40\42\x65\156\144\124\157\x6b\145\156\120\x6f\163\42\x3a\x20\61\64\54\12\40\40\40\40\x20\x20\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\40\x20\40\40\42\145\x6e\144\106\151\154\x65\120\x6f\x73\x22\x3a\40\66\x34\54\12\x20\40\40\40\x20\x20\x20\40\x20\x20\x20\x20\x20\x20\40\x20\40\40\x20\40\x20\x20\x20\40\x22\x72\141\167\x56\141\154\x75\145\42\72\40\x22\60\x22\54\12\x20\40\40\x20\40\x20\x20\40\x20\40\40\x20\x20\40\x20\40\40\40\40\x20\40\x20\40\x20\42\153\x69\x6e\144\42\x3a\x20\x31\60\12\40\40\40\x20\40\40\40\40\x20\x20\40\x20\x20\x20\40\x20\40\x20\x20\40\x7d\xa\40\x20\40\40\x20\x20\x20\40\x20\40\x20\40\x20\40\x20\40\x7d\x2c\xa\40\40\40\40\40\40\40\40\x20\40\x20\x20\x20\40\x20\x20\42\146\x6c\141\x67\163\x22\x3a\40\x30\x2c\12\40\x20\40\40\x20\x20\40\40\x20\x20\x20\40\x20\40\x20\x20\x22\141\x74\x74\x72\x47\162\x6f\165\x70\x73\42\72\40\x5b\x5d\54\12\40\x20\x20\40\x20\40\x20\x20\x20\x20\40\40\40\40\x20\x20\42\x61\164\164\x72\x69\x62\165\164\145\x73\42\72\40\173\12\40\40\40\40\40\40\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\40\40\x20\40\x22\x73\164\x61\162\x74\114\151\156\145\42\72\x20\x34\x2c\12\40\x20\x20\40\40\40\40\40\40\x20\40\x20\40\x20\40\40\x20\40\40\40\42\x73\x74\x61\x72\164\124\157\x6b\145\156\120\x6f\163\42\x3a\x20\71\54\12\x20\x20\x20\x20\40\40\x20\x20\40\40\x20\40\40\40\40\40\40\40\40\x20\42\163\x74\141\x72\x74\x46\x69\154\x65\x50\x6f\163\x22\x3a\x20\65\x38\x2c\12\x20\40\40\x20\x20\40\40\x20\40\40\40\40\x20\40\40\x20\40\x20\x20\40\42\x65\x6e\x64\x4c\151\156\x65\x22\x3a\40\x34\54\12\x20\40\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\40\40\x20\42\145\x6e\x64\124\x6f\x6b\x65\x6e\x50\157\x73\x22\x3a\40\x31\64\54\xa\40\40\40\40\40\x20\40\x20\40\x20\40\40\x20\40\x20\x20\x20\40\40\x20\42\145\156\144\x46\x69\x6c\x65\120\x6f\x73\x22\x3a\x20\x36\64\12\x20\x20\x20\x20\40\40\40\x20\40\40\x20\40\40\x20\x20\x20\x7d\12\x20\40\40\40\40\40\40\x20\x20\40\x20\x20\x7d\x2c\xa\40\x20\x20\40\x20\40\x20\40\x20\x20\40\x20\x7b\12\40\x20\x20\x20\x20\x20\40\40\40\x20\x20\40\40\40\40\40\x22\156\157\x64\x65\124\171\160\145\42\72\x20\x22\x50\141\162\141\155\x22\x2c\12\x20\40\x20\x20\40\40\40\x20\40\40\40\40\x20\40\40\x20\42\x74\x79\160\145\x22\x3a\40\x6e\165\x6c\x6c\x2c\xa\40\40\40\x20\40\40\x20\x20\x20\40\x20\x20\40\40\40\40\x22\142\x79\x52\145\146\42\x3a\40\146\x61\154\x73\145\x2c\xa\x20\x20\40\x20\x20\x20\40\40\40\40\x20\40\x20\40\40\x20\x22\166\141\162\151\141\x64\x69\143\x22\x3a\40\x66\141\154\163\145\54\xa\x20\40\x20\x20\x20\x20\40\40\40\40\40\40\40\40\x20\x20\42\166\141\162\x22\x3a\40\x7b\12\40\40\40\40\x20\40\40\x20\40\40\40\40\x20\40\40\40\40\x20\x20\x20\x22\x6e\x6f\144\145\124\171\160\x65\42\x3a\40\42\105\170\160\162\x5f\126\x61\x72\x69\x61\x62\154\x65\x22\54\xa\40\x20\x20\x20\40\40\x20\40\x20\40\x20\40\x20\40\40\x20\40\40\x20\x20\x22\x6e\x61\155\x65\42\x3a\40\x22\142\42\54\xa\40\40\x20\x20\40\x20\40\x20\x20\x20\x20\x20\40\x20\40\40\x20\40\x20\x20\42\x61\x74\x74\162\x69\142\x75\x74\145\163\42\72\x20\x7b\12\x20\40\40\x20\x20\40\40\40\x20\x20\x20\40\40\40\40\40\x20\40\40\x20\x20\40\40\x20\x22\163\164\141\162\164\x4c\x69\x6e\x65\42\72\x20\64\54\xa\x20\40\40\40\40\40\x20\x20\x20\40\40\40\x20\x20\x20\40\x20\40\x20\40\x20\40\40\x20\x22\163\164\x61\x72\164\124\x6f\x6b\x65\156\x50\x6f\163\x22\x3a\x20\61\67\x2c\12\40\x20\40\40\x20\x20\40\x20\40\40\x20\40\x20\40\x20\40\40\40\40\x20\40\40\40\x20\42\163\164\141\x72\164\x46\x69\154\145\x50\157\x73\42\72\x20\x36\67\x2c\12\40\x20\x20\40\40\x20\40\x20\40\40\x20\40\40\40\40\x20\x20\x20\x20\40\40\x20\40\40\42\x65\156\144\114\151\x6e\145\x22\72\40\64\54\12\40\x20\40\40\40\40\x20\40\40\x20\x20\40\40\x20\40\x20\40\x20\40\x20\x20\x20\40\x20\x22\145\156\144\124\157\x6b\145\x6e\120\157\163\42\72\x20\x31\67\54\12\x20\40\40\40\x20\x20\40\40\x20\x20\40\x20\40\40\x20\x20\40\40\x20\40\x20\x20\40\40\x22\145\x6e\144\x46\151\x6c\145\120\157\163\42\72\40\x36\70\xa\40\40\x20\x20\40\40\x20\x20\40\x20\40\x20\x20\x20\x20\40\40\x20\x20\x20\175\xa\40\40\40\x20\40\x20\40\x20\x20\40\x20\x20\40\x20\40\x20\175\x2c\12\x20\40\x20\x20\x20\40\40\40\x20\x20\40\40\x20\40\40\x20\x22\144\x65\146\x61\165\154\x74\x22\72\x20\x7b\xa\40\x20\40\40\40\x20\40\x20\x20\x20\x20\40\40\x20\40\x20\40\40\40\x20\x22\x6e\x6f\144\145\x54\171\x70\x65\42\72\x20\42\123\143\141\154\141\162\137\x46\154\x6f\141\x74\x22\54\12\40\40\40\40\x20\40\40\x20\40\40\40\x20\40\x20\40\40\40\40\x20\40\x22\x76\141\154\165\145\x22\x3a\x20\61\x2c\12\x20\40\x20\x20\x20\40\40\40\x20\x20\x20\40\40\x20\x20\40\40\40\40\40\x22\x61\x74\164\x72\151\142\165\164\145\163\x22\72\x20\x7b\xa\40\x20\40\x20\x20\40\x20\x20\40\40\x20\x20\x20\40\x20\40\x20\x20\x20\40\40\x20\40\40\42\x73\164\141\x72\164\114\x69\156\145\42\72\x20\64\x2c\xa\x20\40\x20\40\x20\40\40\x20\x20\40\40\x20\x20\40\40\40\x20\x20\x20\x20\40\40\x20\x20\x22\163\164\x61\162\164\x54\157\x6b\145\x6e\x50\157\x73\x22\x3a\x20\x32\x31\54\12\40\x20\x20\x20\40\40\40\x20\x20\40\x20\x20\40\x20\40\40\40\40\40\40\x20\x20\40\x20\x22\x73\164\x61\x72\x74\x46\151\x6c\x65\120\x6f\x73\42\x3a\40\x37\62\x2c\12\x20\40\x20\40\x20\x20\40\40\x20\x20\40\x20\40\x20\40\40\x20\40\x20\40\40\x20\x20\x20\x22\145\156\x64\114\x69\156\145\42\x3a\40\x34\54\xa\40\x20\x20\x20\40\40\x20\40\x20\x20\40\40\40\40\40\x20\40\40\40\x20\x20\40\x20\x20\42\x65\156\144\x54\x6f\153\145\x6e\120\x6f\x73\x22\x3a\x20\62\x31\54\xa\40\40\40\40\x20\40\x20\x20\40\40\40\40\40\40\x20\40\x20\40\40\x20\40\x20\x20\x20\42\145\156\144\106\151\154\x65\x50\x6f\163\42\x3a\x20\x37\64\54\xa\x20\x20\x20\40\40\x20\x20\40\40\40\40\40\40\40\x20\x20\x20\40\40\40\x20\x20\40\40\x22\x72\x61\x77\126\x61\154\x75\x65\x22\72\40\x22\x31\56\60\42\xa\x20\40\40\40\x20\x20\40\x20\40\x20\x20\40\40\x20\40\x20\40\x20\40\x20\175\12\x20\40\x20\40\x20\x20\40\40\x20\40\x20\x20\x20\40\x20\x20\x7d\54\xa\x20\x20\x20\x20\x20\x20\40\x20\40\40\x20\40\x20\x20\40\40\42\146\154\141\147\163\x22\x3a\x20\60\x2c\12\40\x20\x20\40\40\40\40\40\x20\40\40\40\x20\40\40\40\42\141\x74\164\x72\x47\162\157\165\160\163\x22\72\40\x5b\x5d\54\xa\40\40\x20\40\x20\x20\x20\x20\x20\x20\40\x20\x20\40\40\x20\42\x61\164\x74\162\151\x62\165\164\x65\163\x22\72\40\173\xa\40\x20\40\40\x20\x20\x20\40\40\40\x20\x20\x20\x20\40\x20\40\40\x20\x20\42\x73\164\141\x72\x74\x4c\x69\156\145\x22\x3a\x20\64\x2c\xa\40\40\40\x20\40\40\x20\x20\x20\x20\40\x20\x20\40\40\x20\x20\x20\40\x20\42\163\x74\x61\x72\x74\x54\157\153\x65\x6e\x50\x6f\x73\x22\72\x20\x31\x37\x2c\xa\40\40\40\x20\x20\40\x20\40\x20\40\x20\x20\40\x20\40\x20\40\x20\x20\x20\42\163\x74\141\162\164\106\151\154\145\120\157\x73\42\72\x20\x36\67\x2c\xa\40\40\40\40\x20\40\40\40\x20\40\x20\x20\40\40\x20\40\x20\40\x20\40\42\145\156\144\114\151\156\x65\42\x3a\x20\64\54\12\40\40\40\x20\40\x20\x20\x20\40\40\x20\x20\40\x20\x20\40\40\40\40\x20\42\x65\x6e\x64\x54\x6f\153\145\156\120\x6f\x73\42\x3a\40\x32\61\54\12\40\x20\x20\x20\40\x20\x20\40\x20\x20\x20\x20\x20\x20\x20\40\x20\40\40\40\x22\x65\x6e\x64\x46\151\x6c\145\120\157\x73\x22\x3a\x20\x37\64\xa\x20\x20\x20\40\40\x20\40\x20\x20\40\x20\x20\40\40\x20\x20\x7d\xa\40\40\40\x20\x20\40\x20\40\40\x20\40\x20\175\12\40\40\x20\x20\x20\x20\40\x20\x5d\x2c\12\40\x20\x20\x20\x20\x20\40\x20\42\x72\x65\x74\x75\162\156\124\x79\x70\145\42\x3a\x20\x6e\165\x6c\154\x2c\12\x20\40\40\40\40\40\40\x20\42\163\x74\155\x74\163\x22\x3a\x20\133\xa\40\40\x20\x20\40\40\x20\40\40\40\40\40\x7b\12\x20\40\x20\x20\x20\40\40\x20\40\x20\40\40\x20\40\x20\x20\42\156\x6f\144\145\124\171\x70\x65\x22\72\40\x22\123\x74\x6d\x74\137\105\143\150\x6f\x22\54\xa\x20\40\x20\x20\x20\40\x20\x20\x20\40\x20\40\40\x20\40\40\x22\145\x78\160\162\163\42\72\40\x5b\xa\40\40\x20\40\x20\40\40\40\40\x20\40\40\40\40\x20\x20\40\x20\40\x20\x7b\12\40\x20\x20\40\40\x20\40\40\x20\x20\x20\x20\x20\x20\x20\40\40\x20\x20\x20\40\40\x20\x20\x22\x6e\x6f\x64\x65\124\171\160\145\42\72\40\x22\123\x63\x61\154\x61\x72\x5f\123\164\x72\x69\x6e\x67\x22\x2c\12\x20\x20\40\x20\x20\40\40\40\40\40\40\40\40\40\40\x20\40\x20\40\40\40\x20\40\x20\x22\166\x61\x6c\x75\x65\x22\x3a\x20\x22\106\157\x6f\42\x2c\12\x20\x20\40\40\40\x20\40\x20\x20\x20\40\x20\40\40\x20\40\40\x20\x20\40\40\40\40\40\x22\141\x74\164\x72\x69\142\x75\164\145\x73\42\x3a\x20\173\xa\x20\40\x20\40\x20\40\40\x20\x20\40\40\x20\x20\40\x20\x20\40\40\x20\x20\40\x20\x20\40\x20\40\x20\40\42\x73\x74\x61\x72\x74\114\x69\x6e\145\42\72\40\65\54\12\x20\40\x20\40\40\x20\x20\40\40\40\x20\x20\x20\40\40\x20\40\40\40\40\x20\x20\40\40\40\x20\40\x20\42\163\x74\141\x72\164\124\x6f\x6b\x65\x6e\120\157\163\42\x3a\40\62\70\54\12\40\x20\40\x20\x20\40\40\x20\x20\40\40\40\40\x20\40\40\x20\x20\x20\40\x20\x20\x20\x20\40\40\40\x20\42\x73\x74\x61\162\x74\106\151\154\145\120\157\163\x22\x3a\x20\x38\x38\x2c\12\x20\x20\x20\x20\40\x20\40\x20\40\40\40\40\x20\x20\x20\40\40\40\x20\x20\40\40\x20\40\40\40\x20\40\42\x65\156\144\114\151\x6e\x65\42\x3a\x20\65\x2c\xa\40\40\40\x20\x20\x20\x20\40\x20\x20\40\40\x20\40\40\40\x20\x20\x20\x20\x20\x20\40\40\40\40\x20\40\x22\x65\x6e\x64\124\157\153\145\156\x50\157\163\42\72\x20\62\x38\x2c\xa\40\x20\x20\40\x20\x20\x20\40\x20\40\x20\40\x20\40\40\x20\x20\40\40\40\x20\40\40\40\x20\x20\x20\x20\x22\145\156\x64\x46\x69\x6c\x65\x50\x6f\x73\42\x3a\40\71\62\54\xa\40\x20\x20\40\40\x20\40\x20\40\40\x20\x20\40\x20\40\40\x20\x20\40\40\x20\40\x20\x20\40\40\40\x20\x22\153\151\156\x64\x22\x3a\40\x31\54\12\40\x20\40\x20\40\x20\40\40\x20\x20\40\x20\40\x20\x20\x20\40\40\40\x20\40\x20\x20\x20\x20\40\x20\40\42\x72\141\x77\126\141\x6c\x75\x65\42\72\40\x22\x27\x46\x6f\x6f\47\42\12\40\x20\x20\40\x20\40\x20\40\x20\40\40\x20\x20\40\x20\x20\x20\x20\x20\40\40\x20\x20\40\175\xa\40\40\x20\40\40\40\40\40\x20\40\40\40\40\40\x20\40\x20\40\x20\x20\175\12\40\x20\40\40\40\40\x20\40\x20\x20\40\x20\40\x20\40\x20\135\54\xa\40\40\40\40\x20\40\40\x20\40\40\40\40\40\x20\40\x20\42\141\x74\x74\162\x69\142\x75\x74\145\163\x22\72\40\173\xa\x20\40\40\x20\x20\40\x20\x20\x20\x20\40\40\40\40\40\x20\40\x20\40\x20\42\163\x74\141\162\x74\114\151\156\x65\x22\72\x20\65\x2c\xa\40\40\40\x20\40\40\x20\40\x20\x20\x20\x20\40\x20\x20\x20\x20\x20\x20\40\42\163\164\x61\x72\164\124\x6f\153\145\x6e\120\x6f\x73\x22\72\x20\x32\x36\54\xa\40\x20\x20\40\40\40\40\x20\x20\40\40\40\40\x20\40\x20\x20\x20\x20\40\x22\x73\x74\141\162\x74\x46\151\x6c\x65\x50\157\x73\x22\x3a\40\70\x33\x2c\12\40\40\x20\40\x20\40\x20\x20\x20\40\x20\x20\40\x20\x20\40\x20\40\40\x20\x22\x65\156\144\x4c\151\156\x65\42\x3a\40\65\54\12\x20\x20\x20\40\40\40\x20\x20\x20\x20\40\40\40\x20\40\x20\x20\x20\x20\40\x22\145\156\x64\x54\x6f\x6b\x65\156\120\157\x73\42\72\40\62\x39\54\xa\x20\40\x20\40\x20\x20\40\x20\x20\40\40\40\40\40\x20\40\40\40\x20\x20\x22\145\x6e\x64\x46\151\154\x65\x50\157\x73\x22\x3a\40\71\x33\xa\40\40\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\40\40\40\175\xa\x20\x20\40\x20\40\x20\x20\x20\40\x20\x20\40\175\12\x20\40\x20\40\x20\x20\x20\x20\135\x2c\xa\x20\40\x20\x20\40\x20\40\40\x22\x61\x74\x74\x72\107\x72\x6f\x75\x70\163\42\x3a\x20\x5b\x5d\x2c\xa\x20\40\x20\40\x20\x20\x20\x20\x22\x61\164\x74\x72\151\142\x75\x74\x65\163\x22\x3a\x20\173\12\x20\40\x20\x20\40\x20\40\x20\40\40\40\x20\x22\x73\x74\x61\x72\164\x4c\x69\156\x65\42\x3a\40\x34\54\12\40\x20\x20\40\x20\40\40\x20\40\40\x20\x20\42\x73\164\x61\162\x74\x54\x6f\153\x65\x6e\120\157\x73\x22\x3a\x20\x35\54\12\40\40\x20\40\40\x20\40\40\x20\40\x20\40\42\x73\164\141\x72\x74\106\151\154\145\120\x6f\163\42\x3a\x20\63\66\54\12\40\x20\x20\40\x20\x20\40\x20\40\40\x20\x20\x22\x65\x6e\x64\x4c\x69\156\x65\42\72\40\x36\54\12\40\40\40\x20\40\x20\40\40\40\40\x20\x20\42\x65\156\x64\124\x6f\153\x65\x6e\120\157\x73\42\72\x20\x33\61\x2c\12\x20\40\40\x20\40\40\x20\x20\40\x20\x20\x20\x22\145\x6e\x64\106\151\x6c\x65\x50\157\163\42\72\40\x39\65\54\xa\x20\40\40\x20\40\40\40\40\x20\x20\40\x20\42\143\157\155\155\x65\x6e\x74\163\x22\72\x20\133\12\x20\x20\x20\x20\40\x20\40\x20\x20\x20\40\x20\40\x20\40\40\x7b\xa\x20\40\40\40\x20\40\40\40\40\x20\40\x20\40\x20\x20\40\40\x20\x20\40\42\156\157\x64\145\x54\171\160\x65\42\72\x20\x22\x43\x6f\x6d\155\x65\156\164\x22\x2c\12\x20\x20\40\40\x20\x20\40\x20\40\x20\40\x20\x20\x20\40\x20\40\40\x20\40\42\164\145\x78\x74\42\72\40\42\x5c\x2f\134\57\40\143\x6f\x6d\x6d\x65\156\x74\x22\54\xa\x20\x20\40\40\40\x20\40\40\40\x20\40\x20\x20\40\40\40\x20\x20\40\40\x22\154\x69\x6e\145\42\x3a\x20\x32\x2c\12\x20\40\x20\x20\40\x20\x20\40\x20\40\40\40\x20\40\x20\40\x20\x20\x20\x20\42\x66\151\154\145\120\157\163\42\x3a\40\66\54\12\x20\x20\x20\x20\x20\40\40\40\x20\x20\40\40\x20\40\40\40\40\40\x20\x20\x22\x74\x6f\153\145\156\120\157\163\42\72\40\x31\x2c\12\x20\40\40\40\40\40\x20\x20\x20\x20\40\40\x20\40\40\40\x20\x20\x20\40\x22\145\x6e\144\x4c\151\x6e\145\42\x3a\x20\62\x2c\12\40\40\x20\x20\40\40\x20\x20\x20\40\x20\x20\x20\40\x20\40\x20\x20\x20\40\42\x65\156\x64\x46\151\154\145\120\x6f\x73\42\x3a\x20\61\65\54\xa\40\x20\x20\x20\x20\40\x20\40\x20\x20\40\40\x20\40\x20\x20\40\x20\x20\x20\x22\145\156\144\x54\x6f\153\x65\x6e\x50\157\x73\42\72\x20\x31\12\x20\40\40\40\x20\40\40\x20\x20\x20\40\x20\x20\40\40\x20\x7d\x2c\12\40\x20\40\x20\40\x20\40\x20\40\x20\40\40\x20\x20\40\x20\x7b\xa\x20\40\x20\40\40\40\x20\x20\x20\x20\x20\40\x20\x20\40\x20\40\40\40\x20\x22\156\157\x64\x65\124\x79\x70\x65\42\x3a\x20\42\x43\157\x6d\x6d\x65\x6e\x74\x5f\104\x6f\143\x22\54\xa\x20\40\40\40\x20\x20\x20\x20\40\x20\x20\40\40\40\40\40\40\x20\40\x20\42\x74\x65\x78\164\42\72\40\42\134\x2f\x2a\x2a\40\x64\157\143\40\143\157\155\x6d\x65\x6e\x74\x20\x2a\x5c\57\42\x2c\xa\40\40\40\x20\40\x20\x20\x20\40\40\x20\x20\x20\40\40\x20\x20\40\40\x20\x22\x6c\x69\156\x65\42\x3a\40\63\x2c\xa\x20\40\x20\x20\40\x20\x20\x20\x20\40\x20\40\x20\40\x20\40\40\x20\x20\x20\42\x66\x69\x6c\x65\120\x6f\163\x22\x3a\x20\x31\67\54\xa\x20\x20\x20\x20\40\40\40\x20\40\40\40\x20\40\40\40\x20\40\x20\40\x20\x22\164\157\153\x65\x6e\120\157\163\42\x3a\x20\63\x2c\12\x20\40\x20\40\x20\x20\x20\40\x20\x20\x20\x20\x20\40\40\40\40\x20\40\40\x22\x65\x6e\144\x4c\151\156\145\42\72\40\63\x2c\12\x20\x20\x20\x20\x20\x20\40\x20\40\40\40\40\x20\x20\40\x20\x20\40\40\40\42\145\x6e\x64\x46\151\154\x65\120\157\163\42\x3a\40\63\x34\x2c\12\40\40\40\x20\x20\x20\40\x20\x20\x20\40\40\x20\x20\40\40\40\x20\x20\x20\x22\x65\x6e\144\x54\157\x6b\x65\156\x50\x6f\x73\x22\72\40\x33\12\40\40\40\x20\40\40\x20\x20\x20\40\40\40\x20\40\40\x20\x7d\12\x20\40\x20\x20\40\40\40\x20\x20\x20\40\x20\x5d\12\x20\x20\40\x20\x20\x20\40\40\x7d\xa\x20\40\x20\x20\x7d\12\x5d"; $expected81 = "\x5b\12\x20\40\40\40\x7b\xa\x20\x20\x20\40\x20\40\40\x20\42\156\157\x64\145\124\171\x70\x65\42\72\x20\x22\123\x74\155\164\x5f\x46\x75\x6e\143\164\x69\157\x6e\42\54\12\40\x20\40\40\40\40\40\40\42\x61\x74\x74\162\151\x62\165\164\145\163\42\72\40\x7b\xa\40\40\x20\40\x20\40\x20\40\40\x20\x20\40\x22\163\x74\x61\x72\x74\114\151\156\145\x22\x3a\40\64\54\xa\40\40\x20\x20\40\x20\x20\40\40\x20\40\40\x22\163\164\141\x72\164\124\157\153\x65\x6e\120\157\163\x22\x3a\x20\65\x2c\12\40\x20\40\x20\40\40\40\40\x20\40\x20\40\42\163\164\141\162\164\x46\151\x6c\145\120\157\163\x22\72\40\x33\66\54\xa\40\x20\40\40\x20\x20\x20\x20\40\40\x20\40\42\145\x6e\x64\114\151\156\145\x22\x3a\x20\66\x2c\12\x20\x20\x20\x20\x20\x20\40\x20\x20\40\40\x20\x22\145\156\x64\x54\x6f\x6b\145\x6e\x50\157\x73\x22\x3a\40\63\x31\54\xa\40\40\40\x20\x20\40\40\x20\x20\x20\40\x20\42\145\x6e\x64\x46\x69\x6c\145\120\157\163\42\72\x20\71\x35\x2c\xa\40\x20\40\40\40\x20\x20\x20\x20\40\x20\x20\x22\143\x6f\x6d\x6d\145\156\164\x73\x22\72\40\x5b\xa\x20\x20\x20\x20\40\x20\40\x20\40\40\40\40\40\40\40\x20\x7b\xa\x20\40\40\x20\x20\40\x20\40\40\x20\40\40\40\40\40\40\40\x20\40\40\42\156\x6f\144\145\124\x79\x70\x65\x22\72\x20\x22\x43\x6f\x6d\x6d\x65\x6e\x74\42\54\12\40\x20\x20\40\x20\x20\40\40\40\40\40\x20\40\x20\x20\40\x20\40\x20\40\x22\x74\145\170\164\42\x3a\x20\42\x5c\x2f\134\x2f\40\x63\x6f\155\155\x65\156\x74\42\x2c\12\40\40\x20\40\x20\x20\40\40\40\40\40\x20\x20\x20\x20\40\x20\40\40\x20\42\x6c\151\x6e\x65\42\72\x20\62\54\xa\40\x20\40\x20\x20\x20\x20\40\40\40\x20\x20\40\40\40\x20\x20\x20\x20\x20\x22\146\x69\154\x65\x50\157\x73\42\x3a\x20\66\x2c\12\x20\x20\40\40\40\40\40\x20\40\40\x20\40\x20\x20\40\40\x20\40\40\x20\42\164\157\x6b\x65\x6e\120\157\163\42\72\x20\x31\x2c\xa\40\x20\x20\x20\x20\x20\40\x20\40\40\40\x20\x20\x20\x20\40\x20\x20\x20\x20\x22\x65\x6e\x64\114\x69\x6e\x65\42\72\x20\x32\x2c\12\x20\x20\40\40\x20\x20\x20\40\x20\40\40\x20\x20\x20\40\x20\40\40\x20\40\42\x65\156\x64\x46\x69\x6c\145\x50\x6f\x73\x22\72\x20\x31\x35\x2c\12\40\x20\x20\40\x20\40\40\x20\40\40\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x22\x65\156\144\124\157\x6b\x65\x6e\x50\157\x73\x22\x3a\x20\x31\12\40\40\x20\x20\x20\40\40\40\x20\x20\40\40\40\x20\x20\40\175\x2c\12\x20\40\x20\x20\40\x20\40\40\x20\x20\x20\x20\x20\x20\x20\x20\173\xa\40\40\40\x20\x20\x20\40\x20\x20\40\x20\40\x20\40\x20\40\40\40\40\40\x22\x6e\x6f\x64\x65\x54\171\x70\x65\x22\x3a\40\42\103\157\x6d\155\x65\156\164\x5f\x44\x6f\143\x22\x2c\xa\x20\40\40\x20\40\40\40\40\x20\x20\x20\x20\40\40\40\40\40\x20\40\40\42\164\x65\170\164\x22\72\40\42\134\57\x2a\x2a\40\x64\x6f\x63\40\x63\x6f\155\x6d\x65\156\164\40\52\x5c\57\x22\x2c\12\40\x20\40\x20\40\40\40\x20\x20\x20\x20\40\40\x20\x20\40\x20\x20\x20\x20\42\x6c\151\x6e\145\42\x3a\40\x33\x2c\12\40\x20\x20\x20\x20\x20\x20\40\40\40\x20\40\x20\x20\x20\x20\x20\40\40\40\x22\x66\151\x6c\145\x50\157\x73\42\x3a\x20\x31\67\54\xa\40\40\40\40\40\40\x20\x20\40\x20\x20\40\x20\x20\40\x20\40\x20\40\x20\x22\164\157\x6b\x65\156\120\157\x73\42\x3a\40\63\x2c\12\x20\x20\x20\40\40\40\40\x20\x20\40\x20\x20\x20\40\x20\x20\x20\x20\40\40\42\x65\156\x64\114\x69\156\145\x22\x3a\40\x33\54\xa\40\40\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\40\40\x20\x20\40\x20\x20\x20\x22\x65\156\x64\106\151\154\145\x50\x6f\x73\42\72\40\x33\64\x2c\12\x20\40\x20\40\x20\40\40\x20\x20\40\x20\40\40\x20\40\x20\40\x20\40\40\x22\145\x6e\144\124\157\x6b\x65\x6e\120\x6f\x73\x22\x3a\40\63\12\40\x20\x20\x20\x20\x20\40\x20\40\40\40\x20\x20\40\40\40\175\xa\40\40\x20\40\x20\x20\40\40\40\x20\x20\40\x5d\xa\40\40\x20\x20\40\x20\40\x20\x7d\x2c\xa\40\40\x20\x20\40\x20\x20\x20\42\x62\171\x52\x65\146\42\x3a\40\146\x61\x6c\163\x65\x2c\12\40\x20\x20\40\40\40\40\40\42\156\141\x6d\145\x22\72\x20\x7b\12\40\40\x20\x20\x20\x20\40\x20\x20\40\x20\40\x22\156\x6f\x64\x65\x54\x79\x70\x65\42\x3a\x20\42\x49\x64\x65\x6e\164\151\146\151\x65\x72\x22\54\xa\40\40\40\x20\x20\x20\40\40\40\40\x20\x20\42\x61\164\164\162\151\x62\x75\x74\x65\163\42\x3a\40\x7b\12\40\40\40\40\x20\x20\40\x20\x20\40\x20\40\x20\x20\40\40\42\163\164\x61\162\x74\x4c\x69\x6e\x65\42\72\x20\x34\54\xa\40\x20\40\40\40\40\40\40\40\x20\40\40\x20\40\x20\40\x22\x73\x74\141\x72\x74\124\x6f\153\145\x6e\120\x6f\x73\x22\x3a\x20\67\x2c\12\40\40\40\x20\40\x20\40\x20\40\40\x20\40\x20\x20\40\40\x22\163\x74\141\x72\164\x46\x69\154\145\120\x6f\163\42\72\40\64\65\x2c\xa\x20\40\x20\x20\x20\40\40\x20\40\x20\x20\x20\x20\40\x20\40\42\x65\x6e\x64\114\151\156\x65\x22\x3a\40\x34\54\xa\40\40\40\x20\x20\x20\40\40\x20\40\40\40\x20\x20\x20\x20\x22\x65\156\144\x54\x6f\x6b\145\156\120\x6f\x73\42\x3a\x20\x37\54\xa\40\40\40\40\x20\x20\40\x20\x20\40\x20\40\40\x20\x20\x20\42\x65\x6e\144\x46\151\x6c\145\120\157\163\42\x3a\x20\65\66\xa\40\x20\40\x20\40\40\x20\40\x20\x20\40\40\175\54\xa\40\x20\x20\40\x20\x20\x20\x20\40\x20\40\x20\x22\x6e\x61\x6d\145\42\72\40\42\146\x75\156\143\x74\151\x6f\x6e\116\141\155\x65\x22\12\x20\x20\x20\x20\x20\x20\x20\40\x7d\x2c\xa\40\x20\40\x20\40\40\40\40\x22\x70\141\162\x61\155\163\x22\72\40\x5b\xa\40\x20\40\x20\x20\40\40\40\x20\40\x20\x20\173\xa\x20\40\40\40\x20\40\40\40\x20\40\x20\40\x20\x20\40\x20\x22\156\157\144\x65\x54\x79\x70\145\42\x3a\x20\x22\x50\x61\162\141\155\x22\54\xa\40\x20\40\40\x20\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\42\141\164\x74\x72\151\142\x75\164\145\x73\x22\72\40\x7b\12\x20\40\40\40\40\x20\x20\40\x20\x20\40\40\40\x20\40\x20\x20\x20\x20\40\x22\163\164\x61\x72\x74\x4c\151\156\x65\x22\x3a\x20\x34\54\12\40\x20\40\x20\x20\x20\40\x20\x20\40\x20\x20\40\40\x20\40\x20\x20\40\x20\42\163\164\x61\162\x74\x54\157\x6b\145\x6e\120\157\163\x22\x3a\40\71\54\xa\40\40\40\40\x20\x20\x20\40\40\40\x20\40\40\40\40\40\40\x20\40\40\42\163\x74\141\162\164\106\x69\x6c\145\120\x6f\163\42\72\x20\x35\70\x2c\12\40\x20\40\40\x20\x20\x20\40\x20\40\x20\x20\40\x20\40\x20\x20\40\x20\40\42\145\x6e\x64\x4c\x69\x6e\145\42\x3a\x20\x34\54\xa\x20\x20\40\x20\x20\x20\x20\x20\40\x20\x20\x20\x20\40\40\40\40\x20\40\40\x22\145\x6e\x64\x54\157\x6b\x65\x6e\x50\x6f\x73\42\72\x20\61\x34\54\12\x20\40\40\40\40\x20\40\x20\40\40\x20\40\x20\40\40\x20\x20\x20\40\40\x22\x65\156\144\106\151\x6c\145\120\x6f\163\x22\72\40\66\x34\xa\x20\40\40\40\x20\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\175\x2c\12\x20\40\x20\x20\x20\x20\40\x20\x20\x20\x20\40\x20\x20\40\40\42\x74\x79\160\145\42\x3a\x20\156\x75\x6c\154\x2c\12\40\x20\x20\40\x20\x20\40\40\x20\x20\x20\40\x20\40\x20\x20\42\142\171\x52\145\x66\x22\x3a\40\164\162\x75\145\x2c\12\40\x20\40\40\x20\x20\40\x20\x20\40\x20\x20\40\40\40\40\42\166\141\x72\x69\x61\x64\x69\143\42\x3a\40\x66\x61\x6c\x73\145\54\12\x20\40\40\x20\40\40\x20\40\x20\x20\x20\x20\x20\x20\x20\40\42\x76\141\162\x22\72\x20\x7b\xa\x20\x20\x20\40\40\x20\x20\40\40\x20\40\40\x20\40\40\x20\40\x20\40\x20\x22\156\157\x64\x65\124\171\160\145\x22\x3a\x20\x22\x45\170\160\162\137\126\x61\x72\151\141\x62\x6c\145\42\54\xa\40\40\x20\x20\x20\40\40\x20\40\40\40\x20\x20\40\40\40\x20\x20\40\x20\x22\x61\164\x74\x72\151\x62\x75\164\x65\163\x22\x3a\x20\x7b\12\x20\x20\x20\x20\x20\40\x20\x20\40\x20\40\40\40\x20\x20\x20\40\40\40\40\x20\40\40\40\x22\163\x74\x61\162\x74\114\151\156\145\x22\72\x20\x34\x2c\xa\40\40\x20\x20\40\40\40\x20\x20\x20\40\40\40\40\40\x20\x20\40\40\x20\40\40\40\x20\x22\163\x74\x61\x72\164\x54\x6f\153\145\x6e\120\157\x73\x22\72\x20\61\60\54\12\40\40\40\40\40\x20\x20\40\40\x20\40\40\40\x20\40\40\x20\x20\40\40\x20\x20\40\40\42\163\x74\x61\x72\x74\x46\151\x6c\145\x50\157\163\42\x3a\40\x35\x39\54\12\x20\x20\40\x20\x20\x20\40\40\40\40\40\x20\x20\x20\40\x20\x20\40\x20\x20\40\x20\40\40\x22\145\x6e\x64\x4c\x69\156\x65\42\x3a\x20\x34\x2c\12\40\40\40\x20\x20\x20\40\40\x20\40\x20\x20\x20\40\x20\40\x20\x20\x20\40\x20\40\40\40\42\145\156\x64\x54\157\x6b\x65\156\x50\x6f\x73\42\x3a\40\x31\60\54\12\40\x20\x20\40\x20\x20\40\x20\40\40\40\x20\x20\x20\40\40\x20\x20\40\40\x20\40\40\x20\x22\x65\156\x64\106\151\154\x65\120\x6f\163\42\72\40\x36\x30\xa\x20\40\40\40\x20\x20\x20\x20\x20\40\40\x20\x20\40\x20\x20\40\x20\40\x20\x7d\x2c\12\40\40\x20\40\x20\x20\x20\40\40\40\x20\x20\40\x20\40\x20\x20\x20\40\x20\x22\x6e\x61\155\145\x22\x3a\40\x22\x61\x22\xa\x20\40\40\40\x20\40\x20\x20\40\40\40\x20\x20\40\40\40\175\x2c\12\x20\x20\x20\x20\x20\40\x20\40\40\40\40\x20\x20\40\40\40\x22\144\145\146\141\165\154\x74\x22\x3a\40\173\xa\40\40\40\x20\40\40\x20\x20\40\40\40\x20\x20\40\x20\x20\x20\40\x20\x20\x22\x6e\x6f\144\x65\x54\171\160\x65\x22\x3a\x20\42\123\x63\x61\x6c\141\162\137\111\x6e\x74\42\x2c\12\x20\x20\x20\40\x20\x20\x20\x20\40\40\x20\x20\40\40\x20\x20\40\x20\x20\40\42\x61\x74\x74\x72\x69\142\165\x74\x65\x73\x22\72\x20\173\xa\40\40\40\x20\40\40\x20\x20\x20\x20\x20\x20\x20\40\x20\40\40\x20\x20\40\40\x20\x20\40\42\163\164\141\162\164\x4c\x69\156\x65\x22\x3a\x20\64\54\xa\x20\40\40\x20\40\x20\40\x20\40\x20\x20\40\40\40\40\x20\x20\40\40\x20\x20\x20\40\x20\x22\x73\x74\141\162\164\x54\x6f\153\145\156\120\x6f\x73\42\x3a\40\x31\x34\x2c\xa\x20\x20\40\x20\x20\x20\x20\x20\x20\40\40\40\40\40\x20\x20\x20\40\x20\40\40\x20\x20\40\42\x73\164\x61\x72\164\x46\151\154\x65\x50\157\163\42\x3a\40\x36\x34\54\xa\40\x20\x20\40\40\x20\40\x20\x20\40\40\x20\x20\40\x20\40\40\40\x20\x20\40\40\40\40\x22\x65\x6e\x64\114\x69\156\145\42\x3a\x20\64\x2c\xa\x20\x20\x20\40\x20\x20\40\x20\x20\40\40\x20\40\x20\x20\40\40\40\40\x20\40\x20\40\40\x22\x65\x6e\144\124\x6f\x6b\145\156\x50\x6f\x73\42\72\x20\61\x34\54\xa\40\40\40\40\40\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\40\x20\40\x20\40\40\x20\40\x22\x65\156\144\106\151\x6c\145\x50\157\163\x22\x3a\x20\66\x34\x2c\xa\40\40\x20\40\40\x20\x20\x20\x20\40\40\x20\40\x20\40\x20\40\x20\40\40\x20\40\40\x20\42\162\141\167\126\141\154\165\145\x22\x3a\x20\42\x30\x22\x2c\xa\40\40\x20\x20\x20\x20\40\x20\x20\40\40\40\x20\x20\40\x20\40\40\x20\40\x20\40\40\x20\42\x6b\x69\x6e\x64\42\x3a\40\61\x30\12\40\x20\40\x20\40\x20\40\x20\x20\40\40\40\x20\40\40\x20\40\40\x20\x20\175\54\12\40\40\x20\40\x20\x20\40\40\40\x20\40\x20\x20\x20\40\40\x20\x20\40\x20\42\x76\x61\154\x75\x65\42\x3a\40\x30\12\x20\x20\40\40\40\x20\x20\40\x20\40\x20\40\40\40\40\40\175\x2c\12\40\x20\x20\x20\x20\40\x20\40\40\x20\40\40\x20\x20\40\40\x22\146\154\141\147\x73\x22\x3a\40\x30\54\xa\x20\40\40\x20\40\x20\40\x20\x20\x20\40\40\x20\40\40\x20\x22\141\x74\x74\162\107\x72\157\165\x70\x73\x22\72\x20\x5b\x5d\xa\40\x20\x20\40\x20\x20\x20\x20\x20\x20\x20\x20\x7d\54\xa\40\x20\x20\x20\x20\x20\40\40\x20\x20\40\x20\173\12\x20\x20\40\40\x20\x20\40\40\40\x20\x20\x20\40\x20\40\40\42\156\x6f\x64\x65\x54\171\x70\x65\x22\72\40\x22\120\x61\x72\x61\155\42\x2c\12\40\40\x20\40\40\x20\x20\x20\x20\x20\x20\x20\x20\40\40\40\42\x61\164\164\x72\151\x62\165\164\x65\163\x22\x3a\x20\173\12\x20\40\40\x20\x20\x20\40\x20\40\40\40\x20\40\x20\40\40\x20\x20\x20\40\42\x73\164\141\162\x74\114\151\x6e\145\42\x3a\x20\x34\54\xa\40\x20\40\40\x20\x20\x20\x20\40\40\40\40\x20\x20\x20\x20\40\x20\40\40\x22\163\164\x61\162\x74\x54\157\153\x65\x6e\x50\157\x73\x22\72\x20\61\67\x2c\12\x20\x20\x20\40\40\x20\40\40\40\40\x20\40\x20\40\x20\40\x20\40\40\40\x22\x73\x74\x61\162\x74\106\151\154\145\x50\157\163\42\72\40\66\x37\x2c\xa\x20\40\x20\40\40\x20\x20\40\40\x20\x20\40\40\x20\x20\40\x20\40\x20\x20\x22\x65\x6e\144\x4c\151\156\x65\42\72\x20\x34\54\12\40\40\x20\x20\40\x20\x20\x20\x20\x20\40\x20\x20\x20\x20\x20\40\40\40\x20\42\x65\156\x64\124\157\153\x65\x6e\x50\157\163\x22\x3a\x20\62\61\54\xa\40\x20\x20\40\40\40\40\x20\40\x20\40\40\40\x20\x20\x20\40\40\40\x20\x22\x65\x6e\144\x46\x69\154\145\120\x6f\x73\42\72\40\x37\64\xa\40\x20\40\40\40\x20\40\x20\40\40\40\x20\40\40\x20\40\175\x2c\xa\40\x20\40\x20\40\40\x20\x20\x20\x20\40\40\40\x20\40\40\42\164\x79\160\x65\42\x3a\40\x6e\165\x6c\154\54\12\40\x20\x20\40\x20\40\x20\x20\40\40\40\x20\40\40\x20\40\42\142\171\122\145\x66\x22\72\x20\146\x61\154\163\x65\54\xa\40\x20\40\x20\x20\x20\x20\40\x20\40\40\40\40\40\x20\40\42\x76\x61\x72\x69\141\x64\151\143\x22\72\x20\146\141\154\x73\145\x2c\12\x20\40\x20\x20\40\x20\x20\x20\40\40\x20\40\x20\40\40\x20\x22\x76\x61\x72\42\72\x20\173\xa\40\40\x20\40\x20\x20\x20\x20\40\40\x20\40\40\x20\40\40\x20\x20\x20\40\42\156\157\x64\x65\124\171\x70\145\42\72\x20\42\x45\x78\160\162\x5f\x56\141\162\151\x61\x62\x6c\145\42\x2c\12\x20\40\40\40\40\x20\x20\x20\40\40\x20\40\40\x20\40\x20\x20\x20\40\x20\x22\141\164\x74\x72\151\142\x75\x74\x65\163\x22\x3a\40\173\xa\x20\x20\40\40\x20\x20\x20\x20\x20\40\x20\x20\x20\x20\40\40\x20\40\x20\x20\x20\40\40\x20\x22\x73\x74\x61\x72\x74\114\x69\x6e\145\42\x3a\x20\64\54\xa\40\x20\x20\40\x20\x20\40\40\40\x20\40\40\40\40\x20\x20\x20\40\40\40\x20\40\x20\40\42\x73\164\141\162\164\124\x6f\153\145\156\120\157\163\42\x3a\40\61\x37\54\12\x20\40\x20\x20\x20\x20\40\x20\40\40\40\x20\40\x20\x20\x20\40\40\40\x20\40\40\x20\x20\42\x73\x74\x61\162\x74\x46\151\x6c\x65\x50\x6f\163\x22\72\x20\66\67\x2c\12\x20\40\40\x20\40\40\x20\x20\x20\40\x20\x20\40\x20\40\40\40\40\x20\x20\x20\40\x20\40\x22\145\x6e\x64\x4c\x69\156\x65\x22\72\x20\64\54\12\x20\40\40\40\40\x20\x20\x20\40\40\x20\x20\40\x20\40\40\x20\40\40\40\x20\x20\40\x20\x22\x65\x6e\x64\124\157\x6b\145\x6e\x50\157\163\42\72\40\61\67\54\xa\40\x20\x20\40\x20\x20\x20\x20\40\40\40\x20\x20\40\x20\40\40\40\40\40\40\40\40\x20\x22\x65\x6e\x64\106\151\154\145\120\157\x73\x22\x3a\40\x36\70\xa\40\x20\40\x20\40\40\40\40\x20\40\x20\40\x20\40\x20\40\40\40\x20\x20\175\x2c\12\40\40\40\x20\x20\x20\x20\x20\40\40\40\x20\x20\40\x20\40\x20\x20\x20\x20\x22\156\x61\155\145\x22\72\x20\42\142\42\12\40\40\x20\x20\x20\40\x20\x20\x20\40\x20\40\x20\x20\40\x20\175\x2c\xa\x20\x20\x20\40\x20\x20\40\40\x20\x20\40\40\x20\40\40\40\42\x64\x65\146\141\165\x6c\164\x22\72\40\x7b\12\40\40\40\40\x20\x20\x20\40\40\40\40\40\40\x20\x20\x20\40\x20\40\40\42\156\157\x64\145\124\x79\160\145\42\72\40\x22\123\143\x61\x6c\x61\x72\137\x46\154\x6f\141\164\x22\54\xa\40\x20\x20\x20\40\40\x20\40\40\40\x20\x20\x20\40\x20\40\x20\40\x20\x20\42\x61\164\x74\x72\151\x62\x75\x74\x65\x73\x22\x3a\40\173\xa\40\x20\40\x20\x20\x20\40\x20\40\40\x20\40\40\x20\x20\40\40\40\x20\x20\40\40\40\40\x22\x73\164\141\x72\x74\114\151\x6e\x65\42\x3a\x20\x34\x2c\12\x20\40\40\x20\x20\40\x20\40\40\x20\40\x20\40\x20\40\40\x20\40\x20\40\x20\x20\40\40\x22\163\164\x61\x72\164\124\157\153\x65\156\120\157\163\42\72\40\x32\x31\54\12\x20\x20\x20\40\x20\x20\x20\x20\x20\x20\x20\40\40\x20\x20\40\40\x20\x20\40\x20\40\40\x20\x22\x73\x74\x61\x72\x74\x46\151\154\145\x50\x6f\x73\x22\x3a\x20\67\x32\54\xa\40\40\40\40\x20\x20\x20\x20\40\40\x20\x20\x20\x20\40\40\x20\x20\x20\x20\x20\40\x20\40\x22\x65\156\x64\x4c\x69\156\x65\x22\x3a\x20\x34\x2c\xa\40\x20\40\x20\x20\x20\40\x20\x20\40\40\x20\40\x20\x20\40\x20\40\40\40\x20\x20\x20\x20\x22\145\x6e\x64\124\157\153\x65\x6e\120\157\x73\x22\72\40\x32\61\54\12\40\40\40\x20\x20\40\40\40\40\40\x20\40\40\x20\40\40\x20\x20\x20\40\40\40\40\40\42\145\156\144\106\x69\154\145\x50\x6f\x73\42\x3a\x20\x37\64\x2c\xa\x20\x20\40\x20\40\40\x20\40\x20\x20\x20\40\40\40\40\40\40\40\x20\40\40\40\x20\x20\42\x72\x61\x77\126\141\x6c\x75\145\x22\72\x20\x22\x31\x2e\x30\x22\xa\x20\40\40\40\40\x20\x20\x20\x20\x20\40\40\x20\x20\x20\x20\40\40\x20\x20\175\x2c\xa\40\40\x20\x20\40\40\40\40\x20\x20\40\40\x20\40\x20\40\x20\x20\x20\40\x22\166\x61\154\165\145\42\72\x20\x31\xa\x20\x20\40\40\40\x20\40\40\x20\40\x20\x20\40\x20\40\40\175\54\xa\x20\x20\x20\40\x20\40\40\40\x20\x20\40\x20\40\x20\x20\x20\42\146\154\x61\x67\x73\42\72\40\x30\x2c\xa\x20\40\40\x20\x20\40\40\x20\x20\40\40\40\x20\40\x20\x20\42\141\x74\164\x72\107\162\x6f\x75\160\163\42\x3a\40\133\x5d\12\40\40\x20\40\40\40\40\x20\40\x20\40\40\175\xa\40\x20\40\x20\x20\x20\40\x20\135\54\12\40\x20\x20\40\40\x20\x20\x20\x22\162\x65\164\x75\x72\x6e\124\171\160\145\x22\72\40\x6e\165\x6c\154\x2c\xa\40\x20\x20\40\x20\40\x20\x20\x22\163\164\x6d\164\x73\x22\72\40\133\12\x20\x20\40\40\40\x20\x20\x20\x20\40\40\40\x7b\12\x20\40\40\40\x20\40\x20\40\x20\40\40\x20\40\40\x20\40\x22\x6e\157\144\x65\124\x79\160\x65\42\x3a\x20\x22\x53\164\x6d\164\137\105\143\x68\x6f\x22\x2c\xa\x20\40\40\x20\40\40\x20\40\x20\x20\x20\40\40\x20\40\40\42\x61\164\x74\162\151\x62\165\164\145\163\42\72\40\173\12\40\40\x20\x20\40\x20\40\40\40\40\x20\40\x20\x20\40\40\40\40\40\40\42\163\x74\141\x72\164\x4c\x69\156\145\x22\72\40\65\x2c\12\40\40\40\x20\x20\x20\40\40\40\x20\x20\x20\40\x20\x20\x20\40\40\x20\x20\x22\x73\x74\x61\162\164\124\157\153\145\156\120\x6f\163\x22\x3a\40\62\66\54\xa\40\40\40\40\40\40\x20\40\40\40\x20\x20\40\40\40\x20\40\40\x20\x20\42\x73\164\x61\x72\164\x46\151\x6c\x65\120\x6f\x73\42\72\x20\x38\63\x2c\xa\x20\40\40\40\40\x20\x20\x20\40\40\40\40\40\x20\40\40\40\x20\40\40\42\145\x6e\144\x4c\151\x6e\x65\42\72\40\x35\x2c\12\40\x20\40\40\x20\40\x20\40\40\x20\40\x20\x20\x20\40\x20\40\40\x20\x20\42\145\x6e\x64\x54\157\x6b\x65\156\x50\157\x73\42\x3a\x20\62\x39\54\xa\40\40\40\x20\40\40\40\40\40\x20\40\40\x20\40\x20\40\x20\40\40\x20\42\x65\156\144\106\x69\154\145\x50\157\163\42\x3a\40\71\x33\12\40\40\40\40\x20\40\x20\x20\40\x20\40\40\40\x20\x20\40\x7d\x2c\12\x20\x20\40\x20\x20\40\40\40\x20\40\x20\x20\40\x20\x20\40\42\x65\x78\160\x72\x73\42\x3a\40\133\12\x20\40\x20\x20\40\40\x20\40\x20\40\40\40\x20\40\40\40\40\x20\40\x20\x7b\xa\x20\40\40\x20\40\40\x20\40\40\40\x20\x20\40\40\40\x20\x20\40\x20\x20\40\x20\x20\x20\x22\x6e\157\x64\x65\x54\171\160\145\x22\72\40\x22\123\x63\141\x6c\x61\162\x5f\123\164\x72\x69\156\147\42\x2c\xa\x20\x20\x20\x20\40\40\x20\x20\40\40\40\x20\x20\40\x20\40\x20\x20\40\40\40\x20\40\40\42\x61\164\164\162\151\x62\x75\164\145\x73\42\72\40\x7b\12\40\x20\x20\x20\x20\40\x20\40\40\40\x20\40\40\40\40\x20\40\40\40\40\x20\x20\x20\40\x20\x20\40\x20\42\163\x74\141\x72\164\114\151\x6e\145\42\x3a\40\x35\54\12\x20\x20\x20\x20\x20\x20\x20\40\x20\40\40\x20\x20\x20\x20\40\x20\40\40\40\x20\x20\x20\40\x20\40\x20\40\x22\x73\x74\141\x72\x74\124\x6f\153\x65\156\x50\x6f\x73\x22\x3a\40\x32\x38\54\12\40\40\x20\40\40\x20\40\40\x20\40\x20\x20\40\x20\40\x20\40\x20\x20\40\40\40\x20\x20\x20\x20\40\x20\x22\x73\164\141\162\x74\x46\151\x6c\x65\120\157\x73\42\x3a\x20\x38\70\x2c\12\x20\40\40\x20\40\x20\x20\40\40\x20\40\40\40\40\40\x20\x20\40\40\40\x20\40\40\x20\40\40\x20\x20\x22\x65\156\144\114\x69\156\145\42\72\x20\x35\x2c\12\40\x20\40\x20\40\40\40\40\x20\40\40\x20\40\x20\x20\40\x20\40\40\40\x20\x20\x20\40\x20\x20\x20\x20\x22\145\x6e\144\124\x6f\x6b\145\156\120\157\x73\42\72\40\x32\x38\54\12\x20\40\x20\40\40\x20\x20\40\x20\40\40\40\x20\x20\x20\40\40\40\40\x20\x20\40\40\x20\40\x20\x20\x20\x22\x65\156\144\106\151\x6c\x65\x50\157\x73\42\x3a\40\71\62\x2c\xa\40\x20\x20\40\x20\40\40\40\x20\x20\x20\40\40\40\x20\40\x20\40\x20\40\40\x20\40\40\x20\40\40\x20\42\153\151\x6e\x64\42\72\x20\61\x2c\xa\x20\40\x20\x20\x20\x20\x20\40\x20\x20\40\40\40\40\40\40\x20\x20\x20\x20\40\x20\x20\x20\40\x20\x20\40\x22\162\x61\167\x56\141\154\165\x65\x22\72\x20\x22\47\106\157\157\47\42\12\x20\40\x20\x20\40\x20\x20\40\x20\x20\x20\40\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\54\12\40\x20\x20\x20\x20\40\40\x20\40\x20\40\x20\40\40\40\x20\40\x20\40\x20\x20\40\x20\x20\42\166\x61\154\x75\145\x22\72\40\x22\x46\x6f\157\x22\xa\x20\x20\x20\40\x20\40\40\40\x20\40\x20\x20\40\x20\x20\x20\x20\40\40\x20\175\xa\40\x20\x20\x20\x20\x20\40\40\x20\x20\x20\40\40\x20\40\x20\x5d\xa\40\x20\40\x20\40\40\x20\40\40\x20\40\40\175\12\x20\40\x20\40\40\x20\40\x20\135\54\12\x20\x20\40\40\x20\40\x20\40\42\x61\x74\164\162\x47\x72\157\165\160\163\x22\x3a\40\x5b\x5d\xa\x20\x20\x20\40\175\12\135"; if (version_compare(PHP_VERSION, "\70\56\x31", "\x3e\x3d")) { $expected = $expected81; } $parser = new Parser\Php7(new Lexer()); $stmts = $parser->parse(canonicalize($code)); $json = json_encode($stmts, JSON_PRETTY_PRINT); $this->assertEquals(canonicalize($expected), canonicalize($json)); } }

Function Calls

None

Variables

None

Stats

MD5 f85588fe9f08f5c49c01ba67465b913d
Eval Count 0
Decode Time 125 ms