{"abi":[],"bytecode":{"object":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"599:8922:69:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;599:8922:69;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"599:8922:69:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"LibPosition\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains helper functions for working with the `Position` type.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/dispute/lib/LibPosition.sol\":\"LibPosition\"},\"evmVersion\":\"shanghai\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/dispute/lib/LibPosition.sol\":{\"keccak256\":\"0x7c5f19f8f54f06de2ce1c6cdcc5c7af65ac405130a4066cdaf146ca315818241\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06905e5ede94784e32748ad60557cb0b0829089d65430518e7042b80d2f64e2d\",\"dweb:/ipfs/QmeGKMmnFnow2VrRvTSPavCrToqQ3qDpEaR1tVoK6Hzg8K\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/dispute/lib/LibPosition.sol":"LibPosition"},"evmVersion":"shanghai","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"src/dispute/lib/LibPosition.sol":{"keccak256":"0x7c5f19f8f54f06de2ce1c6cdcc5c7af65ac405130a4066cdaf146ca315818241","urls":["bzz-raw://06905e5ede94784e32748ad60557cb0b0829089d65430518e7042b80d2f64e2d","dweb:/ipfs/QmeGKMmnFnow2VrRvTSPavCrToqQ3qDpEaR1tVoK6Hzg8K"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user","notice":"This library contains helper functions for working with the `Position` type."},"devdoc":{"version":1,"kind":"dev","title":"LibPosition"},"ast":{"absolutePath":"src/dispute/lib/LibPosition.sol","id":53558,"exportedSymbols":{"LibPosition":[53557],"Position":[53344]},"nodeType":"SourceUnit","src":"32:9490:69","nodes":[{"id":53338,"nodeType":"PragmaDirective","src":"32:24:69","nodes":[],"literals":["solidity","^","0.8",".15"]},{"id":53342,"nodeType":"UsingForDirective","src":"58:38:69","nodes":[],"global":true,"libraryName":{"id":53339,"name":"LibPosition","nameLocations":["64:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":53557,"src":"64:11:69"},"typeName":{"id":53341,"nodeType":"UserDefinedTypeName","pathNode":{"id":53340,"name":"Position","nameLocations":["80:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"80:8:69"},"referencedDeclaration":53344,"src":"80:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}},{"id":53344,"nodeType":"UserDefinedValueTypeDefinition","src":"460:25:69","nodes":[],"canonicalName":"Position","name":"Position","nameLocation":"465:8:69","underlyingType":{"id":53343,"name":"uint128","nodeType":"ElementaryTypeName","src":"477:7:69","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}},{"id":53557,"nodeType":"ContractDefinition","src":"599:8922:69","nodes":[{"id":53349,"nodeType":"VariableDeclaration","src":"811:49:69","nodes":[],"constant":true,"documentation":{"id":53346,"nodeType":"StructuredDocumentation","src":"625:181:69","text":"@notice the `MAX_POSITION_BITLEN` is the number of bits that the `Position` type, and the implementation of\n         its behavior within this library, can safely support."},"mutability":"constant","name":"MAX_POSITION_BITLEN","nameLocation":"835:19:69","scope":53557,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":53347,"name":"uint8","nodeType":"ElementaryTypeName","src":"811:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"313236","id":53348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"857:3:69","typeDescriptions":{"typeIdentifier":"t_rational_126_by_1","typeString":"int_const 126"},"value":"126"},"visibility":"internal"},{"id":53362,"nodeType":"FunctionDefinition","src":"1116:241:69","nodes":[],"body":{"id":53361,"nodeType":"Block","src":"1210:147:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"1229:122:69","statements":[{"nodeType":"YulAssignment","src":"1294:47:69","value":{"arguments":[{"arguments":[{"name":"_depth","nodeType":"YulIdentifier","src":"1315:6:69"},{"kind":"number","nodeType":"YulLiteral","src":"1323:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1311:3:69"},"nodeType":"YulFunctionCall","src":"1311:14:69"},{"name":"_indexAtDepth","nodeType":"YulIdentifier","src":"1327:13:69"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1307:3:69"},"nodeType":"YulFunctionCall","src":"1307:34:69"},"variableNames":[{"name":"position_","nodeType":"YulIdentifier","src":"1294:9:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53352,"isOffset":false,"isSlot":false,"src":"1315:6:69","valueSize":1},{"declaration":53354,"isOffset":false,"isSlot":false,"src":"1327:13:69","valueSize":1},{"declaration":53358,"isOffset":false,"isSlot":false,"src":"1294:9:69","valueSize":1}],"id":53360,"nodeType":"InlineAssembly","src":"1220:131:69"}]},"documentation":{"id":53350,"nodeType":"StructuredDocumentation","src":"867:244:69","text":"@notice Computes a generalized index (2^{depth} + indexAtDepth).\n @param _depth The depth of the position.\n @param _indexAtDepth The index at the depth of the position.\n @return position_ The computed generalized index."},"implemented":true,"kind":"function","modifiers":[],"name":"wrap","nameLocation":"1125:4:69","parameters":{"id":53355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53352,"mutability":"mutable","name":"_depth","nameLocation":"1136:6:69","nodeType":"VariableDeclaration","scope":53362,"src":"1130:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":53351,"name":"uint8","nodeType":"ElementaryTypeName","src":"1130:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":53354,"mutability":"mutable","name":"_indexAtDepth","nameLocation":"1152:13:69","nodeType":"VariableDeclaration","scope":53362,"src":"1144:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53353,"name":"uint128","nodeType":"ElementaryTypeName","src":"1144:7:69","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1129:37:69"},"returnParameters":{"id":53359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53358,"mutability":"mutable","name":"position_","nameLocation":"1199:9:69","nodeType":"VariableDeclaration","scope":53362,"src":"1190:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53357,"nodeType":"UserDefinedTypeName","pathNode":{"id":53356,"name":"Position","nameLocations":["1190:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"1190:8:69"},"referencedDeclaration":53344,"src":"1190:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"1189:20:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53373,"nodeType":"FunctionDefinition","src":"1628:1076:69","nodes":[],"body":{"id":53372,"nodeType":"Block","src":"1700:1004:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"1811:887:69","statements":[{"nodeType":"YulAssignment","src":"1825:76:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1838:6:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1850:1:69","type":"","value":"6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1856:18:69","type":"","value":"0xffffffffffffffff"},{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1880:6:69"},{"name":"_position","nodeType":"YulIdentifier","src":"1888:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1876:3:69"},"nodeType":"YulFunctionCall","src":"1876:22:69"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1853:2:69"},"nodeType":"YulFunctionCall","src":"1853:46:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1846:3:69"},"nodeType":"YulFunctionCall","src":"1846:54:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1835:2:69"},"nodeType":"YulFunctionCall","src":"1835:66:69"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"1825:6:69"}]},{"nodeType":"YulAssignment","src":"1914:68:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1927:6:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1939:1:69","type":"","value":"5"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1945:10:69","type":"","value":"0xffffffff"},{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1961:6:69"},{"name":"_position","nodeType":"YulIdentifier","src":"1969:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1957:3:69"},"nodeType":"YulFunctionCall","src":"1957:22:69"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1942:2:69"},"nodeType":"YulFunctionCall","src":"1942:38:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1935:3:69"},"nodeType":"YulFunctionCall","src":"1935:46:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1924:2:69"},"nodeType":"YulFunctionCall","src":"1924:58:69"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"1914:6:69"}]},{"nodeType":"YulAssignment","src":"2062:35:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"2079:6:69"},{"name":"_position","nodeType":"YulIdentifier","src":"2087:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2075:3:69"},"nodeType":"YulFunctionCall","src":"2075:22:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2062:9:69"}]},{"nodeType":"YulAssignment","src":"2110:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2126:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2141:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"2144:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2137:3:69"},"nodeType":"YulFunctionCall","src":"2137:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2123:2:69"},"nodeType":"YulFunctionCall","src":"2123:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2110:9:69"}]},{"nodeType":"YulAssignment","src":"2168:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2184:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2199:1:69","type":"","value":"2"},{"name":"_position","nodeType":"YulIdentifier","src":"2202:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2195:3:69"},"nodeType":"YulFunctionCall","src":"2195:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2181:2:69"},"nodeType":"YulFunctionCall","src":"2181:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2168:9:69"}]},{"nodeType":"YulAssignment","src":"2226:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2242:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2257:1:69","type":"","value":"4"},{"name":"_position","nodeType":"YulIdentifier","src":"2260:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2253:3:69"},"nodeType":"YulFunctionCall","src":"2253:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2239:2:69"},"nodeType":"YulFunctionCall","src":"2239:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2226:9:69"}]},{"nodeType":"YulAssignment","src":"2284:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2300:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2315:1:69","type":"","value":"8"},{"name":"_position","nodeType":"YulIdentifier","src":"2318:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2311:3:69"},"nodeType":"YulFunctionCall","src":"2311:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2297:2:69"},"nodeType":"YulFunctionCall","src":"2297:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2284:9:69"}]},{"nodeType":"YulAssignment","src":"2342:46:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2358:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2373:2:69","type":"","value":"16"},{"name":"_position","nodeType":"YulIdentifier","src":"2377:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2369:3:69"},"nodeType":"YulFunctionCall","src":"2369:18:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2355:2:69"},"nodeType":"YulFunctionCall","src":"2355:33:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2342:9:69"}]},{"nodeType":"YulAssignment","src":"2402:286:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"2452:6:69"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2514:3:69","type":"","value":"251"},{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2523:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2538:3:69","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2543:10:69","type":"","value":"0x07c4acdd"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2534:3:69"},"nodeType":"YulFunctionCall","src":"2534:20:69"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2519:3:69"},"nodeType":"YulFunctionCall","src":"2519:36:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2510:3:69"},"nodeType":"YulFunctionCall","src":"2510:46:69"},{"kind":"number","nodeType":"YulLiteral","src":"2582:66:69","type":"","value":"0x0009010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"2480:4:69"},"nodeType":"YulFunctionCall","src":"2480:190:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2428:2:69"},"nodeType":"YulFunctionCall","src":"2428:260:69"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"2402:6:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53366,"isOffset":false,"isSlot":false,"src":"1888:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"1969:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2062:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2087:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2110:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2126:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2144:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2168:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2184:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2202:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2226:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2242:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2260:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2284:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2300:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2318:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2342:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2358:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2377:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2523:9:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1825:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1838:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1880:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1914:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1927:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1961:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"2079:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"2402:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"2452:6:69","valueSize":1}],"id":53371,"nodeType":"InlineAssembly","src":"1802:896:69"}]},"documentation":{"id":53363,"nodeType":"StructuredDocumentation","src":"1363:260:69","text":"@notice Pulls the `depth` out of a `Position` type.\n @param _position The generalized index to get the `depth` of.\n @return depth_ The `depth` of the `position` gindex.\n @custom:attribution Solady <https://github.com/Vectorized/Solady>"},"implemented":true,"kind":"function","modifiers":[],"name":"depth","nameLocation":"1637:5:69","parameters":{"id":53367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53366,"mutability":"mutable","name":"_position","nameLocation":"1652:9:69","nodeType":"VariableDeclaration","scope":53373,"src":"1643:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53365,"nodeType":"UserDefinedTypeName","pathNode":{"id":53364,"name":"Position","nameLocations":["1643:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"1643:8:69"},"referencedDeclaration":53344,"src":"1643:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"1642:20:69"},"returnParameters":{"id":53370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53369,"mutability":"mutable","name":"depth_","nameLocation":"1692:6:69","nodeType":"VariableDeclaration","scope":53373,"src":"1686:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":53368,"name":"uint8","nodeType":"ElementaryTypeName","src":"1686:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1685:14:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53390,"nodeType":"FunctionDefinition","src":"3171:363:69","nodes":[],"body":{"id":53389,"nodeType":"Block","src":"3259:275:69","nodes":[],"statements":[{"assignments":[53383],"declarations":[{"constant":false,"id":53383,"mutability":"mutable","name":"msb","nameLocation":"3419:3:69","nodeType":"VariableDeclaration","scope":53389,"src":"3411:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53382,"name":"uint256","nodeType":"ElementaryTypeName","src":"3411:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":53387,"initialValue":{"arguments":[{"id":53385,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53377,"src":"3431:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53384,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53373,"src":"3425:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":53386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3425:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"3411:30:69"},{"AST":{"nodeType":"YulBlock","src":"3460:68:69","statements":[{"nodeType":"YulAssignment","src":"3474:44:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"3495:9:69"},{"arguments":[{"name":"msb","nodeType":"YulIdentifier","src":"3510:3:69"},{"kind":"number","nodeType":"YulLiteral","src":"3515:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3506:3:69"},"nodeType":"YulFunctionCall","src":"3506:11:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3491:3:69"},"nodeType":"YulFunctionCall","src":"3491:27:69"},"variableNames":[{"name":"indexAtDepth_","nodeType":"YulIdentifier","src":"3474:13:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53377,"isOffset":false,"isSlot":false,"src":"3495:9:69","valueSize":1},{"declaration":53380,"isOffset":false,"isSlot":false,"src":"3474:13:69","valueSize":1},{"declaration":53383,"isOffset":false,"isSlot":false,"src":"3510:3:69","valueSize":1}],"id":53388,"nodeType":"InlineAssembly","src":"3451:77:69"}]},"documentation":{"id":53374,"nodeType":"StructuredDocumentation","src":"2710:456:69","text":"@notice Pulls the `indexAtDepth` out of a `Position` type.\n         The `indexAtDepth` is the left/right index of a position at a specific depth within\n         the binary tree, starting from index 0. For example, at gindex 2, the `depth` = 1\n         and the `indexAtDepth` = 0.\n @param _position The generalized index to get the `indexAtDepth` of.\n @return indexAtDepth_ The `indexAtDepth` of the `position` gindex."},"implemented":true,"kind":"function","modifiers":[],"name":"indexAtDepth","nameLocation":"3180:12:69","parameters":{"id":53378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53377,"mutability":"mutable","name":"_position","nameLocation":"3202:9:69","nodeType":"VariableDeclaration","scope":53390,"src":"3193:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53376,"nodeType":"UserDefinedTypeName","pathNode":{"id":53375,"name":"Position","nameLocations":["3193:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"3193:8:69"},"referencedDeclaration":53344,"src":"3193:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"3192:20:69"},"returnParameters":{"id":53381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53380,"mutability":"mutable","name":"indexAtDepth_","nameLocation":"3244:13:69","nodeType":"VariableDeclaration","scope":53390,"src":"3236:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53379,"name":"uint128","nodeType":"ElementaryTypeName","src":"3236:7:69","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3235:23:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53402,"nodeType":"FunctionDefinition","src":"3720:148:69","nodes":[],"body":{"id":53401,"nodeType":"Block","src":"3793:75:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"3812:50:69","statements":[{"nodeType":"YulAssignment","src":"3826:26:69","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3839:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"3842:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3835:3:69"},"nodeType":"YulFunctionCall","src":"3835:17:69"},"variableNames":[{"name":"left_","nodeType":"YulIdentifier","src":"3826:5:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53394,"isOffset":false,"isSlot":false,"src":"3842:9:69","valueSize":1},{"declaration":53398,"isOffset":false,"isSlot":false,"src":"3826:5:69","valueSize":1}],"id":53400,"nodeType":"InlineAssembly","src":"3803:59:69"}]},"documentation":{"id":53391,"nodeType":"StructuredDocumentation","src":"3540:175:69","text":"@notice Get the left child of `_position`.\n @param _position The position to get the left position of.\n @return left_ The position to the left of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"left","nameLocation":"3729:4:69","parameters":{"id":53395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53394,"mutability":"mutable","name":"_position","nameLocation":"3743:9:69","nodeType":"VariableDeclaration","scope":53402,"src":"3734:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53393,"nodeType":"UserDefinedTypeName","pathNode":{"id":53392,"name":"Position","nameLocations":["3734:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"3734:8:69"},"referencedDeclaration":53344,"src":"3734:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"3733:20:69"},"returnParameters":{"id":53399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53398,"mutability":"mutable","name":"left_","nameLocation":"3786:5:69","nodeType":"VariableDeclaration","scope":53402,"src":"3777:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53397,"nodeType":"UserDefinedTypeName","pathNode":{"id":53396,"name":"Position","nameLocations":["3777:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"3777:8:69"},"referencedDeclaration":53344,"src":"3777:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"3776:16:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53414,"nodeType":"FunctionDefinition","src":"4057:158:69","nodes":[],"body":{"id":53413,"nodeType":"Block","src":"4132:83:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"4151:58:69","statements":[{"nodeType":"YulAssignment","src":"4165:34:69","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4178:1:69","type":"","value":"1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4185:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"4188:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4181:3:69"},"nodeType":"YulFunctionCall","src":"4181:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4175:2:69"},"nodeType":"YulFunctionCall","src":"4175:24:69"},"variableNames":[{"name":"right_","nodeType":"YulIdentifier","src":"4165:6:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53406,"isOffset":false,"isSlot":false,"src":"4188:9:69","valueSize":1},{"declaration":53410,"isOffset":false,"isSlot":false,"src":"4165:6:69","valueSize":1}],"id":53412,"nodeType":"InlineAssembly","src":"4142:67:69"}]},"documentation":{"id":53403,"nodeType":"StructuredDocumentation","src":"3874:178:69","text":"@notice Get the right child of `_position`\n @param _position The position to get the right position of.\n @return right_ The position to the right of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"right","nameLocation":"4066:5:69","parameters":{"id":53407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53406,"mutability":"mutable","name":"_position","nameLocation":"4081:9:69","nodeType":"VariableDeclaration","scope":53414,"src":"4072:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53405,"nodeType":"UserDefinedTypeName","pathNode":{"id":53404,"name":"Position","nameLocations":["4072:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4072:8:69"},"referencedDeclaration":53344,"src":"4072:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4071:20:69"},"returnParameters":{"id":53411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53410,"mutability":"mutable","name":"right_","nameLocation":"4124:6:69","nodeType":"VariableDeclaration","scope":53414,"src":"4115:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53409,"nodeType":"UserDefinedTypeName","pathNode":{"id":53408,"name":"Position","nameLocations":["4115:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4115:8:69"},"referencedDeclaration":53344,"src":"4115:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4114:17:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53426,"nodeType":"FunctionDefinition","src":"4405:154:69","nodes":[],"body":{"id":53425,"nodeType":"Block","src":"4482:77:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"4501:52:69","statements":[{"nodeType":"YulAssignment","src":"4515:28:69","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4530:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"4533:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4526:3:69"},"nodeType":"YulFunctionCall","src":"4526:17:69"},"variableNames":[{"name":"parent_","nodeType":"YulIdentifier","src":"4515:7:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53418,"isOffset":false,"isSlot":false,"src":"4533:9:69","valueSize":1},{"declaration":53422,"isOffset":false,"isSlot":false,"src":"4515:7:69","valueSize":1}],"id":53424,"nodeType":"InlineAssembly","src":"4492:61:69"}]},"documentation":{"id":53415,"nodeType":"StructuredDocumentation","src":"4221:179:69","text":"@notice Get the parent position of `_position`.\n @param _position The position to get the parent position of.\n @return parent_ The parent position of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"parent","nameLocation":"4414:6:69","parameters":{"id":53419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53418,"mutability":"mutable","name":"_position","nameLocation":"4430:9:69","nodeType":"VariableDeclaration","scope":53426,"src":"4421:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53417,"nodeType":"UserDefinedTypeName","pathNode":{"id":53416,"name":"Position","nameLocations":["4421:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4421:8:69"},"referencedDeclaration":53344,"src":"4421:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4420:20:69"},"returnParameters":{"id":53423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53422,"mutability":"mutable","name":"parent_","nameLocation":"4473:7:69","nodeType":"VariableDeclaration","scope":53426,"src":"4464:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53421,"nodeType":"UserDefinedTypeName","pathNode":{"id":53420,"name":"Position","nameLocations":["4464:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4464:8:69"},"referencedDeclaration":53344,"src":"4464:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4463:18:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53446,"nodeType":"FunctionDefinition","src":"4980:313:69","nodes":[],"body":{"id":53445,"nodeType":"Block","src":"5084:209:69","nodes":[],"statements":[{"assignments":[53439],"declarations":[{"constant":false,"id":53439,"mutability":"mutable","name":"msb","nameLocation":"5102:3:69","nodeType":"VariableDeclaration","scope":53445,"src":"5094:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53438,"name":"uint256","nodeType":"ElementaryTypeName","src":"5094:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":53443,"initialValue":{"arguments":[{"id":53441,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53430,"src":"5114:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53440,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53373,"src":"5108:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":53442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5108:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5094:30:69"},{"AST":{"nodeType":"YulBlock","src":"5143:144:69","statements":[{"nodeType":"YulVariableDeclaration","src":"5157:36:69","value":{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"5178:9:69"},{"name":"msb","nodeType":"YulIdentifier","src":"5189:3:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5174:3:69"},"nodeType":"YulFunctionCall","src":"5174:19:69"},"variables":[{"name":"remaining","nodeType":"YulTypedName","src":"5161:9:69","type":""}]},{"nodeType":"YulAssignment","src":"5206:71:69","value":{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5228:9:69"},{"name":"_position","nodeType":"YulIdentifier","src":"5239:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5224:3:69"},"nodeType":"YulFunctionCall","src":"5224:25:69"},{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5259:9:69"},{"kind":"number","nodeType":"YulLiteral","src":"5270:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5255:3:69"},"nodeType":"YulFunctionCall","src":"5255:17:69"},{"kind":"number","nodeType":"YulLiteral","src":"5274:1:69","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5251:3:69"},"nodeType":"YulFunctionCall","src":"5251:25:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5221:2:69"},"nodeType":"YulFunctionCall","src":"5221:56:69"},"variableNames":[{"name":"rightIndex_","nodeType":"YulIdentifier","src":"5206:11:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53432,"isOffset":false,"isSlot":false,"src":"5178:9:69","valueSize":1},{"declaration":53430,"isOffset":false,"isSlot":false,"src":"5239:9:69","valueSize":1},{"declaration":53439,"isOffset":false,"isSlot":false,"src":"5189:3:69","valueSize":1},{"declaration":53436,"isOffset":false,"isSlot":false,"src":"5206:11:69","valueSize":1}],"id":53444,"nodeType":"InlineAssembly","src":"5134:153:69"}]},"documentation":{"id":53427,"nodeType":"StructuredDocumentation","src":"4565:410:69","text":"@notice Get the deepest, right most gindex relative to the `position`. This is equivalent to\n         calling `right` on a position until the maximum depth is reached.\n @param _position The position to get the relative deepest, right most gindex of.\n @param _maxDepth The maximum depth of the game.\n @return rightIndex_ The deepest, right most gindex relative to the `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"rightIndex","nameLocation":"4989:10:69","parameters":{"id":53433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53430,"mutability":"mutable","name":"_position","nameLocation":"5009:9:69","nodeType":"VariableDeclaration","scope":53446,"src":"5000:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53429,"nodeType":"UserDefinedTypeName","pathNode":{"id":53428,"name":"Position","nameLocations":["5000:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"5000:8:69"},"referencedDeclaration":53344,"src":"5000:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":53432,"mutability":"mutable","name":"_maxDepth","nameLocation":"5028:9:69","nodeType":"VariableDeclaration","scope":53446,"src":"5020:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53431,"name":"uint256","nodeType":"ElementaryTypeName","src":"5020:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4999:39:69"},"returnParameters":{"id":53437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53436,"mutability":"mutable","name":"rightIndex_","nameLocation":"5071:11:69","nodeType":"VariableDeclaration","scope":53446,"src":"5062:20:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53435,"nodeType":"UserDefinedTypeName","pathNode":{"id":53434,"name":"Position","nameLocations":["5062:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"5062:8:69"},"referencedDeclaration":53344,"src":"5062:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"5061:22:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53465,"nodeType":"FunctionDefinition","src":"5741:336:69","nodes":[],"body":{"id":53464,"nodeType":"Block","src":"5844:233:69","nodes":[],"statements":[{"assignments":[53458],"declarations":[{"constant":false,"id":53458,"mutability":"mutable","name":"msb","nameLocation":"5862:3:69","nodeType":"VariableDeclaration","scope":53464,"src":"5854:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53457,"name":"uint256","nodeType":"ElementaryTypeName","src":"5854:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":53462,"initialValue":{"arguments":[{"id":53460,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53450,"src":"5874:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53459,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53373,"src":"5868:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":53461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5868:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5854:30:69"},{"AST":{"nodeType":"YulBlock","src":"5903:168:69","statements":[{"nodeType":"YulVariableDeclaration","src":"5917:36:69","value":{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"5938:9:69"},{"name":"msb","nodeType":"YulIdentifier","src":"5949:3:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5934:3:69"},"nodeType":"YulFunctionCall","src":"5934:19:69"},"variables":[{"name":"remaining","nodeType":"YulTypedName","src":"5921:9:69","type":""}]},{"nodeType":"YulAssignment","src":"5966:95:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5992:9:69"},{"name":"_position","nodeType":"YulIdentifier","src":"6003:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5988:3:69"},"nodeType":"YulFunctionCall","src":"5988:25:69"},{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"6023:9:69"},{"kind":"number","nodeType":"YulLiteral","src":"6034:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6019:3:69"},"nodeType":"YulFunctionCall","src":"6019:17:69"},{"kind":"number","nodeType":"YulLiteral","src":"6038:1:69","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6015:3:69"},"nodeType":"YulFunctionCall","src":"6015:25:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5985:2:69"},"nodeType":"YulFunctionCall","src":"5985:56:69"},{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"6047:9:69"},{"kind":"number","nodeType":"YulLiteral","src":"6058:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6043:3:69"},"nodeType":"YulFunctionCall","src":"6043:17:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5981:3:69"},"nodeType":"YulFunctionCall","src":"5981:80:69"},"variableNames":[{"name":"traceIndex_","nodeType":"YulIdentifier","src":"5966:11:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53452,"isOffset":false,"isSlot":false,"src":"5938:9:69","valueSize":1},{"declaration":53452,"isOffset":false,"isSlot":false,"src":"6047:9:69","valueSize":1},{"declaration":53450,"isOffset":false,"isSlot":false,"src":"6003:9:69","valueSize":1},{"declaration":53458,"isOffset":false,"isSlot":false,"src":"5949:3:69","valueSize":1},{"declaration":53455,"isOffset":false,"isSlot":false,"src":"5966:11:69","valueSize":1}],"id":53463,"nodeType":"InlineAssembly","src":"5894:177:69"}]},"documentation":{"id":53447,"nodeType":"StructuredDocumentation","src":"5299:437:69","text":"@notice Get the deepest, right most trace index relative to the `position`. This is\n         equivalent to calling `right` on a position until the maximum depth is reached and\n         then finding its index at depth.\n @param _position The position to get the relative trace index of.\n @param _maxDepth The maximum depth of the game.\n @return traceIndex_ The trace index relative to the `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"traceIndex","nameLocation":"5750:10:69","parameters":{"id":53453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53450,"mutability":"mutable","name":"_position","nameLocation":"5770:9:69","nodeType":"VariableDeclaration","scope":53465,"src":"5761:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53449,"nodeType":"UserDefinedTypeName","pathNode":{"id":53448,"name":"Position","nameLocations":["5761:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"5761:8:69"},"referencedDeclaration":53344,"src":"5761:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":53452,"mutability":"mutable","name":"_maxDepth","nameLocation":"5789:9:69","nodeType":"VariableDeclaration","scope":53465,"src":"5781:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53451,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5760:39:69"},"returnParameters":{"id":53456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53455,"mutability":"mutable","name":"traceIndex_","nameLocation":"5831:11:69","nodeType":"VariableDeclaration","scope":53465,"src":"5823:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53454,"name":"uint256","nodeType":"ElementaryTypeName","src":"5823:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5822:21:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53488,"nodeType":"FunctionDefinition","src":"6379:710:69","nodes":[],"body":{"id":53487,"nodeType":"Block","src":"6465:624:69","nodes":[],"statements":[{"assignments":[53477],"declarations":[{"constant":false,"id":53477,"mutability":"mutable","name":"lsb","nameLocation":"6561:3:69","nodeType":"VariableDeclaration","scope":53487,"src":"6552:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53476,"nodeType":"UserDefinedTypeName","pathNode":{"id":53475,"name":"Position","nameLocations":["6552:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"6552:8:69"},"referencedDeclaration":53344,"src":"6552:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"id":53478,"nodeType":"VariableDeclarationStatement","src":"6552:12:69"},{"AST":{"nodeType":"YulBlock","src":"6583:69:69","statements":[{"nodeType":"YulAssignment","src":"6597:45:69","value":{"arguments":[{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"6612:9:69"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6608:3:69"},"nodeType":"YulFunctionCall","src":"6608:14:69"},{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"6628:9:69"},{"kind":"number","nodeType":"YulLiteral","src":"6639:1:69","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6624:3:69"},"nodeType":"YulFunctionCall","src":"6624:17:69"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6604:3:69"},"nodeType":"YulFunctionCall","src":"6604:38:69"},"variableNames":[{"name":"lsb","nodeType":"YulIdentifier","src":"6597:3:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53469,"isOffset":false,"isSlot":false,"src":"6612:9:69","valueSize":1},{"declaration":53469,"isOffset":false,"isSlot":false,"src":"6628:9:69","valueSize":1},{"declaration":53477,"isOffset":false,"isSlot":false,"src":"6597:3:69","valueSize":1}],"id":53479,"nodeType":"InlineAssembly","src":"6574:78:69"},{"assignments":[53481],"declarations":[{"constant":false,"id":53481,"mutability":"mutable","name":"msb","nameLocation":"6737:3:69","nodeType":"VariableDeclaration","scope":53487,"src":"6729:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53480,"name":"uint256","nodeType":"ElementaryTypeName","src":"6729:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":53485,"initialValue":{"arguments":[{"id":53483,"name":"lsb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53477,"src":"6749:3:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53482,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53373,"src":"6743:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":53484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6743:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6729:24:69"},{"AST":{"nodeType":"YulBlock","src":"6929:154:69","statements":[{"nodeType":"YulVariableDeclaration","src":"6943:28:69","value":{"arguments":[{"name":"msb","nodeType":"YulIdentifier","src":"6956:3:69"},{"name":"_position","nodeType":"YulIdentifier","src":"6961:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6952:3:69"},"nodeType":"YulFunctionCall","src":"6952:19:69"},"variables":[{"name":"a","nodeType":"YulTypedName","src":"6947:1:69","type":""}]},{"nodeType":"YulAssignment","src":"7044:29:69","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"7060:1:69"},{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"7070:1:69"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7063:6:69"},"nodeType":"YulFunctionCall","src":"7063:9:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7057:2:69"},"nodeType":"YulFunctionCall","src":"7057:16:69"},"variableNames":[{"name":"ancestor_","nodeType":"YulIdentifier","src":"7044:9:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53469,"isOffset":false,"isSlot":false,"src":"6961:9:69","valueSize":1},{"declaration":53473,"isOffset":false,"isSlot":false,"src":"7044:9:69","valueSize":1},{"declaration":53481,"isOffset":false,"isSlot":false,"src":"6956:3:69","valueSize":1}],"id":53486,"nodeType":"InlineAssembly","src":"6920:163:69"}]},"documentation":{"id":53466,"nodeType":"StructuredDocumentation","src":"6083:291:69","text":"@notice Gets the position of the highest ancestor of `_position` that commits to the same\n         trace index.\n @param _position The position to get the highest ancestor of.\n @return ancestor_ The highest ancestor of `position` that commits to the same trace index."},"implemented":true,"kind":"function","modifiers":[],"name":"traceAncestor","nameLocation":"6388:13:69","parameters":{"id":53470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53469,"mutability":"mutable","name":"_position","nameLocation":"6411:9:69","nodeType":"VariableDeclaration","scope":53488,"src":"6402:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53468,"nodeType":"UserDefinedTypeName","pathNode":{"id":53467,"name":"Position","nameLocations":["6402:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"6402:8:69"},"referencedDeclaration":53344,"src":"6402:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"6401:20:69"},"returnParameters":{"id":53474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53473,"mutability":"mutable","name":"ancestor_","nameLocation":"6454:9:69","nodeType":"VariableDeclaration","scope":53488,"src":"6445:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53472,"nodeType":"UserDefinedTypeName","pathNode":{"id":53471,"name":"Position","nameLocations":["6445:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"6445:8:69"},"referencedDeclaration":53344,"src":"6445:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"6444:20:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53531,"nodeType":"FunctionDefinition","src":"7608:944:69","nodes":[],"body":{"id":53530,"nodeType":"Block","src":"7781:771:69","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":53504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":53500,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53492,"src":"7877:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"id":53501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7887:5:69","memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":53373,"src":"7877:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$attached_to$_t_userDefinedValueType$_Position_$53344_$","typeString":"function (Position) pure returns (uint8)"}},"id":53502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7877:17:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":53503,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53494,"src":"7898:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7877:41:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":53507,"nodeType":"IfStatement","src":"7873:222:69","trueBody":{"id":53506,"nodeType":"Block","src":"7920:175:69","statements":[{"AST":{"nodeType":"YulBlock","src":"7943:142:69","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8019:4:69","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"8025:10:69","type":"","value":"0xb34b5c22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8012:6:69"},"nodeType":"YulFunctionCall","src":"8012:24:69"},"nodeType":"YulExpressionStatement","src":"8012:24:69"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8060:4:69","type":"","value":"0x1C"},{"kind":"number","nodeType":"YulLiteral","src":"8066:4:69","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8053:6:69"},"nodeType":"YulFunctionCall","src":"8053:18:69"},"nodeType":"YulExpressionStatement","src":"8053:18:69"}]},"evmVersion":"shanghai","externalReferences":[],"id":53505,"nodeType":"InlineAssembly","src":"7934:151:69"}]}},{"expression":{"id":53512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":53508,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53498,"src":"8148:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":53510,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53492,"src":"8174:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53509,"name":"traceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53488,"src":"8160:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_userDefinedValueType$_Position_$53344_$","typeString":"function (Position) pure returns (Position)"}},"id":53511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8160:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"src":"8148:36:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"id":53513,"nodeType":"ExpressionStatement","src":"8148:36:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":53518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":53514,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53498,"src":"8420:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"id":53515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8430:5:69","memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":53373,"src":"8420:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$attached_to$_t_userDefinedValueType$_Position_$53344_$","typeString":"function (Position) pure returns (uint8)"}},"id":53516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8420:17:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":53517,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53494,"src":"8441:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8420:41:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":53529,"nodeType":"IfStatement","src":"8416:130:69","trueBody":{"id":53528,"nodeType":"Block","src":"8463:83:69","statements":[{"expression":{"id":53526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":53519,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53498,"src":"8477:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":53524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":53522,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53494,"src":"8510:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":53523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8533:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8510:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":53520,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53498,"src":"8489:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"id":53521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8499:10:69","memberName":"rightIndex","nodeType":"MemberAccess","referencedDeclaration":53446,"src":"8489:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$_t_uint256_$returns$_t_userDefinedValueType$_Position_$53344_$attached_to$_t_userDefinedValueType$_Position_$53344_$","typeString":"function (Position,uint256) pure returns (Position)"}},"id":53525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8489:46:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"src":"8477:58:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"id":53527,"nodeType":"ExpressionStatement","src":"8477:58:69"}]}}]},"documentation":{"id":53489,"nodeType":"StructuredDocumentation","src":"7095:508:69","text":"@notice Gets the position of the highest ancestor of `_position` that commits to the same\n         trace index, while still being below `_upperBoundExclusive`.\n @param _position The position to get the highest ancestor of.\n @param _upperBoundExclusive The exclusive upper depth bound, used to inform where to stop in order\n                             to not escape a sub-tree.\n @return ancestor_ The highest ancestor of `position` that commits to the same trace index."},"implemented":true,"kind":"function","modifiers":[],"name":"traceAncestorBounded","nameLocation":"7617:20:69","parameters":{"id":53495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53492,"mutability":"mutable","name":"_position","nameLocation":"7656:9:69","nodeType":"VariableDeclaration","scope":53531,"src":"7647:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53491,"nodeType":"UserDefinedTypeName","pathNode":{"id":53490,"name":"Position","nameLocations":["7647:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"7647:8:69"},"referencedDeclaration":53344,"src":"7647:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":53494,"mutability":"mutable","name":"_upperBoundExclusive","nameLocation":"7683:20:69","nodeType":"VariableDeclaration","scope":53531,"src":"7675:28:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53493,"name":"uint256","nodeType":"ElementaryTypeName","src":"7675:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7637:72:69"},"returnParameters":{"id":53499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53498,"mutability":"mutable","name":"ancestor_","nameLocation":"7766:9:69","nodeType":"VariableDeclaration","scope":53531,"src":"7757:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53497,"nodeType":"UserDefinedTypeName","pathNode":{"id":53496,"name":"Position","nameLocations":["7757:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"7757:8:69"},"referencedDeclaration":53344,"src":"7757:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"7756:20:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53545,"nodeType":"FunctionDefinition","src":"8973:187:69","nodes":[],"body":{"id":53544,"nodeType":"Block","src":"9062:98:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"9081:73:69","statements":[{"nodeType":"YulAssignment","src":"9095:49:69","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9108:1:69","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"_isAttack","nodeType":"YulIdentifier","src":"9121:9:69"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9114:6:69"},"nodeType":"YulFunctionCall","src":"9114:17:69"},{"name":"_position","nodeType":"YulIdentifier","src":"9133:9:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9111:2:69"},"nodeType":"YulFunctionCall","src":"9111:32:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9104:3:69"},"nodeType":"YulFunctionCall","src":"9104:40:69"},"variableNames":[{"name":"move_","nodeType":"YulIdentifier","src":"9095:5:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53537,"isOffset":false,"isSlot":false,"src":"9121:9:69","valueSize":1},{"declaration":53535,"isOffset":false,"isSlot":false,"src":"9133:9:69","valueSize":1},{"declaration":53541,"isOffset":false,"isSlot":false,"src":"9095:5:69","valueSize":1}],"id":53543,"nodeType":"InlineAssembly","src":"9072:82:69"}]},"documentation":{"id":53532,"nodeType":"StructuredDocumentation","src":"8558:410:69","text":"@notice Get the move position of `_position`, which is the left child of:\n         1. `_position` if `_isAttack` is true.\n         2. `_position | 1` if `_isAttack` is false.\n @param _position The position to get the relative attack/defense position of.\n @param _isAttack Whether or not the move is an attack move.\n @return move_ The move position relative to `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"move","nameLocation":"8982:4:69","parameters":{"id":53538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53535,"mutability":"mutable","name":"_position","nameLocation":"8996:9:69","nodeType":"VariableDeclaration","scope":53545,"src":"8987:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53534,"nodeType":"UserDefinedTypeName","pathNode":{"id":53533,"name":"Position","nameLocations":["8987:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"8987:8:69"},"referencedDeclaration":53344,"src":"8987:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":53537,"mutability":"mutable","name":"_isAttack","nameLocation":"9012:9:69","nodeType":"VariableDeclaration","scope":53545,"src":"9007:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":53536,"name":"bool","nodeType":"ElementaryTypeName","src":"9007:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8986:36:69"},"returnParameters":{"id":53542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53541,"mutability":"mutable","name":"move_","nameLocation":"9055:5:69","nodeType":"VariableDeclaration","scope":53545,"src":"9046:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53540,"nodeType":"UserDefinedTypeName","pathNode":{"id":53539,"name":"Position","nameLocations":["9046:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"9046:8:69"},"referencedDeclaration":53344,"src":"9046:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"9045:16:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53556,"nodeType":"FunctionDefinition","src":"9383:136:69","nodes":[],"body":{"id":53555,"nodeType":"Block","src":"9453:66:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"9472:41:69","statements":[{"nodeType":"YulAssignment","src":"9486:17:69","value":{"name":"_position","nodeType":"YulIdentifier","src":"9494:9:69"},"variableNames":[{"name":"raw_","nodeType":"YulIdentifier","src":"9486:4:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53549,"isOffset":false,"isSlot":false,"src":"9494:9:69","valueSize":1},{"declaration":53552,"isOffset":false,"isSlot":false,"src":"9486:4:69","valueSize":1}],"id":53554,"nodeType":"InlineAssembly","src":"9463:50:69"}]},"documentation":{"id":53546,"nodeType":"StructuredDocumentation","src":"9166:212:69","text":"@notice Get the value of a `Position` type in the form of the underlying uint128.\n @param _position The position to get the value of.\n @return raw_ The value of the `position` as a uint128 type."},"implemented":true,"kind":"function","modifiers":[],"name":"raw","nameLocation":"9392:3:69","parameters":{"id":53550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53549,"mutability":"mutable","name":"_position","nameLocation":"9405:9:69","nodeType":"VariableDeclaration","scope":53556,"src":"9396:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53548,"nodeType":"UserDefinedTypeName","pathNode":{"id":53547,"name":"Position","nameLocations":["9396:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"9396:8:69"},"referencedDeclaration":53344,"src":"9396:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"9395:20:69"},"returnParameters":{"id":53553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53552,"mutability":"mutable","name":"raw_","nameLocation":"9447:4:69","nodeType":"VariableDeclaration","scope":53556,"src":"9439:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53551,"name":"uint128","nodeType":"ElementaryTypeName","src":"9439:7:69","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9438:14:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[],"canonicalName":"LibPosition","contractDependencies":[],"contractKind":"library","documentation":{"id":53345,"nodeType":"StructuredDocumentation","src":"487:112:69","text":"@title LibPosition\n @notice This library contains helper functions for working with the `Position` type."},"fullyImplemented":true,"linearizedBaseContracts":[53557],"name":"LibPosition","nameLocation":"607:11:69","scope":53558,"usedErrors":[],"usedEvents":[]}],"license":"MIT"},"id":69}