Address: 0x81D7a918...6281cCC63 | BaseScan
window.dataLayer = window.dataLayer || [];
        function gtag() { dataLayer.push(arguments); }
        gtag('js', new Date());
        gtag('config','G-TWEL8GRQ12', { 'anonymize_ip': true });
//Search box text ad
        var availableAd = [];
        var gotAd = [];

        
        availableAd = ["<div class='p-2'><a href='https://goto.etherscan.com/rd/RQVT45DUBNV67THPQAQ5E29DZ' rel='nofollow' target='_blank' data-bs-toggle='tooltip' data-bs-trigger='hover' title='Links to an External Advertiser site' class='search-panel-ads d-flex align-items-center p-2 rounded'><div class='me-2'><img width='22' src='/images/gen/etoro2_20.png' alt='Ad'></div><div class='text-truncate'><h6 class='d-flex align-items-center fs-sm text-dark mb-0'><div class='text-truncate me-2'>Trade crypto alongside stocks, ETFs and more on etoro.</div><span class='d-none d-sm-inline-block small bg-white text-muted rounded-1 border px-2 py-1 ms-1'>Sponsored</span><span class='d-inline-block d-sm-none small bg-white text-muted rounded-1 border px-2 py-1 ms-1'>Ad</span></h6></div></a></div>", "<div class='p-2'><a href='https://goto.etherscan.com/rd/IT3NB7TH7F4S2QVUJ8CICG368' rel='nofollow' target='_blank' data-bs-toggle='tooltip' data-bs-trigger='hover' title='Links to an External Advertiser site' class='search-panel-ads d-flex align-items-center p-2 rounded'><div class='me-2'><img width='22' src='/images/gen/etherscan-logo_20.png' alt='Ad'></div><div class='text-truncate'><h6 class='d-flex align-items-center fs-sm text-dark mb-0'><div class='text-truncate me-2'>Etherscan API - Build with AI via MCP, CLI, and Skills</div><span class='d-none d-sm-inline-block small bg-white text-muted rounded-1 border px-2 py-1 ms-1'>Sponsored</span><span class='d-inline-block d-sm-none small bg-white text-muted rounded-1 border px-2 py-1 ms-1'>Ad</span></h6></div></a></div>"];
        gotAd = ["ShowAds					"];
        

        // Temporary fallback to prevent runtime error
        if (typeof window.updatehash !== 'function') {
            const args = [];

            // Create a simple fallback
            window.updatehash = function () {
                args.push(arguments);

                // Retry every 100ms until the updatehash function load
                const retry = setInterval(function () {
                    if (typeof window.updatehash === 'function' && window.updatehash !== fallback) {
                        clearInterval(retry);
                        try {
                            window.updatehash.apply(null, args[0]);
                        } catch (e) {
                            console.error('updatehash retry failed:', e);
                        }
                    }
                }, 100);

                //stop retry after 1s
                setTimeout(() => clearInterval(retry), 1000);
            };

            const fallback = window.updatehash;
         //end temp fallback updatehash
        }
.autolink-safari a {
            pointer-events: none !important;
            text-decoration: none !important;
            color: inherit !important;
        }

        #masterNoticeBar div.alert a{
            color:#fff !important; 
            text-decoration: underline !important;
        }

        .word-break{word-break: break-all !important;}
        .min-with50{min-width: 50px !important;}
.dw5vaj2kyz2 { -ms-flex-pack: center; justify-content: center; } .anlrsjerndq { border-top: 1px solid #e7eaf3 !important; } body.dark-mode .anlrsjerndq { border-color: #18365b !important; } @media (min-width: 992px) { .bjkt18thggu { display: block !important; } } @media (min-width: 992px) { .c3ktudwagdv { display: inline-block !important; } }
#div-advert {line-height: 1.7}@media (max-width: 667px) {#div-advert {min-height: 62px;}}@media (max-width: 767px) {#div-advert {padding-bottom: 20px;}}
.myMarker {
            position: absolute;
            background: rgba(100,200,100,0.5);
            z-index: 20
        }

        body.dark-mode .myMarker {
            background: blue;
        }

        pre {
            resize: vertical;
            /*overflow: auto;*/
        }

        #icon {
            background-size: cover;
            background-repeat: no-repeat;
            display: inline-block;
        }

        .liA {
            font-size: 11px;
            color: #B3B6B7;
        }

        .liH {
            display: none;
        }

        #overlayMain {
            color: #666666;
            position: fixed;
            height: 100%;
            width: 100%;
            z-index: 5000;
            top: 0;
            left: 0;
            float: left;
            text-align: center;
            padding-top: 20%;
            display: none;
        }

        #qrcode img {
            display: inline-block !important;
        }

        .panel-fullscreen {
            display: block;
            z-index: 9999;
            position: fixed;
            width: 100%;
            height: 100%;
            top: 0;
            right: 0;
            left: 0;
            bottom: 0;
            overflow: auto;
        }

        .tooltip-inner {
            max-width: 350px;
        }

        @keyframes fa-blink {
            0% {
                opacity: 1;
            }

            25% {
                opacity: 0.25;
            }

            40% {
                opacity: 0.5;
            }

            60% {
                opacity: 0.75;
            }
            /*100% { opacity: 0; }*/
        }

        .fa-blink {
            -webkit-animation: fa-blink .99s linear infinite;
            -moz-animation: fa-blink .99s linear infinite;
            -ms-animation: fa-blink .99s linear infinite;
            -o-animation: fa-blink .99s linear infinite;
            animation: fa-blink .99s linear infinite;
        }

        .popover-header {
            background-color: white;
        }

        .popoverHeader {
            margin-bottom: 0px !important;
        }

        .popoverList {
            padding-left: 20px !important;
        }

        .popoverEnsOwnedAddressLoading {
        }

        .popOverEnsOwnedAddressTable {
            /*display: none;*/
        }

        .popoverLoadingImg {
            width: 10% !important;
        }

        .exclamPoint {
            position: relative !important;
        }

            .exclamPoint i {
                position: absolute;
                top: 0.35em;
                left: -1.5em;
            }

            .exclamPoint::marker {
                content: '';
                /*   font-family: "Font Awesome 5 Duotone";
            content: "\10f071";*/
            }

        .grid-container {
            display: grid;
            grid-template-columns: 30% 30% 30%;
            grid-gap: 0.5em;
        }

        #analytics_pageiframe {
            min-height: 680px;
        }

        body.dark-mode input[type="date"]::-webkit-calendar-picker-indicator {
            filter: invert(1);
        }

        .ace_editor {
            font-family: SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace !important;
        }

        /*section[id$="_divSummary"] > div:first-child > div span.hash-tag:not(:is(#divDelegatedAddress *)) {
            max-width: 8rem !important;
        }
        section[id$="_divSummary"] > div:first-child > div span.hash-tag:not(:is(#divImplementationAddress *)){
            max-width: 9rem !important;
        }*/

        section[id$="_divSummary"]:has(#divDelegatedAddress) > div:first-child > div span.hash-tag {
             max-width: 8rem !important;
         }

        section[id$="_divSummary"]:has(#divImplementationAddress) > div:first-child > div span.hash-tag {
            max-width: 9rem !important;
        }

        .multichain-dropdown .dropdown .dropdown-menu .dropdown-item span.hash-tag {
            max-width: 12rem !important;
        }
         [data-bs-theme=light] .nav-pills-alt .nav-link
        {
          --bs-nav-pills-link-active-bg: var(--bs-gray-200);
          --bs-nav-pills-link-active-color: var(--bs-body-color);
        }
        [data-bs-theme=dim] .nav-pills-alt .nav-link,
        [data-bs-theme=dark] .nav-pills-alt .nav-link
        {
          --bs-nav-pills-link-active-bg: var(--bs-gray-700);
          --bs-nav-pills-link-active-color: var(--bs-body-color);
        }
        
        #dividcode .card-body > div:last-child {
            margin-bottom: 0px !important;
        }

        .iframe-container {
            width: 100%;
            height: 100%;
            border: none;
        }

        .liq-price-progress-bar {
            background-color: #7ed321;
            background-image: linear-gradient(90deg, #7ed321 0%, #f8e71c 50%, #ff8a3d 75%, #dc3545 100%);
            background-position: left center;
            background-repeat: no-repeat;
        }
.dataTables_wrapper .dataTables_length,
        .dataTables_wrapper .dataTables_paginate {
            float: none;
        }

        .datatable-form-control {
            padding-left: 1.75rem;
            width: 14rem !important;
            margin-left: 0 !important;
        }

        #asset-multichain .dataTables_filter input[type="search"],
        #asset-multichain .dataTables_filter input[type="search"]::-webkit-search-decoration,
        #asset-multichain .dataTables_filter input[type="search"]::-webkit-search-cancel-button {
            -webkit-appearance: button !important;
        }

        table.dataTable thead th {
            background: transparent !important;
            white-space: nowrap;
        }

        table.dataTable thead > tr > th.sorting:before,
        table.dataTable thead > tr > th.sorting:after,
        table.dataTable thead > tr > th.sorting_asc:before,
        table.dataTable thead > tr > th.sorting_asc:after,
        table.dataTable thead > tr > th.sorting_desc:before,
        table.dataTable thead > tr > th.sorting_desc:after {
            display: none;
        }

        table.dataTable thead .sorting span {
            background: none;
        }

        table.dataTable thead .sorting_asc span { 
            background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="%236c757d" d="M551.1 47.67H312c-13.25 0-24 10.76-24 24.02c0 13.26 10.75 24.02 24 24.02h239.1c13.25 0 24-10.76 24-24.02C575.1 58.43 565.2 47.67 551.1 47.67zM360 431.1h-48c-13.25 0-24 10.76-24 24.02S298.8 480 312 480h48c13.25 0 23.1-10.76 23.1-24.02S373.2 431.1 360 431.1zM423.1 303.9H312c-13.25 0-24 10.76-24 24.02s10.75 24.02 24 24.02h111.1c13.25 0 24-10.76 24-24.02S437.2 303.9 423.1 303.9zM487.1 175.8H312c-13.25 0-24 10.76-24 24.02s10.75 24.02 24 24.02h175.1c13.25 0 24-10.76 24-24.02S501.2 175.8 487.1 175.8zM145.6 39.37c-9.062-9.82-26.19-9.82-35.25 0L14.38 143.4c-9 9.758-8.406 24.96 1.344 33.94C20.35 181.7 26.19 183.8 32 183.8c6.469 0 12.91-2.594 17.62-7.719L104 117.1v338.9C104 469.2 114.8 480 128 480S152 469.2 152 455.1V117.1l54.37 58.95C215.3 185.8 230.5 186.5 240.3 177.4C250 168.4 250.6 153.2 241.6 143.4L145.6 39.37z"/></svg>') no-repeat center right; 
        }

        table.dataTable thead .sorting_desc span { 
            background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="%236c757d" d="M360 432h-48c-13.25 0-24 10.75-24 24S298.8 480 312 480h48c13.25 0 23.1-10.75 23.1-24S373.2 432 360 432zM423.1 304H312C298.8 304 288 314.8 288 328S298.8 352 312 352h111.1c13.25 0 24-10.75 24-24S437.2 304 423.1 304zM487.1 176H312C298.8 176 288 186.8 288 200S298.8 224 312 224h175.1c13.25 0 24-10.75 24-24S501.2 176 487.1 176zM551.1 48H312C298.8 48 288 58.75 288 72S298.8 96 312 96h239.1c13.25 0 24-10.75 24-24S565.2 48 551.1 48zM206.4 335.1L152 394.9V56.02C152 42.76 141.3 32 128 32S104 42.76 104 56.02v338.9l-54.37-58.95c-4.719-5.125-11.16-7.719-17.62-7.719c-5.812 0-11.66 2.094-16.28 6.375c-9.75 8.977-10.34 24.18-1.344 33.94l95.1 104.1c9.062 9.82 26.19 9.82 35.25 0l95.1-104.1c9-9.758 8.406-24.96-1.344-33.94C230.5 325.5 215.3 326.2 206.4 335.1z"/></svg>') no-repeat center right; 
        }

        table.dataTable thead .sorting_asc span,
        table.dataTable thead .sorting_desc span {
            margin-bottom: -0.125rem !important;
            margin-right: 0.5rem !important;
            display: inline-block;
            padding-left: 5px;
            width: 14px;
            height: 14px;
        }

        .hover\:border-secondary:hover {
            border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;
        }

        .hover\:border-opacity-50:hover {
            --bs-border-opacity: 0.5;
        }

        #div_tabs {
          scroll-margin-top: 40px; /* adjust auto-scroll height for nav tabs */
        }

         /* Code Reader - File Browser */
        #file-browser .accordion-button
        {
          --bs-accordion-btn-padding-x: 0;
          --bs-accordion-btn-padding-y: 0;
        }

        #file-browser .accordion
        {
          --bs-accordion-bg: transparent;
          --bs-accordion-border-width: 0;
          --bs-accordion-btn-color: var(--bs-secondary-color);
          --bs-accordion-btn-icon-width: 1rem;
        }

        #file-browser .accordion-button:not(.collapsed)
        {
          --bs-accordion-active-color: var(--bs-secondary-color);
          --bs-accordion-active-bg: transparent;
          --bs-accordion-border-color: transparent;
        }

        #file-browser ul
        {
          padding-left: 1rem;
        }

        #file-browser .accordion-button::before
        {
          flex-shrink: 0;
          width: 1.25rem;
          height: 1.25rem;
          margin-top: 0.5rem;
          content: "";
          background-image: var(--bs-accordion-btn-active-icon);
          background-repeat: no-repeat;
          background-size: 0.75rem;
          transition: transform .2s ease-in-out;
        }

        #file-browser .accordion-button::after
        {
          display: none !important;
        }

         /* Hide these iframes until they have a real src to prevent the ui gap issue */
        #crosschaintx_pageiframe,
        #authlist7702_pageiframe,
        #aatx_pageiframe {
            display: none !important;
        }

        #crosschaintx_pageiframe[src]:not([src=""]):not([src="about:blank"]),
        #authlist7702_pageiframe[src]:not([src=""]):not([src="about:blank"]),
        #aatx_pageiframe[src]:not([src=""]):not([src="about:blank"]) {
            display: block !important;
        }
ETH Price:
$2,454.28
(-0.46%)
Gas:
0.005 Gwei
/
Light
Dim
Dark
Auto (System)
Base Mainnet
Base Sepolia Testnet
Sign In
Home
Blockchain
Transactions
Latest L1→L2 Transactions
Latest L2→L1 Transactions
Contract Internal Transactions
Cross-Chain Transactions
AA Transactions
EIP-7702 Authorizations
Beta
View Blocks
View L1 Transaction Batches
View L1 State Batches
Top Accounts
Verified Contracts
Tokens
Top Tokens
(ERC-20)
Token Transfers
(ERC-20)
Token Flow Visualizer
Beta
NFTs
Latest Transfers
Latest Mints
Resources
Charts &  Stats
Directory
API
Multichain API
API Pricing
API Documentation
More
Developer Tools
Input Data Encoder
Beta
Input Data Decoder
Unit Converter
Download Data (CSV Export)
Account Balance Checker
Broadcast Transaction
Bytecode to Opcode
Smart Contract Tools
Code Reader
Verify Contract
Similar Contract Search
Contract Diff Checker
Vyper Online Compiler
Explore
Gas Tracker
Label Cloud
Domain Name Lookup
Services
Token Approvals
Verified Signature
Input Data Messages (IDM)
Advanced Filter
Explorers
Base Mainnet
Base Sepolia Testnet
Site Settings
Appearance
Light
Dim
Dark
Auto (System)
|
Sign In
Address
0x81D7a91860a70B312E68c075C896aA06281cCC63
Buy
Sponsored
etoro
Explore Crypto
Start Investing.
Explore a diverse range of leading cryptoassets and trade them alongside stocks, ETFs, and more.
Play
Sponsored
BC.Game
The best crypto casino in the world. Get up to 5 BtC in daily bonuses with our free spin wheel.
Spin Now!
Join now and instantly enjoy bonus of 1000000 USDC, 760% exclusive deposit bonus.
Rainbet
Crypto Casino & Sportsbook
Play Now!
Originals, Slots, Sports. Up to 80% back in unmatched rewards. 1.5M in races a month!
Vavada
Crypto Casino with Top Slots & Live Games
Play Now
Get a 100% bonus up to 1000 USDT + 100 FS and play with crypto
Gaming
Sponsored
BC.Game
The best crypto casino in the world. 760% exclusive deposits bonus.
Deposit Now!
50+ token options, 100% bet insurance for a worry-free gaming experience.
Stake
200% Bonus, Instant Withdrawals, 100K Daily Giveaways, BEST VIP Club
Claim Bonus!
20+ Cryptos, 3000+ Slots, Daily & Monthly Bonuses, Exclusive Sports Promos - Provably Fair!
Kings.Game
500% Bonus, 30% Rakeback, Exclusive VIP Club & Tournaments, Instant Withdrawals
Win Now!
Enjoy Crypto & Banking, 8000+ Games & Sports, Missions, Daily, Weekly and Monthly Bonuses, Reload, Annual rewards.
window.sevioads = window.sevioads || []; 
    var sevioads_preferences = []; 
    sevioads_preferences[0] = {}; 
    sevioads_preferences[0].zone = "d6bff83f-018d-46d2-a6e4-76dea3697fc6"; 
    sevioads_preferences[0].adType = "native"; 
    sevioads_preferences[0].inventoryId = "8d0296c7-b5a9-4bc7-a144-29a4c0c71d50"; 
    sevioads_preferences[0].accountId = "ae4111e1-f910-4f63-ade0-89e8fe771ab1"; 
    sevioads.push(sevioads_preferences);
API
Token Approvals
Beta
Check Previous Balance
Update Name Tag or Label
Report/Flag Address
Overview
ETH Balance
0
.
000592864865309663 ETH
ETH Value
$1.46
(@ $2,454.28/ETH)
Token Holdings
$0.00
(6 Tokens)
Could not find any matches!
ERC-20 Tokens (6)
ERC-20: Auth...
(THEO)
9 THEO
$0.00
ERC-20: DogT...
(TRUMP)
25 TRUMP
$0.00
ERC-20: Gras...
(GRASS)
9 GRASS
$0.00
ERC-20: Litt...
(
LILPEP...
)
9 LILPEPE
$0.00
ERC-20: Teth...
(XAUt)
9 XAUt
$0.00
ERC-20: Trum...
(DJTB)
9 DJTB
$0.00
View All Holdings
More Info
Private Name Tags
Add
Transactions Sent
Latest:
12 days ago
First:
16 days ago
Funded By
Relay: Solver 0xd78...db8
|
16 days ago
Multichain Info
$54.96
(Multichain Portfolio)
1 address found via
Blockscan
BscScan
($52)
Blockscan (View All)
Ad
window.sevioads = window.sevioads || [];
    var sevioads_preferences = [];
    sevioads_preferences[0] = {};
    sevioads_preferences[0].zone = "8bdc99df-88e5-4f60-9384-9945bd2c29e6";
    sevioads_preferences[0].adType = "banner";
    sevioads_preferences[0].inventoryId = "8d0296c7-b5a9-4bc7-a144-29a4c0c71d50";
    sevioads_preferences[0].accountId = "ae4111e1-f910-4f63-ade0-89e8fe771ab1";
    sevioads.push(sevioads_preferences);
Transactions
Internal Transactions
Token Transfers (ERC-20)
Other Transactions
Analytics
Assets
Cards
New
Advanced Filter
Latest 25 from a total of
68
transactions
Download Page Data
View Completed Txns
View Pending Txns
View Failed Txns
View Outgoing Txns
View Incoming Txns
View Contract Creation
Transaction Hash
Method
Block
From
To
0x6023dd6c1dc4a06a7c8b9c264367c3d0dc8e681e04d5ecf8933a08e9e4afb732
Deposit Native
Bridge
50615138
2026-08-29 16:07:03
12 days ago
1788019623
0x81D7a918...6281cCC63
OUT
Relay: Depository
$547.30
0.223 ETH
0
.
00000014
0
.
006
0xa26a19055b11e2875d74bc8110c0dfaaad48cab8b553c0eaa3817ba0e447c20e
Swap
Swap
50612911
2026-08-29 14:52:49
12 days ago
1788015169
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000348
0
.
015
0xbbbfb63e94251251dd787f9e7ebac6b86c446ab1e7e6e241876221874ae92f3c
Approve
Approve
50612911
2026-08-29 14:52:49
12 days ago
1788015169
0x81D7a918...6281cCC63
OUT
0xB2000000...f6959DF01
$0.00
0 ETH
0
.
00000068
0
.
015
0xac7a9f7972eb128062c9de2d1d3cb0d1082410618c6af715c374229fb2bcde85
Transfer
Transfer
50580025
2026-08-28 20:36:37
13 days ago
1787949397
0x81D7a918...6281cCC63
OUT
0x3C95d9e0...F4072B9F3
$702.20
0.2861105 ETH
0
.
00000015
0
.
0072
0x23ebdc048632575160e96aa11dcbd75c34487ba3b512c49389975e89d0416b29
Swap
Swap
50580017
2026-08-28 20:36:21
13 days ago
1787949381
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000348
0
.
015
0x4ade11e687c10adc391de82724400017b361d98ddb4e362349dabc74ea8787f4
Swap
Swap
50580015
2026-08-28 20:36:17
13 days ago
1787949377
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000387
0
.
015
0x8a44b2a7c925d61c25775d217b0fb51086ad19b5458827957054bb857df3cbad
Approve
Approve
50580015
2026-08-28 20:36:17
13 days ago
1787949377
0x81D7a918...6281cCC63
OUT
0xb2000000...d3823a701
$0.00
0 ETH
0
.
00000068
0
.
015
0x1be375dd3600c02f5f1d6383f3947ccb519c45990757523ed38cfee4daaa5267
Transfer
Transfer
50578018
2026-08-28 19:29:43
13 days ago
1787945383
0x3C954EdA...1a38BA9F3
IN
0x81D7a918...6281cCC63
$0.00
0.00000001 ETH
0
.
00000011
0
.
00502
0xa6872fd9f749677bc56e4aac76ecdf71cbfbfdf887287597548a5fecff9783b7
Transfer
Transfer
50577851
2026-08-28 19:24:09
13 days ago
1787945049
0x81D7a918...6281cCC63
OUT
0x3C95d9e0...F4072B9F3
$411.72
0.16775763 ETH
0
.
00000015
0
.
0072
0x46c10368941b20cdf6ebf2a89c95ec236b1b8f2c6a4efb3f0206076ea8c90bed
Swap
Swap
50577825
2026-08-28 19:23:17
13 days ago
1787944997
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000356
0
.
015
0x741b0162f6927f58cb720f258b6ba286ab96ccacdbcacf2084f229a2003d0181
Approve
Approve
50577825
2026-08-28 19:23:17
13 days ago
1787944997
0x81D7a918...6281cCC63
OUT
0xb2000000...d3823a701
$0.00
0 ETH
0
.
00000068
0
.
015
0x289936f323e4d9bedf11567953202b0f2468966745c2e8d5944c64de7241e4d6
Swap
Swap
50577822
2026-08-28 19:23:11
13 days ago
1787944991
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000356
0
.
015
0x9125ab902ccc3b062f3d8e2d0ab1553563165256865d309aa85bd51fbfa651e0
Approve
Approve
50577822
2026-08-28 19:23:11
13 days ago
1787944991
0x81D7a918...6281cCC63
OUT
0xb2000000...d3823a701
$0.00
0 ETH
0
.
00000068
0
.
015
0xdb6b410b5f074cd287cfbe90a3101444a9316d04ad2ecd996b8cac053bc546d5
Deposit Native
Bridge
50573443
2026-08-28 16:57:13
13 days ago
1787936233
0x81D7a918...6281cCC63
OUT
Relay: Depository
$4,739.95
1.9313 ETH
0
.
00000015
0
.
00601
0x046ff3077be081227f3c7822603f7b90a652cb3b5fdfbf8acd448f22230258ee
Transfer
Transfer
50573439
2026-08-28 16:57:05
13 days ago
1787936225
0x126d602E...15E394d01
IN
0x81D7a918...6281cCC63
$1,011.33
0.41206853 ETH
0
.
00000015
0
.
0072
0x69c181e5712ef6729fdd683fbc525a5a4fc8284eb5f04a5488f170dedf4c4a46
Transfer
Transfer
50573439
2026-08-28 16:57:05
13 days ago
1787936225
0x3C95d9e0...F4072B9F3
IN
0x81D7a918...6281cCC63
$1,420.88
0.5789387 ETH
0
.
00000015
0
.
0072
0x22b8e559aaf3a4747fcfa65a828af909ddfc5dc64e7d937a432b0b602acf6e7c
Transfer
Transfer
50573439
2026-08-28 16:57:05
13 days ago
1787936225
0xd38F1594...74b432992
IN
0x81D7a918...6281cCC63
$1,393.08
0.56761155 ETH
0
.
00000015
0
.
0072
0x39605fa1b9cfe11afb19b5bac38cd7b3680ede5dc67a5414055fda5d907cdd42
Swap
Swap
50571477
2026-08-28 15:51:41
13 days ago
1787932301
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000629
0
.
01500645
0x2956fda53e47f7f4b58019467d8704848c2ba985e8ccdbea5b0d0b8efb811d4e
Approve
Approve
50571477
2026-08-28 15:51:41
13 days ago
1787932301
0x81D7a918...6281cCC63
OUT
0xB2000000...58e1F8201
$0.00
0 ETH
0
.
00000068
0
.
01500645
0xa30d67b8b5cbde945e2dafe933a17f6dfa264d1d703c3e6dfa5987dcfd5acc33
Swap
Swap
50571403
2026-08-28 15:49:13
13 days ago
1787932153
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$98.17
0.04 ETH
0
.
00000631
0
.
015
0xfe00dbaca2efd896a14ec2d8f22ff8861cebcb8abdb62f1e71518e0d8b8e1ea1
Swap
Swap
50571398
2026-08-28 15:49:03
13 days ago
1787932143
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$98.17
0.04 ETH
0
.
00000814
0
.
015
0x742c4aec599c0b338f3c3e705fbf2dcf3b520ee4eaabc0b1fea4f6db0000b25d
Transfer*
Transfer*
50570912
2026-08-28 15:32:51
13 days ago
1787931171
Relay: Solver
IN
0x81D7a918...6281cCC63
$815.22
0.3321614 ETH
0
.
00000013
0
.
006
0x724be89f808ba8513c1cba858d0053eb0fd1583703e9661b0d4062bb57ccb0d1
Swap
Swap
50570534
2026-08-28 15:20:15
13 days ago
1787930415
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000359
0
.
01545471
0x8ee484ea20a60f9c7c0f0b3d5da925e210c97ade99d36a510685eafc5397123a
Swap
Swap
50570532
2026-08-28 15:20:11
13 days ago
1787930411
0x81D7a918...6281cCC63
OUT
0xd8Ba9D1a...8A194a4E2
$0.00
0 ETH
0
.
00000401
0
.
01549342
0x5c2bedf92fe6abbf469a7685ff9645e7edc9d314eac30d516b6e29401736e1b1
Approve
Approve
50570532
2026-08-28 15:20:11
13 days ago
1787930411
0x81D7a918...6281cCC63
OUT
0xB2000000...8d67d20f2
$0.00
0 ETH
0
.
00000071
0
.
01549342
View all transactions
Latest 17 internal transactions
Download Page Data
Parent Transaction Hash
Block
From
To
0xa26a19055b11e2875d74bc8110c0dfaaad48cab8b553c0eaa3817ba0e447c20e
50612911
2026-08-29 14:52:49
12 days ago
1788015169
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.21807343 ETH
$535.21
0x03e2aceeba47671451e4f562c41990e36bb07f0d26ac48851e591dbbb0f83a3c
50612781
2026-08-29 14:48:29
12 days ago
1788014909
0xEa288B06...A7278D003
0x81D7a918...6281cCC63
0.0053239 ETH
$13.07
0x23ebdc048632575160e96aa11dcbd75c34487ba3b512c49389975e89d0416b29
50580017
2026-08-28 20:36:21
13 days ago
1787949381
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.22717682 ETH
$557.56
0x4ade11e687c10adc391de82724400017b361d98ddb4e362349dabc74ea8787f4
50580015
2026-08-28 20:36:17
13 days ago
1787949377
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.2071887 ETH
$508.50
0x46c10368941b20cdf6ebf2a89c95ec236b1b8f2c6a4efb3f0206076ea8c90bed
50577825
2026-08-28 19:23:17
13 days ago
1787944997
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.09281031 ETH
$227.78
0x289936f323e4d9bedf11567953202b0f2468966745c2e8d5944c64de7241e4d6
50577822
2026-08-28 19:23:11
13 days ago
1787944991
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.1335726 ETH
$327.82
0x39605fa1b9cfe11afb19b5bac38cd7b3680ede5dc67a5414055fda5d907cdd42
50571477
2026-08-28 15:51:41
13 days ago
1787932301
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.04084198 ETH
$100.24
0x724be89f808ba8513c1cba858d0053eb0fd1583703e9661b0d4062bb57ccb0d1
50570534
2026-08-28 15:20:15
13 days ago
1787930415
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.07121315 ETH
$174.78
0x8ee484ea20a60f9c7c0f0b3d5da925e210c97ade99d36a510685eafc5397123a
50570532
2026-08-28 15:20:11
13 days ago
1787930411
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.07513677 ETH
$184.41
0x087a7ab9e1ec7583a38d1c748869d81e22d36e881fb63c1a2512d37919265a52
50570335
2026-08-28 15:13:37
13 days ago
1787930017
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.17583415 ETH
$431.55
0x77d4be136b14016a648951011d7c6d1120728b8efeabaf821376f6095344bd6c
50530929
2026-08-27 17:20:05
14 days ago
1787851205
0xEa288B06...A7278D003
0x81D7a918...6281cCC63
0.34188285 ETH
$839.08
0x3c01390e2e7f74a8710b725af030c64e48f63d725b01133d284ff5659c240ded
50527031
2026-08-27 15:10:09
14 days ago
1787843409
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.04972235 ETH
$122.03
0xeabc77323c46fadb169629d6660183f3c1b55c92b110fcfae4de61a1772a7e00
50527021
2026-08-27 15:09:49
14 days ago
1787843389
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.06268762 ETH
$153.85
0x117b60b960e83c876c658cfd2654dfaedf05852912109b50ed35be9bf9acafb9
50527017
2026-08-27 15:09:41
14 days ago
1787843381
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.05321701 ETH
$130.61
0x5e429d9da68e17d0bb85221736c27d475672d915d08e19a3c338135441136357
50501185
2026-08-27 0:48:37
15 days ago
1787791717
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.06642562 ETH
$163.03
0x00bec138c16216d0e1fc88d99d1a2d3bc938fa4b1d9e1eddd33eb952b62bed39
50496580
2026-08-26 22:15:07
15 days ago
1787782507
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.08293944 ETH
$203.56
0x10b2ab02e1ad9d83a67ca5655672be0ec8f4eea043ca11b4a81a0173a9d1cc67
50474050
2026-08-26 9:44:07
16 days ago
1787737447
0xd8Ba9D1a...8A194a4E2
0x81D7a918...6281cCC63
0.14266775 ETH
$350.15
Cross Chain Transactions
Cross-Chain Transactions
Loading...
Loading
API
Contract Name
0 ETH
Compiler Version
0
Optimization Enabled
0 ETH
Other Settings
-NA-
License
-NA-
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Transaction Hash
Block
Age
Implementation
Event
Status
Proxy Contract
Transaction Hash
Block
Age
Proxy Type
Block
Transaction
Difficulty
Gas Used
Reward
View All Blocks Produced
Block
Uncle Number
Difficulty
Gas Used
Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
Validator Index
Block
Amount
View All Withdrawals
Transaction Hash
Block
Value
Eth2 PubKey
Valid
View All Deposits
Multichain Portfolio
Tokens
NFTs
0x81D7a91860a70B312E68c075C896aA06281cCC63
Net Worth in USD
$54.96
Net Worth in ETH
0.022393
Token Allocations
SPCXB
20.82%
WBNB
19.47%
GMEB
12.96%
Others
46.75%
Multichain Portfolio
|
                                30 Chains
Display all chains
•
Last updated:
less than 1 sec ago
BNB Chain
(11)
$52
(95%)
Base
(1)
$1
(3%)
HyperEVM
(1)
0
(1%)
Ethereum
(1)
0
(1%)
Polygon
(0)
0
(0%)
Arbitrum One
(0)
0
(0%)
Optimism
(0)
0
(0%)
BTTC
(0)
0
(0%)
Celo
(0)
0
(0%)
Linea
(0)
0
(0%)
Avax C-Chain
(0)
0
(0%)
opBNB
(0)
0
(0%)
Fraxtal
(0)
0
(0%)
Blast
(0)
0
(0%)
Mantle
(0)
0
(0%)
Taiko
(0)
0
(0%)
World
(0)
0
(0%)
XDC
(0)
0
(0%)
Ape
(0)
0
(0%)
Unichain
(0)
0
(0%)
Berachain
(0)
0
(0%)
MemeCore
(0)
0
(0%)
Sonic
(0)
0
(0%)
Abstract
(0)
0
(0%)
Katana
(0)
0
(0%)
Sei
(0)
0
(0%)
Monad
(0)
0
(0%)
Plasma
(0)
0
(0%)
Stable
(0)
0
(0%)
MegaEth
(0)
0
(0%)
Show 28 more chains
Hide 28 chains
Tokens
Chain
Token
Portfolio %
Price
Amount
Value
BSC
SpaceX
(SPCXB)
20.82%
$149.14
0.0767
$11.44
BSC
Wrapped BNB
(WBNB)
19.47%
$711.68
0.015
$10.7
BSC
GameStop
(GMEB)
12.96%
$21.13
0.3371
$7.12
BSC
BNB
(BNB)
11.86%
$710.89
0.00917196
$6.52
BSC
NVIDIA Corp
(NVDAB)
6.03%
$220.09
0.0151
$3.31
BSC
Aster
(ASTER)
5.64%
$0.681235
4.5474
$3.1
BSC
SPY
(SPYB)
5.37%
$761.86
0.00387424
$2.95
BSC
Binance-Peg Litecoin Token
(LTC)
5.10%
$52.08
0.0538
$2.8
BSC
Trump Media & Technology Group Corp
(DJTB)
5.10%
$8.86
0.3162
$2.8
BSC
Pepe
(PEPE)
1.97%
$0.000003
335,983.0359
$1.09
BSC
Micron Technology Inc
(MUB)
0.99%
$983.16
0.00055624
$0.5468
BASE
Ether
(ETH)
2.65%
$2,454.28
0.00059286
$1.46
HYPEREVM
Hype
(HYPE)
1.15%
$78.79
0.00801856
$0.631744
ETH
Ether
(ETH)
0.89%
$2,453.85
0.0001984
$0.486847
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download:
CSV Export
]
[ Download:
CSV Export
]
A wallet address is a publicly available address that allows its owner to receive funds from another party. To access the funds in an address, you must have its private key. Learn more about addresses in our
Knowledge Base
.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addresses
Private Note:
A private note (up to 500 characters) can be attached to this address.
Please
DO NOT
store any passwords or private keys here.
View all Private Name Tags
Close
Save Changes
👋
Before You Continue...
📝
Connecting your wallet enables signing messages to verify ownership or signing messages to interact with smart contracts.
⚠️
This is provided as is, without guarantees or warranties of any kind.
💸
All interactions are at your own risk. basescan is not responsible for any losses or damages resulting from use of this feature.
🧠
Please ensure you understand what you're doing before continuing.
🔗
Learn more about
connecting your wallet on  basescan
.
Understand and Continue
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.
Coinbase Wallet
Rabby Wallet
MetaMask
WalletConnect (Reown)
Other Wallets
No wallet found
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.
Coinbase Wallet
Rabby Wallet
MetaMask
WalletConnect (Reown)
Other Wallets
No wallet found
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.
Coinbase Wallet
Rabby Wallet
MetaMask
WalletConnect (Reown)
Other Wallets
No wallet found
×
Before You Copy
Don't show this for 30 days
Understand, Copy Address
Transaction Private Note
Transaction Hash
Private Note Description
Please
DO NOT
store any passwords or private keys here. A private note (up to 100 characters) can be saved and is useful for transaction tracking.
View All Transactions Private Notes
Cancel
Save changes
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addresses
Private Note:
A private note (up to 500 characters) can be attached to this address. Please DO NOT store any passwords or private keys here.
View all Private Name Tags
Close
Save Changes
Back to Top
Powered By Base
Basescan is a Block Explorer and Analytics Platform for Base
Add Base Mainnet
Company
Brand Assets
Contact Us
Terms
&
Privacy
Bug Bounty
Community
API Documentation
Knowledge Base
Network Status
What is a Block Explorer?
Products & Services
Advertise
Explorer as a Service (EaaS)
Multichain API
Priority Support
Blockscan
BaseScan © 2026  (BASE-B1)
|
⛏ Built by Team
Etherscan
Donations:
0x71c765...d8976f
This website
uses cookies to improve your experience
. By continuing to use this website, you agree to its
Terms
and
Privacy Policy
.
Got it!
// Global HTML encoder for safe interpolation into template literals (text content AND attribute contexts).
        // Equivalent to server-side HttpUtility.HtmlEncode(). Use this instead of filterXSS() in template literals.
        function htmlEncode(str) { var s = (str == null) ? '' : String(str); return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#x27;'); }
var strSearchBoxSiteToken = 'ERC';

        (function () {
            // INITIALIZATION OF CLIPBOARD
            HSCore.components.HSClipboard.init('.js-clipboard');

            let searchAttributes = {
                'name': 'title',
                'img': 'img',
                'rate': 'rate',
                'address': 'address',
                'link': 'link',
                'group': 'group',
                'groupid': 'groupid',
                'website': 'website',
                'is_verified': 'is_checked',
                'ps': 'ps',
                'desc': 'desc',
                'reputation' : 'reputation',
                'icon': 'icon'
            }

            blockChainSearchInit({
                id: 'search-panel',
                attributes: searchAttributes
            });
        })();
$(window).on('load', function () {
            myfn_subscribeNewsletter.startFn("#btnSubscribeNewsletter", "#signupSrEmail")
        });

        $(document).on('ready', function () {

            // Get offset timezone of enduser and set to cookie
            const date = new Date();
            const offsetMinutes = date.getTimezoneOffset();
            const offsetHours = Math.abs(offsetMinutes / 60);
            const sign = offsetMinutes > 0 ? '-' : '+';
            offsetHoursFinal = sign + offsetHours;
            writeCookie(strSiteName + "_offset_datetime", offsetHoursFinal, 365);

            const clipboard = new ClipboardJS('.js-clipboard');
            clipboard.on('success', function (e) {
                let toolTip = bootstrap.Tooltip.getInstance(e.trigger);
                var oriTooltip = toolTip._config.originalTitle

                toolTip._config.title = 'Copied!';
                toolTip.setContent();
                toolTip.update();

                setTimeout(function () {
                    toolTip._config.title = oriTooltip;
                }, 1000);
            });
        });
var strSiteName = 'basescan';
        var sid = '84eec9da4c014cd949e19ac9aaf9f3e1';
        var strGlobal = getCookie(strSiteName + "_switch_age_datetime");
        var strGlobalFee = sessionStorage.getItem("ShowFee");
        var cookieconsent = getCookie(strSiteName + "_cookieconsent");
        var ignoreCopyConfirmation = getCopyAddressConfirmationSetting();
        var colorHyperLink = '#7342DC';

        
        if (cookieconsent !== "True" && document.getElementById("divcookie")) {
            document.getElementById("divcookie").style.display = "block";
        };
        

        var ace_editor_theme = 'ace/theme/dawn';
        var ace_editor_theme_dim = 'ace/theme/tomorrow_night_blue';
        var ace_editor_theme_dark = 'ace/theme/tomorrow_night';

        var chart_linear_gradient = "{ x1: 0, y1: 0, x2: 0, y2: 1 }";
        var chart_stops = "[ [0, Highcharts.getOptions().colors[0]], [1, Highcharts.color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')] ]";
        var chart_tooltip_color = "";
        var chart_point_color = "";
        var chart_series_color = "";

        function getCookie(cname) {
            var name = cname + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) === ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) === 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        }

        $("#btnCookie").click(function () {
            $("#divcookie").fadeOut("slow", function () {
                var d = new Date();
                d.setTime(d.getTime() + (1095 * 24 * 60 * 60 * 1000));
                var expires = "expires=" + d.toUTCString();
                document.cookie = strSiteName + "_cookieconsent=True" + ";" + expires + ";path=/";;
            });
        });

        function handleSearchText(data) {
            searchAddress = false;
            if ($("search-panel").val() == "") {
                $("#hdnSearchText").val("");
                $("#hdnSearchLabel").val("");
            }
        }

        function writeCookie(key, value, days) {
            var date = new Date();
            days = days || 365;
            date.setTime(+ date + (days * 86400000));
            window.document.cookie = key + "=" + value + "; expires=" + date.toGMTString() + "; path=/";
            return value;
        }

        function setThemeMode(mode) {
            writeCookie('displaymode', mode);
        }

        // Note: this function will be called from where need to init the "Copy Address Confirm Modal".
        function openCopyAddressConfirmModal(address, message) {
            $("#addressToCopy").text(address);
            $("#copyAddressConfirmMessage").text(message);

            const clipboard = new ClipboardJS("#btnConfirmCopyAddress");
            document.getElementById('copyAddressConfirmModal').addEventListener('hidden.bs.modal', event => {
                clipboard.destroy();
            });

            const copyAddressConfirmModal = new bootstrap.Modal('#copyAddressConfirmModal', {
                backdrop: true
            })
            copyAddressConfirmModal.show();
        }

        function saveCopyAddressConfirmationSetting(ignoreCopyConfirmation) {
            const copyAddressConfirmationSetting = {
                ignoreCopyConfirmation: ignoreCopyConfirmation,
                expiresOn: Date.now() + 1000 * 60 * 60 * 24 * 30
            };
            localStorage.setItem(strSiteName + "_copyAddressConfirmationSetting", JSON.stringify(copyAddressConfirmationSetting));
        }

        function getCopyAddressConfirmationSetting() {
            try {
                const settings = localStorage.getItem(strSiteName + "_copyAddressConfirmationSetting");
                if (settings) {
                    const copyAddressConfirmationSetting = JSON.parse(settings);

                    return copyAddressConfirmationSetting.ignoreCopyConfirmation && copyAddressConfirmationSetting.expiresOn > Date.now();
                }
                else {
                    return false;
                }
            } catch (e) {
                return false;
            }
        }
var eth;
        var objProvider
        var isTestnet = 'false';
        var SiteNetID = '8453';
        var SiteNetChainID = '0x2105';
        var SiteNetName = 'Base';
        var allowErc1155 = 'True';

        ListenProviderList();
        async function addNetwork(type) {

            if (type === 'web3') {
                if (typeof ethereum !== 'undefined') {
                    objProvider = await initweb3walletProvider("MetaMask");
                    eth = new Web3(objProvider.provider);
                } else if (typeof web3 !== 'undefined') {
                    eth = new Web3(web3.givenProvider);
                } else {
                    eth = new Web3(ethereum);
                }
            }

            if (typeof eth !== 'undefined') {
                var network = 0;
                network = await eth.eth.getChainId(); //await eth.eth.net.getId();
                netID = network.toString();
                var params;
                if (netID == SiteNetID) {
                    alert("Base Network has already been added to Metamask.");
                    return;
                } else {
                    params = [{
                        chainId: SiteNetChainID,
                        chainName: 'Base',
                        nativeCurrency: {
                            name: 'ETH',
                            symbol: 'ETH',
                            decimals: 18
                        },
                        rpcUrls: ['https://mainnet.base.org/'],
                        blockExplorerUrls: ['https://basescan.org']
                    }]
                }

                GeneralRequestWithProvider('wallet_addEthereumChain', params, eth.currentProvider)
                    .then(() => console.log('Success'))
                    .catch((error) => console.log("Error", error.message));
            } else {
                alert('Unable to locate a compatible web3 browser!');
            }
        }
var MaxLines = `0`;
        var blnCheckDisqusCount = `false`;
        var strURL = `//`;
        var litreadContractAddress = `0x81D7a91860a70B312E68c075C896aA06281cCC63`;
        var litLanguage = `en`;
        var litMinimalProxyImplementation = ``;
        var litContractABIAddressCode = ``;
        var litProxyContractABIAddress = ``;
        var litCustomContractABIAddress = ``;
        var strNetwork = `base`;
        var litCurrencyCode = `USD`;
        var LitAdvancedModeAvailable = `false`;
        var sid = `84eec9da4c014cd949e19ac9aaf9f3e1`;
        var addressType = 'EOA, EOAHighActivity';
        var litGotSafeLabel = '0';
        var isSignedIn = '0';
        function initPerpsTable() {
            if (!document.getElementById('perpsTable') || $.fn.dataTable.isDataTable('#perpsTable')) return;

            new DataTable('#perpsTable', {
                info: false,
                searching: false,
                ordering: false,
                pageLength: 10,
                lengthChange: true,
                paging: true,
                pagingType: 'full',
                dom: 't<\"perps-table-footer card-footer d-flex flex-wrap align-items-center justify-content-between gap-3\"lp>',
                language: {
                    paginate: {
                        next: '<i class=\"fa fa-chevron-right small\"></i>',
                        previous: '<i class=\"fa fa-chevron-left small\"></i>'
                    },
                    lengthMenu: 'Show rows: _MENU_'
                },
                drawCallback: function (settings) {
                    var tableWrapper = settings.nTableWrapper;
                    tableWrapper.classList.add('perps-table-wrapper');
                    var footer = tableWrapper.querySelector('.perps-table-footer');
                    var pagination = footer ? footer.querySelector('.dataTables_paginate') : null;
                    if (pagination) pagination.classList.add('perps-table-pagination');
                    if (footer) {
                        var lengthSelect = footer.querySelector('.dataTables_length select');
                        if (lengthSelect) {
                            lengthSelect.disabled = settings.fnRecordsDisplay() <= settings._iDisplayLength;
                            lengthSelect.className = 'form-select form-select-sm w-auto';
                        }
                        var lengthLabel = footer.querySelector('.dataTables_length label');
                        if (lengthLabel) lengthLabel.className = 'd-flex align-items-center gap-1 text-muted';
                    }
                }
            });
        }

        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', initPerpsTable);
        } else {
            initPerpsTable();
        }
var isLoadedSafeOwner = false;
        const ownersDropdownToggle = document.getElementById('ownersDropdown');
        if (ownersDropdownToggle) {
            const ownersDropdownTooltipTriggerEl = ownersDropdownToggle.parentElement;
            const ownersDropdownMainTooltip = bootstrap.Tooltip.getInstance(ownersDropdownTooltipTriggerEl) || new bootstrap.Tooltip(ownersDropdownTooltipTriggerEl);
            // When the dropdown is shown, hide and disable the main tooltip
            ownersDropdownToggle.addEventListener('show.bs.dropdown', function () {
                ownersDropdownMainTooltip.hide();
                ownersDropdownMainTooltip.disable();
            });
            // When the dropdown is hidden, enable back the main tooltip
            ownersDropdownToggle.addEventListener('hide.bs.dropdown', function () {
                ownersDropdownMainTooltip.enable();
            });
        }
        function myFnGetSafeOwner() {
            if (litGotSafeLabel == "1" && isLoadedSafeOwner == false) {
                $("#owner_container").html('<li><i class="fa fa-spin fa-spinner"></i></li>');
                isLoadedSafeOwner = true;
                $.ajax({
                    url: "/address.aspx/DoOwnersAddress",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify({
                        sid: sid,
                        strAddress: $("#hdnAddress").val()
                    }),
                    success: function (response) {
                        if (response && (response.d || !response.d.startsWith("Error"))) {
                            $("#owner_container").html(response.d);
                        } else if (response && response.d.startsWith("Error")) {
                            $("#owner_container").html("<li>Unexpected error</li>");
                        } else {
                            $("#owner_container").html("");
                        }

                        var ownersDropdownChildTooltipTriggerList = [].slice.call(document.querySelectorAll('#owner_container [data-bs-toggle="tooltip"]'));
                        var ownersDropdownChildTooltipList = ownersDropdownChildTooltipTriggerList.map(function (ownersDropdownChildTooltipTriggerEl) {
                            return new bootstrap.Tooltip(ownersDropdownChildTooltipTriggerEl);
                        });
                    },
                    error: function (xhr, status, error) {
                        $("#owner_container").html("<li>Unexpected error</li>");
                    }
                });
            }
        }

        // INITIALIZATION OF HIGHLIGHT
        TextHighlight.init('basescan');

        window.deposit_transfer_loaded = false;
        window.token_transfer_loaded = false;
        window.token_nft_transfer_loaded = false;
        window.authlist7702_loaded = false;
        window.analytics_loaded = false;
        window.loans_loaded = false;
        window.events_tracker = false;
        window.writeContractLoaded = false;
        window.readContractLoaded = false;
        window.writeProxyContractLoaded = false;
        window.readProxyContractLoaded = false;
        window.multipleProxyContractLoaded = false;
        window.multipleReadProxyContractLoaded = false;
        window.multipleWriteProxyContractLoaded = false;
        window.writeCustomContractLoaded = false;
        window.readCustomContractLoaded = false;
        window.rewardsLoaded = false;
        window.moreInfoLoaded = false;
        window.cards_loaded = false;
        window.mode = 'light';
        var iframeopt = {}

        function openWalletDisclaimerModal(opt) {
            iframeopt = opt
            $('#walletDisclaimerModal').modal('show');
        }
        function openAfterWalletDisclaimerModal() {
            if (iframeopt.source == "read") {
                try {
                    if (document.URL.indexOf('readProxyContract') != -1) {
                        openProxyModal("readproxycontractiframe");
                        document.getElementById("readContractMessageProxy").classList.add("d-flex");
                    }
                    else if (document.URL.indexOf('readCustomContract') != -1) {
                        openModal("readcustomcontractiframe");
                        var targetIframe = document.getElementById("readcustomcontractiframe");
                        document.getElementById("readContractMessage").classList.add("d-flex");
                        targetIframe.style.minHeight = '600px';
                    }
                    else {
                        var isInIFrame = (window.location != iframeopt.location);
                        if (isInIFrame) {
                            openModal("readcontractiframe");
                            var targetIframe = document.getElementById("readcontractiframe");
                            document.getElementById("readContractMessage").classList.add("d-flex");
                            targetIframe.style.minHeight = '600px';
                        } else {
                            $('#WalletModalProxyIframeNew').modal('show');
                        }
                    }
                } catch (err) { }
            } else if (iframeopt.source == "write") {
                try {
                    if (window.document.URL.indexOf('writeProxyContract') != -1) {
                        window.document.getElementById("readContractMessageProxy").classList.remove("d-flex");
                        openProxyModal("writeproxycontractiframe");
                    } else {
                        var isInIFrame = (window.location != iframeopt.location);
                        if (isInIFrame) {
                            openModal("writecontractiframe");
                            var targetIframe = window.document.getElementById("writecontractiframe")
                            targetIframe.style.minHeight = '600px';
                            window.document.getElementById("readContractMessage").classList.remove("d-flex");
                        } else {
                            $('#WalletModalProxyIframeNew').modal('show');
                        }
                    }
                } catch (err) { }
            } else if (iframeopt.source == "writecustom") {
                try {
                    var isInIFrame = (window.location != iframeopt.location);
                    if (isInIFrame) {
                        openCustomeContractModal("writecustomcontractiframe");
                        var targetIframe = window.document.getElementById("writecustomcontractiframe")
                        targetIframe.style.minHeight = '600px';
                        window.document.getElementById("readContractMessageCustomeContract").classList.remove("d-flex");
                    }
                } catch (err) { }
            } else if (iframeopt.source == "readmultiple") {
                try {
                    openProxyModal("multiplereadfacetiframe");
                } catch (err) { }
            } else if (iframeopt.source == "writemultiple") {
                try {
                    openProxyModal("multiplewritefacetiframe");
                } catch (err) { }
            }
        }
        function openModal(type) {
            var mtmStr = "document.getElementById('" + type + "').contentWindow.connectWeb3('web3')";
            $("#btnMetamask").attr("onClick", mtmStr)

            let walletConnectStr_reown = "walletConnect_reown('" + type + "')";
            $("#btnWalletConnect_reown").attr("onClick", walletConnectStr_reown);

            var coinbaseStr = "document.getElementById('" + type + "').contentWindow.connectWeb3('walletLink')";
            $("#btnCoinbaseWallet").attr("onClick", coinbaseStr);

            let rabbyWallet = "connectRabby('" + type + "')";
            $("#btnRabbyWallet").attr("onClick", rabbyWallet);

            let otherWallet = "switchReadWriteOtherWallet('" + type + "')";
            $("#btnOtherWallet").attr("onClick", otherWallet);

            $('#WalletModal').modal('show');
        }

        function closeModal() {
            $('#WalletModal').modal('hide');
        }

        function openProxyModal(type) {
            var mtmStr = "document.getElementById('" + type + "').contentWindow.connectWeb3('web3')";
            $("#btnMetamaskProxy").attr("onClick", mtmStr)

            let walletConnectStr_reown = "walletConnect_reown('" + type + "')";
            $("#btnWalletConnect_reownProxy").attr("onClick", walletConnectStr_reown);

            var coinbaseStr = "document.getElementById('" + type + "').contentWindow.connectWeb3('walletLink')";
            $("#btnCoinbaseWalletProxy").attr("onClick", coinbaseStr);

            let rabbyWallet = "connectRabby('" + type + "')";
            $("#btnRabbyWalletProxy").attr("onClick", rabbyWallet);

            let otherWallet = "switchProxyReadWriteOtherWallet('" + type + "')";
            $("#btnOtherWalletProxy").attr("onClick", otherWallet);

            $('#WalletModalProxyIframe').modal('show');
        }

        function openCustomeContractModal(type) {
            let mtmStr = "document.getElementById('" + type + "').contentWindow.connectWeb3('web3')";
            $("#btnMetamaskCustomeContract").attr("onClick", mtmStr)

            var walletConnectStr_reown = "walletConnect_reown('" + type + "')";
            $("#btnWalletConnect_reownCustomeContract").attr("onClick", walletConnectStr_reown);

            let coinbaseStr = "document.getElementById('" + type + "').contentWindow.connectWeb3('walletLink')";
            $("#btnCoinbaseWalletCustomeContract").attr("onClick", coinbaseStr);

            let rabbyWallet = "connectRabby('" + type + "')";
            $("#btnRabbyWalletProxyCustomeContract").attr("onClick", rabbyWallet);

            let otherWallet = "switchCustomReadWriteOtherWallet('" + type + "')";
            $("#btnOtherWalletProxyCustomeContract").attr("onClick", otherWallet);

            $('#WalletModalCustomeContractIframe').modal('show');
        }

        function closeProxyModal() {
            $('#WalletModalProxyIframe').modal('hide');
        }

        function closeCustomeContractModal() {
            $('#WalletModalCustomeContractIframe').modal('hide');
        }

        //------------ read write connect wallet ------------------------------------

        function switchReadWriteOtherWallet(type) {
            document.getElementById("readWriteWalletList").classList.add("d-none");
            document.getElementById("otherReadWriteWalletList").classList.remove("d-none");
            document.getElementById("readWriteBackButton").classList.remove("d-none");
            document.getElementById("readWriteBackButtonInfo").classList.remove("d-none");
            document.getElementById("exampleModalLabel").innerText = "Other Wallets";

            const searchInput = document.getElementById("otherReadWriteWalletSearch");
            searchInput.value = "";

            renderOtherReadWriteWalletList(type);
            filterOtherReadWriteWalletList();
            searchInput.focus();
        }

        function showReadWriteWalletList() {
            document.getElementById("readWriteWalletList").classList.remove("d-none");
            document.getElementById("otherReadWriteWalletList").classList.add("d-none");
            document.getElementById("readWriteBackButton").classList.add("d-none");
            document.getElementById("readWriteBackButtonInfo").classList.add("d-none");
            document.getElementById("exampleModalLabel").innerText = "Connect a Wallet";

            document.getElementById("otherReadWriteWalletSearch").value = "";
            document.getElementById("otherReadWriteWalletNoSearchResult").classList.add("d-none");
        }

        function renderOtherReadWriteWalletList(type) {
            const container = document.getElementById("otherReadWriteWalletContainer");
            const noSearchResult = document.getElementById("otherReadWriteWalletNoSearchResult");

            container.innerHTML = "";
            noSearchResult.classList.add("d-none");

            //list wallet to filter out
            const excludedWallets = ["Rabby Wallet", "Coinbase Wallet", "MetaMask"];

            const uniqueProviders = [...new Map(providers.map(p => [p.info.name, p])).values()].filter(wallet => !excludedWallets.includes(wallet.info.name));

            if (uniqueProviders.length === 0) {
                container.innerHTML = '<div class="text-muted text-center py-3">No available wallet</div>';
                return;
            }

            uniqueProviders.forEach(wallet => {
                container.innerHTML += `
                <button type="button" data-wallet-name="${filterXSS(wallet.info.name.toLowerCase())}" onclick="connectOther('${filterXSS(type)}','${filterXSS(wallet.info.name)}')" class="btn btn-lg btn-wallet d-flex justify-content-between align-items-center w-100 p-3 mb-2">
                    <span class="text-dark">${filterXSS(wallet.info.name)}</span>
                    <img width="25" src="${filterXSS(wallet.info.icon)}" alt="${filterXSS(wallet.info.name)}">
                </button>
            `;
            });
        }


        function filterOtherReadWriteWalletList() {
            const searchInput = document.getElementById("otherReadWriteWalletSearch");
            const container = document.getElementById("otherReadWriteWalletContainer");
            const noSearchResult = document.getElementById("otherReadWriteWalletNoSearchResult");

            const keyword = searchInput.value.trim().toLowerCase();
            const buttons = container.querySelectorAll("button");

            let visibleCount = 0;

            buttons.forEach(btn => {
                const text = btn.textContent.toLowerCase();
                const walletName = (btn.getAttribute("data-wallet-name") || "").toLowerCase();

                const isMatch = text.includes(keyword) || walletName.includes(keyword);

                if (isMatch) {
                    btn.classList.remove("d-none");
                    btn.classList.add("d-flex");
                    visibleCount++;
                } else {
                    btn.classList.remove("d-flex");
                    btn.classList.add("d-none");
                }
            });

            const hasButtons = buttons.length > 0;
            noSearchResult.classList.toggle("d-none", !(hasButtons && visibleCount === 0));
        }

        document.getElementById("otherReadWriteWalletSearch").addEventListener("input", filterOtherReadWriteWalletList);



        const walletModal = document.getElementById('WalletModal');

        walletModal.addEventListener('hidden.bs.modal', function () {
            showReadWriteWalletList();
        });


        //----------------------------------------------

        //------------ proxy read write connect wallet ------------------------------------

        function switchProxyReadWriteOtherWallet(type) {
            document.getElementById("proxyReadWriteWalletList").classList.add("d-none");
            document.getElementById("otherProxyReadWriteWalletList").classList.remove("d-none");
            document.getElementById("proxyReadWriteBackButton").classList.remove("d-none");
            document.getElementById("proxyReadWriteBackButtonInfo").classList.remove("d-none");
            document.getElementById("ProxyModalLabel").innerText = "Other Wallets";

            const searchInput = document.getElementById("otherProxyReadWriteWalletSearch");
            searchInput.value = "";

            renderOtherProxyReadWriteWalletList(type);
            filterProxyOtherReadWriteWalletList();
            searchInput.focus();
        }

        function showProxyReadWriteWalletList() {
            document.getElementById("proxyReadWriteWalletList").classList.remove("d-none");
            document.getElementById("otherProxyReadWriteWalletList").classList.add("d-none");
            document.getElementById("proxyReadWriteBackButton").classList.add("d-none");
            document.getElementById("proxyReadWriteBackButtonInfo").classList.add("d-none");
            document.getElementById("ProxyModalLabel").innerText = "Connect a Wallet";

            document.getElementById("otherProxyReadWriteWalletSearch").value = "";
            document.getElementById("otherProxyReadWriteWalletNoSearchResult").classList.add("d-none");
        }

        function renderOtherProxyReadWriteWalletList(type) {
            const container = document.getElementById("otherProxyReadWriteWalletContainer");
            const noSearchResult = document.getElementById("otherProxyReadWriteWalletNoSearchResult");
            container.innerHTML = "";

            //list wallet to filter out
            const excludedWallets = ["Rabby Wallet", "Coinbase Wallet", "MetaMask"];

            const uniqueProviders = [...new Map(providers.map(p => [p.info.name, p])).values()].filter(wallet => !excludedWallets.includes(wallet.info.name));

            if (uniqueProviders.length === 0) {
                container.innerHTML = '<div class="text-muted text-center py-3">No available wallet</div>';
                return;
            }


            uniqueProviders.forEach(wallet => {
                container.innerHTML += `
                            <button type="button" data-wallet-name="${filterXSS(wallet.info.name.toLowerCase())}" onclick="connectOther('${filterXSS(type)}','${filterXSS(wallet.info.name)}')" class="btn btn-lg btn-wallet d-flex justify-content-between align-items-center w-100 p-3 mb-2">
                                <span class="text-dark">${filterXSS(wallet.info.name)}</span>
                                <img width="25" src="${filterXSS(wallet.info.icon)}" alt="${filterXSS(wallet.info.name)}">
                            </button>
                        `;
            });
        }

        function filterProxyOtherReadWriteWalletList() {
            const searchInput = document.getElementById("otherProxyReadWriteWalletSearch");
            const container = document.getElementById("otherProxyReadWriteWalletContainer");
            const noSearchResult = document.getElementById("otherProxyReadWriteWalletNoSearchResult");

            const keyword = searchInput.value.trim().toLowerCase();
            const buttons = container.querySelectorAll("button");

            let visibleCount = 0;

            buttons.forEach(btn => {
                const text = btn.textContent.toLowerCase();
                const walletName = (btn.getAttribute("data-wallet-name") || "").toLowerCase();

                const isMatch = text.includes(keyword) || walletName.includes(keyword);

                if (isMatch) {
                    btn.classList.remove("d-none");
                    btn.classList.add("d-flex");
                    visibleCount++;
                } else {
                    btn.classList.remove("d-flex");
                    btn.classList.add("d-none");
                }
            });

            const hasButtons = buttons.length > 0;
            noSearchResult.classList.toggle("d-none", !(hasButtons && visibleCount === 0));
        }

        document.getElementById("otherProxyReadWriteWalletSearch").addEventListener("input", filterProxyOtherReadWriteWalletList);

        const proxyWalletModal = document.getElementById('WalletModalProxyIframe');

        proxyWalletModal.addEventListener('hidden.bs.modal', function () {
            showProxyReadWriteWalletList();
        });
        //----------------------------------------------


        //------------ custom read write connect wallet ------------------------------------

        function switchCustomReadWriteOtherWallet(type) {
            document.getElementById("customReadWriteWalletList").classList.add("d-none");
            document.getElementById("otherCustomReadWriteWalletList").classList.remove("d-none");
            document.getElementById("customReadWriteBackButton").classList.remove("d-none");
            document.getElementById("customReadWriteBackButtonInfo").classList.remove("d-none");
            document.getElementById("CustomeContractModalLabel").innerText = "Other Wallets";

            const searchInput = document.getElementById("otherCustomReadWriteWalletSearch");
            searchInput.value = "";

            renderOtherCustomReadWriteWalletList(type);
            filterCustomOtherReadWriteWalletList();
            searchInput.focus();
        }

        function showCustomReadWriteWalletList() {
            document.getElementById("customReadWriteWalletList").classList.remove("d-none");
            document.getElementById("otherCustomReadWriteWalletList").classList.add("d-none");
            document.getElementById("customReadWriteBackButton").classList.add("d-none");
            document.getElementById("customReadWriteBackButtonInfo").classList.add("d-none");
            document.getElementById("CustomeContractModalLabel").innerText = "Connect a Wallet";

            document.getElementById("otherCustomReadWriteWalletSearch").value = "";
            document.getElementById("otherCustomReadWriteWalletNoSearchResult").classList.add("d-none");
        }

        function renderOtherCustomReadWriteWalletList(type) {
            const container = document.getElementById("otherCustomReadWriteWalletContainer");
            const noSearchResult = document.getElementById("otherCustomReadWriteWalletNoSearchResult");
            container.innerHTML = "";

            //list wallet to filter out
            const excludedWallets = ["Rabby Wallet", "Coinbase Wallet", "MetaMask"];

            const uniqueProviders = [...new Map(providers.map(p => [p.info.name, p])).values()].filter(wallet => !excludedWallets.includes(wallet.info.name));


            if (uniqueProviders.length === 0) {
                container.innerHTML = '<div class="text-muted text-center py-3">No available wallet</div>';
                return;
            }

            uniqueProviders.forEach(wallet => {
                container.innerHTML += `
                    <button type="button" data-wallet-name="${filterXSS(wallet.info.name.toLowerCase())}" onclick="connectOther('${filterXSS(type)}','${filterXSS(wallet.info.name)}')" class="btn btn-lg btn-wallet d-flex justify-content-between align-items-center w-100 p-3 mb-2">
                        <span class="text-dark">${filterXSS(wallet.info.name)}</span>
                        <img width="25" src="${filterXSS(wallet.info.icon)}" alt="${filterXSS(wallet.info.name)}">
                    </button>
                `;
            });
        }

        function filterCustomOtherReadWriteWalletList() {
            const searchInput = document.getElementById("otherCustomReadWriteWalletSearch");
            const container = document.getElementById("otherCustomReadWriteWalletContainer");
            const noSearchResult = document.getElementById("otherCustomReadWriteWalletNoSearchResult");

            const keyword = searchInput.value.trim().toLowerCase();
            const buttons = container.querySelectorAll("button");

            let visibleCount = 0;

            buttons.forEach(btn => {
                const text = btn.textContent.toLowerCase();
                const walletName = (btn.getAttribute("data-wallet-name") || "").toLowerCase();

                const isMatch = text.includes(keyword) || walletName.includes(keyword);

                if (isMatch) {
                    btn.classList.remove("d-none");
                    btn.classList.add("d-flex");
                    visibleCount++;
                } else {
                    btn.classList.remove("d-flex");
                    btn.classList.add("d-none");
                }
            });

            const hasButtons = buttons.length > 0;
            noSearchResult.classList.toggle("d-none", !(hasButtons && visibleCount === 0));
        }

        document.getElementById("otherCustomReadWriteWalletSearch").addEventListener("input", filterCustomOtherReadWriteWalletList);

        const customWalletModal = document.getElementById('WalletModalCustomeContractIframe');

        customWalletModal.addEventListener('hidden.bs.modal', function () {
            showCustomReadWriteWalletList();
        });
        //----------------------------------------------

        function resetPath() {
            window.location.href = "#auditReportId";
            var baseUrl = window.location.href.split('#')[0];
            history.replaceState("", document.title, baseUrl + '#' + 'code');
        }

        function walletConnect_reown(id) {
            var elem = document.getElementById(id);
            elem.contentWindow.connectWeb3('walletConnect_reown');
            elem.style.height = '750px';
        }

        function connectRabby(id) {
            var elem = document.getElementById(id);
            elem.contentWindow.connectWeb3('rabby');
            elem.style.height = '750px';
        }

        function connectOther(id, name) {
            var elem = document.getElementById(id);
            elem.contentWindow.connectWeb3(name, providers);
            elem.style.height = '750px';
        }

        function removeHeight() {
            var element = document.getElementById('writecontractiframe');
            element.style.removeProperty("min-height");
        }

        //editor 
        var editor_contractJsonData = '{}'
        var editor_activeFile = ''
        var editor_githubLink = ''
        EtherEditor.init({
            githubLink: editor_githubLink,
            container: document.getElementById('editor-1'),
            localFiles: editor_contractJsonData,
            activeFile: editor_activeFile
        });
        // endeditor 

        window.smoothScroll = function (target) {
            var scrollContainer = target;
            do { //find scroll container
                scrollContainer = scrollContainer.parentNode;
                if (!scrollContainer) return;
                scrollContainer.scrollTop += 1;
            } while (scrollContainer.scrollTop == 0);

            var targetY = 0;
            do { //find the top of target relatively to the container
                if (target == scrollContainer) break;
                targetY += target.offsetTop;
            } while (target = target.offsetParent);

            scroll = function (c, a, b, i) {
                i++; if (i > 30) return;
                c.scrollTop = a + (b - a) / 30 * i;
                setTimeout(function () { scroll(c, a, b, i); }, 20);
            }
            // start scrolling
            scroll(scrollContainer, scrollContainer.scrollTop, targetY - 50, 0);
        }

        function initialiseKeyupOnDocReady() {
            var input = document.getElementById("txtSearchContract");
            if (input) {
                input.addEventListener("keyup", function (event) {
                    var flag = false;
                    if (event.keyCode === 40 || event.keyCode === 13) { // On Enter Key Press or Down Arrow Press
                        searchContractNext();
                        flag = true;
                    } else if (event.keyCode === 38) { // On Up Arrow Press
                        searchContractPrevious();
                        flag = true;
                    }
                    if (!flag) {
                        searchContractOnThisPage();
                    }
                    if ($("#txtSearchContract").val().trim() === "") {
                        searchContractOnThisPage();
                    }
                });
            }

            var ctrlDown = false, ctrlKey = 17, cmdKey = 91, vKey = 86, cKey = 67;
            $(document).keydown(function (e) {
                if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true;
            }).keyup(function (e) {
                if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false;
            });

            // Document Ctrl + C/V 
            $(document).keydown(function (e) {
                //if (ctrlDown && (e.keyCode == cKey)) console.log("Document catch Ctrl+C");
                if (ctrlDown && (e.keyCode == vKey)) {
                    clearControls();
                }
            });
        }

        // ===== Domain Name warning messages
        const unicodeWarningMessage = 'The Domain Name tag for this address contains characters from more than one Unicode alphabet.';
        const zeroWidthWarningMessage = 'The Domain Name tag for this address contains hidden characters which may indicate a phishing attempt.';
        const ensNameProvider = '';
        const ensNameForkIconSrc = '';

        // ===== ENS name tag
        let otherENSNamesHtml = "";
        const ensDisplayName = '';
        const primaryDomainNameLabel = '';
        const ensOnL2Note = '';
        function initEnsNamePopOver() {
            //required to allow bootstrap popover to support table
            $.fn.popover.Constructor.Default.allowList.table = [];
            $.fn.popover.Constructor.Default.allowList.tr = [];
            $.fn.popover.Constructor.Default.allowList.td = [];
            $.fn.popover.Constructor.Default.allowList.th = [];
            $.fn.popover.Constructor.Default.allowList.div = [];
            $.fn.popover.Constructor.Default.allowList.tbody = [];
            $.fn.popover.Constructor.Default.allowList.thead = [];

            //whitelist my inline styling for bootstrap
            $.fn.popover.Constructor.Default.allowList['*'].push('style');

            let ensUnicodeWarningHtml = "";
            if ($("#hdnIsEnsContainUnicodeChars").val() == "true") {
                ensUnicodeWarningHtml =
                    `<div class='d-flex align-items-baseline gap-1'>
                        <i class='far fa-exclamation-triangle'></i>
                        
                        <span>${unicodeWarningMessage} Check the actual text at <a target='_blank' href='https://www.base.org/name/${$("#hdnEnsText").val()}'>BaseName</a>.</span>
                        
                    </div>`;
            }
            let ensZeroWidthWarningHtml = "";
            if ($("#hdnIsEnsContainZeroWidthChars").val() == "true") {
                ensZeroWidthWarningHtml =
                    `<div class='d-flex align-items-baseline gap-1'>
                        <i class='far fa-exclamation-triangle'></i>
                        
                        <span>${zeroWidthWarningMessage} Check the actual text at <a target='_blank' href='https://www.base.org/name/${$("#hdnEnsText").val()}'>BaseName</a>.</span>
                        
                    </div>`;
            }

            const ensOnL2NoteHtml = ensOnL2Note != "" ? `<li>${ensOnL2Note}</li>` : "";
            const contentHtml =
                `<div id='popover-ens-preview'>
                    <h5 class='fs-base fw-bold mb-4'>Additional Info</h5>
                    <div>
                        <h6 class='fs-sm mb-1'>Full Name:</h6>
                        <div id='fullEnsName' class='badge border text-dark fw-normal fs-sm rounded-pill d-inline-flex align-items-center gap-1 py-1'>
                            ${ensNameForkIconSrc}                            
                            <div id='divENSDisplayName'></div><span id='spanCopyENSAddress'></span>
                        </div>
                    </div>
                    <hr>
                    <div class='popOverEnsOwnedAddressTable'></div>
                    <hr>
                    <h6 class='fs-sm mb-1'>Note:</h6>
                    <ul class='list-xs-space ps-4 mb-2'>
                        <li>Name tag is displayed due to forward and reverse resolution. <a href='https://info.basescan.org/domain-names/' target='_blank' rel='nofollow'>Find out more</a>.</li>
                        <li>A Domain Name is not necessarily held by a person popularly associated with the name.</li>
                        ${ensOnL2NoteHtml}
                    </ul>
                    ${ensUnicodeWarningHtml}
                    ${ensZeroWidthWarningHtml}
                </div>`;

            $('#ensName').popover({
                html: true,
                content: contentHtml,
                trigger: 'manual',
                placement: 'right'
            });

            $('#ensName').click(function (event) {
                $("#udName").popover('hide')
                $("#ensName").popover('toggle');

                event.stopPropagation();
            });

            $('#ensName').on('shown.bs.popover', async () => {
                //disable tooltip when hovering over ens name in the main page
                $("[rel='tooltipEns']").each(function () {
                    $(this).tooltip('hide');
                    $(this).tooltip('disable');
                });

                //call ajax here to get result
                if (!otherENSNamesHtml) {

                    const resolvedAddressesModel = await getEnsResolvedAddress($("#hdnAddress").val(), primaryDomainNameLabel);

                    otherENSNamesHtml = generateEnsPopoverGrid(resolvedAddressesModel.d);
                    if (!otherENSNamesHtml) {
                        otherENSNamesHtml = "There are no other names resolving to this address."
                    }
                }
                $(".popOverEnsOwnedAddressTable").html(otherENSNamesHtml);

                $("#divENSDisplayName").html(ensDisplayName);

                // append more copy button for ENS
                let domainName = $("#hdnEnsText").val();
                const copyEnsButtonHtml = `<a class="js-clipboard link-secondary" href="javascript:;" data-clipboard-text="${domainName}" data-bs-toggle="tooltip" title="Copy Domain Name"
                                              data-hs-clipboard-options='{
                                                "type": "tooltip",
                                                "successText": "Copied!",
                                                "classChangeTarget": "#linkEns",
                                                "defaultClass": "fa-copy",
                                                "successClass": "fa-check"
                                              }'>
                                              <i id="linkEns" class="far fa-copy fa-fw"></i>
                                            </a>`;
                $("#spanCopyENSAddress").html(copyEnsButtonHtml);

                $("[data-bs-toggle='tooltip']").tooltip();
            });

            $('#ensName').on('hidden.bs.popover', () => {
                $("[rel='tooltipEns']").each(function () {
                    $(this).tooltip('enable');
                });
            });

            $('#ensName').on('hide.bs.popover', () => {
                $("[data-bs-toggle='tooltip']").tooltip('hide');
            });

            $(document).click(function (e) {
                const popoverElement = document.getElementById('popover-ens-preview');
                const popoverTrigger = document.getElementById('ensName');
                if (!popoverTrigger.contains(e.target) && (!popoverElement || !popoverElement.contains(e.target))) {
                    $("#ensName").popover('hide');
                }
            })
        }
        async function getEnsResolvedAddress(address, currentEnsText) {
            try {
                const requestModel = { "lookupAddress": address, "primaryDomainName": currentEnsText, "provider": ensNameProvider };
                const response = await $.ajax({
                    url: "/name-lookup-search.aspx/GetOtherDomainNameForAddress",
                    type: "POST",
                    contentType: "application/json",
                    dataType: "json",
                    data: JSON.stringify({ requestModel: requestModel })
                })

                return response;
            }
            catch {
                return "";
            }
        }
        function generateEnsPopoverGrid(model) {
            if (!model || model.DomainNames.length == 0) {
                return "";
            }

            let listOtherENSNames = "";
            model.DomainNames.forEach(x => listOtherENSNames += x.Name);

            let moreOtherENSNames = "";
            if (model.Total > 5) {
                moreOtherENSNames =
                    `<a class='d-block badge bg-light hover:bg-secondary border text-dark fw-normal text-truncate w-100 py-1.5'
                        target='_blank' href='/name-lookup-search?id=${$("#hdnAddress").val()}'>More
                        <i class='fa fa-arrow-right pos-top-n1 small ms-1'></i>
                    </a>`
            }

            const result =
                `<h6 class="fs-sm mb-1">Other names resolving to this address:</h6>
                <div class='grid-container'>
                    ${listOtherENSNames}
                    ${moreOtherENSNames}
                </div>`;

            return result;
        }


        // ===== UD name tag
        const displayUDName = '';
        const primaryUDName = '';
        const showUDPublicNote = 'false';

        let otherUDNamesHtml = "";
        function initUDNamePopOver() {
            //required to allow bootstrap popover to support table
            $.fn.popover.Constructor.Default.allowList.table = [];
            $.fn.popover.Constructor.Default.allowList.tr = [];
            $.fn.popover.Constructor.Default.allowList.td = [];
            $.fn.popover.Constructor.Default.allowList.th = [];
            $.fn.popover.Constructor.Default.allowList.div = [];
            $.fn.popover.Constructor.Default.allowList.tbody = [];
            $.fn.popover.Constructor.Default.allowList.thead = [];

            //allowList my inline styling for bootstrap
            $.fn.popover.Constructor.Default.allowList['*'].push('style')

            let unicodeWarningHtml = "";
            if ($("#hdnIsUDContainUnicodeChars").val() == "true") {
                unicodeWarningHtml =
                    `<div class="d-flex align-items-baseline gap-1">
                        <i class="far fa-exclamation-triangle"></i>
                        <span>${unicodeWarningMessage} Check the actual text at <a target='_blank' href='https://unstoppabledomains.com/search?searchTerm=${primaryUDName}'>Unstoppable Domains</a>.</span>
                    </div>`;
            }
            let zeroWidthWarningHtml = "";
            if ($("#hdnIsUDContainZeroWidthChars").val() == "true") {
                zeroWidthWarningHtml =
                    `<div class="d-flex align-items-baseline gap-1">
                        <i class="far fa-exclamation-triangle"></i>
                        <span>${unicodeWarningMessage} Check the actual text at <a target='_blank' href='https://unstoppabledomains.com/search?searchTerm=${primaryUDName}'>Unstoppable Domains</a>.</span>
                    </div>`;
            }
            const contentHtml =
                `<div class="popover-ud-preview">
                    <h5 class="fs-base fw-bold mb-4">Additional Info</h5>
                    <div>
                        <h6 class="fs-sm mb-1">Full Name:</h6>
                        <div id='fullUDName' class='badge border text-dark fw-normal fs-sm rounded-pill d-inline-flex align-items-center gap-1 py-1.5'>
                            <img class="filter-grayscale" src="/images/svg/brands/ud.svg" alt="Unstoppable Domains Name" width="15">
                            <div id='divDisplayUDName'></div>
                        </div>
                    </div>
                    <hr>
                    <div class='popoverUDNamesOwnedByAddress'></div>
                    <hr>
                    <h6 class="fs-sm mb-1">Note:</h6>
                    <ul class="list-xs-space ps-4 mb-2">
                         <li>Name tag is displayed due to forward and reverse resolution.
                            <a href="https://info.basescan.org/domain-names/" target="_blank" rel="nofollow">Find out more</a></li>
                        <li>A Domain Name is not necessarily held by a person popularly associated with the name.</li>
                        <li id='noteUD' style='display:none;'></li>
                    </ul>
                    ${unicodeWarningHtml}
                    ${zeroWidthWarningHtml}
                </div>`;

            $('#udName').popover({
                html: true,
                content: contentHtml,
                trigger: 'manual'
            });

            $('#udName').click(function (event) {
                $("#ensName").popover('hide');
                $("#udName").popover('toggle');

                event.stopPropagation();
            });

            $('#udName').on('shown.bs.popover', async () => {
                //disable tooltip when hovering over SID name in the main page
                $("[rel='tooltipUDName']").each(function () {
                    $(this).tooltip('hide');
                    $(this).tooltip('disable');
                });

                //call ajax here to get result
                if (!otherUDNamesHtml) {
                    const resolvedAddressesModel = await getUDNamesResolvedAddress($("#hdnAddress").val(), primaryUDName);

                    //format the ajax to otherUDNamesHtml
                    otherUDNamesHtml = generateUDPopoverGrid(resolvedAddressesModel.d);
                    if (!otherUDNamesHtml) {
                        otherUDNamesHtml = "There are no other names resolving to this address."
                    }
                }

                $(".popoverUDNamesOwnedByAddress").html(otherUDNamesHtml);

                $("#divDisplayUDName").html(displayUDName);
                if (showUDPublicNote == true) {
                    $("#noteUD").html('The Unstoppable Domains NFT is minted on the Ethereum blockchain. View and verify its details on <a target="_blank" href="https://etherscan.io/name-lookup-search?id=' + primaryUDName + '">Etherscan</a>.');
                    $("#noteUD").show();
                }
                $("[data-bs-toggle='tooltip']").tooltip();
            });

            $('#udName').on('hidden.bs.popover', () => {
                $("[rel='tooltipUDName']").each(function () {
                    $(this).tooltip('enable');
                });
            });

            $('#udName').on('hide.bs.popover', () => {
                $("[data-bs-toggle='tooltip']").tooltip('hide');
            });

            // Hide Unstoppable Domains Name popover when click outside the popover popup.
            $(document).click(function () {
                $("#udName").popover('hide')
            });
        }
        async function getUDNamesResolvedAddress(address, primaryUDName) {
            try {
                const requestModel = { "lookupAddress": address, "primaryDomainName": primaryUDName, "provider": "UD" };
                const response = await $.ajax({
                    url: "/name-lookup-search.aspx/GetOtherDomainNameForAddress",
                    type: "POST",
                    contentType: "application/json",
                    dataType: "json",
                    data: JSON.stringify({ requestModel: requestModel })
                })

                return response;
            } catch {
                return "";
            }
        }
        function generateUDPopoverGrid(model) {
            if (!model || model.DomainNames.length == 0) {
                return "";
            }

            let listOtherUDNames = "";
            model.DomainNames.forEach(x => listOtherUDNames += x.Name);

            let moreOtherUDNames = "";
            if (model.Total > 5) {
                moreOtherUDNames =
                    `<a target='_blank' href='/name-lookup-search?id=${$("#hdnAddress").val()}#udNamesResolveToAddressTab'
                        class='d-block badge bg-light hover:bg-secondary border text-dark fw-normal text-truncate w-100 py-1.5'>More
                        <i class='fa fa-arrow-right pos-top-n1 small ms-1'></i>
                    </a>`;
            }

            const result =
                `<h6 class="fs-sm mb-1">Other names resolving to this address:</h6>
                <div class='grid-container'>
                    ${listOtherUDNames}
                    ${moreOtherUDNames}
                </div>`;

            return result;
        }
        // ===== end UD name tag
        const tooltipForTokenHolding = '6 Token Contracts';
        var adjustPosition = 0;
        $(document).ready(function () {
            switchAmountToValue(document.getElementById("headerAmountValue"), 'Value (USD)', 'Amount', true);
            switchAmountToValue(document.getElementById("headerIntAmountValue"), 'Value (USD)', 'Amount', true);
            switchMethodColumn(document.getElementById("headerMethod"), 'Method', 'Action', true);

            onDocumentReady();
            $("[rel='tooltip']").tooltip();
            $("[data-bs-toggle-second='tooltip']").tooltip({ trigger: 'hover' });
            $("[rel='tooltipEns']").each(function () {
                $(this).tooltip({ title: $(this).attr("tooltip-title") });
            });

            

            if (hash != '') {
                activaTab(hash);
            };

            onAddressDocReady();
            initDustCopyWarning();

            // Note: this is causing "Copied" tooltip not showing when copy button is clicked in V3, and seems like not applicable to v3, comment out first in case there is issue
            //$('[data-bs-toggle="tooltip"]').click(function () {
            //    $('[data-bs-toggle="tooltip"]').tooltip("hide");
            //});

            document.getElementById("copyaddressbutton").classList.remove("disabled");

            if ($("#txtSearchContract").length) {
                initialiseKeyupOnDocReady();
            }

            if (!!$('#ensName')[0]) {
                initEnsNamePopOver();
            }
            if (!!$("#udName")[0]) {
                initUDNamePopOver();
            }

            if (window.matchMedia("(max-width: 767px)").matches) {
                // Mobile
                adjustPosition = 90;
            } else {
                // Others
                adjustPosition = 50;
            }

            if (tooltipForTokenHolding) {
                const dropdownMenuBalance = document.getElementById("dropdownMenuBalance");
                if (dropdownMenuBalance) {
                    const dropdownWrapper = dropdownMenuBalance.closest(".dropdown");
                    if (dropdownWrapper) {
                        dropdownWrapper.setAttribute("title", tooltipForTokenHolding);
                        new bootstrap.Tooltip(dropdownWrapper);
                    }
                }
            }
        });

        function displayAudit() {
            $('html, body').animate({
                scrollTop: $("#auditReportId").offset().top - adjustPosition
            });
        }

        var cThemeMode = getCookie('displaymode');

        // Bootstrap Dropdown in Table Responsive
        $('.table-responsive').on('shown.bs.dropdown', function (e) {
            var t = $(this),
                m = $(e.target).find('.dropdown-menu'),
                tb = t.offset().top + t.height(),
                mb = m.offset().top + m.outerHeight(true),
                d = 20; // Space for shadow + scrollbar.
            if (t[0].scrollWidth > t.innerWidth()) {
                if (mb + d > tb) {
                    t.css('padding-bottom', ((mb + d) - tb));
                }
            }
            else {
                t.css('overflow', 'visible');
            }
        }).on('hidden.bs.dropdown', function () {
            $(this).css({ 'padding-bottom': '', 'overflow': '' });
        });

        var btn_ERC20_sort = {
            count: 0,
            reminder_count: 2,
            list: [],
            default_list: [],
            ERC20_sort_start: function (count) {
                if (document.getElementsByClassName('list-custom-divider-ERC20')[0]) {
                    var self = this
                    if (count != undefined) {
                        self.count = count
                    }

                    var before_el = document.getElementsByClassName('list-custom-divider-ERC20')[0]
                    var parent_el = before_el.parentNode
                    var element_selector = parent_el.querySelectorAll(".list-custom-ERC20");

                    if (self.list.length == 0) {
                        element_selector.forEach(function (e) {
                            self.list.push(e);
                            self.default_list.push(e);
                        });
                    }

                    $(".list-custom-ERC20").remove()
                    var type = self.count % self.reminder_count
                    self.sortList(type, parent_el, before_el);
                    self.count++
                }
            },
            sortList: function (type, parent_el, before_el) {
                var self = this
                var sorted_list = []
                var icon_el = $(before_el).find('button').find('i')

                switch (type) {
                    case 1:
                        icon_el.attr("class", "fad fa-sort-up")
                        sorted_list = self.sortUsdAsc()
                        break;
                    default:
                        icon_el.attr("class", "fad fa-sort-down")
                        sorted_list = self.sortUsdDesc()
                }

                for (var i = sorted_list.length - 1; i >= 0; i--) {
                    before_el.insertAdjacentElement('afterend', sorted_list[i])
                }
            },
            sortUsdAsc: function () {
                var self = this
                var sort_list = self.list

                sort_list.sort(function (a, b) {
                    var target_a_value = self.formatCurrencyToNumber(a.querySelector('.list-usd-value').textContent.trim() || -1);
                    var target_b_value = self.formatCurrencyToNumber(b.querySelector('.list-usd-value').textContent.trim() || -1);

                    if (target_a_value == -1 || target_b_value == -1) {
                        return 1;
                    }
                    if (target_a_value < target_b_value) {
                        return -1;
                    }
                    if (target_a_value > target_b_value) {
                        return 1;
                    }
                    return 0
                });
                return sort_list
            },
            sortUsdDesc: function () {
                var self = this
                var sort_list = self.list

                sort_list.sort(function (a, b) {
                    var target_a_value = self.formatCurrencyToNumber(a.querySelector('.list-usd-value').textContent.trim() || -1);
                    var target_b_value = self.formatCurrencyToNumber(b.querySelector('.list-usd-value').textContent.trim() || -1);

                    if (target_a_value < target_b_value) {
                        return 1;
                    }
                    if (target_a_value > target_b_value) {
                        return -1;
                    }
                    return 0
                });
                return sort_list
            },
            formatCurrencyToNumber: function (strCurrency) {
                if (typeof strCurrency == "number")
                    return strCurrency
                else
                    return Number(strCurrency.replace(/[^0-9.-]+/g, ""));
            },
        }

        function hrefTokenHolding() {
            var location = "/tokenholdings?a=0x81D7a91860a70B312E68c075C896aA06281cCC63"
            var queryString = $("input.form-control.form-control-xs.search.mb-3")[0].value
            if (queryString) {
                location += "&q=" + queryString
            }
            window.location.href = location
        }

        let clipboardIgnoreConfirmation = null;
        function setDustCopyWarningMode(ignoreConfirmation) {
            if (clipboardIgnoreConfirmation) {
                clipboardIgnoreConfirmation.destroy();
                clipboardIgnoreConfirmation = null;
            }
            $(".btn-show-copy-confirmation").off("click.dustCopyWarning");
            if (ignoreConfirmation) {
                clipboardIgnoreConfirmation = new ClipboardJS('.js-clipboard-required-confirmation');
                clipboardIgnoreConfirmation.on('success', function (e) {
                    $('.tooltip-inner').html('Copied!');
                    $(e.trigger).tooltip('update');
                });
            } else {
                $(".btn-show-copy-confirmation").on("click.dustCopyWarning", function () {
                    openCopyAddressConfirmModal($(this).data("address"), $(this).data("message"));
                });
            }
        }

        function initDustCopyWarning() {
            setDustCopyWarningMode(ignoreCopyConfirmation);
            $("#popupDontShowAgain")
                .off("change.dustCopyWarning")
                .on("change.dustCopyWarning", function (e) {
                    ignoreCopyConfirmation = e.currentTarget.checked;
                    saveCopyAddressConfirmationSetting(ignoreCopyConfirmation);
                    setDustCopyWarningMode(ignoreCopyConfirmation);
                });
        }

        $(document).ready(function () {

            $("#btn_ERC20_sort").on("click", function (event) {
                event.preventDefault();
                setTimeout(function () {
                    btn_ERC20_sort.ERC20_sort_start()
                }, 10)
            })

            btn_ERC20_sort.ERC20_sort_start()
            var mainAddress = $("#hdnAddress").val();

            // user search for method filters
            var searchFuncTimeOut;
            $("#ContentPlaceHolder1_inputMethodName").on("keyup", function ($event) {
                if (searchFuncTimeOut) {
                    clearTimeout(searchFuncTimeOut)
                }

                var searchTerm = $(this).val();
                searchFuncTimeOut = setTimeout(function () {
                    searchFunctions(searchTerm);
                }, 350);
            });

            var isSearchFunctions = false;
            $("#dropdownMethod").on("click", function (e) {
                if (isSearchFunctions === false) {
                    searchFunctions('');
                    isSearchFunctions = true;
                }
            });

            const litDefaultMethodFilterHtml = '';
            function searchFunctions(searchTerm) {
                if (searchTerm === '' || searchTerm.length > 3) {
                    const curPath = encodeURIComponent(window.location.search);
                    $.ajax({
                        type: 'Get',
                        url: `/functionSearchHandler.ashx?ca=${mainAddress}&func=${searchTerm ?? ''}&curPath=${curPath}`,
                        success: function (response) {
                            $("#searchFunctionResult").html('');
                            if (response && response.length > 0) {
                                for (var i = 0; i < response.length; i++) {
                                    var path = response[i].path
                                    $("#searchFunctionResult").append(
                                        `<li class="nav-item aFilterTransfer" data-name="${response[i].nameNormalized}" data-methodid="${response[i].methodId}">
											<a class="nav-link d-flex justify-content-between gap-2 px-2" href="${path}">
												<span class="hash-tag text-truncate" data-bs-toggle="tooltip" data-bs-title="${response[i].name}">${response[i].name}</span>
												<span class="badge bg-light border text-dark fw-normal p-1">${response[i].methodId}</span>
											</a>
										</li>`
                                    );
                                }
                                $("[data-bs-toggle='tooltip']").tooltip();
                            }
                            else {
                                $("#searchFunctionResult").append(
                                    `<li class="nav-item notfound">
                                        <span class="fw-normal text-muted">No matching name or ID found.</span>
                                    </li>`
                                );
                            }
                            $("#inputMethodSpinner").hide();
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $("#searchFunctionResult").html('');
                            $("#inputMethodSpinner").hide();
                        }
                    });
                } else {
                    $("#inputMethodSpinner").hide();
                    $("#searchFunctionResult").html(litDefaultMethodFilterHtml);
                }
            }

            // Resize window for analytic tab
            let isBusy = false;
            $(window).resize(function () {
                isBusy = true;
                if (isBusy) {
                    let analyticFrame = document.getElementById('analytics_pageiframe');
                    if (analyticFrame && analyticFrame.contentWindow != undefined) {
                        let navtab = analyticFrame.contentWindow.document.getElementsByClassName("nav_tabs1");
                        let hIframe = "0px";
                        if (navtab != null && navtab != undefined && navtab.length > 0) {
                            let navH = Number(navtab[0].scrollHeight);
                            hIframe = (Number(analyticFrame.contentWindow.document.getElementsByClassName("tab-content")[0].scrollHeight) + navH + 20) + 'px';
                        }
                        else {
                            hIframe = analyticFrame.contentWindow.document.body.scrollHeight + 'px';
                        }
                        analyticFrame.style.height = hIframe
                    }
                }
            });


            // detect tooltip for token holding dropdown
            if ($(".addresses-tooltip-over").length > 0) {
                if (!isMobile()) {
                    $(".addresses-tooltip-over").attr("data-bs-trigger", "hover");
                    let tooltip = bootstrap.Tooltip.getInstance(".addresses-tooltip-over");
                    if (tooltip !== null) {
                        tooltip.dispose();
                        tooltip = new bootstrap.Tooltip($(".addresses-tooltip-over"));
                        tooltip._config.trigger = 'hover';
                        tooltip.update();
                    }
                }
            }

            // Quick export transaction csv
            const quickExportCsvData = '[{"Txhash":"0x6023dd6c1dc4a06a7c8b9c264367c3d0dc8e681e04d5ecf8933a08e9e4afb732","Status":"Success","Method":"Bridge","Blockno":"50615138","DateTime":"2026-08-29 16:07:03","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0x4cD00E387622C35bDDB9b4c962C136462338BC31","ReceiverLable":"Relay: Depository","Amount":"0.223 ETH","Value":"$547.30","TxnFee":"0.00000014"},{"Txhash":"0xa26a19055b11e2875d74bc8110c0dfaaad48cab8b553c0eaa3817ba0e447c20e","Status":"Success","Method":"Swap","Blockno":"50612911","DateTime":"2026-08-29 14:52:49","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000348"},{"Txhash":"0xbbbfb63e94251251dd787f9e7ebac6b86c446ab1e7e6e241876221874ae92f3c","Status":"Success","Method":"Approve","Blockno":"50612911","DateTime":"2026-08-29 14:52:49","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xB2000000000000000000005eD1a7DEff6959DF01","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000068"},{"Txhash":"0xac7a9f7972eb128062c9de2d1d3cb0d1082410618c6af715c374229fb2bcde85","Status":"Success","Method":"Transfer","Blockno":"50580025","DateTime":"2026-08-28 20:36:37","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0x3C95d9e0F76e08cD9a6cb5c7dB508c4F4072B9F3","ReceiverLable":null,"Amount":"0.2861105 ETH","Value":"$702.20","TxnFee":"0.00000015"},{"Txhash":"0x23ebdc048632575160e96aa11dcbd75c34487ba3b512c49389975e89d0416b29","Status":"Success","Method":"Swap","Blockno":"50580017","DateTime":"2026-08-28 20:36:21","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000348"},{"Txhash":"0x4ade11e687c10adc391de82724400017b361d98ddb4e362349dabc74ea8787f4","Status":"Error in Main Txn : execution reverted","Method":"Swap","Blockno":"50580015","DateTime":"2026-08-28 20:36:17","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000387"},{"Txhash":"0x8a44b2a7c925d61c25775d217b0fb51086ad19b5458827957054bb857df3cbad","Status":"Success","Method":"Approve","Blockno":"50580015","DateTime":"2026-08-28 20:36:17","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xb2000000000000000000009fc0e6E7Fd3823a701","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000068"},{"Txhash":"0x1be375dd3600c02f5f1d6383f3947ccb519c45990757523ed38cfee4daaa5267","Status":"Success","Method":"Transfer","Blockno":"50578018","DateTime":"2026-08-28 19:29:43","Sender":"0x3C954EdA2c6ddF3236009C9c81Bcf281a38BA9F3","SenderLable":null,"Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":null,"Amount":"0.00000001 ETH","Value":"$0.00","TxnFee":"0.00000011"},{"Txhash":"0xa6872fd9f749677bc56e4aac76ecdf71cbfbfdf887287597548a5fecff9783b7","Status":"Success","Method":"Transfer","Blockno":"50577851","DateTime":"2026-08-28 19:24:09","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0x3C95d9e0F76e08cD9a6cb5c7dB508c4F4072B9F3","ReceiverLable":null,"Amount":"0.16775763 ETH","Value":"$411.72","TxnFee":"0.00000015"},{"Txhash":"0x46c10368941b20cdf6ebf2a89c95ec236b1b8f2c6a4efb3f0206076ea8c90bed","Status":"Success","Method":"Swap","Blockno":"50577825","DateTime":"2026-08-28 19:23:17","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000356"},{"Txhash":"0x741b0162f6927f58cb720f258b6ba286ab96ccacdbcacf2084f229a2003d0181","Status":"Success","Method":"Approve","Blockno":"50577825","DateTime":"2026-08-28 19:23:17","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xb2000000000000000000009fc0e6E7Fd3823a701","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000068"},{"Txhash":"0x289936f323e4d9bedf11567953202b0f2468966745c2e8d5944c64de7241e4d6","Status":"Success","Method":"Swap","Blockno":"50577822","DateTime":"2026-08-28 19:23:11","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000356"},{"Txhash":"0x9125ab902ccc3b062f3d8e2d0ab1553563165256865d309aa85bd51fbfa651e0","Status":"Success","Method":"Approve","Blockno":"50577822","DateTime":"2026-08-28 19:23:11","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xb2000000000000000000009fc0e6E7Fd3823a701","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000068"},{"Txhash":"0xdb6b410b5f074cd287cfbe90a3101444a9316d04ad2ecd996b8cac053bc546d5","Status":"Success","Method":"Bridge","Blockno":"50573443","DateTime":"2026-08-28 16:57:13","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0x4cD00E387622C35bDDB9b4c962C136462338BC31","ReceiverLable":"Relay: Depository","Amount":"1.9313 ETH","Value":"$4,739.95","TxnFee":"0.00000015"},{"Txhash":"0x046ff3077be081227f3c7822603f7b90a652cb3b5fdfbf8acd448f22230258ee","Status":"Success","Method":"Transfer","Blockno":"50573439","DateTime":"2026-08-28 16:57:05","Sender":"0x126d602E005736C222a1D915754824415E394d01","SenderLable":null,"Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":null,"Amount":"0.41206853 ETH","Value":"$1,011.33","TxnFee":"0.00000015"},{"Txhash":"0x69c181e5712ef6729fdd683fbc525a5a4fc8284eb5f04a5488f170dedf4c4a46","Status":"Success","Method":"Transfer","Blockno":"50573439","DateTime":"2026-08-28 16:57:05","Sender":"0x3C95d9e0F76e08cD9a6cb5c7dB508c4F4072B9F3","SenderLable":null,"Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":null,"Amount":"0.5789387 ETH","Value":"$1,420.88","TxnFee":"0.00000015"},{"Txhash":"0x22b8e559aaf3a4747fcfa65a828af909ddfc5dc64e7d937a432b0b602acf6e7c","Status":"Success","Method":"Transfer","Blockno":"50573439","DateTime":"2026-08-28 16:57:05","Sender":"0xd38F1594fD327c898BEd22A81fD755174b432992","SenderLable":null,"Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":null,"Amount":"0.56761155 ETH","Value":"$1,393.08","TxnFee":"0.00000015"},{"Txhash":"0x39605fa1b9cfe11afb19b5bac38cd7b3680ede5dc67a5414055fda5d907cdd42","Status":"Success","Method":"Swap","Blockno":"50571477","DateTime":"2026-08-28 15:51:41","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000629"},{"Txhash":"0x2956fda53e47f7f4b58019467d8704848c2ba985e8ccdbea5b0d0b8efb811d4e","Status":"Success","Method":"Approve","Blockno":"50571477","DateTime":"2026-08-28 15:51:41","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xB200000000000000000000AaC21C7Db58e1F8201","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000068"},{"Txhash":"0xa30d67b8b5cbde945e2dafe933a17f6dfa264d1d703c3e6dfa5987dcfd5acc33","Status":"Success","Method":"Swap","Blockno":"50571403","DateTime":"2026-08-28 15:49:13","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0.04 ETH","Value":"$98.17","TxnFee":"0.00000631"},{"Txhash":"0xfe00dbaca2efd896a14ec2d8f22ff8861cebcb8abdb62f1e71518e0d8b8e1ea1","Status":"Success","Method":"Swap","Blockno":"50571398","DateTime":"2026-08-28 15:49:03","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0.04 ETH","Value":"$98.17","TxnFee":"0.00000814"},{"Txhash":"0x742c4aec599c0b338f3c3e705fbf2dcf3b520ee4eaabc0b1fea4f6db0000b25d","Status":"Success","Method":"Transfer*","Blockno":"50570912","DateTime":"2026-08-28 15:32:51","Sender":"0xf70da97812CB96acDF810712Aa562db8dfA3dbEF","SenderLable":"Relay: Solver","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":null,"Amount":"0.3321614 ETH","Value":"$815.22","TxnFee":"0.00000013"},{"Txhash":"0x724be89f808ba8513c1cba858d0053eb0fd1583703e9661b0d4062bb57ccb0d1","Status":"Success","Method":"Swap","Blockno":"50570534","DateTime":"2026-08-28 15:20:15","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000359"},{"Txhash":"0x8ee484ea20a60f9c7c0f0b3d5da925e210c97ade99d36a510685eafc5397123a","Status":"Error in Main Txn : execution reverted","Method":"Swap","Blockno":"50570532","DateTime":"2026-08-28 15:20:11","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000401"},{"Txhash":"0x5c2bedf92fe6abbf469a7685ff9645e7edc9d314eac30d516b6e29401736e1b1","Status":"Success","Method":"Approve","Blockno":"50570532","DateTime":"2026-08-28 15:20:11","Sender":"0x81D7a91860a70B312E68c075C896aA06281cCC63","SenderLable":null,"Receiver":"0xB2000000000000000000002AfEE65628d67d20f2","ReceiverLable":null,"Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000071"}]';
            const quickExportCsvTitle = 'Transaction Hash,Status,Method,Blockno,"DateTime (UTC)",From,From_Nametag,To,To_Nametag,Amount,Value (USD),Txn Fee';
            let isExportFinish = true;
            if ($("#btnExportQuickTableToCSV").length > 0 && quickExportCsvData) {
                $("#btnExportQuickTableToCSV").click(function () {
                    if (isExportFinish == true) {
                        isExportFinish = false;
                        $("#btnExportQuickTableToCSV").append('<i class="fa fa-spinner fa-spin ms-1"></i>');
                        let lstTxsObj = JSON.parse(quickExportCsvData);
                        if (lstTxsObj.length > 0) {
                            let csvRows = [];
                            csvRows.push(quickExportCsvTitle.replace(/"/g, ""));
                            for (let i = 0; i < lstTxsObj.length; i++) {
                                let values = Object.values(lstTxsObj[i]).join('2SL'); // 2SL : separate line
                                values = values.replace(/2SL/g, '","')
                                csvRows.push('"' + values + '"');
                            }
                            let data = csvRows.join('\n');
                            let fileName = "export-" + $.trim($("#hdnAddress").val());
                            const blob = new Blob(["\ufeff", data], { type: 'text/csv' });
                            const url = window.URL.createObjectURL(blob)
                            const a = document.createElement('a')
                            a.setAttribute('href', url)
                            a.setAttribute('download', fileName + '.csv');
                            a.click();
                            setTimeout(function () {
                                $("#btnExportQuickTableToCSV").find(".fa-spinner").remove();
                                isExportFinish = true;
                            }, 200);
                        }
                    }
                });
            }

            // Quick export internal transaction csv
            const quickExportInternalTxsData = '[{"ParentTxnHash":"0xa26a19055b11e2875d74bc8110c0dfaaad48cab8b553c0eaa3817ba0e447c20e","Status":"Success","Blockno":"50612911","DateTime":"2026-08-29 14:52:49","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.21807343 ETH","Value":"$535.21"},{"ParentTxnHash":"0x03e2aceeba47671451e4f562c41990e36bb07f0d26ac48851e591dbbb0f83a3c","Status":"Success","Blockno":"50612781","DateTime":"2026-08-29 14:48:29","Sender":"0xEa288B066D11B13F4FEBEA757100f47A7278D003","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.0053239 ETH","Value":"$13.07"},{"ParentTxnHash":"0x23ebdc048632575160e96aa11dcbd75c34487ba3b512c49389975e89d0416b29","Status":"Success","Blockno":"50580017","DateTime":"2026-08-28 20:36:21","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.22717682 ETH","Value":"$557.56"},{"ParentTxnHash":"0x4ade11e687c10adc391de82724400017b361d98ddb4e362349dabc74ea8787f4","Status":"Error","Blockno":"50580015","DateTime":"2026-08-28 20:36:17","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.2071887 ETH","Value":"$508.50"},{"ParentTxnHash":"0x46c10368941b20cdf6ebf2a89c95ec236b1b8f2c6a4efb3f0206076ea8c90bed","Status":"Success","Blockno":"50577825","DateTime":"2026-08-28 19:23:17","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.09281031 ETH","Value":"$227.78"},{"ParentTxnHash":"0x289936f323e4d9bedf11567953202b0f2468966745c2e8d5944c64de7241e4d6","Status":"Success","Blockno":"50577822","DateTime":"2026-08-28 19:23:11","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.1335726 ETH","Value":"$327.82"},{"ParentTxnHash":"0x39605fa1b9cfe11afb19b5bac38cd7b3680ede5dc67a5414055fda5d907cdd42","Status":"Success","Blockno":"50571477","DateTime":"2026-08-28 15:51:41","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.04084198 ETH","Value":"$100.24"},{"ParentTxnHash":"0x724be89f808ba8513c1cba858d0053eb0fd1583703e9661b0d4062bb57ccb0d1","Status":"Success","Blockno":"50570534","DateTime":"2026-08-28 15:20:15","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.07121315 ETH","Value":"$174.78"},{"ParentTxnHash":"0x8ee484ea20a60f9c7c0f0b3d5da925e210c97ade99d36a510685eafc5397123a","Status":"Error","Blockno":"50570532","DateTime":"2026-08-28 15:20:11","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.07513677 ETH","Value":"$184.41"},{"ParentTxnHash":"0x087a7ab9e1ec7583a38d1c748869d81e22d36e881fb63c1a2512d37919265a52","Status":"Success","Blockno":"50570335","DateTime":"2026-08-28 15:13:37","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.17583415 ETH","Value":"$431.55"},{"ParentTxnHash":"0x77d4be136b14016a648951011d7c6d1120728b8efeabaf821376f6095344bd6c","Status":"Success","Blockno":"50530929","DateTime":"2026-08-27 17:20:05","Sender":"0xEa288B066D11B13F4FEBEA757100f47A7278D003","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.34188285 ETH","Value":"$839.08"},{"ParentTxnHash":"0x3c01390e2e7f74a8710b725af030c64e48f63d725b01133d284ff5659c240ded","Status":"Success","Blockno":"50527031","DateTime":"2026-08-27 15:10:09","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.04972235 ETH","Value":"$122.03"},{"ParentTxnHash":"0xeabc77323c46fadb169629d6660183f3c1b55c92b110fcfae4de61a1772a7e00","Status":"Success","Blockno":"50527021","DateTime":"2026-08-27 15:09:49","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.06268762 ETH","Value":"$153.85"},{"ParentTxnHash":"0x117b60b960e83c876c658cfd2654dfaedf05852912109b50ed35be9bf9acafb9","Status":"Success","Blockno":"50527017","DateTime":"2026-08-27 15:09:41","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.05321701 ETH","Value":"$130.61"},{"ParentTxnHash":"0x5e429d9da68e17d0bb85221736c27d475672d915d08e19a3c338135441136357","Status":"Success","Blockno":"50501185","DateTime":"2026-08-27 00:48:37","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.06642562 ETH","Value":"$163.03"},{"ParentTxnHash":"0x00bec138c16216d0e1fc88d99d1a2d3bc938fa4b1d9e1eddd33eb952b62bed39","Status":"Success","Blockno":"50496580","DateTime":"2026-08-26 22:15:07","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.08293944 ETH","Value":"$203.56"},{"ParentTxnHash":"0x10b2ab02e1ad9d83a67ca5655672be0ec8f4eea043ca11b4a81a0173a9d1cc67","Status":"Success","Blockno":"50474050","DateTime":"2026-08-26 09:44:07","Sender":"0xd8Ba9D1a99Fc21f0ECA24e9b85737c28A194a4E2","SenderLable":"","Receiver":"0x81D7a91860a70B312E68c075C896aA06281cCC63","ReceiverLable":"","Amount":"0.14266775 ETH","Value":"$350.15"}]';
            const quickExportInternalTxsTitle = 'Parent Transaction Hash,Status,Blockno,"DateTime (UTC)",From,From_Nametag,To,To_Nametag,Amount,Value (USD)';
            if ($("#ContentPlaceHolder1_btnQuickExportInternalTxs").length > 0 && quickExportInternalTxsData) {
                $("#ContentPlaceHolder1_btnQuickExportInternalTxs").click(function () {
                    if (isExportFinish == true) {
                        isExportFinish = false;
                        $("#ContentPlaceHolder1_btnQuickExportInternalTxs").append('<i class="fa fa-spinner fa-spin ms-1"></i>');
                        let lstTxsObj = JSON.parse(quickExportInternalTxsData);
                        if (lstTxsObj.length > 0) {
                            let csvRows = [];
                            csvRows.push(quickExportInternalTxsTitle.replace(/"/g, ""));
                            for (let i = 0; i < lstTxsObj.length; i++) {
                                let values = Object.values(lstTxsObj[i]).join('2SL'); // 2SL : separate line
                                values = values.replace(/2SL/g, '","')
                                csvRows.push('"' + values + '"');
                            }
                            let data = csvRows.join('\n');
                            let fileName = "export-internal-tx-" + $.trim($("#hdnAddress").val());
                            const blob = new Blob(["\ufeff", data], { type: 'text/csv' });
                            const url = window.URL.createObjectURL(blob)
                            const a = document.createElement('a')
                            a.setAttribute('href', url)
                            a.setAttribute('download', fileName + '.csv');
                            a.click();
                            setTimeout(function () {
                                $("#ContentPlaceHolder1_btnQuickExportInternalTxs").find(".fa-spinner").remove();
                                isExportFinish = true;
                            }, 200);
                        }
                    }
                });
            }
        });

        function isMobile() {
            const regex = /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;
            return regex.test(navigator.userAgent);
        }

        $("body,html").click(function (evt) {
            let elm = $(evt.target).attr("id");
            let isClickedMode = elm === "darkModaBtn" || elm === "darkModaBtnIcon";
            if (isClickedMode) {
                let isClickedSunMode = false;
                let clrBorder = "#112641";
                if (elm === "darkModaBtn") isClickedSunMode = $(evt.target).find("#darkModaBtnIcon").hasClass("fa-moon");
                if (elm === "darkModaBtnIcon") isClickedSunMode = $(evt.target).hasClass("fa-moon");
                if (isClickedSunMode) {
                    clrBorder = "#fff";
                }

                let iframes = document.getElementById('analytics_pageiframe');
                let heatcell = iframes.contentWindow.document.getElementsByClassName("ch-day").length;
                for (let i = 0; i < heatcell; i++) {
                    iframes.contentWindow.document.getElementsByClassName("ch-day")[i].style.borderColor = clrBorder;
                }
            }
        });
let currentTheme = document.querySelector('html').dataset.bsTheme;
        const fac = new FastAverageColor();

        const showColorsForImage = function (image) {
            if (document.querySelector('.js-token-avatar')) {
                fac.getColorAsync(document.querySelector('.js-token-avatar'))
                    .then(color => {
                        document.querySelector('.js-token-avatar').removeAttribute('style');
                        if ((currentTheme === 'dark' && !isLight(color.value, false)) || (currentTheme === 'dim' && !isLight(color.value, false))) {
                            document.querySelector('.js-token-avatar').setAttribute('style', "filter: invert(1) grayscale(100);");
                        }
                        /*document.querySelector('.main-content').style.backgroundImage = `linear-gradient(rgba(${color.value[0]}, ${color.value[1]}, ${color.value[2]}, ${isLight(color.value) ? '0.15' : '0.05'}) 0%, rgba(255, 255, 255, 0) 16rem)`;*/
                    })
                    .catch(e => {
                    });
            }
        }

        const isLight = function (color, isBackground = true) {
            const brightness = ((color[0] * 299) + (color[1] * 587) + (color[2] * 114)) / 1000;
            return brightness > (isBackground ? 190 : 70);
        }

        const image = document.querySelector('.js-token-avatar');

        showColorsForImage(image);

        const observer = new MutationObserver((mutationList, observer) => {
            for (const mutation of mutationList) {
                if (mutation.type === "attributes") {
                    currentTheme = document.querySelector('html').dataset.bsTheme;
                    showColorsForImage(image);
                }
            }
        });

        observer.observe(document.querySelector('html'), {
            attributeFilter: ['data-bs-theme']
        });

        function reInnitTooltip() {
            $("[data-bs-toggle='tooltip']").tooltip();
        }
(function () {
            document.querySelectorAll('.nav_tabs1 a').forEach((triggerEl) => {
                new bootstrap.Tab(triggerEl);
            });

            document.querySelectorAll('.nav-subtabs li a:not(.dropdown-toggle)').forEach((triggerEl) => {
                new bootstrap.Tab(triggerEl);
            });

            if (document.getElementById('dropdownMethod') !== null) {
                document.getElementById('dropdownMethod').addEventListener('click', () => {
                    if (
                        !(
                            ('ontouchstart' in window ||
                                navigator.maxTouchPoints > 0 ||
                                navigator.msMaxTouchPoints > 0) &&
                            window.innerWidth <= 991
                        )
                    ) {
                        document.getElementById('ContentPlaceHolder1_inputMethodName').focus();
                    }
                });
            }

            if (document.getElementById("dropdownMenuBalance") !== null) {
                document.getElementById("dropdownMenuBalance").addEventListener("click", () => {
                    if (!((('ontouchstart' in window)
                        || (navigator.maxTouchPoints > 0)
                        || (navigator.msMaxTouchPoints > 0))
                        && window.innerWidth <= 991)) {
                        document.getElementById("token-balance-search").focus();
                    }
                });
            }

            if (document.getElementById('dropdownBlock') !== null) {
                document.getElementById('dropdownBlock').addEventListener('click', () => {
                    if (
                        !(
                            ('ontouchstart' in window ||
                                navigator.maxTouchPoints > 0 ||
                                navigator.msMaxTouchPoints > 0) &&
                            window.innerWidth <= 991
                        )
                    ) {
                        document.getElementById('fromblock').focus();
                    }
                });
            }

            if (document.getElementById('dropdownFrom') !== null) {
                document.getElementById('dropdownFrom').addEventListener('click', () => {
                    if (
                        !(
                            ('ontouchstart' in window ||
                                navigator.maxTouchPoints > 0 ||
                                navigator.msMaxTouchPoints > 0) &&
                            window.innerWidth <= 991
                        )
                    ) {
                        document.getElementById('fromaddress').focus();
                    }
                });
            }

            if (document.getElementById('dropdownTo') !== null) {
                document.getElementById('dropdownTo').addEventListener('click', () => {
                    if (
                        !(
                            ('ontouchstart' in window ||
                                navigator.maxTouchPoints > 0 ||
                                navigator.msMaxTouchPoints > 0) &&
                            window.innerWidth <= 991
                        )
                    ) {
                        document.getElementById('toaddress').focus();
                    }
                });
            }

            // LIST.JS
            // =======================================================
            var options = {
                valueNames: ['list-name', 'list-amount', 'list-usd-value', 'list-usd-rate'],
            };

            if (document.querySelector('#availableBalance')) {
                var availableBalance = new List('availableBalance', options);
                availableBalance.on('searchComplete', function (e) {
                    if (e.matchingItems.length == 0) {
                        $('.list-not-found').show();
                    } else {
                        $('.list-not-found').hide();
                    }
                });
            }

            window.addEventListener('wheel', function (e) {
                if (document.querySelector('.bs-tooltip-auto')) {
                    let targetedElem = document.querySelector(
                        `[aria-describedby='${document
                            .querySelector('.bs-tooltip-auto')
                            .getAttribute('id')}']`
                    );
                    let tooltipTemp = bootstrap.Tooltip.getOrCreateInstance(targetedElem);
                    tooltipTemp.hide();
                }
            });

            document.getElementById('dropdownMore1').addEventListener('shown.bs.dropdown', event => {
                if (event.target.dataset.bsDisplay === 'static') {
                    let nextSibling = event.target.nextElementSibling;
                    nextSibling.classList.add('dropdown-menu-end');
                    nextSibling.removeAttribute('style');

                    let rect = nextSibling.getBoundingClientRect();

                    if (rect.left < 0) {
                        nextSibling.classList.remove('dropdown-menu-end');

                        if (window.screen.availWidth < (window.innerWidth || document.documentElement.clientWidth)) {
                            nextSibling.style.left = `-${(window.innerWidth || document.documentElement.clientWidth) - window.screen.availWidth + 5}px`;
                        }
                    }
                }
            })
        })();
$(document).ready(function () {
            initPopover();
            registerPreviewButtonEvent();

            initAdvPopover();
            registerDataPreviewButtonEvent();

            // Close tooltip when click outside of tooltip content
            $(document).on('click', function (e) {

                $('[data-bs-toggle="popover"]').each(function () {
                    if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
                        $(this).popover('hide');
                    }
                });
            });
        });

        function resizeIframeOnUpdate(iframe, bufferHeight) {
            if (iframe && iframe.contentWindow.document.body.scrollHeight) {
                iframe.style.height = iframe.contentWindow.document.body.scrollHeight + (bufferHeight || 0) + 'px';
                iframe.parentElement.style.visibility = 'visible';
            }
        }

        window.addEventListener('message', function (event) {
            if (event.data === 'cardUpdated') {
                var iframe = document.getElementById('cardsIframe');
                resizeIframeOnUpdate(iframe);
                scrollToTabNavs();
            }
            else if (event.data === 'tokenHolding') {
                var iframe = document.getElementById('tokenHoldingIframe');
                resizeIframeOnUpdate(iframe);
            }
            else if (event.data === 'nftHolding') {
                var iframe = document.getElementById('nftHoldingIframe');
                resizeIframeOnUpdate(iframe);
            }
            else if (event.data === 'addressAnalytics') {
                var iframe = document.getElementById('analytics_pageiframe');
                resizeIframeOnUpdate(iframe);
            }
        });

        function scrollToTabNavs() {
            setTimeout(() => {
                document.getElementById('div_tabs').scrollIntoView({
                    behavior: 'smooth',
                    block: 'start'
                });
            }, 100);
        }
// code reader
         const IsCodeReader = '0'
         if (IsCodeReader === "1") {
             // INITIALIZATION OF TOGGLE PASSWORD
             // =======================================================
             new HSTogglePassword('.js-toggle-password')

             //// TEXTAREA SIZER
             //// =======================================================
             //const tx = document.getElementsByClassName("js-textarea-type-message");
             //for (let i = 0; i < tx.length; i++) {
             //    tx[i].setAttribute("style", "height:" + (tx[i].scrollHeight) + "px; overflow-y: hidden; resize: none; max-height: 12rem;");
             //    tx[i].addEventListener("input", OnInput, false);
             //}
             //function OnInput() {
             //    this.style.height = "auto";
             //    this.style.height = (this.scrollHeight) + "px";
             //}

             const isSevice = '0'
             const isLogin = '0'

             const oa_rolesystemcontent = $('#oa_rolesystemcontent').val()
             const oa_max_tokens = 5000
             const claude_max_tokens = 5000
             var oa_model = ""
             var modalSavedHistory = bootstrap.Modal.getOrCreateInstance(document.getElementById('modalSavedHistory'))
             var responseSavedHistory = []
             var gotNew = true

             var gptMode = $('#gptMode')
             var chkSaveKey = $('#saveKeySwitcher')
             var checkboxes = document.querySelectorAll('input[name="chkContractFile"]');
             var divModal = $('#divModal')
             var chkSaveHistory = $('#saveHistorySwitcher')
             var divGeneratedOpenAI = $('#divGeneratedOpenAI')
             var divAnswer = $('#divAnswer')
             var divPormt = $('#divPormt')
             var txtPrompt = $('#txtPrompt')
             var inputOpenAIApiKey = $('#inputOpenAIApiKey')
             var divApiKey = $('#divApiKey')
             var divPormtAnswer = $('#divPormtAnswer')
             var btnSavedHistory = $('#btnSavedHistory')
             var txtFeedback = $('#txtFeedback')
             var aiProvider = $('#aiProvider')
             var gptModeExtra = $('#gptModeExtra')
             var divAiModel = $('#divAiModel')
             var apiKeyLabel = $('#apiKeyLabel')
             var apiKeyLearnMore = $('#apiKeyLearnMore')
             var inputMaxTokens = $('#inputMaxTokens')
             var divMaxTokens = $('#divMaxTokens')

             var aiProviderConfig = {
                 openai: {
                     apiKeyLabel: 'OpenAI API Key',
                     apiKeyStorageKey: 'openaiapikey',
                     learnMoreUrl: 'https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key',
                     useApiModels: true,
                     models: [
                         { value: 'gpt-5.5', text: 'GPT-5.5', note: 'Please ensure this API Key has access to GPT-5.5 Model.' },
                         { value: 'gpt-5.4', text: 'GPT-5.4', note: 'Please ensure this API Key has access to GPT-5.4 Model.' },
                         { value: 'gpt-4.1', text: 'GPT-4.1', note: 'Please ensure this API Key has access to GPT-4.1 Model.' },
                         { value: 'gpt-4', text: 'GPT-4', note: 'Please ensure this API Key has access to GPT-4 Model.' },
                         { value: 'gpt-3.5-turbo-16k', text: 'GPT-3.5' }
                     ]
                 },
                 claude: {
                     apiKeyLabel: 'Claude API Key',
                     apiKeyStorageKey: 'claudeapikey',
                     learnMoreUrl: 'https://console.anthropic.com/settings/keys',
                     useApiModels: true,
                     models: [
                         { value: 'claude-sonnet-5', text: 'Claude Sonnet 5' },
                         { value: 'claude-opus-4-8', text: 'Claude Opus 4.8' },
                         { value: 'claude-fable-5', text: 'Claude Fable 5' },
                         { value: 'claude-haiku-4-5', text: 'Claude Haiku 4.5' }
                     ]
                 },
                 groq: {
                     models: [
                         { value: 'llama-3.1-8b-instant', text: 'Llama 3.1 8B Instant' }
                     ]
                 }
             }

             var providerModelCache = {}
             var modelFetchSeq = 0

             function getProviderConfig() {
                 return aiProviderConfig[aiProvider.val()] || aiProviderConfig.openai
             }

             function getApiKeyStorageKey() {
                 var providerConfig = getProviderConfig()
                 return providerConfig.apiKeyStorageKey || ''
             }

             function getDefaultMaxTokens() {
                 return aiProvider.val() == "claude" ? claude_max_tokens : oa_max_tokens
             }

             function getMaxTokens() {
                 var v = parseInt(inputMaxTokens.val(), 10)
                 return (isNaN(v) || v < 1) ? getDefaultMaxTokens() : v
             }

             function bindApiKeyStorage() {
                 inputOpenAIApiKey.off("change.apiKey")
                 if (chkSaveKey.prop("checked") && getApiKeyStorageKey()) {
                     inputOpenAIApiKey.on("change.apiKey", function () {
                         localStorage.setItem(getApiKeyStorageKey(), inputOpenAIApiKey.val());
                     })
                 }
             }

             function syncApiKeyField() {
                 var providerConfig = getProviderConfig()
                 if (!providerConfig.apiKeyStorageKey) {
                     inputOpenAIApiKey.off("change.apiKey")
                     divApiKey.hide()
                     return
                 }

                 apiKeyLabel.text(providerConfig.apiKeyLabel)
                 apiKeyLearnMore.attr('href', providerConfig.learnMoreUrl)
                 inputOpenAIApiKey.val(localStorage.getItem(providerConfig.apiKeyStorageKey) || "")
                 chkSaveKey.prop("checked", localStorage.getItem(providerConfig.apiKeyStorageKey) !== null)
                 bindApiKeyStorage()
                 divApiKey.show()
             }

             function getActiveModels() {
                 var cache = providerModelCache[aiProvider.val()]
                 if (cache && cache.models && cache.models.length > 0) {
                     return cache.models
                 }
                 return getProviderConfig().models
             }

             function renderModelOptions(selectedValue) {
                 var models = getActiveModels()
                 var selectedModel = null
                 models.forEach(function (model) {
                     if (model.value == selectedValue) {
                         selectedModel = model
                     }
                 })
                 if (!selectedModel) {
                     selectedModel = models[0]
                 }

                 gptMode.prop('disabled', false)
                 gptMode.empty()
                 models.forEach(function (model) {
                     var option = $('<option></option>').val(model.value).text(model.text)
                     if (model.note) {
                         option.attr('data-note', model.note)
                     }
                     gptMode.append(option)
                 })

                 oa_model = selectedModel.value
                 gptMode.val(oa_model)
                 gptMode.trigger("change")
             }

             function filterOpenAiChatModels(models) {
                 var excludedKeywords = ['embedding', 'audio', 'realtime', 'transcribe', 'tts', 'image', 'moderation', 'dall-e', 'whisper', 'davinci', 'babbage', 'instruct', 'search', 'codex', 'deep-research']
                 return models.filter(function (model) {
                     var id = (model.id || "").toLowerCase()
                     var isChatModel = id.indexOf('gpt') == 0 || id.indexOf('chatgpt') == 0 || /^o\d/.test(id)
                     if (!isChatModel) {
                         return false
                     }
                     if (/-(\d{4}-\d{2}-\d{2}|\d{3,}|latest|pro)$/.test(id)) {
                         return false
                     }
                     return !excludedKeywords.some(function (keyword) {
                         return id.indexOf(keyword) !== -1
                     })
                 }).sort(function (a, b) {
                     return (b.created || 0) - (a.created || 0)
                 }).map(function (model) {
                     return { value: model.id, text: model.id }
                 })
             }

             function fetchProviderModels(provider, apiKey, callback) {
                 if (provider == "openai") {
                     $.ajax({
                         url: "https://api.openai.com/v1/models",
                         type: "GET",
                         headers: {
                             "Authorization": `Bearer ${apiKey}`
                         },
                         success: function (response) {
                             callback(filterOpenAiChatModels(response['data'] || []))
                         },
                         error: function () {
                             callback(null)
                         }
                     })
                 } else if (provider == "claude") {
                     $.ajax({
                         url: "https://api.anthropic.com/v1/models?limit=100",
                         type: "GET",
                         headers: {
                             "x-api-key": apiKey,
                             "anthropic-version": "2023-06-01",
                             "anthropic-dangerous-direct-browser-access": "true"
                         },
                         success: function (response) {
                             var models = (response['data'] || []).map(function (model) {
                                 return { value: model.id, text: model.display_name || model.id }
                             })
                             callback(models)
                         },
                         error: function () {
                             callback(null)
                         }
                     })
                 } else {
                     callback(null)
                 }
             }

             function refreshProviderModels() {
                 modelFetchSeq += 1
                 var requestSeq = modelFetchSeq

                 var provider = aiProvider.val()
                 var providerConfig = getProviderConfig()
                 var apiKey = (inputOpenAIApiKey.val() || "").trim()

                 if (!providerConfig.useApiModels) {
                     providerModelCache[provider] = null
                     renderModelOptions(oa_model)
                     return
                 }

                 if (!apiKey) {
                     providerModelCache[provider] = null
                     oa_model = ""
                     gptMode.prop('disabled', true)
                     gptMode.empty().append($('<option></option>').val('').text('Enter API Key to load models'))
                     gptModeExtra.hide().text("")
                     return
                 }

                 var cache = providerModelCache[provider]
                 if (cache && cache.apiKey == apiKey) {
                     renderModelOptions(oa_model)
                     return
                 }

                 gptMode.prop('disabled', true)
                 gptMode.empty().append($('<option></option>').text('Loading models...'))
                 gptModeExtra.hide().text("")

                 fetchProviderModels(provider, apiKey, function (models) {
                     if (requestSeq != modelFetchSeq) {
                         return
                     }

                     if (models && models.length > 0) {
                         providerModelCache[provider] = { apiKey: apiKey, models: models }
                     } else {
                         providerModelCache[provider] = null
                     }
                     renderModelOptions()

                     if (!models || models.length == 0) {
                         gptModeExtra.show()
                         gptModeExtra.text('Couldn\'t load models with this API key. Showing default models, please check that the key is correct.')
                     }
                 })
             }

             function syncProviderUi() {
                 divAiModel.show()
                 syncApiKeyField()
                 refreshProviderModels()
                 if (aiProvider.val() == "groq") {
                     divMaxTokens.hide()
                 } else {
                     inputMaxTokens.val(getDefaultMaxTokens())
                     divMaxTokens.show()
                 }
             }

             function getAiResponseText(response) {
                 if (response && response.choices) {
                     var openAiText = ""
                     Object.entries(response.choices).forEach(([key, value]) => {
                         if (value['message'] && value['message']['content']) {
                             openAiText += value['message']['content']
                         }
                     });
                     return openAiText
                 }

                 if (response && response.content) {
                     var claudeText = ""
                     response.content.forEach(function (item) {
                         if (item.type === "text" && item.text) {
                             claudeText += item.text
                         }
                     })
                     return claudeText
                 }

                 return ""
             }

             function getAiErrorMessage(response) {
                 if (response && response.error) {
                     if (response.error.message) return response.error.message
                     if (response.error.code) return response.error.code
                 }

                 return "Failed"
             }

             function getStopReasonAlert(response) {
                 if (!response) return { alertHtml: "", save: true }

                 var msg = ""
                 var save = false   // abnormal stops default to not saved

                 // ================= Claude : stop_reason =================
                 if (response['stop_reason'] !== undefined) {
                     var stopReason = response['stop_reason']

                     switch (stopReason) {
                         case 'end_turn':
                         case 'stop_sequence':
                             return { alertHtml: "", save: true }   // completed normally
                         case 'max_tokens':
                             msg = 'The answer was cut off at the Max Tokens limit. Increase Max Tokens and try again.'
                             save = true   // truncated answer is still saved to history
                             break
                         case 'refusal':
                             msg = 'The AI declined to answer this request. Please rephrase your question.'
                             break
                         case 'model_context_window_exceeded':
                             msg = 'The selected source code is too large for this model. Please select fewer files.'
                             break
                         default:
                             msg = 'The AI stopped before completing the answer (stop_reason: ' + stopReason + ').'
                     }

                     return { alertHtml: code_reader.renderAlertBox('warning', msg), save: save }
                 }

                 // ================= OpenAI : choices[0].finish_reason =================
                 if (response['choices'] && response['choices'][0]) {
                     var finishReason = response['choices'][0]['finish_reason']

                     switch (finishReason) {
                         case null:
                         case undefined:
                         case 'stop':
                             return { alertHtml: "", save: true }   // completed normally
                         case 'length':
                             msg = 'The answer was cut off at the Max Tokens limit. Increase Max Tokens and try again.'
                             save = true   // truncated answer is still saved to history
                             break
                         case 'content_filter':
                             msg = 'Part of the answer was withheld by the content filter.'
                             break
                         default:
                             msg = 'The AI stopped before completing the answer (finish_reason: ' + finishReason + ').'
                     }

                     return { alertHtml: code_reader.renderAlertBox('warning', msg), save: save }
                 }

                 return { alertHtml: "", save: true }
             }

             var code_reader = {
                 source: {},
                 oaId: "",
                 thumbstatus: "",
                 contractAddress: '',
                 renderPrompt: function (el) {
                     txtPrompt.val($(el).html())
                 },
                 callOpenAiApi: function (el) {
                     var $button = $(el)
                     $button.prop('disabled', true);
                     $button.html('<i class="fa fa-spin fa-spinner"></i>');

                     divAnswer.html('&nbsp;')

                     var self = this
                     self.prompt = txtPrompt.val()

                     var selectedCode = ""
                     selectedCode = JSON.stringify(self.source);

                     var requestData = {
                         model: oa_model,
                         max_completion_tokens: getMaxTokens(),
                         messages: [{
                             role: "system",
                             content: oa_rolesystemcontent
                         }, {
                             role: "user",
                             content: (selectedCode || "") + "\n\n" + self.prompt
                         }]
                     };

                     if (self.prompt) {

                         if (aiProvider.val() != "groq" && !oa_model) {
                             divPormtAnswer.show()
                             divAnswer.html(self.renderAlertBox('danger', 'Please enter your API Key and select a model.'))
                             $button.prop('disabled', false)
                             $button.html('<i class="fa fa-paper-plane-top"></i>');
                             return
                         }

                         divPormt.html(htmlEnc(self.prompt))

                         if (aiProvider.val() == "groq") {
                             $.ajax({
                                 type: "POST",
                                 url: "/code-readerHandler.ashx",
                                 dataType: 'json',
                                 data: {
                                     ssid: sid,
                                     action: "callPromptAnswer",
                                     data: requestData
                                 },
                                 success: function (response) {
                                     if (typeof response !== 'object') {
                                         response = JSON.parse(response)
                                     }
                                     if (response['error']) {
                                         self.oaId = ""
                                         self.thumbstatus = ""

                                         var html = ""
                                         if (response['error']['message']) {
                                             if (response['error']['message'] == "The model: `gpt-4` does not exist") {
                                                 html = self.renderAlertBox('danger', "The provided API key does not have access to GPT-4. Please change to a different key or use GPT-3.5.")
                                             } else {
                                                 html = self.renderAlertBox('danger', response['error']['message'])
                                             }
                                         } else {
                                             html = self.renderAlertBox('danger', response['error']['code'])
                                         }

                                         divGeneratedOpenAI.hide()
                                         divAnswer.html(html)

                                         self.storePromptAndAnswer(response, "2")
                                     } else {
                                         self.oaId = response['id']
                                         self.thumbstatus = ""

                                         var html = ""
                                         var choices = response['choices']
                                         Object.entries(choices).forEach(([key, value]) => {
                                             html += value['message']['content']
                                         });
                                         html = htmlEnc(html).replace(/\n/g, '<br/>')

                                         divGeneratedOpenAI.show()
                                         html += self.renderAnswerThumbsAction()
                                         divAnswer.html(html)

                                         self.storePromptAndAnswer(response, "1")
                                     }
                                 },
                                 error: function (xhr, status, error) {
                                     self.oaId = ""
                                     self.thumbstatus = ""

                                     var html = ""
                                     if (xhr['responseJSON'] && xhr['responseJSON']['error'] && xhr['responseJSON']['error']['message']) {
                                         if (xhr['responseJSON']['error']['message'] == "The model: `gpt-4` does not exist") {
                                             html = self.renderAlertBox('danger', "The provided API key does not have access to GPT-4. Please change to a different key or use GPT-3.5.")
                                         } else {
                                             html = self.renderAlertBox('danger', xhr['responseJSON']['error']['message'])
                                         }
                                         self.storePromptAndAnswer(xhr['responseJSON'], "2")
                                     } else if (xhr['responseJSON'] && xhr['responseJSON']['error'] && xhr['responseJSON']['error']['code']) {
                                         html = self.renderAlertBox('danger', xhr['responseJSON']['error']['code'])
                                         self.storePromptAndAnswer(xhr['responseJSON'], "2")
                                     } else {
                                         html = self.renderAlertBox('danger', "Failed")
                                     }

                                     divGeneratedOpenAI.hide()
                                     divAnswer.html(html)

                                 },
                                 complete: function () {
                                     $button.prop('disabled', false)
                                     $button.html('<i class="fa fa-paper-plane-top"></i>');
                                     txtPrompt.val('')
                                     divPormtAnswer.show()
                                 }
                             });
                         } else if (aiProvider.val() == "claude") {
                             var claudeApiKey = inputOpenAIApiKey.val()

                             if (claudeApiKey) {
                                 var claudeRequestData = {
                                     model: oa_model,
                                     max_tokens: getMaxTokens(),
                                     system: oa_rolesystemcontent,
                                     messages: [{
                                         role: "user",
                                         content: (selectedCode || "") + "\n\n" + self.prompt
                                     }]
                                 }

                                 $.ajax({
                                     url: "https://api.anthropic.com/v1/messages",
                                     type: "POST",
                                     contentType: "application/json",
                                     dataType: "json",
                                     headers: {
                                         "x-api-key": claudeApiKey,
                                         "anthropic-version": "2023-06-01",
                                         "anthropic-dangerous-direct-browser-access": "true"
                                     },
                                     data: JSON.stringify(claudeRequestData),
                                     success: function (response) {
                                         self.oaId = response['id']
                                         self.thumbstatus = ""

                                         var html = getAiResponseText(response)
                                         html = htmlEnc(html).replace(/\n/g, '<br/>')

                                         var stopAlert = getStopReasonAlert(response)
                                         html += stopAlert.alertHtml

                                         divGeneratedOpenAI.show()
                                         html += self.renderAnswerThumbsAction()
                                         divAnswer.html(html)

                                         if (stopAlert.save) {
                                             self.storePromptAndAnswer(response, "1")
                                         }
                                     },
                                     error: function (xhr, status, error) {
                                         self.oaId = ""
                                         self.thumbstatus = ""

                                         var response = xhr['responseJSON'] || {}
                                         if (!response.error && xhr['responseText']) {
                                             try {
                                                 response = JSON.parse(xhr['responseText'])
                                             } catch (e) {
                                                 response = {
                                                     error: {
                                                         message: xhr['responseText']
                                                     }
                                                 }
                                             }
                                         }
                                         if (!response.error) {
                                             response = {
                                                 error: {
                                                     message: error || status || "Failed"
                                                 }
                                             }
                                         }
                                         var html = self.renderAlertBox('danger', getAiErrorMessage(response))

                                         divGeneratedOpenAI.hide()
                                         divAnswer.html(html)

                                         self.storePromptAndAnswer(response, "2")
                                     },
                                     complete: function () {
                                         $button.prop('disabled', false)
                                         $button.html('<i class="fa fa-paper-plane-top"></i>');
                                         txtPrompt.val('')
                                         divPormtAnswer.show()
                                     }
                                 });
                             } else {
                                 divPormtAnswer.show()
                                 divAnswer.html(self.renderAlertBox('danger', 'Please enter a Claude API Key.'))
                                 $button.prop('disabled', false)
                                 $button.html('<i class="fa fa-paper-plane-top"></i>');
                             }
                         } else {
                             var openAIApikey = inputOpenAIApiKey.val()

                             if (openAIApikey) {

                                 $.ajax({
                                     url: "https://api.openai.com/v1/chat/completions",
                                     type: "POST",
                                     headers: {
                                         "Content-Type": "application/json",
                                         "Authorization": `Bearer ${openAIApikey}`
                                     },
                                     data: JSON.stringify(requestData),
                                     success: function (response) {
                                         self.oaId = response['id']
                                         self.thumbstatus = ""

                                         var html = ""
                                         var choices = response['choices']
                                         Object.entries(choices).forEach(([key, value]) => {
                                             html += value['message']['content']
                                         });
                                         html = htmlEnc(html).replace(/\n/g, '<br/>')

                                         var stopAlert = getStopReasonAlert(response)
                                         html += stopAlert.alertHtml

                                         divGeneratedOpenAI.show()
                                         html += self.renderAnswerThumbsAction()
                                         divAnswer.html(html)

                                         if (stopAlert.save) {
                                             self.storePromptAndAnswer(response, "1")
                                         }
                                     },
                                     error: function (xhr, status, error) {
                                         self.oaId = ""
                                         self.thumbstatus = ""

                                         var html = ""
                                         if (xhr['responseJSON'] && xhr['responseJSON']['error'] && xhr['responseJSON']['error']['message']) {
                                             if (xhr['responseJSON']['error']['message'] == "The model: `gpt-4` does not exist") {
                                                 html = self.renderAlertBox('danger', "The provided API key does not have access to GPT-4. Please change to a different key or use GPT-3.5.")
                                             } else {
                                                 html = self.renderAlertBox('danger', xhr['responseJSON']['error']['message'])
                                             }
                                             self.storePromptAndAnswer(xhr['responseJSON'], "2")
                                         } else if (xhr['responseJSON'] && xhr['responseJSON']['error'] && xhr['responseJSON']['error']['code']) {
                                             html = self.renderAlertBox('danger', xhr['responseJSON']['error']['code'])
                                             self.storePromptAndAnswer(xhr['responseJSON'], "2")
                                         } else {
                                             html = self.renderAlertBox('danger', "Failed")
                                         }

                                         divGeneratedOpenAI.hide()
                                         divAnswer.html(html)

                                     },
                                     complete: function () {
                                         $button.prop('disabled', false)
                                         $button.html('<i class="fa fa-paper-plane-top"></i>');
                                         txtPrompt.val('')
                                         divPormtAnswer.show()
                                     }
                                 });
                             } else {
                                 divPormtAnswer.show()
                                 if (!openAIApikey) {
                                     divAnswer.html(self.renderAlertBox('danger', 'Please enter an OpenAI API Key.'))

                                 } else if (!self.prompt) {
                                     divAnswer.html(self.renderAlertBox('danger', 'Please enter a prompt.'))
                                 }
                                 $button.prop('disabled', false)
                                 $button.html('<i class="fa fa-paper-plane-top"></i>');
                             }
                         }
                     } else {
                         divPormtAnswer.show()
                         if (!self.prompt) {
                             divAnswer.html(self.renderAlertBox('danger', 'Please enter a prompt.'))
                         }
                         $button.prop('disabled', false)
                         $button.html('<i class="fa fa-paper-plane-top"></i>');
                     }
                 },
                 getCodeReaderPromptHistory(e) {
                     if (isSevice != "1") {
                         divModal.html('<span>To use this feature, please <a href="/login">login</a> to your BaseScan account and return to this page</span>')
                         modalSavedHistory.show()
                     } else {
                         btnSavedHistory.prop('disabled', true);
                         btnSavedHistory.html('<i class="fa fa-spin fa-spinner"></i>');

                         if (isSevice == "1" && gotNew) {
                             divModal.html("")
                             responseSavedHistory = []
                             var self = this

                             $.ajax({
                                 type: "POST",
                                 url: "/code-readerHandler.ashx",
                                 dataType: 'json',
                                 data: {
                                     ssid: sid,
                                     contractAddress: self.contractAddress,
                                     action: "getCodeReaderPromptHistory",
                                 },
                                 success: function (response) {
                                     if (response == "error") {
                                         var html = code_reader.renderAlertBox('danger', 'Fail to get history')
                                         divModal.html(html)
                                     } else {
                                         if (response.length == 0) {
                                             divModal.html("No record found.")
                                         } else {
                                             responseSavedHistory = response
                                             var html = ""
                                             for (let i = 0; i < responseSavedHistory.length; i++) {
                                                 var hitem = responseSavedHistory[i]
                                                 html += '<button class="list-group-item list-group-item-action d-flex align-items-center gap-2 p-3" onclick="code_reader.renderHistory(this, ' + i + ')">'

                                                 html += '<div class="container row">'
                                                 html += '<div class="text-truncate">' + htmlEnc(hitem['prompt']) + '</div>'
                                                 html += '<span>' + getTruncatedAddress(htmlEnc(hitem['contractAddress'])) + ' <span class="small text-muted">(' + htmlEnc(hitem['dt']) + ')</span></span>'
                                                 html += '</div>'

                                                 html += '<i class="far fa-angle-right mx-1"></i>'

                                                 html += '</button>'
                                             }
                                             divModal.html(html)
                                         }
                                         gotNew = false
                                     }
                                 },
                                 error: function (xhr, status, error) {
                                     var html = code_reader.renderAlertBox('danger', 'Fail to get history')
                                     divModal.html(html)
                                 },
                                 complete: function () {
                                     modalSavedHistory.show()
                                     btnSavedHistory.prop('disabled', false)
                                     btnSavedHistory.html('<i class="far fa-book-open"></i>');
                                 }
                             });
                         } else {
                             modalSavedHistory.show()
                             btnSavedHistory.prop('disabled', false)
                             btnSavedHistory.html('<i class="far fa-book-open"></i>');
                         }
                     }
                 },
                 renderAlertBox: function (type, msg) {
                     return `<div class="alert alert-${type} text-break alert-dismissible fade show mt-2" role="alert">
                        <div class="d-flex align-items-baseline gap-2">
                            ${htmlEnc(msg)}
                        </div>
                        <button type='button' class='btn-close' data-bs-dismiss='alert' aria-label='Close'></button>
                    </div>`
                 },
                 renderAnswerThumbsAction: function (feedback) {
                     if ((isSevice == "1" && chkSaveHistory.prop("checked") == true) || feedback != null) {
                         return `<div class="d-flex align-items-center gap-1 mt-4">
                             <button type="button" class="btn btn-sm ${feedback == '1' ? 'btn-primary' : 'btn-white'}" id="btnThumbUp" data-bs-toggle="modal" data-bs-target="#shareFeedback" onclick="code_reader.setAnswerThumbAction(this, '1')">
                                 <i class="far fa-thumbs-up"></i>
                             </button>
                             <button type="button" class="btn btn-sm ${feedback == '2' ? 'btn-primary' : 'btn-white'}" id="btnThumbDown" data-bs-toggle="modal" data-bs-target="#shareFeedback" onclick="code_reader.setAnswerThumbAction(this, '2')">
                                 <i class="far fa-thumbs-down"></i>
                             </button>
                         </div>`
                     } else {
                         return ""
                     }
                 },
                 setAnswerThumbAction: function (el, status) {
                     if (isSevice == "1") {
                         var $buttonUp = $("#btnThumbUp")
                         var $buttonDown = $("#btnThumbDown")

                         $buttonUp.prop('disabled', true);
                         $buttonDown.prop('disabled', true);
                         $buttonUp.attr('class', 'btn btn-sm btn-white')
                         $buttonDown.attr('class', 'btn btn-sm btn-white')

                         var self = this
                         if (self.thumbstatus == status) {
                             self.thumbstatus = "0"
                         } else {
                             self.thumbstatus = status
                         }

                         $.ajax({
                             type: "POST",
                             url: "/code-readerHandler.ashx",
                             data: {
                                 ssid: sid,
                                 oaId: self.oaId,
                                 status: self.thumbstatus,
                                 action: "storeThumb",
                             },
                             complete: function () {
                                 if (self.thumbstatus == "1") {
                                     $buttonUp.attr('class', 'btn btn-sm btn-primary')
                                 } else if (self.thumbstatus == "2") {
                                     $buttonDown.attr('class', 'btn btn-sm btn-primary')
                                 } else if (self.thumbstatus == "0") {
                                     $buttonUp.attr('class', 'btn btn-sm btn-white')
                                     $buttonDown.attr('class', 'btn btn-sm btn-white')
                                 }

                                 gotNew = true

                                 $buttonUp.prop('disabled', false)
                                 $buttonDown.prop('disabled', false)
                             }
                         })
                     }
                 },
                 storFeedbackAction: function (el) {
                     if (isSevice == "1") {
                         var self = this

                         $.ajax({
                             type: "POST",
                             url: "/code-readerHandler.ashx",
                             data: {
                                 ssid: sid,
                                 oaId: self.oaId,
                                 txtFeedback: txtFeedback.val(),
                                 action: "storeFeedback",
                             },
                             complete: function () {
                                 $('#shareFeedback').modal('toggle')
                                 $('#shareFeedbackComplete').modal('toggle')
                                 txtFeedback.val("")
                             }
                         })
                     }
                 },
                 storePromptAndAnswer: function (result, status) {
                     if (isSevice == "1" && chkSaveHistory.prop("checked") == true) {
                         var self = this

                         $.ajax({
                             type: "POST",
                             url: "/code-readerHandler.ashx",
                             data: {
                                 ssid: sid,
                                 prompt: divPormt.html(),
                                 oaId: self.oaId,
                                 contractAddress: self.contractAddress,
                                 selectedFiles: JSON.stringify(self.source),
                                 model: oa_model,
                                 setting: JSON.stringify({
                                     provider: aiProvider.val(),
                                     systemrole: oa_rolesystemcontent,
                                 }),
                                 result: JSON.stringify(result),
                                 status: status,
                                 action: "storePrompt",
                             },
                             complete: function () {
                                 gotNew = true
                             }
                         })
                     }
                 },
                 renderHistory(el, index) {
                     var hitem = responseSavedHistory[index]
                     var self = this

                     if (hitem['oaId']) {
                         self.oaId = hitem['oaId']
                     } else {
                         self.oaId = ""
                     }

                     divPormt.html(htmlEnc(hitem['prompt']))

                     var hitem_result = JSON.parse(hitem['result'])
                     if (hitem['status'] == '2') {
                         var html = ""
                         if (hitem_result['error']['message']) {
                             if (hitem_result['error']['message'] == "The model: `gpt-4` does not exist") {
                                 html = self.renderAlertBox('danger', "The provided API key does not have access to GPT-4. Please change to a different key or use GPT-3.5.")
                             } else {
                                 html = self.renderAlertBox('danger', hitem_result['error']['message'])
                             }
                         } else {
                             html = self.renderAlertBox('danger', hitem_result['error']['code'])
                         }

                         divGeneratedOpenAI.hide()
                         divAnswer.html(html)
                     } else if (hitem['status'] == '1' && hitem['oaId']) {
                         var html = getAiResponseText(hitem_result)
                         html = htmlEnc(html).replace(/\n/g, '<br/>')
                         html += getStopReasonAlert(hitem_result).alertHtml

                         self.thumbstatus = htmlEnc(hitem['feedback'])
                         html += self.renderAnswerThumbsAction(htmlEnc(hitem['feedback']))

                         divAnswer.html(html)
                         divGeneratedOpenAI.show()
                     } else {
                         divAnswer.html("")
                     }
                     divPormtAnswer.show()

                     if (hitem['contractAddress']) {
                         self.source = JSON.parse(hitem['selectedFiles'])
                         var allCheckboxes = document.querySelectorAll('input[name="chkContractFile"]');
                         for (const checkbox of allCheckboxes) {
                             checkbox.checked = false;
                         }

                         for (const sourceName in code_reader.source) {
                             const checkbox = document.querySelector(`input[name="chkContractFile"][data-cname="${sourceName}"]`);
                             if (checkbox) {
                                 checkbox.checked = true;
                             } else {
                             }
                         }
                     }

                     modalSavedHistory.hide()
                 },
             }

             if (isLogin == "1") {
                 $("#aiProvider_opt_groq").prop("disabled", false)
                 aiProvider.val("groq")
             } else {
                 $("#aiProvider_opt_groq").prop("title", "To use this feature, please login to your BaseScan account and return to this page")
             }
             if (isSevice != "3") {
                 $('#divHistory').show()
             }

             if (isSevice == "1") {
                 chkSaveHistory.change(function () {
                     if ($(this).is(":checked")) {
                         localStorage.setItem("codereader_history", "1");
                     } else {
                         localStorage.removeItem("codereader_history");
                     }
                 });
                 if (localStorage.getItem("codereader_history") !== null) {
                     if (localStorage.getItem("codereader_history") == "1") {
                         chkSaveHistory.prop("checked", true)
                     }
                 }
                 chkSaveHistory.prop("disabled", false)
                 btnSavedHistory.show()
             } else {
                 var divSaveHistory = document.getElementById('divSaveHistory')
                 var tooltip = new bootstrap.Popover(divSaveHistory, {
                     content: 'To use this feature, please login to your BaseScan account and return to this page',
                     trigger: "hover"
                 })
             }

             aiProvider.change(function () {
                 syncProviderUi()
             })

             gptMode.change(function () {
                 oa_model = $(this).val()
                 var note = $(this).find(':selected').data('note') || ""
                 if (note) {
                     gptModeExtra.show()
                     gptModeExtra.text(note)
                 } else {
                     gptModeExtra.hide()
                     gptModeExtra.text("")
                 }
             })

             var modelRefreshTimer = null
             inputOpenAIApiKey.on("input.models change.models", function () {
                 clearTimeout(modelRefreshTimer)
                 modelRefreshTimer = setTimeout(refreshProviderModels, 600)
             })

             chkSaveKey.change(function () {
                 var storageKey = getApiKeyStorageKey()
                 if (!storageKey) {
                     return
                 }

                 if ($(this).is(":checked")) {
                     localStorage.setItem(storageKey, inputOpenAIApiKey.val());
                 } else {
                     localStorage.removeItem(storageKey);
                 }
                 bindApiKeyStorage()
             });

             syncProviderUi()

             for (const checkbox of checkboxes) {
                 const cname = checkbox.getAttribute('data-cname');
                 const csource = checkbox.getAttribute('data-csource');

                 if (checkbox.checked) {
                     code_reader.source[cname] = {
                         cname: csource,
                     };
                 }

                 checkbox.addEventListener('change', function () {
                     const cname = this.getAttribute('data-cname');
                     const csource = this.getAttribute('data-csource');
                     const checkboxId = this.id;

                     if (this.checked) {
                         code_reader.source[cname] = {
                             cname: csource,
                         };
                     } else {
                         delete code_reader.source[cname];
                     }
                 });
             }
         }

         // Process for sub dropdown menu
(function ($bs) {
    if (!$bs) return;

    const CLASS_NAME = 'has-child-dropdown-show';

    $bs.Dropdown.prototype.toggle = (function (_original) {
        return function () {
            if (this._element.classList.contains('multilevelddl')) {
                document.querySelectorAll('.' + CLASS_NAME).forEach(function (e) {
                    e.classList.remove(CLASS_NAME);
                });

                let dd = this._element.closest('.dropdown')?.parentNode?.closest('.dropdown');
                for (; dd && dd !== document; dd = dd.parentNode?.closest('.dropdown')) {
                    dd.classList.add(CLASS_NAME);
                }
            }
            return _original.call(this);
        };
    })($bs.Dropdown.prototype.toggle);

    document.addEventListener('DOMContentLoaded', function () {
        document.querySelectorAll('.dropdown').forEach(function (dd) {
            dd.addEventListener('hide.bs.dropdown', function (e) {
                if (this.classList.contains(CLASS_NAME)) {
                    this.classList.remove(CLASS_NAME);
                    e.preventDefault();
                }
                e.stopPropagation();
            });
        });

        document.querySelectorAll('.dropdown-hover, .dropdown-hover-all .dropdown').forEach(function (dd) {
            dd.addEventListener('mouseenter', function (e) {
                let toggle = e.target.querySelector(':scope>[data-bs-toggle="dropdown"]');
                if (toggle && !toggle.classList.contains('show')) {
                    $bs.Dropdown.getOrCreateInstance(toggle).toggle();
                    dd.classList.add(CLASS_NAME);
                }
            });
            dd.addEventListener('mouseleave', function (e) {
                let toggle = e.target.querySelector(':scope>[data-bs-toggle="dropdown"]');
                if (toggle && toggle.classList.contains('show')) {
                    $bs.Dropdown.getOrCreateInstance(toggle).toggle();
                }
            });
        });
    });
})(window.bootstrap);
var addressContract = '0x81D7a91860a70B312E68c075C896aA06281cCC63';