{
  "_format": "hh-sol-artifact-1",
  "contractName": "Lens",
  "sourceName": "contracts/periphery/lens/Lens.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_manager",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSwapPath",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidTierChoices",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotEnoughIntermediateOutput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getDerivedPosition",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            }
          ],
          "internalType": "struct IPositionLens.PositionInfo",
          "name": "info",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside0Last",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside1Last",
              "type": "uint80"
            },
            {
              "internalType": "uint8",
              "name": "limitOrderType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "settlementSnapshotId",
              "type": "uint32"
            }
          ],
          "internalType": "struct Positions.Position",
          "name": "position",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "settled",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            }
          ],
          "internalType": "struct IPositionLens.PositionInfo",
          "name": "info",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside0Last",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside1Last",
              "type": "uint80"
            },
            {
              "internalType": "uint8",
              "name": "limitOrderType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "settlementSnapshotId",
              "type": "uint32"
            }
          ],
          "internalType": "struct Positions.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "name": "getFeeAmounts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "feeAmount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        }
      ],
      "name": "getPoolId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getPosition",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            }
          ],
          "internalType": "struct IPositionLens.PositionInfo",
          "name": "info",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside0Last",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside1Last",
              "type": "uint80"
            },
            {
              "internalType": "uint8",
              "name": "limitOrderType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "settlementSnapshotId",
              "type": "uint32"
            }
          ],
          "internalType": "struct Positions.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "int24",
          "name": "tickStart",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickEnd",
          "type": "int24"
        },
        {
          "internalType": "uint24",
          "name": "maxCount",
          "type": "uint24"
        }
      ],
      "name": "getTicks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "ticks",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            }
          ],
          "internalType": "struct IPositionLens.PositionInfo",
          "name": "info",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside0Last",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside1Last",
              "type": "uint80"
            },
            {
              "internalType": "uint8",
              "name": "limitOrderType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "settlementSnapshotId",
              "type": "uint32"
            }
          ],
          "internalType": "struct Positions.Position",
          "name": "position",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "settled",
          "type": "bool"
        }
      ],
      "name": "getUnderlyingAmounts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "hub",
      "outputs": [
        {
          "internalType": "contract IMuffinHubCombined",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            }
          ],
          "internalType": "struct IPositionLens.PositionInfo",
          "name": "info",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside0Last",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside1Last",
              "type": "uint80"
            },
            {
              "internalType": "uint8",
              "name": "limitOrderType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "settlementSnapshotId",
              "type": "uint32"
            }
          ],
          "internalType": "struct Positions.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "name": "isSettled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "settled",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "manager",
      "outputs": [
        {
          "internalType": "contract IPositionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "muffinSwapCallback",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "path",
          "type": "bytes"
        },
        {
          "internalType": "int256",
          "name": "amountDesired",
          "type": "int256"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasUsed",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tierChoices",
          "type": "uint256"
        },
        {
          "internalType": "int256",
          "name": "amountDesired",
          "type": "int256"
        }
      ],
      "name": "quoteSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasUsed",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "path",
          "type": "bytes"
        },
        {
          "internalType": "int256",
          "name": "amountDesired",
          "type": "int256"
        }
      ],
      "name": "simulate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "protocolFeeAmt",
              "type": "uint256"
            },
            {
              "internalType": "uint256[]",
              "name": "tierAmountsIn",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tierAmountsOut",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tierData",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct IQuoter.Hop[]",
          "name": "hops",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tierChoices",
          "type": "uint256"
        },
        {
          "internalType": "int256",
          "name": "amountDesired",
          "type": "int256"
        }
      ],
      "name": "simulateSingle",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "protocolFeeAmt",
              "type": "uint256"
            },
            {
              "internalType": "uint256[]",
              "name": "tierAmountsIn",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tierAmountsOut",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tierData",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct IQuoter.Hop",
          "name": "hop",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b5060405162005684380380620056848339810160408190526200003491620000c9565b80806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663365a86fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b49190620000c9565b6001600160a01b031660a05250620000fb9050565b600060208284031215620000dc57600080fd5b81516001600160a01b0381168114620000f457600080fd5b9392505050565b60805160a0516155086200017c60003960008181610148015281816102f10152818161050e01528181610c1f01528181610e91015281816111990152818161130501528181611ab801528181611c3601528181611dd701528181611f270152612eb90152600081816101de01528181610f3701526110a301526155086000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806392d31cd41161008c578063eb02c30111610066578063eb02c3011461026c578063f0b69f5e1461028d578063f1371dd5146102b0578063f87e29e7146102c557600080fd5b806392d31cd414610226578063a7aa8dd914610239578063d8e9acb71461025957600080fd5b80633d04e039116100c85780633d04e0391461018f57806343ba86f9146101b7578063481c6a75146101d9578063897f1c4d1461020057600080fd5b80630d751724146100ef5780632ef61c2114610122578063365a86fc14610143575b600080fd5b6101026100fd366004614292565b6102e6565b604080519384526020840192909252908201526060015b60405180910390f35b610135610130366004614300565b610490565b604051908152602001610119565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610119565b6101a261019d36600461459b565b6104e0565b60408051928352602083019190915201610119565b6101ca6101c5366004614292565b6106a8565b60405161011993929190614690565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61021361020e36600461471f565b610b53565b6040516101199796959493929190614738565b610102610234366004614827565b610bff565b61024c610247366004614827565b610d57565b604051610119919061486d565b6101a2610267366004614880565b610e89565b61027f61027a36600461471f565b611017565b6040516101199291906148bf565b6102a061029b366004614985565b611173565b6040519015158152602001610119565b6102c36102be3660046149bb565b6112ad565b005b6102d86102d3366004614a48565b6112c1565b604051610119929190614b2a565b6000806000805a90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c6883ec56040518060c001604052808a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208083018b90523060408085019190915260608401839052608084018390528051928352908201815260a090920152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526103d59190600401614b43565b60408051808303816000875af192505050801561042d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261042a91810190614bd8565b60015b610483573d80801561045b576040519150601f19603f3d011682016040523d82523d6000602084013e610460565b606091505b505a61046c9083614c2b565b92506104778161153c565b90955093506104869050565b50505b5093509350939050565b6040805173ffffffffffffffffffffffffffffffffffffffff80851660208301528316918101919091526000906060015b6040516020818303038152906040528051906020012090505b92915050565b60008060006104f2866080015161156e565b905060006105038760a0015161156e565b90506000856105e9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dc65746561055a8a602001518b60400151610490565b60608b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440161010060405180830381865afa1580156105bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e09190614d4a565b60200151610600565b606087015160ff166001146105fe5782610600565b815b87519091505b6bffffffffffffffffffffffff81161561069c5760006b7fffffffffffffffffffffff6bffffffffffffffffffffffff8316116106455781600061065c565b6b7fffffffffffffffffffffff61065c8184614d67565b9250905060008061067785888861067287614d94565b6118c6565b9092509050610686828a614dd3565b98506106928189614dd3565b9750505050610606565b50505050935093915050565b60008060606106ec86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119b292505050565b15610723576040517f3378279300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008085139050600061076b88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119fc92505050565b67ffffffffffffffff81111561078357610783614339565b6040519080825280602002602001820160405280156107ac578160200160208202803683370190505b509050805167ffffffffffffffff8111156107c9576107c9614339565b60405190808252806020026020018201604052801561083357816020015b6108206040518060c001604052806000815260200160008152602001600081526020016060815260200160608152602001606081525090565b8152602001906001900390816107e75790505b5092508560005b8251811015610abd57600080600061088d84888f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929493925050611a049050565b9250925092508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161061090e576040805173ffffffffffffffffffffffffffffffffffffffff808516602083015285169181019190915260600160405160208183030381529060405280519060200120610952565b6040805173ffffffffffffffffffffffffffffffffffffffff8086166020830152841691810191909152606001604051602081830303815290604052805190602001205b86858151811061096457610964614deb565b6020026020010181815250506109e486858151811061098557610985614deb565b60200260200101518373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161015156000881315151489806109cf575086155b6109dc57606488036109de565b875b84611a43565b8885815181106109f6576109f6614deb565b6020026020010181905250600080898681518110610a1657610a16614deb565b6020026020010151600001518a8781518110610a3457610a34614deb565b602002602001015160200151915091508815610a5b5785610a5357819b505b809650610aac565b85610a6857809a50610aa5565b86600003811015610aa5576040517f4b5f1a1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000396505b50506001909301925061083a915050565b508215610acc57809450610ad3565b8060000395505b50610add8161210d565b15610b48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f504f4f4c5f524550454154454400000000000000000000000000000000000000604482015260640160405180910390fd5b505093509350939050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526000806000806000610bc188611017565b9097509550610bd08787611173565b9450610bdd8787876104e0565b9094509250610bed888888610e89565b97999698509496939592949392915050565b6000806000805a905073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632ec31fbc8989898930600080806040519080825280601f01601f191660200182016040528015610c77576020820181803683370190505b506040518963ffffffff1660e01b8152600401610c9b989796959493929190614e1a565b60408051808303816000875af1925050508015610cf3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610cf091810190614bd8565b60015b610d49573d808015610d21576040519150601f19603f3d011682016040523d82523d6000602084013e610d26565b606091505b505a610d329083614c2b565b9250610d3d8161153c565b9095509350610d4c9050565b50505b509450945094915050565b610d906040518060c001604052806000815260200160008152602001600081526020016060815260200160608152602001606081525090565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610610e0d576040805173ffffffffffffffffffffffffffffffffffffffff808816602083015288169181019190915260600160405160208183030381529060405280519060200120610e51565b6040805173ffffffffffffffffffffffffffffffffffffffff8089166020830152871691810191909152606001604051602081830303815290604052805190602001205b9050610e7f816000851373ffffffffffffffffffffffffffffffffffffffff808916908a1610148587611a43565b9695505050505050565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166343751ee0610edd88602001518960400151610490565b606089015160808a015160a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600481019490945273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024850152604484018d905260ff9092166064840152600290810b60848401520b60a482015260c4016040805180830381865afa158015610f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc09190614e83565b60208701805188516040909901805169ffffffffffffffffffff8087169094528385169091526bffffffffffffffffffffffff909916930381168302603890811c9b9890920316909102901c965093945050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040517feb02c301000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063eb02c3019060240161016060405180830381865afa158015611100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111249190614ebd565b600291820b60a08a015291900b608088015260ff909116606087015273ffffffffffffffffffffffffffffffffffffffff91821660408701529181166020860152919091168352919391925050565b606081015160009060ff16156104da576000600160ff16836060015160ff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663555ed4ad6111e587602001518860400151610490565b8760600151856111f95788608001516111ff565b8860a001515b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935260ff909116602483015260020b60448201528415156064820152608401606060405180830381865afa15801561126d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112919190614fe6565b608087015163ffffffff91821691161094505050505092915050565b604051846000820152836020820152604081fd5b6000606081806112d1878761502f565b60020b12159050856112e161417a565b60006112ed8b8b61217b565b90505b8662ffffff168260600151101561151b5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631ca0027a6113498487612219565b6040518263ffffffff1660e01b815260040161136791815260200190565b602060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190615093565b60608481015191925082919082901c9060c083901c9060d884901c9060f085901c9060f886901c901580156113e957506bffffffffffffffffffffffff8616155b801561140157506bffffffffffffffffffffffff8516155b15611412575050505050505061151b565b60405160e88b901b60208201527fffffffffffffffffffffffff000000000000000000000000000000000000000060a088811b8216602384015287901b16602f8201527fff0000000000000000000000000000000000000000000000000000000000000060f884811b8216603b84015283901b16603c8201526114b190603d016040516020818303038152906040526114aa906150ac565b8a90612238565b60008b6114be57846114c0565b835b90508060020b8b60020b14156114dd57505050505050505061151b565b8b6114f0578f60020b8160020b126114fa565b8f60020b8160020b135b1561150c57505050505050505061151b565b99506112f09650505050505050565b61152482612326565b5080516060909101519a909950975050505050505050565b600080825160401415611566578280602001905181019061155d9190614bd8565b91509150915091565b825183602001fd5b6000600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755138015906115ab5750620bd8ab600283900b13155b6115b457600080fd5b6000808360020b126115c657826115cb565b826000035b62ffffff811691507001000000000000000000000000000000009060011615611604576ffffcb933bd6fad37aa2d162d1a5940010260801c5b6002821615611623576ffff97272373d413259a46990580e213a0260801c5b6004821615611642576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611661576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611680576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561169f576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156116be576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156116dd576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156116fd576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561171d576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561173d576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561175d576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561177d576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561179d576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156117bd576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156117dd576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156117fe576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561181e576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561183d576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561185a576b048a170391f7dc42444e8fa20260801c5b60008460020b1261189857807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611894576118946150f1565b0490505b60006701000000000000008206116118b15760006118b4565b60015b60ff16603882901c0192505050919050565b600080846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff161061192b57836fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff1611611925578561192d565b8361192d565b845b955060006008600085600b0b1215611948578460000361194a565b845b6bffffffffffffffffffffffff16901b90506000600b85900b12611987576119738588836123e8565b92506119808688836124ee565b91506119a8565b6119928786836123e8565b60000392506119a28787836124ee565b60000391505b5094509492505050565b805160009061161410806119c857506014825111155b806104da5750505160167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec90910106151590565b516016900490565b6000808060168502611a198782016014015190565b878201602a810151601690910151919550935061ffff169150846104865750909591945092509050565b611a7c6040518060c001604052806000815260200160008152602001600081526020016060815260200160608152602001606081525090565b6060611a866141a8565b6040517f7951532d000000000000000000000000000000000000000000000000000000008152600481018890526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690637951532d90602401602060405180830381865afa158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b389190615093565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0195861695909150861580611b9157507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87145b15611bc8576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85611bff576040517fd2a0a82900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80861415611cdf576040517f35d603f5000000000000000000000000000000000000000000000000000000008152600481018a90527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906335d603f590602401600060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611cd89190810190615120565b9350611e80565b8167ffffffffffffffff811115611cf857611cf8614339565b604051908082528060200260200182016040528015611d8557816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611d165790505b50935060005b8451811015611e7e576001811b871615611e76576040517fdc657465000000000000000000000000000000000000000000000000000000008152600481018b905260ff821660248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063dc6574659060440161010060405180830381865afa158015611e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e589190614d4a565b858281518110611e6a57611e6a614deb565b60200260200101819052505b600101611d8b565b505b5050604080516101008101825260008088138915158114835260208301529181018290526060810182905283516080820190611ec19060019081901b614c2b565b87168152604080518082018252627fffff8152600060208281019190915283015201611eeb6125a9565b815260006020909101526040517faa5976c1000000000000000000000000000000000000000000000000000000008152600481018a90529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063aa5976c1906024016040805180830381865afa158015611f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa691906151d4565b60ff16604083015250856000805b60008913611fcd57611fc8868b8b8b6125b4565b611fd9565b611fd9868b8b8b612864565b60c085015260005b86518110156120515760008061202a8e8e898b876006811061200557612005614deb565b60200201518d888151811061201c5761201c614deb565b602002602001015188612bc8565b90925090506120398286615203565b94506120458185615203565b93505050600101611fe1565b5061205c8284615277565b98508360200151612090577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c891215612096565b60648913155b806120a357506080840151155b156120ad576120b2565b611fb4565b606084015160408801526120c68587613018565b60a08a01526080890152606088015260208401516120ed57806120e8836152eb565b6120f7565b816120f7826152eb565b6020890152875250949998505050505050505050565b60006121188261325e565b60015b82518110156121725782818151811061213657612136614deb565b602002602001015183600183038151811061215357612153614deb565b6020026020010151141561216a5750600192915050565b60010161211b565b50600092915050565b60008083600460405160200161219b929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120905060006121e0826003614dd3565b6040805160ff87166020820152908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b60408051600283900b60208201529081018390526000906060016104c1565b80826020015183604001516064811061225357612253614deb565b60200201526040820180519061226882615324565b9052506060820180519061227b82615324565b9052506040820151606414156123225781516020808401516040516122a0920161535d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526122dc9291602001615392565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181529083526000908301526020820161231f61420c565b90525b5050565b6040810151156123e5576000816040015167ffffffffffffffff81111561234f5761234f614339565b604051908082528060200260200182016040528015612378578160200160208202803683370190505b50905060005b81518110156123d1578260200151816064811061239d5761239d614deb565b60200201518282815181106123b4576123b4614deb565b6020908102919091010152806123c981615324565b91505061237e565b5081516040516122a09083906020016153c1565b50565b60006fffffffffffffffffffffffffffffffff80851690841611801561240c579293925b6fffffffffffffffffffffffffffffffff83811685870382160290808716908616026124b6770100000000000000000000000000000000000000000000008310612484578361246f5761246a836901000000000000000000846132aa565b6133b4565b61246a836901000000000000000000846132e7565b8361249d5761246a604884901b83808204910615150190565b81604884901b816124b0576124b06150f1565b046133b4565b935082156124e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509392505050565b60006fffffffffffffffffffffffffffffffff808516908416108015612512579293925b60008585036fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff16029050612572826125685768ffffffffffffffffff8216151569010000000000000000008304016133b4565b604882901c6133b4565b925081156125a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830292505b50509392505050565b6125b161422b565b90565b6125bc61422b565b600083126125cc576125cc6153f7565b6125d461422b565b6125dc61422b565b60008060005b8951811015612721576001811b8716612632577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86826006811061262857612628614deb565b6020020152612719565b60008a828151811061264657612646614deb565b60200260200101519050600081600001516fffffffffffffffffffffffffffffffff169050816040015162ffffff1681620186a00281612688576126886150f1565b0487846006811061269b5761269b614deb565b6020020181815250850194508a6126cd5760208201516fffffffffffffffffffffffffffffffff16810260481c6126f8565b81602001516fffffffffffffffffffffffffffffffff16604882901b816126f6576126f66150f1565b045b86846006811061270a5761270a614deb565b60200201818152508401935050505b6001016125e2565b5061272c8782615203565b905060005b8951811015612857577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86826006811061276d5761276d614deb565b60200201511461284f5760006127ba85836006811061278e5761278e614deb565b60200201516127b4858986600681106127a9576127a9614deb565b6020020151886133ea565b90613423565b8783600681106127cc576127cc614deb565b60200201819052131561284f577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86826006811061280c5761280c614deb565b602002015284816006811061282357612823614deb565b60200201518303925083816006811061283e5761283e614deb565b602002015190910390506000612731565b600101612731565b5050505050949350505050565b61286c61422b565b6000831361287c5761287c6153f7565b61288461422b565b61288c61422b565b60008060005b8951811015612a09576001811b87166128e2577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8682600681106128d8576128d8614deb565b6020020152612a01565b60008a82815181106128f6576128f6614deb565b6020908102919091010151805160408201519192506fffffffffffffffffffffffffffffffff1690612938620186a0830262ffffff8316808204910615150190565b88856006811061294a5761294a614deb565b6020020181815250860195508b6129a357602083015161299e906fffffffffffffffffffffffffffffffff1683026402540be40062ffffff8416800269010000000000000000000204808204910615150190565b6129df565b60208301516fffffffffffffffffffffffffffffffff1662ffffff8216908102026d02540be40000000000000000000083028181049190061515015b8785600681106129f1576129f1614deb565b6020020181815250850194505050505b600101612892565b50612a148782614dd3565b9050818102600083838381612a2b57612a2b6150f1565b04148015612a5957507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211155b905060005b8b51811015612bb9577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff888260068110612a9a57612a9a614deb565b602002015114612bb1576000612b1c878360068110612abb57612abb614deb565b602002015184612aee57612ae961246a888c8760068110612ade57612ade614deb565b60200201518b6132e7565b6127b4565b878a8560068110612b0157612b01614deb565b6020020151880281612b1557612b156150f1565b0490613423565b898360068110612b2e57612b2e614deb565b602002018190521215612bb1577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff888260068110612b6e57612b6e614deb565b6020020152868160068110612b8557612b85614deb565b602002015185039450858160068110612ba057612ba0614deb565b602002015190930392506000612a5e565b600101612a5e565b50505050505050949350505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8660c001518460068110612c0257612c02614deb565b60200201511415612c185750600090508061300d565b84516fffffffffffffffffffffffffffffffff16612c6a57612c558660a001518760000151612c4b578560a0015161342f565b856080015161342f565b6fffffffffffffffffffffffffffffffff1685525b6000612ca98888602001518960c001518760068110612c8b57612c8b614deb565b602002015188602001518a600001518a600001518b6040015161347d565b6fffffffffffffffffffffffffffffffff9091166020890152919450925090507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415612cfe57600080925092505061300d565b866020015115612d2557602086018051840190526040860180516000849003019052612d3e565b6020860180518301905260408601805160008590030190525b60408781015160608901805160ff92831685029290920491820190528651928190039290916000916fffffffffffffffffffffffffffffffff169084901b81612d8957612d896150f1565b049050886000015115612db15760c087018051820169ffffffffffffffffffff169052612dc8565b60e087018051820169ffffffffffffffffffff1690525b50505084600001516fffffffffffffffffffffffffffffffff1684602001516fffffffffffffffffffffffffffffffff16141561300d578551600090612e12578460a00151612e18565b84608001515b9050600281900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427551480612e525750600281900b620bd8ab145b15612e6b57506080860180516001851b1916905261300d565b6000808752600160608801526040517fe3642509000000000000000000000000000000000000000000000000000000008152600481018b905260ff86166024820152600283900b60448201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e36425099060640161010060405180830381865afa158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a9190615431565b805160208201518a519293506bffffffffffffffffffffffff9182169291169015612fb657875170ffffffffffffffffffffffffffffffff00600884811b82169084901b90911691909101036fffffffffffffffffffffffffffffffff1688526040830151600290810b60808a015284900b60a0890152613008565b875170ffffffffffffffffffffffffffffffff00600883811b82169085901b90911691909101036fffffffffffffffffffffffffffffffff168852600284810b60808a01526060840151900b60a08901525b505050505b965096945050505050565b6060806060835167ffffffffffffffff81111561303757613037614339565b604051908082528060200260200182016040528015613060578160200160208202803683370190505b509050835167ffffffffffffffff81111561307d5761307d614339565b6040519080825280602002602001820160405280156130a6578160200160208202803683370190505b509250835167ffffffffffffffff8111156130c3576130c3614339565b6040519080825280602002602001820160405280156130ec578160200160208202803683370190505b50915060005b84518160ff161015613256576000868260ff166006811061311557613115614deb565b60200201519050600081602001511180613130575080606001515b1561324d576000868360ff168151811061314c5761314c614deb565b6020026020010151905061316381602001516136b5565b600290810b6060830181905260a083015190910b14156131ab576060810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160020b90525b80600001516fffffffffffffffffffffffffffffffff16608082602001516fffffffffffffffffffffffffffffffff16901b17848460ff16815181106131f3576131f3614deb565b6020026020010181815250508160200151868460ff168151811061321957613219614deb565b6020026020010181815250508160400151858460ff168151811061323f5761323f614deb565b602002602001018181525050505b506001016130f2565b509250925092565b600081511161326c57600080fd5b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8151111561329a57600080fd5b6123e58160006001845103613c38565b60006132b78484846132e7565b9050600082806132c9576132c96150f1565b84860911156132e057806132dc81615324565b9150505b9392505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050806000141561333f576000841161333457600080fd5b5082900490506132e0565b80841161334b57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156133e6576133e66153f7565b5090565b60008084126134065761340161246a8585856132aa565b61341b565b61341761246a8560000385856132e7565b6000035b949350505050565b60006132e08284615277565b6000826000015160020b8260020b141561344e575060208201516104da565b6134578261156e565b6fffffffffffffffffffffffffffffffff8116602085015260029290920b909252919050565b846000808080808c613499576134948a8a8a6124ee565b6134a4565b6134a48a8a8a6123e8565b905062ffffff871680028c156135aa577b6df37f675ef6eadf5ab9a2072d44268d97df837e6748956e5c6c211787126134e657806402540be4008804026134f1565b6402540be400878202045b925081831215613522578d6135105761350b8b8a85613dc2565b61351b565b61351b8b8a85613f33565b945061357e565b89945081925061357b7b6df37f675ef6eadf5ab9a2072d44268d97df837e6748956e5c6c21178412613564578184061515828504015b6402540be400026133b4565b61246a846402540be4000283808204910615150190565b96505b8d6135935761358e8b868b6123e8565b61359e565b61359e8b868b6124ee565b9550828703935061363e565b818713156135d9578d6135c7576135c28b8a89613dc2565b6135d2565b6135d28b8a89613f33565b94506135e0565b8994508196505b8d6135f5576135f08b868b6123e8565b613600565b6136008b868b6124ee565b92506136367b6df37f675ef6eadf5ab9a2072d44268d97df837e6748956e5c6c2117841261356457818406151582850401613558565b955082860393505b821580156136705750896fffffffffffffffffffffffffffffffff16856fffffffffffffffffffffffffffffffff1614155b156136a4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9650600095508a9450600093505b505050975097509750979350505050565b60006fffffffffffffffffffffffffffffffff821662010003118015906136fe57506ffffdd8371ce3ef742f98c78a4732240d6fffffffffffffffffffffffffffffffff831611155b61370757600080fd5b6fffffffffffffffffffffffffffffffff821680600068010000000000000000821061373557604091821c91015b640100000000821061374957602091821c91015b62010000821061375b57601091821c91015b610100821061376c57600891821c91015b6010821061377c57600491821c91015b6004821061378c57600291821c91015b6002821061379c57600191821c91015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8810160401b607f82810385901b8002901c70010000000000000000000000000000000081106137f857678000000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061382757674000000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061385657672000000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061388557671000000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106138b457670800000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106138e357670400000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061391257670200000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061394157670100000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061396f576680000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061399d576640000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106139cb576620000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106139f9576610000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613a27576608000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613a55576604000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613a83576602000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613ab1576601000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613ade5765800000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613b0b5765400000000000919091179060011c5b693627a301d71055774c8591909102906f0d89e7aecf44b7384157000000000001820160801d60007ffffffffffffffffffffffffffff5adf5000000000000000000000000000000008412613bb6577ffffffffffffffffffffffffffff8bb35000000000000000000000000000000008412613b8b57608084901d613bdd565b7fffffffffffffffffffffffffffffffffff9a58f534e18c8f54aaffffffffffff840160801d613bdd565b7fffffffffffffffffffffffffffffffffb5d6bb93c93a19febd193fffffffffff840160801d5b90508060020b8260020b1480613c1f5750613bf78261156e565b6fffffffffffffffffffffffffffffffff16896fffffffffffffffffffffffffffffffff1610155b613c295780613c2b565b815b9998505050505050505050565b818180821415613c49575050505050565b600085600286860305860181518110613c6457613c64614deb565b602002602001015190505b818313613d94575b80868481518110613c8a57613c8a614deb565b60200260200101511015613ca357600190920191613c77565b858281518110613cb557613cb5614deb565b6020026020010151811015613cee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190613ca3565b818313613d8f57858281518110613d0757613d07614deb565b6020026020010151868481518110613d2157613d21614deb565b6020026020010151878581518110613d3b57613d3b614deb565b60200260200101888581518110613d5457613d54614deb565b6020908102919091010191909152526001909201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b613c6f565b81851215613da757613da7868684613c38565b83831215613dba57613dba868486613c38565b505050505050565b600080821215613e96576fffffffffffffffffffffffffffffffff8316613de857600080fd5b600082810390770100000000000000000000000000000000000000000000008210613e3957613e34826901000000000000000000876fffffffffffffffffffffffffffffffff166132aa565b613e67565b613e6769010000000000000000008302866fffffffffffffffffffffffffffffffff16808204910615150190565b9050613e8d613e886fffffffffffffffffffffffffffffffff881683614140565b61414c565b925050506132e0565b6000770100000000000000000000000000000000000000000000008310613ee357613ede836901000000000000000000866fffffffffffffffffffffffffffffffff166132e7565b613f12565b836fffffffffffffffffffffffffffffffff166901000000000000000000840281613f1057613f106150f1565b045b90506132dc613e886fffffffffffffffffffffffffffffffff87168361416e565b600081613f415750826132e0565b6000808312613f505782613f55565b826000035b90506fffffffffffffffffffffffffffffffff8516810278ffffffffffffffffffffffffffffffff000000000000000000604886901b1660008086131561407e57876fffffffffffffffffffffffffffffffff16848481613fb857613fb86150f1565b04148015613fca575050818101818110155b1561403c576fffffffffffffffffffffffffffffffff878116908916027701000000000000000000000000000000000000000000000081106140205761401b816901000000000000000000846132aa565b614034565b614034604882901b83808204910615150190565b955050614135565b6140778261406c868b6fffffffffffffffffffffffffffffffff168681614065576140656150f1565b049061416e565b808204910615150190565b9450614135565b876fffffffffffffffffffffffffffffffff168484816140a0576140a06150f1565b04146140ab57600080fd5b50818103818111156140bc57600080fd5b806140c657600080fd5b6fffffffffffffffffffffffffffffffff8781169089160277010000000000000000000000000000000000000000000000811061411a57614115613e88826901000000000000000000856132aa565b614131565b614131613e88604883901b84808204910615150190565b9550505b505050509392505050565b60006132e08284614c2b565b60006fffffffffffffffffffffffffffffffff8211156133e6576133e66153f7565b60006132e08284614dd3565b60405180608001604052806060815260200161419461420c565b815260200160008152602001600081525090565b6040518060c001604052806006905b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816141b75790505090565b60405180610c8001604052806064906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f84011261425b57600080fd5b50813567ffffffffffffffff81111561427357600080fd5b60208301915083602082850101111561428b57600080fd5b9250929050565b6000806000604084860312156142a757600080fd5b833567ffffffffffffffff8111156142be57600080fd5b6142ca86828701614249565b909790965060209590950135949350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146123e557600080fd5b6000806040838503121561431357600080fd5b823561431e816142de565b9150602083013561432e816142de565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561438b5761438b614339565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156143d8576143d8614339565b604052919050565b60ff811681146123e557600080fd5b8060020b81146123e557600080fd5b600060c0828403121561441057600080fd5b60405160c0810181811067ffffffffffffffff8211171561443357614433614339565b6040529050808235614444816142de565b81526020830135614454816142de565b60208201526040830135614467816142de565b6040820152606083013561447a816143e0565b6060820152608083013561448d816143ef565b608082015260a08301356144a0816143ef565b60a0919091015292915050565b6bffffffffffffffffffffffff811681146123e557600080fd5b69ffffffffffffffffffff811681146123e557600080fd5b63ffffffff811681146123e557600080fd5b600060a0828403121561450357600080fd5b60405160a0810181811067ffffffffffffffff8211171561452657614526614339565b6040529050808235614537816144ad565b81526020830135614547816144c7565b6020820152604083013561455a816144c7565b6040820152606083013561456d816143e0565b60608201526080830135614580816144df565b6080919091015292915050565b80151581146123e557600080fd5b600080600061018084860312156145b157600080fd5b6145bb85856143fe565b92506145ca8560c086016144f1565b91506101608401356145db8161458d565b809150509250925092565b600081518084526020808501945080840160005b83811015614616578151875295820195908201906001016145fa565b509495945050505050565b8051825260208101516020830152604081015160408301526000606082015160c0606085015261465460c08501826145e6565b90506080830151848203608086015261466d82826145e6565b91505060a083015184820360a086015261468782826145e6565b95945050505050565b600060608201858352602085818501526060604085015281855180845260808601915060808160051b870101935082870160005b82811015614710577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808887030184526146fe868351614621565b955092840192908401906001016146c4565b50939998505050505050505050565b60006020828403121561473157600080fd5b5035919050565b61020081016147a1828a73ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401525060ff6060820151166060830152608081015160020b608083015260a081015160020b60a08301525050565b87516bffffffffffffffffffffffff1660c0830152602088015169ffffffffffffffffffff90811660e0840152604089015116610100830152606088015160ff16610120830152608088015163ffffffff166101408301529515156101608201526101808101949094526101a08401929092526101c08301526101e09091015292915050565b6000806000806080858703121561483d57600080fd5b8435614848816142de565b93506020850135614858816142de565b93969395505050506040820135916060013590565b6020815260006132e06020830184614621565b6000806000610180848603121561489657600080fd5b833592506148a785602086016143fe565b91506148b68560e086016144f1565b90509250925092565b6101608101614928828573ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401525060ff6060820151166060830152608081015160020b608083015260a081015160020b60a08301525050565b82516bffffffffffffffffffffffff1660c0830152602083015169ffffffffffffffffffff90811660e0840152604084015116610100830152606083015160ff16610120830152608083015163ffffffff166101408301526132e0565b600080610160838503121561499957600080fd5b6149a384846143fe565b91506149b28460c085016144f1565b90509250929050565b60008060008060008060a087890312156149d457600080fd5b86356149df816142de565b955060208701356149ef816142de565b94506040870135935060608701359250608087013567ffffffffffffffff811115614a1957600080fd5b614a2589828a01614249565b979a9699509497509295939492505050565b62ffffff811681146123e557600080fd5b600080600080600060a08688031215614a6057600080fd5b853594506020860135614a72816143e0565b93506040860135614a82816143ef565b92506060860135614a92816143ef565b91506080860135614aa281614a37565b809150509295509295909350565b60005b83811015614acb578181015183820152602001614ab3565b83811115614ada576000848401525b50505050565b60008151808452614af8816020860160208601614ab0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b82815260406020820152600061341b6040830184614ae0565b602081526000825160c06020840152614b5f60e0840182614ae0565b90506020840151604084015273ffffffffffffffffffffffffffffffffffffffff604085015116606084015260608401516080840152608084015160a084015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c08501526146878282614ae0565b60008060408385031215614beb57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614c3d57614c3d614bfc565b500390565b80516fffffffffffffffffffffffffffffffff81168114614c6257600080fd5b919050565b8051614c62816143ef565b8051614c62816144c7565b6000610100808385031215614c9157600080fd5b6040519081019067ffffffffffffffff82118183101715614cb457614cb4614339565b81604052809250614cc484614c42565b8152614cd260208501614c42565b602082015260408401519150614ce782614a37565b816040820152614cf960608501614c67565b6060820152614d0a60808501614c67565b6080820152614d1b60a08501614c67565b60a0820152614d2c60c08501614c72565b60c0820152614d3d60e08501614c72565b60e0820152505092915050565b60006101008284031215614d5d57600080fd5b6132e08383614c7d565b60006bffffffffffffffffffffffff83811690831681811015614d8c57614d8c614bfc565b039392505050565b600081600b0b7fffffffffffffffffffffffffffffffffffffffff800000000000000000000000811415614dca57614dca614bfc565b60000392915050565b60008219821115614de657614de6614bfc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061010073ffffffffffffffffffffffffffffffffffffffff808c168452808b1660208501528960408501528860608501528088166080850152508560a08401528460c08401528060e0840152614e7481840185614ae0565b9b9a5050505050505050505050565b60008060408385031215614e9657600080fd5b8251614ea1816144c7565b602084015190925061432e816144c7565b8051614c62816144ad565b6000806000806000806000878903610160811215614eda57600080fd5b8851614ee5816142de565b60208a0151909850614ef6816142de565b60408a0151909750614f07816142de565b60608a0151909650614f18816143e0565b60808a0151909550614f29816143ef565b60a08a0151909450614f3a816143ef565b925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215614f6c57600080fd5b50614f75614368565b60c0890151614f83816144ad565b815260e0890151614f93816144c7565b6020820152610100890151614fa7816144c7565b6040820152610120890151614fbb816143e0565b6060820152610140890151614fcf816144df565b806080830152508091505092959891949750929550565b600080600060608486031215614ffb57600080fd5b8351615006816144ad565b602085015190935061ffff8116811461501e57600080fd5b60408501519092506145db816144df565b60008160020b8360020b60008112817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000183128115161561507257615072614bfc565b81627fffff01831381161561508957615089614bfc565b5090039392505050565b6000602082840312156150a557600080fd5b5051919050565b805160208083015191908110156150eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000602080838503121561513357600080fd5b825167ffffffffffffffff8082111561514b57600080fd5b818501915085601f83011261515f57600080fd5b81518181111561517157615171614339565b61517f848260051b01614391565b818152848101925060089190911b83018401908782111561519f57600080fd5b928401925b818410156151c9576151b68885614c7d565b83528483019250610100840193506151a4565b979650505050505050565b600080604083850312156151e757600080fd5b82516151f2816143e0565b602084015190925061432e816143e0565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561523d5761523d614bfc565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561527157615271614bfc565b50500190565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156152b1576152b1614bfc565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156152e5576152e5614bfc565b50500390565b60007f800000000000000000000000000000000000000000000000000000000000000082141561531d5761531d614bfc565b5060000390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561535657615356614bfc565b5060010190565b60008183825b6064811015615382578151835260209283019290910190600101615363565b505050610c808201905092915050565b600083516153a4818460208801614ab0565b8351908301906153b8818360208801614ab0565b01949350505050565b815160009082906020808601845b838110156153eb578151855293820193908201906001016153cf565b50929695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8051614c628161458d565b600061010080838503121561544557600080fd5b6040519081019067ffffffffffffffff8211818310171561546857615468614339565b8160405283519150615479826144ad565b81815261548860208501614eb2565b602082015261549960408501614c67565b60408201526154aa60608501614c67565b60608201526154bb60808501615426565b60808201526154cc60a08501615426565b60a08201526154dd60c08501614c72565b60c08201526154ee60e08501614c72565b60e082015294935050505056fea164736f6c634300080a000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806392d31cd41161008c578063eb02c30111610066578063eb02c3011461026c578063f0b69f5e1461028d578063f1371dd5146102b0578063f87e29e7146102c557600080fd5b806392d31cd414610226578063a7aa8dd914610239578063d8e9acb71461025957600080fd5b80633d04e039116100c85780633d04e0391461018f57806343ba86f9146101b7578063481c6a75146101d9578063897f1c4d1461020057600080fd5b80630d751724146100ef5780632ef61c2114610122578063365a86fc14610143575b600080fd5b6101026100fd366004614292565b6102e6565b604080519384526020840192909252908201526060015b60405180910390f35b610135610130366004614300565b610490565b604051908152602001610119565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610119565b6101a261019d36600461459b565b6104e0565b60408051928352602083019190915201610119565b6101ca6101c5366004614292565b6106a8565b60405161011993929190614690565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61021361020e36600461471f565b610b53565b6040516101199796959493929190614738565b610102610234366004614827565b610bff565b61024c610247366004614827565b610d57565b604051610119919061486d565b6101a2610267366004614880565b610e89565b61027f61027a36600461471f565b611017565b6040516101199291906148bf565b6102a061029b366004614985565b611173565b6040519015158152602001610119565b6102c36102be3660046149bb565b6112ad565b005b6102d86102d3366004614a48565b6112c1565b604051610119929190614b2a565b6000806000805a90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c6883ec56040518060c001604052808a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208083018b90523060408085019190915260608401839052608084018390528051928352908201815260a090920152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526103d59190600401614b43565b60408051808303816000875af192505050801561042d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261042a91810190614bd8565b60015b610483573d80801561045b576040519150601f19603f3d011682016040523d82523d6000602084013e610460565b606091505b505a61046c9083614c2b565b92506104778161153c565b90955093506104869050565b50505b5093509350939050565b6040805173ffffffffffffffffffffffffffffffffffffffff80851660208301528316918101919091526000906060015b6040516020818303038152906040528051906020012090505b92915050565b60008060006104f2866080015161156e565b905060006105038760a0015161156e565b90506000856105e9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dc65746561055a8a602001518b60400151610490565b60608b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440161010060405180830381865afa1580156105bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e09190614d4a565b60200151610600565b606087015160ff166001146105fe5782610600565b815b87519091505b6bffffffffffffffffffffffff81161561069c5760006b7fffffffffffffffffffffff6bffffffffffffffffffffffff8316116106455781600061065c565b6b7fffffffffffffffffffffff61065c8184614d67565b9250905060008061067785888861067287614d94565b6118c6565b9092509050610686828a614dd3565b98506106928189614dd3565b9750505050610606565b50505050935093915050565b60008060606106ec86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119b292505050565b15610723576040517f3378279300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008085139050600061076b88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119fc92505050565b67ffffffffffffffff81111561078357610783614339565b6040519080825280602002602001820160405280156107ac578160200160208202803683370190505b509050805167ffffffffffffffff8111156107c9576107c9614339565b60405190808252806020026020018201604052801561083357816020015b6108206040518060c001604052806000815260200160008152602001600081526020016060815260200160608152602001606081525090565b8152602001906001900390816107e75790505b5092508560005b8251811015610abd57600080600061088d84888f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929493925050611a049050565b9250925092508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161061090e576040805173ffffffffffffffffffffffffffffffffffffffff808516602083015285169181019190915260600160405160208183030381529060405280519060200120610952565b6040805173ffffffffffffffffffffffffffffffffffffffff8086166020830152841691810191909152606001604051602081830303815290604052805190602001205b86858151811061096457610964614deb565b6020026020010181815250506109e486858151811061098557610985614deb565b60200260200101518373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161015156000881315151489806109cf575086155b6109dc57606488036109de565b875b84611a43565b8885815181106109f6576109f6614deb565b6020026020010181905250600080898681518110610a1657610a16614deb565b6020026020010151600001518a8781518110610a3457610a34614deb565b602002602001015160200151915091508815610a5b5785610a5357819b505b809650610aac565b85610a6857809a50610aa5565b86600003811015610aa5576040517f4b5f1a1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000396505b50506001909301925061083a915050565b508215610acc57809450610ad3565b8060000395505b50610add8161210d565b15610b48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f504f4f4c5f524550454154454400000000000000000000000000000000000000604482015260640160405180910390fd5b505093509350939050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526000806000806000610bc188611017565b9097509550610bd08787611173565b9450610bdd8787876104e0565b9094509250610bed888888610e89565b97999698509496939592949392915050565b6000806000805a905073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632ec31fbc8989898930600080806040519080825280601f01601f191660200182016040528015610c77576020820181803683370190505b506040518963ffffffff1660e01b8152600401610c9b989796959493929190614e1a565b60408051808303816000875af1925050508015610cf3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610cf091810190614bd8565b60015b610d49573d808015610d21576040519150601f19603f3d011682016040523d82523d6000602084013e610d26565b606091505b505a610d329083614c2b565b9250610d3d8161153c565b9095509350610d4c9050565b50505b509450945094915050565b610d906040518060c001604052806000815260200160008152602001600081526020016060815260200160608152602001606081525090565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610610e0d576040805173ffffffffffffffffffffffffffffffffffffffff808816602083015288169181019190915260600160405160208183030381529060405280519060200120610e51565b6040805173ffffffffffffffffffffffffffffffffffffffff8089166020830152871691810191909152606001604051602081830303815290604052805190602001205b9050610e7f816000851373ffffffffffffffffffffffffffffffffffffffff808916908a1610148587611a43565b9695505050505050565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166343751ee0610edd88602001518960400151610490565b606089015160808a015160a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600481019490945273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024850152604484018d905260ff9092166064840152600290810b60848401520b60a482015260c4016040805180830381865afa158015610f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc09190614e83565b60208701805188516040909901805169ffffffffffffffffffff8087169094528385169091526bffffffffffffffffffffffff909916930381168302603890811c9b9890920316909102901c965093945050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040517feb02c301000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063eb02c3019060240161016060405180830381865afa158015611100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111249190614ebd565b600291820b60a08a015291900b608088015260ff909116606087015273ffffffffffffffffffffffffffffffffffffffff91821660408701529181166020860152919091168352919391925050565b606081015160009060ff16156104da576000600160ff16836060015160ff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663555ed4ad6111e587602001518860400151610490565b8760600151856111f95788608001516111ff565b8860a001515b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935260ff909116602483015260020b60448201528415156064820152608401606060405180830381865afa15801561126d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112919190614fe6565b608087015163ffffffff91821691161094505050505092915050565b604051846000820152836020820152604081fd5b6000606081806112d1878761502f565b60020b12159050856112e161417a565b60006112ed8b8b61217b565b90505b8662ffffff168260600151101561151b5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631ca0027a6113498487612219565b6040518263ffffffff1660e01b815260040161136791815260200190565b602060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190615093565b60608481015191925082919082901c9060c083901c9060d884901c9060f085901c9060f886901c901580156113e957506bffffffffffffffffffffffff8616155b801561140157506bffffffffffffffffffffffff8516155b15611412575050505050505061151b565b60405160e88b901b60208201527fffffffffffffffffffffffff000000000000000000000000000000000000000060a088811b8216602384015287901b16602f8201527fff0000000000000000000000000000000000000000000000000000000000000060f884811b8216603b84015283901b16603c8201526114b190603d016040516020818303038152906040526114aa906150ac565b8a90612238565b60008b6114be57846114c0565b835b90508060020b8b60020b14156114dd57505050505050505061151b565b8b6114f0578f60020b8160020b126114fa565b8f60020b8160020b135b1561150c57505050505050505061151b565b99506112f09650505050505050565b61152482612326565b5080516060909101519a909950975050505050505050565b600080825160401415611566578280602001905181019061155d9190614bd8565b91509150915091565b825183602001fd5b6000600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755138015906115ab5750620bd8ab600283900b13155b6115b457600080fd5b6000808360020b126115c657826115cb565b826000035b62ffffff811691507001000000000000000000000000000000009060011615611604576ffffcb933bd6fad37aa2d162d1a5940010260801c5b6002821615611623576ffff97272373d413259a46990580e213a0260801c5b6004821615611642576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611661576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611680576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561169f576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156116be576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156116dd576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156116fd576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561171d576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561173d576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561175d576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561177d576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561179d576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156117bd576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156117dd576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156117fe576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561181e576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561183d576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561185a576b048a170391f7dc42444e8fa20260801c5b60008460020b1261189857807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611894576118946150f1565b0490505b60006701000000000000008206116118b15760006118b4565b60015b60ff16603882901c0192505050919050565b600080846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff161061192b57836fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff1611611925578561192d565b8361192d565b845b955060006008600085600b0b1215611948578460000361194a565b845b6bffffffffffffffffffffffff16901b90506000600b85900b12611987576119738588836123e8565b92506119808688836124ee565b91506119a8565b6119928786836123e8565b60000392506119a28787836124ee565b60000391505b5094509492505050565b805160009061161410806119c857506014825111155b806104da5750505160167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec90910106151590565b516016900490565b6000808060168502611a198782016014015190565b878201602a810151601690910151919550935061ffff169150846104865750909591945092509050565b611a7c6040518060c001604052806000815260200160008152602001600081526020016060815260200160608152602001606081525090565b6060611a866141a8565b6040517f7951532d000000000000000000000000000000000000000000000000000000008152600481018890526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690637951532d90602401602060405180830381865afa158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b389190615093565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0195861695909150861580611b9157507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87145b15611bc8576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85611bff576040517fd2a0a82900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80861415611cdf576040517f35d603f5000000000000000000000000000000000000000000000000000000008152600481018a90527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906335d603f590602401600060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611cd89190810190615120565b9350611e80565b8167ffffffffffffffff811115611cf857611cf8614339565b604051908082528060200260200182016040528015611d8557816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611d165790505b50935060005b8451811015611e7e576001811b871615611e76576040517fdc657465000000000000000000000000000000000000000000000000000000008152600481018b905260ff821660248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063dc6574659060440161010060405180830381865afa158015611e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e589190614d4a565b858281518110611e6a57611e6a614deb565b60200260200101819052505b600101611d8b565b505b5050604080516101008101825260008088138915158114835260208301529181018290526060810182905283516080820190611ec19060019081901b614c2b565b87168152604080518082018252627fffff8152600060208281019190915283015201611eeb6125a9565b815260006020909101526040517faa5976c1000000000000000000000000000000000000000000000000000000008152600481018a90529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063aa5976c1906024016040805180830381865afa158015611f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa691906151d4565b60ff16604083015250856000805b60008913611fcd57611fc8868b8b8b6125b4565b611fd9565b611fd9868b8b8b612864565b60c085015260005b86518110156120515760008061202a8e8e898b876006811061200557612005614deb565b60200201518d888151811061201c5761201c614deb565b602002602001015188612bc8565b90925090506120398286615203565b94506120458185615203565b93505050600101611fe1565b5061205c8284615277565b98508360200151612090577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c891215612096565b60648913155b806120a357506080840151155b156120ad576120b2565b611fb4565b606084015160408801526120c68587613018565b60a08a01526080890152606088015260208401516120ed57806120e8836152eb565b6120f7565b816120f7826152eb565b6020890152875250949998505050505050505050565b60006121188261325e565b60015b82518110156121725782818151811061213657612136614deb565b602002602001015183600183038151811061215357612153614deb565b6020026020010151141561216a5750600192915050565b60010161211b565b50600092915050565b60008083600460405160200161219b929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120905060006121e0826003614dd3565b6040805160ff87166020820152908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b60408051600283900b60208201529081018390526000906060016104c1565b80826020015183604001516064811061225357612253614deb565b60200201526040820180519061226882615324565b9052506060820180519061227b82615324565b9052506040820151606414156123225781516020808401516040516122a0920161535d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526122dc9291602001615392565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181529083526000908301526020820161231f61420c565b90525b5050565b6040810151156123e5576000816040015167ffffffffffffffff81111561234f5761234f614339565b604051908082528060200260200182016040528015612378578160200160208202803683370190505b50905060005b81518110156123d1578260200151816064811061239d5761239d614deb565b60200201518282815181106123b4576123b4614deb565b6020908102919091010152806123c981615324565b91505061237e565b5081516040516122a09083906020016153c1565b50565b60006fffffffffffffffffffffffffffffffff80851690841611801561240c579293925b6fffffffffffffffffffffffffffffffff83811685870382160290808716908616026124b6770100000000000000000000000000000000000000000000008310612484578361246f5761246a836901000000000000000000846132aa565b6133b4565b61246a836901000000000000000000846132e7565b8361249d5761246a604884901b83808204910615150190565b81604884901b816124b0576124b06150f1565b046133b4565b935082156124e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509392505050565b60006fffffffffffffffffffffffffffffffff808516908416108015612512579293925b60008585036fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff16029050612572826125685768ffffffffffffffffff8216151569010000000000000000008304016133b4565b604882901c6133b4565b925081156125a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830292505b50509392505050565b6125b161422b565b90565b6125bc61422b565b600083126125cc576125cc6153f7565b6125d461422b565b6125dc61422b565b60008060005b8951811015612721576001811b8716612632577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86826006811061262857612628614deb565b6020020152612719565b60008a828151811061264657612646614deb565b60200260200101519050600081600001516fffffffffffffffffffffffffffffffff169050816040015162ffffff1681620186a00281612688576126886150f1565b0487846006811061269b5761269b614deb565b6020020181815250850194508a6126cd5760208201516fffffffffffffffffffffffffffffffff16810260481c6126f8565b81602001516fffffffffffffffffffffffffffffffff16604882901b816126f6576126f66150f1565b045b86846006811061270a5761270a614deb565b60200201818152508401935050505b6001016125e2565b5061272c8782615203565b905060005b8951811015612857577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86826006811061276d5761276d614deb565b60200201511461284f5760006127ba85836006811061278e5761278e614deb565b60200201516127b4858986600681106127a9576127a9614deb565b6020020151886133ea565b90613423565b8783600681106127cc576127cc614deb565b60200201819052131561284f577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86826006811061280c5761280c614deb565b602002015284816006811061282357612823614deb565b60200201518303925083816006811061283e5761283e614deb565b602002015190910390506000612731565b600101612731565b5050505050949350505050565b61286c61422b565b6000831361287c5761287c6153f7565b61288461422b565b61288c61422b565b60008060005b8951811015612a09576001811b87166128e2577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8682600681106128d8576128d8614deb565b6020020152612a01565b60008a82815181106128f6576128f6614deb565b6020908102919091010151805160408201519192506fffffffffffffffffffffffffffffffff1690612938620186a0830262ffffff8316808204910615150190565b88856006811061294a5761294a614deb565b6020020181815250860195508b6129a357602083015161299e906fffffffffffffffffffffffffffffffff1683026402540be40062ffffff8416800269010000000000000000000204808204910615150190565b6129df565b60208301516fffffffffffffffffffffffffffffffff1662ffffff8216908102026d02540be40000000000000000000083028181049190061515015b8785600681106129f1576129f1614deb565b6020020181815250850194505050505b600101612892565b50612a148782614dd3565b9050818102600083838381612a2b57612a2b6150f1565b04148015612a5957507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211155b905060005b8b51811015612bb9577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff888260068110612a9a57612a9a614deb565b602002015114612bb1576000612b1c878360068110612abb57612abb614deb565b602002015184612aee57612ae961246a888c8760068110612ade57612ade614deb565b60200201518b6132e7565b6127b4565b878a8560068110612b0157612b01614deb565b6020020151880281612b1557612b156150f1565b0490613423565b898360068110612b2e57612b2e614deb565b602002018190521215612bb1577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff888260068110612b6e57612b6e614deb565b6020020152868160068110612b8557612b85614deb565b602002015185039450858160068110612ba057612ba0614deb565b602002015190930392506000612a5e565b600101612a5e565b50505050505050949350505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8660c001518460068110612c0257612c02614deb565b60200201511415612c185750600090508061300d565b84516fffffffffffffffffffffffffffffffff16612c6a57612c558660a001518760000151612c4b578560a0015161342f565b856080015161342f565b6fffffffffffffffffffffffffffffffff1685525b6000612ca98888602001518960c001518760068110612c8b57612c8b614deb565b602002015188602001518a600001518a600001518b6040015161347d565b6fffffffffffffffffffffffffffffffff9091166020890152919450925090507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415612cfe57600080925092505061300d565b866020015115612d2557602086018051840190526040860180516000849003019052612d3e565b6020860180518301905260408601805160008590030190525b60408781015160608901805160ff92831685029290920491820190528651928190039290916000916fffffffffffffffffffffffffffffffff169084901b81612d8957612d896150f1565b049050886000015115612db15760c087018051820169ffffffffffffffffffff169052612dc8565b60e087018051820169ffffffffffffffffffff1690525b50505084600001516fffffffffffffffffffffffffffffffff1684602001516fffffffffffffffffffffffffffffffff16141561300d578551600090612e12578460a00151612e18565b84608001515b9050600281900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427551480612e525750600281900b620bd8ab145b15612e6b57506080860180516001851b1916905261300d565b6000808752600160608801526040517fe3642509000000000000000000000000000000000000000000000000000000008152600481018b905260ff86166024820152600283900b60448201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e36425099060640161010060405180830381865afa158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a9190615431565b805160208201518a519293506bffffffffffffffffffffffff9182169291169015612fb657875170ffffffffffffffffffffffffffffffff00600884811b82169084901b90911691909101036fffffffffffffffffffffffffffffffff1688526040830151600290810b60808a015284900b60a0890152613008565b875170ffffffffffffffffffffffffffffffff00600883811b82169085901b90911691909101036fffffffffffffffffffffffffffffffff168852600284810b60808a01526060840151900b60a08901525b505050505b965096945050505050565b6060806060835167ffffffffffffffff81111561303757613037614339565b604051908082528060200260200182016040528015613060578160200160208202803683370190505b509050835167ffffffffffffffff81111561307d5761307d614339565b6040519080825280602002602001820160405280156130a6578160200160208202803683370190505b509250835167ffffffffffffffff8111156130c3576130c3614339565b6040519080825280602002602001820160405280156130ec578160200160208202803683370190505b50915060005b84518160ff161015613256576000868260ff166006811061311557613115614deb565b60200201519050600081602001511180613130575080606001515b1561324d576000868360ff168151811061314c5761314c614deb565b6020026020010151905061316381602001516136b5565b600290810b6060830181905260a083015190910b14156131ab576060810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160020b90525b80600001516fffffffffffffffffffffffffffffffff16608082602001516fffffffffffffffffffffffffffffffff16901b17848460ff16815181106131f3576131f3614deb565b6020026020010181815250508160200151868460ff168151811061321957613219614deb565b6020026020010181815250508160400151858460ff168151811061323f5761323f614deb565b602002602001018181525050505b506001016130f2565b509250925092565b600081511161326c57600080fd5b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8151111561329a57600080fd5b6123e58160006001845103613c38565b60006132b78484846132e7565b9050600082806132c9576132c96150f1565b84860911156132e057806132dc81615324565b9150505b9392505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050806000141561333f576000841161333457600080fd5b5082900490506132e0565b80841161334b57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156133e6576133e66153f7565b5090565b60008084126134065761340161246a8585856132aa565b61341b565b61341761246a8560000385856132e7565b6000035b949350505050565b60006132e08284615277565b6000826000015160020b8260020b141561344e575060208201516104da565b6134578261156e565b6fffffffffffffffffffffffffffffffff8116602085015260029290920b909252919050565b846000808080808c613499576134948a8a8a6124ee565b6134a4565b6134a48a8a8a6123e8565b905062ffffff871680028c156135aa577b6df37f675ef6eadf5ab9a2072d44268d97df837e6748956e5c6c211787126134e657806402540be4008804026134f1565b6402540be400878202045b925081831215613522578d6135105761350b8b8a85613dc2565b61351b565b61351b8b8a85613f33565b945061357e565b89945081925061357b7b6df37f675ef6eadf5ab9a2072d44268d97df837e6748956e5c6c21178412613564578184061515828504015b6402540be400026133b4565b61246a846402540be4000283808204910615150190565b96505b8d6135935761358e8b868b6123e8565b61359e565b61359e8b868b6124ee565b9550828703935061363e565b818713156135d9578d6135c7576135c28b8a89613dc2565b6135d2565b6135d28b8a89613f33565b94506135e0565b8994508196505b8d6135f5576135f08b868b6123e8565b613600565b6136008b868b6124ee565b92506136367b6df37f675ef6eadf5ab9a2072d44268d97df837e6748956e5c6c2117841261356457818406151582850401613558565b955082860393505b821580156136705750896fffffffffffffffffffffffffffffffff16856fffffffffffffffffffffffffffffffff1614155b156136a4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9650600095508a9450600093505b505050975097509750979350505050565b60006fffffffffffffffffffffffffffffffff821662010003118015906136fe57506ffffdd8371ce3ef742f98c78a4732240d6fffffffffffffffffffffffffffffffff831611155b61370757600080fd5b6fffffffffffffffffffffffffffffffff821680600068010000000000000000821061373557604091821c91015b640100000000821061374957602091821c91015b62010000821061375b57601091821c91015b610100821061376c57600891821c91015b6010821061377c57600491821c91015b6004821061378c57600291821c91015b6002821061379c57600191821c91015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8810160401b607f82810385901b8002901c70010000000000000000000000000000000081106137f857678000000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061382757674000000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061385657672000000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061388557671000000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106138b457670800000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106138e357670400000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061391257670200000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061394157670100000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061396f576680000000000000919091179060011c5b8002607f1c700100000000000000000000000000000000811061399d576640000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106139cb576620000000000000919091179060011c5b8002607f1c70010000000000000000000000000000000081106139f9576610000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613a27576608000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613a55576604000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613a83576602000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613ab1576601000000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613ade5765800000000000919091179060011c5b8002607f1c7001000000000000000000000000000000008110613b0b5765400000000000919091179060011c5b693627a301d71055774c8591909102906f0d89e7aecf44b7384157000000000001820160801d60007ffffffffffffffffffffffffffff5adf5000000000000000000000000000000008412613bb6577ffffffffffffffffffffffffffff8bb35000000000000000000000000000000008412613b8b57608084901d613bdd565b7fffffffffffffffffffffffffffffffffff9a58f534e18c8f54aaffffffffffff840160801d613bdd565b7fffffffffffffffffffffffffffffffffb5d6bb93c93a19febd193fffffffffff840160801d5b90508060020b8260020b1480613c1f5750613bf78261156e565b6fffffffffffffffffffffffffffffffff16896fffffffffffffffffffffffffffffffff1610155b613c295780613c2b565b815b9998505050505050505050565b818180821415613c49575050505050565b600085600286860305860181518110613c6457613c64614deb565b602002602001015190505b818313613d94575b80868481518110613c8a57613c8a614deb565b60200260200101511015613ca357600190920191613c77565b858281518110613cb557613cb5614deb565b6020026020010151811015613cee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190613ca3565b818313613d8f57858281518110613d0757613d07614deb565b6020026020010151868481518110613d2157613d21614deb565b6020026020010151878581518110613d3b57613d3b614deb565b60200260200101888581518110613d5457613d54614deb565b6020908102919091010191909152526001909201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b613c6f565b81851215613da757613da7868684613c38565b83831215613dba57613dba868486613c38565b505050505050565b600080821215613e96576fffffffffffffffffffffffffffffffff8316613de857600080fd5b600082810390770100000000000000000000000000000000000000000000008210613e3957613e34826901000000000000000000876fffffffffffffffffffffffffffffffff166132aa565b613e67565b613e6769010000000000000000008302866fffffffffffffffffffffffffffffffff16808204910615150190565b9050613e8d613e886fffffffffffffffffffffffffffffffff881683614140565b61414c565b925050506132e0565b6000770100000000000000000000000000000000000000000000008310613ee357613ede836901000000000000000000866fffffffffffffffffffffffffffffffff166132e7565b613f12565b836fffffffffffffffffffffffffffffffff166901000000000000000000840281613f1057613f106150f1565b045b90506132dc613e886fffffffffffffffffffffffffffffffff87168361416e565b600081613f415750826132e0565b6000808312613f505782613f55565b826000035b90506fffffffffffffffffffffffffffffffff8516810278ffffffffffffffffffffffffffffffff000000000000000000604886901b1660008086131561407e57876fffffffffffffffffffffffffffffffff16848481613fb857613fb86150f1565b04148015613fca575050818101818110155b1561403c576fffffffffffffffffffffffffffffffff878116908916027701000000000000000000000000000000000000000000000081106140205761401b816901000000000000000000846132aa565b614034565b614034604882901b83808204910615150190565b955050614135565b6140778261406c868b6fffffffffffffffffffffffffffffffff168681614065576140656150f1565b049061416e565b808204910615150190565b9450614135565b876fffffffffffffffffffffffffffffffff168484816140a0576140a06150f1565b04146140ab57600080fd5b50818103818111156140bc57600080fd5b806140c657600080fd5b6fffffffffffffffffffffffffffffffff8781169089160277010000000000000000000000000000000000000000000000811061411a57614115613e88826901000000000000000000856132aa565b614131565b614131613e88604883901b84808204910615150190565b9550505b505050509392505050565b60006132e08284614c2b565b60006fffffffffffffffffffffffffffffffff8211156133e6576133e66153f7565b60006132e08284614dd3565b60405180608001604052806060815260200161419461420c565b815260200160008152602001600081525090565b6040518060c001604052806006905b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816141b75790505090565b60405180610c8001604052806064906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f84011261425b57600080fd5b50813567ffffffffffffffff81111561427357600080fd5b60208301915083602082850101111561428b57600080fd5b9250929050565b6000806000604084860312156142a757600080fd5b833567ffffffffffffffff8111156142be57600080fd5b6142ca86828701614249565b909790965060209590950135949350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146123e557600080fd5b6000806040838503121561431357600080fd5b823561431e816142de565b9150602083013561432e816142de565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561438b5761438b614339565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156143d8576143d8614339565b604052919050565b60ff811681146123e557600080fd5b8060020b81146123e557600080fd5b600060c0828403121561441057600080fd5b60405160c0810181811067ffffffffffffffff8211171561443357614433614339565b6040529050808235614444816142de565b81526020830135614454816142de565b60208201526040830135614467816142de565b6040820152606083013561447a816143e0565b6060820152608083013561448d816143ef565b608082015260a08301356144a0816143ef565b60a0919091015292915050565b6bffffffffffffffffffffffff811681146123e557600080fd5b69ffffffffffffffffffff811681146123e557600080fd5b63ffffffff811681146123e557600080fd5b600060a0828403121561450357600080fd5b60405160a0810181811067ffffffffffffffff8211171561452657614526614339565b6040529050808235614537816144ad565b81526020830135614547816144c7565b6020820152604083013561455a816144c7565b6040820152606083013561456d816143e0565b60608201526080830135614580816144df565b6080919091015292915050565b80151581146123e557600080fd5b600080600061018084860312156145b157600080fd5b6145bb85856143fe565b92506145ca8560c086016144f1565b91506101608401356145db8161458d565b809150509250925092565b600081518084526020808501945080840160005b83811015614616578151875295820195908201906001016145fa565b509495945050505050565b8051825260208101516020830152604081015160408301526000606082015160c0606085015261465460c08501826145e6565b90506080830151848203608086015261466d82826145e6565b91505060a083015184820360a086015261468782826145e6565b95945050505050565b600060608201858352602085818501526060604085015281855180845260808601915060808160051b870101935082870160005b82811015614710577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808887030184526146fe868351614621565b955092840192908401906001016146c4565b50939998505050505050505050565b60006020828403121561473157600080fd5b5035919050565b61020081016147a1828a73ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401525060ff6060820151166060830152608081015160020b608083015260a081015160020b60a08301525050565b87516bffffffffffffffffffffffff1660c0830152602088015169ffffffffffffffffffff90811660e0840152604089015116610100830152606088015160ff16610120830152608088015163ffffffff166101408301529515156101608201526101808101949094526101a08401929092526101c08301526101e09091015292915050565b6000806000806080858703121561483d57600080fd5b8435614848816142de565b93506020850135614858816142de565b93969395505050506040820135916060013590565b6020815260006132e06020830184614621565b6000806000610180848603121561489657600080fd5b833592506148a785602086016143fe565b91506148b68560e086016144f1565b90509250925092565b6101608101614928828573ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401525060ff6060820151166060830152608081015160020b608083015260a081015160020b60a08301525050565b82516bffffffffffffffffffffffff1660c0830152602083015169ffffffffffffffffffff90811660e0840152604084015116610100830152606083015160ff16610120830152608083015163ffffffff166101408301526132e0565b600080610160838503121561499957600080fd5b6149a384846143fe565b91506149b28460c085016144f1565b90509250929050565b60008060008060008060a087890312156149d457600080fd5b86356149df816142de565b955060208701356149ef816142de565b94506040870135935060608701359250608087013567ffffffffffffffff811115614a1957600080fd5b614a2589828a01614249565b979a9699509497509295939492505050565b62ffffff811681146123e557600080fd5b600080600080600060a08688031215614a6057600080fd5b853594506020860135614a72816143e0565b93506040860135614a82816143ef565b92506060860135614a92816143ef565b91506080860135614aa281614a37565b809150509295509295909350565b60005b83811015614acb578181015183820152602001614ab3565b83811115614ada576000848401525b50505050565b60008151808452614af8816020860160208601614ab0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b82815260406020820152600061341b6040830184614ae0565b602081526000825160c06020840152614b5f60e0840182614ae0565b90506020840151604084015273ffffffffffffffffffffffffffffffffffffffff604085015116606084015260608401516080840152608084015160a084015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c08501526146878282614ae0565b60008060408385031215614beb57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614c3d57614c3d614bfc565b500390565b80516fffffffffffffffffffffffffffffffff81168114614c6257600080fd5b919050565b8051614c62816143ef565b8051614c62816144c7565b6000610100808385031215614c9157600080fd5b6040519081019067ffffffffffffffff82118183101715614cb457614cb4614339565b81604052809250614cc484614c42565b8152614cd260208501614c42565b602082015260408401519150614ce782614a37565b816040820152614cf960608501614c67565b6060820152614d0a60808501614c67565b6080820152614d1b60a08501614c67565b60a0820152614d2c60c08501614c72565b60c0820152614d3d60e08501614c72565b60e0820152505092915050565b60006101008284031215614d5d57600080fd5b6132e08383614c7d565b60006bffffffffffffffffffffffff83811690831681811015614d8c57614d8c614bfc565b039392505050565b600081600b0b7fffffffffffffffffffffffffffffffffffffffff800000000000000000000000811415614dca57614dca614bfc565b60000392915050565b60008219821115614de657614de6614bfc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061010073ffffffffffffffffffffffffffffffffffffffff808c168452808b1660208501528960408501528860608501528088166080850152508560a08401528460c08401528060e0840152614e7481840185614ae0565b9b9a5050505050505050505050565b60008060408385031215614e9657600080fd5b8251614ea1816144c7565b602084015190925061432e816144c7565b8051614c62816144ad565b6000806000806000806000878903610160811215614eda57600080fd5b8851614ee5816142de565b60208a0151909850614ef6816142de565b60408a0151909750614f07816142de565b60608a0151909650614f18816143e0565b60808a0151909550614f29816143ef565b60a08a0151909450614f3a816143ef565b925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215614f6c57600080fd5b50614f75614368565b60c0890151614f83816144ad565b815260e0890151614f93816144c7565b6020820152610100890151614fa7816144c7565b6040820152610120890151614fbb816143e0565b6060820152610140890151614fcf816144df565b806080830152508091505092959891949750929550565b600080600060608486031215614ffb57600080fd5b8351615006816144ad565b602085015190935061ffff8116811461501e57600080fd5b60408501519092506145db816144df565b60008160020b8360020b60008112817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000183128115161561507257615072614bfc565b81627fffff01831381161561508957615089614bfc565b5090039392505050565b6000602082840312156150a557600080fd5b5051919050565b805160208083015191908110156150eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000602080838503121561513357600080fd5b825167ffffffffffffffff8082111561514b57600080fd5b818501915085601f83011261515f57600080fd5b81518181111561517157615171614339565b61517f848260051b01614391565b818152848101925060089190911b83018401908782111561519f57600080fd5b928401925b818410156151c9576151b68885614c7d565b83528483019250610100840193506151a4565b979650505050505050565b600080604083850312156151e757600080fd5b82516151f2816143e0565b602084015190925061432e816143e0565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561523d5761523d614bfc565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561527157615271614bfc565b50500190565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156152b1576152b1614bfc565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156152e5576152e5614bfc565b50500390565b60007f800000000000000000000000000000000000000000000000000000000000000082141561531d5761531d614bfc565b5060000390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561535657615356614bfc565b5060010190565b60008183825b6064811015615382578151835260209283019290910190600101615363565b505050610c808201905092915050565b600083516153a4818460208801614ab0565b8351908301906153b8818360208801614ab0565b01949350505050565b815160009082906020808601845b838110156153eb578151855293820193908201906001016153cf565b50929695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8051614c628161458d565b600061010080838503121561544557600080fd5b6040519081019067ffffffffffffffff8211818310171561546857615468614339565b8160405283519150615479826144ad565b81815261548860208501614eb2565b602082015261549960408501614c67565b60408201526154aa60608501614c67565b60608201526154bb60808501615426565b60808201526154cc60a08501615426565b60a08201526154dd60c08501614c72565b60c08201526154ee60e08501614c72565b60e082015294935050505056fea164736f6c634300080a000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
