Spreadsheet-ParseXLSX-0.35/0000775000175000017500000000000014576335353014443 5ustar michamichaSpreadsheet-ParseXLSX-0.35/Changes0000644000175000017500000001404214576335353015735 0ustar michamichaRevision history for Spreadsheet-ParseXLSX 0.35 2024-03-19 - don't rely on use mro (#14) 0.34 2024-03-13 - Merge pull request #13 from nrdvana/master - Fix memory leak between Sheet and Cell, and related to XML::Twig - Unit test to verify workbook garbage collection 0.33 2024-03-08 - performance fix computing merged cells 0.32 2024-03-08 - Require minimum version of Archive::Zip 0.31 2024-01-18 - CVE-2024-23525: fixed in previous release 0.30 2024-01-17 - Fix xml external entity (XEE) injection bug - added unit test for support of purl.oclc.org namespace ... see issue #7 - removed tidyness tests again as it fails on weaver'ed code 0.29 2024-01-02 - Merge pull request #1 from theevilapplepie/master: Fix for 'Argument "" isn't numeric in addition (+) at /usr/local/shar… - Merge pull request #2 from oharakouhei/master Incorrect cell values due to phonetic data doy#72 - Merge pull request #3 from nickzoic/master: Fix die message in parse() - Merge pull request #4 from mazurin/master: Cannot open password protected SHA1 encrypted files. doy#68 - Merge pull request #5 from danderman/master: use date format detection based on Spreadsheet::XLSX - Merge pull request #6 from gquipster/master: Add rudimentary support for hyperlinks in cells 0.28 2024-01-02 - New maintainer - Fix possible memory bomb as reported in https://github.com/haile01/perl_spreadsheet_excel_rce_poc/blob/main/parse_xlsx_bomb.md - Updated Dist::Zilla configuration fixing deprecation warnings 0.27 2016-08-16 - Fix issues parsing sheets whose cell elements do not have location attributes (dgiordano, #61) 0.26 2016-08-16 - Add explicit dependency on perl 5.10 (we apparently broke 5.8 support at some point) (andk, #62) 0.25 2016-07-14 - Fix encryption.t test on Windows (marks6i, #60) 0.24 2016-06-25 - Support scalar refs as input (rshadow, #59) 0.23 2016-05-28 - Stable release 0.22-TRIAL 2016-05-25 - Fix some regressions around cell style application (Tux) - Speed up parsing of large spreadsheets 0.21-TRIAL 2016-05-23 - Give a better error message when opening xls files (mchendriks, #52) - Fix parsing files with non-default XML namespace names - Handle files with no style information - Handle fills that don't specify a pattern type (vfilatov, #41) - Fix parsing of encrypted files on big-endian systems (mazurin, Tux, #50, #51) - Support reading files where the case is specified incorrectly (this is likely actually a bug in the program generating these files, but I don't think this fix is likely to break any real files) (Tux, #57) - Ensure we coerce hidden state for rows and columns to booleans (Jeffery Hammock) - Support extracting rich text formatting from cells (Carlos Alberto Danzos) 0.20 2015-12-05 - Fix the test suite on perls compiled with -Duselongdouble (Slaven Rezić, #49) 0.19 2015-12-04 - Support encrypted xlsx files (mazurin, #37) - Support absolute internal pathnames (zhouzhen1, #46) - Support hidden rows, columns, and sheets (ssimms, #47) 0.18 2015-09-19 - Fix 5.8 support (rjbs, #39) - Fix parsing of files which have empty worksheets (for instance, worksheets that are only charts) (Stuart Watt, #43) 0.17 2015-03-25 - Fix using_1904_date (f20, #31) - Add support for get_header, get_footer, get_margin_*, get_print_scale, get_paper, is_portrait, and get_start_page, and also fill in the BdrDiag, Rotate, Indent, and Shrink format properties (Dave Clarke, #35) - Fix JasperSoft-created files (rdboisvert, #27) - bump required perl version to 5.010 (zhouzhen1, #33) - Fix Google Drive-created files (reported by ovidiubarbu, #29) 0.16 2014-07-05 - Cells should default to locked (f20, #25) - Support ColFmtNo and TabColor (Fitz Elliott, #26) - try to avoid dying on certain oddly generated spreadsheets with missing data (#23) 0.15 2014-07-04 - Parse shared strings and worksheets as they are read rather than reading everything into memory, to reduce memory usage (merrilymeredith, #21) 0.14 2014-04-03 - fix incompatibility with newer Spreadsheet::ParseExcel (reported by dsteinbrunner, #22) 0.13 2014-01-29 - support locked and hidden cells (Tux, #15) - "default color" is now returned as undef, rather than assuming it's always black (Tux, #15) 0.12 2013-12-09 - support underline and strikethrough font properties (matrot, #14) 0.11 2013-11-13 - fix $workbook->get_filename (masonik, #13) 0.10 2013-11-06 - support inlineStr cells (David Gang, #12) 0.09 2013-10-09 - fix getting cell values for cells with rich text contents (merrilymeredith, #11) - support merged cells (rolaf, #10) - row_range and col_range for empty worksheets (rolaf, #8) - support error cells (rolaf, #7) - support worksheets with a range selection 0.08 2013-09-10 - fix string lookups when the workbook contains cells with complicated formatting (Drokaten, #6) - fix warnings during parsing when using -w 0.07 2013-09-05 - support boolean and string format cells (Drokaten, #6) - provide a working minimum version for Spreadsheet::ParseExcel (rjbs) 0.06 2013-08-29 - fix conversion between cell and column index for large column indices 0.05 2013-07-31 - more fixes for xlsx format variations (mikaelg79, #5) 0.04 2013-07-31 - fix spreadsheets that only have a single cell (servuscmj, #2) - fixes for some variations in how xlsx files are generated (tophopstop, #3) - fix spreadsheets with more than 26 columns (tophopstop, #4) 0.03 2013-07-26 - fix exception when the 'selection' node doesn't exist (reported by melick, #1) 0.02 2013-07-17 - fix bugtracker link 0.01 2013-07-16 - Initial release Spreadsheet-ParseXLSX-0.35/README0000644000175000017500000000043714576335353015325 0ustar michamichaThis archive contains the distribution Spreadsheet-ParseXLSX, version 0.35: parse XLSX files This software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License This README file was generated by Dist::Zilla::Plugin::Readme v6.031. Spreadsheet-ParseXLSX-0.35/weaver.ini0000644000175000017500000000051314576335353016432 0ustar michamicha[@CorePrep] [-SingleEncoding] [Name] [Version] [Region / prelude] [Generic / SYNOPSIS] [Generic / DESCRIPTION] [Generic / OVERVIEW] [Collect / ATTRIBUTES] command = attr [Collect / METHODS] command = method [Collect / FUNCTIONS] command = func [Leftovers] [Region / postlude] [Authors] [Contributors] [Legal] Spreadsheet-ParseXLSX-0.35/t/0000775000175000017500000000000014576335353014706 5ustar michamichaSpreadsheet-ParseXLSX-0.35/t/bug-10.t0000644000175000017500000000514114576335353016065 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-10.xlsx'); is($wb->worksheet_count, 4); { my @contents = ( [ ['Foo01', 0], ['Bar01', 0] ], [ ['Foo02', 0], ['Bar02', 0] ], [ ['Foo03', 0], ['Bar03', 0] ], [ ['Foo04', 0], ['Bar04', 0] ], ); my $ws = $wb->worksheet(0); for my $row (0..$#contents) { for my $col (0..$#{ $contents[$row] }) { my $cell = $ws->get_cell($row, $col); is($cell->value, $contents[$row][$col][0]); is(!!$cell->is_merged, !!$contents[$row][$col][1]); } } is($ws->get_merged_areas, undef); } { my @contents = ( [ ['Foo01', 0], ['Bar01', 0] ], [ ['Foo02', 0], ['Bar02', 0] ], [ ['Foo03', 0], ['Bar03', 0] ], [ ['Foo04', 1], ['', 1] ], ); my $ws = $wb->worksheet(1); for my $row (0..$#contents) { for my $col (0..$#{ $contents[$row] }) { my $cell = $ws->get_cell($row, $col); is($cell->value, $contents[$row][$col][0]); is(!!$cell->is_merged, !!$contents[$row][$col][1]); } } is_deeply( $ws->get_merged_areas, [ [ 3, 0, 3, 1 ] ], ); } { my @contents = ( [ ['Foo01', 0], ['Bar01', 0] ], [ ['Foo02', 0], ['Bar02', 0] ], [ ['Foo03', 0], ['Bar03', 1] ], [ ['Foo04', 0], ['', 1] ], ); my $ws = $wb->worksheet(2); for my $row (0..$#contents) { for my $col (0..$#{ $contents[$row] }) { my $cell = $ws->get_cell($row, $col); is($cell->value, $contents[$row][$col][0]); is(!!$cell->is_merged, !!$contents[$row][$col][1]); } } is_deeply( $ws->get_merged_areas, [ [ 2, 1, 3, 1 ] ], ); } { my @contents = ( [ ['Foo01', 0], ['Bar01', 0] ], [ ['Foo02', 0], ['Bar02', 0] ], [ ['Foo03', 1], ['', 1] ], [ ['', 1], ['', 1] ], [ ['Foo04', 0], ['Bar04', 1] ], [ ['Foo05', 0], ['', 1] ], [ ['Foo06', 1], ['', 1] ], ); my $ws = $wb->worksheet(3); for my $row (0..$#contents) { for my $col (0..$#{ $contents[$row] }) { my $cell = $ws->get_cell($row, $col); is($cell->value, $contents[$row][$col][0]); is(!!$cell->is_merged, !!$contents[$row][$col][1]); } } is_deeply( $ws->get_merged_areas, [ [ 2, 0, 3, 1 ], [ 4, 1, 5, 1 ], [ 6, 0, 6, 1 ], ], ); } done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-3.t0000644000175000017500000000354214576335353016012 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-3.xlsx'); is($wb->worksheet_count, 1); my $ws = $wb->worksheet(0); is($ws->get_name, 'Sheet1'); is_deeply([$ws->row_range], [0, 1]); is_deeply([$ws->col_range], [0, 2]); is_deeply($ws->{Selection}, [1, 2]); { my $cell = $ws->get_cell(0, 0); is($cell->value, "red"); is($cell->type, 'Text'); is($cell->get_format->{Font}{Color}, '#000000'); is($cell->get_format->{Font}{Name}, 'Arial'); is($cell->get_format->{Font}{Height}, '10'); } { my $cell = $ws->get_cell(0, 1); is($cell->value, "blue"); is($cell->type, 'Text'); is($cell->get_format->{Font}{Color}, '#000000'); is($cell->get_format->{Font}{Name}, 'Arial'); is($cell->get_format->{Font}{Height}, '10'); } { my $cell = $ws->get_cell(0, 2); is($cell->value, "green"); is($cell->type, 'Text'); is($cell->get_format->{Font}{Color}, '#000000'); is($cell->get_format->{Font}{Name}, 'Arial'); is($cell->get_format->{Font}{Height}, '10'); } { my $cell = $ws->get_cell(1, 0); is($cell->value, "233"); is($cell->type, 'Numeric'); is($cell->get_format->{Font}{Color}, '#000000'); is($cell->get_format->{Font}{Name}, 'Arial'); is($cell->get_format->{Font}{Height}, '10'); } { my $cell = $ws->get_cell(1, 1); is($cell->value, "444"); is($cell->type, 'Numeric'); is($cell->get_format->{Font}{Color}, '#000000'); is($cell->get_format->{Font}{Name}, 'Arial'); is($cell->get_format->{Font}{Height}, '10'); } { my $cell = $ws->get_cell(1, 2); is($cell->value, "566"); is($cell->type, 'Numeric'); is($cell->get_format->{Font}{Color}, '#000000'); is($cell->get_format->{Font}{Name}, 'Arial'); is($cell->get_format->{Font}{Height}, '10'); } done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-11.t0000644000175000017500000000047514576335353016073 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-11.xlsx'); is($wb->worksheet_count, 1); my $ws = $wb->worksheet(0); is($ws->get_cell(0, 0)->value, "foobarbaz"); is($ws->get_cell(0, 1)->value, "quux"); done_testing; Spreadsheet-ParseXLSX-0.35/t/author-no-tabs.t0000644000175000017500000000277214576335353017744 0ustar michamicha BEGIN { unless ($ENV{AUTHOR_TESTING}) { print qq{1..0 # SKIP these tests are for testing by the author\n}; exit } } use strict; use warnings; # this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.15 use Test::More 0.88; use Test::NoTabs; my @files = ( 'lib/Spreadsheet/ParseXLSX.pm', 'lib/Spreadsheet/ParseXLSX/Cell.pm', 'lib/Spreadsheet/ParseXLSX/Decryptor.pm', 'lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm', 'lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm', 'lib/Spreadsheet/ParseXLSX/Worksheet.pm', 't/00-compile.t', 't/ahihi.t', 't/author-critic.t', 't/author-eol.t', 't/author-no-tabs.t', 't/author-pod-coverage.t', 't/author-pod-syntax.t', 't/basic.t', 't/bug-10.t', 't/bug-11.t', 't/bug-12.t', 't/bug-13.t', 't/bug-14.t', 't/bug-15.t', 't/bug-16.t', 't/bug-17.t', 't/bug-2.t', 't/bug-29.t', 't/bug-3.t', 't/bug-32.t', 't/bug-38.t', 't/bug-4.t', 't/bug-41.t', 't/bug-5.t', 't/bug-57.t', 't/bug-6-2.t', 't/bug-6.t', 't/bug-61.t', 't/bug-7.t', 't/bug-72.t', 't/bug-8.t', 't/bug-md-10.t', 't/bug-md-11.t', 't/bug-md-7.t', 't/cell-to-row-col.t', 't/column-formats.t', 't/encryption.t', 't/garbage-collect.t', 't/hidden-row-and-column.t', 't/hidden-sheet.t', 't/hyperlinks.t', 't/page-Setup.t', 't/rich.t', 't/tab-color.t', 't/target-abspath.t' ); notabs_ok($_) foreach @files; done_testing; Spreadsheet-ParseXLSX-0.35/t/tab-color.t0000644000175000017500000000046014576335353016753 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/tab-color.xlsx'); my $ws1 = $wb->worksheet(0); is($ws1->get_tab_color, '#FF0000'); my $ws2 = $wb->worksheet(1); is($ws2->get_tab_color, undef); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-72.t0000644000175000017500000000057614576335353016104 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use utf8; use Spreadsheet::ParseXLSX; use Data::Dumper; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-72.xlsx'); my $ws = $wb->worksheet(0); my $b1 = $ws->get_cell(0, 0); my $b2 = $ws->get_cell(1, 0); is $b1->value(), "日本語あいうえお"; is $b2->value(), "日本語あいうえお"; done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-61.t0000644000175000017500000000031614576335353016072 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-61.xlsx'); pass('it parses successfully'); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-md-11.t0000644000175000017500000000032614576335353016464 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb; eval { $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-md-11.xlsx'); }; ok(defined($wb)); done_testing; Spreadsheet-ParseXLSX-0.35/t/00-compile.t0000644000175000017500000000320214576335353016733 0ustar michamichause 5.006; use strict; use warnings; # this test was generated with Dist::Zilla::Plugin::Test::Compile 2.058 use Test::More; plan tests => 6 + ($ENV{AUTHOR_TESTING} ? 1 : 0); my @module_files = ( 'Spreadsheet/ParseXLSX.pm', 'Spreadsheet/ParseXLSX/Cell.pm', 'Spreadsheet/ParseXLSX/Decryptor.pm', 'Spreadsheet/ParseXLSX/Decryptor/Agile.pm', 'Spreadsheet/ParseXLSX/Decryptor/Standard.pm', 'Spreadsheet/ParseXLSX/Worksheet.pm' ); # no fake home requested my @switches = ( -d 'blib' ? '-Mblib' : '-Ilib', ); use File::Spec; use IPC::Open3; use IO::Handle; open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!"; my @warnings; for my $lib (@module_files) { # see L my $stderr = IO::Handle->new; diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} } $^X, @switches, '-e', "require q[$lib]")) if $ENV{PERL_COMPILE_TEST_DEBUG}; my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]"); binmode $stderr, ':crlf' if $^O eq 'MSWin32'; my @_warnings = <$stderr>; waitpid($pid, 0); is($?, 0, "$lib loaded ok"); shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/ and not eval { +require blib; blib->VERSION('1.01') }; if (@_warnings) { warn @_warnings; push @warnings, @_warnings; } } is(scalar(@warnings), 0, 'no warnings found') or diag 'got warnings: ', ( Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '', @warnings) ) if $ENV{AUTHOR_TESTING}; Spreadsheet-ParseXLSX-0.35/t/bug-7.t0000644000175000017500000000041714576335353016014 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-7.xlsx'); is($wb->worksheet_count, 3); my $ws = $wb->worksheet(0); is($ws->get_cell(0, 0)->value, "#N/A"); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-5.t0000644000175000017500000000031214576335353016004 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-5.xlsx'); is($wb->worksheet_count, 1); done_testing; Spreadsheet-ParseXLSX-0.35/t/target-abspath.t0000644000175000017500000000036514576335353020003 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/target-abspath.xlsx'); like($wb->worksheet(0)->get_cell(1, 0)->value, qr/^10213\.5/); done_testing; Spreadsheet-ParseXLSX-0.35/t/author-pod-syntax.t0000644000175000017500000000045414576335353020502 0ustar michamicha#!perl BEGIN { unless ($ENV{AUTHOR_TESTING}) { print qq{1..0 # SKIP these tests are for testing by the author\n}; exit } } # This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests. use strict; use warnings; use Test::More; use Test::Pod 1.41; all_pod_files_ok(); Spreadsheet-ParseXLSX-0.35/t/bug-md-10.t0000644000175000017500000000040314576335353016457 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb; eval { $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-md-10.xlsx'); }; ok(!defined($wb)); ok($@); ok($@ =~ /^cannot expand &xxe/); done_testing; Spreadsheet-ParseXLSX-0.35/t/hyperlinks.t0000644000175000017500000001261514576335353017266 0ustar michamicha#!/usr/bin/env perl use Spreadsheet::ParseExcel::Utility qw(sheetRef); use Spreadsheet::ParseXLSX; use Test::More tests => 58; use strict; use warnings; my $spreadsheet = Spreadsheet::ParseXLSX->new(); my $workbook = $spreadsheet->parse('t/data/TestHyperlinks.xlsx'); my $worksheet = $workbook->worksheet('Sheet1'); my $expected_urls = { 'A03' => {}, # Test for cell with no hyperlink 'A06' => { desc => 'http://www.example.com', link => 'http://www.example.com/', }, 'A07' => { desc => 'www.example.com', link => 'http://www.example.com/', }, 'A09' => { desc => 'file:///..\\..\\zipple.dat', link => '../../zipple.dat', }, 'A10' => { desc => 'ftp://user:pass@example.net/pub/manuals/Excel.doc', link => 'ftp://user:pass@example.net/pub/manuals/Excel.doc', }, 'B6' => { desc => 'http://www.example.com#foo', link => 'http://www.example.com/#foo', }, 'B7' => { desc => 'www.example.com#foo', link => 'http://www.example.com/#foo', }, 'C6' => { desc => 'file:///c:\\nodir\\nofile.txt', link => 'file:///c:\\nodir\\nofile.txt', }, 'C7' => { desc => 'c:\\nodir\\nofile.txt', link => 'file:///c:\\nodir\\nofile.txt', }, 'D6' => { desc => '\\\\server\\quirks\\sometest.bat', link => 'file:///\\\\server\\quirks\\sometest.bat', }, 'D7' => { desc => 'SMB Link Sometest.bat', link => 'file:///\\\\server\\quirks\\sometest.bat', }, 'F7' => { desc => 'mailto:fred@example.net', link => 'mailto:fred@example.net', }, }; foreach my $test_cell (sort keys %$expected_urls) { # First check our cell reference is valid my ($row, $column) = sheetRef($test_cell); unless (defined($row) && defined($column)) { warn(Data::Dumper::Dumper($test_cell, $row, $column, sheetRef($test_cell))); die('Unable to parse cell reference: ' . $test_cell); } # Now extract out our expected data my $link = $expected_urls->{$test_cell}->{link}; my $desc = $expected_urls->{$test_cell}->{desc}; my $relative_link = $expected_urls->{$test_cell}->{rel} || 0; if ($relative_link) { $link = 'file:///t/data/' . $link; } # Tidy up our cell reference as I frigged some of them to ensure test order if ($test_cell =~ /^([A-Z]{1})0(\d{1})$/) { $test_cell = $1 . $2; } my $cell = $worksheet->get_cell($row, $column); ok(defined($cell), sprintf('Cell "%s" defined', $test_cell)); SKIP: { skip(sprintf('Cell "%s" not defined', $test_cell), ($link ? 3 : 1)) unless(defined($cell)); my $hyperlink = $cell->get_hyperlink(); if ($link) { ok(ref($hyperlink) eq 'ARRAY', 'Got hyperlink information from cell: ' . $test_cell); is($hyperlink->[0], $desc, sprintf('Cell "%s" hyperlink description matches "%s"', $test_cell, $desc)); is($hyperlink->[1], $link, sprintf('Cell "%s" hyperlink destination matches "%s"', $test_cell, $link)); } else { is($hyperlink, undef, sprintf('Cell "%s" has no hyperlink', $test_cell)); } } } # The following tests return different values to Spreadsheet::ParseExcel - I don't know if this is correct or not my $todo_expected_urls = { 'E6' => { desc => 'TestHyperlinks.xlsx', rel => 1, link => 'TestHyperlinks.xlsx', }, 'E7' => { desc => 'Rel: TestHyperlinks.xlsx', rel => 1, link => 'TestHyperlinks.xlsx', }, 'F6' => { desc => 'Sheet1!A7', link => '#Sheet1%21A7', }, }; TODO: { local $TODO = 'Confirmation of difference to Spreadsheet::ParseExcel required'; foreach my $test_cell (sort keys %$todo_expected_urls) { # First check our cell reference is valid my ($row, $column) = sheetRef($test_cell); unless (defined($row) && defined($column)) { warn(Data::Dumper::Dumper($test_cell, $row, $column, sheetRef($test_cell))); die('Unable to parse cell reference: ' . $test_cell); } # Now extract out our expected data my $link = $todo_expected_urls->{$test_cell}->{link}; my $desc = $todo_expected_urls->{$test_cell}->{desc}; my $relative_link = $todo_expected_urls->{$test_cell}->{rel} || 0; if ($relative_link) { $link = 'file:///t/data/' . $link; } # Tidy up our cell reference as I frigged some of them to ensure test order if ($test_cell =~ /^([A-Z]{1})0(\d{1})$/) { $test_cell = $1 . $2; } my $cell = $worksheet->get_cell($row, $column); ok(defined($cell), sprintf('Cell "%s" defined', $test_cell)); SKIP: { skip(sprintf('Cell "%s" not defined', $test_cell), ($link ? 3 : 1)) unless(defined($cell)); my $hyperlink = $cell->get_hyperlink(); if ($link) { ok(ref($hyperlink) eq 'ARRAY', 'Got hyperlink information from cell: ' . $test_cell); is($hyperlink->[0], $desc, sprintf('Cell "%s" hyperlink description matches "%s"', $test_cell, $desc)); is($hyperlink->[1], $link, sprintf('Cell "%s" hyperlink destination matches "%s"', $test_cell, $link)); } else { is($hyperlink, undef, sprintf('Cell "%s" has no hyperlink', $test_cell)); } } } } exit; Spreadsheet-ParseXLSX-0.35/t/basic.t0000644000175000017500000002675414576335353016170 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $filename = 't/data/Test.xlsx'; my @inputs = ( $filename, do { open my $fh, '<:raw:bytes', $filename or die; $fh }, do { open my $fh, '<:raw:bytes', $filename or die; local $/; my $d = <$fh>; \$d }, ); for my $file (@inputs) { my $wb = Spreadsheet::ParseXLSX->new->parse($file); isa_ok($wb, 'Spreadsheet::ParseExcel::Workbook'); is($wb->worksheet_count, 1); # is($workbook->get_filename, $filename); # XXX my $ws = $wb->worksheet(0); isa_ok($ws, 'Spreadsheet::ParseExcel::Worksheet'); is($ws->get_name, 'Sheet1'); is_deeply([$ws->row_range], [0, 5]); is_deeply([$ws->col_range], [0, 4]); { my $cell = $ws->get_cell(0, 0); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, "Colored Cell"); is($cell->value, "Colored Cell"); is($cell->type, 'Text'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [1, '#9BBB59', '#FFFFFF']); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#FFFF00'); } { my $cell = $ws->get_cell(0, 1); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, "Wide Cell (25.00)"); is($cell->value, "Wide Cell (25.00)"); is($cell->type, 'Text'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } { my $cell = $ws->get_cell(0, 2); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, "Bordered Cell w/ Text Wrap"); is($cell->value, "Bordered Cell w/ Text Wrap"); is($cell->type, 'Text'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok($format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(1) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } { my $cell = $ws->get_cell(0, 3); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, "Middle Valigned"); is($cell->value, "Middle Valigned"); is($cell->type, 'Text'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 1); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } { my $cell = $ws->get_cell(0, 4); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, "Right Aligned and text wrapped"); is($cell->value, "Right Aligned and text wrapped"); is($cell->type, 'Text'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 3); is($format->{AlignV}, 2); ok($format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } for my $i (0..4) { is($ws->get_cell(1, $i), undef); } { my $cell = $ws->get_cell(2, 0); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, 10); is($cell->value, 10); is($cell->type, 'Numeric'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } for my $i (1..4) { is($ws->get_cell(2, $i), undef); } { my $cell = $ws->get_cell(3, 0); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, 20); is($cell->value, 20); is($cell->type, 'Numeric'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } for my $i (1..2) { is($ws->get_cell(3, $i), undef); } { my $cell = $ws->get_cell(3, 3); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, 2.5); is($cell->value, "\$2.50"); is($cell->type, 'Numeric'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } { my $cell = $ws->get_cell(3, 4); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, "<< currency cell"); is($cell->value, "<< currency cell"); is($cell->type, 'Text'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 2); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#4BACC6'); } { my $cell = $ws->get_cell(4, 0); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, 30); is($cell->value, 30); is($cell->type, 'Numeric'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } for my $i (1..4) { is($ws->get_cell(4, $i), undef); } { my $cell = $ws->get_cell(5, 0); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, 60); is($cell->value, 60); is($cell->type, 'Numeric'); is($cell->{Formula}, 'SUM(A3:A5)'); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 0); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [0, undef, undef]); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#000000'); } { my $cell = $ws->get_cell(5, 1); isa_ok($cell, 'Spreadsheet::ParseExcel::Cell'); is($cell->unformatted, "<< formula cell"); is($cell->value, "<< formula cell"); is($cell->type, 'Text'); is($cell->{Formula}, undef); my $format = $cell->get_format; isa_ok($format, 'Spreadsheet::ParseExcel::Format'); is($format->{AlignH}, 3); is($format->{AlignV}, 2); ok(!$format->{Wrap}); is_deeply($format->{Fill}, [1, '#EEECE1', '#FFFFFF']); is_deeply($format->{BdrStyle}, [(0) x 4]); is_deeply($format->{BdrColor}, [(undef) x 4]); is_deeply($format->{BdrDiag}, [0, 0, undef]); my $font = $format->{Font}; isa_ok($font, 'Spreadsheet::ParseExcel::Font'); is($font->{Name}, 'Calibri'); is($font->{Height}, 12); is($font->{Color}, '#F79646'); } for my $i (2..4) { is($ws->get_cell(5, $i), undef); } } done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-6-2.t0000644000175000017500000000634614576335353016161 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-6-2.xlsx'); is($wb->worksheet_count, 9); my %cells = ( 7 => { 0 => "acr business objects users", 1 => "MBX or Distribution group", }, 8 => { 0 => "atst", 1 => "Kevin Krause; Gale Wilson", }, 9 => { 0 => "cts tracking research", 1 => "Theresa Kreckman; Jamie Engle", }, 10 => { 0 => "docs ddm", 1 => "Marc Barney; Everett Music", }, 11 => { 0 => "docs read only", 1 => "Marc Barney; Everett Music; Theresa Kreckman; Jamie Engle", }, 12 => { 0 => "distwhl3rdparty", 1 => "Theresa Kreckman; Jamie Engle", }, 13 => { 0 => "ent logis b2b", 1 => "Mark Reed; Mark Teschner", }, 14 => { 0 => "ent qamasterx", 1 => "Margaret Davis; Ron Medinger", }, 15 => { 0 => "ent shipments", 1 => "Jamie Engle; Teresa Kreckman", }, 16 => { 0 => "ful distrib plan", 1 => "Theresa Kreckman", }, 17 => { 0 => "ful traffic share", 1 => "Mark Reed; Mark Teschner", }, 18 => { 0 => "ful", 1 => "Mark Teschner", }, 19 => { 0 => "hwc_international", 1 => "Kelly Simmons", }, 20 => { 0 => "masterpack/lotships", 1 => "MBX or Distribution group", }, 21 => { 0 => "medford distribution planning - mbx access", 1 => "MBX or Distribution group", }, 22 => { 0 => "nph fruit team minutes", 1 => "MBX or Distribution group", }, 23 => { 0 => "odd costco", 1 => "Theresa Kreckman; Jamie Engle", }, 24 => { 0 => "odd qvc", 1 => "Theresa Kreckman; Jamie Engle", }, 25 => { 0 => "opr ctsdata", 1 => "Theresa Kreckman; Jamie Engle", }, 26 => { 0 => "opr selectinterface", 1 => "Jamie Engle; Theresa Kreckman", }, 27 => { 0 => "opr worldship", 1 => "Chris Larson; Jamie Engle", }, 28 => { 0 => "opr-dropship", 1 => "Theresa Kreckman; Carolyn Townsend", }, 29 => { 0 => "opr-ship docks info", 1 => "Chris Larson; Pam Saxbury", }, 30 => { 0 => "opr-shipoutbol", 1 => "Mark Reed; Mark Teschner; Theresa Kreckman", }, 31 => { 0 => "proxy internet", 1 => "Chris Works", }, 32 => { 0 => "sap users", 1 => "MBX or Distribution group", }, 33 => { 0 => "trailertracking", 1 => "Theresa Kreckman; Everett Music; Jamie Engle", }, 34 => { 0 => "vendorunitaccess", 1 => "Carolyn Townsend; Everett Music; Theresa Kreckman", }, 35 => { 0 => "wms dist", 1 => "MBX or Distribution group", }, ); my $ws = $wb->worksheet('DSGroups'); for my $row (sort { $a <=> $b } keys %cells) { for my $col (sort { $a <=> $b } keys %{ $cells{$row} }) { my $cell = $ws->get_cell($row, $col); next unless $cell; is($cell->value, $cells{$row}{$col}, "correct value for ($row, $col)"); } } done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-12.t0000644000175000017500000000077314576335353016075 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-12.xlsx'); is($wb->worksheet_count, 1); my $ws = $wb->worksheet(0); my ($rmin, $rmax) = $ws->row_range; my ($cmin, $cmax) = $ws->col_range; is($rmin, 0); is($rmax, 0); is($cmin, 0); is($cmax, 3); is($ws->get_cell(0, 0)->value, 7); is($ws->get_cell(0, 1)->value, 3); is($ws->get_cell(0, 2)->value, 30); is($ws->get_cell(0, 3)->value, 'Kuku'); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-14.t0000644000175000017500000000167714576335353016103 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-14.xlsx'); my $ws = $wb->worksheet(0); for my $row (0..6) { for my $col ($row..6) { next if $row == 5 && $col == 6; my $font = $ws->get_cell($row, $col)->get_format->{Font}; is($font->{Name}, 'Arial'); is(!!$font->{Bold}, $row == 1 || $col == 1); is(!!$font->{Italic}, $row == 2 || $col == 2); is($font->{Height}, 10); is(!!$font->{Underline}, $row == 3 || $col == 3); if ($row == 3 || $col == 3) { is($font->{UnderlineStyle}, 1); } is($font->{Color}, '#000000'); is(!!$font->{Strikeout}, $row == 4 || $col == 4); is( $font->{Super}, $row == 5 || $col == 5 ? 2 : $row == 6 || $col == 6 ? 1 : 0 ); } } done_testing; Spreadsheet-ParseXLSX-0.35/t/author-critic.t0000644000175000017500000000040314576335353017643 0ustar michamicha#!perl BEGIN { unless ($ENV{AUTHOR_TESTING}) { print qq{1..0 # SKIP these tests are for testing by the author\n}; exit } } use strict; use warnings; use Test::Perl::Critic (-profile => ".perlcriticrc") x!! -e ".perlcriticrc"; all_critic_ok(); Spreadsheet-ParseXLSX-0.35/t/column-formats.t0000644000175000017500000000111014576335353020030 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/column-formats.xlsx'); my $ws = $wb->worksheet(0); ok(my $col_format_nos = $ws->{ColFmtNo}); my @col_formats = map { $wb->{Format}[ $_ ] } @$col_format_nos; is_deeply($col_formats[0]->{Fill}, [1, '#FF0000', '#FFFFFF']); is($col_formats[1]->{AlignH}, 3); is($col_formats[1]->{AlignV}, 0); my $font = $col_formats[2]->{Font}; is_deeply($font->{Name}, 'Arial'); is_deeply($font->{Height}, 16); is_deeply($font->{Bold}, 1); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-38.t0000644000175000017500000000031614576335353016076 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-38.xlsx'); pass('it parses successfully'); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-16.t0000644000175000017500000000077014576335353016076 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-16.xlsx'); my $ws = $wb->worksheet(0); my $b1 = $ws->get_cell(0, 0); ok($b1->get_format->{Lock}); my $b2 = $ws->get_cell(1, 0); ok(!$b2->get_format->{Lock}); my $b3 = $ws->get_cell(2, 0); ok($b3->get_format->{Lock}); my $b4 = $ws->get_cell(3, 0); ok(!$b4->get_format->{Lock}); my $b5 = $ws->get_cell(4, 0); ok($b5->get_format->{Lock}); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-md-7.t0000644000175000017500000000055714576335353016417 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb; eval { $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-md-7.xlsx'); }; # activate this when #7 is fixed if (0) { isa_ok($wb, 'Spreadsheet::ParseExcel::Workbook'); } else { ok(!defined($wb)); ok($@); ok($@ =~ /^invalid workbook/); } done_testing; Spreadsheet-ParseXLSX-0.35/t/rich.t0000644000175000017500000000104514576335353016016 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-11.xlsx'); is($wb->worksheet_count, 1); my $ws = $wb->worksheet(0); is($ws->get_cell(0, 0)->value, "foobarbaz"); my $rich_text_data = $ws->get_cell(0, 0)->get_rich_text; is($rich_text_data->[0][0], 0); ok(!$rich_text_data->[0][1]->{Italic}); is($rich_text_data->[1][0], 3); ok($rich_text_data->[1][1]->{Italic}); is($rich_text_data->[2][0], 6); ok(!$rich_text_data->[2][1]->{Italic}); done_testing; Spreadsheet-ParseXLSX-0.35/t/hidden-row-and-column.t0000644000175000017500000000067314576335353021172 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/hidden-row-and-column.xlsx'); my $ws = $wb->worksheet(0); ok(!$ws->is_row_hidden(0), 'Regular row is not hidden'); ok( $ws->is_row_hidden(1), 'Hidden row is hidden'); ok(!$ws->is_col_hidden(0), 'Regular column is not hidden'); ok( $ws->is_col_hidden(1), 'Hidden column is hidden'); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-41.t0000644000175000017500000000044014576335353016066 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; { local $SIG{__WARN__} = sub { fail("unexpected warning: $_[0]") }; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-41.xlsx'); pass('it parses successfully'); } done_testing; Spreadsheet-ParseXLSX-0.35/t/cell-to-row-col.t0000644000175000017500000000100114576335353020000 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my %tests = ( A1 => [0, 0], Z3 => [2, 25], AA5 => [4, 26], IV256 => [255, 255], ZZ10 => [9, 701], AAA8 => [7, 702], XFD22 => [21, 16383], ); for my $cell (sort keys %tests) { # XXX not public API, but i'm lazy is_deeply( [ Spreadsheet::ParseXLSX->_cell_to_row_col($cell) ], $tests{$cell}, "correct value for $cell" ); } done_testing; Spreadsheet-ParseXLSX-0.35/t/hidden-sheet.t0000644000175000017500000000055314576335353017435 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/hidden-sheet.xlsx'); my $ws1 = $wb->worksheet(0); ok(!$ws1->is_sheet_hidden(), 'Regular worksheet is not hidden'); my $ws2 = $wb->worksheet(1); ok($ws2->is_sheet_hidden(), 'Hidden worksheet is hidden'); done_testing; Spreadsheet-ParseXLSX-0.35/t/encryption.t0000644000175000017500000000336714576335353017274 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; { my $filename = 't/data/encryption-agile-123q.xlsx'; my @inputs = ( $filename, do { open my $fh, '<:raw:bytes', $filename or die; $fh }, do { open my $fh, '<:raw:bytes', $filename or die; local $/; my $d = <$fh>; \$d }, ); my $parser = Spreadsheet::ParseXLSX->new(Password => '123q'); for my $input (@inputs) { my $workbook = $parser->parse($input); my $worksheet = $workbook->worksheet(0); my $cell = $worksheet->get_cell(1, 1); is($cell->value, 'abcdefgABCDEFG'); } } { my $filename = 't/data/encryption-agile-SHA1-foobar.xlsx'; my @inputs = ( $filename, do { open my $fh, '<:raw:bytes', $filename or die; $fh }, do { open my $fh, '<:raw:bytes', $filename or die; local $/; my $d = <$fh>; \$d }, ); my $parser = Spreadsheet::ParseXLSX->new(Password => 'foobar'); for my $input (@inputs) { my $workbook = $parser->parse($input); my $worksheet = $workbook->worksheet(0); my $cell = $worksheet->get_cell(0, 0); is($cell->value, 'i can read this cell'); } } { my $filename = 't/data/encryption-standard-default-password.xlsx'; my @inputs = ( $filename, do { open my $fh, '<:raw:bytes', $filename or die; $fh }, do { open my $fh, '<:raw:bytes', $filename or die; local $/; my $d = <$fh>; \$d }, ); my $parser = Spreadsheet::ParseXLSX->new(Password => ''); for my $input (@inputs) { my $workbook = $parser->parse($input); my $worksheet = $workbook->worksheet(0); my $cell = $worksheet->get_cell(22, 8); is($cell->value, 1911); } } done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-17.t0000644000175000017500000000045514576335353016077 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wba = Spreadsheet::ParseXLSX->new->parse('t/data/bug-17a.xlsx'); ok($wba->using_1904_date); my $wbb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-17b.xlsx'); ok(!$wbb->using_1904_date); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-32.t0000644000175000017500000000077014576335353016074 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; { my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-32.xlsx'); my $ws1 = $wb->worksheet(0); like($ws1->get_cell(0, 0)->value, qr/^PURSUANT/); my $ws2 = $wb->worksheet(1); like($ws2->get_cell(0, 0)->value, qr/^QMS/); } { my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-32-2.xlsx'); my $ws = $wb->worksheet(0); is($ws->get_cell(1, 1)->value, 93); } done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-2.t0000644000175000017500000000071414576335353016007 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-2.xlsx'); is($wb->worksheet_count, 3); my $ws = $wb->worksheet(0); is($ws->get_name, 'Placement'); is_deeply([$ws->row_range], [0, 0]); is_deeply([$ws->col_range], [0, 0]); is_deeply($ws->{Selection}, [1, 0]); my $cell = $ws->get_cell(0, 0); is($cell->value, "HELLO"); is($cell->type, 'Text'); done_testing; Spreadsheet-ParseXLSX-0.35/t/ahihi.t0000644000175000017500000000034014576335353016150 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/ahihi.xlsx'); isa_ok($wb, 'Spreadsheet::ParseExcel::Workbook'); done_testing; Spreadsheet-ParseXLSX-0.35/t/data/0000775000175000017500000000000014576335353015617 5ustar michamichaSpreadsheet-ParseXLSX-0.35/t/data/bug-32-2.xlsx0000644000175000017500000202254314576335353017703 0ustar michamichaPK{CHA%xl/workbook.xml10 Ey,,, .h6л1p$@(l،7WdKX30kj|PK{CHgh9bxl/worksheets/sheet.xml͖$Gf*qj\LL3HE:t]  +3Nd&_ >_?POSYOjpkvo~}x~_~~ûO?=_~w?>=/ ?w|yx{OxӶo>ˇC{y}~~w_~÷ώ/׿nۡ|uۯz߿R%~{>~zW_իmz?|ÿ?;ahVߩ׷IE/߇ߧTB;/agRU\oG2uH&7O?>y6-E3'3xzgz޻R^Ϳ=@3 WJz(%P!  ] ՎP }*UTJB>>>AH޺Q'|]g!\xjY|n|JYI>s:>׻7DYE:DF">|Ï՟{S:x lH5]$~.+8>,XNv}-qu^<݇.8 ѴB4I4J'p3Ͽ?aÆ'<@Q@I@X'0kxHJ uj8z9 Wn::5tԫuntJ*5tԛuntJ4t[unX;zN a@+ j8z9 bްүamt}:O;|`gߣY$^6 Eg=:'+ppPL&=*ҰHάHw @c" I@HQ G@{tfE:" wD:"GE6lSztf=yt=:z4l2љh8(ѹ<ѰadYc;|b{ΖF|aaRl~ e֦Mަe/_sA'hu5>}biu:[Z}!7>y{X;b~=~=Y~}Wt:nmaMk^N|{dyMKS{'ֵPٓ{4Y@knwXHSm4Ad={<{ڳ4|Xƃd={B oڣcyn;9nXozЮOXNz'M7O_ 6^'3bǣҰwT[;^'֥{r6ޣgh=r9if58s3j4z~;'kppӸMϽMhcT:g_)5úse]̸l^ 6}G6l>*W;^ޏY$ޯ+g\[xM,.ֵ؝ص튾=z^^3uo8+v_v*|ƥwՉJ9Kb^1.l=ƥF;ג*pxAj^{5Aw&X9;QxAjeAO|ȸϫ,(>5pxԸ^ѫ,(} WWkpxԸҫe(Md<ҧXk;Ư//۠`fHP px>—w@ne$kpxUųP/Ϸ̂b>~x~J 2X;;///h_x|}ܿzoߥŷ鱗=s8Y ,b^scЮ ~!f) kplkҗ?|үe{)սUt8C)??Tt7/aХ7J.8nKo (/EEղXa;ƅ}}AaxK?Yˋv8kWA^/y_䵲w>9k+(/7^Z<5nko+Z(/EWCb]ww]~2&px׸үүRotXgpx5UA^ʥkayRwxKKJI./[bfx5k+kptWai7= '\|rO|ܯܯ ??lհss\Y#;\%@_lB 8~-,,Vq5o7PQXqhï,,V@GTyL1gaOƍ 8ϘrV:6.$0rgBvwd< 3k|:dlW)f_0c1t5íf‘3 Atí˱ft1tџí‘Q9/V:\3D`lZ^]+Q>gP"o~zxK1}y/exх 8kAHjew^'5f!%JA[wmVpwt1a H pb??~|9PYv R!%㛶Ɵl<2T46w_{5A *aX|~`J!1FF/q{L| ,qbL%o~z~w2q3Ψes#y<- 2Ow?[wMSniWh;N/" +<- .$r}Z%sh%x|V@E4aTYעBDB;/j sC72M}0}MYluxіwx,_FF/U??>3)oTS7h wwy|}o)_W+:z)i+IdHvH/χ_?.EŪNtﱊ=z2iGg\ž'=Iˣxth&MX=a[7T$Fe+x|VE4aff,ARIR\:UR<-5Ѱh̓zpy,,/ka"?* ,!+a} PX]_*uMTwM‹i‚)G ¾2B˓zhy: *aX;eQ)n}%L=TNq=J:O߿~xɀ( 4'̟ yôe[xtSE4a ݟ>~|{wa=C?L}hOq=M;Oа޴Mjhy̠zw,aOi1t:?D 4E @üzCA H&lamHO-TT\@nԏu.~T .󩸞# /x>Olǧ>jJ{%U<*RM"ʢ޸~c׷RTfUq=JX9zXS>Ca{.J S,GToQ~P\XX?͏O QyJ}s5uV<*"Κʢ*㬯ˬxxgP W2ov~+ j2 Nu$+*Dڢ 5ЩiL=LI%ք)+LwGyu0>יIt (&LBYG`XupѲ>Xc .!d> C.%#_UeV\ڎq\s^ V>+gp uD.9Y/ƕE`3cul=:hlz&̵G\Ƌϰ㢃x|W ٚD5aul=K:hzyLR~2^}E[`3cubcB[=p{V/* 3#7bOi.=\!ׄ%\O! mt X&̸R޺wn=\9ׄ=\WÅzxZ/r {# tx^\\Gx)^_W{xb/r {`fO\qWD5aubzJ=r<^9ׄ=^O:hzp{ Rܾf+-tx^\]Gx)ro݊rO\܋kž.Ef;vO\qWE5aubΕ{xz/r {#7]i[x|WE5aub=+-t Ƚȹ&^bS*~Gt ؽ& G` `kׄ1` hF`3cu bCX ,g 0Eh``q=L>`ǀ)L`1;Ld$ ",g (0E40&,ðcKrў?X 0~^+ 6:,g @0ujӁX<lHfLĎG`K2Xt 3v#0%g:~q،q1`o ƪ~Ӱ8Gl\HfLÎSTxM>,,6Yda3faǀ)oDUL7aqϢ ;LQ}#1g:~A،A1`OcV3{U?,l,0Eƪ~x|ظgх؅V3{U?M0$`1$;L1}9z9ѦOd鋜lƜ0mtK hflɎnݱiӧCx|XEH6cHv bƝ9ѦOWd鋊lƊ0/6}:!L_$d3&dǀi(9ѪOcqX@E<6c mt  K1l|"qYmZ\&uai&o| Z-߃y;!Z|RM=N=X)ڼuaiO7Nz t h K4-=XAڼuai^IZ<+ "Iw.,ƽ#vx:J`^Di^փָUhx|V@E6eiXJv.| X0maڼ_ N(Q}nv7`0-* }5/c88]iNv*ZDs}0INBw{j4Ym-Z\pӢㄢV|O:hQz'tYOD;`}3g8zZhNfgq=INvvڬD`o3f㇇}|??>dS!exxY@Et6Dg᧻WO?Pӡ)YUTuYUf}hhq=M(No<>jhz*ӻ48Oϋe9Z\p~儂o<`3̄!flY CV|P|z~v 'j>5:B8,"YQԌK}`֡F+>LQ (Hf=E;D_بz:Puъx/YQNWDS&_div/lԬsYp|Y@E6mߘ=\}tWlΊ<-P>GS`}>&_OԎ`OYil=lYl@/Վ`sM>-{خ׳ĩ^f[ipL^ςzvrz> >= lz8۵4/?`k~@x~xݻo|x6n7XOucx|W;z֖ OZ}>0X /q.Wmi^x"E Fmq=KQ[j=,M[/qDvc4/b9X-5hNz˖~_'L':ex$Ry0Ӂ.=^~?li^Ÿ>1X-{- vozL[<+бDv;4/-\[<+b;[ƫSE`3 }xxf+:N [<+`"a; [bt1%-{Q/7^y2.I$DWkҋjzxgЌQN]{6iD;`3c/Ѡtkd2k꒳[&:N8]i'?!3l?:-CwQN;8"ޮ6<-'}Qd!]vCF`3Ȅcmo%?.+]v#F<9\77H턑ZGԅg=f=fYf1S ̾ózac]z6OMt2N/"Fjx]x?NjD-gx dܿ7.AgCZ|r?أ !h۹7)lE`3Cu ʸGePgq=J8=X)PכN 6,'@Vl:2D,N f' JtՌ뀢}1PڡJt5g$:hYLzuhR7AzЇbP&eq=J94V)PכΠ@,g@ -*zq҇aP&dq=J8tU)P[:h3z0shR43D9 YI9݀ Uh338*`":AÝ mt'@\$^'RT3n.yW0swyJRHN6s:xf.ҮNP J9u P$O)P]͜Wa5b Jy5h氞%(̋!6sxf.ʮ4O)P[7V+N HN=@f^ ᬴mW0svzJR܈OO6s:xf.dO)PfN]qTEu)J5s#0U+N ȻN;@fnJ9t +q N+8bn&sɊxb.J)P6s:ʊxb.J)P6sʊxb.K)P놻sЊxb. J)P>s:ˊxb.$J)P -t'@\X'2` %J9_ P$H)PKsxb.zG)PK>ꀢ&@\$V'ȍR41/֗0+mtU'@\TU'hR43/w +mtJ'@\T'(RT3[Xi38*`":AKJ9L 1Q$N'|^}tӏ~2Xc^ҸrWJײLfgx׳Cק~xxɀL\&}s8z=L8:=7deM M!^"m!d qrId=dYd!9 !3NsBw8z=L<>җZw*R-0z=lM*Wǿ1/Rk{x}^/I^~yt+/V,,x)jO򂧤o+s_)uxvxŞ> Obu^}!?N,3t>ybW=lΏxb? O"uVgjxb? O1r|`8G,fhP"YW-p}IziHt,ڦ3>y^:Rx|Wg6REzo40VqXPEt' vȾW.0XObs_,uѪx/3$?_|7=XEΚ=RAib_ܿO10]oX6Jsӿ)݃z3p>ON(jCxC>K׸Rh!*_?xӓ^).]4ikn4 !|N)徚j<s˲tXV3 OrkM5~E1ISIS\ϰOrwMFt,c%|ڞ4, hXfLq=KdLgz`eIXt'p`a)wl.H=}0]X!IR`o]ԃE:Lf4,^ E!`xEtx' KZwVN)g` er' Kws`>) ,J9O'KqV@EtV$,M=Ι6x:[x/-%aiocz{45UmU\ VUxAL{#5Q΂2+ ":c~u7}[E`3cu}bE`3cOݿKE͋ ٙ{=^=>FtYg^].r9㴨oi-:+'Du:xý 9mg:n* 4Zgh: %?R+gp R.tX ׊\: >Я> 0ۊ\1: >5Ӹhz{BOm6}E`3cuz4.C%CPyMiupj?s .s^2VmQW\VQ\)5뭞z: XHΘvqa_m.* ^gQx:Kqָ^O^ ^CxbW\^^q=K=^x)b{ X}}ƻJ=~Upp^_glR>gCWZ2+ ;cv"yi;؋\gJ=]Upp^`gR~n}^i؋&M\OVZ22+ ;cDžy#.tV`W;>}\OxoӕXeW@E%vJ.E'}E[`+3c+vb F[=Upp^cg R~VOc\,jXeWE3vf.g6F[=݌Upp^bgR~,iӽXeWE+vV.gF[=݊Upp^tbgR~jlәXe׸-q.r`ЕXe]\.r`БXe׸-Xl|3[򫃋ze׸ч-؇XlxW9V_@2kꋈRzD9V_:2k(,Rz[9V_42kR}r`]Xe׸ф-؄X}1Z}q/" [0 ;KbTaˁBWa\V_D`vbh–kn*8V/z{<.{e'"2>.XV5\%VO`\-؂-\zWS.qWE`vbŸ!$<2+`" [0 ;KzZ}IӁXeWE ` vf9c*8V/z{ÖJN*8V/)v*8V/)v*8V/IP.*8V/ʱ˱<.LnL[=ݎUhю-؎X}L[=]Upp^c cp)Vo=UXmX\V\[/z X(,R9cn*8V/IP*8V/*+4N2mtGVzё-ؑY})z$ X(,R?*z:& XR]=YeWEO`ODž-#.k* dBƍe*wh^d dh)Yh+ԋl.<z:! HHLBspROd\ق\(y6~R&Zz2+ [; >DK=Upp^c cpgNމz HBո:NO7c;N/jJ*t0Vpz-qa5Oxlis"rs'e*8R/bcP':hLzzLBuk*8R/BE ҸP7\3-t9VzQ-Z9ƅRi ԋl 4. !3-tIVzQ-ZIƅR2eiԋlъ4. -L[=]Upp^TeVqoof鲬2+`,[, ˮG\鴬2>@ZlҲ4.ꛡz- Xh-KR~nk.%^Ҹߛ餬2+`")[,KɺղVOGf\bFf\OVO[=Upp^dfep)V?Y mthVz-fhX4V_hSՋl1S .Kz6ߡzQ-fmHy/\*8R/jŬ윭JK=]U(Q-fifKz:6 H}R_ozػᲞrX-8+ 3[, ߭WZά2+ 3[, ~exDn*8R/l2P7\)cN*8R/L2P7\)c.*8R/ ,2P7\'#-t`Vz-f`R>iՋl1۲ .r0Zl۲Ջl-{Ot[mYe}\lmrC[qYVOe ݖUpp^e mY{eQBe ݖUpp^e mYܻJl۲Ջl-{O -[趬2+`-[nh.$n- Xh˖ڲwmBe\mrC[pY]mYeWE[ЖŽG\dn*8V/ڲ冶,=^mYeWE[ЖŽ'\9#-tZV`W -[DZܐŽG\b˲.*8V/ʲ冲,=2gò*8V/²冰,=2޻lòՋl!,{OSl:,[谬2+`",[n.뭞z:, X˖²wÕVO[=Upp^e aY{eVOe\arCXpYoaYeWEXŽ'\9#-tXVz-7eq q:, +-",[n.z-tXVz-7eq ?-tXVz-7eq ?-tXVz-7eqbh*-tXVz-7equDe Upp^e aYܻ2@e Upp^e aY{eiòՋl!,{f㜑:, X˖²8gò*8ƭl!,{OsJe+UŅ\I[==+tXV5nUe aY{e|Tlòq",[o#.û*tXV5nUe aYܻᚳbdaYe׸W7eq ~aJe\V_EXŽ'\Je+Upp[}azCXpp*tXV5nUe aY{e|_lòq",[o.듑Je\azCXnJ1V:, +",[o#.vJe+Upp^e aY{¥bW:,[鰬2+`",[o.V:, X²dò*8V/²,=2>lòՋl!,{7\5[hòՋl!,{O,*8V/²,=2ŕV:, X² Uò*8V/²,=ҿtXaYe}\lazCXp]tXaYeWEXŽG\HaJe\azCXq?.tXaYeWEXŽe2aJe\azCXpWSlòՋl!,{OOF鰬2+`",[o#.󭞶z:, X² 鰬2+`",[o j]|ò*8V/²,=.>aJeq²Ue aY{e\|˲.*8V/ʲ,=2HeJe\ezCYpeJe\ezCYqY"Ae+]Upp^e eY{e|2eJe\ezCYnqs˲.*8V/ʲ,=>i˲Ջl,{OOF鴬2+`"-[oH.듑z:- XHҲjNV:- +"-[oH#.K$lӲՋl!-{O ӲN*8V/Ҳ,r=XtZiYeWEZސŽG\拑z:- XHҲz1VOe\izCZngV:-[鴬2+`"-[oH#.H[=Upp^e iY{eiӲՋl!-{7\QrtZiYeWEZސŽG\֋NV:- +"-[oH.He+Upp^e iYܻᚍU:-[鴬2+`"-[oH#.Z=tZVz7eqbN*8V/Ҳ,pH[=Upp^e iY{ĵwiJe\izCZpY/F鴬2+`"-[oH bi۲Ջl-{^۲n*8V/ڲ,=~qFe+ݖUhVі7eqkBe+ݖUpp 7X==+mJנzڲ뢭n*8V/ڲ,p5듑nV- Xhڲ3V-[鶬2+`-[oh#.󓑶z- XhڲwK2RnV- Xhڲzn*8V/ڲ,=jeqYeW@E\Žg^]t]V`W.[E]PŽ5ot]uYeWE]PŽG\яt^yYeW@E^ސŽ'^E :/[鼬2+ "/[o#x*8b/,z΃l؋l!/{,*8b/,=2V:/ wÕ#-t^V{7eqb*8^/,=.JyJeqUe yYܻʫt^yYeW@E^ސŽ'\wyJe\yzC^p]t^yYeWE^ސŽi5*8V/,=^yYeWE^ސŽ'\֋z:/ Xw5[,yJe\yzC^pY/F鼬2+`"/[o.H[=Upp^e yYܻ*qyV:/ +"/[o.He+Upp^e yY{elՋl!/{7\ۧz:/ Xz1VOe\yzC^pY/F鼬2+`"/[o y3t^Vz7eq E[=Upp^e yY{e]M*8V/,pl᢭*8ƭ~y冼,=ҿ8[BevqzWV{OgR-t^vq_D^v!/{O6:/yYe׸/"/ܐŽ'\.t^V5n.7eq ~yp Upp[" yY{eBe:/ EeK?g\Be\VrC^Nوm,t\vXNrC\nqBe:. wEeⲸKqم*8N/ qYܻ, U.".Ž'\Ƌ.t\Vpz]n.He:. 8.7eqd|2qم*8N/ qY{e\ Upp^eⲸ˸Ae:. 8.7eq H;=Upp^eⲸ8 Upp^eⲸKCb Upp^eⲸl Upp^e3.RFQ/.g_?h՟{P{0K1Cߘ/IgF= 1^2~off)f()Yтx̮׳̄䛭YZ~ksіx̮׳̄Y~Lf3͌V}cve&t߬Rl0z=L8/ڳh3<Dv13<ؘc'<yH.fb3&>8,x :٩yd~nNyk8,x YydntDv13<M<yh.fbIZc< 2̔휭s> 8 ֳyYy̸~6tDv1S3<'7eό>.L <y.f$aVr-f>+8 ֳyYʥi\3t*8SbF+fe&f.Lik%>8,x ¹Υ)f }"@sqZD@s3KA#4㌳gt@'DDw1#4<8B3ҧtF'ODJw1S4f7s:xЂ"A] VmI I]<YRДGz*}2@guqYd@u30Sںkƍ. }2@uqg3K1B\B }]c<lR̔'|Dcw}2x̂']dF С]c<ŌR̔g}_/]8,x* ݥi7gtwD{w1ۻ3ͺ't|ODw13  }@xqY<@TxK1Z<yH.faxT>[8 ֳy}rii-]\OZt׻OZvG6.g kWں}맷j z_uq=CKi]=uYVme]\uyZ{Wbiў>-]nG돏?><`-wWuZ"h}Az=LB)Z!%T]IrIWdFG.gH _Wj)ݫqNtt9R[S3M.gH yW)ݭB}0Rݕ|nOo P[AnʺVp.g@ eW¹(֍.끢m}0P֕d.Ju붇.끢E}0PBԕX.JqG.~끢}0}PJ&ێo_eoAt  3&(Λv[kx|Ը"*i7\Nq_n';xX%{xƕ|)S|p_CO >g;oV:|G[*·+oaZZlr8)"Hb^s/ kח@)\T@Ev -JQ#(]jA֎[TEzv,Jq#(-jAѺ[T@Eov,J#(= t,:."+Ff}P :욱(.#8`=JH:e Po߄](E:6mPC9s(͏^W@z![T@ECvņ,JbuIXXu@\cW +?2 tgpHzPs̯45?2> txgH\DWW47?2>Gs:r.R+V RI|s:3xv.+V R ykQU&Fq--UPsQ]J`Լt(TsN]1J`RZNSqS@E-uZ*IIVBꊅTDK9]F 'sd=UZ*Np 'XB%8JOrxB^׀Þ3':ޭ8 8g8 )I8ӥSqQ9]rJpRe|5N*-t'8d\MW T_J83 ."+FJ N>NIqSEt0 9>>NIqg8 )IqKq:Bx>.+H N[_t9QX>u8|\DGWTpYhc8)"4bhxMBNFqT@E]tź(J FNgEqTERtŤ(J3 G+9( (%@iZ2CӝPr ]JҼ&A u@b> (! %@ib^zP0s]1Jܺg͜ΆlPj9¹fNGCqTE4th(J5 \i3[8*`b+yfNgBqTE&tL(J5l=}͜.B芅Pj9YzqP0s]1ꃂ=PƧ^͜@t](̧!6s: #xf.+fA PO֧^_u@f>X (aX%@f>Yz6s: #xf.+FA PO֧^͜n&MPjh38*`" bd~fN'AqTEt$(J5s۪F9] D'=L[v7xmNh3;{T>Xot(0xfB02n}ֱ.R(aw&J,aR]cUэPPqmf#tKKyPȃ6mft/^ZU.2h3ˠ{T7n\i}D`3Q=NxiVqx*.zqRUKK)PPqmf t/9Z]Nh3{T7~-t'8d\?ɸaOvq:(\\?ܣAKәO.r-=gPոB<qTE煔qG'>[ {.?)' T>|@\@QtљO*@-$_ȀF@\t>[{.3>:' }@\@zN>][{. 7c}g >qQӵOPsQl'<6s:#xf.r-=gP7 tѹO}6l'9s2t}6:x^.r-=gNmҹF>qS@ErɐM:'Nq X}@9I>] [{Μ ѤSN}g >qϙtѥOrQl'9qZ[~gC8)"Osd8lt'p8:Mt>[{Μ 3|g d>qϙtѕOqQl'9s2||6:x>."-=gNӍF7>qSEzn9]lt0t\>[{ {=Jy{# ]lt'8d\=[{Μ`:'Nq ȸ{@8MmF=qS@E۳ڞɐq:'Np =H{@92N=] .-=gNq:'Nq z@9g8)"QOs4gCg=.e}^ X\LOwmS-]LOm$뺲N0ٕ1\`־m%qoW6W`>ź2k޷MEweӅ~%1)^+S-~T%qW6yUO2m" ~01\`^mZ%qW6O?2 l\MMW|e 0A)`+c"ʦ07á@:t$-?U6q?;`@T@ᒎh*θsH"*F ?6IDMg\$K]\~nʦ3.˾覨X@Vt$>U6qYEERר&i2/0*F>6IdFMg\wѩQ5jI}7l:.Q5Iz} P+U6qYJJRר&d鈫eOǤxR?X-U60&)pz9R5/U6Pʦ /HLRר&):m3bk%m4@Tte81S5I}hl.yIS5I}kl:-æbkTmm@Ttey.OSeӅz*S"z?INMg^~zON!\\rʦ3jtTY} zl􋮞%>>U6]xYotT,uy}mz(*.{*F>B6IPMg^ˑ{: ,>DU6qtLoQTeK}l˨bkqm@Ute}3DRRר&iJ:{;bkm@,Ute]sbkTm@3UteT5pj:t˲/*z @@Ut5?bkm@GUte*]RK]^vnrʦ /.Q4UMRUUeӅ=UUpyEHUMg^mU5jI} l:.Q4VMRUeteU,uq} mnH*θ,SbkTmT@oUte=[K]\fHCf*θ,SbklpIWMg\U5*I}=l:ᚭ˪nkaKz} êl:D.QXMR1VeHXRר&i$|筞*C"V_¬ʦ3.󭞷z:ͪ X}Vȳ*θKtU,uqZ} ѺmV*N,K#bKkTm@UtU tU,uqJ}֚@UtƕOF:*z@UtetX@u$>oU6]xY*A'\Rר*&r :*F>Ps6I\M^LIW5jI}lߠӮbkTumT@Ute] bkTmT@UtetUQE}l:2ew{: ⊸">}U6q.=}UpqE~nh*θ,bklpI$`Mg\IX5jI}l:2x[ .ׯ=XeӉ[=]UfpiE~V*6ZwtV,ua*} mJH*d)*]K]\Fnʦ.& :+F>P6IbMg\;ot.V1U} l:2JGcRר&ir˾EcRרФ ʦ /HGdR`FV@N(*.]tLV,uyJ}'mR(*μfK]^Znʲʦ /K]^bn ʦzbkTmT@hVtejOf!\\oRYe l8+F>6IdgMg\wtyV,uy} >mn*.7{^2+"M} Cl2yC.'M-n2_M|pxWr. O|6!Z$C)Mg^ƅgh!\\O2C"Zte|:&>B- }3.1 7hqW@lЦH7qO&>ACjd6E~5n-N }) /H}8+IhS$@.#.'ٟM,n2]vgq We~6ErU?,NgϦH7xx8K+b2?"Yte\J|~6Y1{M,n:2~#l8+b2?"Yte܏l8+b2?"YtefgqWe~6E˸'gqWDe~6Ez>?,xϦH~7qYZg!\\3.l8+b?"Ytei*M|pEIhS$@+8|6YqzٟM,n:ªzV\.mhqӅ]|6ZzYM-nċO&>AS"Z/)M^|pyE^6hSA.,S#.mDhqӅ|6Z1{YM -n\&>CS"j/3)M^nghq We6E2˼gh)<^ m /' m38+2C"ZteM|pyE^fhS$CN̛ m+8+B"ZteGhqWe6E"kAo.m4hqW2߼x8+"A" Zte 7hq WDe6E:#.mDhqӅ=)\^ /㑏&>BSx"$#)Mg^ֵhA-⊸lЦH7qY|6 ZQ{M-n:m8+2A" Zte_M|pqE^hS@θ,9{k8VX!Md|֔BigdzgV{}VFdŎyP_]Mb˩Q@-]g9YGK6]>!.G>ۢ|9Y<5U^6]>)(/Glsxt*Mb Q>,ݼg.S|9Yt,f͑ͫ*_}YLAy9>gcţWw{]?)(/Glsxt*_ng1tm~.\ջ^~Y Aq9>gţ Wm~CP\NgUu/]?t,`lgUU/]?t,jj8.\UZff,]gS~9YVg1m~.\Ko~CP\NgU>Vg1mqU٦g1m.\՟Mb϶m~.\+nm}CP\NgU#g.|9Ygţ WnmyCP\NgUzg#ţWgncm>,ݼG]?t,jͫz}Mb Q@-ݼtmr}T6GAG7}/Bt -v-ͱk5Mb ˩QC -ݼ{h9ZhcţWWumMrL-hcţWWumMr}46DG7&ڦh1hmn^U_MM7b D-]zMr}46DG_u-vM1хǨ{D!(.GmsLxt*)^b iQC -o, ZL@Y9>*h[+`I/i31C:Ɂ@G mO$/?Gi$wHZd]dZq &ٽm`ߣt'Y 7=e`ߣq'Y 7e`ޣn'Y z7⽇)e`ޣk'Y J7>构`ޣh'Y 7bOs,c%$ce%=2VPYMZc+'!+(`|ΰ֞`ޣ\'rY fUb+'!+GlOIJ\Y?C쟦XJ&!+G*ۣT'RY*ov])`=Q2Vio~5Jb+*'XEޮdۣL'2Y*v$`M=12Vio>Oӛulrz{D#X=ޮ;dۣC'Y*mn7^ulr{4 `eŽo5$c>ʊ{eՋMB0VNq؞c +t~ V׋.MBV8GqlOıUVTzq׽I)o,c>UO,cXX*/O+c.Xޮ[`ۣ'X*/v]`=Q2Vio~٤$cJ{{L{~MB0VNoמ_ C5 X9=j_{}e޾V3 $c|B7up{{MBVGkOtU۫'$cz땱J{{8{[+HboODU۫.'$chy啱J{{%v]`=Q2Viodޮ]ۣߵ'~W*/zMzoIQ+cII5P9=]{"ve^i>]&*GkO Uګ'B$C(tЕBꉪzzgeIʑ(s̕:XKzgEIQ+cuV?42Vzg+qUĕ:(߻ή \٣'W*|j;.oMB0VNg֞[zή[٣'V*c-_ήK[٣'V*|^uckrJ{4X|o[kMB0VNk֞ZWV>]w&!+GWkO\:RYUj{.jMBVGQkODU۷程uKkrz{jZ_\Z XG+~$Cg퉟zo /zo׵IQ-+c#}}{dMB0VNoN֞8Yu!krz{DXe}.C^ޮXۣ'6V -߬=]W&!+Gڣ'*V*s%ukrz{Xe}.̧Yk[ +HbmO$UZ[ZޮXۣ'V*YޮWۣ~'U*svݽ`ݫ=q2Vio/n{.^MB0VNo՞W]&!+GjOU+W_ޮ Wۣp'U*쫯zoeIQ*aoVUޮV#ZQ*c,7$c(YdJ{{{TJox =2Vio/n{.WMB0VNor՞UUޮUۣX'bU*g6R$c(UTJ{{YMP5 X9= U{"Te^v]`e=2Vio/?]&!+GjODUϪmzo%IQ*aoV{2ujr= T{"Pe^~Vm{.OMB0VNoԞSU2Vzo+NU8J{{]45 X9=JS{"Me^~o{nLMB0VNoԞS]ץ&!+G]jOtUuޮRۣ+'T*:zoUIQU*cww$cJ*J{V+$ce%֬bU%RϬ@b"/NVK%,u$cee,/.Vۇ.KMB0VFoQ:^RU%,u$cee,/.VEo,u$cee,/.VE,u$cee,/.VE,u$cee,/.VE,u$cee,/.Veg{eI#RkY*^\ Rۣ,u7gC] YꈲZR.KMB0VNoZjC]`e,/.Vϝ.K,5 X9=RkY*^\.R.KMB0VNoZ'r]:tYjrz{ײTXUA]`e,/YU>tW]Iѕ:^RbU+$cJ]xq*Wzo]Iѕ:^RbU+ݕ:tWjr\#RkW*^\ΠRJMB0VNoڕ+ݕ:tWjrz{t׮TXU_ԡRۣ+uvŪzJwݕ`]+/.VU]Cw&!+GWxJŋoVyԡRۣ+uvŪW+u$cJ]xq*zo]Iѕ:^RbU>ޮRۣ+uvŪzԡRJѕ:^RU3zݕ:tWjrz{t׮TXUvݕ:tWjrz{t׮TXUYwݕ`]+/.V&tW]Iѕ:^RbUϠRJMB0VNoڕ߬ߣ+u$cJ]xqJ+5 X9=RkW*^\.RJMB0VNoڕ]w&!+GWxJŋoVdtW]IqJ]xqJ+5 X9=RkW*^\gJ+5 X9=RkW*^|~gԡRۣ+uvj+?RJMB0VNoڕjԡRۣ+uvŪڃ+u$cJ]xq.K,5 X9=RkY*^|*mC&!+G[xmKŋoV߲.u$cKuxͪCݗ _ꈾڗ'}\BC]`0/X^.L05 X9= Ska*^\+$c(Lxq*XzqׅI)Q:^ SbU B]:tajr{TXUA]`0/V׾,$4hLxqj+S Sݣ2uV ?һLMR0XNwڙ'QҥC&),G:4u *5u$%uyִKg2Xo;Hb{mMŋP75I`9=zSko*^ܰzũI Q:^Sℵ<|g^7&),GsxmNŋKo:5I`9 >Sku*^XzݩI iѝ:^Sℵ?.OMR0XNZWԡSSS.OMB0VNwZܺժIBQVZ>XU@>ӻ[*HbXGF31լD,6JJe*?eV+*%}D\\}&U<Ŷ_)W)_y1}ɭ5IFhSԼNZԋe9}ɭeIFhSNZTik/O5 שRRbY*%I&!1OQ:UWJ,kS?$#f)_JJe%wI&!1OQ;UXJ,[;` vTX*?35B$!a(*!,%vz7Z$#t*-,%u|gvgdzk Y,"J\35$C(*I,Eb֯b*vTXJ85$#(*a,%0NMo66 9?jcJKe=Mo<6 9?cJKe)e[MB0bN ٩RRbY_e֯dHvDX]*֯dNvtXJh9uR$#(*,%ZNQ-LL/oղx RRbY_굲_&!1GT f)W*©_&!1GTif)W18u$#t(*,%v7w~]9`ĜS_}szųIFQ<;UYJ,k;MB0bN٩Rbi>9u$#t(* -#hg#C6 A9*)hJEK;.MB0bNBکRbi/6VK+--%vzb_&!1G9Ti)W: $#t*E-%v3;.MB0bN珢کRbi>? $#t*]-%Jk$Ch*k-Ek$C(*y-EL4֯+lvX*'"$!l(*-%j*U4_&!1GTl)|Rgbz+XlԖZ^i˧Io6 9?mJmKeӤ~]p`ĜS%IJֿWm֯knv4XLumsZNZUү+oSvXVۤw~]|`ĜŷS%_8_&!1GToL;;f$!Hp(* .%tX=6_7&!1GTp)ԇ[)p$bW>\J,jY/7I9?jqJKevVC6_&)2G;Tq?fרjO$7 9?JrJˑ%@V\tdz Y+#K֘X+c.G4Y>dzs@BȒ +#ӫ[{.(Ȣ=wY&=UMCː$A8tН*.GRd~q)3U,hYROfkufzQwY2NfՋ-2[.HĺYNfի42[.HY/5I ̙Q;U],Տ0}$CL(۝*.GOg>tn!s&@TNr#'@CEx7 9 wJˑ`Wbo^l>ފy@bG@%0}UlG.MR0fީrf(f-IY;U^,[L79?zJ{?b-IGzwdlCK ୯$hqTڿK,{ ޾|폼֋X+[/啵3^Ko]xީr2^~MI1N;Us+-Sm/ӛ`=S}JzeҋX+K3T;w)eыX+G3#қ[C/Hbӯ ϼY~^J8gO.%$e9wʽ+Ӝޞ~?$e9wʼ+Ü~~?$e9zwʻ+ÿGϺu7Ix~ݹ>QMR0^Fswϼ?Y{whܝ+3o~~?$e9vʷ+CvmwlR^j{] Us}ƕMarkv Sfw4ϴҿS51js-ڿ5D+VʰL+^117r$(ם+3TRkuSVwN_~0ǝ^ߪt@|ҽ(V`xKAm?}Pu5r|ΉF7?SAV?nÚu.Fo~</\N OrSK(ӛ=d~d> Eが.΁Ľݏ^aե](dtq$7~>դRtL ݏ28tpXY7(dtq?$Z71ϺEG @x c"A[4sׄ. &wNDoek{sׄn &wNoekcsׄ &wNԽ/7jM }M^.]&_$&t/f5es"}.[^N_sDΉ lMTykBWb]Q;'z75Q95;~1E箉tٚׄ. &wNoekׄn &wN̿9p}+ǘX㏿t/F`?qsΉ O?>$ @GD"~-D^ӇڗbG[ 0(آxN,/7G~_MWcQQ<'*7ز0W5CK$lq8$>7ز0WK$lq4$R7ز0W_M ox a!1z%pRl`x [  GURlXx [ # l(T-tRlPx+  [ ( l$T^yWn -xNlo?n~>8+AWcY Q<'75T?{1欄 o lp&HtW. #x6T/ xF?~OϿ~տJqTMݖGrzk \l 4/7:@{=:X[/YKox  ,ϬM_<`B_g֮[/(wF Xzf}{ ,,;G_VIOo/7_<`_V+)eJ|%vWR_@a9 >J}g*_7x](,GB_V_I_|14(QJ|7x(,G_V7xދ(,G{^V_4_{14QݫJ|Uo#PXN,8:aUϬMo#0Xw `nࣱwFc+io=:x,+6x*_7xՋ(,GW^V7x]ԋ(,GQ^Vϡnz-r|hU`% Mo#PXN ^b i;W4|f ^b iQ;W4|f ^7b i;WGR۵ ^bQ;W4zfzםr|tU`% l|Zv,+6x*UϬ]o#PXN6m 3Ko#PXN*U 3Ko#PXN= 3Ko#PXN% 3Ko#PXN ,lL7x](,G]6^~t]нa xf-_r_t.F @", xf-_r_t.FD]6^}t2Xr]P߫ϔ._r_t.FD]6^}tv1e4%v*3˗ݴ(,/ѴiW WZ]@a ~5 ,l|%7Ewb hKt.U`% |%7Eb hK.(U`% |%7Eb iѮ]WGK ][wA+i 7x](,Gj]V૟.\Kooͺx ͺ W?7\u.Fź uXI~n4f]@a9 >u4*_pizr|.(U`% u14]ЯJ|så ^b iQRW ~T/MoH#PXN% ,lz~izչr|.` zfu\`+6x*?ESq14]P??- !4(]P?u.F oX,߃zץr|.(U`a{]o#PXN ,lK.vA l14]PcJ|w7x]^(,GqZV૿tZ@a9 >jT Up ^b $XV4Co#PXN:u ?742XzࣀvA+i u,F *gXI2f14(]P2J|w7x]-(,GZYV૿ 2Y@a9 >d*_]e ^b i?V4Co5#PXN uz]r|t.` zfMz r K4.hU`% ä7x (,G/^XV:|*^,+6x*_~avA+ig&W@a9 >_4*_~a{uA߫ T~anyuA˫+<,nW@a9 >]t*SYIo#PXNF ,lSYIo#PXN=,8:`u[1[ho]ު?u;[14l]٪?u2Xz+j Vl?u+[14l]*e3,lSYYo#PXN֥r>?uZ14j]PժJ|YYo#PXN֥2>J|YYo#PXN֥>J|YYo#PXN֥R>J|YYo#PXN֥>JSYEo#0Xu֥>J|YEo#PXN_b_G?z@dţVҝd࣓uqxt*Yzםr|t.NX3Ko#PXNNqrX,uѝr|t.NX3Ko#PXNNq |f ^wb iɺ8NV<:a,NV@a9 >:YɊGYuѝrKt.NX3Kw.#PXNNq zfNEwb iɺ8NV<:aU,ɺNV@a9 >:YɊGYuѝr|t.NX3Ko#PXNNq |f ^wb iɺ8NV<:a,NV@a9 >:YɊGaNEwb iɺ8NV<:a,NV@a9 >:YɊG'ꙥ;YɊ,ɺD'8YU=t';Y14d]'+ͧ 7xɊ(,G'8YU=t';Y14d]'+gu'+FdţVd࣓uqxt*?S;YɊ(,G'8YU>;Y14d]'+gu'+FdţVd࣓uqxt*?S;YɊ,ɺD'8YU=t';Y14d]'+gd]t'+FdţVҝd࣓uqx4?e` ^wb iɺ8NV<:a,NV@a9 >:YɊG'7xɊ(,G'8YU>;Y14d]'+ϔNEwb iɺ8NV<:a,NV@a ~Nq xfu՝ VG'♵NUwb hkt'V;YWɊ(,ɺ:NV<:aϬUw#PXF_uuxt*Yr_u'+FF'8YU>NV@a ~Nqz~՝dd]'+gWɊ(,ɺ:NV<:a,#PXF_uuxt*Yr_u'+FdţV;YWɊ,ɺF'8YU=t';Y14d]'+gd]u'+FdţVҝd࣓uuxtރ_u';Y14d]'+gu'+FdţVd࣓uuxt*Yzםr|tX{d]u'+FdţVd࣓uuxtªYu՝rktNX3Kw#PXNNqd]u'+FdţVҝd࣓uuxt*Yzםr|tNX3Ko#PXNNqd]u'+FdţVd࣓uuxt*Yzםr|tNX3Ko#PXNNqd]u'+F`'dţVҝd࣓uuxtªYu՝r|tNX3Kw#PXNNqd]u'+FdţVd࣓uuxt*Yzםr|tNX3Ko#PXNNq;Y14d]'+gu'+FdţVd࣓uuxt*~d]u'+F`'dţVҝd࣓uuxtªYu՝r|tNX3Kw#PXNNq|d]u'+FdţVd࣓uuxt*Yzםr|tNX3Ko#PXNNq|d]u'+FdţVd࣓uuxtªYu՝rktNX3Kw#PXNNq|d]u'+FdţVҝd࣓uuxt*Yzםr|tNX3Ko#PXNNqYu՝r|tNX3Ko#PXNNq |f ^wb iɺ:NV<:a,NV@a9 >:YWɊG3u՝rktNX3Kw#PXNNq zfNUwb iɺ:NV<:aU,ɺNV@a9 >:YWɊG3u՝r|tNX3Ko#PXNNq |f ^wb iɺ:NV<:a,NV@a9 >:YWɊG3u՝r|tNX3Ko#PXFߢusxt*Ydt'+F @", xfmuӝ2dţyޫϔnuӝ2dţVt';Y1e4-:Y7ɊG'%7Mwb h[tnNX3Kndd'+ϔnuӝ2dţV̒;Y1e4-:Y7ɊG'%7Mwb h[tnNX3Knd࣓usxt>SNMwbqnɺ9NV<:aU,ɺNV@a9 >:Y7ɊG'ꙥ;Y7Ɋ(,G'8YU=t';Y14d'+ϔnuӝr|tnNX3Ko#PXNNq |f ^wb iɺ9NV<:a,NV@a9 >:Y7ɊG3dt'+FdţVd࣓usxtªYuӝr[tnNX3Kwn#PXNNqL;Y7Ɋ(,G'8YU=t';Y14d'+gu'+FdţVd࣓usxt>SNMwb iɺ9NV<:a,NV@a9 >:Y7ɊG'7xɊ(,G'8YU>;Y14d'+ϔnuӝr[tnNX3Kwn#PXNNq zfNMwb iɺ9NV<:aU,ɺNV@a9 >:Y7ɊG3dt'+FdţVd࣓usxt*Yzםr|tnNX3Ko#PXNN~*d[ۧ9ھ>Rӫ[9+Hb>SBMUvZZ@-۳Zj jALM׵b FѵnQ׺=Za6*jMV<Ŗm}]TQ:5D-g35,Щ$j?\a?-|?8] 6}u⁄-.g36+ovW<-lw}ƆG[+H(xּ>SiMmnlcK2o6}XLA9 :`g#M^}`1`(ݞe}jU>ЭRsAnVgj>XFP[=,H>x>SKR~q'v{>SAY0SPjXyKh1̃(ݞ%yPEcPl>:YG-zZ􁠋i1 (ݞŴPѧE_cPlBYQ-_Zj1L(ݞeWa'n3v{>S'^`7v{>bK,jƯHMasL[4n&glHXeHНbsFBtnNglH8UC>m 6}$⁄-g3t$تm#Ab  s={n#VmU cPlHx- j[HݷbsFBtnglH8UjGn3w{>cKGV>t.Ơ؜}۳[:lնZq1欄hݞ͸ҕ~6}$\LA9#!*rgE#DMzmF]Qs\[tnϮgjF(?>Ab њ=[sdlFx [glFتEA7b Ѥ=taoݩ1(6g#D}VlZt.Ơ؜۳][jnF=bs6BnϞglF(ɦoݸ1(6g#Dl}Ɩot.Мͻ۳yZ?.Awb ͙=;x%& [Gw}#6^96-xg3|#<*lFнbs6Bn^glF(.QhBx Z\~ghB(>ѮӋ!(4gDO}ڢt_/Мu}۳Z06нBsAngh6ث@b Y߻={`V!(4gD}Lw w{>CKvAx@b X{^'hxzA+i v!4<xzA+iv!(4c?{~%`ϴ=~ 4y` X{Ͼgh"3m{1f,=zg3dgv!(4c?%`<a A9 g3d,4}^a A9 zg3d,4}~a A9 g3d,4}a A9 zg3d4}a A9 g3d4}a A9 zg#>|Bi]_C0hx? -YkL"=BsAgh"gZh"x# Z\>gh"gZ%x?CKL'x?CKL)x?CK^?/W!(4gD_+~,$E{1,-ޟВE?z@c Y_?%`x1x?BKl's@cg?%`_=t1МEZhooL$hq<"G/s!(4gD9~݇t1МE}.ѡ/{!(4gD=~?||t@c Y?""=BsA O/h3M_CPh" |@ c YтdE1,?}1~ۏw~!(4gDۏV>Eˏ1,(?}1^gt1МEǻ> ZL.>xx:ϣm-e> ފ@ǻ/>ӛZRw]|)5G|GV]c JQ|cu1ԜYǻ/>ӛZ3)]|cLA9 w_|7s0xǘRsAOoju񮋏1,(>}1Ԋ>]c J͙Q|cRKRYo@-9NNojeշl9NRPj6qؖV\YsP{9N$jqؚV\sQ{ q9NNojU˕EKGqآV\tQ{ qm:NNojU˕UKPGqتV\uQ{ q:NNojU˕eKGqزVѵ?5}' lqrzSZ;_ʨ8'7@')(5g lqrzSZ,<_J' lqrzSZl<_ʨ86'7m`( lqrzSZ<_ʨ8v'7m`H lqrzSZl=_ʨ8'_89m`kӛZreqRF60Q89U-W/enC||m`ӛZrm  lqrzSZ>_JT' lqrzSZ>_ʨ8v'7m`ȏ lqrzSZl?_ʨ8'7m`菏 lqrzQ[+2jo?>6Mj9~)v(n[Ԫ+2joa@>6 Mj9~)v (n[ʖoYԜm0m`+ӛZrerRB99m`+ӛZrerRF60Q99U-WV /enC|m`+ӛZrerRF60Q99=՟_?,AӧKrr A6 'j e` lrrzA+,@_ʨ]8 '7jOe` lrrzS@_ʨ]8V '7jOe`H-ANNoj՞5K @ANNoj՞EK!Gq,2Ӄv5tї2joH2MMz UKP!Gq*V*i`8 lrrzS^CerRF60TQ 996UI JK 996UI JK 99UI*m` lrrzSޓUKP!5n[Ԫ$erRB 99m`ӋZUrerR40TQ 99o.i`8 lrrzS,C_ʨ 8!'7j6i`ؐ8 lrrzSC_ʨ8!'7j>i`8 lrrzSC_ʨ8!'7j>i`8 lrrzSC_ʨmq>VMهP{CN$jq>V\هQ{ qCNNojU˕}K!Gq>V\هQ{ qCNNojU˕K"GqBV\وQ{ #qmDNNojU˕KP"GqJV\ىQ{ 'qDNNyjZ}PRV"/eNC|i`+ Ze  l#rrzAʚlD_J4"'8 l#rrzA,D_ʠ8"'> Y`8 lrrzAC_ʠ]8!'6 Q`ؐ8 lrrzAz,C_ʠ 8!'*j 9~)v2(n[Ԫ&ː2jo7!C>&eMj(eI J{ 99]M_ 9IAErexzS+ZeM!c B $j-RgԊtreȘR3vA2ːZ󼦫B 1 ZT!7_U&䦛1f̂M7!hM!7]!(4c(BnO/hEhd AEr=xzA+:G5M c X-jA ZY9Qt 2ЌQТdnCPh&曏Vu]|t1МIc A9 z= Z9tqӵBs&A7_{s[1Lh=nO/hu7n= c<(ЭǘRsFA7z7T_SPj*[V[1X[7z7%T7z)(5gDqxzS^CuqӭǘRsvA7z7'cLA9 Zo=ӛZ#Pzt1ԜeͷMn=nSPj4[6K1L(=nO/hU՝Mwc Yy|1^Ъ+<3 c< WCPh.Vn t1ԜQ%͗MZcLA9 J/9ӛZ5 tq%ǘRsfA7_r7jK1(9nOyn tqBsvAt7q@CPh.+V1[47p@7]p!(4gDqxzA^tqBsfA7oz%Mc J͙o|1Ԫot1ԜYM|-g73 ߸~ct1МA͗|6۸nc t1ԜYM|1g73 ޸zc<,ƘRsfAw_o7jLz1{w_o7g޸zcLA9 ꍻ7ӛZ3P]ou1ԜeM7SPj4zV7SPj6zV>iۍ1Lh7O/hSM_CPh2rˍV>aۍ1 h7O/h3MCPh.vۍOrˍ1e欂(7OU]Ww]m3Gmܣڸjc9{1́5O/h3MCPh^{V {53׸^ct]BsfAtu㡫1欂:O/h?O}c A9 o: ZSSPj(ᛎVGn:3 xc t1ԜQM7Mz5]Cwc Fq:OojbtmǘRsfAv砺xc A9 ꎇ; ZcP]wn: xc<=l{1e挂9OU/xc9-÷7ƺxc A9 J/9 ZÆ.9SPj(KV=t%ǘRsVA_rH]rSPj6᫏V\}3Pf0᫏Y{gxc A9 o> ZY:Y1̂(>O/h?O}c A9 z= ZY9Qk1f)j'_{qLxҭ@ ZMIOCPh$xxzA+ދt;1f,):'y55Iwc JXStOOojEt;1fL):'y7uLxҝǘR3FǓ<ӛZQ;&ys1F'4|;>s1F'4 BRK*<>s1F5Ox-$.37ctQcokBRK<>s1F5[Hj]Pgє/<>}1v̒ \x3I_;HfUP}g;q/<>}1В \x }w7c -1x|cNh7KHhQPgn}1В \x 4w|c,!%'A+w|cl!%'A(Ow-$$3c6Co_w|c,!%AJOv%$$3ctBÿ |1Вʎ\v &eXBBKn*;>s1F'46:|ˎȎ*;>s1F'4hwKHhMMZg? گG,j(]]:>}1ԒuE}wc I- ]]':>}1ԒuE~g:ZrT񙻎1P.]BRK:>s1F5+~]BRK:>s1F5+~]BRK.:>s1Fj7ᫎO_u%Du|V񙫎1:曎Ot%$237ctBccKHhaPEg.:ƶ9>}1Вzs M5_s|c,!%gA[j-XBBKj9>s1F'46|KUr|cNhlwc - ]Poq-$&3wctQKͿ |1Ԓ:qEM5q|cl%:qEm5q|cl!%WAukBRK΂8>s1F5|;q|cNj ǧ8ZrT;1ڿjc,!%AU XBBKj8>s1F'4:;c -9 o%$.~3ctB[Hj]Pg7|7>s1F5Oo-$.~3ctQckBRK7>s1F5vM~c I- ]?/ ǧo8[rT1߾BRK.8>s1F5ۗ[HjiP%g.9.Ǫ};d\q|cc? |1v̒à*\q3:7c,8 Z5p32Ԛ/8n;fmY|`Ì̴7Yp7n5_o|1v̂Uq0ߛ9|1v̂sUq0cφ6nKHh1Ъ۸ncNhӾ6Zp 6n77l%$hlr1F'4滍6Zp 6nρۍڍ[n7FC탠~cl!%AoE_p|1Pq 177p-$(1߄icl!%gAU\qE |qXBBK7n c -9 ޸zcNhͷc - ݸvcNh? |1Вʍ[.7.)m|1В[6~W7_m%$$j㖫1:_7c -ٸfcNh|qBQKƭ[6Ɩ6n[HjMP-wctQc×7_n-$(rˍ1ۍo7ZrTq]c I-9 ޸zc.jlx~or1F5<|qBRK*8n{o8ZrTq ]owpr1F'5۸cl!%A5pE\p|1Pq1cl!%A5pEcl!%A5pEcl!%A5pEcl!%A5pEcl!%AU\qEcl!%AuqEcl!%A\rчkͿ |1v̒ˠ:[8Nw7q-$2;15q|1Pq;1w7q-$2;1w7q-$2;1w7q-$2;1W7_q-$2+1W7_q-$2+1W7_q-$2+17_r-$2K1:3Կ |1Ԓ۠j[9FK7_t-$6Uts1F?cl!aUjmчPeݗc I- z\vE\Tw_w-$6Uws1F?(32;HfeЫc~+}quXBB ^u=ctBi]}1ЂWqu跧}t_w%$,Uws1F'4Ժo;KHhUЫcNhtGAeXBB ^e=ctB#O:KHhMP]=wctBwwu-uܫc~oOt}1v̒{n:rG\ts1F56:|qMBRKnj:j̥}qEXBBKn*:ot%$&㞛1:oO&UXBBKn: |qUXBBKn:M૎Uus1F'4vts1F'4C/: Z":Uts1F'6/:[HjQPE=ctQcWw_u-$(㞫1ڽw_u}1В{:> |qUXBBKn:gWc,!%7AU\uc,!%7A5tc,!%7A\tZͿ |1Вz{9KHhMP5=c684r}1Pq[1@@O_r%$$K1@@/r%$".,Lj9mʬWfAz1g?sW1,dc o2vWwd1z 1G@G1`!sdx|Twd!z1GW}|dz1G7{TߑGfc 8Ȫٸ 1E5 Ul/6Y"6Ul܅ؘ3`2ck5ƀŬk̙؇fg_j1`1sfÌ}jKd\Uj܅Ԙ3#@g?<Wc ,9Ҹ 1gFNNa?c ,и 1gzy0kHfPu]9#O eXC2K*3Bf̙^3vૌdUe܅ʘ3{=f8;c ,ȸ 1eb1f_c5DcܫƸ 1gz<ȟͿ|1֐̒;JsfwÌA^ߙw c X Ɯ0cw/0YrTqch;};c , }1gz7rW91,frb/_M5$j.ĜskHf P]93rfÿ|-1֐̒jsf͆Rb!%G@w!%@ XC2K$BI̙+ XC2K΀*$BH̙[HdPm]؈)[g*bl%*^U]9+3oV#c ,9 1Gzt&UB*!ƀBB̑˿|1֐̒*Psf7Ì}\ dU@܅3{f|0֐̒ꇻsf7Ì~7/YrTpaxXC2KnB=̙3v_ ેdU=܅z3#7?|0֐̒#Sf/1+c ,B;̙+b4n XC2K΀*B:̙3b4r;3U9Yr3#wMpkHfP]93rPdۆD6܅m#{?6vm૆D\U5܅j#{6vl{D3܅g#{?6vk KDU2܅d#{6vj D0܅a#{?ӻ c ,F f0Cscw c "-d?0|0֐̂`Tfa/P>dz sf~jc c ,8F ǾYpB+̙ >oYpj*̙Ǿ/Yp*B*̙>Yp)̙#ǾYpB)̙_S>XrT>aJE&/1c_&-D&|h/YrTy`5}M5B"K &s -$Z1L%B"Kn* $s O-$:1OLB"K."sdf+YUȘcuX2 u;}/Ē_mWh$F|$L*B/&1>/%$dW|17UXBKU^s{|/%$dW|17G=XBK_l%>߻|狹޾[HdB;bAǿX2}ؐuXu؎moX2m|o-$dW|1ѯ26_l!%ӿ|拹]KmB"Kޡs ||DLjC/2v-6۷b ,{6_-d쑬o}/P]mwh܃;֗޾KHb2;bncw޾KHb.;tbnc W޾KHb*;Tbncw޾KHb.;tbncW޾KHb*;Tbnc7޾KHb&;4bn[Hd&;4bn!MB"Kv5ޡs }wY]؟}|B|*C/2|o_-$dW|1OL_{2_l!%˿|P拹җ޾[Hd2;bn!c?e/Ye[؏/}|D*C/2̗޾[Hd2;bn"cJe/Ye[e/Ye[׿/Ye[ؔe/ Y"en^|o_-$dW|12_{2_l!%|P拹2ۗb ,YU{2_-d_[Hd6;bn!c޾[Hd:;bn!c޾[Hd>;bAv>b I,{>_Mbtbb I,{>_Mbtab I,{>_Mbl`>b E,{>_Mbl_:b I,MbtK_?,du:_-d޾[Hd:;bn!oeuB"Kޡs }/󇿯Y2u[؏0}|D C/2#L_{:_l!%˿|P狹޾[Hd:;bn!c1||DlC/2޾[(d:;bn"|o_-$dW|1)|o_-$dW|1]|o_-$dW|1 ko}/Ē_mwh$F|$l*C/&1FO%$dW|17M|o-$dW|1ѯ22_l!%ӿ|P拹=moY2m[u Yu[ؓ{>_l!%ӿ|狹=񅾷/Y2{uc} }$,*C/&m _{B_l!%ӿ }P苹m _{B_l!%ۿ }P苹m _{B_l!% }P苹n B_l!% }P苹n B_l!% }P苹=oY2ȨW޾[(dJ;Tbn!cB"Kuޡs}/Ē_w$F-;}$lC/&1]O_%$dW*}17}o%$dW}17 }o_%$dW }17|o%$dW|17duXBKfޡs){6_,! &ߏ↑՗~%R;ElĢȿ?k!sGK ,/}DBGEB>ZB"}?"fKn!{dg-di!PȢ[GY ;_ZHd'+hUB. ,Z/}DBWEMBFwK߶KBvWd-dZB"KV&}=.0CP?&1mo}"tOnLmد?>:3Kncߖ֗*b.@d/I [_:?s&1mo}"TOLMد?0>:3Knc֗*b@D/I~[_:?&NXߗY2:3Kn!c֗ d?z|_3Kn!c֗*d3Kn!cV֗*dN@T/2[[_?S20V֗*d@T/?GKBV}-dq/U~]?S2mo}@%`!?S2mo}B\O[e ٯ?>3Kn!c߶֗*dl/[[_?d7/U~ |_rηTu:'T}Mbta߶Ē|_rHg-d|_r *m}i!%?2cmo}@%`!?2cmo}BlON[؎m ٯ?>:3Kn!c;ֶ֗*dNl/=Ŷm ٯ?>:3Kn!cOmo}BlOn mo}BlO[.m ٯ?>3Kn!_D[.׿m}i!%|_r eͷT |_r߶֗*dl/cQ t,`ug.ߗm} %˿埙|_r`=Eد?>:3Knb=/%$d3Knc֗*b@4/IMX[[_?&18[_?2N~[B"KV?2h6֗ d?|_3Kn!cmo}BTO~-dbwT!uCBVw}-ddmo}BTO.LĴU ٯ?P>:3Kn!cʷT!u*'T}-dl*R|P%o|K_}Bug*ߗBƞ*R|P]%geʷT!u*Q}=۞ɷT|_rEد?>3KncǷTu'T}Mb֗*b.@4/I}XREh|P%7J[[_?&1c[_?2~B"Kv?2~B"Kv?2~B"KvUw}-d֗ d?z|_:3Kn!c?(= ٯ?>3Kn!c?(= ٯ?>:3Kn!c?(E ٯ?>3Kn"֗*d@D/}b"R|P]%OL"ߗY3KE[_:?&1vaREh|P%7Ӷ֗*bN{sY|_r%؏ߗE.L跥-/U~] I|_r - ٯ?>3Kn!ߘ5/-$dugߗBf/U~] y|_r ȷT!u"'T&}-dm/U~] 埙|_r {c|K_}Bug*ߗB.R|P%ߐe ٯ?nU滅2_==7_2_,!a"Ub$F|7%$`o廅._MbdowUXB VU[$F|7%$`o仅&_MbdowEXB VE[($~E/Y0*B/2Nfb ,[ns }+|D |P䋹EB" VE[(BFblwEB"Kns y&7b ,1n仅&_-d!|7_-$dW|1|/Ȓ_][BFblweB"Knsխͷn[Hd6-b_dnmweAKns`l`.wb ,Y廅._}.wb I,廅._Mb]KHb.-tbnc|/Ē_U[$q&_,%&߭|䋹I>MoYw M[o|/Ȓ_M[hBF1|DjB/26b}|DjB/26c}|DjB/27n[Hd&-4bn!c||DLjB/27n[Hd&-4bn!c||DjB/&2#_&_l%&߭|䋹MY&_l!%뿚|䋹MY&_l!%뿚|䋹MY&_l!%뿚|䋹MY&_l!%뿚|䋹MY_*_l!%뿪|P勹MY._l!%뿺|勹MY_2_l!%|P拹MY_2_l!%|P拹ėn[Hd2-bn!cS֗n[(dw2-bn!cS֗n[Hd2-bn!cS֗n[Hd2-bn!cS֗n[Hd2-bn!cS֗n[Hd2-bn!cS֗n[Hd2-bn!cS֗n[Hd2-bn!cS֗n[Hd2-bA_UXw UEAKns`W|{|"x|B/&"Y2w =[E|7-$dW|1}|7-$dW|1}|7_-$dW|17[Hd6-bn!euB"Kns {|7-$dW|1w}B"Kns ||DB/2v/>b ,n绅>_-d|/ȒBƞ.vK_?,du>_-dl>b ,Y绅>_=ȸpuX2w uؐmoXw m؎e/X2w e،]Xw ]؊UX2w UwoXw M؆MoXbݪw M؄MoXw M؂MoX2w Mn6||DB/2||DB/26||D*B/2||D*B/26||D *B/2|D,*B/2:|DL*B/2||B|*B/2{weB"Kns2ns||$B/&1}|$lB/&16}|$LjB/&1}|$,*B/&16}{|$ B/&1wD||D *B/2N-$dW|1ѷ2*_l!%ÿ|P勹.wb ,qn廅._-d!|/Ȓ_][Bb.wb ,Y廅._-d!|/Ȓ_][Bb.wb ,廅._Md=]Y2w ]{/._l!%뿺|勹>wUXBKUnsoXw Mص|7_%$`U仇"_MbX}| Vesv_"_,!"=bn#|w_%$`U仇"_MbR}|$|P䋹IJ/}/ĂտW|1tw=XB F^={$Fk|w_%$`U㻇_Mbdw-XB 6^-{h$Fw_%$`U⻇_MbtٛXBK6us9;|w-W:|1w2_l!%:|ዹwb ,ệ_-dlwb ,ệ_-dq;|w-$dW:|1o}/Ȓ_-{hDl{|w-$dWz|1OL"_l!%ۿ|P䋹/}/Ē_E{($F-|$l*C/&1]|w_%DW|17{|w%$dWz|17KHb=bnc?!-oXw-OH|K|$*C/&1v[wb I,Yệ_MbwB"KVus B"KVus B"Kfus ]B"Kvus {N;|w-W:|1 9+|w_%$dW*|17K_,!%ÿ|I7[Hd=4bn!c7[Hd=4bn!c7[Hd=4bn!c7[Hd=4bn!cO1||DljC/27[Hd=4bn!c1||DljC/2}|B|jC/d7wXBKswXBKs۱wXBKswXBKs[wXBKswݽXBKvus۰wսXBKfUswݽXBKVus]XBKFso}{/P{^{hBo}{/Ȓ_{hB&o}{/Ȓ_{hB6o}{/Ȓ_{hBFo}{/Ȓ_{hBVo}{/Ȓ_{h\kcgoY2wc2_޻^,!%ӿ{PދI~wb I,ݻ^MbtWb I,Uݻ^Mbս Yݫwս[}u/ȒBƾ1? ٯ:Cu/>$Ž/X2wŽc|o{{Co/>c2_ۻ^ %j{Pۋq]KHb=bnXBK6s7XwSE_ۻ^,!%j{PۋI}o/Po^{Bƾ/}q{Dl*Cq/2{w܋-$dWs{1wͽB"KV5s {{w܋-$dWs{17[Hd=4bn!cץo}s/Ȓ_ͽ{hBKܻ^l!%ۿ{܋-ܻ^l!%㿚{܋b I,Uܻ^MbK(bw=bncwXBKs}{{wۋ-$dWoz{1[Hd=bn!co}s/Ȓ_ͽ{hBL_ݻ^l!%ӿ{P݋M ݻ^l!%ӿ{݋n ^l!%ӿ{݋ ^l!%ӿ{݋wݽB"Kus ;0}w{B{Cw/&2O#|w{DCw/26e}w{DCw/26e}w{DCw/26e}w{DCw/26e}w{DCw/26e}w{DCw/26e}y{D*Cy/26e}{{DjC{/d']<޻^,!#bn#Co,b[%mMbdXB QGh$Ff{ދ%$`{^Mbw_{^l!#bn!ߗ?|/ȂT{1oL{[Hd?[}y7b ,XG5s /_{ _l! #Tbn!#;|-$`{_-d<|K|DL*=B/2r_%B!K$Gs QK|_-$dWJ|17Wp×b ,YU{_-dl×b ,YU{_-dl×b ,YU{_-dl×b ,YU{_-dl×b ,YU{_-dl×b ,YU{_-dl÷b ,Y{_-dtb ,YU{_-dlb ,{_Md~"b ,YU{"_-dl&7b ,Y{&_=|%$dW|17oK&_,!%ۿ|䋹I~W7b I,{&_MbE/XEy{|%$dWz|17KHb#bncǥo=|/Ē_-Gh$nK_{_,%ߣJ|P⋹I {_l!%Z|⋹ _{_l!%j|P㋹ _{_l!%j|P㋹- _{_l!%j|P㋹෥o=|/Ē_-Gh$FK|$*=B/&1~%$dW:|17ѷ~ _,!%*|PዹI7b I,{_Mb0||B|j=B/2N+|_-$dW*|12{_l!%ÿ:|ዹ×b ,U{_-dAo=|/Ȓ_-GhBƞb ,YU{_-dQ=|/Ȓ_=GB~ [Hd"#bn!c|-$dW|17_UYU[ؔU Y=U[ؔUYU[ؔUYU[ؔUYU[ؔUYU[ؔUYU[ؔUYU[ؔ]Y]eB"Ks mB"Ks mB!KlGs mB"K뿇r _R Y]s }B"Ks/=|/Ē_G($&o=|/Ē_Gh$o=|/Ē_Gh$v/2J_l!%ӿ*}P鋹~wb ,{N_-dtߗb ,U{R_-dlR×b ,U{R_-dlR×b ,U{R_-dlR×b ,U{R_-d쑬/=|/Ȓ_G(BR×b ,U{R_-d쑬/=|/Ȓ_G(DF?0;}$=B/&1yo_%$dW*}17яKF_,!%ӿ}苹I~Z7b I,Y{F_̵vm}B!KGUs"lWKHbJ#Tbn_cXBKv5s{ }_%$dW }17>}XBKVsuXBKFsmXBKFsXmB"KVsd;H`.#tb~S7b ,{&_};(`#b]-AKs` =|/v_GlXM|%$dW|17KHbޯ#bn.| |D *=B/2U~_-$dW |1GB"K&s ||D|I=}/0`!*lcn!#;|O-$`{_-dV:}K|DLJ|P⋹\K/=}/ȂVJ|1W9}K|DJ|P⋹O_{_l!3bn!#S%/Y*=C/22eO_{_l!3bn!#S%/Y*=C/2:e_l!%J|P⋹MY_{_l%߳J|P⋹2_{_l!%J|P⋹2_{_l!%J|P⋹ӗ[Hd3bn!c̗[Hd3bn!c̗[Hd3bn!c̗[Hd3bn!c̗[Hd3bn!_[Hd3bn!c}K|D*=C/26e}K|BH|*=C/26e}K|D*=C/&2wO_{_l!%J|P⋹MY{_l!%Z|⋹MY_{_l!%j|P㋹MY{_l!%z|㋹MY_{"_l!%뿊|P䋹MY{&_l!%뿚|䋹MY_{*_l!%뿪|P勹NY._l!%뿺|勹2W;(`*3Tbv\,MXBK5s[EXBKs=XBKs5XBKvsI{|D=C/2N~_-$dW|1ѷ2&_l!%|䋹Wb ,U{*_-d=}/Ȓ_]gBƞa.wb ,q{._-d=}/Ȓ_]gBƞa.wb ,{._-dgK]B"Kus}+ǿX2 U;}/Ē_Mgh$F|$L*=C/&18}|DL*=C/2v`"b ,U{"_Md7*/Y2 E cd5AK4gs`g$%AKfsӗ[Hd3b_dJXBKVusFwb ,{_-d[Hd3tb~X7b ,{_}K^ %{ߋXa~ߋ-$dW{1/KHb3bnc_cXBKgs/=}y/Ē$~n/U~{1772{^l!%{݋2W;H`3Tb47;H`34b֩ͽoX2 ͽ7/X Ž'X2 'X2 Dӷb E,{^Mbl\ӗb I,U{^Mb|g;{$L=Cg/&1@WKHb3TbncO}c{$Lj=Cc/& 2{^l!%{؋-2_{^l!%*{PًM2{^l!%:{ًn2^l!%J{Pڋ2^l!%ÿZ{ڋ2{^l%޳Z{ڋ2_{^l!%ӿj{Pۋ|mk{$L=Cm/&1|mk{$L=Cm/&16|mk{$L=Cm/&1|mk{$,=Cm/&16|mk{$ =Cm/&1|k[{$j=Ck/&1:k{$=Cm/&1fp<}q{D*=Cq/2i{O_݋-D{Vu{1K_{^l!%{Pދ}^b ,U{^-d[Hd3bn!cB"Ks {|O-$dW|1-7b ,{_=.KHb3bncCKHb3bn;֟KHboUB}/&12comKbmX17|yoXB {171U͗b ,{[(BFɚ/m[HdoUBy/2Vf{D V-bn!eo[HdoUBy/2r7_|y/Ȃߪ^-d"o^l!˿Uyo 彘[E|yoB" {1{Dl*ms ^͗6_ދ-D۪^Mdw6݋%$dWwo ݽ;mKHb{17>W6_݋-$dWuo ս[ع{Y^-d\սWb ,UBu/2v.{Dlms ;|uoսB"KUP݋MN|soͽXBK5܋Im{oY2^-d76܋-۪^-d76܋-$dWso ͽ[om[Hd{1L|s/Ȓ_ͽ-4bn!cGom[Hd{176܋-$dWso ͽ[E|s/Ȓ_ͽ-4bn!c}soͽB"K5܋lgS76܋-$dWso ͽkn6_܋%$dWqo Ž;omK(bUso ͽc,{$Ljms{ͽ7b I,YBs/b̽76܋%$dWso ͽcj{$jmsbߟKHb{1!{{$ms}GX2^=Ď/ߕXBK6ڋ1]o~_ڋ%$dWio wmK(bUgo {W6_ً%$dWeo ߕ^,!%{[h$F+ {$l*msKHb {1!ƿ {$l*mskKHb {1!ƿz$lmskKHb毺z1!ׅ}[/Ē_m-bncߕ^,%Vu-b!v}_o}XBK6׋I6_׋%$dW]o u;mKHb毺z171^,!%z[h܇e͗b I,UBY/&15o~֋%$dW[o mk^}KHb毺z1!ƿ+z$ljms7oX [ًw{XoK_|]/P]o&t_*}b ,Y}A+}bŬ~a N_|e/̒_M({0a/4^!%j{~ֶy{1`A_{@`Bߞ {ۄ 4&4/|oXCBK*mB;|oXCBKm^{k|Zr To_;k765۪ɷ h̷2_!%@6!xh|/֐В|~z<>=}oXCBK.mBEͷb -շ h"65$"^&__|/֐В}0~F.~}oݾXCBK.mؿd͗b ,9ܷ f ÿ|/̒{}rf/z37|oB1K}~aFY|oB2KmD 7b ,9 f졭/mkHh1P%MH~@#7_!%@6]|oUXCBKmB9~ۄ 4r 0ab -9 h`;Zr To/5ͷ65$&ڋwBc8|oXCAKz~Fpۄ 4rݿwb - h"ٸͷb - h"ٸb - h"ٸ 7c - h"ٸwc - h"kZrT p/Epq뛀oZrTp&/Epq_ kHhEЫ 0?hdv}00`A*"~EFd0a~fwc -8zuw ؙV[Z~쇞w 5$ ܅ `g?f`!Af._;gwc -8zuw ou};0֐ЂW;pv/fZc -8zw ou}C0֐В0sh/4+b({UwŒ d%ݗc ,$ If`#w_-$.4_sw_5$.D_sWw_5$.T_s˂/ ZrTYp/9uc -9. ]h`׀ /[Hf5P}]0#-$._c~o Yr Tep`/Bݗc -* B1pcw-$._;|mpB2K B1p7`l!%@w 8Z_}q0̒Sa~ ld\܅9 K`Ww_-$._˃/Zr Typ//냻Zr T}p/Om 7c -A 0خ%ݗc -*B"دv#}0֐ВczFkW w_%5$*.T_kmmݷ c -9M h`f}pXCBK*B(دv)}0֐В:p ~lqV[d*܅U ःÿ|0̒{z a~tooYrTpf/ρ B2K-̙ȅ?ݷ c , j.1p}pXCBK*B01pw w15$._'+ w_35$.4_'+7 w45$.L_'+ݗ w_65$.d_cZr Tp/5 GWc -9r h_h9KdU:܅t 3rЯ3B2K΁B;̙xe6{5waL}pXCBK*B>=0?܅ {~td@܅ sbǺ [Hf5P]80{.o} q5XCBK!BC5pk}qMXCBKj"D5pˈ/#Zr Tq2/ޯG}1֐Вs~\[J+UIS%1K/% Z"%UJS)1}{Zk= ==/U~ `A@%4拉/&ZrT1qO\N_kHhEP=c{0䋉/&ZrT1qOF=c -bb Aÿ|11֐В{*&F/&kHhEP=c%+_L}11֐В{*&4vb{TL?hlb\ULS11ዉ/&ZrT1qO&/&kHhEP=cbb!%ATL%YrT/qO\;Zbl!%@TKŌo%YrT+qO\ Vbl!%@JɌuJ}+1̒cZ{j%b~۷wJ-JܫVb .fwZb!%@TK?h+Ϳ|/1֐В[z{%4}/qXCBKn%oq^{KS/1'i^b!%@K?hI%kHh5P=c;;}/qXCBK΁%{%ZrT/qO\oq^{KS/14K}/1P/q^z1^{\KS/14K}/1֐Вz{%f%[HfAP=cp1h=[dJS+13[Hf9P=cp1cϹ}'qB2K${+$Yr T%qO0t(Ww_I5$J*1=JWc -8FUTI?hQWc  B  A#mN;:G$42҆$kHh10xNb A#+mN;\:G$4rvI<|'1֐Ђs`T'HFwc -FuI?hdI<|'1֐Ђ`T'H\w} _I-$ UI|#B1KģGj$b>|#B2K.j$~qJ+\UI$KHd9P#ucp"cs7H%$F18#Yr TH}m÷c ,x6b Ndlh.ỈDE/_eXB"KT?~߷c ,Y>.Uo Yb8EW2xƛqixSM8@}\{73KȔo=Ûe.፷ )2%[ZqpGvq%w ocH):71;70KȔo ÛjU?%RdJ~M ԲE҅ o]Ȑ)vڅ7.dѫw o[H)ߺ7-dQo%RdJfM5 Y?/-RfJbM Y&^+Za\"ET0>3>Va\"EkT0>3>Ra\"E+T0>Ew oSH):7)dsx0?-RfJNMu ,<w )3X:q`x;qެSxS8x0gRx¸ELV)Ja oMH)5ڄ7&^&[̔`e›*Yx{-RfJ.Mu ,<=W )3X𦪄q`xƛqbެIxSM8x0~ oHH)=7U$Wy{qGxS=8`xkqRFxS58@[qExS-8@KqRDxS%8@;qCxS8xC֣+Ax ¸CJLi a)1%[}qN,j;xCJLHͺ;7^xq0X쏃;):5xk0ZqN,85^xe0r*qp'V RbBoT_0/ RbBoVTY0މJ:7;Ą߬)`׿K1S?n2Rঊq`3xQ0n2rঊq`7xO0n2zq`dk -RfJjq`xK0n1S,Zj YpKq$`|0N"`\"En"Ȧ(jqR!`ܙ-a)1X?pS8x' x;0S*7;-~w)1X7pS8k11>f`!%knw%y/0S¿7 2Ŝ7 [̔oM,zg^{qn T/0̢&nH)zYTy-pELIV T-0̢b[o-RfJVZq74^ x)0n2S7U b/nH) J*YpO)3X)pS8`6;qRN`| Ϛ| DLiV T%0ޑ6^x!0S:7Uwb7;dp6ڀqN,:_*ƫq *`Ζ"`!%+nwbSo ^x 0."S¿7Udѵ ^x 0."S7UdQ&W)2%[pS8@2W 7)3%[pS 8x0 ߚ|ELVT0&y/n2S¿60q_-)3X pS-8x09nH)5j&x0n2Sz70=)3XpSE8x02-on Ș)&fMM5,ʴ *`"eU0x0>oZp~hl2ˀq 2`E7^KȔ`uMYqR:`| x0."S:7UdQu2Eܬ:`| RnH) ꀛ(d:qR:`| 56ۀq 6`| nH)ꀛۀq 6`y0."Sҿ7dQm)2%[pSm8@^x0."Sҿ7Ud& 2`"e+n f[7^[dp2ʀq`7ypeEL)VT0̢jˀ/-RfJ2ʀq`}lˀ/-RfJ2ʀq,*M *`!%n Ģ3xpECJL)VT0Ėvx0."S 7da %RdJjq, |-DL)T 0>H)J*9:Kq"nVT 0̢/nH)J*Yt8%)3%[ pS%8x0g`"eknfQg5)3X pS58x0>=)3XpS=8x0>8E)3XpSE8xg5M^x0S:7U;5&W^;Ĕ `EMNl ?E)1t+Ģ3;o HXdb w^y0."*பq,wwKȄ߭ .`| e)2!w+ ȂypmDLڀj%<>`"e&n}],<>`"e&n}]Ye;o wH [pWm8kQ .`!%&n]]uX\UW)2%[pWU8@xpMDL1wk Ȣ_ &`"ek f H)ߪYԙxpUEL)VU0̢ˀ;/-RfJ2ʀq`&^y0n2SwU# ;/-RfJB q`| J+qJ`<74v^ y)0n2SZwU kRKqRR`|0:y)pELw+fQ)3X)pW8x02-/H)=J*Yiy)pELV U)0̢LK;/-RfJRJq,:kJ+qJ`܉wbƷQ%0Pl P8x0 Ϛ| ELi U'0³&x)0n2SZwU ɷ^ [̔`],:kb΋q"V U10̢+Aj`"efU ^y90n2SZwU(vہqv`|0+Q>)3X=pW8x0H)=Yx?pELU?0̢|;-RfJ~q`3~`"efa>{-RfJ~q,Jv`!#؁w˲.* y70S:uw wb7w ;Ĕ`]5X/H)*} KȔo]5Y?%RdJjபq,~g)3%[9pW8x0 ߚ|ELU;0̢;-RfJzq`U&^y=0n2SwU2zqVU=0̢zqRz`oL>>`\"EDȢ벼>`\"EDȢ˲>`\"E$Ȣ>`\"E$Ȣ>`\"ED3EܭB`Ly#0n2S 5w;o-RfJFq`7qRF`4#6ji܉-116ۇfr3@,1-;wb%?K!cDl | 󯔽Y Mf >)6ۇfF`އlM,:g&`ЌhLM 4#6Tm MN,-׿=1 z ^.Ō`gbf;vfQΠ= x!D3xc֗6` h4| f|-)2TD 3@@K%RdJ`g,> `g<' `gRf[D3x09-M J3*`gRf[D3@~IC3f-@PC*`g`3Zl1 x5@T;*`Ќh T 3 f| E)1,"`gN,f>4!6v(b`gN, f>4#6Z >d (vĢXF+C3b_PC6 `gp'61Zl x_;wb- e>4C6>duJx?mvH)_4;χZl2Sbÿvo `Ќh 3 O| )1%/6`gp'VS&iCJL O>4A6v(d6 `g,A;C3d_pC6j*ʧC3d(d6`g,̀ۇfF އl%O[-RfJ_m-,<;[̔/jY?vH)_; Zl1x_; l1m x @4;*`ЌhTf;vf5 Zl0T;3[D3x0*`Ќh Tm El! x5@4;d(&`Ќh L `gR)3X;pQ8x0 x;0n2Sz0=)3X?pQ8x0Λ!`"c5 o-RfJq,q!`3 _e| CJLiV\TA0Ķ^ \x?0S:wbkowH) ꁋX_c|CJL\T;0މE*ہ o%RdJvځq,jLr`\"E+.ȢĻ %RdJnࢺq,Kj`\"CUU dl \x30."S5 da7)3%[3pQ8x0Nf`"ek.f7 [̔oE5,<W)3X5pQ8x0 |ELV \T50̢4y5pELV \T50>E?[x5pEL)V \T50sx90n2SZU -2fX=pQ8x0 `"e+. f9W^[̔`EU,K / -RfJJq`}넷[̔`-E,[̔`-E,[̔`-EYk/ %RdJ Jq,|g-)2XKpQ-8@֣+'`"e .'fQE3E\(``\"E+ .$wd?; %RdJ:qpG] ?%RdJ*qpG.7)2%[CpQ 8@ ^\xA0.!S *0~q~`ܑ %RdJzq,|c)2%[=p}9噁#T(%*>jqBeS^Ǐ{_#hߜ5߶]Bs(h6G^y/>׏1LW]#<-_{;~rj6GfӿB^ϋF`^a6GFz)ח)dvN53>qbfCd|kD #IF?d]So/WZ'#mw +X*x~/?}ވ8 ^ZqrAKN_~d|lտAKHUN_?}{xi&nBRdſ#S?}cДn kttR%F:)F!O<961FZM1eH1 L<9=0ٍHw\"(tJ'G30}btڀK0YxƷOfc.bTU OZXOO #o%2mxɱ o1B7)F qh+# >c$N1dIFL'rr2) ,g`*L)$$N1-f]Fbw趘G·gKc}Ɠ3o\;ŧAs>]^ ǸD Q0p<9c`D)D:qhܮȦ)DzvFg0^fv,wvFg0m ^fvtgڳ1:#WQ4Pl5p4YDl=`T-1P-?=_2D~}I; d&`eʤJ{e/Y.)ch+ov)U'4JC$dDxBBMqJO)=S ʌR[t03^vVȸ)Ez'Jr pori&rApowjU`08[0ܿ~^q(Qf$ӷ߱ƷQ4Pl@߰#ڇ~ǯ^FGҧrnW5WEMK />ŏo DOi V==zZqo^KlTJQO(:U>-%ySu/DO)Vj=Z+lT*5\Oh:0D| m׸DO)!v=Z畐RK.+_Bx5.SJ5_Ohy%L'+_Bx 6nTJ`Oz%?2Wb)?X%JlA\3_Bx?6nTJcOV0TmK/-2,{ e@DQ7l"kΞМ-J0:7vo!E Pi!V=F[赐_;qRCS{BЭ!@m"+؞P-tkH۞6m"۞з-z!}H)=ڷ'oK2E5x[oR|J & M>·^ˍKbj%~^ KK%R~J  ?te$5n\"'+P-:HB~|ݸDO =[UN H) Ī'TyK2kq?{BK)H%R~J ?~,5^Ko-RJ @~,sAz-RJ @,K9Ho-RJ6 m@,kxw)@X7np WAv[ )H*Ě'4+}fw^Kdmdj%~^YZ| %E P)!V">D\蕐G#Mx/!DO)!(>Q\畐/lu~q"/.jLKqRCt|Bϫ!k 3Lk/ -RJ  @uG[b]%^ Y _CxA9nTjO((z5dO;_Cx[9nTjOh+z5d qPCW Yn)x'Tj[$qX,!,w^=H =ZyEϹ![iH56 ]DpPDWK"M>E2t"(jee@D{qPDWK"2Z}kH}CO!+%|^ ?YRy:njH&&t WCztGt}[HDOh!*+*%~^ .!w)?T>>y?xU"L};HDO Vz^QzC_˵?v^\T_-|5DOi Vs^Qs.sHx3B5?`?޼\kKa?~UZ qR?м\ԏ"^e[bUU@ZKqR?ļ\ԏyLS _?x9.SWK1/[.%R~JrW?;jo-%R~Jrw~їAķW;d_yr >;w)@~XWyEWЫ[tQ5?`?\􏥔M| E P) P^P.t R7^N[b@,e+@x/9nTWKFp;$-RJJJr Aw^FKbee?,% s;!%R~JrAC~| DO @^@C/qZ»q =^=.s:7:;b>,9W8[ b@ _Ax8nT*WK Re iH*Ě+%^)@XxE˸Ы o7^0Kb?7-Kb?X{q@ww\57aj R|Jqw|Stk!%2~Z yE k oԙ H)+%~^Y@#OH*z+z%^t +/(-RJr WA6o H) +%~^Y ^\Kb? f 1%R~JsW@g7j[b53 )?Xy}CD>:מ)?Xy#ϫ wAR|J{Їy d q'Kbu5֡ ^[b5֢  )@XAz}A:>0|w)@XGz}G:>`xH#H):8Y@xE:.SUwQ7a qR@ 冯 / H) Y /H *j],wk)?RAYv~SMꕯ ?[Aŏ])?X?z}?:>˃_x G%R~Jz.zt|;^)@X?z}?:>`!0GH)YGH* Y! H* Y+G%R~J~.~t|v8^^y=:.SY+G-RJz.zt|;"*GH*%Y;y=zE Pi!V^Er+oG%R~J v.vt|;*4/GH)%Yn"ww)>X7z}7:> _svrt\"T+G"Gg AnʻqR@/wWލKb],w~%RV^^y9:nTY @x;:nTw0GH* Y @xA:nTw^+oH-RJ.t|;qA!!0 +/H%R~J .t|;>EqRB/Wގ;b],7|rt\"委+G"Gg  /G)rj],w~wWލK b],w~nʻq@/ϫ+F%R~Jj.jt|0fʛqR?冯fʛqR?q?0>)?X1z}1:>/W^a],;vq/EH cR],wѻw3D%~8@+{|7ϼwH cF],7|}2F7)@~ֈ>0a3oD-RB}~#:>`Ĝy%+q@fDEr1Jt!'*wQg^>Jt"(*wQ<FNwϼH dN],wwϼH dN],7~k3/Ey):nT:"Eg9F@ފ>Vt"XgkEŊrhފ>Vt\"姴kEŊrEފ>Vt!ŧtkEŊrǷF?5Zע)@X-.Zt|S{]wQ/:Pmy/:>0:^)@X/.^t|`[oF-RJ f],;^ϼ}E Pi!V>ax7̻qRC}~7:>`xwϼH)-ĺwq0v@Ŏ>[;.vt|˻gލ;bYnB̻gލKbYn̛gތ;bYn=b)?X1.bt|;^)?X/.^t|;P 2^)@X/.^t|"Ey-:SբEgۢTy-kqR?}~-:>˃_y-kqR?}~-:>˝_޿}DO֋>/:}b)?~X1.bt|;>^>bt"+Fc1^s.gc6KX| xe`)mJgG?}y翾D O߽?~M\H)gvwR~?o?G O:G^Kr|@zFNiVs>;QrwrtU-9JXGAɅ֍'Ƿga泣6%}'<%4g`#5%}Z8yr|s@zFNig>;>ArEǹ<#Ǜqb2|vL IL3rJ[qs'#yJ P)5gG^bt~.\Kt|i@yzN) V[>;atN=iSt|@mzNiX>;atNW£k3tJّszDy=e:GXOx]ty>"D=blWxZW v׿?lp$.:7%`|'yz|RzoXzVP>;AzEW6'&2z0@ӳѓsz}m)<=W )4=-;(=[Dǽl )15[+X>߾~:/wt%;EgX!Ef+!ˏ0Vkl'wJ Obb{w6Ax|[)rI(()a:g\҇_}Kx {;3.OY~^/K%Rn]HV=z;[6$+Aj= [j<6L<æd=3 r;Knȸ)gPXq{;}b+<6 ;<æzd3ǰa[s*3nʍGV=z;[E6#AS=go;wgܔ;{=wn!Ԃgؔb`3hǰ95ƑθUu7*X :1nNUaq{ 6)9~UWo)7*X 1nNUxU7n)6*X !l0}WW^KdlE3Ǹ9UUUk)6*X 1lNUqU83n|U@wM ֪=XzSjX_x6bSuiϠT9 BH)U*gHqsVW^;ؔ`3ȣǰ9UaCH/%RnJUcܜ0UUd)6*XO 1lNU qR {I7*\`RlJU^C`zviL%2n{>cܜ'W^;ؔ`53ǰ9Uџ7*;TA=ͩ Kx2|U׸CM z=y S. H)Ug0>qsB|U\)6*X 1lNUWmKܔ`3Ǹ9Ua u*Jk!ŦT<ͩ Evo%RnJU6cܜٍ wH Ua<#p-n]]K$pV,Sp-FWwV)6*,Yy S0-gtƍ DM UU/`kTØ剮 /RlBUXzG6*av[誰^j\"&Tz3qse剮 RlBUXz%6*lav[誰j\"&Tj01qse剮 /RlBUX|z6*lٍ /%RnBUXtz7*lqv«qRjz6a[o%2naz,cܜqRXz6*lqv;k3n|U@uM (TyS0*i!ŦT^@w?SJ;K1E[ /RjJQcԜЂ[S{z3jJOcԜS[ʪ3jJKLcԜЂYSK3jJIno%k ,gR%6#:ætk^<N~g93l|E@tMVxqB3Ya*3lJCǃؼ 4aSv^E`Q%3^*s@Muu`Ȍ49[ Sԧ,gB0c - GD$>ʗqd#_e!Cj(H6;+Ho]6d?U MW G%Lg5re X }toh<{3H|ZU&&uG|K|zA (H6;+Ho]V !|Ԇ$.k IħQ10xqe{.4>qc +:^$HSJj|ƸA IIVk8Z+Hܳ8'Q1PlvW qqxqW qqxqW q-ǡ񉛗)$%q[Ȉ AO1Oܼy7H!)ۚ<|߾|}9#y.Mg^<d+a\iË#"Maj<9>)9/~ؐO OK@8;_~_ỗ?O1ވjx0nM%_ߏ_?ӗ_~@BʟBU '   mw?$4)x| Roh 8bdzԍqO%B'q .VW8;<a_p3 lԛoxqD1hsKF:lSﹱq?|stG!'W %jcċc'6n?5. 9'|ĸAM-VO8z;}ˇz8ts;%x71nkM8nhx?TtFfb &\_xuy/׿~_>~xrt5h&V^Q$oW ߮XMGOtXya1nBjū#-6/x";j< 9:)9:V[:!rwW"Nэ7Hɉ\:!rxOqD)9=]:!rxn+. RrbXxuwr|○s9+- TB,C传?sȋ++ R^@r?3X/'67HߓGu/_>ׯ|8-6jʛqTk*^S|ïzDLNI;\j|b\ Wk(^C[^h"l}V_G^O_F%8@/˖=(r8Arޝ\p'zz0j*x~w'\RZO _Fm8@/KIC(r8ArV×ʃ;¨(p#8Ap6ǧ֍'ǷQq1Pl[pŃ[;xr|ouEv]U]On F58@ sDۍ^d+aEƫ#2e2e;a]ƫ2$e _s|uƸCJN)Vg::ArNX_Y'AFc!%4k4^h+H^A8>xHwrgx=2.Sȫ#Y?`znt}d;9#q]18S||U#vG,/JEWN7F8@}# w|Qp9S||"v G,LEd:N=cT>3)=q8wQ%2Plp>r)j'qoBd|nǷޔKaMɫcJ#u[oM%R|Jձ&'y} :x2.S ʫ5(AY綎++ :x2.SZ)MY綎ד.9ǷQ2Plp>uKqR:dyu$O?D:?|]0XΝcqk0~*WG,zG FKok[^Xk#,"jB2 םGX"E(j̫gzd ,GwX"E~WG, z^Y:!DPWG<0z#O4BKdaFhcsz}d /&GX"ENj;uICuH?e]ϫzzdcZy|1>ЖG, HʷKvbϫc$-o'HZW- tIdO]W6h\"Ek^m'ѯծ+Nx-4."TۉBZ@赓5+NxA4."TۉD Z@赓5+Nx_4."TۉE/z!joÎ7IBvؤ^;YvL)BX긦^;Ykx-2 l2TUQZ`ՓuN_OxI5."TUZ@Փ5,_Ox5."TXZ@Փ5,_Ox5."T뉕\Z@Փ\7k\"E^Ы'k6rl\"E+^Aw߫zd3͹l_ٸD P-'V:a^5W`HĊWG= mh8Ӟhp n~IO?D)GД[{-:bQ/hn\!ee%+Jyyψ!~[}[dQ7P mAww_)x膮vz+/RʗH{EwB00FN^+X*??>M|TCJM/6zzqzځio k ϵos)%0h)0["V2_-yxm+`+^Q}O 8ZI=?mקPE).k [7Y]oƿh:Gӊx]k_>iSlH) ڻWwގޡ-ѹNH)W4u/~pf5:jv<)Rn\ %+^Q}'FdY֩^BV|RVJ:u9#wVQxx5l ;/["ۑ;6W6OCJIV;gvvDX_}+>)+%[ۑ}P&X~Զ+Ѷz;Z<+>Jq`Y^%)i +X񗬼UM;.f:sX^nS&`ѹHa } 59,5 ۫EGw\"%D͚74c0z6 q7+P~ l\"%7_0`oC:oHa } 9,Lux}׸D K5_ohaa| ߆t~x5.f*sXo·!7^uKoUSX0Za<%2Xz =9,'/۰ W[),%[jm&` ~f,f?!y5.RXo(aa ߆|ոD KIY: +| T),%[M&M<%RXJj 9,L%'xFKomڨsXK4OHa) 7P0h y4.RuNoNaV6kq ެfzCt |qfh %w+PrŬHa)z7B簜~q1k;%RXJ|* U9,'_\۟̚q߭yCs rq1k;o|%RXJ| ),yކ`)j7<0/*y3.R:o(taa|_..f X||U7wT70/*yI3.R⻕4o(iaa|_..fU>:f\"wcPǜ\\̪|˸D KIVx9 ~U+qbyCr rq1 W,),%[&V>Be\"$x+TPrE7|ɸD KIV>9#Xpc\"$x+9Prr|x W),%[JېOHa) 70WJg>b\"$x+PW^\)ˉqଡ଼xC9q zqt<"%RXJ* U),>^kq ެvxCp Zo y0RһU oQaz_#&P}T'*Q'쾖7zO;WHQ)ݺ7t0ms;/ RTJn %9*ff[ qڭ xCp SZ )*%[ك_>_\!E$v+PrG_ y/.Rna9⣯O켴Ha) {7`+:b|fD (X67dگ|jED KIMxjm,QrrWW>r]\"$w+Pr'+y..RUna9O0Ha)r7氜~ w^KnjqsXN~z^ϋmqvCm FU6+lq  PlG}m v'x^VKoEjsX෋^U,>),%[#F&Ky,.Runaa.$ 7),%[솖&Ky,.Rnaa.n|D KI96 ~R ),%[G솎&J'x Ko}`sX෋K4y+.Run~MaV6l|]D (X65$K4OHa) ]7Իa˷Oϑ@ u2rJEW $xqO_#FoܢQ+[Z龍n-ZZo>ӗ?E5mFS(V6J3-HTT|f RTJfq5RMX}Ժ+j̍U6G8@쬖pxV|`vGz;scѧ&>jZ5ni5c37VQ2"kVsWX):W7Ϲz;sc?5aŧQ*PlZT)37VyhSV|X5ʆuϰ^";Vqۭcu)+'Gw )+%[9VSVNl_ cWHY):V7ϱrr{dg:y*Rrunc5eg})X|pwOrKVqܭdu$)+'odWHY Yj$ +Y=؞x*Uƃ;X%=U\!e%fsނӌ75aEw\!e%fSނo':7ް+ެayՔ[P/XRVBpoVʏVqBfV\"%d~kjmhj%F3?k%RbJ淺ֆVk'>V\"%d~lml%F3?/n%RbJֆVk'>V\"%d~komho刡N,Ȉ) f $17GG~^;o5 5$07GG5'Q+PlG+ MA׹)0%[kC+ 1wH)y*]*]I`nޏ.[T>ZW!}umu%q?jQϫ]qڵڕ9hQ]q޵ޕ9fQ+^qⵡe9a|5C LVPC Xf>W!^U6T?G9l>{R`Jҷ׆W_JhgkOW٤W(|絯C LIVPJ尙OwH)Iߪ__I`NOH)Q__IbN% 3y ,.S6Ĝ~|UELIVPK"s Yg>BX"E}+m(%9y,r?-RdJZ؆ZXaȢO)>zX"Ca6ÒȜC>X"E~m%9GF6CQ],PlG],7d?-RdJ؆ؿ!ׯ_>}rwBem?* M(` o:a3h|UTɎ@CM4Jeqf;JeGaX[ F8@A-#а ,gwlYhX𖂳C67Q,0ЬnnvgwhK6kgq mV;P;; Zpvf60 mkhX u}VH)}jhjhGa)Xj2Y2Q+(jvS St*XNiq v Sʷ^QKؔV` #؜VK ao-RnJ1چnN1qZw^\[ܔn`ŵ ŵ#ܜnpz;lqRövSnx-nrS6pC[TG7$f["㦘m564ێpsJ[C6'["+m(^YaQ¨(j(˟^"ĴiQ-PlA@-G AjgmF/[hb[VF8@Ѳ}-l%<گ<-oqe[o9Z5{->*oqe?*o9ZKt,hy-y¬Ye\zzKB+gm .{۬Åɾ)zy}/>׏oqes=o9^w^ky~~/~r} lw)/%[nC.-լ)/%[nC.I-Ϭ񹞗)/%[)nC).mhϛqqDFUិ)/%[;nC;. m `| CK֐А]h|-CK֒ВK;ϛrqbm֔Д~(G|mCK ֖Ж~(g9kp3^|5|4rh[sq55;yq.R6r|ߣxxϻsq;;^|CKI֟Пr}/t> ]!奤{mx9OᏬt>]\"{m9OLu>2]\"&nee 0՟|y.W|c7^?N]\!%n~_)d[KtKjt%RjB֮Ѯ;@ Z֬<5:)5!wy٢A?Bݎh5l͘ѩWH [nG3\gnƌNBLH x; xa%C?u3jt%RjBVQ;@ KZ 5p`*p@;EMcOoqޱtczq bc[/ {[t5_ F8@a 6ؼjcNڛ`(l^ vlQ-|9ͽEM)cs/+;^z{qR^WvlQ*|CEMic/k;^|qRȷ"__^KԔ`e=#B_\"t+Зw0})5"Xo95G{oȨ)bnž=e/H)}{,%!:oB_~ ~ j~?~ؾO|=%DJMVc/Aͭ/wH)z~{% Jk_ x/BSUXK@sA&_!k헀5O|3EMiVc/mktW_j{qR _[ w^[ؔn`=[tl|9 EM1wk斃GM)6Xp=6 Y` (l6`[˹owH){l& *owH)Z{l& ꡕowH){l&y |w倗 )3X9p3oN~`\!e4`5NU`!#ތUZqR (Ǣ# QZ̷Kd[pۂ j^+13_ xe0.RSJUXLPJA/?qp/`R l^)رE׉f`"Ŧ>Ղ[th/-RlJ1K l^1رg&a"ŦTkIU[xJ-RlJ;: l^;رE׉f Ja"ŦRvəoUH) Z{l& !*3x0.RS X,Ss7jQ_q-c0Am` oRhJAvۅ hnA/@_(h~a[/q/|;øDJMiV1/95_^r;qRc_8sjn9XJ݀ )5Xp n~{o%RjJ5~aΩ &7^3KԔf`5B3SsAqa![ Ca!cS:3Kdp~Ω9v /^J] VewG~e/~dG*| _<2<,+~aG*{|, _0~]$%vh k`|25_ ?~$ vGX|r| `ʯ@ '#HXaoɡ;\w>~$ v芰7 `|2U[yx+ /I?ЁeWB^*|]G>~'ۿ Vyw+ >~' Vyw+;{5low~$;#XwZ?~' Vyw+m?~' Vyw+?~'K Vyw+;[Jd Vai_to2UY[\yw+YO/v7Aª,K\yw+I.'K\%&#(XPP\yw+Y/򝟏h@orxJ$f?~E_'üV\ywD+YF=&3HZ=~{<h%{+5%dI/q%d5_ˏiworwyJv;/vqkyL!yU%;╬w^ovx7BlKyxw+诅]Z}&3HZ}~-34u3_&Yԕ2ؖ9]M*:EE] -Ӂ4PvO7BBut%LnИCm5d [^ӕ2A-d [ҕ2A/%d [^ҕ2=`>~ׁɐnrut%LnИxnd {UВ;L2CxFWB}~Nj&SHh!VB@-hLfth<+F@-hLVth+Fp1#}##Zh<+Fp1#}#Zh+F@?؂dB79`AFZn$]-hLth+F@?؂dA79`AF Zn]n}# Zz4^UВ~[nov@7BA+to{d=@/| #wP3_`ɬ=/Jfl앳6`gs!$ h<+6ˀM*2У fdT]&CHfx0W2K]>&`r$ h<+&@o}KYEz^ʕRYؙdɬ=zJfۭt_Hn2dVр#j*fI"Όov"7B1+$roDdZSkM*2K5ް&Tr3_&+YԀQ%W0K5޷5N&CHf 8RY`{M*pDs;L!UD"0 hv;7BBU`r8ỀM*.pDtp2`Gt)$ QF]-n*`Wt$ QF1$eE&#(bPQFWD]q<} ;XEBGUbl9 !]̷ɐnrB-`2 8} K YE(@Iy0MXТbZ&7h7͗L!U$0 hܠ1 8} ZE(I ӗL!U$0 hܠ1 8} ZE(I([Mf*pE %vȒ {| C Y!{;5`2 %|{YEBoUf\ =M&CHf YfvW !UT*0j f \ [5.n2dV1++e&oTx"`gx!$\QF^,;=&CHfjYwkM*pE EyL]t| ۼYh6`ZkM bCfxl7[2<`!kYUylo4?׋3Hd h1F^,}Ej`f[!,joU{Ӷ7[_)$Xmzhf{@+8V+mTC#lh~ "bͷjZ"wh6W}q `-V}ۨ+%&pF_3_f+xb%W%3;3^>3fcxacǂ|gƶ 38bVi n,ܙ!|M ZT2Ach ,0[ ,epƞ_0N!U4  Khܠ40N!UL  Kh sm] ZbT񨰄n0N!Ul / Kh ۠?/SHhyZ>hm} Zbeʰ_|[8dVn5%_!Jqpa,aB2@ 7R;Z f , Kf w63HdkY=753Hd[Yjm=/ YbiҰDx| C8dVрn<4,%p5??؂klhXТаh]| C8Vрn<4,%pv0K_}C8Vn<4%4f/~iP*KÍ%D؊&৆q b15xjXBKLzְlkXТ ְ[6_0N!Ud o Kh ܠ_40!Ul O Kf ܘ3_0!Ut / ݗ_`5P!/_f#xUG/4,T0_fx50z1/fx /z1/ W 70}8dǼ0NxU-/ +^ӷC!XW٘0xŕDŽ/i6:!a<`> +`fL e`_g#xW}VpΝ^[ ]`gxB7}Vpѿ# Y`g xb7}^V̒MΌo~@*~ 7V̒mΌ/~?* 7V̒ƌ]߯Ye Y/6q rp`, oWk5)J8pp`,Yں`B"=wdL*npB VȒ=w8DVc6lB7dlWqjp`,o*ߏYeƣ YߐMۿ !$GdO XeƓX_]qI`p`E,[u~.g*7 ĒZFo@c8"V n<e?bS8$VYc*T"-`Ax'~0\WﺮCX?@;_|_gp_wfmcD0ť'?wnk޿ {l#X5\ޓ _A_g#xW 6h>5Z\y%آRi _AWL0E`zJ)5_fSxSjI.xWCxLZ%b.\E }`eի:`<`Q:5tjgH jVE-:_~b9 u׃t0E=`[7fx׃Mn! j! ,0h< lr‚ a<`q&*!#,0h <#'n7BExCf#V,:Cߥa7ٌ0pŌpa, olg 13##(fp;ޘ`lGX̢,q7f#,n0#l0KyA fv,zwOTv ?"3H`!# {|+` ,/ `h7`| XTpgxwp/_gxpgxj«C`x}asy.-~4EEbtp߿#sX7~B+lKl/,ᶿ,'9>!%^ p׿#sX}B+lK/<,eFc/o`B+Kl/,en⇂qI/1P ']f/_ !$¿J+X^3H`l?YMmy7Xa_bxy`A,O?SHd?Ɓ#KdK)Jxil?o~*[ /< ,[9klXϻY;ɚa`B"1 0@Ζ/~*,/ ,N>*48$VYcxa`A,]3]`B, . .*0!U6X^xXK7z1ןMXyWKw^HmߏYeۏq߅}tۿNL~*~.<+um_B"l@m}7~?3H`?}OW}q Ǫ«Xo>~*;.+e;Fow}q Ǯ»cdI-/NUK.<+e{Foܼt8DVY{\{qsBoT!စ,n<+e.)v8VcwQ_,7jO XeI߅'}lkew~?3H`?}ҝR;$s `O_'߯ Xe5߅|t积|q ǘcX*-_AXo~gP*)%|mFy_$ʮK / `ɮOsW7ْ/M|dӿ>nq!$ʪsKÏ? Է|@*㺆~6ދ,HqOH>4Q/{%`=L_ַC}}?}?Ow_ٷ.X϶{;G~/Ņ?Α;9y,rqOs=NISW`r$)rp{I} *r~P*-%|;Gr:9_<`N|}{>Ez%6 f{x a 3]}l|-A}?WCwV/?~C>_!$(ĊT| \'plX&$^W7\$O!^wf/pE7HDn>w%._fSx I bo>w%.f+x- jTԟz+z$Ыqw\Ο !Jwm%i%)SkW,/p-?mO]gxkVF+q[lXVx`bvr*6pb$xo~'c,÷G. *k|,.IyϜ\&ϸNoq=uu&lXF$xgz`O]I_g[x"  7Xz%8[p 1&apo 87~m!ו֧vwNW*_<`d~kh KlX@$D$lXE$ D'T}  `$\Ec.Yoy`<`fk`O`WX0EHb5~lv֧l:Xl$D;vk),1[II0я`T }  `$,\i| _ Ifo<: })",0Uzk Io?~(Zd~^>lkXm$;-18zc>D>o+oo  8S{k~HP*)!\; _$oТW$'hg̒3_O __fE#bnxMrOw?}gF aa^7\÷t0 U!ֆפ6يg:Tֆ|E TT$2?_ߠo0|m /_;?˿v} $o $xz&Kt୏65?Ϙ^Focqsz ?CqE^cnxMrSEo,n>w5_fx IK7_/?_0?sPx?~{'*o5~篔\ͧzn_}~nPp} ޖ]B!sdVqX^<< ;8|  \T Okf0"h"؅0# #oq|Km[4lOrƍ]>7fx+#Җ^o;3zr{udR'^cx:4o|A-Y,Gf 4|5 ZT@KDbW%ՇlXТ&`e2ubɎReb<`:e.mc xg l( Ljc+ƈ>6>/? ,G[7N 'S( }U3dsX1}`6Y,0Y\e[~_lX`¸ @x}CM`L4;<}/oMdA4^cxŦK 1vSn044?BM5fTϭ1gĬYwj7 ~iߖ=}V?g3wAL4`9:@ !yƞ=w_?c̾=-9jǼ|[ O1E!8l\)޶'1 U!W O1ac<`^aIpߞ}`6o,p0o< p5099^1r<O_,cAט:^1u< p:sX`6x,pQ :h$o?137AA=;8|M[TOrE綱" lX,`y\ 7rl~+r:E.'%p#GZ}w8$WqF^1dBCl&L#o^ _v2ΠUkl'NP$>Ć Ip>\ ρdׇٖ2E}rn-xCU$AĨQytDsw3Hv[8͢"2 U,"fW.ϳKDoGeAxD /^gŇo~zg*&+%2qn+ ~|g*.+Ɨ%:qnuַ ?3Hv)_/}!>D_I` z^1]qzsYA7]Y%\o #Hp R Axuh-/G !FKzt a˷&3HUKE%!R o)0DXX^2"_?_1t^/]:35+VK2?y\;#~*9NUwT_ݑ^1S]◉ ?⧪qIHLU.KwH^5 U"Ϳ1N 5!1#_7fxbU:b߭O?2d@so;ijAb+ 4lx,snzm8,l-bv.qFHڴf >O(9lwl{M+l? [T[QogpFa{L+l3 [أ < \ᎍ1=G6[p [Qogpvڞ# m8V0-73a3c#Wʴf `A s@ ]ܞ3 8VP-73aCCߞ# m 8V-7H3aCKa/ %l~g*kmo[-oP [Ao7 ڈn%6ұiABNo]|x{NG+bVE,}bk[٦V|/J YH+ ne|)MIY)P3`6,f 3C3c{sZ1u`6,fQ3C3c#3]`,f 3C3cW"kϊ/ah<`1"qdJR\xV| AYAoPEwfsY0+8bV@oAg)ژ6--hB2H@lAoGe6fυgB2h@ AoFi5OA YEbz4,-%hA"X@,AoFŗ?3Hd ) ">Tn7q A/G:[_<4 U 7$Ro~g*}d3Hd5 628@4ΠUR[LAoFe?{\@Xe z>lgIgEgx"w#IJݟ\易qI EdXW3 U6 >D?Xe >@{d?3Hd?&7p!c1Vc8DVYcy g`[< Ye >[O< Ye 628--< Y%cY*68DVcyܱ,f of_gxBWȲo\lw3Hd?7ȲoL˿_{$kԐ}d o~g*?o?CFo= Ye Z>[_3 UXv nK@'O9Xe) j>m_v3 UVnޠflwb]v3U[l7o3OǛqIx)c.gߤ~1+d?[nCGE߉8Xe wap*||<*o~G*8oP7Hu΂/Mg<`yo ˎgoOX66$;lXĢ@xX/?~̷َ3E ?3=`6,ff<,Bus|h -7(O@tF#Hf 3v{|#m5Y40C3e`Ҍ,fQW<,}| 3Y(0C ǔ#Hfe 3P:>Eo2YEby: 33E1YEby. 3OPu_3 UD 7hO@ ᛀaJy z3nu~g**g ܠ잋 e<`A.h7h*ˀ]$ h(7h=÷3Hh 3 ×?Hd r3PB2N U\ ֕7 C =|8DVQU .< Ug -e@"@l)oo~K =`yAooeAh@,(oa5FYo61?#(bp">14e|$>` JoϝcEaIE` ٹF*loP?~ {8$VcxܯO ~(7$}}b@~AlbA';Bq>1$T{}b/w~AOA'MbAGA& 1v5w~?A#(bp"w~hĒ~w~8#Hb?ֆ7HĒ;? UvޠKvm=aA'AS'vaA AE'n`AA9'f`AA,'3ٗi`A1 4A,W/C8$Vc(xSd_oXac#xW`J Oމ vwH;18DVXUx,YWcd֏3HdY]eȲ/k'q1 $Y7{0 =w ~v^w?3Hd)]Ȳş}s7 YacxWlg8DVXUx,[ه<7{/ v=w v^w?3Hd?wȒﲱ˿_Jw]UĒc[Yw#Hb?VwUKv-e+lXꯪb꿱$%F.-_/ UUw@,Y768$VcwWdXe폹]~Ēc+l~?#Hb?~wKm_/ UUw@,YwvK_$K*rdId_B1~XUw,Yo؟/~*,;`, b?XK_A,1X+_A,X _A,1X c#Hb?6~wK/~G*L*; , _/ UXUw@,Y#_A1/'~o~GP*}=}wK[~G*;; }ٷ,bqW}˾5}qIǾbMٷ/ UvUw@ w}k|_Xe}]}p_;$eg~G*;; mq_A1Xr[7;$۾jrbIwm+þ[!Jwq]}̒{ӭ~#Hb?}wKO6,bqWi$K/ UXUw@,)ҭ~?#Hb?}wí[o}qǰ¾dIvm}qǰ¾dIӗK˾8DVYcwWenIo}qIDzʾbIٗ/}qIDzʾXVe$w˾8"V)컫;%پk_$˾*ڿ[!+klXگ¾bYƋ]VXea]}Ē%}w#Hb?}wUK^d;/ UUw,Y+컿-_A"廫Yd)_A"1廫Yt'~3Hd?|wU .ew|qǎ:YR!c[Y7?3(d3eֲ~g*/peB6 YUw,ٛ/ UvUw@, / Ye]|Ȓa˿$ %š{ߋ3Hd?{w Ke Ye]{Ȓ)28DVYcwWd_v/~g*lˑ%F?˿_Jw]{p͸l/ UvUw@ wNߌ11mX\Uw@ WNߌ;Xe]{pn^A"1׻\7d_\/ UVUw W2T~g**;@ }.W?׋3Hd?zw ]> Ye޽œd"^/ UV˽^<@Ʈ Y%ػ`^2&~w8DVcw/{L?ٻ^A",1ٻx=OXe޽œwb8?ٻ^A1ٻxN>${9ً'J'{w?ً#Hb?&{rOމ-O~G*Ld/'{qId^N;1~G*kLd/;؅2ٻ^A!4{^<@Ʈݏ Ye޽œdl𫽻_${ڋ'Ș[ݯXe޽\œMv5?ۻ^A"1ۻx]${ۋ'賿^A"l1ܻýxɒ_r/ UVX^<@lO~g*Lt/| c{w݋3Hdvo/{}ݏ ;"{qx/| #ݏv?ދ3Hdxo/{y~^A"+l={{9ދ'+fݏ Ya1^<@F^1~g ^2r!{qx/#c{$cxrۯ>"xo8DV{rO>WL{~g*rO>WLz/ΠU={{ދ'+~g*rO>~g*rO>%v?3Hd?|{9'ؒ|_$ \œwdl /Xe^.;1M'|$œwdtw?#Hb?&|{9'vw~g*lrO>ov3Hd?6|{'~gP* œdl / Ye^.2 '|qDŽo/'|o8DVc÷x~ķ_A"1_~gq1;evx ෇q"=e{x ᆍ]e [Eb W_!$ q16_"$q%!Fӷqc8V#2F<8#$q=1k&q8V$I<Ɩʣ&~g*]CXV~qbAb(Bw'cKaa($"@q1D~bAb(Bw)cK?wqIbSexL-1mn?UT1 U!L%@׊_+$ V|ZS#pHAwjDY|bAR+Ňl%1~8V#v-cKaem>v᷋q Gl]<Ɩ>| [A/>dx-}Ƈ0$ a|Ȇ["+xwc3HlA8b1DVo~g pĖ![cl!·3>1 =CEX'i|McAb8Bli<Ėtoؘ$] [k|Į!cl$ ᷍m3HlKmC2K`n?o#HjIyCPO~g*LJL$tuï~G*+LJ#t^ᗎt#HjECP:{/cLJ;$!!ccjhOl!cAbB,x<Ɔp.ï [b1646v/~g*LJ,%6ï [~|!clh7l좑_@>2 U !Y@cCCac Wq| [[vᗐq|[vאq|[_D>"2 U!YDSK}-ȇ_E$#*!cj}#~G*ȇ #"Q|mdARBl#!ClI#~#8Vi$|F Nwqb|N V᷒qb|V [^qb|^ f7qb|f]|dAb(B&<Ɔp|dAb8Bl'<Ɩ93HlI~2~`{o ~@g*Ke^j(6G;Q$#ĈRDO?7Wq|TQllk3ʇQ$#ČRFO?(~Gg*;Ke<Ʈ!) [bHx)/~HG*CK!e<}nK|%/) [|ĒRIO?O)~Jg*SK)e<|-eAbHBl)/?ǔq" 1|Sl%)~Mg*kK5e<?|9eAbHB)/3HlI=㥞2~`c@q" 1|Tlt%/* [EbQx蛤~R8VT>^J*6G73(lKMe^j+6Ǖqb 1|Wlloʇ_WJ]u㥺2~`c{W>2 U,!敏x]ʇW$%ľR_O?~`8VX>^ ,6e|eAbXB,,/ X>2 U,!&xYX>2 U,!6x޵o,~cg*Ke<,o,~cg*Ke^j,;67#(jKe<}~7qI|Xj͏,~dg*#Ke<ƌԯ,~eg*+Ke<ƌ,~fg*3Ke<ƌ,~fg*3Ke<ƌ,~fg*3Kel82 <Ө(sfo~BG pƄi$9ح7N#Hf8c?4ɜYi7N?#Hf8c<4ɜY^_N$|d,v&YΘM>l2gxf{7qɬ|d,)&/g=&Y%|`i9N6Z2 U< ֒O̙%p6|m%Y̙%pqɬ1|d,?#Hf$sflmdA2x@$F$3K>1g:/շ?{#Hfsfhq cAB@FCCٽ4՗x#Hf(sf(bˀ;$ i)v|֍͗?w3(hsǧ;Xˀ_;$ iԎ9DVv3|m Zu̡%2o~g*6KǧQ:XZs3Hhsh^_9$iT9Vvso ZEb4Z&> _8$i9L苧/~G*BƧ7P]m}8dV7>1elw_1Ug,F٘3CoJۀ5$ Ĭid93ƞbx̗٦1E0Ɯ@okw_1 Ud O,7;3 '_k6$lX`WF:b<`Q+?6.}vs>J6).(??Yڷ.^<۹ ER,pqJoO_g;x}ρ;8zTpT|bx SX[8WiU|bxܷ1|JKp?[+wX}{7B@+wpLџ2ob<`9pݧKlX`xܷ1YJKp'V.zVe#|s \4ρ̡q b\|bx\f.7]CHps߀ ;eOpl鷋q ]|bx~`Nx +l~P*3Ol`˜a(ca],l]<-3zw)H,0.h .SXb}a],l]<-~ lXآ-`x[ &OAbwv1EWv o b<`al',,zt>%6fx=/~1E8gBx~6j'Vm` B]>0 f{x{']`pRc`~'P*3OL???ᇯ1Ǻ.sx_!E_`bTL@ApybE7BRC,X2~"ă"[kŊ/0X6>1lEEQx !)V|"vO@A>E_/`I1{|b`7+sXQm++'V_O|.+|bE>b( 3Y'NJo$0X1H>Et;E/^>E_S`I)1|b2N"ȂP!JC /Pe}c廋_U!$ŊĪU(f}9(CHw;/Pe׻.]2!)V%O,/@1sAwŌCHw-[/P܅ů3b]b: SwW#.]^3!)V%O5@1uz5/8b]bĂ SwW#.]3!)V%6Ol:@1s~Oů<b]Xy\N\ӹlw3!(b?])k:כ._!$ł\}a l|Vmw!$ł\ }alfעqI.WE_X~b.qrhBR,_ƮF\o\~Q rŢE(fכ.ߘ!$ł\1}acl|Wz8Xp+V/N@1s}z;8Xp+v/P@1uvez8XqXL]N\.~P++/lU@1uvejjBRKW_X~b.V}w!$ŊĞ=(®]wpCHw /PL݅ݕjkBRKl^_ؼ~b.Wů`b]b SwawqI.}aF|wK8XqXʾ]XjlBRKlg_~b.bp5]6!)V%ִ/i)cSdϋ.~_P+}+/k@1uvknb]bp Swa9(CHw /PL݅w?ɍCHwI /PL݅wэCHw /PL݅w?ڍCHw /PL݅Gq .1}aлy.0XQXL] W?CHu 3/Pԥˋ.~+vv꫋!J! C/Po^epBRK,_Xb.}^|+bE]b*T 3u9W.~<+_A_]V_]8!)V%/̉@1S Z}u8XQ00L]N!$Ŋ(fr]wwACHw /P.~+V_NZ}w38Xq)0S^uHoqmrBQt˯-[Et||wC8Xq20dEt6zΕ+b]b² ]~ۈkOb]b ]~Ãkob]b ])7]:!)V%/@e|růb]b: ]7]\:!)V%/̥@e| pb]b@€ 3w_|w8XqT0^NFᄏuBQD֯Y0]6v]:!)V%f/̮@1s5纺 !)V%/ @1s~6b/b]b2 3w_}w8XqXm]ѻ.~+W(Bߏ}w8Xq}hB1uFqI.|b.KC.~+sW(QmxBRKl_ _Eի!J(+Swbůb]ztNK*,]hBB1uߓ!$ŊĞE{}w8Xqh\B1uK/b]bi ]X꾻yBRK_4;_ bob]b ].~+ W(lBv]>=!)V%/ڧ/P\"{>|ws8X_1W\}"ƣị_!$ŊzE.*^υzEwBRK_4f_uqI.mѶ}"ƣị!$ŊES.76c..0Xq# d_rȮb].P"˝"]]`I.GtHſBN];|w9|w!$Ŋ] ]urCHw9@TX}rC(pPLea[ !)VQW(*,] * ]ub].b...0Xq3 D_ !)VQW(BozrCHw9@Tb].b.􆪧..0Xq3 D_+rEw )MPE1 D_ !)VQW(B?xOYw.b...0Xq+ D_J{rCHw@TД'(CHw@T]|w|w!$Ŋ\] * ]w.].]`I.WtʿB1s~wwBRPe;^\⼻gwy'QLNq'$bCcb?]zP~LbQt%BRwۡ%R4wIAȯ}LbQt%BRwۡ5R4wIA_]>&( !)λ)~$xW#>&( !)λ)~$uxW#>&( !)λP?]zPl.*s(⧹KXX]wIv?]zP$׺?&( !)λ)~$H1EudI.- D_ux}LPl"(Fw+3w9ɧ>&(CHwi] * ]΃.OYw.b. |w!$Ŋ.~F0ktqgo`U ůn@--z K'F"; VEg|`tSX}_!+L[ӏ),`UZtW Jr?),`SZW Jr/),`Q(/y'\yy . F?p|`֞]]OwBUYw;k|LaP+^D/`|`֜}'!,I _%:N}'Y|'!,I _%:ή.,,`I$PLdž,`I$PLbIIpE$KtW fNr+ $$8"Xq%: 3'9蕅wwB8E8+;; !`t(W fNrk3$$8"Xq5: 3'9HOc $8"Xq5: 3'9赙wwB8*U1EwB8 U;; VdN*IwwB8U䎧SX}'!I&c;ݼφP+NF'hޏ Nr2/^}'{`I$!u'>Nb!Bv(:D~L0s~cgC(' ~INzm&4AIpE$[t`$'6Nb!lI&c;ݶφP+NE'hۏ fNrk3$v>B8dk?&9I7wi VdN2Ѵ̜$ߑ"; VdN2ѳ̜$퀏),`I$-1INr),`I$!a#0}'`a;da?&: )}LaP+NZAIpE${tv`${%}'`I$1I6N;ݬφP+NG'h֏ NBjSX}'!I&zcwU VdN2ѪLdgwIN}6"Xq=:D~L0u]}'`I$1I觀wI>}6"XqdO?$;ݦφ mۡ$m1Iv$wK VG'$8tI"8$p"dI?&: $zgC('I&zcI$v>B8IN2ѢLd7龔!l "%=JD~0VbW)Šh%1J.z{ݠP +^ңL4 s/.v7@V̤G3(Џfr]&v>C1d??d2;|;a>;d>?fu1;|?aOB{0bo(8bX1#Dy~07bwbw1ÊQ&c\t>|KaRh)1R/(vp>A8e"8?: +φP+rDE͏ r_P|6"X# Dh~L0zbG!QO&"cė;0 Vr2LwR髉φ qۡ&q1TMN_L|6"XLń~M,DA_KpE%gԒ`%kb/%vP>BHd"(?&J.s1lE$gT`$'ۨOI|6"Xq3:DH~L0um"; VN2LdNrNb!I&c+ $v<>B8d"?&:IAIp|6"Xq+:D8~H0ҷ>/Ih|6 XE'Ə Nrw; V$93'mB,^P+NrE'ŏ fNr\ءlE$WtP`$m;φP+NrE'ď fNr\؁lE$Wt@`$m;φP+NrE'Ï fNr[:^alE$Wt0`$ \QlE$Wt(`$m\AlE$-D~DA6ڛ$͏'C `?Iq }N|2"XpCm"?&: h xAvdE$-FD~L0uv[f;I`IZ `$&Hvߓ!o1IMڛ$'C('i1&c 7I}OP NbMDS'iSvߓ!|o1Imڛ$͏'C('i1&bc,tdE$1&BCINm3w? !V"-FD}L0u\ow? V$D}L0u!.NC('q6wL5I{2"Xqvovyd_zo~ؽadE$1>)쎏 $~=B8I O dW{`Ibؽ}R {`Ibؽ}R }'`Ibؽ}R f|'`Ibؽ}R ݛvO+a8-?{2"Xqvovy'A?{2"Xqvovy'Ȝ7? V$'qaݓ!İ{;>;Aaݓ!İ{;>;Aaݓ!İ{;>;AaOY'[ O ی$~=B8I O ی$~=B8I O dیvo~=B[ O <oh7?{2"Xqvovy'Ȯaݓ!İ{;>;AQaݓ!İ{;>;AQaݓ!İ{;>;AQaݓ!İ{;>;Av}7? V$'q }7? V$'q }w? V$'qٍvo~=B8I O d~ؽadAvo1>)쎏Naݓ!İ{;>;Avu7? V$'q m7? V$'qڹ\ v'C('aIaw|aݓ!İ{;>΃ vo~=B8I O df{`Ibؽ}R }'`Ibؽ}RA_ݛvOP+N8kvo~=B[ O dvo~=B8I O dvo~=B8I O d{`Ibؽ}R >ݛvOP+N8N?{2"Xqvovy'H_}'`Ibؽ}R }-'C('aIaw|ww? V$'q}Xvo~=B8I O >7? !V-'q A?{2"Xqdu*N,I>)쎏 k3~ؽadE$1>)쎏 H,aݓ!İ{;>;AZwݛuOP+N퓺8tϺ'C('YIYw|;o3QdE$1>)ꎏNyto~=B8ILOJ<;Aݓ!Ġ{;>΃ƾܛsO+9sr8FܛsOP+Ncb8;+SO'C(')I)w|;}ž!dE$1>)䎏N~ƽdE$1>)㎏ ѿbI{2"Xqqoqy'>ywܛqOP+N;:8;ۨ{;`Ibǽ}R {7 V$v'uq bI{2"Xqqoqy'6j{2 X鸷qoqy'ȶ{2"Xqqoqyl;'C('Iw|wqo~=B8I츷Odqo~=B8I츷Odwܓ!Ď{;>;AQwܓ!Ď{;>;AQwܓ!Ď{;>;ANwܓ!Ď{;>;ANwܓ!ĎL$[W wq# !΀sOWOVSjr0g4Y/Փ+gmEwgܻq_,f3(s&q~}"q̸;ϙ#'3ϸ/P3N^q9`$~ƽ`I0ދ2b A0ppE w3 Fw%`}5y$ݛo/P3N Qp9`t-o/P3N Qp9wlp~}"ql _gDݢ/C h+AIhv_'xpNC0?wAwZB8 FNjw$ F!.NBKH'xqN7I .NBKH'xqNC >AIh I0$q/"_ ." FwX!q%L}`}'NA `I0>^Dܿd'ܢk1DAIh I0$q/" |F!: .NBKH'xqN7JwAwZB8 FNjw+'ѯ;q%$`}'r 输w^B8 FNjw+'ᝅ;q%$`}'r输w^B8 FNjw+'؎;q%$`}%<8|'#"N2ď`I0>^Dܿ\:I3"$$qNwď`I0>^Dܿ\:Iw?KH'xqNp$O};q%$`}'tgď`I0>^Dܿ\:ď`I0>^Dܿ\:IT w?KH'xqNp$ oR_J;o!f+E+EAwJ;of23E;•|FG[H-xqp%љB%D !W^A]w_L;o!fKE;•|FW7?[H3xrpe&#W?[H5xsp&쾛5wB"̸ Njw+7ٷ=͊ݷkH;xspe'_'~Н3zA"JO>ÿd_O;o!fE+EA!IwB!$&Njw+= #O`NNh$PE,('/ $ Pw?KH7xtNp&G<>|5$QLIWjr^ᛉt%$`}H'2G _L;/! fE;=Z'y I0%t/ ]÷?KH+xtNpe%GO`FJ0>^$ݿ\$N3$~ҝP3II"IW;H%xQtp$Qw@]3JERI8}%$QLIJx+t%$`}H'T=zO`FI0>^$ݿ\*IxO`FI0>^$ݿ\*IxO`FI0>^$ݿ\)u_I;/! fE; W?KH%xtJptM0+|%"ILIWJr7.I;/! fE;=+ ; -! fE;ፅw?KH'xtNp$ww?KH'xtNp$ww?KH'xtNp$ww?KH'xtNp$ww?KH'xtNp$ww?KH'xtNp$w.I;/! fE+E7;t%L}`}H't;:ܾIw^B8 &NjwK' I$$qLINrGNrN'y I0$t/ O`I0>^$ݿ\Jo`I>^4_!\0pMۗ?KH)xu ~įaJ>^TOQ}-D̺YwpwoK;/!&dǮ!Ol1;/!,"D \IdD0@R+8Xvm5%$„v_•\dDp@zäE-'w%$„w_ed l;;/!&dǺ..EddГ`ԓ}sey 0';wp'--(x-$Äx_4åʶ~䝗3E;E7/yů ac}Qy!ow^B" fwp)(ѧ2w aFP KA>ow^B" wp)(KHA..%hy 0#(z_¥D_;7O;/!f[ֻ@)[H?..dDm}aO K?Wx/aFP(gH? |-L}.. e\;y{ůaFQ KEWVtCQh 0(}_tå+K_~-$Ì`}Q~ 2"kw^B"H wp))/Z~}$Dl/RRy 0#)_¥Dig (o !:ʋ@t=w?KHE"..e ~3E;u>i~P3@wx^B" xp'~~DL/ROߧ7y 0c'؀_4¥ڏ~3vE^ \I􋅻_ OjN&5,,IbD>е{;T!|k'TIh'EŠaa!e*~ !IQ*~1h" };S%$ŒtTbD!vbKH;h'EŠ0<;UI"yIQ*~1h"NC·vHşIQ*~1AxD;_O&_LJ*o$< (4FT<>T!|k'TIh'EŠa !a!e*~ !IQ*~1h"΅v*D*$TbD!vbKH;h'EŠaqu;UI"yIQ*~1h" vbKH;h'EŠ^N|;S%$Œ TbD j [;I_;IQ*~1AwbT BTbЃ0td;UI"yIQ*~1h">b [;I?OB;)J/MNC·vHvR_ zF R<>T|+'RI('EŠ` a!e)~ !IQ)~1h".C·r(rRT_ #KP$J'&dm [9I?OB9)*/MЗXB"ɁrRT_ c]LJ /K'XQNJA YBR BJNhDݨ9|9 [9'XQNJAat.KP$J'&\h [;I?OB;)*/Mѹ.C·v(vRT_ s]LJ*o$Q< 4FR<>T!|k'RIh'EŠaqv)D)$Rbv vbKH;9NJAatEKPe)~ !IQ)~1h".'v)D)$RbD]NR<>T!|k'RIh'EŠ0Sc [;I?OB;)*/MѝUIyIQ)~1h"KP$J'[t.C·v(vRT_ ;5v)D)$RbDfKP$J'-C./3vr~#=BhR BRbЃ0l]LJ*o$Q< 4FR<>T!|k'RIh'EŠ0"ۥx|BNϓNJAat.C·v(vRT_ C]LJ*o$Q<  ˉo'v)~D 4NRb 0c'IQ)~1h" /'ةaN.TbD^N|;S%$Œh'EŠ0ةx|@2x(4F7T<>T!|k'TIh'EŠ0o [;I?OB;)J/Mэ;UI"yIQ*~1h"n۩x|BNϓNRA#:Z۩x|BNϓNRA!v*D*$TbDT<>T!|k'TIh'EŠ0:Z۩x|BNϓNRAaxN/va*~J0X7?K Ml~*~SD S[U*Ml~*~SD S[U*Ml~*~SD S[U*Ml~*~SD S[U*=%m~*~SD S[U*= -'_$lXߪJ<7#ziK_%$„lXߪJ>_Gh /#ߜ4"_r<_Dh /#"ߜ(5#߃-L~=BxϷZB7w|E?LvW|%$w`~s oxqtW|%$q`}s ><5h /}ߜǖ-z[-!e,S|WVѣP|[$ loN][YFAKHxTd+^F19}wo|Q ,oN][4[?8;oeF7'C/dt1;o!e{sWV +zd^F209)wEo%{hhݗ ?KHxDd졡u_2|;/!e$훓oWVWtGy I/cXnߜr=7y /clߜf=uy /cXkߜZOHv3R;!e<KSjW}+ė1 oN]['oy /Sh߰о9vo|k]ï_5ξ9uvo|чέ+|l_F6̾9evo)|n _7*;!etSeWqoAvB7'Ȯ-} ?7|[켅 loN][ƹ?VAkH|tq7;`5$s`}s 9_99uogMmy /^ߜO|ѩo _aw}s 9oO^F909uEoQbx;A[HzqDum^F809uEo-C/~d2͉+zk}꼅oN_] ㎄co_F89mu/;nwy /#Uߜ^8|꼆ėloNS] # S5$p`O}szߢ>Ek(|-i+|p'!8:!e@8`;| ['XP8E{~;2i+x+8Z_M%$n`5}s J73|m^69toegN{~)2)+x+8{7 KHxF4iׅ3::/!e<SGWVqfatBh7'.-w7y E/D߰9MtEoezQq;}{輆ė oN][Yo|Q{!e<[BWV.7 kH|ti)y7y /@ߜ·rKo~א2+|KnΟos^C7}| }ï^7z9soWx}^7w9soW_:%$n`|sJޢq[tŽ|缄io8ߜƹ +'/~ޜ2yɛ+z+ٸO]+W|ՠ%$j`|s1Q6}۠%$m`|s/R_OZBf7'kn\YGk^OwZB8V7jn\n| >|v`F;0j9Qsgp#<}|aF>0j9Qs p+|aFA0j9Qs p?>B_Dh 0#"5ߜp4Fw_6B?j[(Q͉[?7$DqoNB֢TfB[H3D-K3i펮'&~՜א 3nUͩ[ n!nGy I0&5ߜEp&=7軉4%$`|su#zn'y I0&4ߜEp&Gn_M9/! fS4.$7?hKH3-K3ygKH 1i3oN s&s%ϙ ?"!/9?Vke{Is漅D9-K/#务-&d=-K1=ɜy 0!& [ ba/[M_45$Ä4,7hn1\ɇapIs^C2LIäyså|￷_4?jkH =i5oNb.[-(ͯaBPV͛S5;W(헭(ϚaBQf͛5cQYsB"8 f͛5w.7m-akްkޜpm)}6)~؜א 3a-kMW߹rZC2h ͛S6G)~ڜא 3i-y 0)6oNbhJm5ŏaFS0nܸdhJ#m5oaFSqƹdhJp msB"X Λ:ז!y I0(:on\\:JR+<%$`sEp]=?aŏ`&z0z$#:6_O9/! f-KyHЗ?KH9ysກ&~3j 6%\᝚曉_B-$Œ` %tpi&Wxby 0#&Con]"\ާiUtB"x Vћ[E^ri%~3^m%¥\]拉_H-$Œ`!tp)&a5LN:o!f;+X3쾛t^C1қ[K na;쾝t^C2 6ӛL va,rw-,'n9]2\ɵy 0c(Pon@]2 }E;꼆dQ7.r˾5u^C28 ԛ[S Gt_R:!f$͍K\ѻ'ݷkHKzsa`)WkX5$Ì``u0Д)~d3FeiKY%LgaguIp-)dy I0(Zonj]\+JW}Ay[['XQPں$\`FO0$ғE7k/'~t3rF%7.`FM0$R@u^B̈ כ^Wb{:k_%$`~uIp%=/`FJ$Ev^B8 F؛aW%%#;a%LavIp$=p;b%$`-vIp$=`!ؿm`D'q{IMv^B8 6ٛdNNwy I0$eon]\:Ny I0$fon]\:Ny I0$gon]\:IwKH'B{s I<;i%$`vIp$g:;i%$`vEpkQwv^B̤ڛjNrEwIZ;/! f@'9Ly*o`D'qI v^B8 vۛmN~ď`I0x$rWwNy I0$Xpon]\9߫;|'3$q̸77. dDavNy I0$ron]\9QAw^B8 ݛtWN2o,Qw^B8 FݛuWeq5~ٝP3ee%•|F^wVy 0c%Xwon]"\Yb;AJ A7. dwOJ;/! fmK++ӷ?KH+{s3Jso%~靗3V%\o%~읗3V%\o%~񝗐3V%E?}+$$̾77. do%~3Ve~!|)" 7 77/ dBx^B8 FWN)})y'XQJR<at[oaJߊZ<atc͏aFK0ߊb<atkͯaKߊj<&{aLߊz< |dq · <0:[Ey 0c'XoEExaxOaO0 ߊ<d7߄5La5yƏ7? kHG(|+? _o~א 3UVT9FW_5$Ì`Uy{~]x^C2h v[QLay 0)oEax0? 4;/! f(s&uϿ?KH'(ʿ{~?>;/! f(s~xgDw?KH'(ʿI0=߇-$Œ`}yD Su`IlNwwA^zoK+NbKw*&{w]"%XqzoS]7 ϼ7y%R';e&E7y%R';EYQX{w]"%XqyoS]%|N#DJ$6~Ȼ;ëS3. Aicfl3Z ~;Y58fvg.=cE@6Hv32 }ǯ?ogeeo(8UoNfm!acMr\tFܹM.Lڄdm":%xx\HU][.!oriI&ҌSLΚ$M":+#xd\HU=†ƛs=b"xZ\HU-ś䵟s-bJ:%RrUQ&Q'\_sq]"%Wuo~Bu0;)C؂xrCDQֹCh.: 7)g?!:DxS[DJ$̾Eg%w%2r2YNrCDrWRpUq&y'\_~h;l:7b?A:EZ7)b?aZċ]􅧃{)GxvGEw$x[HUM&4sM.~po]#eWu n~u`nSݺE6$X/t' -RtU&'\X0r;P8n t7IT?@'otKxNܺFN0;~w%yqAn]#eWu n~w%q5RvU9&A'|X+w 5RvU!&)'|X+w 5RvU &'|X+w 5RvU&'|dSn:n7N?A;E˝u])lnIp :)?X[Na;MJݿӟ96G'{i5MiR[MjwJ[X?_9Cfg^W`뼣K$ta[,H 6 ^E]"VEt~͑@G;ņAHt4as-8]"VHu~QSlXt[CmK6+MDSjXtZ=mK7__qtv]]"WHu~yHZ&)BiuCp%Zu K.+溍^w>?B;Y]"WۺR{~NW  O\JuCp0#Wli;?)>*)8 O:YeCp4#Nc)9?i>)8 O:YmCp8qpVu r j]"%Wu۠aWA'u \5Am jttuԺC j6A5?5:'JA<-P&g ",Pr3ZsO)AtӄӺDJj>4!~m: u\ l{iBt/O)Atӄ}N)AtӄGu\U ltitGu\lti΋N_'2ptF 8u\lqitd ׇi>itd'ޚRpU{ 8^%RrU{ 9a;ӺDJj34!~}:؜xfZHUf{&/P%L)=t+ӄ 0fsr}i]"%WadsBq}i!WabWu \/m_}i utAҺC 6.ø4CxыNqxLC&\..<,Ka= Kr@os\ xVZHUf{&\o`@. J0*MȹtqMi]"%W۔ڔo_g} D'yMGwMG _(#W䣟 wY Uy Ew E_/__KxqmȌk^fEڋdO Ykv| ;x+Z7H޵tk}h/?/A\_܂}n_Ǣu[>4??8VFD3{Ѻ@wr/_?Eu:!g\!8lD FD?' .98,D fD?'/p7a-Rr6}h*99 >tF n+wrrt\[>|&\":>9 EJ 6}h.9E~> 8%2p\asч梟OEq Wh@.h.8G^kg:i.Z8~Ӈ+$y,\x.ZHUE?,x,\x.ZHUE?Cx&p{h]"W>4 ku\El.\3pl0`3r;,ѣD/F)D'+Rn{CϸEWWn<K*`ч&s!pѺD b6}h28Vn<K*`ч&sa΁WnK*`ч6sa;XWn[*`чVj\txظ=lnd>4k6n[*`чvsa;r5h@=h89#:nx9ZHU-G?#vD֍OG)?tg|uѺD }h;8dѺD 6}h<8G)?xg\3<K*`чƣsaOH>x.胍G~Nࢣǣu \%}xg\{{ttع=zn؃GZ~FεG.tFۃl؃G~FεGLJoH)=~g\{{tع=n؃ H~FεGƺs}i"%W>4 G;ސ%Rp}C=\ع?nGڏ~F"7u\E l?~3r@DcҺEJb}h?9MHE7u rV!Y7u\E!l?~3rBمq%RpCѢC ҺD "}h=8W Z&u\l4+-޸@nG~F^Ho\ x@ZHUƣG?# DÓ9.< [*aчƣ~7:IѺDN8ڎ~u\EՇ>2X;ׇϗf pV =zPѹ?zn-GZ~F5ףu\E l9r3r@# G)@rg\Q\ x=ZHU–-G?# DGѺEJ"}h99W zU=:^-RrCȹѣѹ@zn-GZ~DN䢷 G8@@h98_ w G)@rg|wYq%RpCq\ x4/I.<[*aч"|2ǣu\E l8p3r@_g=?v.Fڍ~۬ގ%Rp}C~ѺD b}h78MGHNnKddg\{zr{h]"Wۍ> kGtT Bg=)=ng\{8":Wt |rwh"%Wq[>gT;N.[*`чVs '-Rr{Cяi9M.: >vnDvs -RrCȹp"tF l G~F+2G)Apg\8"Bxn( G~FU3:Bv.(Fڍ~WlѺD b6}h68 S.&K*ak֤҇". OL)>61}jb 8 /_N%p:-ܔ=7vu[N>Gis-,ٞ)v"%WpVϹ괎gO-Rrw8mvNM.8;ywi"%WpvϹEߍ;ywi"%WvϹ#wu\N۝>:&zɻӺEJNsiɅNޝ-Rr8mwN`8ywZHUvϹ䢳>yxZUӧ Osi<<}.( OsiD퟼<}n(-OsiɅ\!xzZHU¦Ϲ"铷u\E!l{kOM.hǧu\E!l|OM.~ӺEJ>}էuMn \!x~ZHUϹEOK;yi"%WQ۟>:~ \!xZHUϹc+O?[d*Ϲc+O?[*a\ZorѱOޟ-Rrs?or5&>y~ZHUϹEO?yj"%WQ>:~@}n(-PsjɅVmP7uZyj"%WQ>":~Zyj"%WQ>":&=Gu\!lPM.:Gu\!lPM.:Wu\!lP\xIgO-Rrs.Cor+P)B 970>yZHU fϹ [#xj"%W1ۡ>::~B:~B:~O-Rr!s.D7褄O-Rr!s.D7QK'/Q)C9W7Z:OQb:~b:~ Cn8Qs1jEk'QJ5sF7&Qr:עa>yZHUϹa>yZHUϹa>yZHUϹC+W-Rr9s.G7{'QJ=sGorcxAj"%WQ>:~H}"n(-RsEjEV^>yZHUϹ"c+/RH[* a\ZorC"ɋԺEJH}u&]dEu\!l+RM.ē'OR)C$9\ ޤ>yZHU6Ϲ&3a:&&'OS)C49\u\!lKS\OSyZHU¦Ϲ4s:~싧O-Rris.M7Ⱦxmj"%Wqۦ>:~ǩO-Rrqs.NorW%Rpqs.Nop7%Rpqs.Nop7N}:n+e\ZorS 9@Kn tM.}j]"W>ke͋/ާ-RrlS\pS)?\6O}u ._5ק\O}>n8S_s}j&wD S)B<57<ԺEJ6O}uM.zRS)B<5\6u\E!lS\ S_NK*a\ZǿuM^xZUԗS_sujEN}:nS_sujE'%N}:nS_sujE5yuj"%W1[:~k:ԺEJbN}թuMnZB:n(S_sujɅ\!xZHU֩:¿Vaꋇu\E l S7-}xZHU†0Ʌaꋇu\E l S7=wu\lR\H!ޥxZUԗR_s]jEGVޥxZHUv.ksK}.nR_s]jEx]j"%W1ۥ:~0.ŻԺEJbK}uu&}ŻR)A.5ץ\xޥxZHUv.䢛5y]j"%WQۥ:~n]wu\E!lR\xw/ޥ-Rr]kKor.ŻԺEFҥlRM.rޥxZHUv.ɅϻR)C.5ץ\;wu\!lR\t"̳R)B,57)u*3&z+Rۗ&VD:T!9Jl8R)rC,=zUjҌS(T_C!\А9"gbJ"UjҌS(T_C!\ȟ?J r!M.|)C4SUjg&]eUjҌS(T_C!M. WK3rOP~ YR;ϟqxXvnbJ9\/M=R;u*3~pھ4#! Uאu>2~>!>_{2YR;7؊QRCLu7WvHU[R;op=$g-RrV!M.wK3rOХ~ YR;7Hqھ4#T! ]אU.3~n]jҌS(t_CV!\P9!wX S;7 ajg 1vorK3rO~ Y S;7 QSBL\tk:Sۗf*D!L 1vQSCL\t K3rO~ Y S;7"Sۗf:D!L1vorE&/=uB5db*L98Ll8ab*L팿]wvHU1vƿm_Y Sۗ&D:T ?ajҌS(_C!M.:+ajҌS(_C!M.:+ajҌS(_C!M.:+ejҌS(_C!M.:+ejҌS(_C!M.:+ijҌS(_C!\aܦ/=uB5dbM9Ml8ibM䢛pھ4#! m1զv"p8Mm_{v8Sijg~w K3rO~ YJS;7DK3rO~ YJS;7DK3rO~ YJS;7DK3rO~ YJS;ory0.SۗfDL1Uv{#pھ4# eא523~ K3rO ~ YJS;or᧭Mm_{j6kT QiS/M̵u&Zަ^xZH"XrS 7غ6ԺEJmS/smjGަ-RrXlzkSM.ަ-RrXlzkS7 ^xZH bie.Mopq^xZHbie.Mor OS/lqǩu\ lzS\+u\E lzkS\xYǩ-Rrqe.N7 S)@:2W7Yyzuj]"W[^:t>ԺEJbOu&>ԺEFҧ^lzSM.:@>ԺEJbOu&>ԺEJbOu&Zyz}j"%W1ۧ^:~O>nS/s}jE׃yz}j"%WQۧ^:~n}u\E!lzSM.ާ-Rr}eOor!82.-S/sej >0. S/saj ?aꅇu\%L02\tN S)@02\tN S)A02+ԺEJb6L̅u&} S)A027-Rrae.L7^xZHU †0 w ~A0n S/sajEyzaj"%WQ^a?_1bIĺG e݇ERa.Wrnx-W/r5bzEkѹu]+lz;+Z΍^[*^a˰^ع^Ztn|pj"eW ۯ^j֢`[*^a ˰`ع^?^ֺEʮa ք[|ɽWu]b؊2X#vW8{rk"eW ۱^kg?);OK:Y;+zx=WnxmY/Ö5bz+Nf[*^ak˰fع^q g[*^a{˰gع^q h[*^a˰hع^q i[*^a˰iع^q j[*^a˰jع^q{Z)Wخ2ZvnzŽu]%mش2L[#vWl[xOŽǭu]+lzƭ;+}f?);O:Y;+^kP -RveFWĵnxM\/5byŋ]ŽWu]+lzV;+^, ޹-RveعF<-)7nOK:YSnzvpn"vuq1d>,}r45a&;~1 ܸ=Ǖi[= 46CZ4c<6EJھ0<^2xBj 밐9q(~4ua&s\/:G`Jk`6 _9D9>.O:YV1>G0#ml@_ ٘GT~Z[f23ۺCʮ63ېF+l)b:lCvއQn<;*a30 yi <_̶l6d}>2v3ۺCʮb63ېY,m)]: m3z^jX{rm"WIm6Sې9W|=]ضnҫ؅m6E|mg_~ۺCʮ6ې.n<;*va0 yv#3[o6dEfۺCʮ`oo6b73в ۺDO› 'ؾYl;.O:Yƹ!;W0"X_8so87dEmzܺCʮ6ν ܐѳs)]86sCv]\ ^%RxumX_~;/o?b ;ݘ#=z~YrɐRh kݘ=rՐRn ݘ%b A.CJaaDYL;!ȵCvH v1,ycރl=L;!CvH v1lzcl"DvH v2{cm'l";; Zv1A勇K"*";;@ 6,~S^l3BS3o"c(a3 @Kx\HVĖa 3 C)' )ê*6cӨ?e&<Kjb0zJ-oR8} G;7 RU3m 7x )ê؂6,c蛼턧uaNlN|#9=G~s?Aq"eXHT^"|&2Z7!5&G݄uaMl|#I0"Cn«D&L2y}&Vxs7mr]"EXu'H;.O:Y i{U 6RxmSx=W^\0x\wHU77Ow[a.ҫ͛o$oso @{qs]"WQ 8HDJ6qyJGx%Gu^E2l|#\[Ϝ)e6syBOݑQcšι.Do5C7਱ay\H^Mn؄mæ9AҢWnh[*6ahNй6)M؞>tM,-xl6kEbfkkK>[Mn؄mÖ9@_袛/J|%}X2'|8mgu]&l|& :&0a :nEb]oGtظMpn؄h9A&6nX[*6akVN6qr"EW )߇rε=x6EbOk{[mu]&l| :&)M">,tM #-Rt)}" tv6+EN:k9ADJ&x|\HUl†axsmE$MsLtMYdmWu]&lQ| :&Z$}6cEb6$Ck-zپs q"EW ߇pε=l߹Mtn؄͆l8@lqp"C'a-m"qp"EW [ ߇pη)'M)M:>tM/)M*>tMmu]&l | :&zxI6KEb+k=q p"EW އoεsҸMn؄~7ADѥm7u]&l{ :&z.u6n[*6a; yKo|:@M kGmu]&>i2KStOmB:kÞ7AD; -Rt}&|{6޺Eb߽ov: -Rt}&|ӹMfn؄u^7ADmu]&l{v :&§tnѭ[*6aM6>#sqn"EW އankr@]LptMwu&x~[HUl¦azm"6ۺEb6k&xn[HUl¦ajsm"?M̶n؄Ml6AĹE6qp}m"EW އmmεsl6ںEbkmwu]&lW{v:]d' ^-2tnMй6qnM&xS[HUl6aSsm"0EEm@M kmu]&lO{ :&-i)Mؚ>itMl_' -Rt-}&htMl_ %Rr }|-KtLnwއmΓ(qql"EW އlΓ(a :.O:Yֳ :O&^3og)Lv>lgtLlK/g)Lr>,gtL,{t2ٺE"6+ð/.[*2aMй2? 2ٺE"6+ð/.[*2akMй2? 6SٺE`ͦ0]ph_&d :@n&tF8l6x$[HlHvF :&/&6SNa-Rth݆lη苉 Dyl"EWfm&\ؖDml"EWfm&\آ[6x[Hl2v :& D]l"EWfm&\_~xۄn+DU6btM3Dm&n+DM6lbtMDEl"EW [n"6@հn[d*=f{m&\{p5l"EW [n6ADL ;Ami [:k-lFwGXn<[*6acm2ot)1a7^-Rt56Y73^x n؄Ma;z})SغEb6&S: Mn؄Man<[*6aSm27S؍u]&l Mu.|)SغEn6&S:}K؍u\E&l MuM.<%KغE"&K:F= v%l"EW [n%lEG ^n[*2aKm7nK؍u]E&l MuE/a7^-Rt%6Y]eu]E&l MuFr%l"EW [n%l5^n[*2aKmP&x n-a:^n[*6aKm7轎/a)Mv,a7v%l"EW [n%lEv%l"EW [n%l&x [HUl–d [ota/a)Mv,a]K؍u]&l Mu.🗰/a)Mv,a7#[/a)Mv,a73v%KغERn&K:x [HUl–d ["!CغDJ"6&C:\:a)Lv at+<#!CغE"6&C:F} ;؍wu\%lMvuM.w`)Kv`7B'`7-Rt6]xj]wu]%lMvuFpl"EWq nlEvl"CW`7nlLhx[HU\vd[mun[*2a;mj`7-Rt6]t;غE"&;:x[HUlvd[ot`)Mv`7󈞙;؍wu]&lMvuF}w`)Mv`.\;؍wu]&lMvu.H;؍wu ]lMvuF}Aw`)Mtk}d/B~q%Rr6`rL,_ g;#]i[9 6!Wl@J #؄Wt:qxDΚİMy&|_l`gI,`tF\_&:/` :@n&tF\_&:/`)Mt[6Ag;CmBHlv : غE`Mй6lEmn+D>,`tM,[ b Dl"EWn }X&\Xa輀[ 6m o[pJܿMt^-Rt趀݇lη-8%_&:/`)Mt[6Ac輀[*6a }XE ^-2tv>,`tM\mu]&l oWYqxZİM6q&x[HUlMй6ňeu\E&l؄+-j`)Lv :W&Z^ -Rt> `tL(.<[*2a}&\h{ -Rt> `tL5ppl"EW 6@]8YLn `aseх/`)Lv :W&yg;Cei[:+6AD[#[LnȄ-`aseEL+ ^-Rt>,`tMG ._tnz /tn\&xZHUdMй%йqk"EW ۿ5@Beu ]mۿ^eu]E&lۿo$ `gL< `Bgeb&<w.<[*2a}&<w.<[*2a}&<w.[*2a }X&|o$޹Mn؄-`am"_tKWw ޿-Rt>_tKW?:O:Y :%«덻_)Ku :% qk"EWq ۿ5A߸Kn_as]boo%xZHU\Mй.77.[*2a}ؿ&\ ޿-Rt>_tMa_)Mu:BD6׺Eҿ݇kε=^{j2Y `.:% غEb' :.zv غDJ"' :&_y.-` עzغDJ6':Mn qk]"%W1 ۿkAwxn_被&yZHULdZot,_w޿-2tu>ٿ]tՄ;`)Iv `.: غEb' :.|z غEb' :vl"EWQ [lEWMxn-`被&y[HUdd[otU^[*6a }otyn؄M`Sbn<[*6a}27蔘';O`JvL`.:% غEb6':Nyn؄M`Sb<[*6a}27蔘';O`)MvL`.:% غEb6':Nyn؄M`ο)1O`w-Rt >]x6غEb6': &x[HUl&d[ot';O`JvL`.:v l"EW lEGX<[*6a}2otQ;/`)Lv,`75;/`)Lv,`.:vl"EW [lхX.[*2a }7eu]E&lOuF`LnȄ-` vl]"%Wp pغENŢs ؃-Rt8l `.8<}n+ad[otu]A&>&: `<[ 2q17׺DJ_k&BrX%%Rr8l?O˟#vL/?7oCv%t]%ۿ>kγ5a%Rv8l;O'%8;Dʮ} ؈^` O`J cfylε.G.x [HUa sb'u^.l"&<./~\/x$[HUFa$sb gu^/l&f<706<[d*Æa(sb:(u^/l*l5}ظajn«fj6Fwl0x7[HU va7s </g)ar1,g3xamavn«mgv6ֳ_ ׳u ^}z1g3xamwn[*aǰๆzt,hga<-hg cXf|vںE b}  o_- %Rvcf|; -Rxcf|; -Rx!cf|; -Rx-cf|; -Rx9cf|";۹`n« jà6&_";k\0xR[UڇMjä6 FxGmںE "6} /Y Ym@` ?io$qdYJ@/ H%(30BPtoDd5k• =~4x`H0v]06NAeÆ0s㈞Sw06NAe æ0s ㈞Sw06NAe Ƶ0s hOnz^2auๆq'O7 =SPxð: lk\ou 8e [خ¶V =CPv:LlKv ,pz7q.خ]meYyze2zqX8^ /yJYv5x^\ᅿ^m-mai[^t1Bm^F/llcw}nՊv Zq .6hsG=U ΍CPtuFXV׹q .chsKT*87NAeƹsSvnb Wk)(V6wmn-[,k)(V4win [,k^)(V2wenZ,Uk)(V0wanr/Uk)L.w]n-Uk)(V,wYn-Usӵbʍ$vV+hsb 7+(7NAeFrSvW9YӽBor]+l&7ezEtГ8e n4Mٹ^÷ ]+ 7Ae rStn"mVq.chsK!(Tw9n Z]ts8e n4ع5-K^)Lw5nY=rEץBq]F*l7e,U[܌.-n< RA[ܔأK)(Tw)nmY]םBq])l7E>*BOוBp]F)l 7E>o6|BוBp]F)l7E>n6v])7Ae&MpStf/a%Nq .hs6{ #y]w =SPv 6ixa";E8a$veJxa";E8epn۝);QmNv K8EN۔K]o]B)owߦFw]o]B)owZߦ|>Y)!(Rt4MѹJ{qJ6A%vmUEvq .ݦ;MoSv#fOxEVq.݆; oStf?vQt=CPtN [>nхBn ]&mt6E>_6p/PmmnwܦˆsrӅb6$vV(hrs/~8(6NAe;-nSve+)(RvmlX_tЃ8eq 4Mٹ>zo2Na{۝):)jžNq .io󜢅O.zo2Ra{۝);O*N SPv펽׷?~z~}m [ -8ÕIlw~x)x~ wq~u6]"`o~`{\aa jpEN-\3jD';7tө:05žWԢOakFMW6Ztt?'5}ퟭ_]~=A ;hc;Ǭ5fx@f`R ALW5Y3 9_ͨn0[ 5[X֩a^N-< 5q Ae6;6'9fp}wNV3j֭D͚֭'yfpQ@Z;C0j3YY jM7g e;3 nzXXwX<';7t3#1y>o6 `u`Ls zڙ!˨TwT<(⛮z1˨SwS<(kf"W!*u* ;7fkv 21ncc23OJ4w]3c۠ؠy PJyI3f̦*ef/nzrڙAMNwLN<(N]Դ3yPig -6212-C< -v]3Q[X*PJ Yig -#6+1+-Cse =ig -c'ݱ'-Csmٮv`2:`CC*4l7?C>X?t Z mAcAZ@>W?t! ZF+GZ3C7?efHЬ`3Z-nz,ڙAEwE|#آwC7LeV;VehwXyhg -c61-C Ѝ@C;S0h#aaho"31[XF>Ѝ@OA;S0h#))hoQس hg -cݱB3覴v 2n24,`gg -cܱ,Cs v.83dƞƞed?e gg,c61,#sm zx qgg,#61,3se .G! بsǨusv`2*`cc23WB gg,c61,3sM ov`2"`23WBfg,61ڬ2NYM= Aebƚ;ƚef'PM= e,F;Feft YlcYFZ@t'$s$̵:m%@/1;30d %%f(՛nzٙAXM0wL0暮z|ٙAh/w/< 'M e4V;Vefk[v`2`ss23Ong!r̲ wfw]3a+wWWyPHѻzV1h*w*< []s$AE`$hV,CDnӻzHٙA˨ )w )<B =u ZFlBcBY@moz;1˸m'wl'<-ZѺz41˨&w&\hъukYFl-c-Yf@ t+YFl%c%Yf@ tټ f=1333S/]!3o!3l̒*|f+1SU1W2KsL5ole43`A&M͛f%M9yCdʐys@B[dIpNޑ-!3?e<9 1;,8'+1S=1j%=9,xΗMo m^ 4&M͛PВ&| ʠͩs@X SТv]@{Shu <BEdMed3 ͓+4n/a n c&eh \|Ktl;$h],Csm` 6?,A}`2ZYh -|#Ѕ@{S0h!X`X F w),S,C` t# Zk(Foebo -c5,|#t!YFV+X$Va,zXuY"K|=d}23wUI et3ׁM\ft! 0D,3m zXu+YFV+X 92Kxve@{S0hX `{X ƗMAjes24GnТ+ݫ.re؛Aje 24GnТ+ݫ.rq؛Aje24GnТve@.{S0hX Da#7hfۀ\"`26P %b ͫ_E9DMA%BCV >r9{[Ԣ΢!F`2:`"g47b}5X bOY!H$@pgMs@fм[%hL4+,@<}>ܛ?,AӅ`?Y!`!4d9?l)6+B>N2hB_Y!`!4?]2hBfGpaO s@f凇R )汹RZt[ʰjA"@|=d\-^ !l XxHkrSFmV !+,B|w?F -|d-:dqvWs~Xs5t©8LsP~d~VX;<];LA=Yo`bF[4.0x@gU=m[zxE$uA(*Kn`q 3r2@gwFoZ1 B>Z`qcн0tJSg u V:fSƘԕv1~c0uJS} 5V@fo/FWXv]A3U*!37=pD";PY٭22~0[Hv[ adC"9(CX/s=/5D&;sP~Y 9t2o7C9Qf\ ?:t[_A s r߬UVf\ȅeg/k 5VYf\.ȱeg/+ \f\eg/^f\.~ fg/af\~5fg/Vdf"/~afg/gf"~ȍfg/4~^-/ukv`L 63z}u!W)({r}Ǜ?~x,ucP{V:XYxGft㘬8;$p6Š?}ㇷןxO8G8jzrmنtטl9;$r3>ۈ_)ɼ )FпjY(BWۻ_|Bjg¯K]t,8;.kXp`x,zr2Sf=L3kXp`x,Jtc,8;$fwNK\ϟ>噗Rc 7ߤ9k<^.;e;@%C<%좿s\3eeajv/qg]!>u);]p.# ͊&=ĝ])L鮀30vWh<%n‡PJΔn 8cfmk^tl?ϳs4{š=g`2ѬG`z=>Δ8cf}SCOgN xE^IyvW?vVeho.jKE_w*@7AD_Y@<:*+u] 9e„<أwSӭg`2VѭU`/zgMw]  e[n<>/~/.{vuER~~< Ͽ6fg- yoMLrvedEoSFk< Y'T4XȯТnˡCӝ`M$h < +jRuh̶*:~yth̶6~iuhƩƩ5@7hE^LzujS`B$j]th䚧*~j4lHЬ @y lWh ElHЬ @y t)S5O1s 0~Yu!8ۧ^ <SUO#Ph!}rS!?~_u!8ۧ^ <sUO#Ph!}rS!?p_u!8ۧ^ < ߠEBPt!8S/O@y #GE=P#Ph!zS!.j< AB)hH.zG2B` }?npnb|M/ץ25>N@wZ#GuVuȷE/RG+H@2> i5^ (ok ęu`'/W-6E$bv2NXdKC$bv,NXJ6Bb6B@Y&'oĢ5eԋ P/Pc։=oNLgx@"f}1OވEũ%MlvHf+XсlqHo}w0;WKه`=P{^ ?㧷|~ `[圍18 .@ey,{{  \fY`O3ϩhN_q.ۢmipפּ?qM[e,Ƥh*OM|oGt ؈-Yp9 Mhg Hܬ@By{ ˹j30r5ɿOy?E`+C/8ɚgqe3ыD/PK y[؈lA(dmy*3aآ'-3;l3@y [Xeup/ :Tg95028 C¶G&}adp<х-.7 g< p.l\׹0|*7|^|< k{ۣ3eKϋ-=/P<~vEȹۼC[b # [ Ma|` ԍ9p 8ÖLƜOaDo 63 eO` yP\dft[̧ 6ܼ@x ѽ 3e>YS\MEMa|`# ĊEyeMa|` 4y86]p-M2/'A;mY&3$lJ<=jA A1;C0lCzSE0|e]fg-ü@x VU=e?~+|),!#΅m :=eƘ%dτ1]Ϯ{./~4JڹYv ?Qb3 %Tuh?*}o ԅ 7קO._s%y݇DAeg-۠a9lr߰`2{)/;[Kmӱ{?e~Q^'< r]8YmAy5X›ۡcӗa,6@Dx7l۪M_q-n9ly߰MǦo8Öm2yv6+p:6p-%/ آA"cS [&T9lGx__tj$ZFl$yX5G쟛nj8qG^589fSx@"gSȆܿ׏o<~T9^(Id<DYmy,$<ʗ(w n 0b!y}Kչ~3Pxjc+ƒ'9Z[C 0|j+va/D&|2U L(O="9F3Pxdx*< ϻi\Jft(d̜$0{љ#0f$luy3È!t_G6bpy1Du [vF`2B fЙv#0f[lfy3sQ^ufYf%[X^`;+vufX026GLDy#̼JBq{]@/(;#0f ~5m=yL7z2Yz2L]r3C[N^<̹^ͪMvf`2&`+v'9Kz9y Zl9yr4綡~8\u Zl9yr4v~:\u Zl9yr4>5!תMvf`2*`kM֠9eKšˀ^Rv`22`+븢<ĔoԢTv 2AqPPsrp4]3V^I[yLZf`cj̦D:I+9_2R zXQh +$`;+(_`^B9~NP^3!I(6}K(@dg,#~LϿN^v3#N^I;y@{itۆM^n3m7y%0KT\f7o+i&9]8K^^3#m/y%11EaSO%z*ٙl6Tl0WWe~[I^I%y@{ QK?T#;#0`WG(~?@O#zٙKŦ I#X\\*3Ø-XrǃwbDvf`ABbXr[ Xb/\H y@b3E ;30b r!1o-zdgF,[@.< }E=~%VbDžďļ .({\3#X=sGcEO=y%VbDž$gv%vbkDžԎ{:.zؙ6t\H8&4,zcgB,8.q\Hx@7.zؙ6o\Hx@ecgF,۲q!e1o?"KңE;30bF y;Y3.zؙg\Hx@/=e\3#mʸ񀘷G)zŸcgF,ۊq!1o?"KE;30b y;L_t3YmtGW^-v&`2 R-y9#$=W\\3+.$W<%]PqC Xf۷BB`ζ_U=Se}).$S<=3\Hq# Xf׷B"`?[tT+E;C0deV ylE=S e}).$S<@=E\S\N3CYmN*.z!6T\Hx}ĝ^*v`2-R* s#ӗ~=U e~*.$U#WdђQ_o;CdFqBd~8>V_;C0dƉ U95̐lHOd~8S_;C0d yO˿!vf`2˿!uJw=?ev.$?< =3zwؙˬ9\Hsx@{gT+Eذ3#mh(WagF,ۺp!u1oZ}{vf`2{M y-m9_M3A$dv'!2YzB!6\H>x}x dޏC0dF y{}{ v`2{M  sM_H3CYm @_l毧!od?!7e6.< nϘ`gF,p!1o󏾙Z6}ۿ XfBb~k7=e6-$[]_3!)[-; -7v}{ Xf﷽Bzbm6;o_< [?y[]֯3Cm뷐!ӷ~= e~-$;@m_/:C0dߖ~ )9[KuF`2Ks/֯W~!o+T~Ȝ,Zbw}# YfB"dE~ e~-#WdC_3A -$;@C_3#YމE)#6Iw@p=_:30bv} 9۾_{lHOb#[I_gF,ۤo!I1{x#zי[Hw@y\~9_K}k Yf5BjdK {u`2{ sֿ!1}S Xf)BR11{%xշ~=@eBņ| 9ٮ}+e~ e~-;@4ȢbmwLg;x@Bf~ s]>ꋿu`2 =|]7 e6[-;@m{ܻz!ˬ[Hw[wU3Cm諭^g,~o!2oO^g,zo!2oߣ0h{!oӽ{cd^,_:CdnoBdKӗe-; -5Kf{cb?1^gL_V3#YmV蓸ozיl[Hw@kf_:30bvz 9 >_:30bVz 9{ >_o:30b6z i9k >_/:30bz )9[ >_:30byKϋ"E:3b>o}ޒ;Z-z!,[}^<,ۯzu`2[ l>#ޢ'z!o%ŃȢz^g,Fo6z3Ͽ^g,HoFz YtBoe~-F/._ޢ'zo%Ń7` =[D3mdx,xz^uF`Kf [Ћo@3-XrǃW`-xuf`+f[6ЋĂuf`f[6ЋĂuf` f[6ЋĂ}uf`f[6ЋĂuuf`f[6ЋĂ}uf`f[6ЋĂuf` f[9BoXMG9niKQt nQ7yp01-=ȋ#0Zp@e(; nKh=@i=i? hr[Zn#PZdZvbZ/\LZ{z< }T­+:a  K~LS7zz< Ӳ[}u~g.o0x@e7(;=n3-]BKaJLnQzw@ۢ/zr'˼nQvwYC}{8msw1,'껼^-8 Ӳ|T]~ =qwy=#PZ]v(;zZ.#PZ]޶v;z⪯zdG nQhw@ W5U.@ie7yݢnk쉫m]ʮ򶯻E}.\𯼾U]n򶬻Ee,5+ozPGnQTw@ 7-]ʮ򶧻E=-\wy=#PZ]ަt(rk>+.tqF ȴ.Ut]~~\6E-gߢϪM wy򶝻E-g[wy=#PZ]fs(;z.GMnQ2w@壯mE_T.@ieWyݢ\G؊\6E-g9}8m&w2Z.G勾y\6E-g?"..qqJ+<qcZNwۦzG`LQw@_M_.N@aeWyݢ&GMޖ7yn򶆻E5,gѶ雼(&oC[M&n&oqJ+5pp/ᧉ[n6E-KiozGMnQv@ 7~雼(&o[M&n&nqJ+%op/񧉛[ʮwE-m[т2-G-\Go[ʮ6sE,\KG4k ,} (*o[Ua*mqJ+ۺmU>oz'nQv䣋55[.hEE,g.lq +ۚlpB=^Vv!- hF{ޯ(o[԰=~ zx=]#PZ5k(_r[hԇZт2-G-\Ш}׋8{< 7yO Mȸ&%kpB>M^OVv-h&EZnTE,-7y=PPXMFj(R;|諼(*o[rVfC_.-@ieWyۦݢ6퀖oấzGnQv@YÛ}s8]mv1-EU}S8dZvrZ*VU^Vv%-*h9|ԆLU7yn6BE-g?U,@ie7y۟ݢ쀖T}׳8]mzvҳZ*"꫼ (*o[U~3W}[8]movzZu檯zfGMnQjv@ W=\U^/Vv-h*יqYʮ60E٘SM_,h]壶{᦯zSGnQWv@ W6S%]fnQTv wõ5}[8]mOvzXG雼 (&oS[M~o l*'dqJ+یedU?[*cqJ+ۄ%dU>髼(*o[rVz6GMnQ:v@YHXʮ6EؘӋݷ:sWy=#0Zp@eW(;GHK_R,@ieWy[ݢZ쀖ʇE^oVv-`9|d=]_:,N@aey[ݢB.z{MnQ~} :ʐUvMi>}oo#\]:'^2ƥ5X=3%RGӇC|z?ۇ>;}y|/rIS%}|N-v w7!]o-.__ |_"$ېd= রTe >p /QmUvw__0KҀCPzn Su,-\ݖ?e&cx@[xh_^𦻟c 8;;ix`El86hwA;Mϗ592ɺSPz mvwz|ۈ5l8iwO;Mϗ^ɲSPzٰ҃x9LK [у=NvѣTsU^F5lvwz|ӈLZFO7 2zӰ}NE#4sǖM^4lvwrwz}x]pQv?elzij]F+v;[Kkx!_E)gܾ5;wSTo=R.Xe22a󷻓x-Sb-s ["lww:S߰MǦvy>"q=atoB/Öݝ6 68~ é~˰\a6+ N$w N\M72lSݩNa{<~֣~*Rp$`H N8w +mLOm\M,2n= INqs,!itj&`їQhMNJw ]'Y]bxMP??~#ZZ)[.uhzU2r`;f-.{|Ux+[)^]o]l_wlk؅ښN2vM:v7䜚 Xf2`ӻ;Di5袟S`[8C$tVP?~=5SlO]^mP' kx~Rp1`%ۻ>}~KDen?wS\zG2`{;l_/}Tt0×1!m2kx~*RzH`Wˈ Ms";tzZ`g˨ F<.ϝ*e۷!9],9e~wΓs"tpU`~XP?=ÿ^Swew_s@adk;tp}ۭԑ8+)˨_Q5kĝp]]:u})50̨ew(QcR֎SRӕ[ZFlxB50+HN_JM7l3jS=Js@ԢI/  .9jWjўq Rj`#QˈPΝ>p )LB`F-#CAw^(?u)40̠e\wZh_ݯ?G)L`,cCL"p,tӥ@oYF l7xE/&"]7= 0dp@Bf=}S({(5ކ` 9 Y 7_bZ&2q+nE]~[#^E/0f2K-׷oo~?+ڣ8r)abl!C^7lE>}lbpX?m:H/ YIx@|Vn;v=7CG}a< ?w= Tt Ρ{<}G}t-hΡ{<}CWßӍ`6CTt6CCw B $lxMjf￱']ӅaPdvVHDv;=dty(Tw+!;=SEb6^dvV&;αGNbNٖ1Y$;O)zNWٴ1Y$;)zt8tvS̆:$]_mp쪎Nw1Y:)j.ttS&:āйN]?9Nw2P)tp.[W/2:=30t8n;dyJ>6Jq.CCxkES Ӎb6dt( (wOO#tP{5B1dBo( ]V(lCyo/?}OS8~x"zݬOdʻ * _?t~y!s<"|ʹ["58|c;Ć{az#L!y~A)2~dC;$_?߽ӧ1.=QoBK:3hۏlOyoІOSWZ! V#S!4zXvf27٦hgТs4A{,<3hێl[y dzwh]Xzf2M,{Zt}Pf] Zf׷3МUUc1ˬCxǿMgof2.#afי?&o;TѢ/p~X^[8#$rP@uވE|΍uX3@eDw빳̀.Qh,6ǼCX@ܹ̀ah,6ɼC_)|$g>Ʀ& :Gl2Tu8~OXf2.`C;'9:p?mMh3Y$6G_ҪcӅ`6ی$lV]:XKйɲ3Pn Y8l{$7G5{\MrKa'9pkHӱɶ#Pl [8ln$6Bl]&@elv a7l負q-X>l`$6G/ zYG2`/OϛWo9"-5ctq, 6|@T<5SyiJ7M>&|‚Guls4EF_ 8l83.!yGB8W^M(7[N> #< VZ}hpɌ0vat'Jo܂ǹ̸3Pnɯ|@Hp?_>F੥_Hږ!8` .֓H p߽Ax.|=}x~rpdK~b16ZN.'z8G`UfP3i -:3`,EÖ̠epeGL3Phɯ|@AXhn05L> Bs |aj0[L> Bs`#;0dMBځ%K>C뻟M 7#S yهw0z4Gвj`UhЪMBz-&XL>C#1|iD?^.GLRp#,JZ&|Th!CӝF2Hw?|zax t} C"; a4, SxYߕ= 3 f W^Ɣ֏nX?y:W^ћaLylHҏcܙs]3;E)/}o,;rt*n4=u)9ElwD}>[S်r;7_}Ӈx ^OU:V1N@yez+>WK엟?~#zqp k=@e/^px=28W8}ǀ1o#F'r ]bMO}3ƆI8}sӷ~3r 6e|`x.GX'fSƌ\36׻ ~Kt 1Öo{el_EP̰61c- 4F~1:6 f̰e?E26+h9760g̰eM&LP؂'&J1æ 0بQcg n zGԲ`vej*?k*YcR˪M6Rm {!SxÇnz`&C5ĢŅtqc]Mč7>0n,{zhQ`1ťlH`Xw+tM 1mۿE l%mqJ)-X2~hY8~]?^}x;2!(Gc|`xy10~X1x\Ic? Ae l6-߿ݏ)75qۆ{#8喹 Oqo7Юsӗrd֋ggnUsp8$n0]<329]̸:CPn8Lp{<-v:7 `-6Y|`xgnŌ.0+>0W<-\ιbMWr(M*CSŌn 01)>0S<-|9S̸CPnaS<_¯uŌ 0'>O<=|ġ(!(/8q)n/%CNCPn_e33ȳ z`fyȳ z2`6yȳQbMr $^"Ϫ/EbrX#Q>_'M1ⶎCPj[!COҺtWuOPsM!:5f x@fM \OU{lHԬ'`xBx_m:5f[x@f-[›jש0- 5->0ZSW*+n"S8^|`xyBԫ?ڢS`b$jbn=cR˸3Ae<z2n`}Gt {id<^؅]g[l(l$;xgvK9TLMc44>i<^E,Ōnyc< yYv/.{3v'̖zg= d0=;k =e/k1c;lH3`x vsӘa6$v0<hG9;&fx@bgmȳ|P=׍;+fCx@bgCȳ|RW5dx!XCe{Exj׽BO"]+M"WL"ϱxaxE^Q,2NAbٽ+^q^Q42NA%4r4,;+F=7;+p .+g^~E'q .&+&g^MX/WT=SPv 6\1<-R/WT=SPv 6\1<-|dKxE䊹YvWl{UO&]+M&WL&ϲb +dz7^Qm7b7y[^!{E8e OOd/|.We-(W,(ϲ"jE =SPvYvWgϑdNٞ2Y,;+Z-Wex,W,ϲEݢ{^])(Wr,;+Z-Wex.W.ϲEݢ{_)(Wr,;+Z-W fx/W/?z2`2Aטq HT`y]YEc2C;LAe+'J깷JSPtYYItQeN7 3W3O >d^ft)(PDsD$:''s}2>aCC͓|RfN 5W5Om"zK=ט:&` .c6\1<ηQ%umBO7]&lbyoJۄp)(M؀sŀ:8.Znz`2QjΓ|آ6q .c\<η-ZfN3Y$:&m6Wq .c\<η-z(Mh؄ @W @O z &tc8E DD]&F4Aed+'2qoLhȄMEWLEOe`uЃ8E D]s*LhȄEWEϡ/kN.z5`'2qDל6]&l4NAed&+&'2qD4C˄&22aѓ|8"t8E ۍ؍DĦ˄ޏ)(Lvtv$:_&jmL iȄGWGOeF{ݦۄޑ)(M؆tņ$:&jmM-i؄HWHOm" gM =(SPt11ItMpmBJ]&lQbQzAunze`'6Q;w&4NAel֦+֦}DF.GNzF/n i< !ր_~~ ([Oo8Ŕ1[X ӛͿE .>浞ѽ,C^w>0x/|=gf;3z1]g A=Y'Ĵ L3;tfKK@Z̬t!(23kecfMg0ex@ffJa>>-"` tDc7٤4P9mRbRZgo;ΑhMI Z']mObOz7hѳ9ͨlMH8L >8S XujZlKbKz#WjЌ.%i< QB% jo84klGHԬ`Gz+1]lEHԬ`EzWjşsQ`!$jV !=A͓U.i< Qb/^.6~pCn k%2 ؂tł7Js2~`S3覅s8iHWېؐjBs52`##s\S7~NC3p)\lEbEz' [Ztp,\FlFbFz ꦃ}2`KKse Uw 0QXCxs"aӝF2`kksms#aӥF2`sssi(QV]4@e+9PPA՝AOJ [lRbRzs.Z6]4eF+F9P¸CӍAJ [lVbVzc % ;kь. 0C M=-3Pn_ii9n/ג z\g2`s]/%54@el楫>龠q . 7] 81M7=;CPpceg~>teЛ8Qۜ^sz ǁMw=8CPpg'an.zs4iԦMW6=Ε]5iXMMW/5=ε]<ǣ8]` . 3] 8WBn6irhmLW1=ӆo׵AK [Fl_z}n6~5iibXMKW/-=ͱm ukл8ە^Wzc Wp*[!(5بt3k W4AeWX\[!(54n^NZv)ipr{4;]dghzFglFyn3DevB3l1[-H7 =1(j.04=#Pl ah6ݼx 6G{Hpݷ]dchz9l9yp19 ";Cӳ8pfFπFOiތ!(34یn^3z 5vhK8CgyP#j^!(34[n^-z 5vh8ME7/=CwpҠwq.ӉnݼN 8OE3Pni5gy֠q-c ݼ> 7&y[tm8ۆn^z Q-5]hrXB7 =ͳݷ(4AeFYCn\mn z2`+BπEwE=CPpk9gyТ[Wۢ[!(5tb3v.;3p7\lyp7DȪ{^(7t 3\oU=3Pnog" zg2`k?ps!ZEV3@e~ZCҠWq-# ܼ 7WEDw=3Png%g!2gr(=7< sWn zLsZ3a ߖ3Pn_慞g9_nft](.s*3]/[t]8xn^y {mE3Pn]}g9_躠ǝq- 6ܼ 7G%yuAO; [Flڹyin._oKt](.خs3]ؗH zg2`͋:psta_"*.Egr-:7< 7n/l/9gq䜛97/KAYe%ХA> \l 8O3n z2pXk8^g p\6)7 p@gaPyڰߞ9to8n=̡ހ!(8t4%p8{࡛!(9 td%p999%h˘-AA Zá!(9t{] ?AA7CPps54 -נ^!(9t{] ?5נq.Sn^W7p5cMA [Fl .Stc8nA;=UoA73Pno-4sRtS8nKA;Z^nz g2`Ku%h<~]SMOA [Fl .ܢ+qz -hr8mA׵[t!NoA73Pne-4s-覷q-c ^ׂ7ni-覷q-ӂn^ׂwnǠ!(1t{] Ez 1hrAŠ[ (0t{] ߸. z g2`cu1h<~bנ^!(1t{] ? Suek8Q[nA; z g2`cu1h<~v}6z 1h8AŠ3Htc8nAgp1Ǡq.n6^"cMA\l .ǟEۈnz 2`cu1h<~hנ^!(7t{] _q .#6^7p tӃ8n B!(8 tA膇s๭cf4KW; :$fVx z{j̘#Pf_3fn-t:3h+ ZM@w;ෳch]? -4zsљAgmq 3&@%s45gMvBKAhn9h%gMBKxAΣhn9`gMvBK8A΃h~999̨BCPj !yy@O=K]O=ZB M=wzP;!KA;8n;ϝwԼ.Ꮪ,]o< ZF ls (Uw=׌CPj'sjÍC.z2R`c͝ǚ'V T3Ae;O55;}յ@5ZF lPLW L3Aef;4ԼF{@4ZmJԨӋnz2f`͝7܇h8g5] `J-yy@}jTY{]IUgu! sGuy7q J};\70w|*n^g>yCu sy7ȷq Jm擷;\70w|*n^f>yCusy7wq J]w;\7z0w|*n^e>yCuCzw|*nd>y99* _d%J|/2ܡANw|*nc>yCu2wXR{55 ֐Z )f\R{)5 |mɻAÌKPj7x0ܡw%3.AU=|sEז ̸Vq j~!:_[n/Z '/w9|-2.AUཽ|rZ^ e܁B{x[]ּ˸V.W;\38+k e\R{s5 ȧ^3ʌZ ` Jb;\38"3Xf-Z {'-wfpDf _[%(זO^[Ps^B׼[˸V1[jkh e\R{h5 >׼+˸V1+jD_n}y3'q Jb';\3 W(OWm-c˛A>;0hV>yZ3--/2@U`{m@ ` --eT/w/I4 9mkA>;Ph-x)<܁6ly-ȷq J-哷;"ZA-2.AU=|rC ?h _Q%(WO^QPskh ʸVтjn -ׂ|?*ZO>y?C-4^'Z ''r~`ϋAK0jr^N>y9C&4f&Z ޻'&w"k Q˫,AU=|hr@ rɸVqdɓjYw|0*nL>y0Cs#KPj7xO%<ܡy7ȇq J䓇;<78ܼ3ɸVqL315y7Gq FI>#'$w,ȻAKPj7x/$ܡ摣1W؁B{y4W #o62@Uཌྷ|6rkiǑ|w*bF>y{A>;Ph/x"<܁zAtq D(OD@s <[A;Ph+x!܁Y^#:VO!Z S'O!wyVp׈;ȸV;15/|QNμ#ȸV G;<+8kDg d\RX{5 kӘQk,AU=|qgx >(O>@ ϼǸVтɳhׂ|w*Z<>yӂ3r31@U=w|q -r|q swOhKg>x;Ph+xc}B.g>x;PhLB7?|_?w\zϸ]uc?cXϟ= {o HE!6CcV=8G; G B\9YDl8RHpt׳1s\ G g"p̪h'WÑ*G^YDf8R Iptlכ1+$s G*& 9!1(s< G* \}CcV[=8G;xT_8Ư31k2HsZ3U/$L:A9DpNp|f_g&g-goα3oI=YVޯ;8 >{pes3K5_wq|>3Gg={|&>3)Gg%(L: 1uf2: AY 9cf&c3<( 1ef22 w]!QpXc,d\'/B2XVfTG9F/6=+0s#L1FduFAd` ,2or58Ʋ41Op4f9ccV1yւǤcc611Mt)[bQm\&ݵ.s}Ge-Bq2N{{pe9}#3'ff`αl3W8:6sqkAgAg`α3W8::ׇ33X +8o\cgN3/pqs ߸>9=(Gs4>q Gg.ݣ33X +8o)ϼy)) 9}4> Gg() 9}4> Gg() 9}4>5 Gg() 9}4> GgmSS؃s,i|Ϝq||>s;q{sğ>?CcG܃qĉ~O$ttMyL:s>NOp؃+d">@Z}ɿ>@`d 1hы},<J2ϕ]_} !WHE|\9|_@&c 9q {p|%~@j^Dž/E_'c2y#~!C'c2iyc}O؃+YG3Iy ?__ {P|0gR">: =8u4c1Gs=8u4cP|Jьu@0^ZGve {p|%h:/s#~Ӳ =8u4cֱ `M؃+YG3Uxkkxɠ =8u4cֱ `M؃+YG3xkkxɠ =8u: ,Xн=(>3iާֱͳ`BJaZSuZGxڮ=8uiܧ~xWӶ:m>:[5f:=4N>ϵ>͂u={܃+YiO} kGx2 !dqd&a?u)|u+`BJaS\Z !Dqd&X?u)|us!XЪ=8uNgy _xtCHLSOwEL{p|%0USOs?1^+`WS:5>:9`!qdB?u*)|usx޷!qd>?u)|usxjC(_:Lu~TSϳ9lM`BiJa*S2YGO!0kpz%0qOccC_I:LT~D3/U!({P|0gOccC_I:LD~DSO:wC_I:L,~SO:X:VA:@ϓ%U {p|%0MӄOc wZrW:)>:V: <$N>ϫ_B9|::>:o6:;c3ֱYBx},'[LS\#&Xy=8u &mM{p|%0]uOs#,L`BJarS'ZG|w&XPr=8uԩ !qd&>u)|uly`BJaSٞZ !qd&>uR|^uv܃⃉>cB{ k{ܷ !qd&>u)|uskhJaS'ȞZ>u1v܃+Y O{ k{'Xa=8u ֱλ !qd&>u)|u;m`BtJaS'ZGXyv::Ä֧Nh=ϵ= !Dqd&>u)|u͉]{p|%0]Um9+.`BR`"XG'ZG͇`BIJa*SZF)>:`d&>u)|uO} B6JaS'IGVB,JaBS';Z'8H=8s>飧i#94:dѧN=-sEt܃+9Oz j!8B=8sԉ9qWr>: >/{~ N99ADqN9.|վSm{p|%0]5Osc;O:9̧N<ϵSd{p|%0S1Os#C_:L|S\l>W,:>:;O:\9äʧN<ϵSR{p|hP:>E}#oM NMߐu_x}䭣 yr܃XG3yɓޚ^_:pbD['RZGxkn[GRWfR孓*Os#5}䭣 r܃XG3锧ޚ>фH9UHyDS\آ&qb[PZ䭣 yr܃XG3yɓֱEG:&=8u4&o6y k[t{Z[GW&ocart0Pل0yW 7&ocarB ar܃+Y 09f!Lބ09ÄXo|i&oBJam,LO|;mM7!L{p|%0a6&_x"ɛ&=8u0y /Lބ29ÔXǟ42yWS&ocer&ɛP&=8u2y+_|P&oBJamL7:2yWS&ocer!ɛP&=8u2y+/Lބ29ÔXo|ue&qdL8Q)ɛP&=(R2y+/|M(_:6cۘu/|x},'[L+/|M(_:Lq^qM(_:Lq^qM(_:Lq^2M(_:Lq^2M(_:Lq^M(_:LqG(7L{p|%0e6V&_B er܃+ɛ)29>Lބ29ÔXo|yP&oBJamL7O(7L{p|%0e6V&_x'ɛP&=8u2y+/<M(_:Lq/^(7L{p|%0e6V&_xO(7L{p|%0e6V&_x,ɛP&=8u2y+/>mC(_:Lq6 e&qT&oL8~ O2yWS&ocerB er܃+Y)29f!Mބ49äXo|i&oBJamMO|+ BJam,MOzqIH7!M{p|%0i6&_(B ir܃+II49BMH_I:LqJ&oBJam,M7CH7!M{P|4y3i6&_(B ir܃+II49BMH_I:LqJ&oBJam,MO|w i&q$&M8~ 4yW&ocir}B ir܃+YI49>!Mބ49äXo|y`BJam,M7O!M{p|M|vS »旴q=T!>QĿCdpe;r|_/aq/WDg'Bϟ~琠%5=Ǜ 9.V c6ɐ?_>5i2ڹ2~)>ɼlN_OCN>y-8M;i")/ӄ/ rJS&Li=q4🟿+W4/5O}},gS.r_hJ[ KkZȖ*&]>;W~_^_{~)ύP--_^ISL|vyr`(m٣ۮ9'',lj9c(Nܿ矿//㠍@ӫ|L}x8,ؑ| ,۱-}vȳ3_Sxfr j"q"w5qZ:p)/Fw;8Cg<锿O<>q݅"Ro !Wq"TgR ӷ7|хܚ'-LL|v񥫗tLcTȑϬ#M|vrTsV5m_ȹ_Z9UM|vb </S8gTI+]xM!r36xp;^hiq O 9C9x$ nz 1x SxNr3*Dxp+/Tת8e'\ lj;N\aQ][ ^┝ r~'rL8qDu =);%8Nؙv؅_c⌝-(Rx|6 /琜#G-NrS]-Lt|vytY/ qNN 79rF,xK>BND '5'9ExVR+8#g©yBD99'8NpyrMo'99A&8N/a'% 12'UR$;`-&Uq5GNbZ~7#gB 9E-IKJ`34rN9 ۹K %WϦ>C>[!>tL9` N &>C9[!>^ 'WrS !F8 ?[o_ӱ<]+YIP̖g_ GW -u7d9:` &>C)[B鎿n~I~st8]IL|J7G'lѕL¤g(dKr-8J, ul K|:%` & >C[A%<`׏<:![Ptlr3T%tM: %8L Alc%8L -l#*%8J 7rK9N;.)VD![Kl3rHV r'rH@Z!yD׺ 8#g< 9G#99A#7NBγK,B|D]+"TqN#=CZ&E0D}"`IHL{L`B"E8 kg$DPp%%1_ӏ?oi:聾o&BJJ߸W2S!x-s$v8fJ__ [oN7 ߟ1#ZȽBw`"OĭD^^ ֿ!Myȣ3a4:;xxsSt[]`aj3D]6kD Z ]|uM 6[ptv"Ĭ]2 -8rgY^kGWWz 4:;@k DXP"^+ GWj 4:;@ދZ-8D,ؽ@:)湼6 Ew NM^'p,yX7Ub1)jixQ\S5MN!4<).xI򑷊Ehw^*^ cY>|bݸWԻXy^/yXn7Ub1ixYmG-ڍ{pxUXL{|u{xn"qjv/PNbB-yXF7Ub1iv^zAn܂+ r/΢ ]l7 n!ķq J^L|{tGeBm]Y-Ls{tG嵡M f!q"Θ8X&A,6ٕO9bq _&+6ٕ4O9^q_½LVm\+km/Nso@Y&*6ٕ(O9Vq߯LTm\+Km/Ns`ub۸gW ^<%V7NVwx?}_?RfyBY+^]/}ӏ aA'"=ͭJЍ9VF68Y/m 2￲נ*W )9AX7Nin@jyYxoSr8ȭnȑ3jE.k|BuDU .rG_۔ r'r@@Z  )947Nw>!_!;8m_=t_r;[Pt%y0Q:8itNP9Ǎ)t&ǽ@ZA ]xJfCW q/&Ľ@ڠ>_BxGGkY"T5(J )j[YmJO 99zF'C-ss鵩M J!q"G(DEzV=m O 9x* @-s/)PVy`g{*c؛9qP7NA7жW ^9-stho)>7p &`wZ BpY+ m/؞yokNA8足W^?-h+)v֠Ja 6BX%Ж_~ ٛȁ2ro?5e)~=bPO$`h:C]Ď! ,Ja 39uN>N`'V1ՄWJsb8tNstVK0b8#6b bv¶f~Kpb?XM2{~tE'e[++.U`5bvYٌXp NbcXCtG"˟X5EOb?!8;{V\*a-fkpt XM {0]`GVkptXM {.`S]^ V{pv-XM {0.R#/=8 i<;ErN*Al܃; ء1<؅5 qή$ &bZ``[J`b+vE\ $=8Hihă]t: J!qή&bZ`(.fظgW ^1 -sbnY'A*6nɕ¤W C X[] $X=8UahcN !{pv%0);*.vNU9l܃+YIaγ'rzBaL0α]x6*6ٕ¤W C ؅[JVaR+vU M !{pv%0);*.v1+X=8UahckqBa]*L {0αY+6ٕ¤W C хwˮT)l\:#9RU !{pv%0;G*=f=8T Qh#eBHa]I*L{,Α]| R!İqή$&b#Z`HŶVA*26ٕTWD Ǭ BJRa+6vT\cV {pv%0U ;O*۫`BJVa+vUVYl܃+ibЇ.|ظeWbb[`y>mWl܃+yfb }x},e'{LN#_vB(e]+L){RM {pv%0[;+M {pv%0k;+M {pv%0{;+M {pv%0;+:7AmWl܃+yIfع^_ٸgW ^g7ٸeWf&b4[`zE|sBHf]+L2{d=~M Z!q"htV] !kpt%0c:*B.H58TTl#_JٸgW S^-sbTl܃+I e9RqYA*N6ٕtWd ا ] !{pv%03;G*.v1+HP=8TJ<;م!H=(R${5#;G*ηTl܃+IIdyR1e5zM V!q"XvULa~=ظgW ^1-eFBJ^a+vWtB(c]+L{2Bb]+L{.Bb]+L{*f+&6ٕ4Wlb حۛބl6Ddեgov1 Mh]E*6ނv'k&7!{pvLJ{ R9vTR6! Qm܃Hf[αb ? yMk]*68{ټVlBa*Z6P'=ބ6Ub3m 7{&4qήiloml+6{pvLc{hl]-ބ6ٕ46cVhloBcJ46cVhloBcJ^a@cgOCmBc{۸gW 8{Y+6ٕ46cV {pv%0mOvڛބ6ٕ46cV {pv%0m7Bl]+Le{l]x&T7{pv%0m7Bl]+Le{l.*۸'W S*8{Nq|ۛ-(Rc{3mrBHl](6cۀQ_u GW S 8D Ml]'L`{l :!q  qXBtMym\+لkoym}[CtLum\+ɄkoumM1:%6ѕ\ĵ6>uKmm\+ikomm}CtLim\+ɄIkoim}넲&q TLY{(k]BY{ڸgW S8dNHkoBZJ>a@ZgovPmMhk]I(L[{hk.>fڸgW2 8`6! im܂+ Ikoim}ߝڛP58P6P' em܃+)koem/Rem܃+))koem/Sem܃+9)koem}ڛP=(RY{3em7ڛP=8T6Pٛ]x eM(k]I*LY{(k]|"7{pv%0em7B(k]I*LY{(k.>fڸgW S8dS(koBYJ^a@Ygov1+xP=8W6Pٛ]| ^!qή q.ħPބ6ٕ”6cV(koBYJe͔6cV(koBYJ^a@YgO| eM(k]+LY{(k.>fڸgW S8{Y+6ٕ¤6>_-7{pv%0mm7Bk]+L\{k.>fڸgW 8dބ6ٕĵ6cV !{pvM\{k.:fw! qm܃Éɰ{>م7B\{ڸgWĵ6cvڻ=8W&ĵqn[܅.q ikmm}[ޅ6Ub7m}7k.qήikmm/y؅6Ub7m}OvټVB[*Z>ٛ]|bڸgWъݴ6c6=8V>=.w{Pvn@[gov1+w{pv%0m}7ڻ=8V>'v! im\+iIkim} ܅.qή&qf? Z!qή&qf? Z!qή&q.sڻ=8V>ٛ]| Z!qή&qfVim܃+iIkim} ܅.qʮMZ{Hk.fڸgW 8dVem\+i)kem};م.q d&qB BW{ڸGW 8@.tw{pv%0]}7B {pv%0]}7BkBXJa݄6>B&w!{pv%0a} 7ڻ=8T>ٛ]| R!qή$&q.JkBXJRa@Xgov1+X=8U>ٛ]| Z!qή&q.JkBXJ^a@Xg:*6nɕd6^ϺBU{ڸGW S8@G_A Q]j])> :&4wkpt%0M}t-BS{ڸgWR 8{ O턦.4qή4qfRM]hj]I)LS{hj]| EhjBSJJa@Sgov1+(=8R>ٛ]| J!4qή4q.~O[hjBSJRa@Sgov1+X=8U>ٛ]x M]hj]>'v Mm܃+yijMm}ڻ58V>'^ Em\+Y)jEm}[E](j]*LQ{(j]؅.qήdqfE](j]*LQ{(j.>fڸgW S8dyBHj]*LR{Hj.>fڸgW 8{ Y! Ym܃+ew8d_ڻ=8Ul*ٛ]xnV>&rV qfWem܃+y)kem} i]Hk]+LZ{Hk.>fڸgW 8{Y+6ٕĵ6>W.ԵqήԵqfWym܃+ykymǬB_J^a@_g!߅.qʮM`{l.'Nm m܃+yilmمǬޅ6AٕۻilmمǬޅ6ٕ46>]hl]+Lc{hl.>f۸gW 8`w]hl]+Lc{hl.Bhl]+Lc{hl.~Bhl]+Lc{hl]dBc{۸gW 8{Y+6ٕ46cV {pv%0}Ov ]hl]>ٛ]x ]hl]+Lc{hl.B(l]*La{(l](! m\+I lm}⚛ޅ6ٕ6YA*6ٕ6>ujnB`{۸gW6cۇ=;ȱ T.:f!}m܃Ha@`g‹Ƈ>6U0c 7K!qή")lml*{pv8La(l]x ۇP=8V} qfy86U0cvG]+{pv8La(l.~{!qή)lm} /Ba ۸gW S> 8{ Y}m܃+S> 8{ Y}m܃+y)lm} /Ba ۸gW S> 8{Y+6ٕ$6cV !{pv%0c Ov!}m܃+yIlmǬBbJ^a@bg/v[x ۇP58V1P~f ۇP=8V1Pٛ]R!hP=8V1P'3ۇP>6Aٕ ۇ)lmمǬP>6ٕ6cV(lBaJZa @aglBa ۸gW S> 8{YA+6ٕ6cV !{pv%0c Ovaۇ=8V1ٛ]| ^!Dqή&} Dq.Y}m\+iilm} V!$q d&} $qBwX!}m܃+%>8{ _e!$qήd&} $qn@ CHl]*LbHl.>f۸gW >8{Y*6ٕ$6>7. CHl]*LbHl.>f۸gW >8{Y*6ٕ$6>7. Cl]I+Ldl.>f*۸gW S>*8`7Cl])}1'P~Cl]I+LflBl]*Lel_u rd'rT Dq.!4kpt%0ct[Bc۸gWr >8{ O!4qή} 4qfN!4qή} 4q.F'(58R1E}m\+)lmc!}m\+>8DB_ڸGW >8@7'B`۸gW2 >8{ O!qή} qfSm܃+9)lm}y C(l])La(l.>f ۸gWr S> 8{Y)6ٕ6>ص>6ѕ6>хW!q } qn#tB^ڸEWk&} qngڇP58Sl)vMPRtRDQ6>O!q d} q.|WQHkBZJBa@ZgWX}em\+)kemНWXA'6ѕt„6>m_`BWJ6a@WgBڇ58M1'a!Tq d} Tq.<^!4q J>LShj9[;BQڸ'Wr S>8 wM!q &} qB`dBj]I&LPjBtL=m\+Ʉi=m} ψ!q $&} q.~dBi]I&LMi]|n"-8K1BJRڸGWr >R8DP>6ѕ\”6^؅!dq >LFh.|ڇ%8I1 #$!kpt%0 c Otu}m\+)hm}OL!q $&} quHl\+gl}__ٸGW >8D Cg]$L=g]Tه58Ix1'D0 kpt%0ct᫄P>r6nAɕه)gl}[ËB8ٸGW >8D Cf]I&L7f]>l6ѕddl6>х/d!kpt%0c t{+d!kpt%0c Ot Cf]I&L6f](B5ٸGW S>8@wuLl\+Ʉfl}ٸGW4ρf6>EN} l܂ÉɐvD<\)q elx She\E$N>oj>ѹn}py58F&}C]p(|DW D\E"NS>.8T}|odry=8C}]rhr}lB.'WQ~!KA.>Zw\ pNbc>vÃ\${ U4u_C}{ɕ~G)c?ȅse>9{Pr2ig% >Ͻw 9A .6NwP*6!'\Ɖ9c*vcbBhb\I!L7Xr9 !q &}]pBğ?'A!6ɕ~KS#VIP!{pr%01bBha\I!L 췰<8UP{pr%0%_s"IP{pr%0s*rѝ%gB`\} ٯ`wy ~.9^/r9{뚐 Bn]D1~K׋\xN2 !qNdt}K]rη^WY0s{pr%0߹sY!rkpp%0s} BJag?q%|k?}s΂@k܃+ \uEU0!o{pr%0y볟s " !ĭqN&n}=r^".Bik܃+O>i.9G!.rk"(P=8B/[w9 q o[rBakȑ3 [w9 юd BZ\ LghGxN!Dq $&j}]p@_s`r'rA]rA\9 5ɕ ~кK1y"=8AYw91a\jָ'W2S>5.9 .r`BJabg?f#祬/rѺ !qJԲ>M췬0zA)k܃+IYuch}YrA!kȑ3Yw9qVA!5ɕd~ƺKQy\"ָ'Wr>.9!9>Zָ'Wr> .9!Up!`{pr%0sbuBW\I!L׫Xz*Ю58AvoWw9.- BJag\u0tn?j\+uOӭ>.80tn>j\+fa+L>-&c)9Y`"GC?Z%E. 4qNY}]r>\9Ad5ɕ$~Kч\<'P=8>b/Vw9p O6A`5ɕ~Kч\&Ы=8?^Uw9p rո'W>.9G .rAlAj܃+UZuת޷`bոWU&V}c]pAt> !q dU}[]pA_s`r'rAS]rA"v P5ɕ „~K1\h`BJa:gS%E.4]0!S{pr%0곟s |6s BT\ LWůAj܃+TJuc v H5ɕ D~K1\h`BJagQ#/rsBJD~KQ\x>w!TqNR}+]rCL{BTDq~Ku)<;ո'WrӨ>.9!|BHT\!L'\CpP{pr%0_s"BT\!L\hkBJagO%:D_[Ը'Wr>y.9!Z*8P=8C:ٯS9mBS\N}:ٯSwɹSp!N{pr%0qsJԄr'rC]rCZ)8=8C4OSwɹ@Baj\+) S0uG,'58A,RwyqOr@Qj\+ R(u')Ф=8@&oRwyѩ{@Ij܃+ IR$u')P=8@LEKɛ\7'Ƚ?Oكs&r&C(M.P/9G.-\A f™'%_~s\Z =8@\S!Wg&|9rip qM-\Q ɛ\^_~s\ =8A\S!W4gI./9G.\A!͐+*3y C8{prvCM.8s: C87|.Dp&rNCM.>K;c)9!8DJL>_\%J}MFsz||N0|Y+{*84 \šOR?@T\/R?R?T\/R?R>T\R?=T\x$ߣ~,'CG}My'I>GX NvJ2PQ;OpyWRɨCFL>E/8N05FL5c3[e3g̡ڢv&ӑ|l5e̡ڢv&ӑ|l5e̡ڢv&ӑ|l5e̡v&ӑ|l5e̡Zv&wl!Rp9TBה1jڙ|!vJЌ9T3\|'C>Ca6PP;Opy\BXNP;9pjg . Rr:TהQjڙɅc)9* kʸC5ALs|,5e䡚v&orIp>AXJNJ2PMP;7,XЇ|ك+bv&g|v&r܌=T[O?r塒O?r7T[c)7*kXC5;L>N?r3T[,c)8Y*k(C9L>g1\Vc 3e3gZv&s|p 5ev&“|o, 5eڛv&³|nl 5ev&|m 5eZv&|l 5ev&cdsĦ)cش3y Rr;Tjהqjmڙ|:r;k\Vڴ3 M;kpp%w،;Tk\c86Lw֦ǝURp;Tjהq0J&c)8`"θC56L>ҕoM?ݡҚ;[ӿ?>s!fK`jhڙa3MO|῾~ BQ 9Aig"D7*G/ "f@#t ޢ rPD~~:Gbog A, 3#h̢DŸWsԄjڙH܍bs)N"^zR `K}MwsQ:.ᛲjBP5PLs>&PCD~:G5" AAC`3#h4DF FW;kp%#ٍ9h$3.(I>` d7JX:J2w^'ɇ58I!AI]p|Y,9ntdN[;kp%'ٍ9̝WIkg N$q~:E)]KkA`>tA VBהq~:Gq% ~ GPp5xL's'YA$jڙ4N_:NL!8I> 0N`:NLk!8I> 0Na:N3`I$ v$K'ɇ58IaAI Nd;kp%'99,sLPp|(Y,9atd8'58IA} OIlg Jξ9_} Nh;kp%'yh?=Ls{HD i;9I!AIk3$'Xr8I?#8~uAIԲ3#h_td5$vKNr''s'Y='ɷ58IAI{DOImg N$q~s;Gq5BSp|{Y,9itdY$v+N2opgx a>N2 -n\ĉv[t>8}dܸ'Xq4~;Gq7wIhs`I&mAI5z%>N2 n\8dSѝ#8ɶEMy'V7 Vd2tdۢꦏLB+N2fov:Nmѵ#$58L=9l⼓LB+N2ox:N>N2 -o\8dZS#8ށ9}d޸'XrMA'} Ip!kPdS?#8:Mo\,9|Ow$LoBPp99IAIwIpkp%'1$|i''XrAIcX0Kp~%#1s$>rW9?#|nXY@ԑ#?Myp܂,وɃO9" dD(`IFLa|sisx.R'XAF485AG8 t4ǧ~s F"q Nd$&G>s9m.9!((%ljA$.y$mgAI@9 ʧ~G< /$v\,)IOvkJ"(n58v4n$ J"q N$>G<n58v4nq\Iv$q N$>G< B}%XjO>G< σB}'Xrn#[xF-'ݎkp%'1iݎ?I0>''Xrn#Xpݎkp%'1iݎ?Apfv$q N$>G<N"'ݎkp%'1iݎ?',7,˿3 #E"[5Vo!2JG$Sf$l?ؾ[Udyn\B}'rnAnv; Ĵۧv;N:nv; Ĵۧv;AShOBנCɴۧv;A=v$q N0$>%> v\ 9iOv|A▐nt;nĤۧt;p J"q N0$&>%It$q N0$&>%IH`HIL}OKbAIt; Ĥۧt;A+DH`HIL}OK}퓐n58t4nǗ8t$q J0nL}OK'}IH`HIL}OK߃B}'RnAc!> v\ 9IOv|qKHOBCNbx_  IH`IL}OKbIt; Ĥۧt;ă`\/퓐n58t4nǗ84 IH`IL}OK3(8n58$nOv|wFt{#}'CpI%vw6t{'qdi<ݎ/qދnOB#NL=%v$IH'!ݎkp'I&ݞA`$!ݎkp'I&ݞABIH`IIt;N5د$I(`DI)r;7$q 0b$Ʉx_b>c! $q N0b$Ʉx_ ]IB= v\  p;A}I`(ܞL=%v=p{'2nOv|w]! $q N0d$&ܞAVI`HL=%;nOBCFbi<܎/q>KB= v\ It;Np J"q N0$&ޞ;APoOBCNbiގ/q''roOv|PP!ߎ[p!%14oǗ|{ʷ'oOv|{eKȷ'!ߎ[p!!14oǗxtIB= v܂ ɷ|;}rcIȷ`GL=%$q N0#ߞA\P'ߎkp!14oǗ82B= v\ 鷧~;A?|D`GL=%Ɍ#BC>biߎ/HoOv|oOBנCdi<ߎ/q|{'2oOv|oOBCJbi<ߎ/t߉z{2SoOv|F,ۓo-8x{KlQAH'!ݎKp~!14nǗxޠ#r'OKwAGt; tĤx_ 迍:"q N0#&ݞA}D!ݎkp!14nǗ $q J0nO&ݞAGt{'nOv|N"ۓn58t{OK[t{'nOv|{yZH'!ݎkp!#14nǗ 7^ $q N0$&ݞA(DH`IL=%i!ݞt; Ĥx_ ~)ۓn58t{OKwIt; Ĥx_ znOBנCdi<ݎ/qtXH'!ݎkp!'14nǗ ft{'rnOv|{>(ۓn58t{OK߄t{'rnOv|{>(ۓn58t{OKA!ݞt; Ĥx_  $q N0$&ݞA|Pp!ݎkp!'14nǗ ٌ$BCNbi<ݎ/qtft{%J'nOv|{6#ۓn58$eI%"8RDA$v|{>(ۓn58v{oKAݞv; Ĵx_ $q N0$ݞAnOBCNbiݎ/|)ۓn58v{oKIv; Ĵx_b'XIv; Ĵx_ $q J0nOݞ;znOBCNbiݎ/qtXh'ݎkp!'14nǗ8$B= v\ 9iv;A}'Ih`IL=%;$BCNbiݎ/qt $q N0$ݞA׋v{'rnOv|B= v\ 9iv;ă.#Pn%8r{/KNjXh'Ɏkpx!0Mtd2S3;<}kB= %v\ ؓ);~a$Dq /d&ž#^0w_OBBa龿N5 c $q /d&^0yau\ :0w`BpBa>N5 cՄzbR [OuJzϞBhBaB>N5cԄz" YOuJ!z+XX=8edXuBOzޑz}&CoD3p>8 a,qN/ل}Xky\#7 Q,DqN/"D}Tk\#4T=8idTAuJes~BL"ML=)j=,Yg!{pz&C^5܏3PQBE"ME=W)k ,$ԳP=8kdP uJn, ,qN/}>k_5PN58jrz/3xhz]{Yg{Pzjz6|_MZ_B1= t܃ )b:R}sjY^H5L-=)j, !qN/K^K5?r*R SItJ/jB!= t܃ )B:R5::T}kFq/g2:TÔ}kFq/g*:TT}kF/ I,$qN/&^’zrʡgC9t Ż% ),q /d&S^4j_{=4:N3qAZQkB= t܃ i:2_#Y^4L<)iT>BBa}NLy2 =sJeտF 4ϳ<=8iyoSz-Ө?rz2 ;sJePd!v9L}ktwz+γ:=(PrN5]}`xY^5L<)kd\C^5L<)k+6=8kyOSzMpnyr 6asJ}B< Qs܃ 9t S !h9\}Мk3BBab>fN5]TCg!d{pz!0!|2g =B< s܃ E̳9t B< s܃ 9t B< r܃ x9t .!\p9\Ä}k-BBa>ZN5],BBa>XN5]+BBab>VN5]c\5P9\Ä}ke !RH9\D}kK ʳ(=8k@y3z6NY^(NM<)kB< ar܃ 09rտ@g!J{pz!0Q|%ZA,qN/&H^5V^!F9\}kK ȳ"=8kySz-X{ y"r !rJ/ BBa>@N\c%Y^5L|<)k=c9 ,tq /; ^#9YH^(9Mr<')ixjbD L)+Ͽ  SqJ!ɿHg2{pz!0|_ ,qN/$0 ^C47 A48D}]kF}oY(^H4LY<ߗ)h p܃ӋlZP+Ozޑ; Yh^4f Z8}~ӘV8ELc6y=eZ =8i̦>q1 p܃ӋlZP+Ozۯ =8j̦>q~1 Yh^5f Z8}"T,q /ICp>McR2 R8T,qJ/ M*|JIR᳐ =8iT< 铞+g!{pz!0y(=^YHB*BaRP*Oz+ =8iT< 铞 !qN/d&>qzW O kpx!0yuq=g2᳐ 58gL< mZvB&|2ʄ&>eq5g!> p\ YɄCp>VJ,Tq /$>Uqz7"r  "8[ybp\ )iCp>'B"|2 8}sOB,q /d>q$ Y^0L | oOU2 8<0<8 <8N\=P5(P|6uy qp܃ ICqp>xB| 8ӛ]58e6<B| 8} S80,q /d& >q ]Y^ >.<~r=8f.<郞.84t.8N_{B| 8}\A3.84t.8N[.,tqN/ >uqg]p܃ yC]p>G BBaPzcmg > ]p܃ C]p>GBBaPOz+tg {Pz.lPwzYg! > Yp\ ɂCYp>ǭP*8LT*8N?囯B UY^4L|ILC^4L|ILC^4L|A},Tg {pz!0Uy '=LC^4L|I?r2 S8}s8 YYȂ^4L|ʂI=r.,tqJ/M|I=r0,qN/ŨFR >j5ғ]& I?rr 8}\508\Ä08NO50,qN/& >qkap܃ Cap>GBBaPzB|r 8}\508\Ä08N#WBBaل08NfѶB|r 8}s\! > ap܃ Cap>GBBaPzBBaPwx7> ]Y^H5L|ITC^H5L|I'=8j.<郞@BBaPOz+=8j.<铞{ ]Y^ >.<郞@BBaPOz+g! {pz!0ay( '=TC(^H5L|*N#೐=8k4<铞 !qN/ >qkmp܃ iCmp>#=8k6<铞 !qN/ >qkmp܃ iCmp>6,qJ/M|jI=r6,qN/ >qB|r 8}sB|r 8}\568\ô68N#Wp {pz!0my =B|r 8}\5:8\:8N#Wp {pz!0uy=B|q:8N#wP==7z#'=]:"qN//Cup>wb,B|q:8N#5{pzXL|I?r]cq:8N܏s!qp\ËbPxE/B"82铞"qN//Cqp>up܃ӋbPOzۯ=8j<2铞{ yEȃ^(<2郞$Eȃ/BBaPOz+!{pz!0ye('=TCȃ^H5L|ʃAϽyEȃ^H5L|ʃI?rr _8}\5>8\>8NKˋ_@8\—@8N#Wp {pz!0e'=\CH^5L"|JAϿ,4{PzFbP#Oz+D!{pz!0e('=*P =8kJ2T 郞%EȄ/B&Ba2P&Oz+ =8kN2 铞 !qN/& q*${pz!0e'=\CH^5L*|JI?rZr _Z87?_8XX"qN/& qB-|j/ qB.|rr _r8}?rዐ =8k\2 铞 !qN/& qkp܃ Ʌ/Cp> Eȅ^5L.|ʅI?rzr _z8}\5`8\×`8Nsb"qN/ qkp܃ I/Cp>G _f8A酚i/Cp> Eh^5L3|jI=rf"4qN/ 5qkp܃ i/Cp> Eh^5L3|jI?rr _8}\5f8\4×f8Nsf"4qN/ 5qkp܃ i/Cp>GB3BaP3wzEh/B3B4×f8N#W/B4BaP4Oz+T{pz!0e=\p܃ /Cp>GB5BaP5Oz+P =8kj2T \]xjp\ /CpWXf"4q /d 5qz6W翼 r2'Jz38} E(^3L1|*I?r S _8}\3b8<×b8NB1| S _8}\4b8L×b8N#WP {pz!0e=[VB1|r S _8[ܤ"{PzbbP1z'BB1|r S _8}s5b"qN/ qkp܃ )/Cp> EH^5L2|JI?rr _8}\5d8\$×d8N EH^5L2|JI?rr _8}\5d8\$×d8N5d"$qJ/ _L2|JI=rd"$qN/& %qB2|r _8}?ዐ =8kd2 铞 !$qN/& %qkp܃ I/Cp>kEH^5L2|JI?rr _8}\5d8\$×d8N5d"$qN/& %qz ዐ =(P2|1e(=Ԅd"$qN/& %qkEH^5L2|JI?rr _8}MMH/B2BaP2Oz+ =8kd2 铞 !$qN/& %q盚 _d8\$×d8N#Wp !{pz!0e('=\CH^5Id8N\S+B2p܃É>z78}"$Ë =8k /Cp>yGnEH^5Id8N6."$Ë =8k /Cp>Gnk!{pz(&^8}~(B3"QL3 5q>"4qN/4P3OzEh^5if8N#5 =8k /Cp>^f8\4P3Oz+4Ë =(P3fxjI=rfxr /Cp>蹟 ^f8\4P3Oz+ =8kfxjI?rr /Cp>ז /B3Bae'=\Ch^5L3 5qkp܃ if8NkB3p܃ if8N#Wp {pz!02 4ydxJ /CpM"ËP 58ibx*+ËP =8ibx*I}E(^4L1 q[P /B1Bae'=LC(^4L1 qip܃ )b8N{P /B1Bae'=LC(^4L1 qip܃ )b8NSB1p܃ Ë)b8N#W({pz!02T ="q /&^8}_^xz2 /Cp> B.Bare(xuorEȅ^H4L. q !qN/$&^r8}sO\xr /Cp>F\xr /Cp>G B.Bare('=rEȅ^(^L. q_rEȅ^H4L. qB.p܃ Ʌ\8N#WP !{pz!02 郞iTȅ!{pz!02 ^r^\xrr /Cp>I/B.p܃ Ʌ\8Nw 5\8\P.Oz+ =8k\xʅAϿ"‹ =8k\xʅI=r\xrʅ /Cp>G /B.Bare(=KVB.p܃ Ʌ\8N#Wp !{pz!02 铞 !qN/&^r8/ "q /^j8"q /d^j8f B-BajeŅ'xP 58gZxނ!‹P 58fZxp^Z8AjP-Oz[P /B-BQf!̀铞{W͸YJO g4c=_҄Zxj S /Cp>GB-Baje'=GB-Baje=B-p܃ Z8N#W{PzZx12T 铞{ "qN/^j8}!‹P =8kZxI?rjr S /Cp>GB-Baje;Zxjr S /Cp>GB-Baje'=\C^5L- q_[jE^5L- qkp܃ Z8Noj"q / /&^b8O "q /d^Z8ëB*p\ IT8N…RxJ S /Cp> "q /&^B8}sE t‹ 58eNx=U2EȄ^H2L& eq矪!Tq /^*8[w[A1H8DP$x`B#Baex7 !!^D8A$P"x<^B8 P!wx?B p\  @8N O0 kpx!0}2{'58ayWPBBau '=TU^ ^MUqݳR*x2 SCUp>yAV ^*8TTPOzޕ*TP=8k*xN}XRU^H5LEqZBBau ;<*$58h$xJ ^"8<PxBBau(< C kpx!0=:{wrzU^^Mqoɮ =*q /^z8}rR C9p>oB 5p\ ס8N7 !^8 P xa-*q /d^Z8Û݋RB )p\ Iס8N<08 ÔP wxd!^8 ÄPwxŇ'58ax'd5(P xʀM|U^ 8 TPwx{IJWkpx!0:TɷPBBa*uDZ *q /d&]8}߸2 SCo)U^0Lſq瞪*q /d]8}sOUw߸2 Co>๟ *q /d]8?U^0Lq !tq /d]8ÛyB o\ ~ס7N\=U~^]MUq^U~^0LEq *4q /d]8}smw߸2 Co>B o\ )~ס7N B o\ )~ס7N{Uw߸2 SCo>ﶂao\ )~ס7N-w߸2 SCo>๷[*q /d]8}sL~W!kPxw5:gB o\ F1Q xm g)<0`17Nw[]7 ԾPwxB o\ }ס7N?'w`BBaZuw޸2 Cyo>w޸2 SCuo>Bݻ uo\ ս{ס7N\U{^0Lݻսqz(ԽP58aw{'ԽP58aw{PBBau<3]7 ԽPx`BBau;yV uo\ËjPwxy^7E c5qu(<7Uh{^0V^8}. B{޸1դס7NOV eo\ËjPwxo58a&q7Uz^0L{z5 ! Yo\ eW^8}s UUz^0L{z=Iޫ58a:UhzBBaPx<07 4ס7Nܧ[B{޸2 ^8}>]*4q /d5qa!4q /d5qzflV Mo\ izCMo>*4q /d5q MUhz^齚:kB{޸2 ^87 Mo\ izCMo~窬B{޸2 ^8?=ޫ58a:!58a:!58a:;O0 kpx!0Mu;oaMo\ izCMo>z&4WkPxjPwxGB{޸2 ^8/ MUhz^0L{jz=ޫ58a: !4q /d5qzW{W Mo\ izCMo>`BBaPwx3 Mo\ izCMo>z&4Wkpx!0Mu;'58a:n+4WkPxjPxGB{޸2 ^8}sVhzBBaPx^7 4ס7NS Mo\ izCMomwτ*4q /d5q MUhz^0L{u_|| mȻByD1NțCto݄r'p݄*d7!&Ɖ.b&ٽ:{bRm%(P{5tb( C׷qnBLP9΍}Č*8qnB "7!&\Ɖ>b"7!Z0fo3܄ r')p2܄[ Ӹe*O<:i¬NBpB`ӫ&Z6W׷iL3}̌8i¬B]B`ҫS&ZP] X Ҹg^4an-i\3 iiINK0kidU!!kpf! 0 IHf- (  q ,:h¬nr] Ѹg^`4aҀ*hЉ58Nt5f:myh\2 W^<4a֖M kpf! 0UթBf- ony& c8h&Z޲  4q ,: h¬ .BB`ϫ~&Z  q ,:g¬&Xy%8d mg\ 9i;Nۙk8T  q N,d&輶e']s&S9=6pZֻ4,)yWͶk9MH7 Na O~?xW;Gn֘Ӛ[.E,`3UnVK~-8lܼ <;^Rvoyٮ5f p /)7orώ?๷so3/͔VYgKZv1Sx[pxSLykxv"w\8f[+ܬ%U2v1Sx[px}Lyk x\5<ZAZ 6lZ7]x(]~ۮ\S_)Lyk%%|;>Jv 13|BBDVYÇvOKۮ)fO 9ی}^>uO 9܌}`>Tսm)>A1t3N3J7kP2Ż>] r'hś5|➸\r'ho˷.@Tk9r'h%U^ܻ)@73N48%kCN9D@ akC9D@sZ9g =S?@![Pf[+l@j8H+l9{_s r'iU- ,,D;D@c! !!< 8xH+;\CAGofso }g܂ );os7{v 6Sr{qg#gܣw&גZk8GHGMa klC:D9cs7fߙخfJN ]Lyk5{N=w43rBBAV'r__t9ђ{V|3VMh9[H+Lyk{ps-=hcN[@o` !qQF]bvAS r'ihBKyrۧr0AJ3N3Ш4S`vd[`effܠQfO`5ffQcOU` ffLQ`̽WSI ru'hT)0;%7p/q )-o2#;0O`B]BuԕF]#;0,?U{ rQ'FQkgW(?{ rE'sFE/~Bkg, d܂C z֨'ڿ|Y߿3 'B4B'&5f?k~, d܂s ^%/X[ (m΂ d܂C &onOkYp![p`!0䭑M.~xɸrSMd ڷYp![p`!0Mf`d"L-(P3y3L.P\\ɸrLd #@O` df\QLPsE![p`!0LPܓE[p`! 0Kg5E8rɸ:7䭑K'_$ɖ"Q-8ǐ߻Iz9sI8_/w_~E+s+g'L.AiOVē7'? n`^ȏ{hOƉ.ha?ynK'|5D.Z!KP`|f?<.)xVI4?@&T贿P~׿} ׬7Drby?L3XMމ|J-%̱ gr:'L'bٿRvi"sldfɽl%̱ & Gq1(ʰ7KytL88̜cBg`>oo`JAGÖO΄2nх% ||ۿhI7=#U}`SYVpOF6 r]'虺u ߾GrK5yZ+2nA ˛),oXXpWת^𸄓62Na3^l c5Kw-3ˏ7M^e`,ȕefd+^}R,b\eǯ>8_&XCݯooH83_)&/W=rc SWް{C̎I2N13u7/.783pw\Lby[px?io op ]Ljy[vl^ekr^o3L/s87-_M_]|mZ]n˛.o]VϽ`y*Sx"fg <8A?o׺2'\bƉ>xFĬQֵL 7ql2+^`r'8x+8Vx-O"B5D<kVb[nU@O 9܌}\`Yr=de z!'q L8+Z短l=A23Nt31 c=)ӕM !X e7u0kZ⟯lf"^H3LyBr7Szgȩgg<S g,&}n,BDD7>_?^~ /_ύ-(i_o}W/?-l0?MB  0?7r5$>F12A1` z>c{7= {^~w.1FJ&|Y(AG,$a duw4ߴ6B B&aRo߼ iиGЇmmd<gC|{;],XpkLq 7nng͟>nXs (c*n ?|xK[u|~?YJDlPnohL=MS${YJAN3Z޾ӌlȁt8G}[u;AcNC|͡ŹOǭ[pnV 78E_vnǭ[[pnA!xLV |_n1hl\ 7.n57J[4_m3ܜk>n݊؂sm/h6{}?ƚsc ܌&`ܹ|QOg7A` ܌&`չ[짿 nn0|O߾w}鍗A:>-q~ 7?ZhLtd1 RC(؄vnLA4&ib7SxQOA/rz >z',kwGɧ`jֹ1GXfEz X}zU'tnL3nMg^26*,C :7&otYe Z]Q 7F7_xC͍S{ 5_j >U$BM47&~֌N`\^ټƖ)6(0sc 3b365L }،?`?װ2&anLa3ƀ^lpݽ-,6AscQ,0b6*ӛ2&8_nLa3+wg"pve7 fFOp5ܘg"=8;߲oXo2̌j1G8f/rSM@'XanLt,=f! ]$2!+6F&g. _bnmAmap SkiA27&*s?Awe ̭-(Adcfp:4֠BD`jD_rFǚ[[Pp!F#0|˷/__  Bon-A"xs`C*܏]1`)q 96ǰu`+ ;6ޜ ~{nAb6~+/6f/ϭ%H1eըYPtk .o#aװ ~>ve=D;c؃W7",8Fr85ýn? Zb lxw Τ{ Xq`A?^FS6uc lU(5 xr}Ҟ߀-8qlUKa| ۥEMwhsxO.;Jwlh`Oy@A;` 0UbyxO*>0vlȇЏKƚ*F@0{lKКß{ 6 %p [pC!6,~ [p>1b#?~x {Nz%0vc jr0cʈe~-q?-9?E4vc_5il򒽦ٍ-(H"1e42 &}`+[9?ADhvcfZY'xnL3 m_KCw j~@QjZOݘg 2o }`o[r?AvcnQWvc /e~ +G&[^zMK7_7!\Ӛ- wc 0~L a ŽQS܍>@0}/}˻/^>In5^izvim6 rD܏)"l84.mRݘCi+_^fR}o! n{セ?t i pW.$#HUMb;+u~67rrD܏)!'g'wr7n99A@4wcHT'9KjCr7&r!EO6A!ۍ58BlF! J&D25 ?X fZqM(wcN."rO%'9/=9#7rQɃ{dzIs\D &枠YO%{d9~=8@L=A\K B/=8@L=A\K W~V7Eb2 Z5= $ԺqN.")uOЮ'U &׍{prL{zu?A &!؍kppL{|u?A_B bݸ1Ժ'WkD bݸ'2랠`M&wr/翹P=(9#g ZQJM`BBaTɵ ½Ivĸ98A ` .$&=A\K &A R7Ʌ”'HUk DuT$=8@<~r-㦧I!͍{pr!0i ZQWtnBr\H L{zF' ;-k9ErKwӥ R!q OZf2O6'Զ'NZzo^ ڞ :{RЦ6AD>D#р=8h#ײ%  ٞ6-kG@OX )lO5^\)pm\ kOЙ5A86酄ô'LOuO B\BaEzGºg|E kpz!0U "sa\A76t4'(Ku =W kpz!0E =wy`BPBA'JZ1_詂m=m܃ نiOPlcsIds|n9mgt"nW{BMBaj4E|-ߘTA86Ĵ'HJZ1_q-m܃ iiOPcSRڸRҞ (-k)ݧ !q/=AOZrx:UA:6Ä'IZ1g͂tm\ IhOВA=i^ڸjhO=AHZtyCh^H9L@{xH)% !Gq1E1pl\ dO5=a^ٸ Ǟ8v/o˫B-Baje3zMpOW6b6l'Vf-ll\ ɆfO5eU !{p|!0쉥v?glCg_6L?{bl^|BDBD'f!<2&P=8oJ __)>A86N3r _3_ڸ2ԞXSkv|BXBa k3|8^roIڸrSמX]k{tChl_H:Lc{bmKuM{p|!0퉕u_`z۸۞XokZGO\۸dۉE;qIO֑6D?y'.:=8u$N,5StMpSzҁkpzH&XkJg958s$N,5{HOʑ7E#wb)nFFq$!ǍkpzH&ǝXk/IHr^D8Ir'fZQǥ~HB"‘L;07>W)= Gܸd܉pQ~HBBa݉5 f2Mpn܃ u'fZQ{< !Ժq/$֝Xk G)YߵM !7q1fZQoCw_H9L;p7RR}sn܃ 9w'Vf.Ipkpz!0 ތ^ѷBBa*މUok-BBaJމfFCy^8L;7LiopEo\ )z'V&YoBנBUdީQ_߻^O5=-`r'@hD~!sy١umK'&ȄƉ>bF&bvhVX GqFZ'Qec8G(C#ֽ7?w?;m[L9э}$4;?7rqّuZ˩~垗r'x-0_߼??>tkY/Ce'~~E.X>pn١Fr)5D?5s%O'ׯ.>;<$9]+;a Nt3==7o0<7]#kܸ` s)Z^P-8>;яψW7n7M{xgBտ}?퇏JZ qtԩ;pّZS7imK9Í}@ӛ6%ȁƉ>\FC3w}]jvCvcv=τ ry'I u?7;sseMKqAnD7c Рf'wn*pAnD7 P~ˇ?^>R]䆥5RIHp#&Ý ID @VHȍKP0H <@m R X 넉t'VGAyt6)HA-` 2ٝ_}g]07n"q *v'SNPp>an !'q W_t9`?Ϣa?m'؇\Ɖ>x> aCq5n OP܍}@=/o衉ϖI$w]/ n\ w'HYGR,7'舜Ɖ>zFG g-C/\ܔ`!r'虌wJ^Af7.ARɤdzևVCҵM !׼qQ ([P1fHF)7]c`r'ۀ?P4׸J !7q1 H[ݫ)A\R/E<%[N 9ߍ}U@ E0,%EOi Wj>{psfwxk;iB` hW+N5M .kp|.>!ೳ>*@I>&` /v'W+wMvS|Og >;{s58>;яX|vHpvS|Ogo߂ ;>{bj7;ݸ= Uv'W+νwMvStNnCgt \ZzݸG NЭVе4Ty !Ǻq u'hV `@Z5 n\ u'U+Z_3F):0H7N3v7x_Υ =fWD7n1%/iIt'(UZz^` BV@wN%5M np /is'Te0 7Xm#-PDP.w{#?b/ȩmf|o%`xu1ZΞBewB`* j-p~=xxO=カr5(Pg;v޴ڴslO}7@qZq֯lOP}:@sZtׯmO}=@uZxWׯ mO}@@wZ{z޵M 2!q (OP;?Ѧ8ϸe~;?jM !Wq1 OP:Kה6'Ɖ>~F<>-kO]Lw;A~Z/psM!kP~v2i_?f۸SNcq\sڔrz'̯=۸NOlm\ o'hPZQ/B}Ba "2MM!kp~!0j_?(&58v ̯BBa :2wKmn\G6 !j;O7D|板~B"M;CZ;ײ6l*j2lK~,tq /t3e~-ؼY(q_?)qg(RZ>1?GZܸlZ2# -n\ӋG6- Ij^>c=%8{dPnݿ|k{P~z_{_=iqgHRZ̯هO̍kp~!0e j_BBa*?x/ !Թq /TΦΝ!]-k[I!ڍkp~!0 !k_? uf)??7N3Yk_?h|NAo\ zg\Z~2'?73De~-XWI!kp~!0 l_?VUC_?L;C[WKpz!05 &/~k~ !q /$& !kG{rSϽt}z@ [2^9Ȃyep\ gHd|oOX g삋ZޑYkp|!0p_K;f7 !tq /.kYf:8t3vE|-w^A:83E|ĥ!dq &丈p+Wڊ`BvBQuA+mE럥d뀉>|:09.k>ʕ"X58ux丈ao>98.ᅜ3Ex pO`BrBars׏.+7 _Yȋ,1l.:;@系|_ B_?f!0}}7?{Q 8x߰]nvk1rBD7SX_??<~<^0'}S_ 8@q3?z7.6;'u-g!(kpr!w0AAt~Ǘo]|v/=oL=>` /&)1).>/ w58;xƨ\s9>` /d&+1+.>R 58?xƺq6! N!q 썋@*v|O_ Z!q _~߹,T j[Pn5==r`x˷/_pJu?Ƨ?YH0&M1M o/|F>I.kG >A>$9N3Ir7?߻?R|(q 1$!L?G*!A;pP!0 !} NA??W?ۃJVPmrFONwrk#AD9P'g;9$upJN$}5@O(_ rC'av?987_r='Gv?98Y'd8%'H lj>rFOr( 8%'8\ lj>r!OٿsBh7BaZZ'hB7"1J ^r8ysSCB!}&C.8y86?;,{PrM|>v?CdM;DcJ.iP'r :,JzuG R"-jBdDE";Xrqۿv!P's*L A;O9>U]ф8#$Wqf: jyr!w&!C4SoPΓ>O]ф7#$Wqf *yr!ra o2GH͔C {.Mh~9Brhݠ|'G½ө]ф7#$WrSnмNþ{ְMCo2GDnݠv'G=&!7#$WrSnйΓ ۱Bn{9PΓV$8P&sJa yr!gIpMɕTChBɛ+9)y7YQBÛ+9ix7(Y1hvmBw9Br%0 <9=&!n7#$WrnPΓc38mB(v9Br%049ld?sBhu9"rVw3<9?3 !T!CJwVus6svHNpύ+rC@:O9D̂Cen2GHݠO'-ޙ6 !4!C&w2usF-,8P&sJaj yr!pBp9Br%0=<9YYpMɕ4C46 !!Cv uuf!6#$WrSnN{Ku[d\)LtA{:O:uBm9Br%0<9c>;$'89r!8'GbEpMɕTĦC *8&sJa :yr!3ՋB[+9ik7HLQϷ.CYm2GH&ݠ.'G?ߺ!!Cvtu7!6#$WrnДΓ!6#$WrnNt\6!6#"WJh7nPΓcMpMɕԳDCt1Bg9ЏΓcMpMɕ4CtaBe9Br%0<9ݿ !!CPv\ts5lCl2GH& 'gpB+9c7HD1&8&sJa yr!zd\!LA:M7r}_]pMȕZʹ$C!B+9`7AQC!9!6ȑ3!<9nzu!5#$WrnЀΓCk2GH{ 'Gb.8&sJa yr!38]pvMɕԮDCv!5#$Wrn{ΓCk2GHq 'G}r_Cyk2GH&oݠ&E'rB([9"ru3e<9Y!8&sJ1CC'rY!8oCrC9uΓc>ڵ A!5#WRSnt΃c 1.!5$DWrӱntΣcqE^b=*d]I"LźA9ICjM ѕ,E\5BԚ +iZ7;1s04d]#LӺA9y{SDBZABt%0Y4:,K?sLBH\A"tu3<:fWtJJk2Hq GT=frlVָ"θdKUp lM\”KU0 iML4I? BΚ+Y7:QG%k2GHd 'G=?J !D!Fus)t`B+YIW77Q !!C^uns6MPUMȕZʹ4B|s;ո"GAi=vCr@ȍj\#gRyrL V6 <5#$W2nPiΓcnBej2GHL ̜'bmUP!FMɕĨQg1XSB+)S7S1X3B+)UrW>sBj2GH&Vʱj\L?/ԪP&Jajխ\ƕѹG6\urd])WLsո#:ئЫnB +iUrW~D & !G`u+qGtPnB +)VrW~D &$ !Idu+'qGt!Y݄f5$DWR Ӭnf5ε0!Z݄h5$DWr nh5|F\BV9Br%0VV'r 9B j2GH&Zj\L *!D!Jth5|&B j2G@WM\$p39{ .D!Hth5|"y;.D&s*MոwD]V9Br&Zj\L[Dd\"VrWmw .D!Dth5|"хh5#$WqnսƕOk!&s*Mո\syB8D7^V'r.D&sJaսƕs_Vw!ZMɕDo~s{#1_vXQ}'D~{ =#Jn W';_zKj\g\‹W'sD3ָ"GN#N1/a =)53NEWK:CO 9d+RLȺ{!=@u&sDJ1nb݋Y'/ =/53~c\;PurWIz3K:CO 9l+rg`go7_7/\tD4Ԫ3ѐָ"Έe:Y !mMѕ,ä;b\\Ød\0Lںc:OŵY !mMɕ¤;Z\|d]I-Lۺc:yY !nMѕĭ;ƭXΕE nMЕԭ;֭Q\|Xd](L޺c:׉furWus"&sJ.ayt%NjB+)\w,\Q/Kk2G&q1qGG]¿ndBh\9Bt%0뎍<:z 6!D!Muu]*d]&Lc:ĉ.Mk2Gd&s1sF:Wtw]lB\9"tu7뎝<:fM !tMѕl„;MΐdB]9#Γc21Jd]I&Lc:nMB隌+)]w,]1;{\BH]9Bt%0뎩<:~{ .!!Kuu\B]9Bt%0뎱<:1&P&sJ.ajkyt%cMp !wMѕ\;X=Fzd]wMc:+~?C'9t%0xG\bbA'Ȅ\9tF&xGdb_.Ȅ&sJ2aytL& 6!4!Muuſ' 6!D!Muuevu] zMѕlT;VM,lB^9Bt%0<:f(.؄н&sJ6ayt& 6!!Muu+_Ks &5#BW*_wSXΣ6CC !}Mѕlbuw`/A'ȡ36<:j;lB_9Bt%0<:jn?&5#DW SXΣ6_3d]&Lc:KMk2Gd~ݱ~GlGN`B+ل_w_1h&5#DW SXΣc6|Mk2Gd~ݱ~FWtU ~MЕԯ;֯M=# 6!ԯ!Muu?hA'؄\9t&~Gl5nlB_9Bt%0<:f:&6#DW SXΣc6#'`B+لI`wL`1h#(W&6#DW Σ69Y"d]&Lc;ڄdlB`9Bt%0<:jU Mѕlt;vX{oLl2FDݱ'GM6A&6#DW ΣOt:y 2!!Lvv}SwebdBHa9Bt%0))<:& 2!!LvvcN B +Ʉawa1辇mL5l2G$ݱGdrd]I&Lc;?+M Mѕd;b]zd]I&Lc;o?zd]Mc;Kzd]&Lc;߃ҸΠlBa:cΣc6ۺ] !Mɕd;Ld\Ba1Br%055<9t}\Ba9Bt%055<:_xjd]%L c ;:&B+awa1X{d\Ba9Bt%0==<:`d]% b bggt/]bEl2GWM]%p3:O%CHb9Bt&=0GG]bx?^:ty s*.1L{`;O.Chb1Br='G](K^&&s*21L{`;%/Cb9Bt=GGe}ָebYl2G"dfLގx\21.6#DWaytT&CN㒗!!L Σ2sL Mѕd”XOLil2G&=0GGebI Mѕd´L]%xA'Ȅ9tF&0GGebw7'`B+لccQ$؄&sJ6ayt&ۈB+لiclc1˜B+ل c c1/w`B+لbbB5c:ڿPBL+Ʉ)b,b a7 B+ɄaaF8;aB +Ia W%GTb#NB{l2GH&= 9b䖈B+I` }F =5$DW2 ӿؿN#"qE7{:=5$DW2 ӿA_}碣:N~M<ԯGP>G#9rFk\#g4"_:w/,ԯP&sJa#_:*X&sJa#_:PоB+Ii_}}B{LH_!}MȕäG>#G[u>8!5#WrA '(&cJ a#^\'d\ Lz3rk0!z=5#$WAڵVy=5#$W2ӼA=#$&sJa#H^[_s@k2F$&x=8z-'&cJ`r#]c4bd\ILzpu4Rd\)u=Lz3p[B蚌+ك ] t}ك{#:C\1Bp%{0t1{oc*C\1Bp%y0T1yob"C\1Bp%w0Dѫfw,4и&sJ`#h\D:k2Fp=8zCkBz}k2Fo=8nyu!ԭ!:g:lA[9Br%w0qĭOѶd!&cDJia#H[c>la!!;g; Y!d!;g;7AQ!D!;g;@I!$!;g; A!!:|_[BϚ +Ygcld^LzESod^!LzMӈod^I#LzUsxkn}qzBzak2HD&l=u@ CBzmk2HH$8q+ݪ *^6CO Xg"[X=A-5$WR SA:Gb݆6L\!rM DGŸ5:d^I2Lz=XB +I] u#n'ZjC]ABz%0Ԯz4n*Bzk2HH&x=u@ƍ\Ch^ABz%04m+d&DJa#^klBzk2HH|=u@?,A_!~M \įGQv7W_M \GпQgB{ l2HH&=v@B*C`ABz%0Tz56<B + a УOZChaABz%0-z5v%6rd^5L{9u'P&Ja#(bcMm,=D%d&DJYa#bl+>Oc!M& tGx~ !$$!oD>'!T !oJ*=7z ! !oPB= KO M |ôG߸{ol2HH&=\v@6mWC M |GP߸+D&Ja#fc=(B7 +ufУGCHgABz%0z6 !Գ !lz=tYo=6$Wr SAA;G0;=6$Wr SAE;G\F ! !kB=7z =6$Wr AK;G\FϽCi!M \G׸sC(jABz%0Ez5n܃BT{Qm2HHjAT.H;6 ]UjAz"Go2>5pGzޡUHkBZ ҫjk׸󎱬B]{d^5VS^v@vͻ* !kt)"X*!hsteW m2Fb)lAa#$Ba{ d]E1VS^9:vKC^*!_stg_vyX6#dW$ }Ύ-*4WMٕ4נ}ʎF; Ul9"vj"k>gG++TWMٕTנ}Ύ=^j^ܟY! m2GȮd&sv S Ul9Bv%05lcN1OX*!T1e*!UFR۫&sJZaRk>gǴBk{Zd]+Lk{ ZW=z'ԶWMٕԶנ}Ύy{E*ԶWMѕԶנ}{*WMؕz۫m1hͣP^6#dW S^-cZ[GW m2GȮbs[`Ǵ7Bt{d]I+Lt{iEs Un9Bv%05ncZvWg*!V1hBz{d]I+Lz{ V Uo9Bv%05oZ{c! m2GȮ&svL+EBo1Bt%05oP*R{55pcV>{ܫ&cJRak>GG3z Up1Bt%05p!='VpB+)pAM鹿B{2d](L{ 2Q N Mѕtנ}:'7#DW ^9:s )UHq1Bt%0)5HqE=`B+لqAm6!W!Mѕl }ܫP&sDJEנ}Ύv{NrB+rA}P*tWMٕtנ}Ύ >lܫ&sJFak>gnjbOh uUs9Bv%0u5scJ>rܫ&cJJak>GǔbsmLtB+) tAS ̘^D7#DWR ^D9:Zc"d]I)L{ "h_Bt1Bt%05tn^N7#BWtӽst(܇B{Jd]I(L{R݇>ܽ_S#.16ᕫ^P7$V ^1ԝF<=p"tWM DtWtqsUtABn%039nn7 J7$V2S^ҝF}P*4WM 4Wltsroܫ&J`+shTM W,sx` B r+YrNqsr祖^7$Vq&ǽb;ǍS!Ľ !n2Hȭ ¨,{^6MXf|9n<=76$V^1FSx'! m2Hȭ &bv;ǍFN_d[Lp{vuZ! m2Hȭ &bj;ǍG9|AlABn%_0#9n{d]L>{|vK,!9 l2Hb;۠s-ſPfB7+YfNc ׿f*4!Ef,9̾sOUe9"r\jr+E U(e9Br%0Kir"K H*D!EH49~ B {d]I#L {@v?78:*Ա !H:u4:~ iUHcABt%0iitD_:A$.6ȡ3"]4:z.ON Ul2IȮdb;͎_4Np M& ٕ\4WlbklB(bIBv%0EYv,zث&DJ=Wak&)B {jd](L {vs=BHaABt%0)Sit\)fqjB{:d]I)L{vW=#DW!M ѕDW`qݽP^6$DWR S^FǕbvvBzd]I)LzuW Uh_ABt%0it(fV !|M ѕ„W _q}B fVp놽Sbބ5$@+r&#:&7wM Ulb3 {it&wRlbכ&*64:nͳM(]oB fJMۄ& !Mlta:ۄM(]oB fJM7t k2Hb)]oXN6ބ& !Mlta:ۄ{!&7!tM Ulb3 Cit&gйބ5$DW ӹްsE*6f&&d Rz3 3it&4M\oB +ل\oXN61ܧoBz"d]&Lzu>M}כи&J6a6MuX!q k2Hd&qa:X] כP&J6a MuX!p k2Hd&pa:pvڄ& !M}4:jýi֛&J6aM ZM[oBޚ +ل[o΢cq:a&ԭ Rz3u it&жބ5#$W Ӷްm&Ge}&7lMɕ\”7,[.W:Np 9l+rK`:߁TBZ9Br%0Y irlMZoBԚ+Zo;ݽs;8g%9VF0bW?weWdԷb93`K̮g&ou]vvp118"X֫s8S _)bpvEiWoخNe7po!E8FHVetu]D}J19A`]'g9rv9 c<9 Α˞ȹ2ꘜ` 0FLήȓ3ƀ9쉜{󐡎 c<9c Α˞ȹ1ꘜ` 0FLήȓ3ƀ9"[ꘜ0FLήȓ39 ^5+iVoجΑc_ !q\Y!LzduS7-Cj#&WvSްX"˞ȹ&8Ъ1Br"O8sCOhޚBLjɕԪ7U1{p 0G,&Va:I߃:8GlUa:Yľ/5A#L5+kIUoΡ#&X)bpe0 C??~ˣK[ס6=_0C̫NaWFˮ\oGs97,5H1Y 9fvٕ^f3=j\cf|{߿saٿO~;,AP+0@g۷?x+?!-\~ PP!Rz3 3ԯ^ήs'ҷp C "`R_껯]vv镝wK뿍ɺ+.`:.1Xeq% j#VR SްRb}vhMOI !wqERH# $5N#+yIRoN E7dCa:D&ԨqYF5 2+2Wq` rW[bd Wdd(1ҽ Aa: uCR:F&聜9dF 0?p_>ܿ{U9jmcLo9143>#7h*WÿPr~\PŠ%H*O !ƈA54iH*O *ƈA/[2 [%U@(R #Yԫ7W@Wݧo:uLR #&YԬ7YWH«\Iꐣе)B"o߽Sx~?.Gv~@\ 1I 0u]i_dAHAT`d)_oX. =xuZ{9ba 1b+L{*v#Ou0 RcRc  Ҝ|@Q0"X60M)~{"*0deT7f ɸWlz1Cc`acL?{~6c~x:wpIraLAe6H439 sEB1 mm"Xjkoa[_~{_Gs =m2CHt7iVpJ &7MN-mCo>ܿ_P@ބ6"W:be~thVx8&cK'XLV{ì u\ڛ&cK\qm >u ="$7!M2 2@|("7`Dv!MULd79s*>&"'" Mo2Fȯ""izV1qO B{d_Cv1c2{Y.wM VDd7}*A!W/pDv!M Ldw|IFmB{jd`o ='Zޅ7$$X21'E ]hAB%1*AzVmo߅8$$X21E] %](AB%1%K*Az^ǥw! Ap2HH#&c\%H}m]B ,W R#iwzs໐'KNb;UI N"T !Jp u&w! p2HH$&c,\$HOb p2HD M3|fJ:Iw ]hAB%'1*A$}@.4w!N 4wltл߅8$$Xr1%NXBR|d`ILR|ǤJ:Iwջ i]HAB%'1i*A$}v΂q2HH$&8cp\%HYp!?N ĤwLZ;P0BNw,GWgG9#W"1D.xF$9#+r`\l?&."!(Qrsv$31B~%1i*?z"D!@r="!Lr"8,'cJbb;U~A'` B+I,W1q/r2Fȯ&\c\cw/ s2G$ _c\HoY]^Rd`@L|nj^iEs2GV .a B؜,95W:7 d`IBL|Ǵ Jb`!B,Y 8WR YmL4DH9B% 13*@!&x<'sKbr;UC "B,?WRY&PC'K*bj;U\E;"B ,i懶..lt2HH$#bFKtlDHA"dn;I#B9 ,鈩駱.:|ig >K>b;in B"D !N"A.$]0N TwRQ R#߁u2Fȯ$$wӍo=w+*d^IFLE}'u }!R'cJ"bZ;iK|C1]N$wWa Bj+ I$1d^N=zg>nz v2Hȯè/da A<^6OXgă%~?5d_I;L}'qv'd_ A:T;$WjI]GYWCN wRhACAB~%0a%~Y!d'Jaz;K5CHAB~%0d%~ewc! !}N ?XBx 9~?Ht]GÿkCȭ9B|%0%|T?շrz8HȯºďUN ÔwRVQ߾ !d !~N?UN ôwRQ\Bd_>LD}'u w !!zzN O)e6ax"w9/( 2w8J4 rwAbew` ^{9 1Ų]0R=YeE]`b]f.W)rwiYp|, S,b"EEp|2 Ry]0R"K>O)u+O)e1iy"w]qy2HL.q ̫ X"K0O)e1y"w^wg 1Ų4.)n[d"S4y"w.<$Xv w},ɇwAbewi]=O)ݥwJ.<$Xvf*E.n#db]q ѫ /ѓAbewi]FR&KFO)ݥw"J."=$Xvf*E.{Ơ ғAbew]NrwwNI,[狽ˉK6AO-ғK_W_9)҇䈩3^9S=Y#gD#vz{s7Q dE}H=;_Α|D-ϓ9rEN!9b!9GNp8OV8)·yӭ^9;' 8*9* A^6NXg#c)'C% ]e$ cnfP)_Wy8)LJ<;|2p;TUN!88ߊ?mVuQV|!߈gCJ084CnD 6<"VaygԻk Ǽ4[PSdE jlS/yK1>m)|36ka~#~!A``=ݻ?߻ a~e_ ~ly|}+=*؃W6.?&AAVP>ݷ QcdE1R#6񬯄d?&'+R6#$J_v !)X#ebO>~2]`v{s Ɋl?gv㻇;l7h!>'~ocbZ{̨D_hݛ=G}1?A-p_I-67V~ۗ` JsKJ Wg.\\b3.Qs lޯO1@A"p`I"6#3 \F!FlF# e. &DDb3"s >»Pp #Xr8Uo<z!|9F5].W$.zlϟHH'!FDX.$"cl`Dvc"+i @Dv6Gd"1 пst YG6s!D Q$*.Cq=(,nL:@"?P[ *sK*2NLLd7&MrQCa='NdJȁt>|>;k<|a'SpEdG4ĽZm:4c|y !S*2qƪSL(dߟ7]CCJ}ޖaB!ÊL&>AvƐ{t "BVDd2 _x统%{ut(e9Ǖ!Uюɔ'y?}p٥Wl}7py)bpݘLL}EͳPE_`;c8dۛn m^1 t"WQd'H#߼;g_лdc:_1p`1L1}j8<_;$4r8EVǀ\8OBFϻ|:[N4 t"WR H ۻ²>O}M J:a:Q?JbsO&!|CJ`s+2P. YIL|+dN+vz%$q]IL| ^( ܨt_WzȪ &^>AﬢϦ]7+ݧc!9g&vCf%Q0 r݆ٛ.Lc{|Zo6A0+iO\:FC|&`)=W' Э7|}wG09҃9z -ҳ˟|xHO,J`bEzv= E^IL|H.~!=!+9OO\?CzN`=W  -ҳoOcD<'Cz%0 "=+=WcyH&2>Ah[GT*lK!mm8FL$&*>AX[dýtv8FL&&>AP[˟;Ep !$c`Eq iktwDz!q^5L<|H_1X0\D'gk+5`8+O1O],kp#Wr  -c_i!q^5L|@H"1bz%0Q "=3Ep !cJabEz5658+O1\S[8FL&=A[˟蹮8FHV׀HF\C~1kksͽ  ^5L{еHZ6557+{O1r\C{1kakqirSdC(z1lEk+>+؆9b|%0 R">bW|W sJa4E|D7\mon#W  ^-#qnCv1pbj ,_I8GL{]PݍsJatE|D9}QrW瀘8tr^Cx1tEkn.X9b|%0) ">j͵.X9b|%0= ">j͵.X9b|%0Q ">j͵.XP9b|%0e 2">j͵.X9b|%0} b">j͵.XP9b|%0 >Xto#WJ}O&=AZG?R?8G$H4!HoC|t>#QA:7+IOPQ!H9b|%0 z">*ngt!p#W-ұ B'ctIi!Tq_I:L|FJtqp#W-ұ B,'fk`3>p*XP 9B|"XE|:fwC(1tJlUc;'89z9-#~p}p"fW -#| rW&ctCH1n!l *Ȇ)bx%0 2"<"ϭ`BٕLĿ'h`[v}\GX|Եc{j>ߚ ɖQ O&=A[BnpӫwNP 9+RL{"<;X=0z|G 8+'H\`GITs!;.`].L|"Yp} Sq #"θ mEwNp 9+r[@ k;A,68ȱ3bA;v{urW Yp9g7vVEp\cgv!;A+8ȱ3ZAb;zcGB1WD:;jBh1XDyx{qB!R{2x,vp.9bx%0xL-{ n!wqEq 1rwA.7+Ʌi~O-cr7]o#W H[boZ8G =ַߐ ~!tq^/L{"oݿwCH|1`D<&e BLjٕ'Qwy_io#fW٤gNOM|,tqȱ O \λlb8F̮bz$-vc;d #fWgRQ%P1bvM{&%ou ow<_j1 o#fWQgRQ6%o1bvM{&9ob8F̮")zϤ-c^Yz1X̦=x1K,fs*f1L%StD-gI SJba*sX?EG}< Z!q]I+L| gX8GM|V\[Y sJZas>G x ^!qE0} x+ BԿ} C; Z!q\I+L{_g _xg!cJ^as>G^.Y~1Xv{B~BLjd0}]fcJrasX>GC|^Y~1^FO4?B{8FM{i'4gsJ~as>GOo== o#W 9=tZ'4gsJas>GN,4q^2L{xõ[= o#W 9=zq^ *4gsJas>GL? Yh~1h6ӮB{8GLd=sz{M7+i~aK~_鹢&4gsJ4}N^"nX,$q^I5L{%R YH~1j&ы|Q߳9bz%09L~c1&$g!sJas>TcEM(~BT}N싚7+ ~a4!= o#W2 9GT) Y|1gVѱN !SJas>gυBٕ}Ύ8N CJa3k{{](ԡ6a B!qE ,y~/}7_?> \o_%a,[M wߟѳ+?~ٷ F*XO}{_w.AWWQ R!qEgZ3ky!C{v Jv !R{6exty5W^voOc>jJ8EL 8 kCsc SJ`3s?xKήsRW gqENkǐ*19"7ȑ3irv퍜97ȑ3birv퍜k;cr n\#gu90!lANp9c ,&gȹCQ;&'\9rX}7g^_sk976Hq3e`镛)Bpl3 ngm\:cp6ȭm\g=o186ȁ32YpDGχnv N+r=v; yڸ"kg1wNp+r;vSɡAj8=j7P9bvNJP+r*W]fAÿJu>&SJ`3gJ_.<إ_M` rAW >W_񹿦6"WJh&=Wx߿nhkڸ"Xkh+`ǾLx gqEqߟw>=ظ]G iO9=A 63B=ؽ_{^ !qEqurHW`!mvN0 9+rIžM!W)툞`rJW`)mq+=;o !ǴqE ɸsiGɐkڸ"EԴgVÌUN;'RN{69zD2j;A26ȱ3Ajݽw~tex cW!CJfa"3h/wo~^mS|bO@Bg4#$û߽o>{[jXv l!&V 6)ǞK^6 KzaB3 iQ|z~(r4=1=>ߚ q97]c yOBj_{1"4我yFEHtڗ{F7&0G|KiqϤIH=#T#FjWd.&ѽD)ӓjDr q/_EvQ\':(2BԾ3QOc;$W#&jWΆ(ћO j_홨wpv9FCy9bvEb>{?˱"k#+HAT$R"J79&Cy[AbU[ZL|!IOAʥix,w4M8HԮ#NRnNN1"ͫ#b  RnN1"ͫ#b Ɋ RnN1"ͫ#bb  RnNyuAbeu2 $?)G&jI !RXGj܉?)wDM< r$FZ'+_HSryrO-*yT'$FZ'S1_HyxW|ٍ/2MW|/Bgń.;7ݟwNUk\O\IeZO.X|9N\|B/?~l";[Nރ@p #GqE1pFooWm2H~oc|Ei"8阋yq5' N#qE2=x7/rWw!=s)?/:1>U9H3M45|7|J!>jSJUTR5m#C<'859|?H\ć7ϹXrW es1{0r"ϸix,1>A<93A">"U![CN>c$q.#_M1 !Dq_:L|!s҉Y!sSJa2 ɜu "X:)b|%0E|:N2 !q_:L|!s  ݷ!q_)vBb">bݷ!q_:L|!swߜ$VC|rW s 17D:1@<94A2@n%d9c{s\h܃de>r")=_ArW s 1nM` rW!s q1@A:4B2@b!=w( +"TRAWKGqB)BbB !8 &"qE1CW94c=t\hLeDܛQ&D)b%1I$eD[O&PE)b%1UTe<+8E d"&0 8E d"6 &"q`DL}!}t 174DD:N,I/$.dC\nt"X2SI_H%]/q wDP:N,J_H(]Ή]0SK&bZ ir^ `"r.W!_]ናkƏu?-.B!giRHHV 7{!76::q3AIn7n ɐ"H)'Z\=Syl"'RϿI \{%?=gK t"&WH_H"=O8p잇e"G(6ã nv_"DqTIL}( Q8Χifj8CL` Ku?4It!UD_0ǿ`y4u!t2CȪd&` [ ,ҡm>)x > wqE/AaJϵC<'R}1!C"=ؕ_鹛C<'\B9z >ܿ' eT8˘ cϞgϚ At"o!tSƈ)c&`]Ew<) c}H_0S={Y!~Sƈ)&`,]E!Stƈ)+&`6]Ewoxȡ 1bɧ/O)9U,zLQ#Xnm+@L!>] "GqEjh" Fv/\x.zOh1"xb 6%xDOa'rDW?f&rMW-XU F"WqEK𘈸d!8EȮt,K~Gdm`rGWkv]k܎iC}h!N Ntl~|~y=$/p"vH)B|&`"]Gd )B|s!&`#h|U>xhw8FȮtvp;xK;#vM1v"n2ivhiOzu8D̫dݰf'W3)8M#DqUI3Ldad՛߽Û?po}2>Ms݃Q<] 0F. p7 pcb6<ĶCBŠ: 8_c=p#&X:c 2A*W{ W"Gx eH)𐠠$r?W~LǶc@<$(9:0 ~J ׷{u;?>'9~F<#?!?=|8H3po#zxO!R=zxzʏ?C~p\g *?"!ÿ "qElE'x\9~C&c{ "WqEֻOp.+r`]\dvO@! D?c WU'9~?5cq#WoW1X]]"Ȝo킓t#&XvSPo.dN$BCLj Vz'u .*;*/y'BILj<$'O=뗼tcNMSD9RzL0$8FL$ݔ;)KY޹~;I8FL$;KYn_N҅::I7N*Az}闼tcNMkֺD^f%$]1tS\露.dN&v%$]h1t]碌.Wi⼓t!ŎcNMD^N҅;,;iwdW3ޕ }DȲ!AX'h%Iv`'8FL$I]"ȜdwwԯbAI``IL`D9Ov#&Xvo4cBk~?o.qr\ܣ{'5<:f"ۯ "XI1xE!D:$Gb:=;ȡ3AytL:.O&CN:#$Gl!ls!]!D;'tC=D'$qȡ3Ayt/.9c=D'v9t-H=ŕc=D't9tF*H=^y``rW -<:zɕlB1M{'<:]x,؄Po1bt%0Nyt"+ag&n;+لwmϣc6ᖈ,؄p1bt%0 %Sv]8Fdݢ{}Ʈk`BLjѕlۻ[lOcUE ʎc`E ȞAGL,Mu#FW S\nq=>T!:&`]&LQE :<]wK6!Tq]&L1 :flB1M"zwt.r"؄P=1bt%03MlV jcJ6a-g{`BLjѕl˻[,Ϡc6[E WcJ6azg1-`BLjѕlʻ[+Oc`BѕZݴʻ*?eW04BN3n-WerW e/.1oRpE+r3q\[0,ms/.9ŧA= Cus1=93@@g$b=Tr|O@+r>$կcS<'89~!Hw?<sOKS~;)aaEzX w?{{߻ iZ rnWn&717o葃{gC?|v Oh!Rkxָ.srhWkxݿ~fa~(_?+A&8ȱ22Q포F߸#FcrGWw@ S7(xN9 +r@@F_Ⲳ}r!=e='% 9RF ޹Z56o1A (8ȑ2Bi'Ro݇tGb|1]UJH1x vQs?ǨwDM!Rx vsyLy߸"G,5Ѐ+5W@,P44ľ;$}b|o1`? xϴM0l[LC:.|?Cn `cA;[yAp 1H?`RO}ݏ>~|[X﹫ODܸ,RjpoA>}~ܹ=mÍk;^M{"u"CG)` αd R:g;)R` EYޠ}?F/tN)I>ݮoB KVd *eA>H9N@'w#DwiҴ #8i eA'Gp9)9ljHC.t\2>%H9N@w#@w@ $q"/@~_~S!;w~Rw5P,:N,zB@  :*q Ko&ޠ4PG}@ã)΁ #'q"ԸğhxT?9P|:N@ " HέD1 (@^usI}ˇ P]=8zNwsPGDq} 98w)AAv;NفNз9N #q"GXT}?wxAJs4;NPρJ(}É2JpT;NPT{jy%|WsEYJ7noP1?ՋB|`S_s}.6!lA<tEx` wx/9N "q"8 Ex`wx"DDh@ *DNDQh-|@;) JXoN^^G8Ud D-(}s:AEgzJPp܂,7otddw #%XӹoN^&_A0<7Awlzӻ ::c#EXoN^G Ik=E( A#|$Kt9oO NkP%'I _AHLΙ{JP܂,II7R AJ` +-(tc%Zқ@P܂,iI7Z AI|( Z[P%-FK _!hI-邖`IKW:ZX%]܂,i0ZiAdZ2--A4ZU A#CВ!h Ad-(|!s"נKZ2@{b+&(XKV2@!O :V2[%C܂,Y0V1 AJf Jp Jd%X +?͒!X nA d+|c%s3(|}V[P%+J_!Xƒ[C܂,Y0V AfIxmaOn Jp Jd%bu~ £[`%#9J ^!X> n {g J$%&|.YZw.S{4NrY>^څ轳%Xro,AI .8кwKNbZu%8I\'`IL9|{x}?}Օ0=ŴNח=.ѕd4Ӵwǐt=H"9go;rYoN Œ,C)(\ljL(N `+r'20iwe__ftB=م=`Dd`<~Wѱfap0ӳb0#!J=܃ìL7E/`^}.fR?1Q(+^MѾ;E2J^QFRQ(+MѾ;E2J^QFwRQM(+MѾ;E2JO{OP(+Mо;A2J{NP(+MϾ;=2Jz0Omz2o=GYn:ؗQzB&=Gw܃,9w__E _etZЭ=(Rn}weF?59Jw^=NPqzeF?9JvN=NPq:e$؎P=8ʒR}wJe/,`;B(KcZi՗QzⓡIV{p%1(=iaOz܃,َwW_FN oIX{p%1ݗ/ۧ>DL_iy R#q"GH?{w7v0r'RL; <9 ;\g 2!q $ޝΑ BJ2arɽq fkLt|4 Iw\*%ݻIw'1h_#BwJ`bc~囟K#0ӏS}Lގ9Z7ZǗ?~|m Ht!ߎk̷_|7?DQ̷kA/SJ`=;~Ћm=A` N$&1ѳPOUvNOpX+)w,kA/>5=A` N&1ѳ;zA^ Lýc]gz윞`WqqA,4;'dqq&1|eSJna*+&P_58kzFsMp !kpz%0uMp kpz%0uBtJa=5wV55:\;5zkğoku\+wk<׈jku\+ w K`u5:A"D;F5zk| !q Nޱ\{\:'\ä;5zk| !Tq Nޱ\#~@\C(^5LQcQ]Fv.PS58kzǚFs]p kpz%0%%u;BEJa*+=5l !q Nޱ\cϖWr SOXOA/<5r:Aݔ;5zk1w!Dq N&1\c:'\;-~ˇ~| _cS]P\:A?[_ʥwKK:1NtP098.tǏd r,'rt`,]xG89@;V:NV Q?qʟszȩt4ꁩtc=~ !q"e>۩} !wq"t;vU~<生PI-(R%JzJϑ~=8g2?OCsS,D.D,G]!kp% 1t "q d!ޱ.t?>wB<:,;e'c`!B$Kb"#2@ XFFz@y]!kp% 111tQJ.h@58 @@W8F-!C NN_  !tkp&t>0t.Ddsܜ̛VLd Xyt"=nyB+&2L|`\~<: !dkp&d>0d.t?\D&2|9VLd|| 35>Mdr\0ro`D*58 **2Mdr\0rAo`D%58,, 08 &"q #&F>0F.Ld O'D9L$&e'_sxLDD1 ǿ‚q\,ɍ̍=i$58ȸ 31 &"q d"&->0-.L$|.aLAq\,  = L`"BFK&b232@DœݘX2SXz&2nM1 *"qN".>.J0z>ûq܃,EƇ=1 2"qN$#5>5.dd qNSq46qg# ΂q܃,),ݏ³Y!@{p%1r[x:8 B"tqN$$C>C.t?~ gH9 eԣG},%58(( 3G#X2&&Fîr܃,IL+ nD`Z>L|`\&IF"qNd$&`>yk${9jN F"Gq"G SH9 ĄSH9 SWH9 SėH9 DSAI9 ĄS?s\,)i:]% _b4AI9 3^|/2$BKa')AWItpD`IIL|9%*朠$'XR?<~N J$BKJb)AWIX J"DqN$&>xtdOWAI: ĄS\H#ZX2BNzFrqDȡ`IHL}:7>B"q $$>xt_EXE<] :"tq E>.7cX'@h@8vpwR1?r}?c?+ļm?9;}/=N=O s9'lى<=N=O wzo*4DQ ;zSzb34qk=/` NNp'z/!;sمIu^ j[mI-L|8oއq?ں ;gtG/ N[pr%0q9A&` N$z>y'NsJN(\x>L|8<9)¦899*` NdXE^ǯ?}s"N^ɷ1`"8:XV5+"`Ϊt”͇S6?X_?G aY=P9T WOaÉ'9⟸M'nOpzIp 9ON {pp&e>y.Rr.Sp3\L|8$8\x%e=82pIp ȹGN {pp%c0s0~ /S -=(R|lpIp` pS 9'|ˇS,OU8zSp,\IL|8$8BC=)8`dS>NykSh]0!Q{pp%s0$ʓ\sBs9ur܃+N皃&o'ɇ&Osa.$=89&pIp9srW2#N< 1B`BJ`J)a{Y_9r܃+Eȇ'B\:sW2N< 1pΉSp9\Lz|8$8AH\Lr|8Wpy!5OBd3q\#+9'2, LN.0߮q q\c7p _;W)<#` (>g(9 9q\+ćɉ''ޯ~ǗC|R7q΅pO0 X+&sbL]s J^abÉkSx8)>.` d&%>;88'LÄć-]p !#kp|%0d5|m\{lC_6LD|8q C !!kp|%0 $5|qqq\+ ' s#Cȇ_9vߝ||r8z5K-/ 59ȑ 9"W᳝- 58k&;49O3.~ p\hnJS O g.o58a&;49G.F~.q N"iN4^ Qp\xnO"|jlbj'WQw&ل?M\&vߝ x#-/58H;ᅭ>~?8=kP=؝nH3)g+~x3tBJ4wF}|b7E'h\Ɖ:N;_nN9t#w9`O_BJ"a ߻SN󞆚ssLBn{D1 F}b/R7E'\Ɖ:N; [ύnNp 9t%w!y+:7E'Ȅ\Ɖ:#N; 2!q$Ͻ;}4:O&:A&07ѕd„w'̝FDn}dB(r]I&L{witL/GgA&7ѕd¤w'ŝFDv}dBp]I&L{w"itL/GgA&6ѕdw'FD}dBn]I&Lw{wYt0X{"؄=(Rp{7 n96qG&&6ѕl”wF]x8g):&6NpitM,S,b`B[J6aڻNsl.E !{pt%0Q݉j96lE {pt%05ݩi96 tMm܃+لhNF;α;o`B?J6aٻNslb=6!qd;4:&{`B2J6aٻ΢=^ 6!qM+{wZitMх`B$J6a"ٻNsl~.^StMulȡ36ԱgU kpr%0UݩbyƎM*Ȅ=8L /Ll܃+Ʉ`N;Α;*ȄP=8L =ldBh_]I&Lzwitއ&=ldB^]I&Lzwׯ?}mLν3_ k\+]N: &pOܖi.Tq TMz+)p3Niɖi.Dq &z8 ܱ58DSS-]]\!LzS)pMQu˿:vJ׸W2Su ll.Dq &p8ɦ^(][\Lz)psMⰚMBJ`ֻ_Nk|pbָ'WrSu*ȃP=8<׭3m} ԭqJTMz)r=׃`BJЌ==Qr OI`K9pucs|J{2׸W5>ޥ2׻58=f98YA\\Lz3$/oHNs{pr%}0=\srރL?!9A5ɕ0ty1}J׸'WS5'=tAH]\ILzSה׺~ ]h]\u99!*wukpp%}0=l]sp>OCp>k\+i]a뚃sam=<'b׻=8?Ʈ99sv k܃+ ]a횓sbx_]BJar{X/z׻л=8A99 s 5ɕ 0x9q'>.wx{pr%0=,^srAɅ.$qNd&ykJk^ɅsBz׸%Wj^ykN1;ޅ5ɕD0zy 9A!5D0zy _׻58AF98 9>>]h_\ LzלcwrϜ`BJa{Ak܃+^as b/1 A 5x9-185Ԯv918A5tMy->{*׸W\rkαvqF qNd&pkNαvqFrUSr>\ILz֜dAZ\Lz֜->#}ָWà5C[`BJ`R{{hk.؃P=8=V99»BJ`{}?j܃+iWas=.=8@<=;s3J.;'Ƚ=9g"Gn2L ~9rip q A8s\ =8AܧCh+;ȥ ك+}j5Ls >pEp&pO\ [ N4g"pEp&'.-o-' 3 @8pѣq\58?ܧWg1?Dn|%KKɉLMb5%{t7N5(J>e!Usp>?8Z3g!Usp;\q jڙȁ398Gu>9AT3#g!LUsr<?9R3#g!,Usr=d!ߩvJ0{;c*CRa2V98?9AH3#g!Tsr>7n>9AF3#g!lTsr>u}'=8>FD5%D%WITߧ?jN;9GNPL ՜#c݂">9 @3#g " TsrA[xf "ߧvJ1Ԝgk*DNb6֩98O 6 6WDئ0=oWyrաROukԔW~Xҹ/M 栶8cazKSp9%jg"ΘCXúWmi N0CLs;#ş&pAP;9n5潹p7 jg"xC pC'xv&r7j }o]'xv&RV a~WAi.v*0>My\[xoPD0=My\Z.~qȇ=88F4羵5~d!ߝvJq֋8Aig$:Ml'C9a56)8q`ⴳW2՘CX7^\]s=894oqȇ=884#ah>ķ дWf! MSp.8;\I3M^' ̴Wf!LSp/9+\12M'C>2̡s# ט`ƴWiLߧ9i 3-9\6\C!ߘvJЍ9i 3~'C>1̡sg=|9p9ig"ΘCX{?~A 7~~e\)hg ήtm O3e'v&r ` Zagn b栝;#V]s ?PDq,B+.v=Sv#Qhg"Fvh >IȮ cPD1B+qM;cϔjڙȱ3ah*zeNp L2UbſNp 5 LdM& =a:t>v5;ȱ 'v 閷IC]*&0".7ϔ]*p ήb DOVyV1bѸgW$'LD+<c-oP58UL=a%ZaYt[$q ήb EOVyV>T>V1 h\XdZvU.o58UL&=a.ZaYELVLB0*Z1`h-RIHF]+L2zdvMB5נJT'F+z|ъigN kpv%0 ;G+wVi\+iHOV9Zq/CvVi\+iHOV9Zq/CvV!i\+i IOV9Zq/CvV)i\+iIIO]|jBhI]%=-ic[x2 R!Ĥq $&&=aLZAH^8):A*4NΑ-|zҸgW ӓ's"̛MBQJNatSl )4ٕD'J+.SYi\+9JOV9NOBYJNavS/sf)4ٕĥ'K+Z貳B_JNav0| ]vBHL])1=i'-{V!Tq ήd2=aeZaYEޝєri'rV`iZaiE6iBM]I+LlzشӊBM]+Loz޴Cx"x58WirE !;kpv%0 ;+Fx-`B(O]+LyzgӸgW 0>b,Wi\+yOO؟.{ ^!$q ʮLz={ ^!Tq ήB=aZaxE-M Z!wq"hvtV*h58V)jm BJZaj֨vV*h58V AjmVMj\+iiROؤV9Z?h V!Tq dJ=aZAXE0Uaj\+Y SOV9V;۫`BJVav0`mUyj\+'0Os ոgW SP"09bٸgW ʞPvZ>7+B/JJaZSNbٸgWr SϞٌGɆBFJJa2uFsbbJ!q ή=];G)O A)6nѕt6A嵗X)vA)6Aٕ ۓ)lOq.T != m܂+) lOq.V != m\+) lOq.T = }m܂+)kOq.V = }m\+)kOq.T != ym܂+)kOq.~מ6ٕ䵧g8|gƷ)$q ή&==]s'858SL_vTIl]E*f؞ l]nڳ-:ȡ '.bڸgWg8|C,q ή"kq`B_{ڸgWg8|Ng= }m\Xl3}m>E?B_{ڸgWъg8|gWB_{ڸgWъg8`ټVB_*Z1L_Fddמ6nUb6y6?Ѕ֞,q ήd&=?]tsڳ5(R^{6y6;!= ym\+ikq` }Yk]I+L_{~NkB_JZa3}m~ P,q d&=?AYkB^JVa3ym>Eg!= ym\+Ykq` V!q ήd&=?]xNkB^JZa3ym>؅W,q ή&=?]dB_{ڸeWkϦ=?]dB`{۸gW ؞ l.T2= m\+i)lq.s'g![pt%06?ЅϚ,q ή=?S`B`JVa3m~ ß؞6ٕg8`^ڳ-8TL_מ6ٕg8|g}YkB_JRa3}m>؅B_{ڸeWkϦ=|^ovsw^BkDQ R׾&i /ik3rPmmȑ3BA众1E@'Ɖ:#$}{lbMY|B.kD R־FRv< k3tOamȡ3>A7ʆUt:A'6N ]kt eֽj3tNYmȡ3:ANEZMUlBjD RվFe*PD:A&6NЙLڗ輦v4$ 9![Prl3Ij?}#[xv 6!4q d=6j3xPUm3BA [x J!dq &=6HT]m\+IjϤ9Zqg)BXJZa3 k3xX/WA,6”gRfOZmm\+ikϤ9rqo_ڸW מI\s?߾ z!Եq =6o`B^נJygf<ÈpڸW2 מI_ #~M` ClD1 f<v C(l^0La{&m3YM0 !kpx%0$<0Fx۸W2 ؞Ic #~g Cl^0Ld{&m3m*۸W2 SٞIes c _5oam\+l$91Қ706 tg&?B۸W m&=6=?J۸W2f =e0} ql0g <0z^ Chm^0Lk{&m1)b۸W2 ۞Ils V ![pv%0Ķ;G0.~ib۸gW ۞IlswV ![pv%0Ķ;O/‹M ![pv%0Ķ;. M kpx%0Զ ^$/a,B`p"o21 >E'-oP58a,ʽ*7FMU c1Yd<ʹ[k7Er^0^HMſyX07U c1a7N }n=Bt^/L{!n.L_n\+It/$9~~lݸgW ^Hs"2 z!$q ή&ѽD7cEeBHt].L{!nαĿ]n\+مit/9v1'O !ҍkpx%0D <ҽ?>ӍP|Nb: t3|,8M8cVBZ݌:+y˛`7(xƉ@$g<^LCv"_4L{!nϩv_DCv]I4L{!nΩv“Y ڍ[pv%0T;'} OYfA4j7nٕDTRflm &ςin\+v/9LCw^4L{!n)wO`BJa )wx^FcY3t7A݋Iw/t<=,-B{ݸgWr ^+v{[|"q ή&߽$WP/Ew]-L{Iynދ-8[x_"$[pv%0%QbK^74D #{!o܂+x/;-9"d!kpx%0%EEx/BJja:K})yዐ%o܂+S^*y]xv,![pv%0!婐7N?؅gB{:޸gW2 ^x]xv,d![pv%0婌7N?؅X"dq &<^B{2޸Wr ^x^7d28}m2޸W ^x/e&d!kpx%0婌7NB2ދ58]Tx^Ex^)㽘T?yB{*޸gW S^x]Ex^/L{yV kpx%0婊7N«B{*޸W S^x/, Tkpx%0婊7NB{*޸W S^x/T[o\+ x/OUq/Bx]/L{y*vGE"Dq &<^x"ދ5(R{1婈7N_[!o\+ F3ў Ë߁8[N ȱ3~TBދ-8^TKyB{ ޸gW S^*x]QQ! o\+مIx/O%q^ދ58]TxE!o\+مx/OEq/'D![pv%0婈7N?]/"޸W ^x/*D!kPxb"So~ Lhx/BJraS o~ LHx/BJraS o~ E(x]I.L{ywv-~B(x/BJva So>)B{ ޸W S^*x/B(x^.L{yxkT"q dG[o\+)x/Oqo!kpx%0婂7N?E(x^0L{y!P58aTj^7nٕ8` Ex])མT◽ Ex^/L{y*'O !kpx%0婀7NSd!o\+ x/Oq" Ex^/L{y*)!o\+ x/Oqދ58_Txo!o\+ x/Oq^78>#ߍ[pvXM{}ߍvbݫ-;ȱ g좣*ԻWލ[pvXM{}ލv{K Uw^E/VS^w/*Իq wOջqbݸWыԻק8}NV!߽ n\ëjSn>E'y^|7Ub5|7N?agݫ58^&߽>^t1oݫ58^&߽>^t1oݫ58_|Txy^|7AݫwOq Uw^0L{}ߍxo^|7nٕק8`]_z*Իq ή޽>U#^x7nٕĻק8`,ݸgW ^w](B{ݸgW ^xW~z_>|Eo#Ko;-JĻ(ޝfv1Ir3|]n3v/3]'Ɖ>^wu7MnBOw^߽~P1F|aM CwD1ޝ1+or܌r'rcD4=675nFO ܍9z2rwzƘBxfϐ8g<#jwiԛ"7'\Ɖ=cQ;M]cOP 9ߍ9xF5|w BJa+ۗBT-xor'rV@B^vQ멹=Od "Kܶ_?^ݗ/L{X ڻ߽/%>؅XOKzBנ?n@j+rv J) !q"GHrv  ) !ǹq"Gdrv ) q"GDrv ) q"GΈ$rv Rۜ r'r4@Z gGbpM'Ɖ8# Sc\AqDqS s<987Nw*_?Ƣomf%hƉ+^B7Vĵ`n_;s. m܁LUtW(Pnwm\ m\bO] jK;Mz{&o%87 j ӧ_\P9| Kpt%q0Կ~ݻ?7z~/e;?ڴls8Cg|üWH!ykr9pa' cPǗB\_ =ɛPYILe{Aء;)LKo-g&B) 3;`vq 2f$Mm13q3;`_%?93A6N M 3z0 _չؔP5(RA{5Z)fv,>j؜r9'ř@B:=o[OlL99f bfzԾ;8cft)fv`g>%93<6NN~'Lį?\Oi -_aD90gZ ^>խu[pl% 0%ilp-66N_{%ev 38I^~~EO? `l\gBJtB9 fşs1׸eV \&pB9«V5e&]k13 O,~4J&hB9=ϮԔp/q"̜C9(5e&k13PrN1C&0,@VD8١Y|ܠ{8f)hvZ ;8f )hW҆Mp9P9hԜ4A05dW(4g+$ 6 q ^Mz4s g]!Dkpf%0!)f /_QiL9@9fF Ŝb@xE 2 q ά$&=w)=A3f4ǸxHX4!hJO 99zF4,L#Vs TCFDQ '͂C5h\+9AoPEy>}͂C%h\+9)AoPDy3Ypkpr%0 r9!z6 !$q N&A Y 9DmB?\!Ly6@s,8Ѓ58C߿w{O{[~ynKn7 ;ph%}0= fq.tSиWJBo& A9G>_1=%=˛-8ŒM<*E;)ǧ3(ƉEcMRÝbxː8h,UPS 㔅8hrU봫3S"SCIDh+o~z `` 9 = rB'rp@Oo}O}!|] NީŷfUy>i ҸV S 9׸S87鏛r?'r،k86Yߏ\1]&؆Ɖ6ޜt =;I_cjҸ9l3tܦc/IH3lX[I,LBzs9lp-sbLJ&aћa}"`J`ľ]9M Gq"͸a[lyۛb4&Ԣ78…߯&h\c+iIGoN::͑ ?)6z4NKp9l%lav[KҸVޜtc NU!kpl%K0 iHG"64A2қHoNF:ͱ6KJҸVSޜtc sBANIDq'%ڻ/ ' 7p`݄4nɕ47'(ç^‹[^]yҸWӖޜ[|ͧ {L9=#4nѕ7'4ݿ~Br6|,XM]ILlzsbyt:4%'ܛƉ9c؛~O!*Ѕ'ҭ]sTAMDQM9⻯_~h´.ʿGD95)b&5ajG7hBLMX)41;7hFLp939b AxXx1A ` N$1ac:A N,JL_hFXL47lFs`x 4&h3gX~˻||s?>V|_E[|Ģ7Eg9W#N4nM'zNtqsB J&a : `8z  q d a: =`8  $q & a: m`8 6 Ġq d&a ۷|c@O@*(-85?ߩ]![PjfƟPz|9ϸV}0蛀3&{Ɖ5c{NRCAAtA<ZILysABJ~`Ɲj cyƒBzPPs%85g `M%oƉ.oPp\Ƚf2f `C%ˁf2h_˟]p/q""s"3w\ё*_jB`p"k23O6El7xf˸U9o&03w_~|>kwjk)vN(痚[-8~3冹47<)'W9oܰwp'9Lq rLdad9 ࢳvn&Sp\7WnWNC .D5(Ru/Gq7'sB j܃+Pr'rKLN!C{pr%0^PA.<<.dq &Cj|O u2ԸW 5N>꒐BJ`2Խ\xuIPwBkpp%y0^P.UAP\L#8>ԅuԸWrӠ5NS`5${9A P5(Ru/quԸWR5NƒПBJ`ӽܟ8tӅtӸ'WRӟ4N#B j܃+ Pr'_ſ<j܃+Ƀ)Pr'_Ʌ3uԸ'W5N o= .4qNA j<ȅgB j\+iPr'pYBJ`Խܠ\x,4Р5(Ru/7q_"]P\L#8J.< .DqN$&Bj|%Xu"Ը'W5N_V54{A=tVA݅5ɕ4{ABg]hP\L8J.mAhP\L8J.> !DqN$&Bj|%Z"Ը'W25N>ȅ .4Р5(Ru/7q?$4Р=8Au/7q\3'Р=8Au/7q\xDhPwA{pr%0 ^nP+JBJ a"ԽWrg u*Ը'WRS 5N KPw!C{pr%0^P+P u2Ը'WR 5N KPw!C{pr%0^PA.>@!Tq dBjů]hO\L{8y[B| i܃+Or|'_'$;i܃+Or|'_g$<i܃+ɃOr|'_{Ӹ'W4N ItӸ%WOw4NI{UYhU2Za / /Y] 3# vZ]սz3-ȧGN m4'y 4Yӷ- -ȧGNZ m4'Q 4Yӷ-d' BpOs5!=}iN~_2'o=5rpւm9W㿍ӷ 99kA|ӜDӷ 99kA|Ӝ9aAiȧo[>A.\|#%gɧoO߶|\Z-ȧGNZ m4'p [Os @>}iNrjӷ 99kA|Ӝ4Yӷ\Gz\#g PO߶z\' <5rpրm9'a?io[<n-xFΚm4';WUXvkPA;]m4'hV;]4qbA.ZUOWA<=rrz x\2Wt#'笇 j99Eg*`99g=T0OWUOs@<]m4'(' 99kPUPLs@1]m4';'`)80]0]m4'?T/]4ȹY_??&_/0d4't^7/tOXhk`AM/̈_8t>aHȺiN!S7o&|Ng=!K9OɨxK=V>X? &~|K@,>? &N/ uOXk`aP/̌_|k>ag2jNk n?e)>|ѹ}k{d8o|xEc}i3|룃{@K~jMGGLo}t4AM5rzhn? f#ޜg}s4AO5rzhn? f#g}r4AQ5rzhn? f#>g}q4AS5rzhn?5 f#Rg}p4AU5rzhn?U fchk@W~Fhk@Y~*XF\#g VL^}6aljҳ zll6akkӳO}i3z֐5֜X[zlk. [CpYs5e~ͶFen55Y[zlkwxdل!hGn? fc3& An=r|u)^7[FMXkp@o6gOXkSs@o6?Xi65Yk\:7^g. Ax5Rz^/Л{mֆ`9=km^/Лܾ>ankNჹ}o67bsۅ!G n? f{#v9]{ӂo68]] {*So680]k:S@o7·vanFlnóO#(?n#g bZ|Q~v!Gn?9 vaql !{lqs&9>kr'd/M;ۗ,;',Y͉5z8~ʲ8aplӳOao>aplNSo68?} 9>kpkqBTh/-O|6 9>ksHi/m;BCN{:So9 asRm6HOvof>&`)=ˬ~&\#g-kzzqo}93zۜXc{tqoD\#g-mzSmkӶ@o68jNapm8O^;!G`n? f{9>kpo/ S{½o68jNap.nOwo&ɌKk,!w!w)^75ٻ!HFN n? f#% Cssb bz~H!ȹFN n? f#KkSн@o:8¹v {Cts7@~JF% =r|Swi^7-k7]7Y{t{lox]#g v|v {CPws7@~s|3KP"|E{,ww^7-~{Cxs8 ,nqP| E_'%i^7ar6oӳ&ؼOԭC0zs59~&GnE՛kV@o:9'097Y{trOar~o&O!8FNZn? # 9=kp}f+~r {C}sen`n?m &{- A5rzw^7W<־=amoNу@o6x\#g zq ﹷ68Yk |dm\{- A5rz x_7Ys!FNo?] &c{5!8Y[|dk\[|`9=kk/Лlk___'l Y Ή%zo?9 k [Cs%o o? f[#GTakpӳhOMֈ_5dY8') _7{x 9=kk2T/ЛmXP!ùFN o? f[c_]alpOد@UXE{"o6+~9>knKt/͍ ?T!ŹG`o? f{c±[!xŹGo?9\9M\k,xx)_76aqq8;8wW7A2=r|x{'x$#gmwq|k0:8Y$d_$md qFH;8Q od{N2/|'Hƛ 9>ktds!8ƹFNo=arq3&[1ۧ7~Mz$&5|{9&/8ϯ[9>cs<-oI9lI| k7ǤGO|o6$>5|˛c#gl'u7cGk7ǤGO7cUk7ǤGO|o6$>}mO lI|.ˣ8:&5| \W)>quLK6XTx[W_SU=Tx[UצƟlWIC >ϿFOj|Xj|kɡ'5|09^'/<3ƿMɓÑ?)deצƟLWI| kS|pdO &+$>gu)>yr8'm|S09u9>krl09^'/x~ 09T$o7>|u>U8>IJ8>|X7_GcR0:^'kS|pO V+$>u)>yu8'q|cq:8>|y8}mO^qIxeؼ6'G9`uRO_xl^_W#R:^I'/<6KǿMɫÑ?)Xձ.YJ:>|y]:}mOOk`uO_x]w_ғGR0:^9'N/;ǿMɛq?)xvםצ8ǟLWI okSzpO +$w ap'5rz8`p2OzWk'5|08^'/~ƺp|R#g+$/|XOjqx;OXI6NXt^ _ufT$F+$酏uצƟWI ںnڔ<6J7>wzT[׍_ғdžR06^'N/<ƿMcэ?)txXmצƟWI O,kSzpdO +$}?=akIblWIӋXWOjqx;!luFNlWI k3zi|X[i|»ƺiڔ54>?Oj|Xcj|¥6' 5`mrO_au)>yn8'sl|ƿM{ñ?)lmצƟ WIo6}mO^mIxe!LuGϚLWI|oXOzQ`sO_xX_Sm>l:mצƟnuP| au}mO^Xm|-kS|ptO V+$?|X׍OjQ`tҍO^'luFN6+$mצƟLWIkX_'cR09^'/kS|ptO &+$>c7}mOosxpr ǿIb LWI| 'Ǻq<98>wu)=yq8'q||XW_R8^)'/|r9}mOsIx;OI59nxu)=yr8's|¹6'/9`qrO^|Ǻs|R#g +$w ao;'5rzި7^9'^ߺsڌ$x;Qsڔ69>z07֥9>knT sc:>F:>|ცu)>yn8'sv|UkS|pO +$>sm];}mOvIxpkǿMɋю?)Xu)>yr8'v|Z׎_74xkǿIblWI u׭צXǟlWI KǿMɓÑ?)u)=yq8's|ƺs89>|su)>yq8's|>aq;'=r|h8^9'/|ز6'G9`pRO^vוצ(ǟWIӋXWOjr|{x78 q 轚&7A85rz@8sӋ89sc7#bMoo{o|{Y67 qso_&77=r|7s| &ƹGƷwq|ёy|9>gpl9Ň qsn^AMЍon{n_x|)>7o|{x&ǹG  9>7^8 qFǷwq|W0oq{q_j`9>ktq|{g>o`9>ktq|{g>p`9>ktq|{g_eU 8Y;8;!l75rz7N/oCЍs59@7Ӎs `8HY l;8; 8Yd;8;"755rz5N/<MPs57@5SsC/~H0oiki^|Ɔ 9=klh|{'x [Cs53sӋ_!hƹFNi962 qӳXƷwqz1>alqXƷwq|e|,#gY7o,7&hƹGϚi9>oMs73s| S Ms58@4s| S M0s843sL\#g-0oL88YD;8;Q`8YL;8;Oiki^E0oiki^E0oik,i^'745rz4;~T㛠9>koj|{ Mps75ss|_!ƹG 9>ů}l#g ol MЍs8@7Ӎs| 8Y|;8Op{p_'l8=r|8 M0se83s _&ǹFN`9>8 q6Ƿwq|[Dq|#gm0o·&ǹG`9> &ǹG`9> &ǹG`9>f`9>ksq|{gn8 q6Ƿwq|`9>ksq|{gxo`8HY ;8O0oq{Q`uw_W)>yuPb wq|k`8Y;8;ptM0s5:83s 7`8Y;8;+L85rz8N/mCs8@8sӋ|\#g o|Ћߠt㛠9=kon|{x>l`)=6m|{gx>d 9=kml|{'x&ƹFN 9=5 qӳƷwqwzyOPojkj^xT㛠9=kkj|{x&ƹFNީ9лT㛠9=kkj|{x&ƹG޹9>eamqƷwq|Yom{,m_A7 qƷwq|t㛠9>kpn|{.A7 qƷwq|t㛠9>krn|{+7A7=r|N7/ln|t#gЍot O}l|d"gmodd 9>ksl|{' Cs9@6s| 7`8HY l;8;"765rz6N/ Ms86s  Ms586sC/, 8Y{d;8;gOkkkzGBPojkj&ƹG޹9>'>aoqƷwq|Sf6 qsm_yt㻠>N߫/zʼ ]s38v| ]s8v̻ 89cN8/ 89cN8/ 89cN8ƿc#笎;8w}up{ձp|'򮯎]0s:v0bzc\#g ̂n|t"gwЍtU`8Yl;8;Y.wA65rzN6N/zT ]ps75ss|Ћ!ƹG߹9EvA5 qӳwqwzs>4 qӳwqwzEiki^O0iki^@0iki^8HYT;8"w5=r|5/|N w55rz5 ]ps575ssӋs!ƹFNZ߹9e5 qӳwqwzyYpkkk^x^\9=kmk|x.ƹFNZ߹9o ]Ps6@5Ss {i|L\#gw0Lлi|L#g 0Li|L#g 0L̂i|L#g 0L`8Y{L;8,wA5=r|N5/<3 ]ps85ss| ͂k|\#gMp\S 8Yd;8,6=r|66 qҳl;wqwzl`9=ksm|gxo6 q6wq|l`9>ksm|gn6 q6wq|l`9>ksm|gn6 q6wq|l`9>ksm|gn6 q6wq|l`9>ksm|gxx.ƹFJϲ`9]6 qӳ6wqwz 8Yd;8;uOpkkkzj|T\#g PTg-i|L\#g 0LG-h|D\#g D68Yk<;8;" A35rzN3N/|P Xw25rz2N/< ]s%A2s {c|\#gm[|ݟ?"Mck`lss| ﺂc|#g pۮ 8Ys$;8+Xw2=r|2/|@/hwA3=r|N3/>Cs83s|.D#gMDG-h|D\#gMDG-h|D\#gwD3 8YD;8?D 9=kqh|'xY.ƹFN ߉9GA4 qӳwqwzEhkhz{ui|L#g 0L8YsT;8Oj{j_^Pj{j|GxL`)=4i|gxw.ƹFN ߉9گv3 qӳxwqwzzA3 qӳhwqwz랰78Y{,;8;+HwA25rzN2N/ksCps571ssC/~Ɔ9CCs54/s ?!wA/5Rz^|N/N/|⻠9=kh^|^ O][v]xAY\[r\x7dr]s53@.sӋ\#g =afrqӳfwrqwz랰38Y;;8;pA- jqӳwjqwzL`9=gi`?ޙ9EWA,~bq ZЋCЊs34Њs?鿄x\[9roem5^n߼xO/xl}Op'0sso`!V9 -r`΄8~]῁l8%[_ "欆/3|7[ " |k-["l kXnsc '5 ȁY 4\D}ůaS`ڛ[,jc W/CwL86oNK;&e7'րI. O%~߄90c O%~߄`90cn ONjp"fA}ܿI\10/E:郋~qN~[>跏~70>;&6ȁY'}0nso`|ҏ&6ȁY'}lsO`%w/hE j>Zw]8 "mnN >"(|90/9 Nswo`|ҏ؅90c Okp "f} ٿI?cN[>Hb__ aD߃qmpΗ-؜X|`O?Bh,ϋjN'܄78z&?B:'e5'0Np_^sb X^d~PouN^s%>@x}z&?ok8W9 9a oSp,%לX%0E>VVy 9뭗a ˪SpL֜X30E>T +9+h؏ )8a82kN2eppόa9khX/,8a9kX/,+˲`97k8`s*7J~ )8KZ}`i2pozSk}& >l8l^7W7x) Q5rppGepp~wp\#g Sl^7e p\#g R^7e p\#g 0Rl^7eop\\#g pQ^7%`98k8` 2p(4YWQ 7%,A=5RpzepPU/a9iXN/,G6ot NXpk`9pzd9=<\r\\#g-pM^7Ye߫ hFZ>X3 nO@\r \#g-0Ll^7Yw| ȥFZ >X. na9^ixJ/,;4Y+Mý9\rl\#g-Il^G.U-rD\#gI,^7Ya9iCP@#U-r(ۣMÏ?/*r\#g-F^7Yw",5rprceppߌ}a9hvE/-K",5rprKepO",5rpr?~epp[A0Cs }zl9U HFZ >X pK- A-Rn:en·na8&h6A/ 9' Y͉5p0X n6Z- 5rppep- A5rppepzM[k热f!t03Y|͆C Ͽ03YL͆C()>na8g8vA5s5|y%?܄ F 5 j>XԼ nW Ap4s|yl9۹g8Xg^7[ 73Y͖C&,A5rpr-Zepp&,5rpr#Fep]K c98k9`2r⛃3Y<{͖ (FZ`>X n ,5rpr8|}y';g}9xkd8nprd=V:/S.sN.,]^7[Wt96*֗9epPg}9kpd 2rN5rpr8|yl9_zY_`e98g9`e>ʼ nWu}9kpd;2r֗)XFY'XO4/-;g}9kpd[2r'p fXO6dU7a9f'؛O7/-CMXřk-f!oCs NX͙k`9yl98 A:s|y/c?+03Y'띗t ,mv<#'gms5@|y&=rrzerr04Y'+| &=rr~.Ur BBs%>A }zT BCs }z/T9%'LY͉5r0!XL'ć\x*م !GN>Ln!C;waCh6OG/n8.l =rrֆer qO5waC2i6ȤO[&A.>BIs!@'}:iNrsM'} >i6O'A.> BJs!@(}BiNrD0JQ{, F6Jsr O%R#'gmPJR\9)} Ni68O)A.|V"HOA*=rrֆiK9!})HOA*5rpքiK9?q‚\#g-JT\yA*} RiHO[*.\^T\#gJT\xҧ 98k>TҜgU\#gJU\8)XF βJ`>m4';p;VSJs*}ViN>~< ҧ`98k:UҜ VSJs*}ViNvpXJUkVӶJs U\#g-JU\xҧ`98k9UҜw)XFZ`>m4';wa:ZihO[+A.=AJs+}^iNrAKX{, bKsr oY#'g0KY\xҧ99k>ZҜ⿀ҧ99k?[Ҝ; >4Yҧ- !!إGNZ`>m4'rgӂ]\#g-K]\*,.5rpւiۥ9ſ€\#g K]\|`98k?]Ҝ£`>4HYvҧmd}A/} ziCP@A.=a>}mJNX#Ksr `#'gL`\x ӧ`99k>a Ӝ;04Yӧ ~]pLc{vLs|ހo~\#gpLc\|g98k?cӜ4Yӧdwe,#%gYOLe\*hOA3=rrրik9O)xGN>m4'gNh{Msr iL#'g 0Mi\8)GN>m4'pz SpMs5 5}ڮiNrdӧ 99kAleӜ|ȕ#d >4Y dӧ-\8XMlkӖMs ɧ>4HYtӧ )GNZ>m4'4'OA8=rrւi 99ȅ98} iO8A.< SPNs @9}iNriNpNs{vNsr UNt{ӖNsr UNu{ӶNsr UNv{ Ns%„\#gMNv\&>4HYӧ NA<} i&O[4Yӧ- N>} i&اO>A.~#'gMO~\8!)GNΚ>m4';!L?5rp΄?}iNvp7 5qb A.`59e99Eԗ99gB\l5'hB\#'L ԗ !.AB} js&˖Psr&%X/B=rr΄B}jNrф %hGNΙh/[Cɇ\q(Y_98gA\l 5';L> .AC5rp΀@C}jNvpd}@\kPs O$4\#gi/P_\^ࡾ5Y<ԗ  "KQs@D}"jNr˜`5YLԗm  A0QsD}&jNrLԗ`99k?MԜ%/D=rr~e99ȅK0Q_{&6Qsr޼%GNZ`l5'q[ !GNΚ`l5'*/D=Rre99ȅVD} &j6/DA. &K0Qs!D}&jNrU0Q_{ &6Qsr ﭂L#'gm0Q_\K0Q_{ &6QsrLԗ`99kCMԜwo%GN`l5'uN{ &6Qsr_ !GN`l5'uN0Q_{,&6Qs _%FΚ l5';{/AD} "j&/[DA._D#'gMQ_\*LD=rrքe99ȅAE} *j&/[EA.<.KpQs5!E}.jNrD{ 2˖Qs!ȨFZ l5'?J!بGNZ`l5'S%t#%g/Q_\Ηࣾ5Y|ԗ %/AH=rrք!e 99ȅ| FK0Rs5!H}FjNvrԗ99kBԜ*8/I=rrք'e;99ȅUR_{ R˖Rsr g`+5Yԗm nJ} Vj6X/JA.#'gmR_\ `+5HYV ԗm /J} Vj6X/JA.\_#'gmR_\+%XGN`l+5'r~%X/J=rrֆ+e[99ȅKR_{ V˶Rsr ח-5Yԗ /K} ^j6x/KA.\_#'gmS_\3%GN`l35'p} jKPSs@M}jjNvrw!5%GN6D7%pCaC}mJNX#VSsr O‚#'gmPS_\xԗ99kCԜ“55Yԗ 5%GNl55'$,/M=rrֆ7e99ȅ'aAN} rj6ȩ/[N r9%ȩFΚ l95';P-w rKSs%@N}rjNrAXS_{ r˖Ssr ‚#'gMS_\xԗ 99kBԜƒ 95Yԗ- 9%ȩGNΚ l95' ,ȩ/AN=rrք9e˩99ȅaAN} rj&ȩ/[NA.|$,ة/N=rrք;e۩9IX{ zSsr O‚#%g/S_\xԗ99kCԜ󜠧=5Yԗd' /AO} zj6/[OA.|PS_{ zSsr†#'gmS_\:'lAO=rrֆ=e99ȅUS_{ zSsr w=5Yԗ VO} ~j6/OA.ܭ#%g/S_\8!=%詹FΚl=5';X$/AO=rrք=e99ȅaAO} zj&/[OA.|KS_{ zSsr_ !詹GNΚl=5'pBzKSs5!@O}zjNrԗ99kBԜ !/AO=rrք=e99ȅBS_{ QO]l?5'hBO]?5qb N.z+zjs&D=uԜW"ة`98gASN."ة`99gASNA.z^;u#',vb۩99E۫v"ةGNYŶSsrWESs ةm m"詋99gAS[OA./"GNYSsr j-d'S`.{,CuCu ՜kyN0TP=rrքCu ՜gE0TP=rrֆCu ՜`.{ b99ȅ9P]C5Y 6Tsr "GN`.s?vXCu #'gm0TPA.CB0Ts!P]lC5'Y`.{ b99VaCj6m [Cu #%g m >+ E0Ts!P]lC5'T"`99kC؆jNrS&P]C5Y 6Ts r"GN`.\x E0Ts!P]lC5'<'`99kC؆jNryN0TP=rrֆCu ՜!C5Y 6TsrO%† #'gm0TPOx E0Tse.`.\3'(99kC؊jNrIXPTAQ=rrֆEu՜OlAQ]E5YVTsr ߩEPTs!@Q]lE5'; ,`98kB؆jNvpj&m VP]C5Y 6Tsr[ !(GNΚ.\8[Eu#'gMPT[QA.jVTsr Ǘ.{ b+99ȅKPTAQ=rrքEu՜_VaAjmd BTs5 @P]lA5'p' "GNZ .\*,AP=rrւAu՜VaAj- Y!GNZ .\XSTAP=rrւAu՜ǚjTs ETAP=rrւAu՜gLj- >cETs5!@P]lA5'$, 99kC؂jNrIXTAP=rrֆAu՜“ .{ b 99ȅ'aAP]A5YTsr O‚j6-  !GN .\!aAP]A5HYb 99ȅ'aAP]A5Y( !6%'oJ a 99ȅ'aAP]A5YTsr O%j6- [Au#'gmT[PN.'LO5rpք?uԜoyESs5!O]l?5'P"LO=rrք?uԜC0!A5YTsr %jTsr  "GNΚ .r__^#'LYP͉5r0!lA5'! 99kB؂jNro0!A5YTsr  "GNΚ .\8[Au#'gmT[PA.|. 99kC؂jNrnETs!@P]lA5'Au#'gmT[PN.T{AP]A5HYb 99ȅAP]A5YTsr O%j6- JAu#'gmT[Pɇ\G%~j&dO-99kB~jNrESs5!O]l?5'.{ ~b99ůs„#'gMSOA.> BSs5!O]l?5'?BWpESs..\xESs5 @O]l=5';x z"詹GN.\3' AO=rrր=uԜ3.{zb99ȅgAO]=5Y Ssr $zj詋 >bESs @O]l=5'AO]=5Y Ssr ߾ESs nS߶\-oAO=2rX#9wBp Է99gC৾m?5'$| [Ts!nT߶\tA-GN7o[PA.C܂#'lշ- !7-GN7o[PN.৾?59?m9 b}B܂{ qԜG%৾?59?m99EJnO} ~j&oOA.|Է)9O}Ԝkw8!?-GNΚ৾m?5'!oO=rrք?m99ȅwO} ~j&oOA.C~[Ss5!O}~jNrB{ ~Ssr߂#'gmS߶;-oAO5rpք=m9;-ةFZ`m;5';!ةGNZ`m;5'4'ةoN=Rr;m۩99ȅ9N} vjةoNoN} vjةoNA.m`99kAԜVaAvjةoNA.\#'g-S߶\ ;-ةGNZ`m;5'pBv[Ss5!N}vjNrԷ`99kCԜ|S 95YԷ-d)-ȩoAN=Rr9m˩99ȅ9AN} rj&ȩo[NA.< r[Ss5!@N}rjNrtAN} rj&ȩo[NA.Cr[Ss5!@N}rjN~`;5YԷmd'.AN} rjȩo[NķVaArjȩo[NA. BSs @N}rjNrU{ rۖSs!¿[7-F rSাm75';n/M} njoMA.An[pSs M}njNr BS߂{rۖSsr o#'g-S߶\;-ةGNZ`m;5'?~*ةoN=rrք;m۩99waBvj&ةoNA.CBSs5!N}vjNrB{ v۶Ssr #%g٩oS߶\f`;5YԷm *ةoN=rrֆ;m۩99ȅ,ةoN=rrֆ;m۩99ȅ;-ةGN`m;5';-< v[Ss!N}vjN$,ةoN=rrֆ;m۩99ȅ'aN} vj6ةoNA.< v[Ss!N}vjNrIX{ v۶Ssr ߇Է`)9N}Ԝwp;-ةGN6D7%p}aC}mJNX#¶Ssr ח`;5YԷm /N} vj6ةoNA.\_#'gmS߶! !詹GNm=5'!lAO=rrֆ=m99waCzj6o[OA.CBSs!@O}zjNrBS߂{,= zSs ;-ةFΚ`m;5';'NXkrۖSswķM} njoM+Pা75YԷ >JԷ99k@ԜG邛#'g pS߶\(]pS߂{nvSsr  n[pSs5 M}njNrԷ99k@Ԝ¹/oM=Rr7m99ȅ9M} njoMN. j[PSs @M}jjNvpU0S߂kf6Ss o\#g 0S߶\x_Է 98k?Ԝ۪0/5YԷdU hFZm-5';`+5YԷm/J} VjXoJA. Z[RsAK}ZjNrUR߂{^Rsr fl#'gR߶\xkԷ99k>Ԝ§肖\#gR߶\+-XFΚ`m+5';H"HoAJ5rp|)mK9H"AJ=rr~)mK9Է98k?Ԝ⻃0%59󡂒JjNvp{#W%u##lj5rs'g J*(GNΙVRsr$UPRWAI=rr|\t& JjsC%uԜbp FjsC#uԜࢳ\URs3*-d`{PH]m#5'κ`99g?T0RWHA.*GN6Rsro Fjm !#u#%g+m Q#u#'g-0RWHN.z B*F \C|UQsG]m5';7Zu|#'g QWGA.< >*GNZ࣮\x|UQs G]m5'reZ B*GNZ \*,H=rrւ#uԜVaAFjmd'AH]!5HYB Bj 9AQWG5rp~u}Ԝ 訫98k?:jNVAG]5YtQsr>\ut#'g QW[GA.*訫99k@:jNvrYNQWF5rp~umԜOE6*بGN`\_UQWF=rr~umԜC5YtQsr % :jttQsr % :j訫 Jut#'gMQW[GN ﭂ :j&訫 ut#'gMQW[GA.|6'訫99kB:jNr"u|#'gmQWGɇ+Ѫ࣮{ >j99?s†|#'gmQWG3~FQWG=rrֆu}ԜVAH]!5HYB Bj 99AH]!5YRsr !GN \xURs!@H]m!5'VAH]!5YRs9aCBj6- J!u#'gmRW[HA.CBRs!@H]m!5'uN{ Bj 9Ʌ6u|\#gMQWGyn!9G]5HY> >j9o >*GNΚ࣮\x|UQs5!G]m5'pB>*GNΚ࣮\xk|UQs5!G]m5'-~G]5Y|Qsr |UQs5!G]m5'-~G]5Y|Qs;S0!5Y|QsrO%†|#'gmQWGA.<>*GJQWQWGA.<>*GN6D7%#E_7%}Ԝ࣮{ >j99ȅ9G]5Y|Qsr s >j6 >|UQs!G]m5';jG]5Y|Qsrs†|#'gmQWGA.>BQs!G]m5'T")9G]G]m5'T" 99kCBjNrD0RWH=rrֆ#uԜS{ Jj+9Ʌ7H]#5Y6Rs+MH]#5Y6Rsr ?$`99kBFjNrU0Rs5!H]m#5'pBF*GNΚ`\HX0RWH=rrք#uԜ !`)9H]H]m#5'pBF*GNΚ`\xUPRs5!@I]m%5';邓 Nj&8  BRs!@J]m)5'p V*XGN`\M‚ Zj6h nK]/5YRsr 7 { bj99ȅBSWAL=rrֆ1uԜs bjSsr O% bj6- /AL]15YSsr s bj6- VL]35Y6Ss!wy!d55'Ԝ!7u#'gmpSWMA. nj6 nAN]95YՖSsr 7`{ Nl;5'hC4N;5qb A.MS7N=rrΆh`n`n{ Nl;5'T;u#'lvf۩99E&詛99gC4S7[OA.:4O?59~jNrѩ ~&GN SsrO% ~js6D?uԜSh{ Ol?5'fMSs!Ol?5'q?~[?u#%g  ~&GNn\#'LO5rpք?uԜ7APA5YTsr Ǘ n{ f 99ȅKT7AP=rrքAu՜% 99kBقjNrMTs5!@PlA5'r~uMTs5!@PlA5'T"LAP=rrքAu՜ƒ`n{,CuCu ՜*(99kBيjNrrn{ f;9Ʌ/s j&(d B0Ts PlC5';p`n{f99ȅUPT7AQ=rrւEu՜*(99kAيjNrjMPTs @QlE5'p{ &(GNZn\x(MPTsnnG#Eu#'g-PT7[QA.|MPTs @QlE5'uNPT7AQ=rrքEu՜9aCj6( /AQE5YVTsr 1 &(GNn\8Cu \#gM0T7P.> BTs @PlA5';ЩAu#'g-T7[PA.eMTs%n n\* 99kAقjNrMTs @PlA5'pA&GNZ n\ Au#'g-T7[PA.\ j-CUMS7O5rpր?uԜW9a@zj詛d BSs5 Nl;5'?h zj詛 AO=5HYzzf99ȅBS7AO=rrր=uԜ;n{zf9!=u#'g S7[OA.< z&詹GNn\ ]S7AO=rrր=uԜk z&詹GNZn\_ zj&詛  !詹GNn\|699kCzjNryNS7AO=RrzjNrAO=5Y( 0!6'OJ a۩9AN95Y ͖Ss o njd Fn\|s`98k>fjNvpSAL15YSs bMSs@Ll15';- ASs@Ll15'eNS7AL=RrbjNr n{bf99ȅ41u#'gS7[LN.< ^&xFΚn\x MRs5Kl/5';K/5YRsr$MR7K=rrր/uԜg ^jx  BRs Kl/5',,K=rrւ/uԜsn{,/u/uԜ|?L ^jx ~DR7K=rrւ/uԜn{ ^f{99ȅO/u#'gmR7KA.< ^&xGNn*x99kC^jNraK/5YRsr O‚ ^j6x  !xGNn\x*MRsnn\ ^j6x nK/5YRsr[ !xGNn\!/u#'gmR7KA. ^j6xd'In{ ^f{99VaC^j6x !x99kC^jNrMRs!ʟo/uo$9yMz$&5r37$9'5rb#'gl'9sCL\p_^#!&=rrƆxR37$9'5rb#'gl'u9sCL\p_^#!&=rrƆxR37$EϿFnyCLz 37$9yI@ l5rb#'gl'U!&A.k7ĤGNO9sCL\!-oI!6z|ȝ{MVKֽԓ)9K`C^Ir ^kSrpO 6륞$.6%'oGL`CbIr bkSrpO 6+$.6%'oGL`CbIr 2MS?)z§LbkSrpO 6+$)Ӻڔ!1 ኩ'A.|ʴ.6%'oGL`CbIS!ԓ99kC!\1$9ȅu19UL=I ኩ'A.bZS_#~R0 \9$9ȅ[S_#~R0 \9$9ȅYS_#~R0 \9$9ȅ5צȩ,WN=Irqצ ȩLWN=Ircu9)9yB8r'•SOǟh˩M‘S?)z!ԓ99kCzܺڌ*$pԓ צ ȩlboJrykSr9zܺڔ!= 'A.<ϭMS?)zܺڔ!A 'N.~n6%'oP`CIr OkSrpO 6$<'luEGN6$T"luEGN7lWQ=I~ZWT_SՓ9zuE)9yC8'UTO\צ (lWQ=Irܺڔ!G :'A.\_kSrp$O 6+$rIx]R}mJNIp%Փ  b]R=鑓6 •TO\:'luIGN7lWR=Ivry!TI$F6+$; b]R=鑓6D J'A.\k3rzX#•TO\%צ HlWR=IrZT_7#~R!\I$9ȅuI)9yC8'•TO\x*YT_7#~R!\I$9ȅk]R}mJNIp%Փ .6%'oGR`CIr ZT_7#~R!\I$Ix]R}mJNIp%Փ J .Yp%Փ J%fTI$F6+$T.6%'oGR`CIr O%kSrp$O 6+$T.6%'oGR`CIu]R}mJNIp%Փ  b]R=鑓6D J'A.m6ĺz#'gm•TO\!%צ HlWR=IrkSrp$O 6+$;0!Փ98gBllG5'?p MpTs'm@Ν MpTs3!6pTo\t(G&8GNΙ87QA.:lz#'L ՛ J6Q js&vTsrG59bGf;9ɅޮIڲ+46Уty"AQ%!j~+%@J'g.U'UfĊ%4Ш98BӨ.F5|O._Fu8'Qb%ݨƕE'ӋШ.B2 QLո=Hx!Ш98CFuI7q{rᑰШ.BRb%ݨƕɅGBjK9iTtW' "4qN.Q]ҍj\\x$,4Ш98CFuF׏?ܿ ѡDt)&c،@`1<#bs=%FT/eR]RCg1?M *Sp|)0ꂩj>T jO KUUP+T1DM RSp|)0j<֨)>,` /e\]\-s{8&>!_SP||u1jZ;ƱKM Sp|)0 k1NM Sp|)0!!k]DZPM Sp|)055k-N>:` /e&i]0iC[CZ_:L׺`ZXGxluqkKY[[o-UpSp|)0낅kc !dq /e&s]0ssc?ukKYi]l]&X)(Tuൊϱ=6:5NT V7OB|^=K)`0Euuϱд)8uuϱ M>:` /e&]0s#uCݚRaJK*>:dg9$9>:` /e&]0s#OCRa*>ZGݷ )8u0v0ϻ>:` /e]-s"{|!{M lK%IdLdkKʡ} Sp|)0삝lw#;9>:` /e&]0s#| LulKY)f,fkw`B6Ra*>ZGCg_:L<`<[XG|$X)8uvϱ)<]: !tq /e]sc OXMu5mKYii>:6N$ &E|NY{YSP|v1]]mcsx2 !ĵq /e&]0s#|o9T9>:` /e]s#*8S.XV9'H)8tvԶϑ=s!q /%]!(G!]NI,!SGRb/==܅Kt;ִ)>A%6gT">_]|Lm\1E|v3x׺ ܸb lpg|ᛧqmO 9č+w? eXf7AjԸ ָE|v31M R!'q>#+6'hcV`[ćq@>)>587g\">tm+q߱M !q>cX?k9z,*9N󟾼Ѯ `;%2<^ 8iW4& Hԑ z|DHy]18 3 QL. CU0spv8Hc'X΀DEGB8iW 4H!Aۛ`+B a8Hc,΀Dm 7[ 8A ` <2<,}S]1X 3 Qe. C"8iW4> H3Pj6Ajd89`6<p|FckLD`DW:#wEV^^1D#7Ǭ:e848gy${{! ͼcbRS<SMb=GmL1z̭S2cpdIWL(yu=E!ӎcPL{5E3H1N) #'qE0lQD},Sv\1 sK3Q1N! "qD.rAte V;(uc`=G1-|픢`.0y|{ż{sAf;E!sp)q1Frcxb"q1.&^1\9c OA^;1d+fsK1[L-wSLɋW(y^=xRLEૉW(:a%ܿTA^<)Ŵ+s+0[xc=f)E^` N1e/& _1 \~;kE(bJ_Lb>Gӗ6Z}8Q%DZVA_N<)t+vs=}YWU!cp){1E^DkEbJ^L5b5>GѓZw8rQ%()8Ĕ|ń| "3~Eb*$_MHbH>10P .BNSbrs9z Sb[LTbT⻟BrΥ؈/ONpKW ^tcRbZ[:[x؆+18|Ŏ{rM)8|ń@c y"<%'Lɥ+r6'5xNPK))W, 3³XY"Rja"=NzSzS^)L2b2^^1Oթ )8Wb|bHb͛&0R ^-<>A/` /&_1/s1iKǀ18c`|`y^*DRa">߃0m>A6` /%&_1/s(i.Ra>X/΂qxK W Ƌ/-cCH_:LZ<T]8Ǘ$-y8S,OyeΠU!,SPz|5aJ*HЕ)8t|%]yN{ox}*+ !gq=$+yϷsYyK9W7Ƈ̫BVRad9>=nwC_8LLF !q/_I9{ !Dq/&_I0s_xUϯ`B+Ra:t)?'mwxcw<c !tq/%_Is_i~7A>;ä+Is|½&ȇP}18|{%wϑX6=;Nt+sz{g7<;N+szy޻ !dq N/&^IҝscZ8qN9 uw9;NA1z9H^OvA9l;$+Is|ދX;'Ä+ s|qs(l BRa9>G89]!̎cp|)0QJ#^,r8Ǘb$y !4q N/%^I#6]0cp|)0JgrruK)iWZ<初cC_9)7RXgp3H:i\:V1>\1|tg|m4.M(_F:7RSܷFGKez# uϓ4.M_F:)7RN<_Nфf:e^z#tc$p;KGR8Ǘf2d9>3ƭ tXG3F e:G18u4Go$yo-˸u4cp|hHޖӯ7n8ǗCo$N93!tq /AoHCضV8Ǘ@o$uE'uCN1|:HC8 `BRaD9>3!q /evH#|p+usKYɜ79:pq,'됓b ,űNW(78sp|i0ƪ=|n#l5!9ބ8Udˎ)roBrҲae{<[MH_Z7LvxkBq qK7V|#~^M7!8cpzi0Ƣ=z΃oBna%;N &q V3=xCỄoBjҶar{G 7!4ބ8N]9PYȌ7!3Spxi0R=x5?*śP18mxcu=/,a&q N/m&.X\GGx8 o,-ޣFQ&Dq N/-&,XXGϑ'MH^5LVxWoy!(ބ8Aqz5XTG뉇!ěP)8jxcEl8//,vu4 o8+oh1]' q)8LFc2$)< cxㆁSpxØL0|"p {ms; 18bL>^86|5twIȅ^1& H.qI^F2&S H-s$#~tI^2& H,s,׌Ih^F3& H+s4#~1tIH^3& H*s<#~3tI(^J4L)|"pF E64P8AB O$NyX~*jpKONy !Tq />J86<+ipKiONy W B!Ra )SxnS8\ô'NM] =5` N/&>88uj M !q N/>:8uj M !$q N/&><8uj M !4q N/>>8uj M !Dq N/&>@8uj B%Ra )Sz[h !dq N/&>D8u*i!dq /&>D8d׶1 !dq JV3AᔞҩhoLC^4L |"p {TýNxh^J4L|"yp {T8 Hs8<ô'$x18g4D_8 SHs28mᓑBRa)3xN|JHo88=΂ipKO$Nil[ f4B8L'R4=4B8L'R4-`LC(^4L|"upJML/LC(^4L|"upJMco8 HD#DC^J4L|"mpoMB`<No?ݾq!}|>,A+8}XP-_ݿmRR 0gmgL >9Mp!۟nM`(8\ g8ep!e9uNC4>8ghlk 8~~wqp !Wq8CN%\cGgs"0Cnq9q~4k`&r9W3f9Vr>5v,Sp\1NxS'83ЎWJ8N ' >N7ZoAI8N T'">N3vU!$pi!1! d 0elDh `FLK|rZ=9wĂ9qLɉONN|!mΫ`"BQ&bS`(984ŇB~`"BUUT'*>1eLD_DLX|r<I8)?C8g "q N/ &.>9qqzt8S5?xLJz:C >çF "Gq8D Nd\H:!rkWC4EW"rrWC4.$E7 $rzWS4BEt>V)DJ9h S x1<9DDsPdJS"!~%+'rWC4~E̝*@$ӒbS&!zWL:8( !]'P.B.,1=N) pig1Ig! "q 0m,&X>9rc,{7ŧ spic1 c9Cc860ѻ❳ ,BbB2!:r "q1+, N\?=r|Y "X SX]O2 qsC l8!:$n9e8+8gtgvW!6/rއ6'8{4 W<6i`vM[,|U(gU2Ϧf>C}wz_'(u>H7 r<>r gR75qX m g6.8gy<}6C3@x>t9q!8#i"fEG5ΉeCM|>1L,>:b㞀Cpbg"=B E7̇8%&qJ,M|1L,<;t918#f!}$Fa -:-72mN8b9ή PbHokG6v q\1θ5vvphsvȽq\15v&b q;c LJ^^Bj±^ץL'Lg|56vtbW-yc:|^=8R`235xv^x+|,Sx@ȕq\1TgmK`3WpO^*2> >߆൸U%o,q*%(>CY{w!4x)rpgSb HjW~n^şRx#}UU&QLBN1$ x|uw?=|h)Sx=zJ3OYq\1F 7@x1i 8]Gk0Dw*/cO@\[d=ͦ)N BSpx)0M"CZ[/=Ë?O Ki)P6 kqO񉀫? qjbjMU|!} v+>O ]q2 b@c0᧘ G|*,>A98 m j8 rUW3um^߽z|CX18|dgk|ߟuw?yCz@Op 9++׀cW{Ugِb k-** !Gq<#V9ᯢ⌞`rTW3q?뛗wOu`5|| ''Y8tgl8Z:w r[W 4m*@ƥ*N yqLg-DhSpCH`9Lb|w}_8&ҿ[ȉmaŰۚ mn>ᗟoCͮ[B1rJWh/~{o ٥kKxd|U8NTgi : b Q i_n=?O!9vmS|*>o8' !k/B 3rKp\1Fθ?n_9|O[ !N5l3Գ?u|Pod*LV` tۧ,=Ëw+kSPxbfGt7t IoB7znl3#oP!D34! ! f!qDcѾ^өϱ aB1zF/x3plSzcp\1F8t5z⯿Y'ch@G[L/lvlSzlp\1Ft5z*C1zF8 C8ӋOJ r@W3%m3 N !q=S!-уq̂3zBBR $ghkkP8.-N8'(v)r,F9r0zhz ׀98k =m7-jqKI9QOi,ipKiP9Q, B8Ra35xh\"xP 18gZ l uB+Ra:35zg[3N8<4gek8ӋwgpKy)ʖ=*x9(=X1Fx5zg酻U spz)0u*=3³S7'xv)g2 lw,CȂ]2L|4α)~7*XP18e Yl cvCh]1L| qxO+P!8a )l c[|JjC(^J0L{ -~*P18_ l ۴WV/7tg(`K`{zUM sPzb _k:G*BR~a3ԯ5z_ǒ7')_ kgz.wC~^J1L{FQ-~ϛBRa3T5xbl{xVe$C}^J2L{ڵϑmo"8 r4#~{4C{^J3L{ь BRaj3$5t(s7ŧ_>Op ,Sx)0RXAcWC7ɥgPkP,“xǘ6%'x)W izžN>,0Meb1 >\_t"ĶqW+_->tg|rLgS|vp|XLb{д_ݷ߸_ _/S^ 9Cx]Xlo0p/cim/a=Fd\n-|RC}'"tq / ˽@x||{}F\-| R_CQnKr/~7b٭vnb8'r^wޝwW굇xt&5n\1hָߣ?$Lk# p$n\1Ddp?n\[Z\A cȌ`|{A籬M v Wq3cXbZЦզ3ܸb1Lp13hYLj6e&č`p{)'c62@Nl1f 0= SxreSfYJ LZ{3})8 E!fs|xvcSfYLH{3\MlL3Kg/bfYJL1{b3Xuf̚B%`3Xb0ρ,MCpd) 0eC@5Vc24@Nb1fF0= /F4@`YJL{3Bƻ&hP)8!f6BR` FLkxWB,@H]YLz2sj  q ,e&p`zXuvMk3KYiZ/شb:`BR`2 fG3x9  q ,U^Lzr3mNj3KiU/A1C ⳴5e&hL44YMlkL!YSpf) 0%JVf΍B$hP)8Zժ 3Ԁ=>֘ B8g^P5aBR`K&αBR`K&̜3BR`KT&@>8  4q,eGD=>2LQo/>!dB`2#Q  Jxh@HNYLrz8h9F)2A4Cf Ld[3fA4Nd(+Mlqrb8gR^4a<#Ҙ8gR^4a ,()8p 3Ps#,()8\ 3T΍B$R`"K&˜2  q, De>2,Bo{A4NAzЋA/Q0C B X "8GHXnA"%V!3 20p,g#K9=/Q CA3TL)e @h;YLy>ȿ q,%DEg ` 4.q!88/Qƙ %>v3My_6Y(G-qJ3A*͋4/Q ã5|e* if#K4 2<tl,Sdѿccc~F~=}Z)>ev+Òb)N󟾼̮܌D1f >ŧ͎]eMps+ƹ:̄lphǦ2&x ، D fy<8ԧcOb\ql21)]n]1HA^&)=*-NJ2&XL܌DeyaP 3!86b-/Qn 3S,Tn2&4q Vc3u 6|R` w `2& ،%Deyf8zw,%Sl%]1͘BTV&؜džӑ BNҢ`KT&ܛ BHҞ`bKS& BBҞ`2KQ&-% ēq- &Dey8% dq- &Ddy8% $q-m &Ddy8J Ēq-m &D>6 %Oqa,A$f,!J%lh qf,A$[L$y"ZBcb,Җ`KG&؜@x Dq-m &Dady8<Kr8ǖD^$2<[Iw2-L9w 2-(LE-ޓ 4q-m Dd 0j.A!CpliK0% lxQw %ccZjk?bUgliV!xC0lb[12.-aB8ǖĎ(vLG 1ZL[e-a55lA zU[V7^1Lw۸%BزE 6|`-aB8ǖČ(fLSd iVdCplYKXMxj#ϽU;*ClGKK۸%&T\1rjBk2&vn% 2 aF c =. #<|0]ܦCc!8E*\Fb)1E&X-cȌDb  1E&\,cȌ DbEm 1E&؀\,cȌ Db ?s_bL0X+Ɛ >yb=)2N1Cf dN8+[dȅb\1Gb{ D& b#KD% 2'I GBRG&MFib)E" ]b#K.Ȝ.qxZKCPd.jkK#ã-<T!KCpd%^Y+ǐ GrW!3G*q * Qb#K(ڍ˄ICpd$^M)|ѿ$!8ѿI$q  tV_(Yn8F) Ab#K k1Mxcd@˄!GCpd#^9戧~5_YFڭ:f1Mxֈcd@ ˮb p/Ljq2sߍN GBRGEv[12 (>hѿ"!8ѿIq *ᙌ& %b#K- GBRGDvKު|z 2 G0a V 0ebk7Fcs^66`0ǖ}>`5=#96`-|I$q [Xf؄"1AqlU6PaMcK?`k7L~}:cckm{h.10m&9mM&X 0yⵛ'_$`B-؜6Ax1:L vCplLxHn~ y^7\q f qŐ6mgT7_?p ٕgj Cs7*OSpnOb۷~{ ٵrMUp'')c`X g^;] 'H\+CLxZ89X{!K!bJN\*ZhۇoC`p>r;DKk},>V CMxŎGd7/qt?_ݽ 15|z( Cpia0%۾8,~ v5]LxobdvAm!O.[|fҾ`r+~o泧_Xw8e3CZiX=cO-ޣ\`]j r!p0n>{}_o!BS.C:F? 'q 0&pb7 1 146 CS. .0B. ;[?Wl; ?gx ?/ q,E!_`?0hxSomdgӇX5dG\1K Sp{L)yxO??폸\}1OP 9lA L0egۇN19>3zL%SYegۇҰCvyF:faX)8ag#E!Sp|)1 *>GD?D2LĴW=;ߏx)y[*X1|ʄWlu/u XuZw)V'2AqpF7HܗǛ?_޾ ] _yr] ?!ČSOi*ļm>|Qzv^||,׵O MfKyi2P)6}})98A7p .Bw+.qK_]J5Ly%r)(e dcۇ3g'NA٥ ÄWh!v>ć&.tCԙ nSPt)0z:+v)(U Md cKx&w)(O ]}|xMqr8$k# 9hg /#IAoPG  goC9@2zC20(-ƒwEM C,Ch;=X-E/'uhMHj}QfE3P׀)8lCo3 wOO7q Ch,7 nBcgڔc#/=+zy*>1Op6?)8b+vTtt^p;Ĵ[1/-G(_Bh:)`n. Sa43ᇜq!M An"čBh.~c! SpK&˽A: 0 0ޠYqPLɇIuoPx|s[x~`1nPL]0 : gCi SpK&߽ag1uSۡ}>&ζ4.AH66AH侷C`!=g8<7ud*8Sްx뼮_')8n}| OEIU{v8{oaX+.kIUAD;ZJ4L{þ(40n$mWnM Sh)01 cm{kLS Ү"K6!spv)01 c;A-1I 'LɥT7L] ULB{;-dbeb8G S1==> ?E cPtnz;tM}ދ`BmR6aj;VtMoݯ `rj!t&9-l"|G^B8G ޱ8-lb 6!dq .e&coZ@D݋`BdR6a";֦tM,%F'؄18MicK^8G ޱ4-slb ؋`B^R6a;vtM,C{lBk]&L\{8:X)$W8%*k怜cbZ 2BKYmKjؗ9o=WlFNP l9ȡJC*P18Jii]xPWz8GR 1,-C8 ꪠBMR*aj;ftgtA]TBhi]J%LK{ǨU.>4TB(i]J%LI{ǒU.V8GR Sޱ+-C8 ϮWA%6ѥTĴwLJ#&1(TG{7;:%]oLmKɄg92ya3rLlg@Α_nLlKɄ g92QM cpt)0:G&4A&\6ѥd¤w'=Α8w7A&h6ѥdDw'=Α87A&f6ѥd4w=Α7A&V6ѥd´w=Α7A&F6ѥd4w=֞ѵn\BHc\*49.`IP Spr)0MibsT׫5#'vyQ '=NQ)4I0 Spr)0ݩ`sLb K&A$5NɥDw'=N-$xн)8Gt9>OFkKi]NzOEkKY\NzcNDkKI)\Nz#CLCqkK9[qܚs2~Zg!5NAɥJ׻)]t#8̂CkK9]4w#8Ķ5A'Hv6z?~/!/` UzoN󟾼ˮ;`?Ծ}}) 3M?mA];=f=^xTrXSzCkgF.%r!z#0ѳ˟zYSzKkgF. ֔r!z'ѳ˟{@Op l=ӿޱ-уcך8j`女cZg? ikJOp 9l= fkgz^,U'”wBkاpq \Szo1lg.<>ܿ9Z?~3c1N^' Kw Bt gab?F)D<` 1e&c+:1M! cp)1)Le cp)1y<9簎5O lSR&b;FU~/>1~lgG|%ig~.6'4q /MC{ǜ c|Di;[>6U~B6'\v|1 K<'_6sdS~Imgˇ'ӑ3V6'v|LL<ߝr fS~qmgˇC|S[x.uCi;9?o6$ejCnY!A ÄwlJ'/Bt.n!LAѥ„wlJ+.CBi;=΄wlJtu3Òc jv`R1ĴwJx+>*䠶CU`[Z+lO 9l>#ؗVvdVveSUimgӇʴ {c4Bl;>hƦUp<_%?)@+ζCW`r|yhw !gD"=O9bz@O0l=c9?YuhSztmgH#>x~ymgGjZ$֮xᩨcG2prs!p90?=α6FWtomgE^n@o;SP~)02?8Ǧ6%(v}1LQAWGHьR[\.;K#πA#0b1E=R?):0`ήGg,[C ԦA8:bQ lQs<):-`ήGg[C([k>Ǡ6E' \`z] A8:bbU؏vs!AE#5~c膭+U.4.:&Zk 3GgWk](]tH MK>~^9t pV]u?6qo):&f.aΪ肳vap6q^t pV]εwmRtM8+ѭ]&Uu6qo):&6.aΪ wݰM\[N g8ݠK؄roE;lmY1:^G~``mgV361!tM̽llb ѥmtPQ/']8%樾񗎁L&QI`zcsK cppi(#0C=9*o}c18EcX>1pC\!qLPsbރ?1pA\ 1 Ps b Ƌ ] 1 Ps b 1^vQA`zzU03E+: ;?1p?\V8ƃ\Osa\bɥ9G rA綝98ATcX"DBDbɥ9G![?1rC\!qlOsbߢ!c98DT#"HľE[ spri!<=D}L"z:FNPK+D3 rٹ&xhۙA`wzDlMPζ3'Vx?og: NgXR~cVϫE`xzNQc'z,Oh jn!tF$<={JEcPsF3&qtSSz jn!tF%<={Jb >涽Bg\輧$9tPmo8:(:vjov lO# xpۛϫO`|z#gtݱM RBg_mo. Otb]ë:mo. PtbWtBn{=y:IЉ7E҉&y:_N7eFٹO]Eڏ{ jz!vF(0C={캵D$x{ۛKl|;0z}F9y2 >1`2*G=v=Emz j}!t'0D=:sxԦPV3B9BQ;gfA(c]J(f#n{# no.% =3PcgA(]J(f#n{#g"΂P9(PF( :G(jY7EDDh,xyۛKlt-otbmo. =cחtnXn{0vy =qE7EŒ XzA׻Bq,CPAvދ:BB1^RBpkۃ9ubbAѥb1B6y/rZOz 8E[D%':A({]J(#nO{#sTB1^RBp+ڃh[|"x@ۛK b hs-PdzA(PF(x;U_^Yf{s0tny =Ku|b|b7ED@sP<^˾Zy񉸖y/ݢ_=N m:q3s|b>1R>bщlo.8Myst >1`2*q0 9:e{sPt)e?wf%*v_StNloCn΁&x"ۛKft"Ndsta;vqlo.щ8y=&xۛKft"bstb{g;7'ƣ ]'6qs_e :1ƠR:؜{DЉ7E҉D\<{;7&C]&vcqBgtq.x ۛˤϫM)lγ=cPSF369:3`j!t& 6G&B_{cPr)؍LkNΑŏL9(LF&5G9չ 21^R2#kT.xKnd"_svLS` lo.e8y͉Ω]7EDD|.xۛD1:\9+q(Bۙs6z]16Kѭm lg.cKDx#v*`3r2Aeduל(KG7nE(`;sPt(~]5Gu's*q(BۙD1ׯ9:/|{/?2 n}6NpLoSt)g0낽k]|A;t9:0Mѥ tv]+5G'8Ʒ)3u޵_ݡcM kÍBg{ :.ܥJ ߦR` :.<;9:A0Mѥ4 6tv],5G'X)5u赂.>C?Ԭ9:MѥT Vtv]x}7E.}7߽{&D,o_BRFa*>*8l99>*0M U|Y@e fEn/e]׏?ܿ_^~s"|V9!Spt)0kts.u!uM,6NA)Q4I$E7bCS|Sݔb7L`(P||zo?G~?ÛֽO0ltyQ`r&!t8slcU,5G'؆v6z F_?Bzp7K8=o^|^r&] _ɰrz4w`S_b8KŲeF@LJܐ+#.zṂC$CNf;>H֣uh_6(v6} lH蜮:49A6~Cm`JZ'GCCh;>D(uvt@A;䘶Cv`WZ]M=TBSSa:AG|Pζ4 iwcoF;49AD侶C`jZ'H/pCl`l,NG< ͂mLնm O!{x|Dn`HLt`~Z'Ik6'((v}QP% HSfH7N u,)8 w"Y!ƍSp)!11]j#$sx$3 >"$q 0#&]Nt|dw"anL slT`#BS6bC:@Hx^pdDht`JFL`Z?0<."q 0.&]Y ?‹"BS*Y"yuay9lj@Ra:Wn^zwOuހ?bmFAf`qWǐ{-$<}ppԿkRv[J=L`z#[ CsCu;[<G9/6&vx Vrsb ߫_mM l7XVC=97A+HC܌V`z#[L² p3An[?=)7΍cPn:w1uQn:t{msn;ingwH(7:!͹ g-f ]Ÿdž:wD$pBs`JL`Z)D)pBht`J!L`Z'Nk._nLɄIuVAP18Vbwx'SOGe?"q,&]ZroO>׻q*TUR!tq -]X}׽O#spBt\)L`n<'CbQn"LźuV@ >/CuOp 9l<Xyn'RnO 9l<#خyk?><ܽᷧB|`kU r!|Fį~]o\Ǹ778яjB2?ԏj=)q!8~TSƖ~5z*q/c+Ʊe|h[o\>P!8|TSv}7!D؉( zGBk@PpSlA&N\'] -ALXC8rw$t /ζ4^4u΅&DN;>DX. :WKbk@PpL9IW'].Ā;IP!`CPy5u$k8 F"q0e$&`^d Qr P9`l@#$N\]0 nD`JHL:ss$|D`GL:r^߽}{ջw$ qc6B,SfbRI,'aC唥(rܡ0857XzQ8w=&)KV伹Ca'o~`׿|w?=Ok9opWy0*dq/~葴+wMc.N5 MD]M)Hݻk>o&A"X&$s9I4&AIsI4f`ҙP~~_e/'A"X&$a$I0'AIsI4f`ҕsIh$EnMAF"ʹ+"L4 "vNׯ&:;&'Nr&aN_nkEx~C2NrO߫7.b(%3D8ʩ^e/>p;E+Q(IWΦ>W˹"\UQ*"gpҕ/~;Um͜URNrſ*fNVEx~&rF'rjߛGa(uQ3 E8yG/5s(+s3 E89tۚ9Y9"ʹG/5s(+sEG`;ƽV΃@,b+s a(IWܫ$P9(:03g?v@,bt(:PI}B^e/'"XF!Pt&]9πEӍCCLr- *{9 "vN7# E0YBEӭCSLz`;[EP"t,KE*{9 "vN#LE0S$Tt*En%"ʩyoU3(=̚p~M"tL:DsQR`ҕsqǞ}I)PP6DsQR`ҕS=d&a"î6Q&Ja&IMj$=n%AF"t\I("=n%!&"t,iO*{9 "vNQ Lrݛ$@{5 JD) D0US$<vMPLzT3Lx0k5r`ҫz eC]͡,88^5g>2ۚ5i 5r`ҫv:^MC]Ӎ,00^52L`k1r`ҫvl^MC]Ӎ,00Κ7fCatc( 0 WML`(En e!tׂ3Lhs5r`ҕoK2!XP*aIWś Bx1s9J`;B En"Ω"\S&sj_t ,bt03ۅ Q!H{5$*D%D0骹 Q!LT"vN0Q 3L:sNUr(En"Ω?N"PT"vN7@Q CLz'(*`;EE&sꏓEӍ*PTP9I@Q%P9E5 E0ʹg*"XFQ(a(I9LsoW0at 0fq%TT *vPPQ SL >V*#XQ0a0Iݻ$d=2BF5LF0Yo*A#Q4a4IwOQ%l=6F5F08`GUਆ&]=W[#%} J+ *”~ω4BIPbu+ %0%3h]=e'$FRHjaHIwO@R#=HjI- I0Hj`IM ! &=շ#7I@lbt# $0$F HMn$5$tTߒ#5Hm.Ì^=ߕ "uH)È*9;!N 6{ԅz`Sg'y[' $bRLzֹN@Un u$T' !*vPRL D`;H] &U #uHm.Ì~:$XFRHaHI?AUwBIPbu+ %0%+hjC' &*vP7`cL Ipb+ '0' 4(*vP7L BJ5R+ )0) 4)*vPL BJbuKi)0) ARBJ#LJ0'l 4)*vPLVǡ ARBJ#LJ0'8 ARBJ#LJ0 ZK =PJ3 J0{R4MIplb+{ '0'iL`IS0i1 &]=WjOBI5{J+{ %0%WOIiD=n"MAF$t_I7&!$BaBIgv>4 MH )4À/$A@H3 H0'~Di@Un M$ts$4 *vP7 L sB`;WHW!'evr[#(b+"hpOP핏{FU^#$F 'Aݻ7nb|e3H8='rs_IӫUD(%ᤳ7aܻWnb*|U3JI8߻Wnb*|53JI8#ۚ=Y$=$tm͞C2N{GDfOHx~)zF ']=j}!r['+$b!t &=W]z`'\SL{jOݻ$|=>:0ݽ^OGCL:{4tGCLz6wG#!|t&=wG#!|t&]=e'#!|t&=ܻ$|=>:0x |t>MnGG`SJG)G0gR~~df"t{5BG)LG0US}36J`FI(&j!ۚ5i5R`ҫ8).J`EI(&j|q`,bt( 0wN_NBEP,bt( 0wNED((En%"Ω&J`;DI(&swEA"X&Q$Ja$I*{9 "vNQLzT2AL1s9r`+{`;DY(&]9Ur(Ene"Ω*ʄ`;[EY(&r0WIsUr`+L(*Ene"tL; eBEӭ,TTyI(*Ene"tԿK^e/'"XVQ*a*IWEME@at0zVB0k5J`ҫYDm"LTLY*{9 "vN0Q 3LrN10Q!L9&*D%D0y,^, a"X6Q&*a&IW 0Q!L9&*D%D0S}&*`;DE&s/D0,bt0wNND0,bt0wNB(EnU"ʩ?P*"X W*a*IWΤwP,bt 0WNPm͜BE5LE0YtdVBEP,bt 0Wo'JsUTj`ҕ**"XVQ*a*I{vBEP,bt 0+g[$TT "vNPQ SLrſ*"XVQ*a*Ig7*JsUԄZ`ҕS?^e+g#T9BE-LE0̙{l"fQ,ja,Igϲx,f\S&sho"XfQ,ja,IW=U#\&vOpQ sLz;F6{aZ`ҫΝQ#`90jF- F0ʹx$5F &``S}.j`EM&5Fs]ԅz`+N.E̜p~N"tog'X "vN7`QcLz\v,f\S&9OxvBEPat 0WMN(Enu"t<]R{(`E]&]=Gֿ*ꄊ`[E]&='A:N6{Yz`dpQ'\9.E=E0[脋:"Xv.a.IW#Ah.E̜p~N"tYw \4"vNpsLr.9}I)\4\9G `90F# F09;Ah.=n "n*`[ECh&j&a"î6&a&I!AkE4F`ҫ9Ah =n "xOh EnM"t\<&"X W a IWUo&!""a"IwO'Aۚ=i=f`S=ag&`DSh&}O$L{5&D3D0US5$L4 vM0 3LzTwND0ath 0WMIh(EnM"Ω*`;[ESh&]9o&"XUQUEIoN_nkEx~CRNzo^}"vN/W9P^97r߫7.b~e3D8ʙݫ'.b~3D8ʩ½^}"vNW9LwޫG.b~53 E8}ǮW/5s*+sv3JE8S_nkdUW"gp;:^}"vN9T92UrsUta*I3J*[9BE)Tt&]9u߫$T9*:0+~ƽ^NBEӭCSLzTBE"XV!Tt&sP,bt*:T9{PAsUta*I=;P,bt*:T$ޫ$T9*:0+{`;[EP"t\|gڽ^NBEӭ$TTΜY ̽VD1s9R`ҕS^NBEӭ$TTΜefWIsUR`ҙ_uoW@at( 0Ur(En%"tI}ҽ^NEӍ$PPΜOcޫ$P9(JE) E09ND((En%"(?ooW0at( 0WMD($=neAF"> eBDYد)DD^5L("Ene!&"9>okEW"a"IWū Q&H9$ʂD9D0Sl&H "vN7 Q#Lr.ތ eDM,HH62ALsIr`ҕsL($EneAF"t<O'eD0,bt( 0+~.ٽ^NEӍ"PTP^9{B*E̜p~N"t\(\BEӭ"TTTΜ ۚ9i9J`ҙsp!TT"vNPQ SLr.^. "XVQ**a*Igűd*{9 "vNPQ SLrſ "XVQ**a*Igի…PQ!T9**BE%LE0̹zU**`;[EE&9W BEP,bt 03&[5+"ì W(a(I5S&{5 vM0Q 3LzT_>ok֤IW$a$I•Q%D{5"BD5LD0USW*!"XQ"a"I:!JsETj`ҕsIQ%D9"BD5LD0S"`;[DU&]9_S UBD-*DTD:+!JsEԄZ`+*[9A"X W$ja$IW;@aFsMԄZ`ҕsFfNEp~N"t\*j`;[EM&9W5BEӭ&TT9ՇPQ#T9*jBE-LE0SF*En5"Ω~*j`;[EM&sO5BEP,bt 0+5F*Enu"t\*ꄊ`3'\S&]9넊:"XVQ*a*Ig۽:ۚ9i9z`ҕsvN*Enu"t\?*ꄊ`;[E]&9 uE]Ӎ.PPΚw{uE@,bt 03g@Q'P9(E= E0̹zW'P "vN7@QCLٔ7٫IkM4F`ҫ H4fMb #LzT!"î"a"IW;@!ۚ9i9F`+Ah"En !&"ʩ D4"vNLr.^A"X&$a$Ig3ǃ D{5"BD#LD0骹Ih"En !&"t\<9 BD-!D4D9IA"X&$a$IK0$L9D3D0S}}(`;ESh&sƜ>okQW(a(IW{'IsQ4f`+$P4 "vN7@ CL:sQe(`;ESh&9W/OBEP,bth 0+%Ih*EnM"t\1 MBEӭ)T4TΜ&IszUԾ~U19qwήPtoS5q&^_5P^5՗UrszQԾ"t_ڸW˹"\EQ"gpҕS.^e/>p;EQ(Igų*{9Q9(j_UBNrdW˹"\EQj"gpҙ3)?osEӋE(+N{(E^!rF'9dW˹"\EQ"gpҕS'^}"vN7# E0̹ V΃P,b+s a*IgUr*EnBEG`wαc?}֬Iد)Pt&jOD]mC3Lzԟ9`;D0f"t*{0,bt&:L^9D]MC#Lzԟ;`;D F"t\<;w$:"vN7A#D0̹zv Ht$En%AF"t\<;%D)HH]cOA"X&Q$Ja$Ig0m͜D)D0̹8^e/'"XFQ(Ja(IWI@Q"P9(JE) E09'E@,bt( 0+ٹD(*En%"z:7٫IkQR`ҫ*D(&=n%af"}dd&A"î&Q$a$Iq߫l`3'\S(&s Q&H9$ʂD9D0S۽^NDM,HH9;3ALsIr`;q{`;DY(&r/eD ,bt( 0wN Q&H9$ʂD9D0S+"L "vN0Q3LzeEӍ,PP9"BEP,bt0+B*E̜p~N"ΩBEP,bt0wWIsUTJ`+F!TT"vNPQ SLzjNBEP,bt0WN JPQ!T9**BE%LE0S+"TT"vNPQ SLzTUTBEӭ"TTT9UBEP,bt0wNUEPQ!T9*BE5LE0SW%TT "fNb?PQ SLr.R UBEӭ*TTT^9>okUW*a*IWN͈@Q%P{5(E5 E0UsI(EnU"t\$LT vM0Q 3Ljo*A"î&Q$a$I_ND ,bt 0+gן*A"X&Q$a$IWΩ~ ^NDM&HHΜw6D ,b+s 0wNF$En5AF"t\}I)HH9W6aFsMԄZ`ҕ3aFsMԄZ`+0(j`;EM&]9bo"XVQ*ja*IWFsUԄZ`;2f#T"vNPQ SLzT_l"XVQ*a*IN*E̜p~N"Ω uBEӭ.TTΜI'>ok֤QW(a(IQ'L vM0Q3LzT:ANkIz`ҫ~7D"=nu!&"  `D]&j%uCat{ 0NxEnu!t\|QZ'< "vNLrvAxhE̜p~N!Ω>!XaIWũm͜4D# D0sNh"En !&"Ω$`;DCh&99A"î&$a$IWUND0,bth0+PAsQ4F`ҕs(~(`;ECh&sd"XF(a(IWvNE`b+ 0cIh0UnM#T}>~4\Th&U&#X8a8I?Ag'IVy4f`OP^~B`;[HSi &UfF`;HSi &jPBIPbu+i %0%C J8iNUn'M$t-W %4 (&vO/ׯP:;'N{j޻FOWpE`"zt T9BEG`ҕSX̽^NBEӭCSLr~3= rדplbt.:\Ξ=- `;Ep"tisp,bt.:\}'ᢃp,bt.:\91ܫ$\9.:0wN)`AsYta,I{Ur*EnBEG`;{`;EI(&rݫlL`3'\S(&9GzNE`,bt( 03yV{`;EI(&jPBFbu( 0t*S?^e/'!#XQ2Ja2IW΅!DseR`ҕSr{`;[FI(&9_{,bt( 0+- *{9 "vNQ LrߺWIser`ҙs9{,b+s 03g^ۙ eBF-,dd9<3ۚ9i9r`;g&T "vNPQSLzT̄2"XVQ*a*IWN{Ur*Ene"t\i6*ʄ`;[EY(&9Wö́2"XVQ*a*IgΡ^NBEӭ,TTs.'(`EE&j/D0aք+k 0WMB&Enaf"t\4 D]m!L4L^5?AAkI4F`ҫ~" H4"vN7 #Lz  DM!H4H9AAsI4F`;o'AAsI4F`; H4"vN7 #Lz_d&A"X W$a$Iy $H9$D3D0ʹx*~&6\Sh&s&IsQ4f`+$T4 "vNP SLzT&&"XV*a*IY$T4 "vNP SLz$T4 "vNP SLzT9 MBEӭ)T4T9UdNBEP,bh|crwN *;9r93JE8S}^e/羊p;WE+Q*IWN= *{9U9*_YRNzUrszU4"ʹcW/5s*+sV3JE8ʩ{oWsE]ӋD(W/>~E^Q(IWE}r[&k"b5L&{5I{5$_SԌ"Nz\rۚ9Y9A#D0';Ur`3'\S#LrNPUr$EnDG`+ⷓ m͜4DG`ҙSd&!"î!Dt&jړs*{9 "vN!#LD0ʹ$Ht$EnDG`+➈ AsIta$IWδ$Lt&EnDG`+( Pt(EnEG`ҕ,'(:"vN7@Q CLz;D1s9R`ҙ3~^f/("XfQ,Ja,I?A7ۚAiAR`OP 2{A *vPQ L (:J`;[GI(&U߼%G$||~joL J VR`Oߗ J VR`OЮ%%*vPPR SL߱rP,bt+) %0%WNL()JE̜p~N$Ω>τ2a$X6RFaFIWΩ3B\S) &r. eG,||Μ狀WIsur`ҕo˄2a#XQ6a6IWuQ&d92BF9LF0Sg'\ "vNpQsLzT˄2"XVQ*a*IuPQ&T9**BE%LE0S}**`3'\S&sOBEP,bt03gYɦ*V\S&s꿝 "XVQ**a*IWβ$TT"vNPQ SLrvB*En"tB(=n"t֬x)~}`[EE&= B6{YTJ`s= E*\T\ΞM;r%XT fMb`Q cLzY UE͢*XTXΜ=_x`,bt 0+J,EnU"t\|!^NE͢*XTXΜsI*=nU"Q UBE]ӭ*TTT^5UcVD0at 0WMJ"=nU!&"t\  `;DM&}LOll`&\_S&jwCP#<{5jC-C0USP# uBEӭ.TT9շvvBE5s*+s 0yAN(=nu"n&ꄉ`D]&jOtD0,bt 0+~Խ^NDm.LL:aNsMԅz`ҕs|R'L "vN0Q3L:s9 uDm!L4LAh&E̜p~Naf"t\}u&`;DCh&9}&6\Sh&]9OE@,bth03Ah*En "t\sn(`ECh&},?aAkM4F`ҫ.Ah&En af"ʩx0,bth0+B0 L9&D3D0ʹ8j&`3'\Sh&9WĜ&a"X6&a&IgLND5s&+s 03I0$L9&D3D0̹"$L4 "vN0 3L:s9 MEӍ)P4PΜ'MBEP,bth 0uaIh(=nM"s(`;ESh&]9(&"XEҿ<;&'Nr(WmyQ(IgUrszQ4"t\^e/>p;E+Q(Ig˘*{9Q9(_EBN:s.PtsEӋUE(3E*{9Q9(_MBN:s.PtsEӋE(wNME*{9U9*_CRNz>qs_Eӫ5E(wNC*{9U9*:0wN*[9BE)Tt&}l@Ur*EnBEG`ҕS ^e/'"XV!Tt&9Wf?`;[EP"t\vP,bt*:TΜ+dBEӭCSL:sy*:"vN#LE0̹BA T9*:0Sd&"îF!Pt&j.v(:"vN7@Q CLrog"P"fNb?@Q CLr.'E@,bt( 03*{9 "vN7@Q CLr.P%EӍ$PPΜ+%E@,bt( 03 E@Q"P9(JE) E0̹BQ"P"vN7@Q CL:sP%EӍ$PP9ǝ"XVQ*Ja*I+oPQ"T9*BE9LE0S}-*ʄ`3'\S(&seBEP,bt( 0YU }I)TT eBEP,bt( 03JEPQ&T9*BE9LE0̹RQ&T "vNPQSL:sgBEP,bt( 0wNa|&T "vNPQSLzTgBEP,bt( 0wNa, A"X&Q$*a$I]ABsITJ`+B$EnUAF"t< Q%H9D5D0Sg*a"X6Q&a&Ia*{9 "vN7@Q CLz_w*"XVQ*a*IQ0*{9 "vNPQ SLzԿV*`;[EU&rf*"XVQ*a*IWδxD*EnU"t,?vBEP,bt 0+&JkQZ`Uss@Q#P9E- E0w4E@,bt 0+7E5s(+s 03͈@Q#P9(jE- E0S}(j`;EM&sm4E@,bt 0wNF(En5"Ω5EӍ&PP'FsQZ`+➝PQ#T9*BE=LE0ʙtuBEP,b+s 0+gU uBEӭ.TTO wBE5s*+s 0wNa|'T "vNPQSLzTwBEP,bt 0wNa|'T "vNPQSLzTwBEP,bt 03gj"BEP,bt 03PQ'T9*BE=LE0YԣUr*En "t圳u X4&fOb`cL{'A6{]4F`ٳ|$`y[' #bLz.#X0a0IWN9Ah.=n "t시"Xv.a.IWΩ},`ECh&5k]r,`;ECh&9ۡ?< E͢!X4XΜ+"Xf,a,Ig՗wNBEP,b+s 0iqIh&=nMaf"OD5s$+s 0+uIh$EnMAF"t\x&`;DSh&9Wߎ8 MDm)L4LΜg'IsQ4f`ҙs툓@$P9(E3 E0̹|Ih(EnM"tKE0$L{5&UD|]Nq*9:"F·+s"g&s*oQYe/6s:Q}e9P0S!&{5M]i+dI1V˹mEN}_YD =Lr߫^m=,bt*ra+hDIM 2äWN@~V˹mEN}_E =LrbYe/綉s:M}9L0SsDIS 2äwNUUrna;E@"Ωg"X W(:P9Շ@,bt(:P9{Pm͜BEG`;$T9*:0wN?$T9*:0wN坲?$T9*:0wΩ$Tt*EnBEG`ҕS}Yg`;[EP"tԿg`;[EP"tT^NBEӭ$TT^9D(*E̜p~N"tTg`;[EI(&9X$Ty[3'"b?PQ SL:soYe/'"XVQ*Ja*IgN-5?$T9*JBE)LE0ٿ ]"X&vO7`Q cL:{oQYe/'"XfQ,Ja,I9zl&{5 vMPQ SLzT=N"îFQ(Ja(I@DsQr`ҕsaL((E̜p~N"Ωә eEӍ,PP^9ugE5s(+s 0WN=5@Q&P9(E9 E0ʹxOM&P "vN7@QCLz$L "vN0Q3LzTS eDm,LL2LsQr`ҕS=g`;[EY(&]9K~VIsUTJ`ҙs[!TT"fNb?PQ SLr.(BEP,bt03gRYe/'"XVQ**a*IB*En"Ω>, "XVQ**a*I+EPQ!T9**BE%LE0S}6**`;[EE&]9Z( "XVQ**a*Igջ BsUTJ`+gs**`;[EU&9Wo*"X W*a*IPQ%T9*BE5LE0Y?Ԝ>okUW*a*I9= @Q%P{5(E5 E0USB%PT "vN7@Q CLr.^*"XFQ(a(IWs@Q%P9(E5 E0̹L%PT "vN7@Q CLr~; UEӍ*PTPΜ+WE@,bt 03@Q#P9E- E0̹2f#P"vN7@Q CL:s}I)PPsFkQZ`Us((j`;EM&9WFsQZ`ҙsyN(En5"t\ޱ(j`;EM&9w"XFQ(ja(IgY9 5EӍ.PPs={'P "fNb?@QCLr.;NsQz`;0(F\S&soꄊ:"XVQ*a*I:NsUԅz`;N*Enu"t\| *ꄊ`;[E]&9W/uBEP,bt 0+sPQ'T9*BE=LE0ʹzI*En "t\=4 BE)T4TΜ BEP,bth03gM}9}I)T4TΜOP T9*BE#LE0;X6 E]Ӎ!P4PΚ;Ah(En "t\ޱ(`;ECh&9W/ E@,bth03ꥢAh(En "t\T4 EӍ)P4PsKE@$P9E3 E0̹g&"XF(a(Ig=$Py[3'"b?@ CL:s'IsQ4f`ҙsu> MBEӭ)T4TΜ{Ih*EnM"z=7٫IkQ4f`ҫ$L4 vM0 3LzT_&A"î&$a$I['AIszI8ʩy9q+'^9H9:UrszIt|%3D8S{$E^_Y"Nz9Em͚EԌNzT^e/羈p;WDz"gp+^}"vN&rF'r6=>~%^Q$IWNɹ{&E^_C2Nz\vۚ9Y9"t\ӹo_nkdMWl<0{a"X W&:L߫$L9&:0+*{9 "vNa#D0̹xW^NEӍCCLzTy(:"vN7# E0S۽^NEӍCCLzw|@,bt(:P96Ur(EnEG`ҕs\A P9(:0wNPAsUR`+@)*J`3'\S(&]9D(*En%"t,:2ۚ9i9R`ҕ- %BEӭ$TTΜiq"T"vNPQ SLro?XDM"HTH^9hD ,bt0+ٹB$EnAF"t\*a"X6Q&a&IWG*ۚ9i9j`ҙsNJ*EnU"t\f; 8;T6"bp ;W1髋ϊ%_Eb7[o QY./zA0={b-oV~)/=0廞;:Ӻ>Pp ;p?e +XG %q=_?<>]-kQ.aւsjM\[ޫ4z|-^nt8?DtKg@Ǻm[^4'%pwǯtK}{Go^4'%p^__/QkZsn.8f-yoZf-9j @zq~|=W5яG &w'<.}c͈G(x T燎I4#f3c$'x .:7%a>a5ßvxw3o3D3>a6s=O~z~o4Կ͔f~\lzh{Z4D3\lzПăh{Y4+D35\lzhS%q s˿M-hIUf|cSGq[3- pf8AZu .5r.$ႴrQAi:rp KY t.^Կ_.F5r3oF+#}O;rp K YH!`{BRO^5r./d8(>Ι(G0˹Ԑ<ǟ`~<~2XB\bӿ??ߨճ,n2nbClvYҢ]#r-v.9d!8k'nvhG۹y] nC|#vvUo7v ` EΓڮ|+!` [!xf9v"` E ɫgf;ň"stH|qo# [\(p <Q(ٛWv;+Ĺ Ͻڡ+ -v.WCrOCWd1J!\Aj[\''<ўjȋ(+#q Sypq^=nasBUz"-+q `3Y N-vSoSv芢WTı q|#vL>ύ7-v.W/OCW, @ynr8L>aT;tEMV Wv;+ Oڡ+J8*۹\!OxL<]Q+sq LgSuq_A8۹\!Ox<]Q* wnr8=iT;tE[ w-v.Wδ4Yvx;] vnrEh\W2ƍpmv+j'\'Ssюpq$;nasBǞ8vo)oQmyy`lasBu&"-U" NR8f=1L7Ae=]#-t.T#Τ{xTu"a N28>=L@U= -t.RΤ{xTM"! N8=D:|hs+q :naz+ΤCOds3 N8qָu|&^{|fYg_z?ۚs&X{گKVgqluƣ~3C~%~~C_lhp?_83qL5naFTgj&48o5CB$jAꇟv  ݐ{fs~ڭf xV3BZ{Vf賫~ڭfB xVOa%'X?[̈́df.Y#2ϱ~i [>w]߳N4#4@en5Ý=}Z=#$@e[\GYgj&5o5{pF&@N[\SgpekdոqFu^QjyL88 Φ΋W? gRv3ęyq&ك{F88 ΢΋W͞2I=#@A[\gPԫfOߕ Ξ-f.E3Y!@9[\gNgqt^9jt&{VgMv3YyqYp~9cjF8>cj&8cz 4P!@-[\gKҫf; Linr8S:/Δ^5{$~ Β-f.,U>Zo ΐ-f.3 U3ם hnr8;:/Ύ^5CTuB883 Ό΋3WU= Ί-f.E3z@%@[\gDgqFt^j*lhnr8:/Ά^5{zT m5#@ n5X j𽨺*,hnr8 :/΂^5{BTpq4na7s9@g@~J88 ~΋WMF%@[\g>řϫf}$@[\g=YϫfO_z x-f.3Uo;g;v3yqY#@[\g:gqs^jt{g9v3p@s9:g>ok6?V3Ϋf耡?Og7v3yqv:`6ġ͸qhs^ڼj3i͸qZs^ּj31͸qLs^z88c}͸EqDs^ld{" g~ ,g6=|`8&}4M͜G3=\lld#e-lc89/e6=|l"Hx+`Hf#'-1?[ل 1D2}M`qzBd#|@oe>Xld{"G0?[G0>=?e+x+Pe#@%G/v6yq3 cq ;K 8vqB đ˸ͥqr^pr B q˸ur-qF=eR8j9/Z6=|@1V6B 1?V61Fw Pq2nags)AG,ٞ>Ug#@[\J+F%G+v6yq:XeR8V9/U6=|@W @[\JG*őFO,%)v6qyqCB Qʸͥqr^t $@[\(gqr^ld{xG: %G(v6yq]F:9>F(>>&8>ȆJhmPqp2nags)A'ٞkg#@[\J'&ʼnF%G%v6Q I &/I3}s:\.3ׂs{U< |ߘEKع\*!g<q\q98y|e$C=.3 xg" )v@8\@pLڿxc+`!NE=?VCl@9 7z==q,rӁـr+qرp"F.x>0Px㕏=Qq4r#ـr+`U"-p;E\td6 [>=+zQGf] ؈=wq>rـO qp_"#"H.xd0I"]} ]%RӒq;G"E\`6Dϩ}d\炈89Id?p*D"!ʸur(L>Ʊ|+v>C=!$ 1|Bs~|!x0 iB#BoC|OIC}|T"|+G{>r4" |+M{GiCN#AoS|O(M2|=~|x`1 e&}RO\b*\ʧ-}#m=|C81\'u,"|+Ph{RGy?gꠏr~ u\'u]Pq3asC\c.ߓ:D8!x.x1IEWG"A{\g=<2gR8A\Gu D8!N.x&2W{^Baиϥqt㑹|OhYX{%9#Uj쟛QF>D\QLfsW$kMZv<Ŷ e 8/e ]Lo!HD.T"Dth2O=a-uhǗQ.O>Ó Uc6}c`gЩh孆 x`>q&7tyyt}Ǡʛ 8::U8CGVt L)ѡ[^=t[hM rz [tWiM r: :)蚴CS`_9}<z>AG7B'|3qt'tF#\nK+o:N ֖`y*1#8.."1]0GqBg*M{Kʛ8:M%lUpCGVt L0ѩ61G aDwѥlBt T02Aԧq \J&D}`9NNՔB9|t)Y8:U&+ !DѥdB ֙TqB&$5KɄHR4ѩ2a,LejG Q.jSe>] 8.%"P]0FK/=Jѩ9\tNu8:U&sٕ "WsR2!rGt||x~~o?y<}oWGe|:W >Opu_~xx ||z`D4i<&HhV{ ;o<-iuuTmcpЙkF ?S4SswV)a"t[b*LЯӔGy$wwxY+(moQ}BqhʢD`fC J8].WXDryDD7sqDpED 6o&SmS?ѽsE'LT[]'JBWX {2D5w*e Ap'𛉪g6s A0':=񛉪6^Q›趺"DTxo&}#{D k QaMX!zi3N%.+,BD3af3p&"֎sDS$bxo^=箹>:&ώ3~\|OK4 &O `Im\wyv¥+Ԅ`|G~o OLeקO7|5E`ݿwyj[>BqV꜉( ?{ݟ?>} ͨv|rhtv0M1fL{Šy "'ֱ/΁3QEѽbsb}Htqc^Ebs&iه]axAp'IVc>mNx'шJO4|H!r8O2e6"_$i D A|)$HCn} m<LHW,A_k 4rCqd*&_ELbS= sh& >Ȕ݈|źz7>0$+B `g= sg&H >Ȕ݈|za7L A|)MdpH?v;)YC1-!0ZLk|C&.}U$+?/wLCZD=Gp7 z|3>?<,,>z7+!|j)% OW;\YZ3Tƻ D;B+fl>k.8BrC2`D= N<3ϵ[.8BnC"`B= N<3OK.8jC-`@= N<3%;.8BfC,`>= N<;n,MpG]WrPɕgpoJ#d+o9N387n#@╷'jQp =pD+pZU+fPc 8!MCq6.7BLC܄8`1=M?GWr )&\!āh>8F|\z"m2BB8>|Tz"!>78|Nz }P@q \Db%= N>To 8. " _+L᪄7YxWXHSa*U('ȡ;ψWwt]y!rBoNCyh#Wvt]y!rbNSܕ{w[rbUqG]gWr}7+:8!'iLp8YXGpf]^rDMpɥjU+ r?F\D$q\618Lp3EXV0X[lZmy~SR {9>E؈DɥA4+V rʩqI8@q \Dɼb doZsDѥA+& t?38@tq ] Db@}p#?q'R&) aߊوDgɥBt+`I7]MqĥjW&)1!x8KW f.:%JCK`@p0e2Aq ]J&Db@`?ؤ6Atq ]&Db@atB'7K|WZ{ &3[;D٥|B+ vO:Dѥ|B4+v t aw "΍cRB!:E(fv0 ֍cRF!JKqtμu%tHv.:|!tB'^Mt~~J1|t)kv`v:Ag7B't+:M':J1|t)kfDNnG ر&i:a?Hh%tw>NxwŔ5N ;6Aq ]&Db͚@ل>+aDѥlB$+ tM6ATq ]&DŻbޚ@ل}J1|t)Mm8:X{FgmMAoE zW&i6uaDѥlBԼ+V tM,vfv6A7B'l:&B6Atq ]&DǻbϚ@b_й6ADq ]&DĻb̚@RM 8.e]1eMSlbMlMnG &Щh2unMnG Qﮘ&Щi2unMnG &iK?uLn'& arDkK4ڍSx"7 ry'rk>uFDq]F&v7W4XD#8.cM4ƫ vMS!Hv>N4n&i:a&nN4؍c2:Da@oN4"؍c2:Da@M.nht>M4n&imC\&)|rh"0JMSdN;e%nG&J ;:E&ZtC&1|t)8:X{Fg~a'B'6Km7M6:A4q]J'Dcaa`=hVˎ ;ؔ&i-c:DQ9|v)%ib>MOlg n؍&i-:&B(Z6K e7,E&B)>6K)c7lC4(NDHQ9|v)E9h*ftMUlg nX&ةVYB+5Ki^7> ;;;^Aq]*uDa`y 8O.em0LӬb fcRR!j S:M*S3DѥBƛ tS4{;1NA$q])D)8;)`;A89|v)4ho7NAdq])Dº) 8;)fNAtq])Dú) 8;)f B8."bݔu;m&Y>Ru3"!tJKA||)d=|d=B/5K酈_7'~'|nDqM$)qgn:v#B8/"ݜO>02nDTC)qgI&؍b >n*vs>}dhc7R!ic{TSD!lǗrQnN!ç:f":ٍd >uNvs:>:TD.lǗnN.ç[}f7"R!͉f{tFq_:D:9l>3w\v#8/n"ݜO,8nDFCda'bڍi >uvsb>:sᕰR!)j{4?zrMmgRnNSc)#|j>ovs;7&2@ at][y!8PkߧipS!*ͩl{4AԶq`:Dm9mbV;6Lyn7Ժ6<6Lŷo7'T4D'ԣ h7l{G?g~ nD'C[ =ǙGI|~)Yr)rg#܍s$>8w ĹG4 93]Fq_AD #~Lw#28/ "?-q0^ۈTw#R8O/"=1?}{nÇrQnZ|CX7Kźu@{O+bLFu7"׍cR!r- { ݍv>q`w Gdn0dw#8/"< "݈h7Kv@{O왏oDnÇ nlVڳOt1|x)vi`Aq ^J1D#xbQ&ݍhw>avw G40MFĻq ]J0Dvj{5DnÅw7n|37DoÇ n&hD» oÇ n&hDĻoÇ n&hDƻoÇ nʘ̫w#B8/%"!<10 sR!Z-{ Dͻ5oÇ2 QnV=Fq ^0Dϻz#xZo 8/E<DӻMoÅjz7nV喨z7cR!-PSonDCt[=M%ލ({>bw GG1|x)mh{iao/ 8.e"q;06nDC[ = ]G#ߍ|>`w G4hDoÇ n&#|>`tQʷ WYȝ}w"cx7 x>ëqN;9|z"=0Jv:DewľG4(bt݉7(F}ia:DewG4ǰSih~ws2E#zeNt;9|z=U3ш{F'8O/]{=zFNv"݉7ˈF詢aщ8K@|OK/ N$q ^*E#xh DyjNDq ^J3D"#xf8vމ 8Ki@|Ok t"މ 8KYȀ@|Otމ8KI@|Ot"މ8K9@|Otމ8K)(@ |OY':D  C{ >u-Nq ^0D Zxj Y':D pb]{ >u=Nq ^0Dz#xjb.xtG4ŰaNq ^J1D#xbd މ28K)(w xoCXDap' ~&HNt;)\r.x]wP-{ׄp "cR.!bݏQ>{;AQ9|v)%"yȀw"sR2!2π h.Txvz#>PxvZܵ#ߝh>PwrPW'7NK~w?= y(~wSR:!/~i:a#bߝ}>MwcrzDG1|t)48xBt;I|z)w0 RF!*ݯ|iϢ=³ 8/Ʒ O+|<"݉7K|w?=`=PQD٥BԽ_Ekew'8. Z3Չw'8.%Z{zw"cRV!ݏziQw tQoDѥ|Biy6jw'8.UjC{;Dѥl h7=3hMEG:a~{N SJw'*8O.%J&Nq ]J&D:M&%ܝhs>L6wtLt{K1|t)Yg4/%ܝ(r>L"wtLt{K1|t)94X!DѥdBĸѩ)n"݉7KHqw?=@=Ntq \%D9ON݉ 7Kpw=@=>I4;1|t) 7G:w' 8.%3O%Nq ]J&D:5gNq]&D~;5gNԷq]J'D};g?How"sR>!ݏoi!۝ho>Ov6:DymE*owQ~y{N*Ft;1|t)w`Bd;9|v)gȚKD;1|t)G4XM%۝Hn>QvtQNq ](Dp:(VS(v'j8.%&DkmG ~k{Nj'J۝(m>NvKtN M 28O.e"̶MNl7bb"݉6KElw?=@=6>N$;1|t)'贇؉v'8.%"X;D^ѥdB䵻Skw"cR2!ݏkiOmA'݉6KɄhkw=@=+>;A;Q1|t)e'ڏ$ڝj>Lvtsb"QDUѥdBT_Bvehjwc267Mt:E(j:MM]&pΖDN{%r8.ci~N{N JWc26귴40DI{%J8.c(i~I{NOXu+^6*2ګSDC{%8.chhVC?ݿ/?oynb/u /8/HhVB; Oq 뒝* ګR~_o~4I[ֽEe+n8+cHfJ2ݛvϻ~ÇO;"8T-Xާ.n8ġߏ07W(E@{U_P~f,a@{2]v'/!Oa*|tzA =!J?/̇0H"RȇRצA|i"+)WA QJxxD >2mlbh\W냔s 8H%Ju; jw$'0R YN J$AqB^w$zWr(>˴8Ĺy.KӍ,aE՝`[;Kq, Q|rE% ,?ܿ;O7oQ^w#Ym9oGv^7O6FT/c歍vCG79\!ޫfbcABk買C(eo /OϏlXW`tẌ76#߫*.c>k݅}>ĴɈi؟ŕHx cL{H~Jƨ[q#0 s #߫f1bc~wuo#QA\"QR9d罬ڷO'Q_:8?gTԥƴjTyyR>Q_8ۥuF_` cJMǨH`u )S#)jc^/k )|iUi1&ĕHH CLKJlZLPoIc`dcDz|U4IL_v]]X%IDq$&y{≠O0'6%_,9OMBe}$>ɴ͈Ldyisߧ>CqdgD|U:4 сI|i Ui~2 ;)m|O ?!|vi UI[ 'fʫ<Gqt}cs1i{i A¢DcPR6*wA#Ν+o7M;/xo秭~Ȟ>"{bm[3oߗ[2s'LTW ~H}1EG`d|= ɠ{ qd"$*!>]rՑ@GqE y_!{/ߙy e%?·)"NԼ8A( 0:`+BD|w<38"_cRUW(yɕgp}GX/1p M+̍C p>t 88n \+b@;N<3orط]pr\'qpr bUa tW Kw" b C#n8 Ӽa3.9Bd989M[pXsR +Ļ4wX3G,9|r)yarB=r%ꕯWB;NNgb:DɥAWHwigcrtW }pwAN*1|p)}qp>jtT9KHP펓UsAq\J D|fw&$0SsR!:+4h# >AJ 89 }d' h>AF 89 [;!DBWu38[WB @9KW(_' Du%>@> 89M q!tW Nw&VB 49K HP鎃b0@er'Q&_!' j`Z 8O.%"LB;NN@dq \D|Bw]%􁈒>>( }kp Nv@$q \D|: I88MfJQ!1|p)sqpK!0AcR +k7B9KHP㎓S]Bw 8O.@B;NNvɾ }#>?l;A;Ntɼu;b#8O.#oPߎS/]:[ָ@lDqeb BqrKC\ 6">s289M ) Fq\J Dk|vnd&B 8K7 ' Dݹ0"3sR!24h.9B!`\J!DZ|vzLm"H>B=89 A4q\J!D?|vzjD8 9|r) qrCtm">CB89!y6Adq\!D|&v|6Atq\!D|vzC 8O.A:LV^șs3Dpa6~#8.AWAIu]tC>C-if}EGHKIgoЏfia>4mۇ]tE>E`hT}EGhKidofi"QLw]tG>G2uhfŔ}EGKaoЄfi.Q@GK`ofi2a>un׬]tK>Kkt78Xyg_ѴWð۲k8ySoUbv*sR*!D;mǩ]rI>I89#&}%GKVom4b2 .8B#` \J#DzNszO+W pD>D,U88M!fpB>B88M f`ɾ##B7h-i0HV0O.-Ai9NNyG}9|r)}e RarLԇJQ1\p&;'f%HL>>89j`۾#L9Za1UB4KKo^a1U4KMo`S{ryUB 4K NoFv:BN}(Y*aDɥ BTqzHN}* hQ>A洨Gԇ2ٟ8B 5K hQoNzN=`~%hQ>?洨YnDpZԛhQoNzNj5B5KC+Fo]p=8aNzNZo1r=1j\#'QȩSKFsR jԛSSo>F9|r){9Qd==j'ѣޜH&\#Q>>GG2ODɥA7G=">| z8O.%G9=9Ģn0GsR=M7G=">~n'Q>BGG2n9! 5GTt!"5K9(RoNzDNܴvB! 5K)RoNzN)BAj'Rޜ z7S 8O."H9A9LP"HsR !ԛSdߴ 8O."H9A9L;G(Q9|r)E)REjBEj%*RoH9E9L)_+DɥB7H=">i3*I#NR9NzDN}"fn[WB!&5K)hRoNzDNUܶCMj'rѤޜ&yu%hR>C&4GT V!(5K9RoNzDNu)!R>B,d,j F(ѥ9\r.&ԛӥb#S>B0愩G4X-UG1p 0y'\٪KLO2~B|\)m9MQu/zM=r[9 8. "H)At?O}lz tW }P,@ '6F#$S?!JZǿǁ}vzEj‡ޔDߙw<8oO=B&N52t9|r{cո"o;\Ǫ}>e]2OY7 |>{crKq,\޾5G|8e 2O/aUgF.p(Sq\Up)a˿ve ^9;ǘfƁ=F/,>pW5A2 ja췼LpqʡLL(qU}x>ٰe.,>|?B'W7_} |)ƱOC'Wm_@:l|q;-/,>>"oҡB _]z^5uMkeEn4/{p{0`<ã#>d?5ヹˏZ?~7mjlLK$B)[Sq$h=1e39\+SS1 P:{齉N.>}s n}mP 6tj tr yLeWj1tB+5N.>_ؕ@GhVV PRwoD'ЙGSvjlZYB7 PZ֟?wK/޻VpezU/5GOn\y61zB05u4̓'xbf1xB0'x|~x˻o20% ~T<XhleE  %T4c2@ l [Y(b% 4',3'"L&fY{`ʊ3ؾfvw_1 ʗ:= +§!ؿf'|恧P'W }6O.>F$qB/ͽPj=l\|h\{ u9|kXfJ{, 66_/Wk`q/DXżd+c8?Xf)1->UG(+v`/qg 1|~rEPf31+/v 0/ E8Ƴ~Lz?HXL[Hmf!ź$,- 6Pb=!$,- 6Pb=($,- 6Pb=/$,- 6JHHq~BB$_JHHKKuo7$z˿GHKKHm&!3^?BB` _ZBlo3T 1VBBme _ZB,p3T 1VA ne _App3T1"TBA%ne _ZAPq34*/va 0/m UF~T{KH˭K Hmn& -Εx[&?X|gl+.?X'K ??Ǻ1|~ih?-OBDNē.@X(D @UD纬>\}@UDsWQp !"00-"3UO;>BD%TE>"ω+s" 8PjGī>BD,TE+!"20-" 3U1%>C03S=$<$W=dq! !޸2/!l`+c`E,34 o+cr?  M{)||iل`(l FHHLK & >E@96B?Ure _Z?6X&g)aJ7ɕ)||i؄|`b_ o+c .9Oqžf##%Wcirwɕ1|~i؄{`᧸bɕ1|~YD|8y.>q29q~w{3?tDq _=&'0OSc1>OWq_\>p _V>&(0PSc1>O}LDec  ?>!(1|~YD|H9Oӏf<qD9$2f~LLDec # ?? tDTq _?&Q)Rs#>s|4ATq _?D|’9Ob>X{ R8/"g>aΜG1&?9KhO4g)Qk'"jc! ~|̄~Us+~`ٜy4Adq _>D|´9O*V#C'30f=9NKHO6g)Q}pjc!~{Tڍi&܃>{as|4A4q _=D|®9Oqjp"ic!f~{#܃(>{dVC#܃>{dyc!.?X'Ë)ѺyhODC'>G>~hݼvhODCtѧ[ϼvODCѧ[&QF1|~ie2:.>?~~]tǗEn>GQE)||iU*:.>/ D)||iM&:.>3 QD)||iE":.>3wDq _>tK{D}"r8/m">ݒC'|3QC:NKOqj"bC)||i1:.>3[-h>vtK Ǐ"c!R-)t\|g J8/>RBg~aS">!tBn 3?<Dtq _L|D}"*8/]AD}OL "A)||i:.>3ՃhODC4Ч[踸Mo1|z t\':.>3(>ztKٿ}ytǗ6@n >S!-s\|7FD|"8/->?g~#>s?n??9NK{ȟOq }܊ȟODpȟOqًDq _<0vy3?q?Z=`EP[9NK(Oq f_mE'|s!-s\|ho> 8/m"|>>g~珰{c!-s\|7#䃨>|tKA4'yS!-s\|gD$q _:y>tK?x>s痖Qs;/7ɿ_W 1%gXFo&JR6?&ٻ/8B3` \'C)_݇&3tA fZ>3"Lh10߿IO?]Ne=,` \'BI_}sݛOx٤)_Dh>M"DS'g~Mhg[yis…+bЄY( OОϟ?O PSg# )|rE P a~oN.>m<̋2^tY>:"NXR/²%K< ‡&WĠ Phy>~W=cX~x/<%` \'<kzo:$96)(::B# 9*(: l:9 ;t[=3OM#8K/D~|8AO=3OL>=8q\{gz>=B8q\{gZ.'#,N8=a_LbpbKE֥c^8 0O?aqTxyL0:++,a?z9 ;we1> 8Uq\tg::*+E`T:"O6|p)bL :)+f1)LJO,wpLq >Љǧo?{uߛpd?pG4G8>,b35tO|ɹ[r60zsŬ^̢.>c].@-_ qh8ph8f17~ Pb 4$84{],3o*_qh\ph\f$1H~ Pb֍C: ͺ, 3o*_Բy!wff/vjμ@㾃s@3 [A7h܀phڀD|ƨ @.@M'ڗ=Dp+糨X9H d$$8O!JX=*J$c<Ӟ$*3Voyr0s"<Ȣ>д',Y[jLO":84I>c''-S<'“p:M{NIω$s@Ӟ$J3oyb>,oO"84I">cZ'-$s@Ӟ$Z3oyb>PoO"84I">c|b~Lxc9\,r3oyb>ro Q"84-J">c(-u Ѽϰ@ S"T&odτ)w6%q1~ PՔ̛y0%s@Ӧ$3Voy&Lȼ>д)[d>n S"84mJ>c)`3aJDMIg T5ܱ S"84mJ ?c)M=aJD*MIgL^ܱ_S"8 4ݎE;~v-@US2wCBϴ#8q[xd."zV$QV OUO|=LϘǿ<×:,Q}{f=L둨XOӄ:ӴNns8uYgqjjTCp#v+8a>S3b]>δF&F>ʹU!D&Dݾ BT !9|i!B y BT !9|i!jB y B!9\"SQ{=!47ˆaD03mDMQ{=#47B⤕Vq %jDR7‰D03DM8Q{='4R)9|i)jBI)j>δ5!E^TFHQ#q )j'ERg4FXL[QV^ϊ.8FXQ#q +jgERnδuaE^܍I[V_ϊ.8NXQ'q +gERn|'Vs8Vԅ׳"x Ns7V +9|i+ŠY )>ʹu!E^Lu‰` fډpzN/uitJ %1|i%B)ԙIQ'ihFKi+!D+!D0KVi !Z_O4=Ε!çUz>/uip֥I:Ki+aC+aC0O3mCl藧V%~e|0˴1/Bw~>J?[mEU YAu.~?\|/Pͼ:5+h N.>3/*ZG'W Yatr k'S:!,+'t7cvrO~2}0P~:"N vr> GzoTFC<"Do66`pgS`Ep ܃b'Wؙۊm"SR5MAO6)|vrE b'Wؙdz`GL᳓+bElE)NaJVtT>TlB*6ie7#R !N<~||`l_{`O!0,% !L:1353` Y6a ZC\`V 0, Ѕ u!L:2tf$>$,kI87 W;iu3\c6 f(frՑYM>,Y0C)0ioƘeed`9,@\ud6Y\p YFCP"#3@3,S2{ˡ f޿ %~>3,8,ˡ fUGffez1YpՑu+bV1 zuxn6ߺ2>+'&&HWW&:ԁjme/bZ&aavM8e+L|1H\~g]ߎ# e/R: ~%~wݛdPe57L$q_&SdD'Z \W>N"SdE' u(1r>N"ShdhG' NF`\)d2$5:yNBT`\)de2d% Ӻ(1>N"Sx4"7GǟG$qqBpP8Y6A G$qapy<y~d6,?"473=3=0V _/ub9ۛР )Wq DT4ܔτIk45©h) 9|i c p*tingBfB`gZfAX(8 9|i c p*ti]yNB`gZfAX(ugnmrCRa-ЯGn7o0+0S>>Or&U[$ᒄ1BX ]' :4e"Hs$S*PϓmHOԭ1E $g.N)IBP`dꆙ"2y3I0YIM`d6" y3IYiIS`dSIC$ >ɔ!0Хϓ IJ$I$}&8eg$ ǁ9|)ǩqF& t!iUq*80KVH ǁ}8e1*8p'r**yq*8IҎ+b$@>ORs-ƕpJ8L9NY _D3V1Gp` cp0(b’~0Q 3R S@N??h=|/1)Q%\Y O\ˍڏqXvQUBL` *&7xpe<,[!"ĭ |r_enF4q ] D~T5?&7x鰻<;T"NSR 4 Jr6KA1|p)A GDI;wwyƊJq \Dm~~oӅ_VN|a\V"%@EoϧgY8YSnE_A;'C 9\)r g&}CH1<"P$?#Ѥ롙]}jxǘ(+SRB! Ix?k)\x) $<أ_q]݇GxNKy(/;ߙaHмVho SS!" {|Vhן~<3:qq]#݇GxSqx54.}wԌ<;BxDP.>i|+SxTd}zAÎ +bh@pO~߼{|h>`fAuӧ8\1:q s5Ƒ{㋢:1q.W ̀o>>~{o;wV%02@&h#J{Wp#PS(S"2 ?ǧ~2]P%FqEȐ_O?7Ka櫠2]"SR'8D|} 9N>3\=vwu\c'2;;r|3@p>$ă@!/W8ZV tW ݀9P d7 !tWDq/6g+Z_; t1<"pD8emwfģ{9в޲/c3QD@rh^^=w`Ap`Ah)u.>/Fj*2[.Wq)DfT*|N:PS:Pq)D"fTD|h:PS:[q)D/fT^|:PS9jWBq `FEH51Vq)DCTD i gFd"T.@X(Tr<@MEBP$cS*"*<@ME̳e߃w*cS*"<@ME)a"D-LD DyQ2&Bq `DD@H5wc&D"<L51/(a"DLD y4{#BQ}1|)sf"e"L>{9P3f2&Bq `DDս@ߜpOLv1\"PywL0"cS&"B<@DO 1|)rf"Ll1|)rf" !80e""^LL|_ !80e""^EL|_ !280e""^>L|_ !80e""^7L|xX !R80e""^0Ld.*3a"D\LD 4i g,9u+b@EH5ce!L>xzn8P1jH3.@D` `DD.@)HwDH:LhBE1|)I5pb"ޑ^!B80e""^ TL&Bq `DD @ &Bq `DD@(H/\!80e"^TLX.t2K/ +.~`!Lh.T#Fz>8P1n>D4:LHȂ +.@D":&5pb"X!B80e""^ TLd]ぅ0cS&"<@DVU a"DLDd $y&L>y7P1վJ&BDq `DD@ZO a"DLD ty5҅0"icS&"r4@x3@f%L(.Tɼy7P1g*a"DLD Ļy 0[+b@}j%Lȕ>\yT7P3fr2Q)/j&b-J%Lȓ>Y !R80e""c^0cNL>Y !b80e""f^0fNL>Z !80e"j^jW84wca"DpE iјF91|)iD&ph6DMV 9 P332Ua"DLDd fi!80e"^NTLd3 &Btq `DD`Ȧ19t\(Ls4@DF0cS&"*?;ƿ^o:+"OY~LfGxG!~"^0N8$b_q~DpE Y~y>O?B8:qtv}>iP:NKه NOJK)\|"OY| ip"SR!bc,>UtXnwC Y~{t3UVB>l:KɇHLf|t痒QL/XLg)w%䃨>|jzq~|Aq _J>D}Jzq*>?~g?o~tjL/^3ݕ>6?n:K }GN1~?vO?Aq _?D?#~эcR!*%XQînuQ/kDCC4K>}FP1|~) Li1DACK>d?Aq _?`@/p~\qD?I?o=t*5OTQOzf7Qv:Glia^{ZqD:etz 40=Tc2QE9~OT"c2QE8~,7>TMnoJdq _?Ȧ`6}OvJTq _?D56?-se".T4hz F4(DL1|~)liQu2GL1~???uNtQLb߉"cR!5L|j z8/^??%ȥ>\z 4cR!j5XKüyNtKX!h>Vz m~Z*O33D*pRUk0>yQ J8/^??ۏu(GJ1~???LI1|~)ia>΄tIL棴LQI1|~)ia>I΄tIHA4q _?D#~@3D"C$k0>j 8/^tH[ 8/H"^? u!>>z O<Ï:+b~wBQG1|~)ui5 DCk0>u@BF1|~)mliAq _?D~Zľ~|!(>2z Aq _?D~Zľo!>.z vm~Z}5Adq _*^E~_?*:K`}Ob]G~Qt\'#Eþ~A4q _?D~ׯ?$:KH`}Obn DCk>}_!> z ocR!z5Cþ~Aq _?Ds~j !>z m~z ݼAq _*^E c~TuAq _?D [~Tu GB1~?)?nn?*D Ck>৆sS"J5XBTCJQB9|)%,!tB%(>z 5i1J8QB9|)%,jl %tQB&!; Bq`BD K6@5ފ !J8 0UB^%@MCZ1!D < izy "[ -""PH>H7w!"DDDk0>৉I"sS""B5BDۗr4BD:L`}Pnk#D>z 5<"Bq`JDDB4E(WsS""J:)"D )tB.h^:LЫh[[~4CD DD1t|3@D 5tQC.D=t2C.@"^ :L[~ QDDLDEt| @s?HW"sS&"$:H4+D9|)Mzk_< MD+E9|)Qzk_ޑ&LȢ>,z5/phHaJq`*^EF8 H>4z5/phFDLDmt| @D8z%80e""^o \&B+QG9|)uzk_$ȣ>tJ_U:TH3v* cJo+D`1ol"xOYz#dG Pi"ۭt<#@-FqRD[exG~;`#d鍐1?4#Ko>,FqRC[exG~_4BkҌ,*K/_B!K5b~J iFno(5BY:S:H3v,WFqRA[exG~ޕF!K5b~R1v,/,t\#'қ[exG~n#d鍐1?YzUxBY:[exG~UF!K5b~R0v,p~1Fq?,*K8zPkA|@(, 'rMaI C2B[q"GT%>8(-|r^Dke8hd-)0p!Fߌ3%!ѣ.#]hs80vry\#(u#oI|Hqa6D! FLQ00ߒl%0f׈)*f55(a)zag=Jq"N(C4<#E/묧|Y <ST jkR8R}c\|=bJYw~MzC)_`VB?{χGf;1FB&-!Qܫ)_`VBF{чG4>oJz\#(פ>8z/+!5bJY~MC̘/+5bJY~MCZOz\#(#_HUd/)Jըפ>8gBBXkbkRXRjXܳ˵>HZ[9$!šeBqT_~MCC1F؇G:W*{\#(_*⨽Twh/׈)Jפ>8j/w7ZBhq^~MjC~j-D{!FLQj/Fn&!Q{q~{\#(_Ht_Z'{\#(W#_H*u׉h/׈)JŨפ>8LU+}Dh/'rM{IC#={:1E݇Gu" !5bRw15)))f0݅P1ETއGvODw!FLQ.Fz&!g}.׈)Jhפ>8z'{\#(u#_+'LDwkRMwFH=TT!EQ4"O+]*]`]. )/!E1ET]@/R}u,ݥֈ)Jݥx!cŽJ[RkRMw Hq1WVT1ET]@/R=h..FLQ.tPG_4]*]`]. )6V..FLQ.tG}ZRk2Bx"摢yLt.FH&rMw%Hq]f}q&LtX#(ut‹Gev/E!E1E̦^8.8e& Sl E2{&LtX#(utPËGevSLt.FLQ.. )^2ֈ)Je6"Qw+c3]f1E̦ ^8.W3]f1E̦"^8.{}q&LtX#(utk0e! RE]@/Ru^څ. ]`]]@/Ru. ]._R L(x⨻/DwYkx⨻,nwYֈ)Je1t"Qwq[(ֈ)Je1"Qwq!E"]`]]@/Ru^څ. ]`]]@/Ru^څ. ]`]]@/Ru[(ֈ)Jݥx"QbFtFtX#9:^8TRݥֈ)JݥҾLwoHtX#(uf hE?ʲݥֈ)Jݥ"y⨻OlDwiDw5bRwiJ^8.3~]]`]V]@&Q?D=f~\L9FJ#F*RӑIrD=bRYM@:h8{gR1R⬦{A}Tsm1ED8`)*No]"Qq`TqVSq?/RTr6"Qq`TqVSq@/RTrE1E⬦ ^8^7"Qq`TqVSqB/R`&źkz"摢[SFTX#9 ^8 Ah5FLQj5i5)d0սhME1ElȀ^8rTU"]`]6]F/R`e# Sf E#墍.]`]6]@F/R,/mDwوk2zHd|Dwوk2z⨻4Bt.FLQ..)Ksoۈֈ)Je7TE8#E*Nt.FH&rMwHq]VNt.FLQ.. )^_܉rژ"]`"GtЋGewNt.FLQ..)<0ڗQ$ Sn XE# &NtX#(utЋKGDwىkzPb/e' Sn HE# L?މ1Je7,"ƑN(/FLQ)/麼l`(a)zo[d(^6kDq"G_a)zo[( STv /R^0-r׈)*e;UC<#EC-r׈)*e;͆)/xG-r׈)*e;-)/xG˘WQ̗\# /R^0g7:Q̗\#_a)rژ"[^p"Gq3HyoHtX#(ub E }"G.FLQ.tϋeuhE"]`].)RRkRLwHq]vBtBtX#(ub E=oHtX#(utk0ݳDt.FH&rMwHq][Q$ Sd E_rژ"]`"GtϋGŽyE1EL^8.[(ֈ)Je2"QwYݼ8e" Sd Eyq"DtX#(utϋGe]&1EL^8.&DtX#(utϋG p"DtX#(uj 5pGb%K% RE]?/Ru3JtJtX#(uj EgJt9^8.ۣ+]*]`].)]*]*]`].)]RkRMwHq]v}..FLQ.tϋGeRkRMwHq]vJtJtX#(uj E/..FLQ..(aǵ=o8)D.)yE1E̦^8.N3]f1E̦^8.'3]f1E,^y^X)D.)IBt.FLQ..) |"G.FLQ..)ޅ. ]`]]?/Ruԅ. ]`]]?/RuZBt.FLQ..)CQ$ Sb E#л-rkyayֈ)Je1"őBt.FLQ.tk0O]]`"L(y⠻nDwiDw5bRwi/]0g{nDwxmL.0h EW#]]`].)˾DwiDw5bRwiP{<;~cxDe-Noۗū@S[@=?O"²jt }L_<:q|QT`TT)* aEf[LC߷߼w@[ N`-NWP2/Pc)OA^Oy+N`"L)by"֓mu%k!()ډ|٩27l2kclMc0bNf2;ՑF # ,#>qLy|D212Stp٩̏+#DLde3]9dv#O;DLk7l)d0ՑW/t!D &rL{vᮏ=D>@f:2N Q} 'rLU2;U&+VQ h=N䐙Jdv#ssم>FF4ZW9d&{沝HI߸7M 12)dew"y\"F&c<| ӿ!N0KȤo ga12%F'{:Cd8ՑyQv?NqNLI8ՑyQv?Nqw#=Q| ӿm#˧\"FXw  >m?N(qw=| ӿ,O;{%bdJߍ}|2L#S>)7rݓ0O3wKȔd'O;m%bdJߍ}2LSS>)7s0WO;!d%bdR7B#,D'DLƾ{ٍHjIߨwO Z WzHW'rL2L{!?!Q%bdR7ݓ0/޵012)cdݻtBBKȤo軧Gaw :.#ҿq =@߽-o/D'DLJF|{ "s\"F&c9=y O(q|`#s/LD'DL_{WVOD'dDLJFV{ m12)Oyd}"?!%bdR7Rݓ# HIw _0HIwO _On.uȈOq"̤ _ݯ}HI߈wO _0HIXw _0HI(wO _0HIw _0H|IȷwO _0HiIߘwϴ ~iD'ڸDLJF{Zcd0Ցl&?%BdC{7sh0ag"l\"F&#=av ӿx##?mƉ2=;v ӿ}&?%bdR7*Sa0aOxqz2Lwf"k\"F&#=u ӿHIwh ?Weg"j\"F&=}u FٙHI߸wU k&?!%bdR7bS#R^韰P!2B Yd/,D'ӸDLJF9{ 9i4N䐙d["2i\"F&#=t u BKȤoѻgaD12)MidgHI8w  ?eD'иDLJF{/#?a{%bdR7ݳ=0ߔ[Oqy`#s?ajD'<θDL8{ 9HI鿙ߤSوa"̤ ԈOqyt2Lr 2.#ҿq/{9@ˈOqmyl2L{0,12)d777"Ve\"F&cU=r ވOqIyL2H{#?N%bdR7&# + O2."2=Gr ߑ韐"12)! dgWı_cdD58CfҿAAW"c\"F&<=q ľ韰12)dg&HIw` ?7D'tŸDLJFU{ٿ}%?a%%bdR7F307D'øDLJ<{&HeIw0| :27nD'l¸D &rLL2L k0.#ҿ118@߿B##?,#ҿ8@߿s#?!%bdR70HI߸~wSOKȤo\ũ2ߝp12).~q#s? /.#ҿq:2HI߸~wS^FKȤo\ũ2'\;%Bdw7]rTG澗ߝp12).~q#s, /.#ҿq?#pI߸~wS{pI߸~wSen& /.#ҿq:27ߝp12).~q#s/ߝp12).~q3 N~qw\8Ցp:op?FSGȮ_{l1DY1?edY6<5d|Mٹ!˦12>AƧTG6dY6<5d|Me!˦12>Ol|{CM%bd|?O5Ol|!˦12>VOl1?l-#yj3?l~mK h#?2,GKȤ_L\l|Bv Iw4Ց)~mNAhϸGt 9xK9߹k՗9MJL"*lg;&F4/?]bf]tyڎyD7buovl9\ r6P2# Ɖ3 P|Żz`LB\z8DGhq 6xBm0ѹ\(ctDi8CgJtv}P@kq"T3^w D) F]pv - X 0nʂ O(΃gpnQ@q"T LJ Ύvp"SJt/9n#_yLJw_Mt0>*`4[OixB0o \STA8q!sxB|˛ww_ݏG7wKp16FaHa3 oo~x#.=u>n]swqI8't+(0Kp=a\"&;}_ŷw{o+Jp3]'r M@1≡[ D8chyG_!)hU1NNb=CKqȐ'r M@w1≡mF0$-3ƉCS5Pf3xbCqvc14IuZB8qSCyB2pShi!z !UEbRO1R uZBxqSyB3pSxi!z !fEbRO1b i}jDO!ѸHP)=1g8)N!z EbRO1 J-'ԇ G-3DK!|HPi)+Yx'y-q\$b90!zzJqS1W4 =M|O*='yE'9pSgSTBR Rg8)C)S*a-EbJOZ^Z3ZO)S*1EbJOFc^Qc3=JxqSW G=AZOR 9.3TzJ5sᨧtrT| b4C8Co=P"!CI^ g8)חk!z FEbRO1nntᨧtn_ Bq" G=Vi="1C{zE{:pS:C/:u\$f(SSzJg]Ǯ)_J=+yÞR'BB b1C@_ =.2 z<C,aJ=n)p'S._2{ Lr=/JqSnCn=0W@ b v=,0W@ b v=≡}% HP)@_o7!ن)J=z<C?=0"1C}@xbgz\$f(cO ݮG+aEB}@xb~B+aEbRO1zȰm}%GP)F@_o!>!,>Cz\$f(# O ݈M+!EbRM1zЭzz\$f(# O ݚB+!EbRM1zЭ)z\$f(#  W?{bv<?ÁW? boo~xw=x#ꟍ/Uey\#D'iWdO—Ih>u,|n[DN߼78{3C7]CD-bv" P :C>dHt "fh' Mua?~p#~v)ډ|AvKQQÉl}9kFټwR "g'&+9~4/)̗_k1?;W om*A/5pӛ oѿ0k^`/: ܢǧȝ:/Ap3_ Cx[1y rޠlOՙ/M!|-bxJ٘}o9 o5͗ ^k1U4?m|-bxJט}S9 Fq4_JCx[a3(9x0~Kz0!<>3 nrޠi٘/5!|ؽKn4/~(u'rL8oy[1.%!>bu34nɸAq"ϔ Ѝ5|N5D +/!>hЎuH3,,>8@?z̗aW%Bz]}6v4=SKWzHW'rL3_n4u h}C#:-Rlj41@%~ mxAw?'W<_CjD8fsZtjRR#z-Klj5+@~ImX~7DͅЈ6Aq"ʹ ?^S=Ǜ{xw6a;AԺYBk>a3z'.^P~s0dtL1 FuAkdEtz9\3?tۏޗpm۞{@)-nDiE`"}?o|y_>ms+Å|Owτw$lL3ݽONͽ@r*o/'Tk;Ĥ`3=U-k#E䈮@q"GtyS& /yL 'rL_㗑?{.4F(qT|]D8ChX% BK#$0ljBS&~zxw?=/߾%ψo@p2>r!x0xU{Y$<(tcPRq4r"چї`1â:FS -y('R|E}&1s"(ig1}svAC:H]˩Y9nj|u-u2oCqO'=_[qvq_0ݟp=x).$eeDՔPv_;:)Lw4^i [Ŀvf#*AϏWg| x9m˛ ?9nIg0tO_{&{>r_s!DC KÈgPq?z+#p;uC]N3whK*8nJٸgoχWxD8gh--`L=s\(/iЍ1=sA+?~x/?ݽz7?<#t~į.h8N7yÏ_}_ܽ^}<?߇xֳolͿǟ?PK{CH4Pyxl/_rels/workbook.xml.rels10 ЫDީ BiR'&QB9G D,Pɲ$?Z]ȇ,FFڶ7UYi1mw8t1#bM"d֑I~1^rp{M#ZzI'+L!tDX#3.Y-_[`X|PK{CH'[Content_Types].xml=N0bEB(@ \`Lk'd gH\oR $*˞73|hwℙl TLm[9PC׼%$QZ91[LTLJekusU]_kckqٱxX-v)6JHY\*5G3bQ2BO"{Syb ֿ23:{*U&hG<%fۣx̏K^~6Dzg>WPK{CHA%xl/workbook.xmlPK{CHf9-( _rels/.relsPK{CHgh9bAxl/worksheets/sheet.xmlPK{CH4Py"xl/_rels/workbook.xml.relsPK{CH'"[Content_Types].xmlPKD $Spreadsheet-ParseXLSX-0.35/t/data/target-abspath.xlsx0000644000175000017500000001541714576335353021453 0ustar michamichaPK!A7][Content_Types].xmlUT 55ux  Tn0 O;T64M9nHK#$ [&Bpisw86YCD].Y_$ [k>I9w-mL0Qx jRX+׸AK?;G)5b4|R,%oK27N$/;\c 5".˵LR_U͔ Cf!VS Pȣ,^f*cf1CS9m}qD!HfXr2;/rִkV+z-e nߑy}Vikohs")hIyj#\wDvX"Yꮡ> laPK}|CGs]Q _rels/.relsUT ^V^Vux  N0 @HCnHe *`Q{i1lyQsLNuUbo:ixiWwR&oi`>Hޅ ' }1'J姕8Q.a 3PǸ[ -`5ă_–uļMsfoٮB,12j(v5T )+m.Wy\8Lh$B_)sIˌyë-3(w PK|CG Dxl/_rels/workbook.xml.relsUT VVux  Mj0A̾RJlB!=Ɩ,iķЅ7z<}Ҽ{ǔTE  D&13WWg)nȂ]BVG)q\WzM|L,e:Sl qxǦ ny1Й+dDS@V9{qJ)}%jNCLi+g}lf %~$wPK!YI'xl/workbook.xmlUT 55ux  Ao0 "G!hm i Y҈4¿[ԱN{<{:ךyeM$RC_۷90B[\*[v=2AB"_TX ? )E o +P,2p%,,U/hk4 qER|Y*DL4͇)Y‡W IoF ̵s4i<(rQS'Q\hS$aKa)糾) Kv+#mOiٗQ%1EW2TP q~XXrrn-0B4`_b̝PK!Bʾ"xl/sharedStrings.xmlUT 55ux  JC1EfoBDtQvBq^}d&FpyùnY.f4st|F4R =\Q`no%񰨶'ke^FpC͉{:b?[icQkiz5f3Ja f|YqjpmnNLzLC^۰"3޹?PK|CG"E#xl/worksheets/_rels/sheet1.xml.relsUT VVux  j0D{v˹BEnC1 =8 p]s,!8,+Qǃ["i Ba07D3N3Ƽ:-2Ovs]`e@w4B> ~Kv=X+R.O<v-M/_PK!lxl/theme/theme1.xmlUT 55ux  YOoGWwk{ر@*ٝ87GJUiťRKU[$Z4RзlƳ!TmVyoެ_1GiYH*񘴭)օ?8TH">kmJ%k-=,OH k#."`(xF̮j+vilGhD=ˋov>Y3=b% ]/fX_r*L=VbX*Xh[c9S]?t?gt" ~s=翌zݞ3灥o9O ?.Z7N]- |s ߪ47%|swlt+%,VWe| K4!#.-f`ݕǪjE}dŊHM28 Sx`m%T* IOD zѫ>9{w4^q|_Rg~n*GR&EL.С2]ejRB] ~앑XVrE)b qt[^Ӥ6NqkVsO!J(Vnݵ5 ɴTamS)MS4$"RmbTuLп6S?jt<--_>Z2OU,("vC D`л.J8*곁 mE~SdfIbóHSϮ Mi)kJsm QG*Pz}C& BJS]ޢn<"jHPt*l0s:cTԙ2ɿdA+ gդpD;4۔]à|BP$HS+Qv*𨭛->jn*ό'w-Ն)aʙ\mڛbd,9Jؚӛ Bo-A` UI%J bAܸ p08 a{\dDUe/S$gnXl~JTw1Fy,ʨ`},@JBIkP*ic<z+S lȼC[2AI"ןkF3{_?} "u نh73;f18?boH"豥ZVK讄qkMa84 R:۟MIia!@ƭV۴*rFJVlF9q#8a $+ {U!V8~l_X+h G,y+7q>d҉cL w4t#=l(9DxzŶʶ^G]̝AwfEf1~x6[^ao:XL{fŲ7_,t6:o#^楂熃nm9bQ|M mm/h PK!gpE.xl/worksheets/sheet1.xmlUT 55ux  o '@ǎݴM,U۬Z&U˶w11 I~զ(^m:zʳdhҫ)i0ykѡ)߃wڵA)o7E:B/\4eUQM}M P0iM :~*N^ ޘb:Y/Jˎ~FB1x ᎅyNR"Ue`;L}V<<ʸ3/ @z8 /!9!]\~[x#pN'3r|R{<[VC#6ϠV'٫,~Nt*-e:# *""FI/FUʰ랶ьx[ tKUc2s) UU+@3r|P4e` zV-BFhZpLXO:QAȒ&\1:q[<0)XyLKB%訔bV?L)0 ĀiAp"{gS8ӻfpb&4Oyj̡+0(Y2}赺V- )IՑV-آ|_A[_PK!%V6'xl/printerSettings/printerSettings1.binUT 55ux  c` 008fqp0023D01&f `B=(v"LH|tPK!+jdocProps/app.xmlUT 55ux  RAN0# TU@Tj8µ#{Z…?o@8Rmvv4NVKU༲&%I?&i3e).z$(L&55xr*Q0>%b9ڄMnR`݂fa@l>;?>`DSn8GC)0 ɬ/EONȵXFW\Z8Tl6}P-$<4qBz,Z4wʄs"Pr5klܔb ^BA(BF| @݃3{3y~jT*:I) s5Խ9zp+P#I𡀖Y7 `udp1qOr !fZ_𠞂-yuY/G{7p<;nPK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!;Yxl/_rels/workbook.xml.rels (J0nvutW] ӦlLӷ7I-,R}L2}YCl٘ZyiJZ$WWlH7=bH䜔NRb{4RYIBW^i3Mv(CvFUƂYw"胨t5z1E|l@ <0JIL01 ?AoG%0vMa]3K/ܭ 6L^|4Kk08!x|!?PK!*Ŗhxl/workbook.xmlRn0W?X$BʥT gocG!]A8QI RJ@FH-iL\ a#H]AkIiA2KM\k WF%,MIåg*Y‹) h&]-[GgJ*X޶ŝ҃(Kݷ{4OG4]E~Z"{(Ž~cÀ V$tPZja:KXuqe,;m?g䥗X v²f[Ht8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ K(NhwŘQ6㶷 [SYJ(p»g>X_xwu{\>k]Xy}钣M26PsFnJ'K,}䇦$Ǵ;@` >*8i"LI%\ xӕ=6u= r2f 3c (:jZ3sLs*UܚЅ ]M8kp6x"]$C<&>'eb. vJ|yXɾ8Ȯ]7R /=,.&'Qk5q&p(Kaݐ Sd›L17 jpSaS! 35'+ZzQ H )7 5)kdB|UtvaDξp|Fl&0_*3n'LE/pm&]8fIrS4d 7y` nίI R3U~cnrF:_*P}-p Tpl rۜ4LZéO !PLB]$K *++65vꦚeNƟf(MN1ߜ6&3(adE,Uz<{EUϲV)9Z[4^kd5!J?Q3qBoC~M m<.vpIYӦZY_p=al-Y}Nc͙ŋ4vjavl'S&A8|*~x1%M0g%<ҭPK!CZ=xl/worksheets/sheet2.xmlMO0 H(whj;! H{ֺm4.iڴ#H_'FF[4J[am[ȏ՝A /7E>;+X_ȎhXDZ:蕏p7 ^@sSo,In^i+6`wF;=xY`H8h yʸg짆ɟł T5"#'.%,ANUGxcX5|-,<>v^Q߆^qzvi"U'qjusTfcȰȠZxV  $ѭna10WWRc7ÒZIyPK!JK-xl/worksheets/sheet3.xmlPJ0 CMWY",m'm$YW޴eyyo^jĘ E }K} o۫{%5|cusyQ)Ӏ";TVRv@RA}f4E8"nZrV^txV?iqC$UO 3Ȧ0xLf1G⩫v;xC_8W);,,(&ΧlSc&DM'Y[DtLSNQPK!}xl/calcChain.xml*PK!VWa4JdocProps/app.xml (Mo0  9iQ HVavgUc$Oe:|HI[uxW"g8+{* IJY`'@v'?D2YpX(9G@pdVQJ6^ÑUP]C6:;_SHR܇`Vn)=G V([4tT쵲IƲVAsA<ꇶS&;c=mŲS(G o!)ʟ>b@(xjC8F^ )l F$\",z"zN<0#ξ[>Hioi$jTh۠In7S"O[E0(PM  M6r?<_C.W|Hj=+l &7ZHΪo+K-A9+kŮ!ƃm>PXdJ51yz 3ʶ}avL]ؼ9k* s-MoGN TIBpbM ގyu5NC zr\o/xvB8ޝgx_PK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!DGxl/_rels/workbook.xml.rels (j0{Ӗ"R !$} n\E3^}PY Y"[ % #1z#g],khE˖Édva0ehЛdHJ$ <# uk_:!}54*.G~¡btK<̎z4}H/J@oM>$P\8r2>@lkJ'd~Vt3,ȉC%*%Nݼ]9蛩@,x 9>Х9k4AòL7a4Y@R PK!%Sxl/theme/theme1.xmlYOo6w tom'uرMniXS@I}úa0l+t&[HJKՇD"|#uڃC"$q۫]z>8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ K(NhwŘQ6㶷 [SYJ(p»g>X_xwu{\>k]Xy}钣M26PsFnJ'K,}䇦$Ǵ;@` >*8i"LI%\ xӕ=6u= r2f 3c (:jZ3sLs*UܚЅ ]M8kp6x"]$C<&>'eb. vJ|yXɾ8Ȯ]7R /=,.&'Qk5q&p(Kaݐ Sd›L17 jpSaS! 35'+ZzQ H )7 5)kdB|UtvaDξp|Fl&0_*3n'LE/pm&]8fIrS4d 7y` nίI R3U~cnrF:_*P}-p Tpl rۜ4LZéO !PLB]$K *++65vꦚeNƟf(MN1ߜ6&3(adE,Uz<{EUϲV)9Z[4^kd5!J?Q3qBoC~M m<.vpIYӦZY_p=al-Y}Nc͙ŋ4vjavl'S&A8|*~x1%M0g%<ҭPK!Įd xl/styles.xmlSj0BF mCa!@Ыl^hdgd;SXOO3ofAlL.`)),68J]DMR$%Jy$*:݇"!zMJ}ڤA6CYm@J XHI3[  g#9WGZ3hC̤%%qX &D67bݘeOU VE__}lKl4W =@<tPCNc7VL)yֹ /YodkYeŹg+7"ϻJzp@o볦9_Z ]Yp'mtXKy/ָX^)$Q ~Γ>LSNQPK!_8xl/worksheets/sheet3.xmlQMk0 Ӎn$)R`$rbj[VIh>{ғ C4KXd9 w%|oADVU<Eq="c =26=:3Ч4t2U;y~+2fUimPwy hcoUњ Ȫ~M̱[H!VKVe)$=rWMK+D%Ro+Z`Px4G%XpAO"H{mv!X;Pgѡ1Nn-_l G 00H 81x8ʕSppzضm֎{kO5[TS,[HOT:Hbz V>ENRtE 47:5\π}%/PK8{]GrbKNdocProps/app.xmlUT r2Vr2Vux dSAn01e( bP8msH3K,"Ip7ׇ!EnKyڝ f966k!`Y2pڗ 2$JeٍD2YrpX(8G]CphFQj2n~m_WGWByFCvv\]>|ڝB{hEiH`t+~5XHF[ЯIO[:JYq2hiՂ&34ҭ-X[!tq ֪h#v)g_ |r\T\ $՗w,cQ>I&3Imo>wI-M-?L5+7Aт7aoKPlkLw5. m_4</fy:0?zPK-!XVƏ`[Content_Types].xmlPK-!U0#L k_rels/.relsPK-!DGWxl/_rels/workbook.xml.relsPK-!p1nxl/workbook.xmlPK-!%S" xl/theme/theme1.xmlPK-!Įd xl/styles.xmlPK-!_8xl/worksheets/sheet3.xmlPK-!JK-xl/worksheets/sheet2.xmlPK-!JK-@xl/worksheets/sheet1.xmlPKF{]Gd._docProps/core.xmlUTr2Vux dPK8{]GrbKNdocProps/app.xmlUTr2Vux dPK Spreadsheet-ParseXLSX-0.35/t/data/bug-14.xlsx0000644000175000017500000001161514576335353017540 0ustar michamichaPKӘC _rels/.relsJ1}{wDdЛH}a70u}{ZI~7CfGFoZ+{kW#VJ$cʪl n0\QX^:`dd{m]_dhVFw^F9W-(F/3ODSUNl/w{N([qTuH\Yab}~n PԠ9 AUb H{֚Ê6i>j/^f'ͭ"J~YtNΈK7- cq˒–s" Xȡh PKFPKӘCxl/workbook.xmlRMo0 W/H8ТXڵgZc-hHL׏Vi'{^_:`LBYCօm<ܾ_hOkI_mޭw Nj1HҌ 2i)Rm`SȽ/eyY>1pP:7d=>D>unHznǓ!z} b"[T ~t[ hGǯO4,{,0VbEA,HyFc1RM%cDM$kqr7m5v_8C}LAV]nSj9zOr' )7o1Tqw6*@j$.Ƌr2wv'o$M R$Dl?v,\ߠg2PKӉlPKӘC xl/styles.xml[Qo0~߯(R]&MSRiҴ8`ձ#i~vJAnؘ8gwsĝyJ3:G {>y@HHcHECow~\t?CH@ЛI}}P U3 )O}qcR:BL0y:J˩T4j0,V|35V+}%NKr_r 6%0da8Zw}b&$ϑ{ULuHxBrZyIT8>3$vv׏lY]$of~Ӳ~O kiʹ&T۹omoµ⢫LȲj! 2(%tn@9/2U QUbݖSIácfeL p($ٳ HjCV€D*`3},5,UC6@!,wQ,#Bi{ c*WL#3"YTlQոzPպ2 `/jNQU^qAMyqFXjI4wLBCB-҇GgZV(8XQ<KS2+3Jj룚 <̒vJު%UN˜mh%[,?ja?T]~PK^~ PKӘC[Content_Types].xmlMO0 U!n$0qF!֨matlH|m%VQYߵwcX.\lPƹ*Qn$]C,=v*W2(ݨJj"! %YUdĬ ZEOF˷r.8AI}yl^o N'pBR Iaari5_;{Z!Lj5wֱ{?y6 MUEY9MfTiَ&q['|t>yt8|?=smQX0}.~Ӈyu8.;j>Gsv9R[jgVm|p^ ˤ׾ysq})ܵ)ܵ)ܵ)ܵi]{ ˼׾|.~isksksksksK}ڢ׮=ާ-,,,,,,,,,,{>gt:ܧ---{}s2-jaE}CNp,f!\7 YsKvS Yk܇<զKcmKctipm\l]lVFmݶphm46nFmрhm46pVF3nѐhm46rFsn=Ѡ{ާiѶh\m6WF khdm6YFKkhlm~M힍Fghl~6?ퟍF h hm6AFKh)klhlJ6%풍Fdik߇~Ȫh#,6¢h#,6¢h#,`#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6¢h#,6Gin%|#hrѪ^;d(M׮EU!0 i\vVe㱞_à\$~|>05|ckXE^1Q|]Gי1*OX'kǸ\ތM[v嗧fէPK!^e _rels/.rels (N0 HCn ]&*`QA$F؟?)8|h*r)j6|)WR`ϖPK!}6|X xl/_rels/workbook.xml.rels (MO0 H*we_lh ]aH\kIg=@)RɎj?}mY>:y%+]dex3c :sY ;jt%,EcJ;QHLM ڟlm-x+N۟1$f3f׹Ͽ9>v[)x0j߀vgRwcwX8T\Ƃ dzbÈQL%ku_Jw4EQDA׷$# 6"!0ƤRZȟÀщ C!#1Q{ty)MyACICAiU0S FDݡP/?pe&JWCcmhqL: 40̜Q-P>PK!Exl/workbook.xmlSMo0`N .vAĪcG}I겗=9/ϛgO$0Vh}PBzi))ΤV3X81:j ͝+A` fu waiv- 0nsW l`BцahCo"(א̡|h+$7+?@'Id=s'>·f_>AԎh0\@Cʅ]uO -KBۗc øb"zp_dUINk>&ϗ*:[k]TQ4@Ϳ_ v:YV"JXVlw5cGJT"#,kq`fhC 03^gO>aOâ+w7tA;-o:]w ]r2[zRl n&V\ɳw/ț~;sspPrmdVT\9v{q\cPK!o Gxl/worksheets/sheet4.xmlY]o6} 轖e;"m>+2m DORw.IQ")Ne =];7,#]u|Ƿwcɋ ]1Oܽg~O[][ i>wEz^nYc)ެy~f/e,XAIݡQJiv_-yx hhwVYp ?5{%Q񜯋NOrM Ib%Avu{]FqT ӏge y'3ϙOA9R";z m^k;Kίq}5O5n=E?4F <Ոr""ՓNXEeցa~Orn6(HS+մP`Jg4D,Qw $2:FA׃g=,pJ.]XHL.K5Icx k ~ӧQI͈T=ҦQK5j{>ԑ )P;S=xuX/mq R 5c <_z #\~iC<1zaP=v@6<LǸ28VWaP=uc!mZy(GOՒTӿUэfʨ14e3GQ%Re3i.3dJӞ8:(z(9Ub.r^b8qV0DnT@N5O.qp9Ju* +~_FY%[P ];VU\.e.a$DseUߵjU1mȖ*x/0RYӑlS/?9H3 t4fģ1+$+:U5ņb utHHN|M:TϙUQ]&*q+:ҪT9פ_i;gXQH(e ,-eG J!yy */vd(͝1ہD/,mqp`9/4ɦjfW"lz'+iPsaUn/f>r;__QưnB̔t~';F~O'nh|+9~wuW5èu/"V?~,(,.;?qi噓=*t%O3c DY6˾Z7ojԬ-=9Ev+w'tX~TLwRl;_N^r^ж{-zA5}14&LkKuK\oB/$zAK>o_,4&Bwڶ^N^K~!0כ 4Z/hzbziM[mY/ݎ0_q&?%HmJ+UmVkb8]ڧl n=!i./HU'U;7L l료S],Ӗ#SiesZ(O_k߬u~dRQ()A1D<)iwLY`EM l!zѩ9+;7W=JsqVLHHXT+2~{WwL%Q yXqIp#c B>dsvIL} YN|EsjwFj? xq ^n$Ę̬@&Бqf6ݏ{"̬@ȀF*OW̠)1YL3bLswh d`f3 flYLɌ f:3 ̄aoV&8̬`f3boyf5e1YZgĀlzJf fV0̀0L|fqFǁ f6:3 ̬gÌ ̄ q1Y>F7lÌ f90133=tc ͅh¾ cox'!OUNJPK!&0hxl/drawings/drawing7.xml[o?w̓(Ѱ\$x@fvg3 i(&vZwQÌ4k ޹ s1w|Z-zجU4TfXw`הyܬsp4wo`wÇ^]^fժܽl|~SFޭ_QZ^&Q_uUwUռ=|fx<^pUXoW˦eSnMn];稫q{1۬exX.=aUϧg'\-ffo^!.7߸'.':㢮vagrOyVaSy-?כճ&l}sy_}}ozxS^ݾ^-޿zĮLr诎c$$S$*ƣ/~.VQNAS=5}xc=XoNF\?ۇjaf4|^+9ڟwz1#OߤoE]dEm$8?O`m/o/5ukjOY_׿V^=7]^mOӡ*_?`vRKjoLu5k_r Þ]\+gW+ I[4#Wg3o'q aqe:|k<.n-)8rd; o^9pV8>emsB3=NP gqSnC9 $9pF8 6yrmN{Nn߫Q{NP l;)~8crX9AQ+5܆L8CpN΁)?/qr3N yB ZR1bD3Z~wN%{ ::sPQ+J! " "PgN TPZT_vd:tPNPJD=lu6:H"ĎYMq8[) Et*Y1E #p Z;A.V'(jS #Ďi,b:tϐFH@Q+?{F{Q4Be3 k'(jSI#$i,bkgڙv N%8i y4B ZTc!F -iҩ4B1@A:A0V'(jSI#$i,b:t`NPHg;-r6L# 0'#2B Z:AQ+J3w@ uRgNz ZTgSb:tEt*FH@ uRgN ZTgAb::~iTJFH=2C: ҩR4 P'uG[Nߙz;c; wfh5ҙ(Գ)'kgsBu:QQ+J3wJ:3@'ȴ ZTgS"I:ENPJ<N cҩ;3~D:t؎NPJ2AyNI:3@'Et*̳"^:_V5fj_Ne9䠨NyvT$6H47% ɗV:JQ uRg3%P %ZՂ gPAf@&ݵcPU2Ϡ̶(έEP!UjA3 mJ-hu;"oĎ? \P.I&ȾN-yd8 1Xƾu@3 ͐'yOy?ed<3Ex*'̳)g@+1 !v,R"ծ~v)Be{N[yٲlAy[ݗ39m\Ǘևmnj}#wv}xw۲)͎_Z._pŬ^ͮ]97Ϡo`'(j3oQtc'(g˦eSn֍8~j]fCl./wjU^mZ>yWe#/WebYmѻr|L(ox2NZns߼C\n.r8 pSE]z Gc|gTEZ>/qWtw7Q[O I<zظK@Q+Z+vt2Փg lWOPԊ3].'y療=4SO-ӕ b>d'zj{[#OߤoE]dEm$8: v|:ݳe繌.'ynv=)(jSt%\ȓ<x]_ Z2]c+]D$KAQ+Z+qt3]ܹ ٹM. Z2]c+" `Ζ'(jSt%\FyqˋYok5ޞԐyg)Zl VJc*N6R2i*B4ƱJvUBZi;f(\]Rbg}jU*PP{MM<Ӆ44 VF\c _ȴp纶FF&lp~|4%gK{pa녬]"5 =T[hp ĉWoiPaM:Q'^~[ ;.P͈JT%H#}\3HChg%*l@q.mU:tBǑ1ã<13ߧǑqs::>1pO| >dՏWh!#BnwN !la`!uB  Gp0 #:Ɲ1DǑ/#cݼe8y<$iMvIH4H2KB%HXx:c{rugo\e)Z4ak(l#U_7w%]Ĉ Vj-xVIQ;zxh&(X\h0'Aځ-c*{;.L^ dm >[e,ocU$.g=opL/΅^h_? g'R= 5gt+r`|Ŗ`]e^ѕƖ @!9 rkf 8ݔLe2pwJ>?I5LLR,Qݙ8 ZG#gq&q #x~+X"xR&xg;2MQ Jh&k8/@ ^V ќԄe"" #Pr:4"=!C30Rة} ;5fG7$JfKb$ЌЎyd{HKciԔNɣ~vAdyĶֻ3c˭W,Apw"G؎k0Է??>1ʫ' B~R꜂ftNE;3;y5=)ߐ2RM S,#eIX PK!A3Lxl/drawings/drawing5.xml]s8wfýc8vv ę=ä "Cy|$ջcMte#O/k󟏻4*=NiNw_Y- WKX]ƊeUсdaoL 3X-X?B,( WBml 2fE딑2njliHڠY.YDs&N=$"]{2KV4fW¢q ͻ8ȶDȿIIetK:4>aװ<ڶK5#nuX3mk>n¦5_=k u^SgqO!>hS>p'WFRM`$F7P94=ܿM#ܪz4i;K{%L{qwggo`[W~4j{Uu?mT5feZx)|~BU}jxyKƱq\ ፨u[A;(+fI"V9~d&mhKU) sN8G(hC(eS$* N&C8p.8<N jBB|5g_?pDeU gԕZ\N$8= +NוSwk>D%ʂC8}p" S*w 8@%S9~rTS * N` \epN3DʂC8aWS9%ʂC8aWS9%ʂC8ણ3tj:y ʢs"#5 t:@ݔHT#!$iv5ڷKD1 !.!O4v*D%鏸uNHw3(~;rʢs&T|ҵsRXv)EO4 (D#N,:GBHSN!MgCg;>r\[ڧg7 h ߨ) R[H6Aݽq׹ d=od]ܱ{-?bB*Bq&\p&<Jhwx!_t\=:dYLKB yV]5Hp/#$?ftjj:-88_TaLE  RW򧅒,`ȅ Ux@$(JhN폁gZbL0jӈ(jo;"fӭ%=eD{ZjV騶Kf {v:SOYOo&5弨nK1ףpWuT/FmGuLjuV3jYF.ՙZ>0 .NSՇ_O<>$S=353$ >PcJ5!W:%j@ة/#hP#6.BZAUoI_"aLt!2уEHO\"aLu!2Ճ9-"=Adz!2ӅL"Ydb "KD0 v\"Ydj "KD0 iJ#ȬsYFz ZMWYQtQz[;h9-%}]i`]`-`9 bLZ"4Lt_Tw&;',&}oeL$ЕMh8MޗQPKnWiܱgܑ.{6{o0i<ޱϺgޑ.I+9"+ܪ+˰&X[=Xϧ]){o(iy`Q9X7ؼj0U (KJZ`ƥQk.V %Z06uՂ}=b0K{CIyl??=?PK!!jذxLxl/drawings/drawing4.xml]o8WO@ɇt27~\<`&㶩VHmp5EK}ѡ7YۗDj+uX4ܿNfHZ[Ϭq߭eO⩹\;)5Ɏ5`oEI%_T']^ԂѴ1&=nVҼr2YJd샖D-' /k*/y6.f$Y2Oox& dz ku`rKIO|ÊJv\8, 3F9e7;_zjl#,{1^{Zly{1mē/Ԓ )$3>>s>5SR8+u$"aӭ?>? 'O CNEKT7;;|i~y'ox> vEܟ'v;j5lk^:Mt?}tzV6TYCPb xg_ KN &QP=,E#?0^:jc #$%x'Љ4uba!bE&j[hFGCeM)4s4hF Dԕ1M;U){hj4My}&R{UĪŞoB޼/P55ЌфBjD4G9MShNфBj)h@sv45Є疯A! D4G9MShфBj9h@{5gMuJ58A_]>9obb !(:QSpB#5PLINc*%|D#j Nhe@5Ggt"c /Q:5!҉tSc93zo=5E3شh B^o阥S#jsڻEw9NU,QStD9N[,QStXMP!s %*:QStMP6!shDM9`"6B:QtjfԈ3p V!HBI_inS#j +sT47ҩ5EWH9ouTB !|,QStnz:o(R<PK!Sxl/drawings/vmlDrawing3.vmlQo6;jԋ(ʎtyb-a(TH!1O;Ni dSiNy'*_"iתQUnJo2,ru8GmsUK\:ۨ27&M,B*Lw*XGUfE(.S+OoTPm>8akݬZDw@2@Mf֋zYǛ޷l.sp%k|EݚR >gd +}%^ ܴw{DveQk,"l`kNK_QٻxaPZ0znE*+!ou;04ƨW*kzTKFvћtm̫be֩ZWkx QQ6}*5f]+5z`(T  7s]f.{2|07i9~hsp/խ2^A4Z2"wha|7pOza\X8TyY]7vWTL (}ywަej8 ~*=Wa,>۸uu"^Oƍ3l~j;yP EVsKԻVv]|e]C1T ]Te'^/3tzسwy?j\ȣxLGx0@xqBqFBG|zHc xh4vlSݻπ1&dJn$P0Z&HH?fM#Bl2fBB",#6d o/IFȄ !<$-Ii=e1!C!dbo"fnmȔ !!B2&!dS1!!DZ=u<#DRiح #2D#":"4 Wpz%XT.Z"T=sV .^P"8ht֌Hq KCAz+_,QD:3K< HH"Iw?LbQ}(pgְlLP>ku)T|Oi4LC,DG>XIg>Fq}b𛏣.|<~|:̇|Ш|x|<̇|, ̇|U?3^!Kϙ8~.Y?g>d𛏣so>Kϙ8~.Y?g>d𛏣? \)M8+'.D2C]4X<2pd}( Y2C]4 =7Sp؇BHl-֋gkT-HĎ>Dec!B̢itqQ;|3a}0XOYgY:YOt[PK!F]Tixl/drawings/vmlDrawing7.vmloƲ AP 䥮?I*EA"Y4$&qן]QJWߋ`6EQ^>ޯ'njv~;~ ~~=W-/muv>s izz^粟Vvп&p5moa~PfrWS}\;|7sN۫ot^M7yt\Ű]2^C7v&'_ v]waYx7fwz`~`ˋrv~HopMmrO쿾&vwp^'>93ѧ7ڶO$mǩo#G2Ñ /rQQ@bFN7D H5䈈SD\C"G(Dj "5*)4ↈC!`ihWHA7D<fAU$*"RIsq:g&lP(ߗYsnQ?g"""P F(D,OԊDbHqCB!1T4DED "uHqCd"_xÿ{UӦfHaP&1bQC7]FQF0b yGA#!^GTK@=#na#j0RCOZ>l0yuDF hC ~|!Fv1pyC ҇> WUb)-8Q.B Z~т9uψb>76EjdOe #Qzi>] #A D?DO>T.WT=F|C(h01zv1s ƏDbS.x~~ģiZN=F ?#G*b.S.PH@X(N=F{^+0~&8b){۩gHQճT=DԳa쁟g(n1ߚٝzv1=&=S.XxwqշA7 *\BT."ܠrkP#&GR HYlA$ؗR.’,I$5ʒUۥ@$yJҠIP8+R 1B0Iu//?ܯ6od2|Կ\mO&7 /EŻnxh/&YD߀rqAJN S.'fr% ȕbMI]'EQIN2UV`t IJJŻN 3L.%w9fE30HlUIQ] '0=R/0'y.R'aʝO\Jx)6.dO eOjr8)*̌_)V2:{f {I]x9Y]f/+(dO"fV/S@$kr8)mah ƇȞTjr8)mah '·V/6ހl|0⬊f\6^'7 mAxϪkr8)mah :ZmNfO1X.7 x1!0ƨx9>0 WNDx9>0U||MoNjĖ>>wY7 _r8)}e-x9>2-F}NJoxkbu|>^' }Ex Q/Szgv]ez&ݻS3כ]_^z~zqy ϯ~OCz7v&q_ݰixع)w6+=.n7^?}ɓWRO%E)9]%sPaX]UNPdX)ze(+RXnb>dIV"Y&+(7NRb+SteE +҈U,dOBOЕ)x]&+(GNdX9++RXMn>df)V}8uDWV2PV:pa jjΩe:­3TGUw (4Ԭ@9Iq v5طuR\}nTY߽kHK7FmV/v%iFPiƨJ.3Pko^ +,ì]~b3Q[/"c]"~b1{^ +E$VFTƤ?YSbGgdz1%VPji5ƨCJ1f(ʗP]]Q]/"_]S *_C*{^ +g(j=5_ҪJa-?koQ)j=5eҪJa-Ij=q!cKaťsPQXbX)׏¡JZ{j? ^ +_q"ʯJ/^ +E;X˪JQJZKa~%=̯@}Vz9bX)W<ʯDJ/^ +_GZۋaz{TWzH\8bX)\"=EFZ/^ +\GZۋap(޾z9bX)jy7ԺH^ +}Dy j]dPo/G~>} .2J#?oQ޾>|%̪o]ns>sC2Ɛqz1~q '< +ɨ!p/P>D)N p%`RUřAMTdZ^ +W9M$RPZ9YؓPSz)qJp'VPSdi`OB- Ű2p 'VPdi`ObAuVy77}s4'YbXVne+麂*[iZRS&z1S{onoas{YT^ +銒J[@튣ERX>bas{]qorob^MoնNv465Y~{5z3ˋˋ?L./͇qx?ͺk7a1rx!.ߤͦ&_ v]|wߎ| J";%Gyč1PZrZk:`gb=\Mӧ5|XW]7tfxoytbn?pVQmf"&`,(&38VByVsS'j׫anns>MT/A­Aҋ3 jgP팖ae;v{jT/"Kᷠ8~OmKa3R3+bX)2=L~ɋW)NC>E_-+jK^ +EKP9. ŰRT[5]WP+ |ŰR丰[;q1PoO^\Vo/~⒉Tz{ŵz{19.-Nr\r\1yZVy- `^PoO^Vo/"DžBTHRŠ/`yۣ`W"u!ZVBrwY5/*])CY%w9tYIjLnCU@p,Trto& w&Oi/r׬d/ݟf+]c0t)+s5FxG&7F8hCY'F ޶+h5zkK:1zm(ʦ-o y#M0B% Ήf'E\[8qB0F|jc8bpdk '.q cŴsbT'E\[z0N|v8  "J?S/Yj 7ZnùhC͵!%$`߹m Ž4'T\G&2K'+o`«ZqM>C6Ѭ:Yqh Vmb.E|xrW ^5&[mSvd7xkR_Q60lÔ=13ĥo1氉6~+i |6-S:W+#mk,A3(MЮqcNC jH։V YPZk_sL[bs1k[8ǿ }k d*Uh>{PL3o0ƐmD7p87|l}1tgQ$+10L4}Y)I87X,Dx̲Y sxǛ,>nϦ _lJ]!M莄4K1#X8IV00#eaDSRޱfxjY쬔O!Ks'1\۫!5~bI (#ӏ(gOP|UL40W ?pڰ cCdOP${>I~g퓇8@-ƿ2#YH3ъ& *$m .M1YĢiV_q@YU4m+mvٿqnC_ԞMF*ڡpe)zMCю1R>o  ,>.8-"6U>.Yo8Z֪Z{rv j<}`zfzI`0S/0jݦ0Cug n ̮).̐[v'+ٔ%pv ""s{-8 |{[@#dkA8$_F~ȧ!g-돑1%2Cn{\ox:]f9ݎ0_q6!(FRFm,iiCH "ց;c;'4>sziT$A^„N#$sceRee~Hc/{)M`0"$}8$"&Xy23A hdʴ0 2hFtenBxny0v4,d^,O,G̗H$ڟ9|!F'& "X#@xwDK<} x:{I9h:}n1$oBpU0|Z-XIJ]cuDd52d]wd "3oAf1"S&,3ddD ]'ySW!d K-C.8=kޭ &0AJn FQʬ]-y)t S,@ִi2%\7:4שּׁVbТӧ FC@6ҋ6>L&^.e. iz6.L iqzmm<^R+..yPo>j?&#׏iqymm,1a,ƲղҨl},Hz7b0R];+M`qF`dK%zA4)ʺW߯0w HtM.jseEh>R98x2)>"oA<ΆhxDokZ`!p>n-ca|&fi#&010g@٢0mi1Tj#  bl0Ph`ez%ce +c`~ܶնKl@4006 M&i0_܋_2/6E(Vƴ܎sFZf2L8!F#Ä_jf)ĄRot;BN' sfCtoY?}r_甪PK!}s$&xl/worksheets/sheet2.xmlĝ]oir?(B$@v$6?$a; E6#Ѷ0Px&>/s]o7Ӟ3Û?w}~r<2[ln*7ON{?oFwo_۹~ݫw+~~|vlxl~~rു57yٳ_ 3_c=jvwO}/퀆szu˭=:[z{={v_{w|jvy3Wr=fחWq~  .Wyz|f_7Ûpja?~s~e[/x*ml5^l^vv3}8.<8t=?_rͶ,^o_ uK?׽y{_=wW%~rmɯ^hcGy]݃iËٽ˽Xlue.*]^Ķh]KxhEi/zM˫pQ2<8t<u/:\g5tn{?޹xtE_,>U\k5cj:e?k7(3~Vpfu8ާkl89ŷb9Z5 ~N;N\}} wS5k97zl w⚂<e|p8U\ 7hpMAU\ TH{ YϪ/ a$ C/ǫe}';s>פOTO$y|^:zZ^+}&2\yS5I{76m.hzMz m{~l3R=\roݐ6kU4rS4ɗї_Y稧i )xrS4qq[zbdh/)I^Zg$S$,#-E=M1MrbS;dzbE:G=EL\HX稧hK%m]"I.Yf䨧iK%9)be:G=EL\LX稧iKI1Mr2c"I.Y&qsS4%1Mr2$G=ED[I.i1Mr*$G=EL\.QO$KrS4%1Mr*$G=EL\.QO$KrS4%1Mr*$G=ED\Ҧ%9)b䒡70-+|QO$\e䨧iKKrS4%?n'&d.EZzb䒫1Mr=i44%2&*$G=ED\Ҧݝ"I. RQO$ ťHKQOSL\bDKQOSL\rıQO$\'qsS4%%9)b$uz&:c"I..QOn$ivIz&&$G=EL\rıQO$$qsS4%7%9)b䒛1MrMvIz&&$G=EL\r]"I..QOfLl"*>Pf(EfD DI*l"3"$e6KQ2ۥȌs( fv SdFĹ@$3̖)2#\ J]fq.%.m̈8p_wqTGX굏ĜY|9~rdFu'_ZfDŽsD1 D9KAvvN+ .SfDŽs-D*f9ND8@ԜCMo'_Y j7=9'bs;_:̛ڸc_%vNLcΌ8V'̈S՜j:Uxi.9;K|ǔَ?ӎ@Ԝf"_Y jΡV*ʼn;DQs5~q"fLԪ3 Ĝ<NwP؉qG A]Ĕَj:p:⧊Y jΡ/N,5x3ʸ3:DQsm~q"fLԊ3܎Ĝٿ :9iO7nX8Žs{Dx4s94sDY jΡ/N,5P׉'bg]Ĕٻ@ԜC\'_|GQsr~q"fL 3Ĝٿ=V=>R?׉sh.9:N,Cs9zN,Cs9ND#f9ND8@ԜC]'_Y jΡޮ/N,5Pw׉'bsD1cVQw$̾ôsZ1tP׉sh.9N,Cs9N,Cs9:ND#f9zND8@ԜC^'_Y jΡ~/N,5P׉'bsD1cVQw$̾U˴sZtP׉sh.9:N,Cs9zN,Cs9ND#f9ND8@ԜC`'_Y jΡ/N,5P؉'bsD1cVQ'x$@qs94s94s94s#DK>bs'D1 D9v"ʼn ;DQsu~q"f9zND83&juGb[MiӝCa'Ρ;p;p;2;DQsu~q"f9zND8@ԜCb'_Y jΡ~/NČ]OqEfJq9]+ x$f\QrNGb1;QrNGb'f\ J_DK>bs:;DQrNGb'_Y J_D1 D9~q"f(9~/NČZ~HYs(٪~ \ j)z]lGP jΡ~X8Qs~iY j)z]Ό8V,>ẅib.SM1 9!w93so<="3srGTsC_94s_DKlGQsX8Qs~1 D9E˙sZt=.gFvN+ DtjʌY8U9E˙ӊŽ1eFČwz]7??G*e}Ρ~c@ԜCb'_|GQsX8QsNCrf:V,>Y-z]Ό8V?Քp"ĉ)3"f9!w93so="3srGTsC_s;2@ԜCb'Ρ@ԜSَiߏE˙ӊ]⧚2#bNUs~'@ԜSَibT%cʌ;Ĝ<;p;2@ԜCb'Ρ@ԜCb'_|GQUCrf:V,>Qq9X,%~)3"fT5=.gFvN+ ;K|ǔ3Q!w/9y.5P؉sh.5P؉藖َ;p;;bsr3;ib̈ib.SM1 9!w93sZX];̈Z~H̙xQsX8Qs~iY jΡ~ \ jΡ~/#f9!w9SvN+(z]Ό8V,?Քpsr3#N;%cʌ9^ çHqǜ=vԜCb'_ZfDQsX8Qs~1 D9E˙sZXxr%cʌYq@D81eF,5=.gFvN+ ;K|ǔ3Q!w/9TsrGb'_ZfDŽs_D1 D9/vb D9/v"w,5=.gvӊŧ;r3#N;"O5eF,朢̈ibaGt2#bF;εq[Ef)I̵q</wυ%̋rَΙb8wṰ9ONَΙb#ĉ)3"faA]Ĕ@ %NL1 D9\dFtμ%cʌs.2O}O;Oߑ93"z(9ND̈9gNb'Ρ@ԜCb'_|Gqp%NL*f9ND;DQs~q"f8A'#fLz9^YY r8}G;̈ѾNDŽs_94sK|ǔ;@ԜCb'_Y jΡ~/N,5P؉'bD<~HYs9ND;\ jsN;Ow}GGŽs_D1 D9/v"ʼn;DQs~q"fLzsĜ<s_94s_94s_94sT_DKˌYQsX8QsX8Qs~S,9]Ĕ},5=EΌ8V,vD)3"faG9Ey3#N;G!/rx]d=gc+ ~/O5gFvN+ DtSfDŽs_94s_94s_DKT1 D9Ey3#N;G~ȋ\dFvN+ *O5eF,朢ș'zqnYԾq</gqqI},2q9K|;f\Qrβ! D9ˢ\dFtβ.2#bv>,rq9V,vD)3"faG9ˢ\dFvC^zxV>T_K|ǔ;⧊Y jΡ~/N,5P؉'bD,zEsNr_<3#N;G!/_Dx4vԜCb'Ρ@ԜCb'_|GQs~q"f8Axr%NL=9;;bs_D1 D9/v"ʼn1Q!/r;̈zK;pͅ5P؉sh.5P؉藖٩bs_D1 D9/v"ʼn;DQs~q"f9ND83&j=eC.@ԜCqǜq9ZyIb'Ρ;p朢̙s~~i1 ;j)z˜q90|'+朢̙8VvD)3"fC^="9 D9/w̙/vb ;jΡ~ \ j)z˜٩N;G~ˢ\dFvN+(z˜q90,%~SfD}ԜCb'_ZfDq#ĉ)3"fLzˢ\d=g993sN,CsaG9/vb D9/v"ev ӟU;DQCb'_Y rvD81ev;;bs_D1cC^="9 D9/w̙/vb ;jΡ~ \ jΡ~/-S,5=eΌ8V>//#faG9/v"ʼn;DQs~q"fLzˢ\d=g993sN,CsaG9/vb D9/v"ev;DqΡ~/N,5P؉'bs_D1 D9/v"ʼnqܘ-@*rq9V>Y=sx.(9gjˑs(9gESdvY°p'̈%笨_Ds(9gEb'_Y JYQ؉'bsV/v"ʼn1Q!r;̈i/vb ;jΡ~ \ j)zȫ٩N;SE)3"faG9/vb D9Ey3q90,*wL1 ;jΡ~/-3"fLzȫ\d=g993sN,CsaG9/vb D9/v"ev /v"ʼn;p朢ʙsZX8Ut2#bvԜSW93s!Y ç*S͙W/vb ;jΡ~ \ j)zȫ٩N;G~ȫ\dFvN+ ONzEvFĹps*gFvN+ ;KI1;xq=6o_?o>lipr}xs~/?9잇wqn~bO?8Og9ޜ?`Wwo?mn|k wï=޾Oö=q˫7W/v'`?x]ۏ_/Kcy{v{t߾9>}}kqOԗô7q~|nz؟mo>=x6ty~tןvEۏ>ۇ;AŔ}~{|C{_>{<3M_71ݍ}xZ~͎qn.U!;ۏ)<>)'=1' joη#PK!k?B#xl/worksheets/_rels/sheet9.xml.relsj0D{$'˹@mEnKձ6Ǽa~ٱN!I%4y2S]{ A.N= K$" W+łk#5PK!1}s#xl/worksheets/_rels/sheet8.xml.relsĝnGCn|1$J""wo>8vlص:nQS⋗<=ލp:n b5~[旟b5ͻtq*^Ëݜ4=*_8my>Li7Oܝ.O9oλqen.\׷RW޼?^~a?:zWf?_8o/B:#/6_*Ĕp1AT6&bT۵k+"O.5v15S_ژ$$/JTUa\QQ2WCy4/v_tKb35| -!lcۘJZ"Tڊ".+Ū,nQ#&:;;bD6`7l [檉:y "S-t7UZToqs@4<%MZ"SLEg.+h@ƞ 7fMLbUv Ix%p6F1/$%(lI$zyek'@Ń"QQD!2TpT9C8-Hi H*KRiS"#DmW1 [Tt]]iWO]x kP,/#h5"]'&پY#d^y22=7[[_S=B' -q^Ηq/<-t76_ܮߺ<J[aJ+""mœ*/JODaWAT^EPy=CPD WCU!?+?+ϟUi!=6Dc !u,h|!֓@E򈘴 QiUL#J wƞ-ʫH+/"rhjvDꕶqg 8k8+O5B|jl=qDoSjîs"7nb\L-mi7 `}p<^vyg~7m>rD"1w1! cw݂%b|Vsu\L~ʫƟ߭" OA^hn7o2u6"ÐC9;r'bR1= 1x o٭K/ͼPK!k"?#xl/worksheets/_rels/sheet7.xml.relsĕN0M|{[` 3b;:8@#M[{{8,rA?_?iW돶4Q"J Z|o}PK!˹em#xl/worksheets/_rels/sheet6.xml.relsWN0#qR!|I4"#X*j"f{hfv->&)jsDJuÝ R1ZdYoofO>|u碐El)uVŦS:D6ƶ҇h'7Y)&ɔ9ȼ3Z92ܿwsͦ.y 9Iq'qMyDlI$ $ Ҡ$fiG0eOџ$Kʥ C9)12KdiP>>C,66EL {4hw^g}hKIk/( %9$k`kcse 2O!D !NWZ)G'>>!xIL!/a #r0H Icʕ&$οPK!< z #xl/worksheets/_rels/sheet4.xml.relsWj0FZ)IK(VJ–ԖWА4ns0ݛŻjVZ?.k[krҌ$lMÜ$>(Sd[No'19iB)E{S;h#u tPś5Y&.r&2'n[+VU[-{m•{vv9uI6i%Daz @ % AI C9 Bǀ!a$AF%iw>F϶T~yzOӸՖ$rr)4w3Ҩpl G P26*A[$B 6$ Bv[q|$%KSDA08 G $ GtOϯPK!Itz#xl/worksheets/_rels/sheet3.xml.relsęOk0~{exs J~6߾M7l^s0mi<5ŃP2]e}pa걭iy\o޿:⾛c2f:ǼP|vv[^6]ljmem{=m]otb ۤӜkaSe0,ӊH4$CI.1t . $ @IK*zP̟ng>K_o%E3hS$HcIn$+("BH$&K ]3Ktpq3N42[ܞt.ybt?-,!eq;٬i9tcO)I<kŽh;~E}{#:tKxfqIH32- ՉNR~8'tc30nMM>k PK!R-#xl/worksheets/_rels/sheet1.xml.relsĔMN0H!=vGuCP:"-z{,Q E<7X/>&ڢuR+ !B%t!Uuxs\ "?c}ji\\cP{o(uƖ; ڶ܇Vp+ig vU e).xoQ#yOn+ 944#iɐ@۶YZ =G9!. iR:$> Ť&X<>u4zT'd#չfCB^I_j>@~'!/PK!u+3xl/drawings/drawing3.xml_s6;!bO5@g:de#Гc6Jpz2γ.ۊ0_̶ٗ*Ag~J矮bT5szUeҠwQFn" *zY|N8q+`]nmޱ=ZK8Wi8NȂ*ZYeա4|MiP?Fa*'q\wi{0:vy&8,2T8lS;~\mVO*J,ާO^=)9:̓s5'ͺ}y[)-6^M0U~jE}םM+f?< | W4raV$i=PŠ ;Sn[YҝFu-f[x Nsjײ:lYE~s3G._ݍ<=VLf_q6}e;ޡOe~!P͗$:z곸q^^NY_X0o yXMd>tJݼ6;^z"&4iM hb1j!TՄEHjlt&&k| )jbcχMFc`\&Ӫo&kjbd;liK 6eSTi؄ Ac:PJ7WLM 3`l*&6iMrZ9-r9ւTAKMfPޤքkf[FZ&-ւTA5)7A}ӇONˇҪjbSoM&"&2%kPnL>xzfӗhAmc +m+tbԔMpQj_"keM,e,7OKT4}(cCf=5g3A&0#Q3]sjTlTv <19-5e d̦x`[I9%S2E| 2AfLIKn%s8PK;k)VcdKo.k4x 9s1 Vd+@71`< dȔ 9s`3 SFi9 22%eA]h 2edJ<@ܜ9L)!ST=6 z(>L&3;z&xA dvɔx< > 2A&)y=@  31ϔ3% Ϡ*OcĘ1;fJ<@A՝ dvɔx< YdlV z<@ }\vO}iOHm.&JʞA1#E*#0EP=% \3)>=<MyiPФ`l`M!ͥ"&6%AIJNM??PK!frxl/worksheets/sheet1.xmlYr6}L](i$el)fI=q<$qL үY)VIKx[==]9YrY$"Awb7C)˗,9p~ir'M\9@ȋQj;"9̘£\{Vrԋ }e,]0`*BĻʀH2&$dwӠ0_,^;%XN,2P;rG6+cf}-ND=p]'׹:EF,!<4 ]J2YWfe}'8Y0~FA/#wE!\ qC/O<1a9Oө{ Y}KbT}wdQqA2^>,xC)p <]T~4 `ĻB7. ˅ Q'ZW(BDD %F(j}5/EB;r*GzftZLD; ŖQ=֣ɓy<'Hapwǥ[B d#Ao106AV5+±ڎ ŵލRtdui֨: sc_m(-~87CC7(goSB kcJ&^80{;GdvdJYvƤɮEidZ=r9-scdJ@˷1#}:jw$-^aikT@d3mr:+Ht5zN9٬6E=WMAHQ}M*+E YMD2*0- j ;`{7</ǜ&SL?ܲ5: '+H3{%-Z(L1G#;f%N½juL0ywnT% rK3ٵ~R)_koa2fO<ˣ4xrux2M(yxr7>EA&Ɇ'$x2/EO|O02KePc3_e<92nZm.(9atO~5/_N>ՇrQ9bƇfqIWbgO1S@Yu:IO{g)TYYm,x#?ӇX;wEK<k&F(gec g뜇 FMp6 $23O?'ЊAl r6u}uIuw)bA«m[  g\=@sH2ȣi<{(ѐ }kKN48yKE 6lRN9k|GUڛ`wO-2(4wx'K=i.tJN2!gV 5Brֈ B1Os.Z#A Ǚ?[ɠP"d&xvc5o DXD]!"ijͥX׀dž6B;W,Ė/#CP0}lSM۱QgWQ o!;a) bE4E$UjEz4B=mk^ʙ\0 󖍼xhfCU;ᘖf&|BlL*\yP내`YXPcΣ8DPUYJBY{!U О;< QG2W': 󄘫G=g<^1MYQ!<yfa,"E\5"#4 2M-~K({Rt$qبD 8sdSyNYQ7wtPPv,\`l7f|n+yd있=HtݲCYKPn9ʜ|vvgcK`bykGIݣ$I桒7$EGha]Bj r*&ϫtgOOe[9vO]Ka\E 41NCiɄ*d*ˈ6F Bzj`g|>I}Q !p~9M^iL.TLLE0r _7`Ǥp6@~ESfσ@%@}Ҙ{ Xoj#nޏ~lW1Tz w(foCN%-fS!~n¶! ^-ha3ĻݻuzZЊ'C FaEj*I#51Hw+tRP"c }"y(Ӣˀb@5,,@~وj肴tJR,ac5RSxv"}}k04dqt}WV? (GZ=׾Vq5URePw`5|4$8?"t`y,.pddE}Ң.w!U"|fwDm4`B5A໦DXeŧ0pb/'Qbq}Xݮ=%˫Ym:~Zy}iNy5B M T7J/ѸXjLJlE3 ~Լ2D_WH$NK#!89/нUm$8NW$/&A{nR֧bꁛzGL-K8-&UZl5J!pS3+i@b@zѣ?3M;}sd#CXIh.0x8jNZs75#5H1L;~Va2_9H]#i3mO];PFT{-G4+( AB7$(ϥjPT~}!< <7(PF3Fc]ԢB'S@M6\AY)C2`Έ dlD҄Jkw (HOu6V} 4ЗKM)5̠Bxp}3cUn88YucC&;TCa&v{T bH8"j\yS ( Yחlt6Sq0cQb25 :_a3^Yhea;pÎE(5Fixh E 03VFߩM&XA")&M8Jw-kt>f5,]GtmX;0qHqc25֏Y !p@/F!"#W 5(X@T'CN?0=-tC0)$F"| {[g n;tMp̾hIH/\?pI!$5-[kS>hwuu1A)dS0(g˂W]'8|u-_32U/@y/~JUX1@TU1}74LXH]]3ъ5.crRAΌAEQ \NjR*&wd+gBB{Vc/Ӡ:H!Zbg(xFj;XWW`nAP9D405mEDzXRyL, :i0hME&b*U/u*ϚJOpw/WH.$ %imy@k!_MK)mrmՈxRmU*I3=/[_ ) d2n{ӪxhRھߵ6p+GՈX "aI`g:)@4zM4+* )% *qEnA;je]aqr_O=(IbVw*8բ>bc"V;Hc؊.=!aբprqXl:l$pX(HyJ442 ;-R J6h2骔 ¬Uk20EE J{ه0ipU 4lÓXѺ]W0[ALz,B?C;GԓlD9"PetlYTETʭMUCF CFtr/Y7C#lc&^]\%T PudQL n-@ 8~!/5vCu{CV#b3vFxz7d:;k("ϐ0k'?3!mFp،@oVzVlhrz]fDWPJJxT4/ 挴+T{=ʢwXQG|`Wuy-FxqLm4ǕMXz-%DD{e|Ky-T=  n)uh>iD~D/FR7Aopnǽ fCƎ5NvU3C?u.kz;܍:K|Gs|z³ )'q *J;9cjY{ÑB 5Ikl/.čKQts{u<k%$QDN!zƃ~Wc_ŏ:b A뷎޲/1vcF̢<}! s38wz 0~dl9VvN= W>{VGp0㫢qAM+|.PuhsǽAv$m!жTRs`Dz ѱe:QGojTxM"SoK/k2*|0WTp_£3^=k1bVxe=t0ԚPwH/ޢxﳐ6*ްo,NN79 BӿKv:f3rdՉhmъYSΟci^͔p/یӂpB);p@a斓5 Yћ{n8QZ&ROb=?UGCU,L OL 8a4D]}gU4@9;џįWUT+xUû0RHA+MOYs}n`W*‹e\7x "DcP@zPrG\LQ >Bk q@+]:Z Nl-GQme>~YC,6-CFOMplzc@uD5yn1bi;vLk1өe}9jҸmٞ5bz"Dorvyn#! +Ɍ)6I1aيQ p@k>OF<d0p *y8tfm)v g]j^SBـIӥx_Xj(WQEᩅ4/Wz ^ysyէ;nGOKEs՟)aP苭'/ 6Jge AelE~@Tz\u{6]tZRd]-:)>09 'wP>{B-#J`]:S"XRTj:*Z鲹_0=R'(BU{p^Wl?2̈[@e+g.]Ώ-PZv7X s^BFثu376WB*"(CeTzbdSѴUto&ǔ)>di(Гu$9,bwIfod![qjҵ &Tnrx'SѮo4$lmDZq{DG.I0KPH#kBjBd2B>Dg1Xӝ~C{ qM1Y㱶rJu]p/pbYʗLK;Y1*Ԓj>\krqld >\j*傍br9 ¦\\(傍)kSlٍ9c)c[S0W#.V`#ήA0YJL纋刯k zR.KGS/xV~ 戯kL8M?T=̫9P;[6'PK!jC%xl/worksheets/sheet8.xml\[o:~_`CX| l,{}v5Nwc~gD⌆帇ͅG֛<=^}ۿIv=\wLJɿY\y7?M~?~|y?_n|r{ss}?mO/g=|9}yoot:y'e n>[ >Z^!wʅ/{=v/zw|\ݬHO__ giw||~x۝O?O`złzguoa?v_qPFX ?yLpmo/40ssY4%ߏ?||3Hi% YwG^=!$R9C゙ǧK#*w+|[uv=[LuZ 17q̯|:Gӹ8`}jqtðGp|^bLD$ jX. dz$scKw훗+_@un?l`v4 ؑdmo9:26W77`upm?r]{ g}AoSz@eD\:]ÄHLEMX1.)@ߑ,Kl+wLwXxI D%`I:J2BPIsA-QѽYty+#D0g2+!nDffl-@ !XhfG:'- 6p/]ATp% iJQ(*b4| WۨHWSVQ߷{]7_4#d[/:` .%h朕 1 Ѽ-:hi[{&jʪ *@n "?| v}fuWk7DPq(4'a#ZYInEW4[(l Xd64*@E{`V(HcJm̰AT0|Bnk%FQKV=uQ#iF*/r ^(6["+S/A(_Jp s.Ph2FQI^%+:@A9Ԝ5b/ۼ]G(*bʦxAGm0SfTDx>Q仚A|JZp >@Ej)(@(`W {edeSFq^xKHi\νn˭FX!⢽p(L-*RKU)EL45i/D *\Ι0(cE^(hi/?D(t_brCiWa4_#r'o 7x톨=Pl9pע"nU-.VKuhjPPA_nmn *\"˙)cUM :@A3,!#V-!P8 ?Ql"MnT$eWBhX69ByxiA̘jff9$3<4p^!& yp^,RοQl<@7!yx! ˏasegb| a8 5h_-!XqC.n93DbhVT(!t&<(TAThX(*"U44:ԣO zW8/rs 4494L0D()2FQI^ uk PY%"LW띖u LU!ɡnQO4}i"ufWk7DUmCd+QmW Ux5뉼'nCPFT(J U+dy!O̡Rta|igl,G0U-.%D7_e륻!>"L]k1$}sa8+7DJ>mA$[q1G8̟DJ!Q9Se(r-:@AG诵hs6lɶ "tJDVI:@ANsIr'vQ! BϹ PPQg\{?n3 .P9׋ ;}Цj6RlvےPB8eªeIG'`'ީp7jkED %n=,6D faV0lW4Aø^|ذێxɹO+j=p5s7L6V{?ћDhd 2|'0W;Jē@:3NūV%OE\2DKPrPUvL5Z@6/ޫcB{%D| yc65_Ǽ9 5Ʌ$gc5j$_Yy)?eCEah&5m#!7xPrquŵAԠ~1Qy?~]9-m UiQbr"C;BM!ӛQLjK|:vCǭ4$y^Z-fzD ƙrR^LAԠᴖZ.AԠa]Ҷ:2vάf:!rI=]!VL1-_nf8J /7IYu3̥3 wL7D{-ʛ2D'e'QYJ0oÈ4W/ źZ%MpZ7\Iݐ j0N„ķ ; p Ko'iz^8dm1AP;"/=а/UزFFx4l p~oa0j/!j s) Gx/jީ)MjDRZ^MG4lwmb ZS p~aZ\70#ZW6M]ޛk~jo`Qu6%kVm6l:+O gb >5o[k\K/gSޏ7]ΖͤW)Jx=5/KZf`zL7keM Hy?l2)6QnQfۮep]7ͼ_ ͚=%D-I132z˚#%٪͐u8]7pAcY ]o8Jm(E4jYi` 59"ՙZiq 8~p|x㻜Wr0O󠞅c6,/< |e2؟oF>⇺Xb\kU$aʍ؈FhvY*7xjUnD'F4GEr#:5Qv>zxY*7F4G.VFȈFˢU}mDvk]&tY*]P%3cb>nK ޚg O d-ǝpݯ\>nQh,D5 uVH$L,,:^T(SGKs:'J$V䷢7elYr;]lw%ɥ7n6YqS.6[<,K}E΃?ߏEZٖ10ͻZm,][Y<q`c)-:{,_=s_ O.UZF< eH-kO$myECvNyam{ 5"59%&q ~cDČ5b@)1XǤwCyA̍F 9%f?<.&ī?b0mi3*Sbԝ|s|?b0/i)2 Qz!¼@E"3v 2p0-2tWFqa^0;:`0/=Ɍ3&i0/M^!{Z}.¼`Fwyqտ63D6/=BatC !0Cy!{\alv!¼`FWzj1v1Ba(E37,3" ft:<08rel1" ft:<08rEIyXG0ӧK0/ѝyǸG0ChN0/ѝsa^Bh6;a>0Y \3f 3oLfP&v!¼`损?3DcM9;a^0;+3DN/83i }Gyc0Chw3)3I:Lf3CB[a $8q 3D̼38u 3D̼38u %v!¼`F_ bϤάj3DsmgCBaS3N;y桾Uzvޏ'um:~=~{}~hTyu\Y!6kGn˶=fٔzڔwhy]7/LƙIIjٯTd,䜘T է]e2yweEd P9½=q3c/]oV QiJUj+wس+x7an-LVy't~,wuUnWa[G/S]lN?޵ϼ_/3\-vUYM?zuWl67SyYyt;_pӧg<Ǜǟv^N?|vȨ˯AxWrHlf_cz]ܭ8<~j;z~K/yo7U]?f.ߗŎ|(fEe}\?כu,ɯO몠G홟W=$餺Yջ{? ΩiN9B6 5 5 Ɨ Pր0Ԥ@&TCMr`fQJt>ݾ&f;}M$Q5ِԀ0 vnzlpxFa&C Ԥj5!3A j7>&SCM0$5 5v\ 5@\hBf;Hn8UCPPLPp(TBqC 3A sáS5n8na&an8p 03A sáS5n8j; (5 Nո(WBa3kPré7fC jp4,fC jpěZLPp(TxsC 3A sá35n8 5 5 GԸ,rC 3A sÑ35n8npkP j$7qHrÙ7ҖW|(5 GԸxH_,PCg:nN٪LBqSk@ j$7q1P(na&an8p @HrÙ7f# jp ׹;ugp `yj@ j%7qI{7LPp,\Nt(5 ǒոdH7LPp,\Nt(5$~;n8pS}/n݆1,F0Á7bWNB͸fnNY&=oĞ:f+@ΥBLP{ ވ= 8{ҲN 3a`o;P1AJLP@5ߦ ވw} r.RLP@%@(݁J+#ށ 5 5$|5 j@ jI+j\,Mό5b_LPlM"YCO5g5hPffk jlMn7RAa}&̰?D4nj 3A vB"ao'\I j@ jN$7qAaf憛oӝap}75`ႛZLP0>64TB 5(5 (j5nm㆚]٢ 07LjԸaF{~_q 3A s4ZF7Ԁ007LjԬ Afi@7pv 0 Z>E-P M fi@7>Jtk5nwSk wôxC j7ߍbnFQSC*qh ZLP0Q_7Ԁ<&anFQ Ԩq8Ba&anFQ ԨqgZ<%7Ljk'5hZp3l} mh 5 5x[k$7L*;sB 3A s4Z5j0膚]ͭ 0m2߻G7LkhyMƴPVW\6J4A 54ZFBa&atv Ei56ZLP|  Sr.Ba&aFQ ԌklwmߐͦHa_C7;FQ Ԍklsjz5fքMFklsj@q|9h@Pf/0m2jP jZ\rôɘjz=Qj@;ffrWWf?m7wr,n-^Rj:>WEQPK!b Jxl/worksheets/sheet9.xmlXM6*b$YjjVv-@5f}ZKxm|[Vw{'&+.HDʋ}iJ"(X>X>mu:0`(*aX%j$JV';!s`)aUJFS)B2OÜY|CveZGZqq xQ6Ձ64]PS/EwB 7cnC y- >?;{$1N1C5;hc~%bvA r=G9l}z@ m[oȕdܬ\AƏ|ԾȢ]N rnfen+?p]ﵠ/L8Z^ȑ'lϠ=sPnxZ_ȕd|"{@ #-ri1+?G7?AFDD>-!cv1Mt+#44-4?BcSܠc] uo+=BYG.ks=O`xK^TL }}LfxRkO]0_=*3`feOBԯ ̴%ݳ?܃l5:J;Y{%J2 fP   e $ܼQ I(,y#:PK!bmxl/theme/theme1.xmlYOo6w tom'uرMniXS@I}úa0l+t&[HJKՇD"|#uڃC"$q۫]z>8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ_^'܉M01UJS#]flmʒgD^< dB[_WE)*k;ZxO(c5g4 h܇A:I~KBxԙ \ YWQB@^4@.hKik<ʞ6b+jΎ9#U`δuM֯DAaVB[͈f-WY؜j0[:X ~;Qㅋt >z/fʒ"Z x Zp;+e{/eP;,.&'Qk5q&pT(KLb} Sd›L17 jpaS! 35'+ZzQ TIIvt]K&⫢ #v5-|#4b3q:TA1pa*~9mm34銗bg1KB[Y&[)H V*Q Ua?SE'p>vX`3qBU( 8W0 Aw 9Kä5$ PeD)jeI2b!aC]zoPnIZ diͩdks|l2Rn6 Mf\ļ=XvYEEĢͪgY [A+M[XK52`%p7!?ڊ&aQ}6HH;8`ҤiI[-۬/0,>eE;ck;ٓ) C cc?f}p|61%M0*<ҭPK!Pd2 xl/styles.xml[[o8~_iCwBvFYԮ!q\Pb:0{63}! wc8(^Q$ۃmK|o/Ķ2ƾ&1G11D[&lno =8NmQf7MK68.ENQ ;'rql"OHD;5192[y7q#+mw#I9I`G9uXẐ$&%Ww`=N~+<--fO v3/ "@ cOb7ByG7f?͢]7С@r8ٚX8} cݐ>z_ƙR1KvAf=W>V8;;SK8.,mE O.AwD.<{؅+O%nN7\Q&G~0 =-`1OP*_;(1M'ohI`8%!)#_洞uR݈jf`ӿOv2N'h|<= &tt;Xj^AetyjV:P:I}XI !(&( o$;*Xv,f>v7Ip=OV`ؚd {K 6*+2 ),Q*4R8y( 3OcpX>ZE3{XNy ^\7U[!77iI ⨚N:JT-w t[-4lIw^+s1ě8B91["أEkwN C;MR$q`wSEp~trdt &a i- H ے\UTuwő&kp$rbPXVRG̸R_I#ۊ1.\Kk&q圿@,<䊴kl[a7lU񴭕k E+d'2.= "@MJ%NX"mki4" B*/4 WWe2wb;5ڲ/ۗ2 sJS~! K4/)a_ ̓5p4+I75]R%Q39C].m(KfͶ?5ffzlL%K#ZF,es3 9bW(Be UoXm5jL/`W,Cye!]Mʱ >*ıTmO[k 1.ːm o_lx$ފ+|FW]/|WXvEAb-ԧn@|3SYQP:)gB+dvT 3wO) BgF5y8sV@V29~`RLH[ھF*iY]#q"?#'˕~XxfnZ4!#p6iW[[SP6i&p:dѳs/@ȹBVg;X9;pbK#Kyjy.MFԉKzg<A7v~Зww˹]_E>GU~M31/l!@Hɗ §O~i5MIotƽxOOior<[ g)NCil~6> \鄓Uo,PK!Hzxxl/drawings/drawing1.xmlXKs0wA3x31{鴙>DL'+~!tj߷L.a$$)b |1aR|W@!p0D9gMωK~oĜ: 4=CX,(W@IZ$Ɨ h5'|P"DwiGn.X6L=ӈ3yK0o8i@7!TX.`k,,ƩjI8keSsb(G50$;Jl=kk5lvaZ[k-d͜reoBy Y~G҉2IZ,-0y71|Ypp~Mè 9pA% -8ꀃ;g!zi{̙<`;|7}fyOraѸ$L MoL'h5UTz|zad\%3$AUA\4<ɨ֥B~,Gj`N#NVL`kPXDل +"IGPZ-9ɲ;-30c y?bO􇍖0CaPN/^])C$wfq i9S&SkYy$eBw- ɊYg+/fukMMob-k릊l@jʷu/Q ؁2BVH|8E= oBLVn"zR8뎜ř]"Le ^6*A$OEmv %aj.ޕoxޠ_RbzHҵ*ouABR&+X*Nbk[i0}Ʉd{ԼdM~i1zd?hϵ,xR%znг~-J'z6.0̗TY@,\&՞]& r,\&]+}/g0We{QwFFdf"ܠuh$QV}L?T7q@Y>=XDBZxcQZt1oSt L.ՠf))h=Ѕ˛7c j3r)x1FGɔcSZSs 6w_''m0 -/QdIlKguRw~|y<.(Jޘ^>w{5_|K.P¥feXm֯"C|MDmtEY̓M"X11ąR(p%p!ia&,fx˷Sn.[T~N~Mi%iZ]OzdDr?/l .̣ #?c"KSxD#KxS{lǾ˥]^Fl;ۡ{wאYJ]?Ebdhzbe440uZդoRDJ6)cj(bE3r="Y^"fpJBڝCDL bB75DL bB 8TӕJ ]%18 1,̠7l WE<̰7]VDL d<0&2Aot "2K\ U_3.AĴ`53`S'̔iI?A bZ0fh_ԭ(ӂ5%-/UO 2t`S_Ғ;H&[ӂ5&- 0MLT: bZ0F%7!uAĴ`F iK ~f`: bZ0%3JyB=A$GxDIZZ`&% ˺6P)bx js݁!&դ,dY75,^ "w$}1ҠQ=C4_\hsKhKNYO\19 PK!v|rIxl/drawings/vmlDrawing2.vmlSk0>i|IYƆPtX}uFV8i8{tzMi>ouVRRgjXaؕ}s`¿ZL94QL!NѨ[iw5ϳ8 j,vwV;= yJI0ا1&ӊxRb2Q|pI>~i{Ջ_9K b6=pH$לʀTOJHqP3M{^kv[]濳8rFm)[U/摮^O:(ȳ < 1#xe|:: !¯k_xz<)`֥?LA@=  ࿗8iP`?^bΗ%R_}P6z|V!ޅ[zb8{0j,n1 d/ E#@<\ yz'g3@jp2`?m<i.ӄC?r ,5 |n6xw0A7}`vryf3`6vf<$a0qč[N@⎞n$nTid^7<,.; F OG;"04e7vlq,b'GcV45q7rc^[lɎ7VBz6VM\ï[PBݜW A՜/PK!aH6fxl/drawings/drawing2.xmlTMo0 twĭ8E4 ]sr-Ēs49΢=o^'K$Kj i;Zy|I `YeA4ӫˎl7 wEs}G*ӯ {y p10w&k}CGtp SJ@(f Q@굘nrؔ-dRy1!,0~vmݻ迬H"ֿPK!N"Dmxxl/drawings/vmlDrawing1.vmlX[k0~?Зsm;PR4aJF$NΑlB@cHE[Ă?ֳ6YB bwcd2K dL~)5\.yy<)1 q%#?eˍ"[ Y,J8c?=!|rV;1sFڧг ~o; œ?1;cE@G +#""ϊ;Œg+̣`q䚑Gɓ\hb)ɵg-q%1\&eQR K.D d@+AR,0*:Z^#u`A? RxISsFSKQllœ`KEi))ҁ鎇*dR*R˓1re~Qs`C6)dY;(wxh d=CvJrbB@u&Kc.@j2| {w!\ Ah9n@ FMm55 J(|`T0BF.\p x.G,X=q'7Wќ : "+iC wn!W[_L㑁| ; 9uPQiwX8spXu=; PwT;yeݔBuA/ /{^qND#ΠΰC@p43C838qH3irceKܹl;G˯:GBxٔnЂ똨3j:C /Ζ|W{M.H_TX@&>JqKcs&a@<0g5>p`Ѓ?PK!pYxl/ctrlProps/ctrlProp208.xmln0@w$:] UYp36"7oySNE"丏t7ZmbB/8Lp5[H Z/V]aa_Yѡ% ֜gNg =5Ρs@7xsHe NuE܅}PK!fxl/ctrlProps/ctrlProp209.xmln0@JubmA*UY"Ʒ9'"iA!9" (S-E-Kkq&GWXq}te*h 5'm۽l#tNKЍ<9K,?\_P}(?o PK!YQA('xl/printerSettings/printerSettings3.bin?SA841]X% MŒ%Dfឰr{GI/*#E&e*ޡ)L{ ?߾sЇ6pAMH#'MUaz^Br||@RbizUC%y&B2)2hpZ? #g&<R&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` ow]j Qt\.K>3駨Bb :0[irt}mgGZƂXs۶6(~{Cn # VvL:"BA>~PK! xl/ctrlProps/ctrlProp201.xmln0@wub%t T*X:p36"U'oySND&丏t7pΫ-(zs'Z85[H Z/V]aa_Yѡ% ֜mwzj)ysHe NuE܅}xPK!-Axl/ctrlProps/ctrlProp205.xmln0@wub%, T*X:p36"U'oySND&丏t7pΫ-(zs'Z85[H Z/V]aa_Yѡ% ֜mwzj)ysHe NuE܅}xPK!33xl/ctrlProps/ctrlProp198.xmln0@JJ2 DSs&]䳪 [{Ӓ"iA!9#= (F NϏ{Z8݊Z-$Bf+MP\ЎkNk۽l#]^ (4]ׁJ"BAAPK!c^xl/ctrlProps/ctrlProp199.xmln0@JubmA*UY"Ʒ9'"iA!9" (S-E-Kkq&GWXq}te*h 5'm۽l#tNKЍ<9K,\_P}(?o PK!q&xl/ctrlProps/ctrlProp200.xmln0@Jub%LP , swϪƷ9'E"mӂBr1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/'np/(.ğ7 PK!=؀xl/ctrlProps/ctrlProp203.xmlAn0HJ*AA*\8:klbF^ '23㔓"iA!9# ܺj J&&4Dc\NEKkq&GWXq}te,h{ 5'i۝l#=9t o@5``yY?A%vCSAw A^PK!%!׸xl/ctrlProps/ctrlProp204.xmln0@wub% TR!|뜱}*=a|{orRX$2X7-($}[w^mAIĄ(p<|,K>1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/'np/(.ğ7 PK!,$Զxl/ctrlProps/ctrlProp206.xml10%T +>bF^ iffwrRO, >ҟ{wY}j P_|<|boQ@uZ\lq5{j ^bIov:Hvq(E ,y': PK!os]Ixl/ctrlProps/ctrlProp220.xmln0@wubm K\MgMǷ9'"iA!9"= (NǏsZ8݋Z,$B^kq&GWXq}te*h 5'mNw:Hi ]3(4Xnq/(>?PK!Nᨀxl/ctrlProps/ctrlProp216.xmlAn0HJ"U T\8:klbF^ '23Ô"gӂBrGuTKMLhb#S-~-$Bf+MPXkNzݶ[Ft{s ?<9k\J:"BA1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/5np/(.ğ7 PK!:xl/ctrlProps/ctrlProp230.xmln0@wub%NQ0H!|뜱}*=a|{owrRX$2lZPHHwڀj '{4X^_kPT_P](7 PK!ٺ/xl/ctrlProps/ctrlProp231.xmln0@Jub%N R`a`H?u؍},4夞X$2xoZPHHeJ&&4Bqv\Nf PZ\lq5{j ^bIvw:H]^:t'O|Ni0.PT_P](_PK!pxl/ctrlProps/ctrlProp232.xmln0@JubmCA$@0tH?8ڍ},t|{orRO, >үJ&&4Ba\NEqJ+,k8k>:2Ě^Vou@]^:tÉ'P>'{4Xޖ np/(.?PK!,ʹxl/ctrlProps/ctrlProp225.xmlAn0J .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK! Oxl/ctrlProps/ctrlProp224.xmlAn0J .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!C xl/ctrlProps/ctrlProp223.xmln0@Jubm`)\"ߓoySNE"UӂBrG5]?@IĄ^(p<,>K>3黨Bb :0[irt}mgGZƂXs6(~kCn8dr NuE܅x}xPK!V ĸxl/ctrlProps/ctrlProp217.xmln0@wub%N*0H!|뜱}*=a|{owrRX$2lZPHHwڀj '{4X^/PT_P](7 PK!^'ixl/ctrlProps/ctrlProp218.xmln0@wub%NY  X:p36"U'oySND&M qn֝WPR-61' 璏Lp-jZ 49¾6fC-cAK@9unVg =9Ρc@7dr*: PK!g=uxl/ctrlProps/ctrlProp219.xml10{$`hՁ0HƾػBifprR/, l>ow]j Qt\.K>3駨Bb :0[irt}mgGZƂXs۶6(~{Cn # VvI:"BA>~PK!+˸xl/ctrlProps/ctrlProp197.xmln0@Jub%NJAjSsngU [{"@״~TKMLh䞩NV PJ+,k8k>:2Ě޷At@]P>'i2ݾM.uEPK!xl/ctrlProps/ctrlProp221.xmln0@wub%t T*X:p36"U'oySND&丏t7pΫ-(zs'Z85[H Z/V]aa_Yѡ% ֜mwzj)ysHe NuE܅}xPK!m;xl/ctrlProps/ctrlProp222.xmln0@wub%N X:p36"U'oySND&M qn֝WPR-61' 璏Lp-jZ 49¾6fC-cAK@9unVg =9Ρc@7dk *: PK!Fȼxl/ctrlProps/ctrlProp215.xmln0@wub%NQ0H!|뜱}*=a|{owrRX$2lZPHHwڀj '{4X^/PT_P](7 PK!;fSxl/ctrlProps/ctrlProp191.xmln0@Jubm &\\"Ʒ9'"iA!9"(NsS-~Z,$Bӷf+MPTkNz۶{FſjPЍgA-h`ݭ7/P\aP}(7 PK!Bxl/ctrlProps/ctrlProp195.xmln0@JubmX  &\\"Ʒ9'"iA!9"(NsS-~Z,$Bӷf+MPTkNz۶{FſjPЍgA-h`ݭ7/P\aP}(7 PK!Qxl/ctrlProps/ctrlProp169.xmln0@Jub%L 5C9c7]䳪[{˒"iA!9#= ܇TKMLh䞩N?ESkq&GWXq}te.hG 5'}hNw:Hy  (E lm&vӀK]A ^APK!YQηxl/ctrlProps/ctrlProp170.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lmM.uE:2Ělۃ>l#ڿ%tϠ|N'h`ݭTb78eq  PK!xl/ctrlProps/ctrlProp172.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fnmwǹ.àPoPK!'xl/ctrlProps/ctrlProp173.xmlAn0HJ*! 580w#IseI=Hd2mZPHHfJ&&4Bcu\rT [Q@u:j-.` 8ΚL ?:Hi u3(4Xwm؍=uE܇x}~PK!cxl/ctrlProps/ctrlProp174.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fnmwǹ.àPoPK!;_xl/ctrlProps/ctrlProp175.xml0{kEK! ]uEƾػBɕ2礞X$26-($C{%`x:y.cӭBb :0[irt}mgGZvXsҟm{m$P|CW״nD ݁J "CA>PK!gxl/ctrlProps/ctrlProp168.xmln0@JubmHAj*&\Mg [{zbd`״nJ&&4Biq\rT ߢV PJ+,k8k>:2Ě޷m;m$P@W׼n^#MЁJ"BAy>PK!XOxl/ctrlProps/ctrlProp167.xmln0@Jub%L 5C9c7]䳪[{˒"iA!9#= ܇TKMLh䞩N?ESkq&GWXq}te.hG 5'}hNw:Hy  (E lmׁJ"BA>PK!iGxl/ctrlProps/ctrlProp166.xml1n0 @dtI]X :dpTX" Q(o~Hd2phZPHHw?TKMLhK䁩Nע6 P򡵸J+,k8k>:ԲĚ~kNw:H@W粅n d#vî;J׺"CA}PK!>xl/ctrlProps/ctrlProp160.xmln0@Jubmv* R:10p36"Ʒ9'"WӂBrPK!Zqxl/ctrlProps/ctrlProp161.xmln0@Jub%NAjN Mg[{zbdiA!9# (F 䞩NעV PJ+,k8k>:2Ě޷Qu@큮y  (D laL"BAݽPK!AtWxl/ctrlProps/ctrlProp162.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lmM.uE:ԲĚ~kNw:H@W粅n d#vî;J׺"CA}PK!q>xl/ctrlProps/ctrlProp164.xml1n0 @dJ!E"iBx5'E"CӂBr-4tWP>'i6vTb7 ?PK!a{xl/ctrlProps/ctrlProp165.xml1n0 @dtJ!E"iBx5'E"CӂBr-4tWP>'i6vTb7 ?PK!KҸxl/ctrlProps/ctrlProp176.xmln0@JubmAjN \MgU [{"iA!9# ܆(F䞩NעV PJ+,k8k>:2Ě޷Qu@]P>'{4]%vӀK]A Aw/PK!=xl/ctrlProps/ctrlProp177.xmln0@JubmAjN \MgU [{"iA!9# ܆(F䞩NעV PJ+,k8k>:2Ě޷Qu@]P>'{4]&vӀK]A Aw/PK!q]ָxl/ctrlProps/ctrlProp178.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮ@%vӀK]A ^APK!Xظxl/ctrlProps/ctrlProp188.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮ@%vӀK]A ^APK!@xl/ctrlProps/ctrlProp189.xmln0@Jub%NJAjSsngU [{"@״~TKMLh䞩NV PJ+,k8k>:2Ě޷At@]P>'i2]M.uEPK!Yxl/ctrlProps/ctrlProp190.xmln0@Jub%NHAjN \"U';_לLxc>~NZlbBO^vog%Lp.j.Z 49¾6fC-KA;I@9cFŏ_tu|.[h^A-l`?컮#uE<PK!xl/ctrlProps/ctrlProp233.xmlAn0J" .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!qxl/ctrlProps/ctrlProp192.xmln0@JubmP0H11t:ڍ},0w89L6M ~@I4Ą(p:>KjSb!1j0[irt}mgGZvXs۶6(GW約n< doFn~J "CAA_PK! ,:xl/ctrlProps/ctrlProp193.xmlAn08 U D'=κvcF^ siI=Hd2iZPHHsJ&&4Dqq\rT  PJ+,k8k>:2Ě޶^u@??%tgP>'{4Xw Tb78eq PK! ~xl/ctrlProps/ctrlProp194.xmln0@Jubm*0H11t:ڍ},0w89L6M ~@I4Ą(p:>KjSb!1j0[irt}mgGZvXs۶6(GW約n< doFn~J "CAA_PK!Pzxl/ctrlProps/ctrlProp187.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮ[iàPOoPK!Qdܸxl/ctrlProps/ctrlProp186.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮ[iàPOoPK!hQxl/ctrlProps/ctrlProp185.xml1n0 @dewIX P:dpTZ" Q(o~Hd25-($SJ&&4De{.y`ӭBb Ժ0[irt}mgGZvXsүm{'m$P|AW粅n~~E }A%vk݆A ~PK!Txl/ctrlProps/ctrlProp179.xml108P D>gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[o-nq0(>?PK!o+xl/ctrlProps/ctrlProp180.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G l@%vӀK]A ^APK!H_{xl/ctrlProps/ctrlProp181.xml1n0 @de7KX P:dpTZ" Q(o~Hd25-($SJ&&4De{.y`ӭBb Ժ0[irt}mgGZvXsүm{'m$P|AW粅n~~E }A%vk݆A ~PK!pYxl/ctrlProps/ctrlProp182.xml1n0 @deJ!E"iBx5'E"iA!9"= |7PR-M61' \//sS-nEm嬵J+,k8k>:ԲĚ~mۓ>l#:>-4t;|N+l`?*G\6 x PK!x9)xl/ctrlProps/ctrlProp183.xmlAj0A,Ʋ &X ԥrpȫHk8{5'E"iA!9"= |7PR-M61' \//sS-nEm嬵J+,k8k>:ԲĚ~mۓ>l#:>-4t;|N+l`?*G\6 x PK!`0mxl/ctrlProps/ctrlProp184.xml1n0 @dewJ!E"iBx5'E"iA!9"= |7PR-M61' \//sS-nEm嬵J+,k8k>:ԲĚ~mۓ>l#:>-4t;|N+l`?*G\6 x PK!#Cxl/ctrlProps/ctrlProp196.xml108P D>gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oab78eq PK!qxl/ctrlProps/ctrlProp240.xmlAn0J" .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHu݀J:"BA}PK!U9޹xl/ctrlProps/ctrlProp235.xmlAn0J"$ .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!? xl/ctrlProps/ctrlProp284.xmln0@wub% TR!|뜱}*=a|{orRX$2X7-($}[w^mAIĄ(p<|,K>1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/5np/(.ğ7 PK!tvUxl/ctrlProps/ctrlProp285.xmlAn0J" 8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!ixl/ctrlProps/ctrlProp286.xmlAn0J"$ 8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!"عxl/ctrlProps/ctrlProp287.xmlN0@w$:e%NQRխD*:psmbE> O;ל/Lvm n{xy%dxt\T kQ@u9h-.` :Κ,$_׽6(cBC@7 d"f߃J׺"CA>PK!Dҹxl/ctrlProps/ctrlProp288.xmlAn0HZq%N+!AA8pH:klbF^ 723㔓zbdiA!9# v?-(z b3S-nEKkq&GWXq}te,h{ 5'ٶ;Ft{s '@5``uYmnp/(.7?PK!txl/ctrlProps/ctrlProp289.xmlAN0HZJJUJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M@%vӀK~A PK!Mxl/ctrlProps/ctrlProp290.xmln0@JubmV Paԉ!|뜱},0彷?9L!܂ji '{4X^_kPT_P](7 PK!Eȥxl/ctrlProps/ctrlProp282.xmlAn0HZq%N+!AA8pH:klbF^ 723㔓zbdiA!9# v?-(z b3S-nEKkq&GWXq}te,h{ 5'ٶ;Ft{s '@5``uYmnp/(.7?PK!M+ֹxl/ctrlProps/ctrlProp281.xmlAj0A,r :D ԡE^E]}\fx^sRX$2ص($S TKMLhsS-Em堵J+,k8k>:ԲĚ~^:He +(4h>}*G\ x PK!>4ܸxl/ctrlProps/ctrlProp274.xmln0@w$:T$~뜱},a|{orRO, |4-($}g%Rox\=|fӭBb :~i-.` 8Κm/?vw:Hvq(F .< NuE܅}PK!-xl/ctrlProps/ctrlProp275.xmln0@JubmCA$@,0tH?8ڍ},t|{orRO, >үJ&&4Ba\NEqJ+,k8k>:2Ě^Vou@]^:tÉ'P>'{4Xޖ np/(.?PK!xl/ctrlProps/ctrlProp276.xmln0@Jub%N RX``H?u؍},4夞X$2xoZPHHeJ&&4Bqv\Nf PZ\lq5{j ^bIvw:H]^:t'O|Ni0.PT_P](_PK!\rxl/ctrlProps/ctrlProp277.xmlAn0J 8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHu݀J:"BA}PK!Txl/ctrlProps/ctrlProp278.xmlAn0HJ"U T8:klbF^ '23Ô"gӂBrGuTKMLhb#S-~-$Bf+MPXkNzݶ[Ft{s ?<9kZJ:"BAysHuقJ:"BA}PK!l0xl/ctrlProps/ctrlProp280.xmlAn08 !A=0κvcF^ ߓ23㔓zbd`մ~ t/PR-61 Lp.j;V]aa_Yѡ% ֜mzj9N<9{l@%vCSAw ^APK!EBǴxl/ctrlProps/ctrlProp291.xml1n0 @dJ!E"iBx5'E"CӂBr-4tWP>'i6vTb7 ?PK!W6xl/ctrlProps/ctrlProp292.xmlAn08A=q:klbF^ sqI=Hd2մnTKMLhc䎩N PJ+,k8k>:2Ěn۝l#;?%t/Ϡ|Ni4֛e0{ }xPK!Vxl/ctrlProps/ctrlProp293.xmlAn0HJ*! 580w#IseI=Hd2mZPHHfJ&&4Bcu\rT [Q@u:j-.` 8ΚL ?:Hi u3(4XwTb78q  PK!-' docProps/core.xml (_k0BsdIDžnXKa.+}uͷ^ {1s/AYtcFX~lQHY;|/*ᘰuࣂ&?!AQ${x+ REe<-MawA't* a4T`$B<ȝf̡8i3phd4Xv6 PxsSH'0g_Ȗ_vM9PR8JQ4#$% V,7(lmZ,Ej7A:c ߾m%ZyP v-]\T,i+؅a}W֠kĝr6u#C⎡q TDR^Qykx2dhI4?oI}\Fm]$ :(ɓ9(f$kE3jȾ3tG[nJXGd)j_nYk9eTɞ~}3K4i"Kra!y_Cfd }Tw݋~4h^֜PK!QdocProps/custom.xml (Mo } Fm,dݍbk"`e}n}G/tdz2o#SQU[Z /}NzAP&kDŽ\ƍtzuLt(usBYHs5VKoKf_ZgOr_P'mf {>,W8~a4T-׹VeK&a @jGgqE ,>- <ޤ*Oɚ{_f PK!YQA('xl/printerSettings/printerSettings1.bin?SA841]X% MŒ%Dfឰr{GI/*#E&e*ޡ)L{ ?߾sЇ6pAMH#'MUaz^Br||@RbizUC%y&B2)2hpZ? #g&<R&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` pιU X'N b&z,LHFCJ!Y?s#wh, _HLSn2봮BYw0%nq^Z{5b٣ԉ5("S/튚<FT 4VwZ ~v~YVYyƙ#aԗXz:*F/7+c-ТGk 5il6hsqkYFiT#i\<i!4Ǔ(.Gדx_gԱ9Œ"JǠ #?c'$irNG$^G H01 S"g4 ΊLT+ByÂJ`ÆP8xeF6~-%ϖ"H+$1_Qj"*L ӝ^ߥ%~f4OJFS2>xLxr9R^.]we20R3$[>l叞PFt.u4Lr[UTCmqWڸ[8Ce7Tu켯YLAڇ+R ,`:g! 4u$zqaցlY6mlh)U`(v0T? >|R齤D\i=wTy*eF M_};~Bmq?PK!QHb@(customXml/itemProps2.xml $( RQK0|%mmv0p א~݂MR*7`"lSo^Ai&E D*k&6z~yQV Ȑh1zZC g/=e>|ETU'Iq08D]-,֘n[Da81vT,Q(%9Gaxio5o٣ѧ+vqה3FrDhџg)pFԲ1x}aE`gB3q!_q'(ID#;bNw2T!QX/u}qES[Fr0xWGi`A8h.KUn>i PK!yٷxl/ctrlProps/ctrlProp294.xmln0@Jubm* R:10p36"Ʒ9'"WӂBrR&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` xl/calcChain.xml ֮ n1+2)TQdS 8=d2~\5ݠu]z[뗽K*8JA[6^S}*guc?Idb;!Lc?PK!Txl/ctrlProps/ctrlProp273.xmln0@wub%TR!|뜱}*=a|{orRX$2X7-($}[w^mAIĄ(p<|,K>1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/5np/(.ğ7 PK! Axl/ctrlProps/ctrlProp272.xmln0@Jub%Na RX``H?u؍},4夞X$2xoZPHHeJ&&4Bqv\Nf PZ\lq5{j ^bIvw:H]^:t'O|Ni0.7[PT_P](_PK!̸xl/ctrlProps/ctrlProp271.xmln0@w$:e Up36"7oySNE"丏t7ZmbB/8Lp5[H Z/V]aa_Yѡ% ֜gNg =5Ρs@7xsHeéοPߠPK!Xaxl/ctrlProps/ctrlProp245.xmlAj0A,r :D ԡE^E]}\fx^sRX$2ص($S TKMLhsS-Em堵J+,k8k>:ԲĚ~^:He +(4h>}*G\ x PK!"-vxl/ctrlProps/ctrlProp246.xmln0@w$:T$~뜱},a|{orRO, |4-($}g%Rox\=|fӭBb :~i-.` 8Κm/?vw:Hvq(F .< NuE܅}PK!*δJxl/ctrlProps/ctrlProp247.xmln0@wub% TR!|뜱}*=a|{orRX$2X7-($}[w^mAIĄ(p<|,K>1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/5np/(.ğ7 PK!2xl/ctrlProps/ctrlProp248.xmln0@wub%N*0H!|뜱}*=a|{owrRX$2lZPHHwڀj '{4X^_kPT_P](7 PK!:u2xl/ctrlProps/ctrlProp249.xmlAn0J .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHu݀J:"BA}PK!Wxl/ctrlProps/ctrlProp250.xmlAn0J" .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHu݀J:"BA}PK!RFxl/ctrlProps/ctrlProp251.xml10%T +>bF^ iffwrRO, >ҟ{wY}j P_|<|boQ@uZ\lq5{j ^bIov:Hvq(E ,y': PK!P ]xl/ctrlProps/ctrlProp244.xmlAn0HZq%N+!AA\8pH:klbF^ 723㔓zbdiA!9# v?-(z b3S-nEKkq&GWXq}te,h{ 5'ٶ;Ft{s '@5``uYmnp/(.7?PK!iйxl/ctrlProps/ctrlProp243.xmlAn0J"! .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!a^xl/ctrlProps/ctrlProp242.xmlAn0J" .8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!mSxl/ctrlProps/ctrlProp236.xmln0@w$:T$~뜱},a|{orRO, |4-($}g%Rox\=|fӭBb :~i-.` 8Κm/?vw:Hvq(F . NuE܅}PK!YYxl/ctrlProps/ctrlProp237.xmlAn0HJ*AA*\8:klbF^ '23㔓"iA!9# ܺj J&&4Dc\NEKkq&GWXq}te,h{ 5'i۝l#=9t o@5``yY~A%vCSAw A^PK!A=xl/ctrlProps/ctrlProp238.xmlAn0HJ"U T\8:klbF^ '23Ô"gӂBrGuTKMLhb#S-~-$Bf+MPXkNzݶ[Ft{s ?<9kZJ:"BAysHu݀J:"BA}PK!SIxl/ctrlProps/ctrlProp159.xml0{kE{q0HDEAƾػBɕ<礞X$24-($C%`x:z.cӽBb :0[irt}mgGZvXs_m{m$Pi u3(E n *{ PK!y{xl/ctrlProps/ctrlProp241.xmlAn08 !A=0κvcF^ ߓ23㔓zbd`մ~ t/PR-61 Lp.j;V]aa_Yѡ% ֜mzj9N<9{l@%vCSAw ^APK!k3˷xl/ctrlProps/ctrlProp252.xmln0@w$:] Up36"7oySNE"丏t7ZmbB/8Lp5[H Z/V]aa_Yѡ% ֜gNg =5Ρs@7xsHe NuE܅}PK!,ոxl/ctrlProps/ctrlProp253.xmln0@Jub%NJA*wBƷ9'"@״ne J&&4Ba\NE-Kkq&GWXq}te*h 5'm۝l#ڿ%t oAO:P\_P}(7?PK!uLxl/ctrlProps/ctrlProp254.xmln0@JubmA*U"Ʒ9'"iA!9" (S-E-Kkq&GWXq}te*h 5'm۽l#tNKЍ<9K,\_P}(?o PK![#7xl/ctrlProps/ctrlProp264.xmlAn0HJ"U T8:klbF^ '23Ô"gӂBrGuTKMLhb#S-~-$Bf+MPXkNzݶ[Ft{s ?<9k\J:"BA?PK!rR·xl/ctrlProps/ctrlProp266.xml10{$`hՁ0HƾػBifprR/, l>ow]j Qt\.K>3駨Bb :0[irt}mgGZƂXs۶6(~{Cn # VvI:"BA>~PK!bBxl/ctrlProps/ctrlProp267.xmln0@wub%N :p36"U'oySND&M qn֝WPR-61' 璏Lp-jZ 49¾6fC-cAK@9unVg =9Ρc@7dk *: PK!Gȸxl/ctrlProps/ctrlProp268.xmln0@wub%t T*:p36"U'oySND&丏t7pΫ-(zs'Z85[H Z/V]aa_Yѡ% ֜mwzj)ysHe NuE܅}xPK!`9xl/ctrlProps/ctrlProp269.xmlAn0J 8p5vcF^ 7=ef)'"{ӂBrGz.PR-61 Lp5[H Zǽf+MPXkNzݶ;F?j9>ysHuقJ:"BA}PK!(xl/ctrlProps/ctrlProp270.xmln0@Jub%N RX``H?u؍},4夞X$2xoZPHHeJ&&4Bqv\Nf PZ\lq5{j ^bIvw:H]^:t'O|Ni0.7[PT_P](_PK!C&sxl/ctrlProps/ctrlProp263.xmln0@wub%N*0H!|뜱}*=a|{owrRX$2lZPHHwڀj '{4X^/PT_P](7 PK!cxl/ctrlProps/ctrlProp262.xmln0@JJ2 TK:0"Ʒv9'"iA!9" \ TKMLhsGZ8XH ZoV]aa_Yѡ$ ֜t׶[FŷtNKЍ?<9Kwuǹ.POoPK!kižxl/ctrlProps/ctrlProp261.xmln0@wub%N :p36"U'oySND&M qn֝WPR-61' 璏Lp-jZ 49¾6fC-cAK@9unVg =9Ρc@7dr*: PK! xl/ctrlProps/ctrlProp255.xmln0@wub%TR!|뜱}*=a|{orRX$2X7-($}[w^mAIĄ(p<|,K>1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/'np/(.ğ7 PK!Pxl/ctrlProps/ctrlProp256.xmln0@wub%t T*:p36"U'oySND&丏t7pΫ-(zs'Z85[H Z/V]aa_Yѡ% ֜mwzj)ysHe NuE܅}xPK!8n\xl/ctrlProps/ctrlProp257.xmln0@wub%, T*:p36"U'oySND&丏t7pΫ-(zs'Z85[H Z/V]aa_Yѡ% ֜mwzj)ysHe NuE܅}xPK!0?`xl/ctrlProps/ctrlProp258.xmln0@wub% TR!|뜱}*=a|{orRX$2X7-($}[w^mAIĄ(p<|,K>1鷨Bb :~i-.` 8Κm/7m;m$P@W8N(F ,/'np/(.ğ7 PK!sLdxl/ctrlProps/ctrlProp259.xml10{$`hՁ0HƾػBifprR/, l>ow]j Qt\.K>3駨Bb :0[irt}mgGZƂXs۶6(~{Cn # VvL:"BA>~PK! Zxl/ctrlProps/ctrlProp260.xmln0@wubm:AR\MgUIǷ9'E"MӂBrysHuقJ:"BA}PK!иxl/ctrlProps/ctrlProp156.xmln0@wubm &\wBIǷ9'"iA!9"= ( ΧsS-E-頵J+,k8k>:2Ěj۽l#?tMK oA-h`ݭw[P\_P}(Ч7PK!51xl/ctrlProps/ctrlProp157.xmlAn0H8TBAj'w#IsyI=Hd2iZPHH?sJ&&4Bcu\rT {Q@u:h-.` 8ΚL 椿v:H]_gP>'{4XwTb78q  PK!xl/ctrlProps/ctrlProp56.xmln0@JubmAjN \MgU [{"iA!9# ܆(F䞩NעV PJ+,k8k>:2Ě޷Qu@]P>'{4:M.uE<ݽPK!ɹxl/ctrlProps/ctrlProp57.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uEgMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!xl/ctrlProps/ctrlProp59.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!x*txl/ctrlProps/ctrlProp60.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!JHxl/ctrlProps/ctrlProp61.xmlAn0HJ*! 580w#IseI=Hd2mZPHHfJ&&4Bcu\rT [Q@u:j-.` 8ΚL ?:Hi u3(4XwTb78q  PK! xl/ctrlProps/ctrlProp62.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!]0xl/ctrlProps/ctrlProp63.xml0{kEK! ]uEƾػBɕ2礞X$26-($C{%`x:y.cӭBb :0[irt}mgGZvXsҟm{m$P|CW״nD v*{ PK!SΙxl/ctrlProps/ctrlProp55.xmln0@Jub%L 5C9c7]䳪[{˒"iA!9#= ܇TKMLh䞩N?ESkq&GWXq}te.hG 5'}hNw:Hy  (E lm*\ xPK!xl/ctrlProps/ctrlProp54.xmln0@Jubmv TLwB [{㒓z`diA!9# \TKMLhnq\rT KQ@uZ\lq5{j QbI^u@] (4u'\ x {PK!?(xl/ctrlProps/ctrlProp53.xmln0@Jubmv* R:10p36"Ʒ9'"WӂBrB hSTډ9WM}IE)9DbȬ2N0xdT޴b7q"G%\ovS~38iT+)ihؽgS+n7PK!cxl/ctrlProps/ctrlProp6.xml,1N1E{a4JzDFT=gV6g(/;Jw]@lEiߟ_j3L&x>m^J[Y`pZߔ6P6[g%+>ZRu.d\ D-':l"#lz4EUf'r9:2Ěn۝l#;?%t/Ϡ|Ni4P\]P}(7 PK!7xl/ctrlProps/ctrlProp52.xmln0@Jubmv@Paԉ!|뜱},0彷?9L!܂ji :2Ě޷Qu@]P>'{4M.uE<ݽPK! @xl/ctrlProps/ctrlProp65.xmln0@Jubm2AA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'ݵAt@:5tӅP>'{4ۮM.uEl#/ڿ%t'Ϡ|N;h`ݭw{P\_P}(З7PK!xl/ctrlProps/ctrlProp74.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!x*txl/ctrlProps/ctrlProp75.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!JHxl/ctrlProps/ctrlProp76.xmlAn0HJ*! 580w#IseI=Hd2mZPHHfJ&&4Bcu\rT [Q@u:j-.` 8ΚL ?:Hi u3(4XwTb78q  PK! xl/ctrlProps/ctrlProp77.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!]0xl/ctrlProps/ctrlProp78.xml0{kEK! ]uEƾػBɕ2礞X$26-($C{%`x:y.cӭBb :0[irt}mgGZvXsҟm{m$P|CW״nD v*{ PK!߽xl/ctrlProps/ctrlProp79.xmln0@JubmAjN \MgU [{"iA!9# ܆(F䞩NעV PJ+,k8k>:2Ě޷Qu@]P>'{4M.uE<ݽPK! xl/ctrlProps/ctrlProp80.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uEgMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!ɹxl/ctrlProps/ctrlProp72.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uE:2Ě޷Qu@]P>'{4:M.uE<ݽPK!Agxl/ctrlProps/ctrlProp67.xmln0@wub%A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!b[xl/ctrlProps/ctrlProp68.xmlAn0HJaSgػתIsuIad`۴~TKMLh䎩N PtZ\lq5{j AbI:Hi u3(4XwTb78q  PK!xl/ctrlProps/ctrlProp69.xmln0@wub% A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!0xl/ctrlProps/ctrlProp70.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uER&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` xl/ctrlProps/ctrlProp4.xml,Aj0Ea MCW]t@FbiH8 ]xwhd,N'r>'yҸ/I41/PK! Ҹxl/ctrlProps/ctrlProp47.xmln0@wub% 5SsngUIǷ9'E"mӂBrl#/ڿ%t'Ϡ|N;h`ݭw{P\_P}(З7PK!0xl/ctrlProps/ctrlProp46.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uE^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3dnp/(!З?PK!xl/ctrlProps/ctrlProp19.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!H_éxl/ctrlProps/ctrlProp20.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!D\xl/ctrlProps/ctrlProp21.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?FnۂJ"CA>PK!SJUxl/ctrlProps/ctrlProp22.xmlAN0HZJR!UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M@%vӀK~A PK!H_éxl/ctrlProps/ctrlProp23.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!SΙxl/ctrlProps/ctrlProp24.xmln0@Jub%L 5C9c7]䳪[{˒"iA!9#= ܇TKMLh䞩N?ESkq&GWXq}te.hG 5'}hNw:Hy  (E lm*\ xPK![ixl/ctrlProps/ctrlProp17.xmlN0@w$:e%N)C[խ &\Mg [{뒓"@!9#}>^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3dnp/(!З?PK!rpxl/ctrlProps/ctrlProp16.xml1n0 @d4K]X :dpTX" Q(o~Hd2phZPHHw?TKMLhK䁩Nע6 P򡵸J+,k8k>:ԲĚ~kNw:H@W粅n d#v؁J׺"CA}PK!ɹxl/ctrlProps/ctrlProp15.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uEOw^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!yٷxl/ctrlProps/ctrlProp9.xmln0@Jubm* R:10p36"Ʒ9'"WӂBr:2Ě޵At@]P>'{4:M.uE<ݽPK!Agxl/ctrlProps/ctrlProp13.xmln0@wub%A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!d#xl/ctrlProps/ctrlProp14.xml0{kEKhxtAW]A㬱/nNɕ:Hd2mZPHHO?J&&4Bcu\rT {Q@u:i-.` 8ΚL wm{Gm$PEW״n~G n*{ PK!xl/ctrlProps/ctrlProp25.xmln0@Jubm2ATwB [{Ӓz`diA!9# \=(FN䞩NV PJ+,k8k>:2Ě޵At@]P>'{4M.uE<ݽPK!0xl/ctrlProps/ctrlProp26.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uEOw^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp38.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp39.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp40.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp41.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp42.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp43.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp44.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp37.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp36.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp35.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp28.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp29.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp30.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp31.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp32.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp33.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp34.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!́xl/ctrlProps/ctrlProp81.xmln0@Jubm2ATwB [{Ӓz`diA!9# \=(FN䞩NV PJ+,k8k>:2Ě޵At@]P>'{4:M.uE<ݽPK!.᪷xl/ctrlProps/ctrlProp82.xml108P D>gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[o7ǹ.P/PK! @xl/ctrlProps/ctrlProp83.xmln0@Jubm2AA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'ݵAt@:5tӅP>'{4ۮM.uE O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFn߁J"CAPK!l3RAxl/ctrlProps/ctrlProp130.xmln0@wub%CA11tH?8gƾ| O:w<9'LM a෿n@I4Ą^(p>}KjSb!1jZ 49¾6fC-SA;H@9϶6(kZB]@7~ doFnہJ"CA>PK!d2}xl/ctrlProps/ctrlProp131.xmlAN0HZJ"UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M@%vӀK~A PK!rxl/ctrlProps/ctrlProp132.xmlAN0HZJR!UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M߼A%vӀK~A PK!۵Oxl/ctrlProps/ctrlProp133.xmlAN0HZJ"UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M߼A%vӀK~A PK!8sxl/ctrlProps/ctrlProp134.xmlAn0HJ*!Aj'=0w#IsyI=Hd2mZPHHuJ&&4Bcu\rT  PtZ\lq5{j AbI^u@]_gP>'{4XwTb78q  PK!t7xl/ctrlProps/ctrlProp135.xmlAN0HZJ"UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M@%vӀK~A PK! xl/ctrlProps/ctrlProp136.xmlAj0A,r X ĥrpȫHk8{5'E"CӂBr-4tWP>'i6vTb7 ?PK!D\xl/ctrlProps/ctrlProp128.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?FnۂJ"CA>PK!LѰxl/ctrlProps/ctrlProp127.xmln0@JubmV Paԉ!|뜱},0彷?9L!܂ji :ԲĚ~kNw:H@W粅n d#v؁J׺"CA}PK!sxl/ctrlProps/ctrlProp119.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭw[P\_P}(7PK!kxl/ctrlProps/ctrlProp120.xmln0@wub% 5SsngUIǷ9'E"mӂBrl#/ڿ%t'Ϡ|N;h`ݭ;P\_P}(З7PK!cܸxl/ctrlProps/ctrlProp121.xmln0@wub%e) &wBIǷ9'"iA!9"= ( ΧsS-~Z,$BAkq&GWXq}te*h 5'ٶ{F?tMK oA-h`ݭw;P\_P}(Ч7PK![ixl/ctrlProps/ctrlProp122.xmlN0@w$:e%N)C[խ &\Mg [{뒓"@!9#}>^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3dnp/(!З?PK!SJUxl/ctrlProps/ctrlProp123.xmlAN0HZJR!UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M@%vӀK~A PK!CD-xl/ctrlProps/ctrlProp124.xmlN0@w$:e%N@[խ &\Mg [{뒓"@!9#}>^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3dnp/(!З?PK!z;xl/ctrlProps/ctrlProp125.xmln0@Jubm* R:10p36"Ʒ9'"WӂBrPK!nxl/ctrlProps/ctrlProp137.xmln0@Jubmv@Paԉ!|뜱},0彷?9L!܂ji PK!Kxl/ctrlProps/ctrlProp139.xmlAN0HZJR UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M߼A%vӀK~A PK!/xl/ctrlProps/ctrlProp150.xmln0@wub%]( &wBIǷ9'"iA!9"= ( ΧsS-~Z,$BAkq&GWXq}te*h 5'ٶ{F?tMK oA-h`ݭw;P\_P}(Ч7PK!<xl/ctrlProps/ctrlProp151.xmlN0@w$:e%NJ[խ &\Mg [{뒓"@!9#}>^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3dnp/(!З?PK!phxl/ctrlProps/ctrlProp152.xmln0@Jubmv@Paԉ!|뜱},0彷?9L!܂ji -4tWP>'i6vTb7 ?PK!xl/ctrlProps/ctrlProp154.xml10{8\D>gMk 43s89, l!~oAI4Ą^(p:~Kjt+jN{V]aa_Yѡ$ ֜ONg =5-.<9Hun@%vcs]~A ^>oPK!xl/ctrlProps/ctrlProp155.xml108P DE>gMk{r43s89L6M a෿~@I4Ą(p:Kjt/jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[ﶠǹ.P/PK!dlDxl/ctrlProps/ctrlProp7.xml$j0 {Oz8 짥i) pqkK6yiH:O:-x5cLdwtn}]nPyՋŋ!s7_@ OGoCg\ȥMv3cCq(͟<"ƈ Iҡ*g#+/PK!̻*xl/ctrlProps/ctrlProp149.xmlN0@w$:e%NJ[խ &\Mg [{뒓"@!9#}>^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3d雷=np/(!З?PK!nxl/ctrlProps/ctrlProp148.xmlAN0HZJ"UUJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M߼A%vӀK~A PK! zRxl/ctrlProps/ctrlProp147.xmlAN0HZJJUJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M߼A%vӀK~A PK!\xl/ctrlProps/ctrlProp140.xmlAN0HZJ UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M߼A%vӀK~A PK!?(xl/ctrlProps/ctrlProp141.xmln0@Jubmv* R:10p36"Ʒ9'"WӂBrPK!7exl/ctrlProps/ctrlProp145.xml0{kEK! ]uEƾػBɕ2礞X$26-($C{%`x:y.cӭBb :0[irt}mgGZvXsҟm{m$P|CW״nD n *{ PK!'Xxl/ctrlProps/ctrlProp146.xmlN0@w$:e%N@[խ &\Mg [{뒓"@!9#}>^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3d雷=np/(!З?PK!{%fxl/ctrlProps/ctrlProp118.xmln0@Jubm* R:10p36"Ʒ9'"WӂBrPK!xl/ctrlProps/ctrlProp117.xmln0@Jubm2ATwB [{Ӓz`diA!9# \=(FN䞩NV PJ+,k8k>:2Ě޵At@]P>'{4M.uE<ݽPK!d#xl/ctrlProps/ctrlProp116.xml0{kEKhxtAW]A㬱/nNɕ:Hd2mZPHHO?J&&4Bcu\rT {Q@u:i-.` 8ΚL wm{Gm$PEW״n~G n*{ PK!^'xl/ctrlProps/ctrlProp2.xml,1j1E0 nZqlT)RlH#K^ifDX>H~>x^r*5 ku=k|~EͰ3I4>y:z)ynEgUchm~S@.G[ohIչq5Ծ꠲ wm|NYVO|N#q;l_i,c(D?P_PK!yٷxl/ctrlProps/ctrlProp92.xmln0@Jubm* R:10p36"Ʒ9'"WӂBr:2Ě޷Qu@]P>'{4:M.uE<ݽPK!ɹxl/ctrlProps/ctrlProp95.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uEgMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!'"[lxl/ctrlProps/ctrlProp97.xmln0@JubmV Paԉ!|뜱},0彷?9L!܂ji kl=y1LᴕX%1xFPH}_+(iLh!p-S/Uu P,h!9ԲV^"b+Y^u@/6."7PzPd{NM>0[fZ?x/PK!YQA('xl/printerSettings/printerSettings5.bin?SA841]X% MŒ%Dfឰr{GI/*#E&e*ޡ)L{ ?߾sЇ6pAMH#'MUaz^Br||@RbizUC%y&B2)2hpZ? #g&<R&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` '{4XP\]P}(oPK! Ҹxl/ctrlProps/ctrlProp84.xmln0@wub% 5SsngUIǷ9'E"mӂBrl#/ڿ%t'Ϡ|N;h`ݭw{P\_P}(З7PK!Agxl/ctrlProps/ctrlProp85.xmln0@wub%A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!b[xl/ctrlProps/ctrlProp86.xmlAn0HJaSgػתIsuIad`۴~TKMLh䎩N PtZ\lq5{j AbI:Hi u3(4XwTb78q  PK!xl/ctrlProps/ctrlProp87.xmln0@wub% A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!5%xl/ctrlProps/ctrlProp88.xmln0@w$:T$hp36"7oySNE"丏t7][PR-61 sgZ8݊-$Bf+MPXkNmwzj9N<9kg NuE܅}PK!= xl/ctrlProps/ctrlProp89.xmln0@JubmV P A>uľ|V0?L!?nAI4Ą(pد>:%jt-jN?Z 49¾6fC-SA;H@96({sZBn< d/Fz*{  zPK!txl/ctrlProps/ctrlProp90.xmlAn0HZq%N+!AA\gMk\ffrRO, |4-($}ނj PxX.K>3Vl!1j0[irt}mgGZƂXsҟm;m$P@W8p ^# V? np.(.7?PK!/;Pxl/ctrlProps/ctrlProp98.xmlAn08A=q:klbF^ sqI=Hd2մnTKMLhc䎩N PJ+,k8k>:2Ěn۝l#;?%t/Ϡ|Ni4P\]P}(7 PK!xl/ctrlProps/ctrlProp99.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!/(+'xl/printerSettings/printerSettings6.binr07-x^i9pw~ܤЋj+& x 4m<ݵiL)LA P°}*z/!.2O<>:vbV0i.6o<~n~f%` XύUT,K,K,K,K`v? ﴬ\ayw(ˇuGlsϭwPK!́xl/ctrlProps/ctrlProp109.xmln0@Jubm2ATwB [{Ӓz`diA!9# \=(FN䞩NV PJ+,k8k>:2Ě޵At@]P>'{4:M.uE<ݽPK!.᪷xl/ctrlProps/ctrlProp110.xml108P D>gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[o7ǹ.P/PK! @xl/ctrlProps/ctrlProp111.xmln0@Jubm2AA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'ݵAt@:5tӅP>'{4ۮM.uEl#/ڿ%t'Ϡ|N;h`ݭw{P\_P}(З7PK!Agxl/ctrlProps/ctrlProp113.xmln0@wub%A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!b[xl/ctrlProps/ctrlProp114.xmlAn0HJaSgػתIsuIad`۴~TKMLh䎩N PtZ\lq5{j AbI:Hi u3(4XwTb78q  PK!xl/ctrlProps/ctrlProp115.xmln0@wub% A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK! xl/ctrlProps/ctrlProp108.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uEPK!|xl/ctrlProps/ctrlProp1.xml,1N1E{a4JzDFT=gV6g(/;Jw]@lEiߟ_j3L&x>m^J[Y`pZߔ6P6[g%+>ZRu.d\ D-':l"#lz4EUf'r9:2Ě޷Qu@]P>'{4:M.uE<ݽPK!ɹxl/ctrlProps/ctrlProp101.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uEgMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!xl/ctrlProps/ctrlProp103.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!x*txl/ctrlProps/ctrlProp104.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!JHxl/ctrlProps/ctrlProp105.xmlAn0HJ*! 580w#IseI=Hd2mZPHHfJ&&4Bcu\rT [Q@u:j-.` 8ΚL ?:Hi u3(4XwTb78q  PK!3uxl/ctrlProps/ctrlProp158.xmln0@wubm: @110:gƾ| O:w<9'L6M a৿~@I4Ą^(p>}Kjt/jNV]aa_Yѡ$ ֜W^g kZB]@7~ doFnۂJ"CA>PK-!n(fА[Content_Types].xmlPK-!^e _rels/.relsPK-!}6|X  xl/_rels/workbook.xml.relsPK-!Exl/workbook.xmlPK-!o Gxl/worksheets/sheet4.xmlPK-!&0h`xl/drawings/drawing7.xmlPK-!Z2xl/drawings/vmlDrawing6.vmlPK-!1y6xl/drawings/drawing6.xmlPK-! Dh9xl/drawings/vmlDrawing5.vmlPK-!A3L>xl/drawings/drawing5.xmlPK-!fDCxl/drawings/vmlDrawing4.vmlPK-!!jذxLHxl/drawings/drawing4.xmlPK-!Sxl/ctrlProps/ctrlProp206.xmlPK-!os]I>xl/ctrlProps/ctrlProp220.xmlPK-!Nᨀ?xl/ctrlProps/ctrlProp216.xmlPK-!ώ@xl/ctrlProps/ctrlProp226.xmlPK-!GAxl/ctrlProps/ctrlProp227.xmlPK-!kBxl/ctrlProps/ctrlProp228.xmlPK-!{WCxl/ctrlProps/ctrlProp229.xmlPK-!:Dxl/ctrlProps/ctrlProp230.xmlPK-!ٺ/Exl/ctrlProps/ctrlProp231.xmlPK-!pFxl/ctrlProps/ctrlProp232.xmlPK-!,ʹwGxl/ctrlProps/ctrlProp225.xmlPK-! OjHxl/ctrlProps/ctrlProp224.xmlPK-!C ]Ixl/ctrlProps/ctrlProp223.xmlPK-!V ĸOJxl/ctrlProps/ctrlProp217.xmlPK-!^'iAKxl/ctrlProps/ctrlProp218.xmlPK-!g=u3Lxl/ctrlProps/ctrlProp219.xmlPK-!+˸$Mxl/ctrlProps/ctrlProp197.xmlPK-!Nxl/ctrlProps/ctrlProp221.xmlPK-!m;Oxl/ctrlProps/ctrlProp222.xmlPK-!FȼOxl/ctrlProps/ctrlProp215.xmlPK-!;fSPxl/ctrlProps/ctrlProp191.xmlPK-!BQxl/ctrlProps/ctrlProp195.xmlPK-!QRxl/ctrlProps/ctrlProp169.xmlPK-!YQηSxl/ctrlProps/ctrlProp170.xmlPK-!Txl/ctrlProps/ctrlProp171.xmlPK-!Uxl/ctrlProps/ctrlProp172.xmlPK-!'Vxl/ctrlProps/ctrlProp173.xmlPK-!cWxl/ctrlProps/ctrlProp174.xmlPK-!;_}Xxl/ctrlProps/ctrlProp175.xmlPK-!gpYxl/ctrlProps/ctrlProp168.xmlPK-!XOaZxl/ctrlProps/ctrlProp167.xmlPK-!iGR[xl/ctrlProps/ctrlProp166.xmlPK-!>D\xl/ctrlProps/ctrlProp160.xmlPK-!Zq5]xl/ctrlProps/ctrlProp161.xmlPK-!AtW&^xl/ctrlProps/ctrlProp162.xmlPK-!I7_xl/ctrlProps/ctrlProp163.xmlPK-!q> `xl/ctrlProps/ctrlProp164.xmlPK-!a{`xl/ctrlProps/ctrlProp165.xmlPK-!KҸaxl/ctrlProps/ctrlProp176.xmlPK-!=bxl/ctrlProps/ctrlProp177.xmlPK-!q]ָcxl/ctrlProps/ctrlProp178.xmlPK-!Xظdxl/ctrlProps/ctrlProp188.xmlPK-!@exl/ctrlProps/ctrlProp189.xmlPK-!Yfxl/ctrlProps/ctrlProp190.xmlPK-!gxl/ctrlProps/ctrlProp233.xmlPK-!qhxl/ctrlProps/ctrlProp192.xmlPK-! ,:ixl/ctrlProps/ctrlProp193.xmlPK-! ~tjxl/ctrlProps/ctrlProp194.xmlPK-!Pzgkxl/ctrlProps/ctrlProp187.xmlPK-!QdܸYlxl/ctrlProps/ctrlProp186.xmlPK-!hQKmxl/ctrlProps/ctrlProp185.xmlPK-!T>nxl/ctrlProps/ctrlProp179.xmlPK-!o+/oxl/ctrlProps/ctrlProp180.xmlPK-!H_{!pxl/ctrlProps/ctrlProp181.xmlPK-!pYqxl/ctrlProps/ctrlProp182.xmlPK-!x9)rxl/ctrlProps/ctrlProp183.xmlPK-!`0mrxl/ctrlProps/ctrlProp184.xmlPK-!#Csxl/ctrlProps/ctrlProp196.xmlPK-!qtxl/ctrlProps/ctrlProp240.xmlPK-!U9޹uxl/ctrlProps/ctrlProp235.xmlPK-!? vxl/ctrlProps/ctrlProp284.xmlPK-!tvUwxl/ctrlProps/ctrlProp285.xmlPK-!ixxl/ctrlProps/ctrlProp286.xmlPK-!"عyxl/ctrlProps/ctrlProp287.xmlPK-!Dҹzxl/ctrlProps/ctrlProp288.xmlPK-!t{xl/ctrlProps/ctrlProp289.xmlPK-!Mu|xl/ctrlProps/ctrlProp290.xmlPK-!'):g}xl/ctrlProps/ctrlProp283.xmlPK-!EȥY~xl/ctrlProps/ctrlProp282.xmlPK-!M+ֹLxl/ctrlProps/ctrlProp281.xmlPK-!>4ܸ?xl/ctrlProps/ctrlProp274.xmlPK-!-1xl/ctrlProps/ctrlProp275.xmlPK-!#xl/ctrlProps/ctrlProp276.xmlPK-!\rxl/ctrlProps/ctrlProp277.xmlPK-!T xl/ctrlProps/ctrlProp278.xmlPK-!t[xl/ctrlProps/ctrlProp279.xmlPK-!l0xl/ctrlProps/ctrlProp280.xmlPK-!EBǴxl/ctrlProps/ctrlProp291.xmlPK-!W6Շxl/ctrlProps/ctrlProp292.xmlPK-!VLjxl/ctrlProps/ctrlProp293.xmlPK-!-' docProps/core.xmlPK-!.U,docProps/app.xmlPK-!QʏdocProps/custom.xmlPK-!YQA('xl/printerSettings/printerSettings1.binPK-!t?9z(customXml/_rels/item1.xml.relsPK-!\'"(customXml/_rels/item2.xml.relsPK-!{(customXml/_rels/item3.xml.relsPK-!tcustomXml/itemProps3.xmlPK-!T.customXml/item3.xmlPK-!QHb@customXml/itemProps2.xmlPK-!yٷcxl/ctrlProps/ctrlProp294.xmlPK-!YQA('Txl/printerSettings/printerSettings7.binPK-!%>کxl/calcChain.xmlPK-!b#customXml/item1.xmlPK-!OcustomXml/itemProps1.xmlPK-!C"ڬcustomXml/item2.xmlPK-!Txl/ctrlProps/ctrlProp273.xmlPK-! Axl/ctrlProps/ctrlProp272.xmlPK-!̸ٯxl/ctrlProps/ctrlProp271.xmlPK-!Xa˰xl/ctrlProps/ctrlProp245.xmlPK-!"-vxl/ctrlProps/ctrlProp246.xmlPK-!*δJxl/ctrlProps/ctrlProp247.xmlPK-!2xl/ctrlProps/ctrlProp248.xmlPK-!:u2xl/ctrlProps/ctrlProp249.xmlPK-!Wxl/ctrlProps/ctrlProp250.xmlPK-!RFzxl/ctrlProps/ctrlProp251.xmlPK-!P ]jxl/ctrlProps/ctrlProp244.xmlPK-!iй]xl/ctrlProps/ctrlProp243.xmlPK-!a^Pxl/ctrlProps/ctrlProp242.xmlPK-!mSCxl/ctrlProps/ctrlProp236.xmlPK-!YY5xl/ctrlProps/ctrlProp237.xmlPK-!A=(xl/ctrlProps/ctrlProp238.xmlPK-!I1]!xl/ctrlProps/ctrlProp239.xmlPK-!SIxl/ctrlProps/ctrlProp159.xmlPK-!y{xl/ctrlProps/ctrlProp241.xmlPK-!k3˷xl/ctrlProps/ctrlProp252.xmlPK-!,ոxl/ctrlProps/ctrlProp253.xmlPK-!uLxl/ctrlProps/ctrlProp254.xmlPK-![#7xl/ctrlProps/ctrlProp264.xmlPK-!zrxl/ctrlProps/ctrlProp265.xmlPK-!rR·xl/ctrlProps/ctrlProp266.xmlPK-!bBxl/ctrlProps/ctrlProp267.xmlPK-!Gȸxl/ctrlProps/ctrlProp268.xmlPK-!`9xl/ctrlProps/ctrlProp269.xmlPK-!(txl/ctrlProps/ctrlProp270.xmlPK-!C&sgxl/ctrlProps/ctrlProp263.xmlPK-!cYxl/ctrlProps/ctrlProp262.xmlPK-!kižKxl/ctrlProps/ctrlProp261.xmlPK-! =xl/ctrlProps/ctrlProp255.xmlPK-!P/xl/ctrlProps/ctrlProp256.xmlPK-!8n\!xl/ctrlProps/ctrlProp257.xmlPK-!0?`xl/ctrlProps/ctrlProp258.xmlPK-!sLdxl/ctrlProps/ctrlProp259.xmlPK-! Zxl/ctrlProps/ctrlProp260.xmlPK-!Yxl/ctrlProps/ctrlProp234.xmlPK-!иxl/ctrlProps/ctrlProp156.xmlPK-!51xl/ctrlProps/ctrlProp157.xmlPK-!xl/ctrlProps/ctrlProp56.xmlPK-!ɹxl/ctrlProps/ctrlProp57.xmlPK-!2hxl/ctrlProps/ctrlProp58.xmlPK-!xl/ctrlProps/ctrlProp59.xmlPK-!x*txl/ctrlProps/ctrlProp60.xmlPK-!JHqxl/ctrlProps/ctrlProp61.xmlPK-! bxl/ctrlProps/ctrlProp62.xmlPK-!]0Sxl/ctrlProps/ctrlProp63.xmlPK-!SΙDxl/ctrlProps/ctrlProp55.xmlPK-!3xl/ctrlProps/ctrlProp54.xmlPK-!?("xl/ctrlProps/ctrlProp53.xmlPK-!b[xl/ctrlProps/ctrlProp48.xmlPK-!b[xl/ctrlProps/ctrlProp49.xmlPK-!(z%'xl/printerSettings/printerSettings2.binPK-!c^xl/ctrlProps/ctrlProp6.xmlPK-!yٷXxl/ctrlProps/ctrlProp50.xmlPK-!/;PHxl/ctrlProps/ctrlProp51.xmlPK-!78xl/ctrlProps/ctrlProp52.xmlPK-!߽(xl/ctrlProps/ctrlProp64.xmlPK-! @xl/ctrlProps/ctrlProp65.xmlPK-! Ҹxl/ctrlProps/ctrlProp66.xmlPK-!xl/ctrlProps/ctrlProp74.xmlPK-!x*txl/ctrlProps/ctrlProp75.xmlPK-!JHxl/ctrlProps/ctrlProp76.xmlPK-! xl/ctrlProps/ctrlProp77.xmlPK-!]0xl/ctrlProps/ctrlProp78.xmlPK-!߽xl/ctrlProps/ctrlProp79.xmlPK-! xl/ctrlProps/ctrlProp80.xmlPK-!2hxl/ctrlProps/ctrlProp73.xmlPK-!ɹ~xl/ctrlProps/ctrlProp72.xmlPK-!nxl/ctrlProps/ctrlProp71.xmlPK-!Ag^xl/ctrlProps/ctrlProp67.xmlPK-!b[Oxl/ctrlProps/ctrlProp68.xmlPK-!@xl/ctrlProps/ctrlProp69.xmlPK-!01xl/ctrlProps/ctrlProp70.xmlPK-!YQA('!xl/printerSettings/printerSettings4.binPK-!7xl/ctrlProps/ctrlProp5.xmlPK-!K>xl/ctrlProps/ctrlProp4.xmlPK-! Ҹxl/ctrlProps/ctrlProp47.xmlPK-!0xl/ctrlProps/ctrlProp46.xmlPK-!yٷrxl/ctrlProps/ctrlProp45.xmlPK-!CD-bxl/ctrlProps/ctrlProp18.xmlPK-!Txl/ctrlProps/ctrlProp19.xmlPK-!H_éExl/ctrlProps/ctrlProp20.xmlPK-!D\6xl/ctrlProps/ctrlProp21.xmlPK-!SJU'xl/ctrlProps/ctrlProp22.xmlPK-!H_éxl/ctrlProps/ctrlProp23.xmlPK-!SΙ xl/ctrlProps/ctrlProp24.xmlPK-![ixl/ctrlProps/ctrlProp17.xmlPK-!rpxl/ctrlProps/ctrlProp16.xmlPK-!ɹxl/ctrlProps/ctrlProp15.xmlPK-!H_éxl/ctrlProps/ctrlProp8.xmlPK-!yٷxl/ctrlProps/ctrlProp9.xmlPK-!#h xl/ctrlProps/ctrlProp10.xmlPK-!  xl/ctrlProps/ctrlProp11.xmlPK-!́ xl/ctrlProps/ctrlProp12.xmlPK-!Ag xl/ctrlProps/ctrlProp13.xmlPK-!d#s xl/ctrlProps/ctrlProp14.xmlPK-!dxl/ctrlProps/ctrlProp25.xmlPK-!0Txl/ctrlProps/ctrlProp26.xmlPK-!H_éDxl/ctrlProps/ctrlProp27.xmlPK-!H_é5xl/ctrlProps/ctrlProp38.xmlPK-!H_é&xl/ctrlProps/ctrlProp39.xmlPK-!H_éxl/ctrlProps/ctrlProp40.xmlPK-!H_éxl/ctrlProps/ctrlProp41.xmlPK-!H_éxl/ctrlProps/ctrlProp42.xmlPK-!H_éxl/ctrlProps/ctrlProp43.xmlPK-!H_éxl/ctrlProps/ctrlProp44.xmlPK-!H_éxl/ctrlProps/ctrlProp37.xmlPK-!H_éxl/ctrlProps/ctrlProp36.xmlPK-!H_éxl/ctrlProps/ctrlProp35.xmlPK-!H_éxl/ctrlProps/ctrlProp28.xmlPK-!H_éxl/ctrlProps/ctrlProp29.xmlPK-!H_éxl/ctrlProps/ctrlProp30.xmlPK-!H_érxl/ctrlProps/ctrlProp31.xmlPK-!H_écxl/ctrlProps/ctrlProp32.xmlPK-!H_éTxl/ctrlProps/ctrlProp33.xmlPK-!H_éE xl/ctrlProps/ctrlProp34.xmlPK-!́6!xl/ctrlProps/ctrlProp81.xmlPK-!.᪷&"xl/ctrlProps/ctrlProp82.xmlPK-! @#xl/ctrlProps/ctrlProp83.xmlPK-!\yȸ$xl/ctrlProps/ctrlProp129.xmlPK-!l3RA$xl/ctrlProps/ctrlProp130.xmlPK-!d2}%xl/ctrlProps/ctrlProp131.xmlPK-!r&xl/ctrlProps/ctrlProp132.xmlPK-!۵O'xl/ctrlProps/ctrlProp133.xmlPK-!8s(xl/ctrlProps/ctrlProp134.xmlPK-!t7)xl/ctrlProps/ctrlProp135.xmlPK-! *xl/ctrlProps/ctrlProp136.xmlPK-!D\+xl/ctrlProps/ctrlProp128.xmlPK-!LѰ,xl/ctrlProps/ctrlProp127.xmlPK-!rp-xl/ctrlProps/ctrlProp126.xmlPK-!sq.xl/ctrlProps/ctrlProp119.xmlPK-!kc/xl/ctrlProps/ctrlProp120.xmlPK-!cܸU0xl/ctrlProps/ctrlProp121.xmlPK-![iG1xl/ctrlProps/ctrlProp122.xmlPK-!SJU:2xl/ctrlProps/ctrlProp123.xmlPK-!CD--3xl/ctrlProps/ctrlProp124.xmlPK-!z; 4xl/ctrlProps/ctrlProp125.xmlPK-!n5xl/ctrlProps/ctrlProp137.xmlPK-!~6xl/ctrlProps/ctrlProp138.xmlPK-!K6xl/ctrlProps/ctrlProp139.xmlPK-!/7xl/ctrlProps/ctrlProp150.xmlPK-!<8xl/ctrlProps/ctrlProp151.xmlPK-!ph9xl/ctrlProps/ctrlProp152.xmlPK-!:xl/ctrlProps/ctrlProp153.xmlPK-!;xl/ctrlProps/ctrlProp154.xmlPK-!<xl/ctrlProps/ctrlProp155.xmlPK-!dlD=xl/ctrlProps/ctrlProp7.xmlPK-!̻*>xl/ctrlProps/ctrlProp149.xmlPK-!n?xl/ctrlProps/ctrlProp148.xmlPK-! zR@xl/ctrlProps/ctrlProp147.xmlPK-!\Axl/ctrlProps/ctrlProp140.xmlPK-!?(Bxl/ctrlProps/ctrlProp141.xmlPK-!qCxl/ctrlProps/ctrlProp142.xmlPK-!SΙaDxl/ctrlProps/ctrlProp143.xmlPK-!?QExl/ctrlProps/ctrlProp144.xmlPK-!7eBFxl/ctrlProps/ctrlProp145.xmlPK-!'X4Gxl/ctrlProps/ctrlProp146.xmlPK-!{%f'Hxl/ctrlProps/ctrlProp118.xmlPK-!Ixl/ctrlProps/ctrlProp117.xmlPK-!d# Jxl/ctrlProps/ctrlProp116.xmlPK-!^'Jxl/ctrlProps/ctrlProp2.xmlPK-!yٷKxl/ctrlProps/ctrlProp92.xmlPK-!SΙLxl/ctrlProps/ctrlProp93.xmlPK-!Mxl/ctrlProps/ctrlProp94.xmlPK-!ɹNxl/ctrlProps/ctrlProp95.xmlPK-!2hOxl/ctrlProps/ctrlProp96.xmlPK-!'"[lPxl/ctrlProps/ctrlProp97.xmlPK-!:Qxl/ctrlProps/ctrlProp3.xmlPK-!YQA('Rxl/printerSettings/printerSettings5.binPK-!kиVxl/ctrlProps/ctrlProp91.xmlPK-! ҸWxl/ctrlProps/ctrlProp84.xmlPK-!AgWxl/ctrlProps/ctrlProp85.xmlPK-!b[Xxl/ctrlProps/ctrlProp86.xmlPK-!Yxl/ctrlProps/ctrlProp87.xmlPK-!5%Zxl/ctrlProps/ctrlProp88.xmlPK-!= [xl/ctrlProps/ctrlProp89.xmlPK-!t\xl/ctrlProps/ctrlProp90.xmlPK-!/;P]xl/ctrlProps/ctrlProp98.xmlPK-!^xl/ctrlProps/ctrlProp99.xmlPK-!/(+'{_xl/printerSettings/printerSettings6.binPK-!́bxl/ctrlProps/ctrlProp109.xmlPK-!.᪷cxl/ctrlProps/ctrlProp110.xmlPK-! @dxl/ctrlProps/ctrlProp111.xmlPK-! Ҹexl/ctrlProps/ctrlProp112.xmlPK-!Agzfxl/ctrlProps/ctrlProp113.xmlPK-!b[lgxl/ctrlProps/ctrlProp114.xmlPK-!^hxl/ctrlProps/ctrlProp115.xmlPK-! Pixl/ctrlProps/ctrlProp108.xmlPK-!]0Ajxl/ctrlProps/ctrlProp107.xmlPK-! 3kxl/ctrlProps/ctrlProp106.xmlPK-!|%lxl/ctrlProps/ctrlProp1.xmlPK-!mxl/ctrlProps/ctrlProp100.xmlPK-!ɹnxl/ctrlProps/ctrlProp101.xmlPK-!2hoxl/ctrlProps/ctrlProp102.xmlPK-!oxl/ctrlProps/ctrlProp103.xmlPK-!x*tpxl/ctrlProps/ctrlProp104.xmlPK-!JHqxl/ctrlProps/ctrlProp105.xmlPK-!3urxl/ctrlProps/ctrlProp158.xmlPK``dsSpreadsheet-ParseXLSX-0.35/t/data/bug-6.xlsx0000644000175000017500000023725014576335353017466 0ustar michamichaPK!|D7[Content_Types].xml (N0I(S?(v!.$nđmܴ]OylEŢGEɚ9cۢMΊM??Gm IT 뗳 K݈="ӚQLTے̨DZFF NC% U%wec[-&6ỉ۪TM iZ5툖SR9*P)UDŽi% ]QGvyيo;wl8yR}_[}߼,uMEjurE>1~ؽio}85)͉ٓ}X/p!u Y"u'RGx"uD'RG|"u$'RGjnttB ý]5z(yN8-nf uIE?WלݼIň.rZ9gUZ\e13mB^tq:`Qoՙ'uSg Miܾufq18쨧s9<:ׅ<0ޠn_}ޠ}`_|/>}`_/ؗK%} `_/ؗK%} `_B/!ؗpP_t07BkصZv- U"kصZ4k"/1ؗK %}`_b/1ؗxP_42:-]K%`kP5NK%`kɠmR/)ؗK %}I`_R/)ؗlP_42:-]e`2kP5NeúFrvh<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!*RFxl/_rels/workbook.xml.rels (n0Eb I@*eۦ`ᡀ<E+Sb4cq0\]FaD\2rzّ5k __ퟠeڼuc`Tfֺy P I)UǴ)UE{ϬDQJO 4cu,iڲ,v  .kmD@gĶ'zf0]f낉4fm(B͘ l{YLs"w. `b)(2xfmfl\0 `yzhM`۰]kXڵ '6wLK:>CgZ PK!іxl/workbook.xmlSn0`ޒiRv76 9;VF 6Ӟgg̓éRt|;D&s.1}InhD*) gaۼm/AcZGyFYZ`5Qq߬J'wu&qO vqcGx͛,]lN?fN]vu?)ɳ)A k/iܱy6u:,*6SϗoSa  &<) dݖnyEeiXte5Ӱ+v9 WbQx]xigD`:ؒG)J $,b au*kRG=8ye'']g9F4:pXi]I\> Fuyay' &"BW2`lQ,NS"bџ1/*~5u}g 0^Nwldλ )D}\_ ]+o#śm ">C@'q{O:i MA|ǫr;u{N`DE/r>r]'eEq }Z⬯\Cziq˰ g; o.v!^` y H:犒:B9n A͂ĻDdF}Aϔ{Q=~8<=@2[?Sp:6zi A`!Dmh&]ӵ8_y$] lP5dy ̎u1@=.%9Ӄ8(· wW-iW8tdmvۈn$"L3嶴 '8H3l8~9bf d6 N0lʖ.ܰ|g5;p칊qwbbKhV߶gP5e 5|n~%F6aH-1  d ߥ_N&rȾ9I)t؆;un0D~eэ3NP]w?Awޖ2;}5_xUa,)?fіNؗb7Zt`e@X$ t;ɹsUpՒ'%B?KsP-Fj3Ǖ`*Fʘ )eҔ;9\Վ*\f$J+ݤ&1I)̽,26p3}e"֌zC0_"xɨR&YivC!ix*rD!?G_h0k! @ g)-NT VZ5eJvɛϕ0?8L,UY0}F .da<}"]HJSI$T3"et҃FevfRT'wo,'}~ϸ 0V7x^NzB۹ZMoYp#G쎬HČkt9:u `rz6;w>9 BBuV8y<$iMvIH4H2KB%HXx:c{rugo\e)Z4ak(l#U_7w%]Ĉ Vj-xVIQ;zxh&(X\h0'Aځ-c*{;.L^ dm >[e,ocU$.g=opL/΅^h_? g'R= 5gt+r`|Ŗ`]e^ѕƖ @!9 rkf 8ݔLe2pwJ>?I5LLR,Qݙ8 ZG#gq&q #x~+X"xR&xg;2MQ Jh&k8/@ ^V ќԄe"" #Pr:4"=!C30Rة} ;5fG7$JfKb$ЌЎyd{HKciԔNɣ~vAdyĶֻ3c˭W,Apw"G؎k0Է??>1ʫ' B~R꜂ftNE;3;y5=)ߐ2RM S,#eIX PK!A3Lxl/drawings/drawing5.xml]s8wfýc8vv ę=ä "Cy|$ջcMte#O/k󟏻4*=NiNw_Y- WKX]ƊeUсdaoL 3X-X?B,( WBml 2fE딑2njliHڠY.YDs&N=$"]{2KV4fW¢q ͻ8ȶDȿIIetK:4>aװ<ڶK5#nuX3mk>n¦5_=k u^SgqO!>hS>p'WFRM`$F7P94=ܿM#ܪz4i;K{%L{qwggo`[W~4j{Uu?mT5feZx)|~BU}jxyKƱq\ ፨u[A;(+fI"V9~d&mhKU) sN8G(hC(eS$* N&C8p.8<N jBB|5g_?pDeU gԕZ\N$8= +NוSwk>D%ʂC8}p" S*w 8@%S9~rTS * N` \epN3DʂC8aWS9%ʂC8aWS9%ʂC8ણ3tj:y ʢs"#5 t:@ݔHT#!$iv5ڷKD1 !.!O4v*D%鏸uNHw3(~;rʢs&T|ҵsRXv)EO4 (D#N,:GBHSN!MgCg;>r\[ڧg7 h ߨ) R[H6Aݽq׹ d=od]ܱ{-?bB*Bq&\p&<Jhwx!_t\=:Uׇڇ:,,֒M{GMvUé OkXa$qF゗|'1Sܟx[|1 6U6 s7p4:pN!% ay&YtqHDkcd:>ˁ84Y+~> !׉9/~%kկ}"쎩e"Di^fTB́Ȏc|vwL0XR_N.Ǝ2vyXȩyxr&X\J|ftB1'^CMnt%00z*9; rE3njD5p&" 6SBS=)uLT!J>>a\'uPX@܌9=C#~vMvG̎#Dp)/xь_$BѬ\D26E}ap'^1L\HpCC9hHh\_%vUBOMSy(=ڬ&p|9p(G ﱾ)05qgU Rn c!S^Q8ޝj-Wlyfm>0n$$hz^s]K.S @x|,tǴ_rY>ǢQW4xv_c/-c @==,%d UۺTe"CA4`-吥Ed(vA`֕ED0Eg #e#dDib: B0wX1#zv#VlgQPGmi۱O= +ܑ̓.g` Zeֱi/zSב.yz?؇ e# VգYoL>L:`l^z&Vo &"06u}=z{gNX~1Ѵ.]u`_Hͫc]u`_,;oylއPK!!jذxLxl/drawings/drawing4.xml]o8WO@ɇt27~\<`&㶩VHmp5EK}ѡ7YۗDj+uX4ܿNfHZ[Ϭq߭eO⩹\;)5Ɏ5`oEI%_T']^ԂѴ1&=nVҼr2YJd샖D-' /k*/y6.f$Y2Oox& dz ku`rKIO|ÊJv\8, 3F9e7;_zjl#,{1^{Zly{1mē/Ԓ )$3>>s>5SR8+u$"aӭ?>? 'O CNEKT7;;|i~y'ox> vEܟ'v;j5lk^:Mt?}tzV6TYCPb xg_ KN &QP=,E#?0^:jc #$%x'Љ4uba!bE&j[hFGCeM)4s4hF Dԕ1M;U){hj4My}&R{UĪŞoB޼/P55ЌфBjD4G9MShNфBj)h@sv45Є疯A! D4G9MShфBj9h@{5gMuJ58A_]>9obb !(:QSpB#5PLINc*%|D#j Nhe@5Ggt"c /Q:5!҉tSc93zo=5E3شh B^o阥S#jsڻEw9NU,QStD9N[,QStXMP!s %*:QStMP6!shDM9`"6B:QtjfԈ3p V!HBI_inS#j +sT47ҩ5EWH9ouTB !|,QStnz:o(R<PK!C 2!ͅxl/drawings/vmlDrawing3.vmlo6PyH 4tlP(DCb$˵+'(Nԗ+&2i&e֪Q7z2~( [&Oe`Ke8K7d+䳺C,wz,}v%:Y?o8^>tE[ G{Ru_l/߾elެe}_wEg'#ZIʫF.2ײjAU GuoHU7n8xd)+O}*.Tz7Ju$2YWJ&uNJ5y AÏ*TaG5u>X8^A9g8FRe^C7t_0v}|3 hOL~ GV>%3˱#qgxm!"O۳Ol[fC+{U>[/yE.+8~ǻjOL>]ý.(ͅ,6n~SUw!l -χ4j}l-]:_J]- o heY$\>CÖ坺R| 61;% <ⅰD |9C#M2[37qH%o޿ b%V̌ CC`9$daE`a6F!c!d1 ,iMf\QnmXċȌ2BpcpK#BH(̮DXk,]eVa  BFBHt K|L1 $]!2D`c[Cu;rTfWZ, JB`0"[;tnJ c`@kր$rřـ>D;"Dv0O$1%pEvԑC D^;h6TȎB2 #\d 2%ܘuqZ%PDd_nڼҲ0S@Hf'@'ϗ$Dv0L5DF:XZS E:~6t\U[eG g╡HBh\hq#m]Nh/ , #f!'ux8@Z1$naG 1Dum>Nj'9p;Ji -p;B)$naG(4ttm>h|N|͇EL psi>IsA96'ć|T?nqR\~N|IsA96'ć|T?nqR\{=ݛR7 8IAq5 +3nG" #n^ }49f"OGxHq;"0\ >$}4 -,˸$ V: Ih "E{.r;.2nG*!"6B˥qŬ'#r+?PK!/*{xl/worksheets/sheet3.xmlX]sX}ߪ#^DPK3UQv^f?5Rqo 6Gi>h^ye+CבؤDž߿N\&Ί\or}m~,ʧj'e¾Z>ŕ_&eQzzS3ONz+@C:y2/! N,)<n:g q =v&YRn?[!PM屲>;蒇x?6 w2 ˉ"2Zi)T ^in+g͍Y8.] 6(Um% 5)2Q 7,cѠ3Kʲ' 1z,:! |~._ Y"Džig+p<ٔc;9Ɯ&*CMm=cvEpzrgvKW>@qtMG)kjrO~^4Y~w[? 3?SGLٽ븫5yNoVü8+/Ц5 h-nl 3KٳMb~-q|7Se: uJEn8_EFGZ+ !hkF-٧ߟ:Pl5Edcx/Ppq8R`b[bezNzDz__ܶʂ%1+۷P }`<#V,74n@1eDsG7>\DlmZ\F(m#tI|.+{+{9ܸX%ƦOUa#r[5Q̉3&ڗD"-эH~LO׈j_-9@T_$"FBx,-cV~DWDIFW&=;ZntG%lsrC$%j1ɣq+cDȐt,[/[Xơ[&WU 4m+mv!ؓn0|U5MWf3C{<}`f ^_g 0Ff~)xmEӳ>s;r' 9D8X3t 2ޥ v* `*sLKxSz9]2_No1@s2 8d1 }|siٛG_ao0 mP4ҴEۤ}fV gwjvN]{!&VLBcw>͒h P cngN"r%wi t1 \'3:s)M;wR:+w\}erxyuΒ%CIy d7T=bYKͧhZ[.;Rc\/vǽ2O!$.JNFՍ\^!xR1DU+*XԌPEg|eMDMRbCs\ .O/nȄPq 2)aUG+:2dBLN̐!:2AAt$Bёase1It0w+% o9HjDMhc۞ȸC:y%5-gLi/Efk\Ѣ;1o'\V=tmc| LF CZ^b c݃!-Noc-my!O-?Mnّ7Ʋ̉eXv^-;+)7DzkuM4;V?tJs\; ȖJ^iSeE'O:2ێ0_qr%HmJ+UmVk1ŊqO6ZHwo6ƞ cO㙟laQ*)^j,]!(&)"KI :EDKýt$G'?:)26,>R{7ҀIP !.~{a 'g S,Xoyvfޑ߸dǃFe,9d:qNpyYl뒙42-W$!a: ➼G]2OMUrF}.ߘr$}D礁< ?zoNM>V}?HQ6 CohK' 0$݂M>%[OLDQ9 5ԗ]ɬ!.pnFo}8^~IԻ½z]:R 433R*Ba*⹫bӢgkZ{W,zǞـ<c4G=i`_S_ ?\9=`RNt2$mL$Xa棥¡UMye4' IZ\钓D>hj𒯔hI}d ᩱQ)kDҕ !J`i/Ag9q'_6E$ll@LW?;cS'Mߞ  o_v)y'd2PH@4:M2&uJpwN4vR']s;\ ygC-noԾ+PK!LZ*zB#xl/worksheets/_rels/sheet8.xml.relsj0D{$S\J &U^ۢJh7!XBc01OꎙC$ ]B 4XoXund8''cH(ލa?XDŽTH<мVUmo+:w;.,}<~D r |Arł[͵myPK! >#xl/worksheets/_rels/sheet7.xml.relsĕN0EHC=v6itS!u|I&ؖm {,QR& !9#כϮ t#8EQ<E+^wKhxZ#hnoO2c麑:*\ST# y XHS 1cSU7V0%H ;vڢ," #HnTLU`(¸/>Z%b#rhе[>⻦O?6ƴ4֥˥'Ɏ&I#U g0Mz,Okï-1 9v3m^}t!%S"{3D-\H)"j $o}PK!},4*m#xl/worksheets/_rels/sheet6.xml.relsWN0#ıR!|I4"#X*j"f{hfv?&jkkrҌ$MÝ$ʔFd=noOQ!~7u瓘lB)Fʧ&Fֵ*ĭh7UiʳlLdv3Y9q2޿us.6yt9tIa%iMyDliB`I,JҶmN}DS)W~yq}I9RN $ % +I{>8 #h&9ǗCz&hCmiw'aZK= CI*z'|`IkH0À$AHשJ+IxtSS/I7Ga$AxcʵvO PK!cfy #xl/worksheets/_rels/sheet4.xml.relsWAj0{-K%r+%}eԖ+hHH9Maf5+-V}5aiFmJ[)aFTg.A{Z-^tB'1م0K_o%Ecmr Ir ɝ!I hIM" g D#fhd=\~Ztf3Nwzck@@p`.hݘ|Sl:Ś}q/}7*۝D Yh@@( (p tpt: NqS4AA$`9,,'D#Mlj 8Hғhu`j(4`#GMb TbJJQI49) أFPK!a#xl/worksheets/_rels/sheet2.xml.relsN0 HC;IWЄ]&FIޞH:u[?VV럡{װ6ηww _>xpf(u.&]|1'p0I>+Mp.UOӢ*bh[߃bN;4 k@3j?2yjE zD/e j&1|(24g7d[J3Mեp5!-SB!NfRi9nMM>k PK!s1xl/drawings/drawing3.xml[oF ?|%iI$h^ EEyQɵ-,+1c.(rgu<{Ƴw4ln Ƕ,Wqyn`b[ي'y-~a[hݹb;pȷQF"?i2tg4,EW&M-qf/fi8JDTd\D<Q&᷌~;tE)NbTM{0:L!8,2_ bt8V~ۜ4|Ec* 7yaEX\ˣsEgypfCyY@7~]Gqg˛cΦՈ0"?l1yNFi*M`|y)!\RN/ܶ-Dgwt=PNJWssƞme~'r+~9cY.f**T&ɉ,ݭ z4_&2O (E=\-JS1(4zSVs))&1s?_NHiIwl ȏ`L] d/STkq$w2uA;ʙ&M̪=1/AZ̲qhjv&-YJ mМ&h7hNhAv&j M +[@iv&DMdY=m[kvDQ&56] 6[PjbvD&ƞ'MF# fGZ]Ўؤtcl6lj}ݲ  a؄ Amz|M JH` MڑmԴī6@MMMٖ鶦@m2&ŗMhVvhf4%6&3nP7QӶi>MT7` }H(P7]fudӷ ڦkPۤXkHH;adMH(dMנI%l y> E5hP4QǶc5 G:AwT虮A=3 2AfsS3e|(e[fr&sZkN˔A&uS=(LϜ)L 2d*:\zZ\2W:齰[bcș 93Ϝǀ9`o{Y3g3`l dT8 t&GܵXVS_C=a.ozM4u} |96gI2u_^7FW &:V2,8W5 I=a=sǮx̨bs)(Z/m <hyӖKB'ioca#~AV3z>xտgPK!j{SHxl/drawings/vmlDrawing1.vmlXMk0/B.Ic;_bJaaYc+28;#nRh)@ HO7zȊW'+ƷEF(aiXR ՋdJ7~-\,xĨySc"&$-0g"ɵ"*[,J80?!qBrv?xRrFx[ ڎE")O̷\gl]mʈHķҮ0 S:8XIrȣYv\DF tD XnʷXK.8EF2X0*8ThuȊ&@k%fұݱE̬oL1urYrAp^JVlDaYO̩{}r5X%Թ0Lu\c>x:W){"{zE!H2u،omaܒ?119L2Nõm1_J5`4yT!3M`&S3XNgatpl)X$x noBo feFNaTBƮLps4KXxLī/4acM%0QoWcc g8ҹZ(4=&#3v= ks f+^g8pp1Tu\.h;ĝO ƾB-mz+Wt} SO=Ҩ=瓨gЪg%`8Z{2;] (8~^WଞOL}A '4et$\E w/ó@>@Y `@>@}@6s.Qlޝ|9f0NL3z՞2O?PK!2vեQxl/drawings/vmlDrawing2.vmlSak0>д@$M,PcCi nپQT[:c+_;)vc&O==ˋ4 j+Plƥjh`b_͑ bz3%㥦fYh Y)#`^%\4u^$rd|%&'b$S~Nw4,F?t:wPmJ"Ȅ|&"BPzS8.<6W\C-T8Y  ?`-V#u7y+WB>ɝmS N@ w8?o6ZYƾ><+*hE+lV@MF,Q-SUa_7ڪ4JHTm:XDtҤќ)/ڦS)A٦хG16K#)orҏ(pN(F}ëVA?hj rW~CoaUJ-cE3d}zx:+^PP2sL|?A&hTD@b4PK!/H(xl/sharedStrings.xmlZr8}ߪ.?:);L&$HD̼ 8ECRvO%{,VR 4F_N7/qD24ptyD20pttOQ^d.462?yam8ZgKU fifw|I1ϗRqh5o#p:o: XKi]end>Ԟ* "_Nѥ-"H/,^R,>{yLv!C"5Qf-Wl OrnZiCW3o"u&w9+ \"a"ԥأ z.2ˆ׶a>6p+sCf̐,|0U:5r -ɜavMJ mP\CKƐg0B_\gqO3wB(X_95''$ZOZyEPfQa1[RGT{ ) g_4-c CdQ"qeRUq'TjO fֶ8)39ϳG+JO˔ |%CfdWHNF =O rk6BTnR\7]_«c}X\2r9 Wfv2:h aNk칔-0(q/ `x : yZF+BtE/yfQÅWN f"3|E+#Sid p)KQ%*(L(7 tv(Bh;p)6_Gǚro4nY٣ļ5bb䞮ІYSi^J jj >{:vujTpR41 #y7u袽c^͑ UloYN23\Okͽu`Xًa?xjlDǙ2Lh,[ۄIsY[aey\ $F&{Dۇ*(Գ@Vīatbԡz.C @}5j.~_ AK,S!yfcu @\94SxװEKkϨ(>bYkM ZebU܊nGYà ,d])3X .Z T8}Fs/ 7[՜s1 D?}gx t3 u߿6E#6_~.;;HcQ܇<͍k)Pe1CQ2ħkt3ѽN6}%aw[Gz`x7@+pko t^ZI]2p[֯-*ޝΖ)T[lΔ5^r0t:2cmEGղ)2`Qm%\lHl#ƕ,Յ$ 6h4 Ҙ>"kK5fK0^wAAADeߨG3?n9eN ~&P* <jض)l벜sTXϲ繢22DDaX]dQ,5zc&&R( W5G5o(֊RuLʤ?`Ux+Ql46EZe\7"!j3;*̤}=%]&II/ `/so8C/OB<{/p, C,Ce9O9 j;IHA|NQEs1몇q.B2^GSus I״:qc6f:x2E hqkdXhټ'f6C=Ф=&{KʉA(G׽h35ub$d;in,4m|"8a8ze<4k_kCB]\{^NzKe ͗Y@Y([ո'I|](>kL}.l@O/96z"+?# hVgc-TK=dhxO@<}UΩ㪞 ,Z-`Grtn} P L$ܕˀY3m[dp'#^eyt`l˩Q5iy_tFbJxBɱL+.1;^!lB|eߚKR2g\R-6+y53&tݲN0Z q ~66 U]],CT_R}vG@5lpH9"t{ ;W z](5}FC6PhX/_$aowMJM]9Ck'@3F}p<>:ށn{5 o'zë ޶~,~Pu`b|ܴatF_-8D "ȳR}H+&֍LrlsRl&s|vX;ho(tGWjYqOl{P'@H}| yQx1 2~9}l)C¡gmgW6T՗!n6yexqG9}&YA~l}@oS>|L]씅ytu(8!J$ mVDq@= Fm!q8}zOQΜs?hj>l!Gh~Y` )9Ǻ~S^6 *x8RAQX9Eh7VvrA݉3hz`8ͣ\&:{VDy2%DE + np6GSܖt0N`4Ⓘ"A1r`Xٲ41Ĕ켜{mp=',T`MyaD{g3e[r BkSlm+%s (rq<3g } gTc=Ji;;Ajwj $&ӳ~+i+Eo v3ݩXVC.~N>dXòWܲ %.[-+܃.ۨkw 80ge;iKp~&hy:9Mt <:a Y W#erYϖ-)vغC֖xf;zjbLMYE0]fK )pHn0@f"<ʀ$PpbΘ$k"lrGI0bQ3AV6Vm(<9/cuwpdZu]Z3 6Zr l gE'~^#JMˁd[֩^uֻn.QCJC`p",AFue{sy;3r;7ڲ].4ejU14TYW@ >)/ jdPk.HR%ERChf"ߥ-*me5$Poe\I $#SH ;׾_AThPx#yߢ5uh LھaշU!7W^8,We-h&Z؄KmR=sl=U\Xe׭e_QJP [_=h S)E$;Iѵ]=zKltk zKQb1J)(ԧnT&j9'BI @[rf>K*g/;b>I/= dNizge@ !hf/썥Q98TOCyH)?Q)aR#Z}#?bM, ;2G Χk劉ӧհ7?L{[<Oi5=E|+? 4SIl|0N8iq>x?PK!bmxl/theme/theme1.xmlYOo6w tom'uرMniXS@I}úa0l+t&[HJKՇD"|#uڃC"$q۫]z>8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ_^'܉M01UJS#]flmʒgD^< dB[_WE)*k;ZxO(c5g4 h܇A:I~KBxԙ \ YWQB@^4@.hKik<ʞ6b+jΎ9#U`δuM֯DAaVB[͈f-WY؜j0[:X ~;Qㅋt >z/fʒ"Z x Zp;+e{/eP;,.&'Qk5q&pT(KLb} Sd›L17 jpaS! 35'+ZzQ TIIvt]K&⫢ #v5-|#4b3q:TA1pa*~9mm34銗bg1KB[Y&[)H V*Q Ua?SE'p>vX`3qBU( 8W0 Aw 9Kä5$ PeD)jeI2b!aC]zoPnIZ diͩdks|l2Rn6 Mf\ļ=XvYEEĢͪgY [A+M[XK52`%p7!?ڊ&aQ}6HH;8`ҤiI[-۬/0,>eE;ck;ٓ) C cc?f}p|61%M0*<ҭPK!oxl/drawings/drawing1.xmlXn0?;ZX V^6rKJ2!%y )j"bj8ސp2-9gvl(Kx6 1?Q/'ߍTVZ `r+U,K&sZy+`6$ Ń 貰\,Y JR9T]73#VɸLFWEce-D,Aˊ>/rdm9ڥ{e.yYDZ-(B<ljcZW,sh+'l^L챥 sm|5qo=l[`6qCz wm!7tu*/t'Bv;:YVF#EkUl㆗-VVCĝbHqi@O#YmJVBGf#Q _()F6 _iel/n X̃R'"@$yē>U03б 6S";|^g1`Lg1өew9F5i< ^ڮ5cQ=b;8={@VE>Ae1Go~[kGM)5ktkk+wijn(ė3B8QO-reK%WhmejI;O'ך\,O-l`W;\:+傪-[]PL.|\P rԖ)F`P-ћ U'`A0YJN倯s jR.KG[/+u?v+N&A0봃_ \Sި9$??߿PK!3axl/worksheets/sheet5.xmlXn6}/H9eX^ ]-^H*2qcŔk%svF֟_*z*e:KH$Bnf?iI"ylDN^"7>Q 4*'U jf ]5vXީb$eC ª ]Y{Y<բ::E\ͻǧS! ʪԯ=(buȎ?T ߜeI%wzp <,b@ڬ:EPl w,gJz[Bvؒ<zJqTueDU1#vAG4I),N)t7=X6㗾VSE?hj}`腬Fu/CNΓXGœҲ|O߼$a%$Ko'cۧt5߬;y` r\!`C,0"<-AAo77t?z0`w0܈cF xM a~ l: X4j9<64=hAͧ̾bq= 伷;m^|zS7Kg)Q(ِ+ET 3<12P;vD^Km=ͦkFM%6{Ħ9nf׌=xn,P5E aWhawnIP$&j'g&3~Ƚ2!hLb^kUQyݱ@h{f Q<;xxXX)alސx&a;O t,7A7u:XG.`Ѹ qwcxrи=^ q{э ~zƺ8hxw/Z`vvH;$6c}ȡ`܌udȡ`u#b悺 -=k.r.ˮ]]P^?ȡ^nء~p[yCya]y"º\P^@h}ءŞ%V,u,O]u"Jݛ딊KEΧ /ݷl|*cΕ y9uca3VvDs,̘TEzSzA;20mt2 ϕQ"y/(ڶQ+}dbY95$K E^^{'~faMљ`eL>7P\E&E:Y8_BE}Vdu턦DЃt@ex7D Olq$_NwC0도oQȗjoB<}4uS : gni  =ܝf̎SYl~*V0[^`;" wRe[$n3|H#^(= ץW# pRk gzo: ^fȈ.!eFKu'330FsR@l<@mYA*ײ Ϩҡ)T6,taw$NL&֞L:l,2M$qb2ퟚQ<P q[P:O\퍖F݁GI vO"[ۀk½>=9lEm F\Jq5?wгq!Ոk\U>qn5hxF\+Ep͗­ Rդh&qXL]NjhL5f=00׀kTpP-YZ,IZZ+Zs9ZZZZFUٲe]!ohЄ{WPd-l9[ʎ' 7'AgkYo-j7b6R13}gler䥓QHEBe!,F7qvpK!~C%\ Gnn!,Q@'ԕn^vmm@-MW,|5ǵ }1gEպ@|։**=.!n^)cVpj_~G絏&yɹ[?}N?Hw uǻDŽ~gM(T}[? cy dMTL2BD@K)?~@pfzj$nPk-%a`4Mh~ 7 #(ϸL<1 eئ+/_?!߁cm0 -/QdIlKguRw~|y<.(Jޘ^>w{QMXȲ(fYXkotEJ߬,Uiju(Iȟmߜh4y1I+&斸0\ Ebbq.7<Ĝ,Zopͅ`p/6p#$MI^̓HGRmׅysad{Ldx؄bz{ᖜбir/d}I9M|utic1%3rpr1)d0z-%VeG,T6!l0~m =+;7PK!́xl/ctrlProps/ctrlProp80.xmln0@Jubm2ATwB [{Ӓz`diA!9# \=(FN䞩NV PJ+,k8k>:2Ě޵At@]P>'{4:M.uE<ݽPK!ɹxl/ctrlProps/ctrlProp71.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uEgMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!xl/ctrlProps/ctrlProp73.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!x*txl/ctrlProps/ctrlProp74.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!JHxl/ctrlProps/ctrlProp75.xmlAn0HJ*! 580w#IseI=Hd2mZPHHfJ&&4Bcu\rT [Q@u:j-.` 8ΚL ?:Hi u3(4XwTb78q  PK! xl/ctrlProps/ctrlProp76.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!]0xl/ctrlProps/ctrlProp77.xml0{kEK! ]uEƾػBɕ2礞X$26-($C{%`x:y.cӭBb :0[irt}mgGZvXsҟm{m$P|CW״nD v*{ PK!߽xl/ctrlProps/ctrlProp78.xmln0@JubmAjN \MgU [{"iA!9# ܆(F䞩NעV PJ+,k8k>:2Ě޷Qu@]P>'{4M.uE<ݽPK! xl/ctrlProps/ctrlProp79.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uE O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!^'xl/ctrlProps/ctrlProp2.xml,1j1E0 nZqlT)RlH#K^ifDX>H~>x^r*5 ku=k|~EͰ3I4>y:z)ynEgUchm~S@.G[ohIչq5Ծ꠲ wm|NYVO|N#q;l_i,c(D?P_PK! Ҹxl/ctrlProps/ctrlProp65.xmln0@wub% 5SsngUIǷ9'E"mӂBrl#/ڿ%t'Ϡ|N;h`ݭw{P\_P}(З7PK! @xl/ctrlProps/ctrlProp64.xmln0@Jubm2AA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'ݵAt@:5tӅP>'{4ۮM.uE:2Ě޷Qu@]P>'{4M.uE<ݽPK!]0xl/ctrlProps/ctrlProp62.xml0{kEK! ]uEƾػBɕ2礞X$26-($C{%`x:y.cӭBb :0[irt}mgGZvXsҟm{m$P|CW״nD v*{ PK!Agxl/ctrlProps/ctrlProp66.xmln0@wub%A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!b[xl/ctrlProps/ctrlProp67.xmlAn0HJaSgػתIsuIad`۴~TKMLh䎩N PtZ\lq5{j AbI:Hi u3(4XwTb78q  PK!.᪷xl/ctrlProps/ctrlProp81.xml108P D>gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[o7ǹ.P/PK!0xl/ctrlProps/ctrlProp69.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uER&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` :2Ěn۝l#;?%t/Ϡ|Ni4P\]P}(7 PK!xl/ctrlProps/ctrlProp70.xmln0@JubmAjN \MgU [{"iA!9# ܆(F䞩NעV PJ+,k8k>:2Ě޷Qu@]P>'{4:M.uE<ݽPK!5%xl/ctrlProps/ctrlProp87.xmln0@w$:T$hp36"7oySNE"丏t7][PR-61 sgZ8݊-$Bf+MPXkNmwzj9N<9kg NuE܅}PK! Ҹxl/ctrlProps/ctrlProp83.xmln0@wub% 5SsngUIǷ9'E"mӂBrl#/ڿ%t'Ϡ|N;h`ݭw{P\_P}(З7PK!/;Pxl/ctrlProps/ctrlProp97.xmlAn08A=q:klbF^ sqI=Hd2մnTKMLhc䎩N PJ+,k8k>:2Ěn۝l#;?%t/Ϡ|Ni4P\]P}(7 PK!'"[lxl/ctrlProps/ctrlProp96.xmln0@JubmV Paԉ!|뜱},0彷?9L!܂ji gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!ɹxl/ctrlProps/ctrlProp94.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uE:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!YQA('xl/printerSettings/printerSettings6.bin?SA841]X% MŒ%Dfឰr{GI/*#E&e*ޡ)L{ ?߾sЇ6pAMH#'MUaz^Br||@RbizUC%y&B2)2hpZ? #g&<R&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` r@rb&цJNZB"??KYCXI (Sv,Ijš miƚmAPYV{TPA7C߿ Pf$|phxPByW&NQ}c;Nٜ r4mQṯꖲZw|Q'nfeW._Gh=յLoe0pdž"CK~~A$"{~rC΋'aBfx}ӏPK!A docProps/app.xml (Qo0';X ( w~>=4`Q na@@K)_> Di4,0x?ĚSKh\sRT羬}%7힚/,y<>m'm\-:ȳ+RZ{4@vמR&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` Bke[HZȺZNy J |_h ˛l: r9P>'y1v>9 .3m?2Bt PK!xl/ctrlProps/ctrlProp92.xml,AN0EHh-qAu+U,=&Ld[Uz{z˚ܩ(V\o6$aQI6 WUjeSm*uV%UB@rRǾԠ _?dX1dEdv&?C9[Y~I<ڶ)?P_PK!yٷxl/ctrlProps/ctrlProp91.xmln0@Jubm* R:10p36"Ʒ9'"WӂBr O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!b[xl/ctrlProps/ctrlProp85.xmlAn0HJaSgػתIsuIad`۴~TKMLh䎩N PtZ\lq5{j AbI:Hi u3(4XwTb78q  PK!xl/ctrlProps/ctrlProp86.xmln0@wub% A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK! xl/ctrlProps/ctrlProp61.xmln0@wub% R:u`H?8gƾ| O:w9'LM aAI4Ą^(p9NKjt+jNGV]aa_Yѡ$ ֜gAg 5-.xs?Fn݁J"CA>PK!= xl/ctrlProps/ctrlProp88.xmln0@JubmV P A>uľ|V0?L!?nAI4Ą(pد>:%jt-jN?Z 49¾6fC-SA;H@96({sZBn< d/Fz*{  zPK!txl/ctrlProps/ctrlProp89.xmlAn0HZq%N+!AA\gMk\ffrRO, |4-($}ނj PxX.K>3Vl!1j0[irt}mgGZƂXsҟm;m$P@W8p ^# V? np.(.7?PK!kиxl/ctrlProps/ctrlProp90.xmlAn08U T8pp56w#Us0Hd2մns J&&4D~y.T kQ@uZ\lq5{j AbINt@]:tgP>'{4XP\]P}(oPK!YQA('xl/printerSettings/printerSettings5.bin?SA841]X% MŒ%Dfឰr{GI/*#E&e*ޡ)L{ ?߾sЇ6pAMH#'MUaz^Br||@RbizUC%y&B2)2hpZ? #g&<R&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` m^J[Y`pZߔ6P6[g%+>ZRu.d\ D-':l"#lz4EUf'r9'{4ۮM.uEPK!xl/ctrlProps/ctrlProp58.xmln0@wub%eAjP wBIǷN9'"iA!9"= ߛ=( .sS-nE-騵J+,k8k>:2Ělۃ>l#ڿ%tϠ|N'h`ݭ;P\_P}(7PK!xl/ctrlProps/ctrlProp23.xmln0@Jubmv TLwB [{㒓z`diA!9# \TKMLhnq\rT KQ@uZ\lq5{j QbI^u@] (4u'\ x {PK!H_éxl/ctrlProps/ctrlProp22.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK![ixl/ctrlProps/ctrlProp21.xmlN0@w$:e%N)C[խ &\Mg [{뒓"@!9#}>^ZmbB+ \/Og%LpYH Zf+mP\ЎkN?[/|N3dnp/(!З?PK!LѰxl/ctrlProps/ctrlProp20.xmln0@JubmV Paԉ!|뜱},0彷?9L!܂ji Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!d#xl/ctrlProps/ctrlProp24.xml0{kEKhxtAW]A㬱/nNɕ:Hd2mZPHHO?J&&4Bcu\rT {Q@u:i-.` 8ΚL wm{Gm$PEW״n~G n*{ PK!xl/ctrlProps/ctrlProp25.xmln0@Jubm2ATwB [{Ӓz`diA!9# \=(FN䞩NV PJ+,k8k>:2Ě޵At@]P>'{4M.uE<ݽPK!H_éxl/ctrlProps/ctrlProp26.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp30.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp29.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp28.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp27.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!2hxl/ctrlProps/ctrlProp18.xml108P D>gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!Ko$xl/ctrlProps/ctrlProp17.xmlAN0HZJR UJ ġYc{7Z(=89_/Lvm r%hXQzy~:{.gӽBb :0[ist}mgGZvXsү]wGm$PAWuB}@7xs&M@%vӀK~A PK!cܸxl/ctrlProps/ctrlProp16.xmln0@wub%e) &wBIǷ9'"iA!9"= ( ΧsS-~Z,$BAkq&GWXq}te*h 5'ٶ{F?tMK oA-h`ݭw;P\_P}(Ч7PK!yٷxl/ctrlProps/ctrlProp8.xmln0@Jubm* R:10p36"Ʒ9'"WӂBrOw^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!9-'xl/printerSettings/printerSettings2.binR=O0} +fZHԤJHR*UqE-'] 1vh#Tb|gc<  Ыsx@.6n]mCP]i6K:c* Զp uI]Sz,"3#AGqA\h\TW#0Đ3EKŊQ^&$NII.EHi)拺hM(m~>USd8$ n3$1*lZ֝~{QzfvPK!YQA('xl/printerSettings/printerSettings3.bin?SA841]X% MŒ%Dfឰr{GI/*#E&e*ޡ)L{ ?߾sЇ6pAMH#'MUaz^Br||@RbizUC%y&B2)2hpZ? #g&<R&~=SyWS;7mxeOv)`F;Ex oh a!* C:DH40qidhj3!n>Aյ"LLu9Wנ&_( ~a7a<G@rQkt,XfܫLD5مtVB0,@ݔ9@ydjU@0e9u5=xΆ2y4UB,ZSF4I:cT:4,ʊҖtWsX]~l Mݤya;uj/ªT}y-.ʥk wRXiԟydN(rY[c47%[n&p>zsyj XLߖn X%` X=~Eꛑ{z{?L0n?wF>Kou%` X%` ]_<"i,jp5Z[(E֡d-G$]B@rw}mdPMئ˲ p~&ÙDɾE :2Ě޷Qu@]P>'{4M.uE<ݽPK! xl/ctrlProps/ctrlProp11.xmln0@JubmHA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'oNw:H]^ (G lM.uEPK!xl/ctrlProps/ctrlProp14.xmln0@JubmAjN \MgU [{"iA!9# ܆(F䞩NעV PJ+,k8k>:2Ě޷Qu@]P>'{4:M.uE<ݽPK!xl/ctrlProps/ctrlProp13.xmln0@wub% A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK! Ҹxl/ctrlProps/ctrlProp12.xmln0@wub% 5SsngUIǷ9'E"mӂBrl#/ڿ%t'Ϡ|N;h`ݭw{P\_P}(З7PK!H_éxl/ctrlProps/ctrlProp31.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp32.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp33.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!/;Pxl/ctrlProps/ctrlProp50.xmlAn08A=q:klbF^ sqI=Hd2մnTKMLhc䎩N PJ+,k8k>:2Ěn۝l#;?%t/Ϡ|Ni4P\]P}(7 PK!yٷxl/ctrlProps/ctrlProp49.xmln0@Jubm* R:10p36"Ʒ9'"WӂBr O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK!7xl/ctrlProps/ctrlProp51.xmln0@Jubmv@Paԉ!|뜱},0彷?9L!܂ji m^J[Y`pZߔ6P6[g%+>ZRu.d\ D-':l"#lz4EUf'r9gMk{r43s89L6M a_wZlbBo8W_%wLp-jN?Z 49¾6fC-SA;H@9m^g ==-.<9[[oǹ.P/PK!ɹxl/ctrlProps/ctrlProp56.xmln0@Jubm0AA"C9ng[{zbdkZPHHsJ&&4Biq\rT V PJ+,k8k>:2Ě޵At@:5tӅP>'{4ۮM.uE:2Ě޷Qu@]P>'{4:M.uE<ݽPK!SΙxl/ctrlProps/ctrlProp54.xmln0@Jub%L 5C9c7]䳪[{˒"iA!9#= ܇TKMLh䞩N?ESkq&GWXq}te.hG 5'}hNw:Hy  (E lm*\ xPK!Agxl/ctrlProps/ctrlProp47.xmln0@wub%A:0`3vcE> O:w9?, l!O9ji PzX=1^b!1jNZ 49¾6fC-SA;H@9]Qg ?~5-.?ysߑFnۃJ"CAPK! @xl/ctrlProps/ctrlProp46.xmln0@Jubm2AA"C9ng[{zbd`״~ <TKMLh䞩NEKkq&GWXq}te.hG 5'ݵAt@:5tӅP>'{4ۮM.uE:2Ě޵At@]P>'{4M.uE<ݽPK!H_éxl/ctrlProps/ctrlProp37.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp36.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp35.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp34.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp38.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp39.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp40.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!yٷxl/ctrlProps/ctrlProp44.xmln0@Jubm* R:10p36"Ʒ9'"WӂBrOw^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp42.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!H_éxl/ctrlProps/ctrlProp41.xmlAn0=N0H&nP}\ffrRO, >Ow^n@IĄ^(p<,K>1Zl!1jwZ 49¾6fC-cAK@9unVg >5ΡS@7|d/;np/(.įЇ?PK!JHxl/ctrlProps/ctrlProp60.xmlAn0HJ*! 580w#IseI=Hd2mZPHHfJ&&4Bcu\rT [Q@u:j-.` 8ΚL ?:Hi u3(4XwTb78q  PK-!|D7[Content_Types].xmlPK-!U0#L _rels/.relsPK-!*RFxl/_rels/workbook.xml.relsPK-!іa xl/workbook.xmlPK-!"γ Gp xl/worksheets/sheet4.xmlPK-!vBYxl/drawings/vmlDrawing6.vmlPK-!1yxl/drawings/drawing6.xmlPK-! D\xl/drawings/vmlDrawing5.vmlPK-!A3L#xl/drawings/drawing5.xmlPK-!_tZ D|(xl/drawings/vmlDrawing4.vmlPK-!!jذxL-xl/drawings/drawing4.xmlPK-!C 2!ͅE2xl/drawings/vmlDrawing3.vmlPK-!/*{8xl/worksheets/sheet3.xmlPK-!o dGxl/worksheets/sheet2.xmlPK-!&9# Lxl/worksheets/_rels/sheet1.xml.relsPK-!LZ*zB#pMxl/worksheets/_rels/sheet8.xml.relsPK-! >#sNxl/worksheets/_rels/sheet7.xml.relsPK-!},4*m#Oxl/worksheets/_rels/sheet6.xml.relsPK-!cfy #Qxl/worksheets/_rels/sheet4.xml.relsPK-!zy#Sxl/worksheets/_rels/sheet3.xml.relsPK-!a#Uxl/worksheets/_rels/sheet2.xml.relsPK-!s1 Wxl/drawings/drawing3.xmlPK-!o 'k]xl/worksheets/sheet1.xmlPK-!j{SHbxl/drawings/vmlDrawing1.vmlPK-!2vեQIfxl/drawings/vmlDrawing2.vmlPK-!/H(&ixl/sharedStrings.xmlPK-!-s~e, wxl/styles.xmlPK-!bm0~xl/theme/theme1.xmlPK-!oxl/drawings/drawing1.xmlPK-! ʼn5 xl/worksheets/sheet7.xmlPK-!3ayxl/worksheets/sheet5.xmlPK-!􆹱 xl/worksheets/sheet8.xmlPK-!uP7+?xl/worksheets/sheet6.xmlPK-!.9gxl/drawings/drawing2.xmlPK-!́sxl/ctrlProps/ctrlProp80.xmlPK-!ɹcxl/ctrlProps/ctrlProp71.xmlPK-!2hSxl/ctrlProps/ctrlProp72.xmlPK-!Cxl/ctrlProps/ctrlProp73.xmlPK-!x*t4xl/ctrlProps/ctrlProp74.xmlPK-!JH%xl/ctrlProps/ctrlProp75.xmlPK-! xl/ctrlProps/ctrlProp76.xmlPK-!]0xl/ctrlProps/ctrlProp77.xmlPK-!߽xl/ctrlProps/ctrlProp78.xmlPK-! xl/ctrlProps/ctrlProp79.xmlPK-!/D1ةxl/ctrlProps/ctrlProp6.xmlPK-!xl/ctrlProps/ctrlProp68.xmlPK-!^'xl/ctrlProps/ctrlProp2.xmlPK-! Ҹxl/ctrlProps/ctrlProp65.xmlPK-! @ӭxl/ctrlProps/ctrlProp64.xmlPK-!߽îxl/ctrlProps/ctrlProp63.xmlPK-!]0xl/ctrlProps/ctrlProp62.xmlPK-!Agxl/ctrlProps/ctrlProp66.xmlPK-!b[xl/ctrlProps/ctrlProp67.xmlPK-!.᪷xl/ctrlProps/ctrlProp81.xmlPK-!0vxl/ctrlProps/ctrlProp69.xmlPK-!YQA('fxl/printerSettings/printerSettings4.binPK-!/;Pxl/ctrlProps/ctrlProp3.xmlPK-!۸xl/ctrlProps/ctrlProp70.xmlPK-!5%˹xl/ctrlProps/ctrlProp87.xmlPK-! Ҹxl/ctrlProps/ctrlProp83.xmlPK-!/;Pxl/ctrlProps/ctrlProp97.xmlPK-!'"[lxl/ctrlProps/ctrlProp96.xmlPK-!2hxl/ctrlProps/ctrlProp95.xmlPK-!ɹ|xl/ctrlProps/ctrlProp94.xmlPK-!lxl/ctrlProps/ctrlProp98.xmlPK-!YQA(']xl/printerSettings/printerSettings6.binPK-!(ݵxl/calcChain.xmlPK-!1TedocProps/core.xmlPK-!A 1docProps/app.xmlPK-!YQA('Qxl/printerSettings/printerSettings1.binPK-!Vxl/ctrlProps/ctrlProp93.xmlPK-!xl/ctrlProps/ctrlProp92.xmlPK-!yٷxl/ctrlProps/ctrlProp91.xmlPK-!Agxl/ctrlProps/ctrlProp84.xmlPK-!b[xl/ctrlProps/ctrlProp85.xmlPK-!xl/ctrlProps/ctrlProp86.xmlPK-! xl/ctrlProps/ctrlProp61.xmlPK-!= xl/ctrlProps/ctrlProp88.xmlPK-!tqxl/ctrlProps/ctrlProp89.xmlPK-!kиbxl/ctrlProps/ctrlProp90.xmlPK-!YQA('Sxl/printerSettings/printerSettings5.binPK-!|xl/ctrlProps/ctrlProp1.xmlPK-! @xl/ctrlProps/ctrlProp82.xmlPK-!x*txl/ctrlProps/ctrlProp59.xmlPK-!xl/ctrlProps/ctrlProp58.xmlPK-!xl/ctrlProps/ctrlProp23.xmlPK-!H_éxl/ctrlProps/ctrlProp22.xmlPK-![ixl/ctrlProps/ctrlProp21.xmlPK-!LѰwxl/ctrlProps/ctrlProp20.xmlPK-!H_éhxl/ctrlProps/ctrlProp19.xmlPK-!d#Yxl/ctrlProps/ctrlProp24.xmlPK-!Jxl/ctrlProps/ctrlProp25.xmlPK-!H_é:xl/ctrlProps/ctrlProp26.xmlPK-!H_é+xl/ctrlProps/ctrlProp30.xmlPK-!H_éxl/ctrlProps/ctrlProp29.xmlPK-!H_é xl/ctrlProps/ctrlProp28.xmlPK-!H_éxl/ctrlProps/ctrlProp27.xmlPK-!2hxl/ctrlProps/ctrlProp18.xmlPK-!Ko$xl/ctrlProps/ctrlProp17.xmlPK-!cܸxl/ctrlProps/ctrlProp16.xmlPK-!yٷxl/ctrlProps/ctrlProp8.xmlPK-!H_éxl/ctrlProps/ctrlProp7.xmlPK-!9-'xl/printerSettings/printerSettings2.binPK-!YQA('xl/printerSettings/printerSettings3.binPK-!9\U_xl/ctrlProps/ctrlProp9.xmlPK-!߽xl/ctrlProps/ctrlProp10.xmlPK-! xl/ctrlProps/ctrlProp11.xmlPK-!z;yxl/ctrlProps/ctrlProp15.xmlPK-!ixl/ctrlProps/ctrlProp14.xmlPK-!Yxl/ctrlProps/ctrlProp13.xmlPK-! ҸJxl/ctrlProps/ctrlProp12.xmlPK-!H_é;xl/ctrlProps/ctrlProp31.xmlPK-!H_é,xl/ctrlProps/ctrlProp32.xmlPK-!H_éxl/ctrlProps/ctrlProp33.xmlPK-!/;Pxl/ctrlProps/ctrlProp50.xmlPK-!yٷxl/ctrlProps/ctrlProp49.xmlPK-!7xl/ctrlProps/ctrlProp4.xmlPK-!?(xl/ctrlProps/ctrlProp5.xmlPK-!Agxl/ctrlProps/ctrlProp48.xmlPK-!7xl/ctrlProps/ctrlProp51.xmlPK-!cxl/ctrlProps/ctrlProp52.xmlPK-!xl/ctrlProps/ctrlProp53.xmlPK-!2hxl/ctrlProps/ctrlProp57.xmlPK-!ɹxl/ctrlProps/ctrlProp56.xmlPK-!wxl/ctrlProps/ctrlProp55.xmlPK-!SΙgxl/ctrlProps/ctrlProp54.xmlPK-!AgVxl/ctrlProps/ctrlProp47.xmlPK-! @G xl/ctrlProps/ctrlProp46.xmlPK-!7 xl/ctrlProps/ctrlProp45.xmlPK-!H_é' xl/ctrlProps/ctrlProp37.xmlPK-!H_é xl/ctrlProps/ctrlProp36.xmlPK-!H_é xl/ctrlProps/ctrlProp35.xmlPK-!H_é xl/ctrlProps/ctrlProp34.xmlPK-!H_éxl/ctrlProps/ctrlProp38.xmlPK-!H_éxl/ctrlProps/ctrlProp39.xmlPK-!H_éxl/ctrlProps/ctrlProp40.xmlPK-!yٷxl/ctrlProps/ctrlProp44.xmlPK-!H_éxl/ctrlProps/ctrlProp43.xmlPK-!H_éxl/ctrlProps/ctrlProp42.xmlPK-!H_éxl/ctrlProps/ctrlProp41.xmlPK-!JHxl/ctrlProps/ctrlProp60.xmlPK (rSpreadsheet-ParseXLSX-0.35/t/data/bug-3.xlsx0000644000175000017500000001067314576335353017461 0ustar michamichaPKNqB _rels/.relsJ1}{wDdЛH}a70u}{ZI~7CfGFoZ+{kW#VJ$cʪl n0\QX^:`dd{m]_dhVFw^F9W-(F/3ODSUNl/w{N([qTulvjjhf%=ooPK٘~ PKNqBxl/sharedStrings.xml]A 0E"ަ*H.OILEooDPpއ7#ꎙC" Ԧ.Po|:.wX8q;Ə3>#OνPK'PKNqBxl/_rels/workbook.xml.relsMk0 FIc8AQ6ֵ~.[ eГH4C vV͢h%؀I/Z8Y.b;]JNɺQ/IӜS[n+Psc _{0 r3Rb+/2m=?"#ʯR6w _fz o ۭP~$E|PKOz%PKNqBxl/worksheets/sheet1.xmlVKo8 tk#F*H@qzőE"UR9{Xlqf8of>9dp%pdyq, RɨP3cGrPiAamu&+f*ɕ.ţޅ@T0iXR.õ*y*KqAP雂W&HaI΅U1L;* oGFQI^N1Chz; o=L y0ANka֜-|X]C@4r{ ILK,Լw\9vUm6VWuX`e_n7 :\B U=3]%SVoistUɕ yQdT ::質=8zQzsSC";*Mk4):>vl 'mb\o0x0 wvi55Z8Z p)/WL-4M:.UeڙXۉuLAKsn[}%%Z|X\ZĝEu]qq/1$6wi3 Lg%^VKH"¥3\QϣO693S~< HTTӥ$6^AQ(ż0r) d]\]Ƚ@t((LX=>nsRR0^9pd&_SĽMyg; Kb UbԌU F h>ѤP?T l~[F2)*_`ۥk;l(45@XۧgI [1w(S>W*E,yuY& jqF/ h.Uԇݓp!6m-r+fTP]FL$4Թbi!tn2w'[ F/ ksr@&r] N fَ b1A>l3 b1r||PjR3>(5CRs֊ww#{Uwz:==.7L4k\:+a?Ng~4W(HLLAt+RTUtd? ][&na'uDgu{ / PK)5PKNqBxl/workbook.xmlRMo0 W7H8EѢXڵgZc-hHL׏Vi'{O^]cLBYCօM<ޝ-J ~Vۆh~HeQ$aiF{`)HCDC(zpA8m[2I"z`Q:7$^ѐaȾot~-v7 -b'GV|EA,HY#ͱc@{|֒lb1\>Qt)0ZsܝdMb|S:`ݦUr>N\ͬ[ 7NrY[5J cOXF{\ET\:{;ό7c]U)" ŵ每so3Y)FG)PKPKNqB[Content_Types].xmlOK1KփgɴvLod y7 D45l+VS^ne٤^n`A֦@Ղ}G7+LtkuU]ʔ=ج~"\4QZhxУyeN !FD?h垔c &0;I{> c( wK)52%d4·ޚ'^`+#)R1D[d{H?|޼r#73rlŸM/iSTQ5ݍFv VlۏS&4b}ݟxz4" "K&9e@,JHAsN5/eTG]Sjژ6EHrRa+TT[Eqx0A3=!Ukϒt !6f QRD3& uq&صlm70rM>陱b=O{|Od]aޡO- _`= acPKEXF#xl/worksheets/_rels/sheet1.xml.relsj0 C(/kp`?ĖV{B9873Mw_u$sj]boho@I&h &pE]q"j)Au|VҀ5ʆGrVα c/bnkk&DDc4Pg%.ܖ(kU<4엶/1ΫL+ X _Ο PK WPKEXF xl/styles.xmln0 ǟ``( a)laÀf-%aHt`GYHavIOZI]قmVk [ZSXl YQ^\~Z6Z+]R6$YVnmщkLf_ _,AiH93M#>N 5qya*NKztbݲH?؛.Va>,bjn.ǬNY_PKZPKEXFxl/workbook.xmlKn @O; I[Ue;R6U 0QX qwؖl10o0s_rxǂ|,6a^K<wS‰Qǂ)5jpO;UN&Zƣ&X$gj&4YUeuv DXGpΨ0TiHdt z͝Sss dCcM^-9l`,&kNFp~['||TL8k9WeqY?5ug^:jkd7[ek,p3C^p2'"ŕ/#Ƣ?PKm<PKEXFxl/_rels/workbook.xml.relsJ0wsiWM"^>@HM6 3Oެb{ 0AyRH^L滈 Sś㍔t@"DS kZj ѕTgy[ >a +AZvl*1Z \{e;0ԘHWA{*IF#{ZlʂHnBZRX%wkPr"zwd3 Aw8+ǜH_rj?wGr ay& 9dPKO>.PKEXF>xl/worksheets/sheet1.xmlPKEXFV]3# xl/worksheets/_rels/sheet1.xml.relsPKEXF`(!xl/drawings/worksheetdrawing1.xmlPKEXF W4xl/sharedStrings.xmlPKEXFZ 5xl/styles.xmlPKEXFm<Fxl/workbook.xmlPKEXF&5xl/_rels/workbook.xml.relsPKEXFi뚲( _rels/.relsPKEXFO>. [Content_Types].xmlPK b9 Spreadsheet-ParseXLSX-0.35/t/data/hidden-row-and-column.xlsx0000644000175000017500000001645314576335353022641 0ustar michamichaPK!XVƏ`[Content_Types].xml (̔MN0H!%nJ?Kؓƪc[gJD5f|MقM KJ]u޲Jg`@_^䫃Lb(+f΃҅ZD k܈5drålLc ZA!>|Hj=+l &7ZHΪo+K-A9+kŮ!ƃm>PXdJ51yz 3ʶ}avL]ؼ9k* s-MoGN TIBpbM ގyu5NC zr\o/xvB8ޝgx_PK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!DGxl/_rels/workbook.xml.rels (j0{Ӗ"R !$} n\E3^}PY Y"[ % #1z#g],khE˖Édva0ehЛd$.N>5ѥ r[М)dO裁xMDނT+\s;ؕ/4Bc~F?+4g0(DB"xq-7PK!%Sxl/theme/theme1.xmlYOo6w tom'uرMniXS@I}úa0l+t&[HJKՇD"|#uڃC"$q۫]z>8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ K(NhwŘQ6㶷 [SYJ(p»g>X_xwu{\>k]Xy}钣M26PsFnJ'K,}䇦$Ǵ;@` >*8i"LI%\ xӕ=6u= r2f 3c (:jZ3sLs*UܚЅ ]M8kp6x"]$C<&>'eb. vJ|yXɾ8Ȯ]7R /=,.&'Qk5q&p(Kaݐ Sd›L17 jpSaS! 35'+ZzQ H )7 5)kdB|UtvaDξp|Fl&0_*3n'LE/pm&]8fIrS4d 7y` nίI R3U~cnrF:_*P}-p Tpl rۜ4LZéO !PLB]$K *++65vꦚeNƟf(MN1ߜ6&3(adE,Uz<{EUϲV)9Z[4^kd5!J?Q3qBoC~M m<.vpIYӦZY_p=al-Y}Nc͙ŋ4vjavl'S&A8|*~x1%M0g%<ҭPK!Įd xl/styles.xmlSj0BF mCa!@Ыl^hdgd;SXOO3ofAlL.`)),68J]DMR$%Jy$*:݇"!zMJ}ڤA6CYm@J XHI3[  g#9WGZ3hC̤%%qX &D67bݘeOU VE__}lKl4W =@<tPCNc7VL)yֹ /YodkYeŹg+7"ϻJzp@o볦9_Z ]Yp'mtXKy/ָX^)$Q ~Γ>LSNQPK!JK-xl/worksheets/sheet3.xmlPJ0 CMWY",m'm$YW޴eyyo^jĘ E }K} o۫{%5|cusyQ)Ӏ";TVRv@RA}f4E8"nZrV^txV?iqC$UO 3Ȧ0xLf1G⩫v;xC_8Wn$%ڃGjTD5\P2 [ma4Yt(yG/r5.yv #Ri]P<go͂^pjnZOy5۶qo)X>OMF%UL8q⮛_}XIW*:LbvRU94M:_՟Ĝ0BX_O}%/PK]GrbKNdocProps/app.xmlUT {2V{2Vux dSAn01e( bP8msH3K,"Ip7ׇ!EnKyڝ f966k!`Y2pڗ 2$JeٍD2YrpX(8G]CphFQj2n~m_WGWByFCvv\]>|ڝB{hEiH`t+~5XHF[ЯIO[:JYq2hiՂ&34ҭ-X[!tq ֪h#v)g_ |r\T\ $՗w,cQ>I&3Imo>wI-M-?L5+7Aт7aoKPlkLw5. m_4</fy:0?zPK-!XVƏ`[Content_Types].xmlPK-!U0#L k_rels/.relsPK-!DGWxl/_rels/workbook.xml.relsPK-!L#;[qxl/workbook.xmlPK-!%S xl/theme/theme1.xmlPK-!Įd xl/styles.xmlPK-!JK-xl/worksheets/sheet3.xmlPK-!JK-xl/worksheets/sheet2.xmlPK-!̎vsh"xl/worksheets/sheet1.xmlPK]GDgZ2_docProps/core.xmlUT{2Vux dPK]GrbKNHdocProps/app.xmlUT{2Vux dPK Spreadsheet-ParseXLSX-0.35/t/data/page-Setup.xlsx0000644000175000017500000002174114576335353020554 0ustar michamichaPK!ȣ4v[Content_Types].xml (Tn0W?DVCUU]-LT b4T4DÌqDl ?t4*f;+@{졗Fio{SmAg`2k? Ly&`Cwvݙ|^zv*uJw}\Y%ACB$qskMmQ6-<+ց_ݥ㸋G|g6 PK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!>xl/_rels/workbook.xml.rels (J0nӮ""Ej}Lm2㟾ۅef2k&WP%&w ޚ[= &$W4KH"xR㣔dNҨ9ɨAw(7ey/O ނhm| }Dg"$4FY.2#59鳔Y]bd @%s"ݚ0tB)[ȓPK!pxl/workbook.xmlRM0W|'gXP#Uժg1 m n^z{~oޛݠyeMU4–\s9b7%o9~odugkoqB#ċZjW*u+񭓼A7h v0lU)!VtZ08ZY8+Bm?q } F T p|M0\׾T3VY0)|p׶&W `5(Aa,ќG%{ 3^LiGI$@$SI1nc`sD < HB20Oɂ/ sP gSpp2o74azHSHX#:T~CCADS9qĎ눲:ڳS%56陲@\Ʈ殕p*d9 rrڜ9EމrD_z:^3j PK!1K3;xl/sharedStrings.xmllJ1 ;ݎ * ]iqMF2x/ d>Jfp Iy0Ьjm_/N,}W:=RY}H9EbAwk}m PK!0kxl/theme/theme1.xmlYOoE#F{oc'vGuر[hF[x=N3' G$$DA\q@@VR>MԯNDJ++2a,/$nECA6٥D-ʵ? dXiJF8,nx (MKoP(\HbWϿ})zg'8yV#x'˯?oOz3?^?O?~B,z_=yǿ~xPiL$M>7Ck9I#L nꎊ)f>\<|HL|3.ŅzI2O.&e>Ƈ8qBۙ5toG1sD1IB? }J^wi(#SKID ݠ1eBp{8yC]$f94^c>Y[XE>#{Sq c8 >;-&~ ..R(zy s^Fvԇ$*cߓqrB3' }'g7t4Kf"߇ފAV_] 2H7Hk;hIf;ZX_Fڲe}NM;SIvưõ[H5Dt(?]oQ|fNL{d׀O&kNa4%d8?L_H-Ak1h fx-jWBxlB -6j>},khxd׺rXg([x?eޓϲكkS1'|^=aѱnRvPK!bl< xl/styles.xmlVn0?7rtI!)=(蕖((vCR6ӽ:p7#[% Nӓ%\z%.4gt>H$j8.h>OW4\1wbZ2V1ZJ獔LœD1iVF#4d䩻%7Lb^Kia=&r%)5^1)6VxaŔ(v νRȲUB녉O#&[5Y.|Pz#K> enH^Z^#"\Avmtxb%2oh9F<DŠ`ZpQ V$.". I|(43-χnGK.MEz> |B(Sp){/PK!(0yxl/worksheets/sheet1.xmlTMo0 t-$N.A XlYDmy Kv%"\@i!F 4,DN%l eCEo AFtcL; Co:-4jV/Q]cqXsP0S!Rp#m $ *nPވV,)eJYp6Ċ;G^9,W"1%ˆIGĵG#[#PxzDzy(\^Nמi>}س@0LNM)ə/%}[\EI%ڰm/N)yk7؁ +V˺mI[P+ ƕ w4vRZX-(R1dسDŭ}ueIBhX·p0KmdDJcƢh8`b(t s9fO7kj얳U\I-Kp ?>^_xܹgGyXڝذ_PK!)O'xl/printerSettings/printerSettings1.binSJ@}I ћsOj !5c͖d"'ĿxOݴTYvg7ð{ R)8&' $Xo7Ԝɲc_!}׮赭Ux,ko빈,ZoQ.Q=10sfC,2uά Ӌ"Ȝ^~onݶCTݍD]7TɌq (SB)*>I4!$oz&x`95BFcAN*b o8bRMU8b2/s_zԯK驘hR2fJ OPK!B?ThdocProps/core.xml (|QO0MK߷v)i$oM{[_o7`h|lϹ_Ϲi6=2؃9#мRorZXǴ`e!GGhZd2l`OҖ:G[j[PFޡb׌;1-0{":#);JPq2p*鎵t;d ~{4M$] ?˧j(u+s)}e)+2<%̺Zx8s`V2 =kqb|.zjqQޒ|@ň܇$]cJF4|_ͷ9Ob#Q8/}7oPK!*3Җ$docProps/app.xml (Mo0  90 bH7bvgNcdWvNx%uwj\a$|!\dM(?ȈBĝv1"eS!jv-%EjԩBlS2T5xk*ϿH<1iLGχsֶtKhM *XρɠSr.Ss5Z>\yn]#TRP[~};xݡ3oi+D `/!v-qԿB|I$C8cY/A ׈g ^Ήw|9p4&4-b֎Jzj^վez)mZitɦrr)yPK-!ȣ4v[Content_Types].xmlPK-!U0#L _rels/.relsPK-!>pxl/_rels/workbook.xml.relsPK-!pxl/workbook.xmlPK-!1K3; xl/sharedStrings.xmlPK-!;m2KB# xl/worksheets/_rels/sheet1.xml.relsPK-!0k xl/theme/theme1.xmlPK-!bl< xl/styles.xmlPK-!(0yxl/worksheets/sheet1.xmlPK-!)O'xl/printerSettings/printerSettings1.binPK-!B?ThNdocProps/core.xmlPK-!*3Җ$docProps/app.xmlPK & Spreadsheet-ParseXLSX-0.35/t/data/bug-15.xlsx0000644000175000017500000003244214576335353017542 0ustar michamichaPK!sA[Content_Types].xml (Un0W?DV@8ql`X$](}7ᡶ ^%gfgǛ,hm͜6vkADHjU8 X~*<`Ļ-"'RbC0v,P*0^e35me,U6c8!YRޓHY[z_PK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK![axl/_rels/workbook.xml.rels (j0E}-IR"gS ٶ{ d4ӇM1f{}vxGG5 (&Ec*{ Hˮjnz^Ő;MIi]ٗΏBFi}{翵mY69>C,uGًjW!+-dybaZ;,^i:kK„&:%$ l!Zaa9%?%Rl%&LuZO cȾPK!Poxl/workbook.xmlRn0W?X7<@W^٦$5ԓ̘TI MBJ@e U$s:8ZAB`&Y>$P6s*lVBDנpkS1)[`ܖAbBўaeá\d𬳦z9oKQ[s!a;"YOɬ{O KŸiFH? pY# W< h/ ׭bZ)iApWx{ a3.^G0kݓ1ʧ"JJy㑧÷ݫИ_({ [XtuvfNt<_ƽJPK!3 xl/worksheets/sheet4.xml[s:;\ow0n:Yh ן- ROҗGko-ퟪD#'p}:9ϑkfN:'%iv_]A@PwSl= Z aۊ؞i)þ*jgPضh³biiI.g'ZzwvK7F ?9%7>BGKIID`y1-Ip݋kkԢC)>{΅^JOT1T?za(]]8I;2yNꇂ Jcw\.VJVx +^JV \o@X?زR"j]%J$\=<$D5D~-(˄ r;z=B2w/o}0`lBM(0*-L  B+:*(4O9W ˷N`UwP "J44Ȇ 2,TCSl â dXEk䮴aO}5_Y(VPB,tP,*(QC3>A'>->]sic&^CF ,(VP*%2R`)$_J[54ӸTܕ>)|Ґ @o,(Q6R`A )TAƏi = [K9唆9XAtwuʆil蠡il(UPxf7j7ҩip`9 9&XP!nJI44M o5ChLSD9 M3`L'^a:Eoxc^] 9ӏ=C%=}9av77`/̑\_0S0|,TBP_xhPC~aAaxμe0|3w4-aJmY9< iH& բEPK!,B#xl/worksheets/_rels/sheet4.xml.relsj0D{$;P%_J!&E^ۢJh%؄Bc0]Yc" n@!4D,|>X< ~IлKZ9fVBlaopqSFdLeRcLOhvM7ܝS 0N\8ƀ)Hτ%`9H=U˄bAGw swPK!;m2KB#xl/worksheets/_rels/sheet1.xml.rels0ECx{օ CS7"Ubۗ{ep6<f,Ժch{-A8 -Iy0Ьjm_/N,}W:=RY}H9EbAwk}m PK!2v=xl/worksheets/sheet2.xmlTM W@$NQ&=TVmFk $E0a~;r%sLbJ,U%d_?w_d:%yNOҏ`&*L򞙉ZY&2r8G=zUע䷪\ZOy,oZ1Z+k!yӛdMRk'[y5&q[( xrA38Ra42wn?4xSǯ\4FE I/(ٓEe[-&,͗Oʽ? ǧAE*(— XO@ޅ"?< wtL"Xچn'>_uR%>vޓ6 ^ql`hc(2j%7#b0^Jkw! x 21Z `ĪɃn؂sxɵR<NsA:{aۓ #<PK!Zxl/worksheets/sheet3.xmlQo0';X~_mJTMh{TM`3$xV)}h sk۠%<,Ĉ\W)s#/H#8M.)9E֔* \V[k9R% ^*]OI1M0Û%c?!ʒt+}K2"=me:` )V8Ȓ!oFyFȳ/z[$mh%ЦI1 g4%w`G-ɾQ?+eU`PR.?jZbHtdpx8R.hGEG B#- "uy8B8Vs}K-3ٵNSdcSfkDS0\L^GÐ:L]caS֖7nIq,7nxœ1xqW>[L0q0=l-[fRЫKOZZs-:2`6̇8KǓn;omI6˼gX&#0_e"&mjށ[>[Gy^z+d}hy 〴n۫7  ]eۛGY4b_wv bH<^ o<^,I q$GAy#oIH|I $KH$%!LVr NO:5'd"("qhyQĥɑx<#{$>-H$),լFY†g$lJ:Z K3#hyFH|ZI@3R" iYdr'YLf¦I8<#-H6ZG3GHZ #eȝf50e(lZC3"qiyFRhyF/ZZ=NiyF $-H$odȝf50eʾb6-HġI<#g$G'B3R hyFJ$!-#@d5)sViyF$-Hĥɐx<#9gd$)&B3R" iYdr'YL1 g$AH\Z G3#iyFHZIH3RNEV wH96Fa$HZK3!hyFr$>-I@3R iyF\2foa>!ZKd֪DIF,?Vn'6 #Ѫ>+uy33I)4INO1paTְզ>F/ Z_K4,sPK!> [Tzxl/sharedStrings.xmllN0 HC;64L8m{u[Cja阐Pc~?q|Y#J&SJ>_Zy1T+}M!J"c @R Gdw`*Hgt:UɁd0 6Wr?EȥpPyv9^Q(G f%gObh_e, qƙs,&KUёE{uRFkcC3ՁpXPo8h "+K.lJ0yN;C|6YcF.N5.Yd 3R2rwt+Y.?RO]?PK!eK xl/styles.xmlĜn6EDj; mkO{=՞deF_dHe[$"5~ |QĉCӾ蘆'녳i$bhDb^~a+_΅H BМgJ&s8E!2Ic=WlC{O"? /tœ  S'Uj2ߨ6 SB^!+0m<_9 $"}Ga[O_ne#D%}i*bSν.Fm9&kz׀xc|$Ecέ&y3;V;}T+QMS*V,Mj45,YMS*f,Mj4IP=|UJK*~up:V4urZ4BhWԭKOwexkaەTHS>EMi1/S~#_.¼D= )F&twO`~6wuCBZd޳Yse:ݯ/a &Օm&uFMFE[R"QSqn;S!x. !w6Y(j44%l.OGiz, 6zr3Ӕ рKBIf>H>elC`i]֦,ꆎ9z@=(DQ,9lbUFa,, Dm4p} sDߗX7=1_foC+uPh<#UW<*O̯qI*K-6 ?%_^bAԪ͘{+䫫#N:1ZƖ=[|YFfECVˉ]s;T2^z~ꅛa۵guTkΘޤ%׹m*"q\1u~zqhn[t^{Rrѝ[uPK!iRVxl/theme/theme1.xmlYMoE#F{oc'vGuر[HF[x=ޝfvg53NjHH q Jĥ@wfv;&%!>Ǽ3zA/DҐi;I1f<%`FdpmwM O&nRʊ a<#)p`"Z | |Z$JqloO&4$4Kl{ $JꅐfMr]*΅"g:¬1?*@ K/A|+x3'bj mo>9]N0>\52E4*֕0z^g8 TKgQ<+ uw֬5\|ڂέNlXd67 o.nwů/WZ o@1ZϹ g7 orP1Zl Eɰ)RLpyHP%M+oR(0$CA30Ĝ߫߾zz᳓?̏U}ӏPBs^|gO^|<UCnct8՜(1uO 3C\=|XLHލ9puUpF~bZ`|ũ4Y$nL5tU(CB<ݣ |=:z]2#'D7hqlP;ٻ:!G. 3C7^S!NX7}Jf"zRA#8ꍉ>}C})=9"wa7IhWCHQ[!ӥK7;4rT'~3:ЩϚ1Ѝmm`&_I8ՂwO}onjv`fLNO@)͠,aaQ3")MY _" \}@U%}aV.˒LFUԕU{DŐꦛmNW(CNޜm^S4 |l1<gW{Ow(UV^o9Z۱,^mA-r ?Q2bXoC~  d%;x 'hYY棓vR)gks:\qN-^s;kK] =]4)N2&0懭oO|twSI&aI`=DCPK!\ҍ'xl/printerSettings/printerSettings1.bin`He(bg` 00a8a G $UݙdZ' }2춫$ (L)5 ~akoxTaBNnAiGEHmSY_ ?P[UJ“ Y}pF0%w37 E`Ζi%ƿ?6 dn^xe)41WB`* H> w<IE''JXXtv=] qr<;՜ϻXLۀ$SĭB Z 7c⎡q ɇ1'Mk鮬I/N _eSFP#> a]SmC7 [Tz,xl/sharedStrings.xmlPK-!eK xl/styles.xmlPK-!iRV"xl/theme/theme1.xmlPK-!\ҍ'n)xl/printerSettings/printerSettings1.binPK-!\ҍ'@*xl/printerSettings/printerSettings2.binPK-!6K/|GV+docProps/core.xmlPK-!^q-docProps/app.xmlPKn0Spreadsheet-ParseXLSX-0.35/t/data/bug-8.xlsx0000644000175000017500000002067714576335353017473 0ustar michamichaPK!o} [Content_Types].xml (̔AN0EH!%njE%T`Iձ-[3Ih(t&Qo3JmcaMɈE`UY>fa@l>;?>`DSn8GC)0 ɬ/EONȵXFW\Z8Tl6}P-$<4qBz,Z4wʄs"Pr5klܔb ^BA(BF| @݃3{3y~jT*:I) s5Խ9zp+P#I𡀖Y7 `udp1qOr !fZ_𠞂-yuY/G{7p<;nPK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!;Yxl/_rels/workbook.xml.rels (J0nvutW] ӦlLӷ7I-,R}L2}YCl٘ZyiJZ$WWlH7=bH䜔NRb{4RYIBW^i3Mv(CvFUƂYw"胨t5z1E|l@ <0JIL01 ?AoG%0vMa]3K/ܭ 6L^|4Kk08!x|!?PK!*Ŗhxl/workbook.xmlRn0W?X$BʥT gocG!]A8QI RJ@FH-iL\ a#H]AkIiA2KM\k WF%,MIåg*Y‹) h&]-[GgJ*X޶ŝ҃(Kݷ{4OG4]E~Z"{(Ž~cÀ V$tPZja:KXuqe,;m?g䥗X v²f[Ht8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ K(NhwŘQ6㶷 [SYJ(p»g>X_xwu{\>k]Xy}钣M26PsFnJ'K,}䇦$Ǵ;@` >*8i"LI%\ xӕ=6u= r2f 3c (:jZ3sLs*UܚЅ ]M8kp6x"]$C<&>'eb. vJ|yXɾ8Ȯ]7R /=,.&'Qk5q&p(Kaݐ Sd›L17 jpSaS! 35'+ZzQ H )7 5)kdB|UtvaDξp|Fl&0_*3n'LE/pm&]8fIrS4d 7y` nίI R3U~cnrF:_*P}-p Tpl rۜ4LZéO !PLB]$K *++65vꦚeNƟf(MN1ߜ6&3(adE,Uz<{EUϲV)9Z[4^kd5!J?Q3qBoC~M m<.vpIYӦZY_p=al-Y}Nc͙ŋ4vjavl'S&A8|*~x1%M0g%<ҭPK!CZ=xl/worksheets/sheet2.xmlMO0 H(whj;! H{ֺm4.iڴ#H_'FF[4J[am[ȏ՝A /7E>;+X_ȎhXDZ:蕏p7 ^@sSo,In^i+6`wF;=xY`H8h yʸg짆ɟł T5"#'.%,ANUGxcX5|-,<>v^Q߆^qzvi"U'qjusTfcȰȠZxV  $ѭna10WWRc7ÒZIyPK!JK-xl/worksheets/sheet3.xmlPJ0 CMWY",m'm$YW޴eyyo^jĘ E }K} o۫{%5|cusyQ)Ӏ";TVRv@RA}f4E8"nZrV^txV?iqC$UO 3Ȧ0xLf1G⩫v;xC_8W);,,(&ΧlSc&DM'Y[DtLSNQPK!}xl/calcChain.xml*PK!VWa4JdocProps/app.xml (Mo0  9iQ HVavgUc$Oe:|HI[uxW"g8+{* IJY`'@v'?D2YpX(9G@pdVQJ6^ÑUP]C6:;_SHR܇`Vn)=G V([4tT쵲IƲVAsA<ꇶS&;c=mŲS(G o!)ʟ>b@(xjC8F^ )l F$\",z"zN<0#ξ[>Hioi$jTh۠In7S"O[E0(PM  M6r?<_C.Wēƪc[iiBj7{2hnmƻR U^7/%rZY@1__fqR4DAJh>Vƹ Z9NV8ʩji){^-I"{v^P!XS)bRrKs(3`c07M4ZƐk+|\|z(P6h_-[@!Pk2n}?L %ddN"m,ǞDO97*~ɸ8Oc|nEB!$};{[2PK!U0#L _rels/.rels (MO0 HݐBKwAH!T~I$ݿ'TG~q#h4\mkѲE SY9U5K#tKb>T]^<( "gLY)[:׷`:`\3%fRhVg=`_fnfk4 HΫՙUxl/_rels/workbook.xml.rels (RMK0 0wvt/"Uɴ)&!3~*]XK/oyv5+zl;obG s>,8(%"D҆4j0u2jsMY˴S쭂 )fCy I< y!+EfMyk K5=|t G)s墙UtB),fPK!~ ]xxl/worksheets/sheet1.xmlK ;⬪]E]qbj8[ecII3#J@ SHo.xm4d >>~Xݹ $h&ẻ wCӀƙX=햹/Ef(2ť!0LYJOFhA,cД훁0AD.k-%65>.;o| o"))qC$.[ `\[wa pR5M{X.e?3\ղxAPfSnd)[-;CѽAx81%3"6\94xЭ7(#u$%\xy f47|Bh* ͣ r ;H^w:D!WQngcI<,|icP}pG,羚g*Ek{SN`v G #ɑf_0J25h *1nRl+=vμ~tgy#/vʂȬ_~?o?~o~?_Or}O5H𓒿)_z_kJM'6qg|&fx'lbw|&Rua 7f!Ww##q#?gRGnqd#sYG4c IGnTݣ !Li^b#82ő9,qd#[C)U LnTݣ !Li^b#82ő9,qd#[C)U LnTݣ !Li^b#82ő9,qd#[C)U LnTݣ &}B򙶘.8r#SG81RF=`z.8r#SG81RF=`.8r#SG81RF=`63m1+]LqG82Ǒ%qdKc(0Jɍjw{@Cߥ??wI d&Afdr K__7w_:YhߋH]|ݽK}hqL 32+l)c |yhkwC37gdYAfK-M憶 KhYhcE*gL 32+lyѫ ?ݗyژxJ}h`> 2[G ͋ ?ݗyژ̸xJ}hg> 2[G k ?ݗyژ#L 32+ly%4/9v_:YhFtOIgt\L 32+l)c>xSG~/=YhF{м27@fdVR@$Jh^ϳЌy rdn 3 2 Ȭ uHNмg] A$]}O dfY@f-;ʿTvis32+ly%4oDv_:M3"ވRbkr}&Afd<7"~h/,1#H*L 32+ly%4oDv_:YhcFTCF@fdV8Jhވtϳƌȳ7"ԇ3 2 Ȭ qмC}ggoDR gdYAf(y#⇶?@{3"g i`DeO 3 2 Ȭ qrQi?B3"/ވRw@2 2[G ?ݗyژyF$Ѐ}&Afd<7"~h/,1#H*#L 32+ly%4oDv_:YhcF?#J}hf@ dfY@f-捈KG< m̈d]XJ d&Afdn}ҧwt%e^~!*GtKpLx=Jz@fdV8ʵzm6G^I>4G@ dfY@f-KG< mLx=J}h@> 2[G ?ݗyژyz$Ѐ}&Afd<#~h/ 1=rƫLHG@fdYAf(R+ʼs4G@ dfY@f-KG< mLz=J}h@> 2[G ?ݗyژyRx`@fdV8Jh?ݗyژyF$Ѐ}&Afd<7"~h/,1#H*#L 32+ly%4oDv_:YhcFTCF@fdV8Jhވtϳƌȫ7"ԇ3 2 Ȭ qмC}g3^p`De]#2 2[G-?B3"oވRw@2 2[G ?ݗyژyF$Ѐ}&Afd<7"~h/,1#H*#L 32+ly%4oDv_:YhcFTCF@fdV8Jhވtϳƌț7"ԇ3 2 Ȭ qмC}g7oDR gdYAf(y#⇶?B3"oވR0"23, ̖QBFm6fD޼I>4`D@ dfY@f-捈KG< m̈y#J}h> 2[}=YCɡ'{_>Hx/pG.:;k3> Ȭ q|;ɥYhc;T@f9ezYAf(yG⇶oɻw$Q̟SF2 2[Y {?ݔ,1GI*7 8gdYAf(>Ry{tCyژ#y$Ѐ#}&Afd<w$~h/,1GI*GL 32+ly%4Hv_:Yhc;TC@fdV8Jhޑtϳɻw$ԇ 3 2 Ȭ qм#C}g9wHR 8gdYAf(yG⇶?Bs$ޑRp$23, ̖QBOt3>ƌk`De]#2 2[G-?ǣ6fD>I d&Afd<7"~h/,1#H*/oZY3, ̖QBm6fD>I>4`D@ dfY@f-C}goDR gdYAf(y#⇶?B3"ވR0"23, ̖QBFm6fD>I>4`D@ dfY@f-捈KG< m̈|x#J}h> 2[G ?ݗyژj[_ d&AfdG-L)S&7Uz$k3 2 Ȭ qkKG<ۘ9VR@fdYAf(RGv_:Yhcz#ԇvM@fdV8Jh^tϳ7GR gdYAf(y=⇶?B#߼I>4G@ dfY@f-KG< mL|z$Ѐ}&Afd<#~h/,1=TCz@fdV8Jh^tϳ7GR gdYAf(y=⇶?B#߼I>4G@ dfY@f-KG< mL|Rx`@fdV8Jh?ݗyژH*#L 32+ly%4oDv_:h1%r['k]n$t#fZHh%1ߣVȑF ˓7$ t¸!!CB0 1>!t#1]ry$NBw8$qHfЍO]MVۓ\ B: aI!!CBbz a J!t#1!syF&ɐNBw8$qH^4'nB=" ڙ3_ٙT#&Ih!~|ڧ?wV̥agR-@H $΀;BBذ3f a~j?~fEe_׿CO!>?Ovџ>_dZ8$qH[0i -L5ЍO]M[=B8hg. ;jBbg@'!$v†5ЍOvhp\v&΀NBH  !3 $ ;k6L ᠝׺i/~\҅=κƝBbg@Hv& B7>!lؙA;siؙT I!!$vagr t†Z!3I!3;BBH  aA' ;?B8hg. ;jBbg@'!$v†5ЍOvhp\v&΀NBH  !3 $ ;k6LP:hg|0AvfZHh%-ɣ*kK;Dp\v&΀NBH  !3 $ ;ka+~j;su*%]ߐ $q'ma8-CBRڙ\3&C+vڰ3 $vtBbg@H!!lؙ\3vƏTڙ3_ƒ%]¸;BBH  aAذ3~B8؍ag9؄!3 iI!!lؙ\3v&Ǚ+nvڰ3 $vt;BBH  aAذ3~ggv7XrFJ  !3 $΀6L ;G*\̙ƒC!!$v†5agHpٙ렝95Xr!3 $΀;BBذ3f6<;QUC5ԀSB"xU!sWOGh'xxAos$&]$6Vx]5$ ok6~B8m^͙o. o: !6 $q'!lx\3ƏT렷95Bm҅Bm@'!$0$ oka ့y6gBjo tDB3 -$ЖCQǵ~c|6gFHM $ۀoBB6f6 6oN2|Z!!C8$qH[0kՄ{hpۼB0?HH!!; !7 $i,an|BjB8jU͙oDդ )Q5UBBjX †”3mP՜!Q5!Q5UBBw6TM-L/\BjU6j|0VWBz/$t#%0=-c0 T3]M۠95Bbg҅;O\?9!;B㴅+/~K~>js8:k}͙(. esn'} wD>|!CZ$k.jsC꘹WQ}͛J| 5 $:׀_bniTNj |9Z". 4LB $5yT%B?qm?IAH!!$kr l?#xeO10kޝ\~I` c-CBqH㐶0 aKy#5ЍO[jB=B8k@DAk@H!;=w #)s@޼ʛ3oQ}:!$ēOnR(ydx_?,&}'9z_$@Hw8$"ē x;y.y:gI.ϸxBz$Vtw xCg~Ϻ$}'Q<!H!HNBHNAFeЍO]M[8`t>Ι(taDN¸Bz/wHS L?R!8I0$‐;YfAjB8m>͙q. q: !7 )7y,Fz!t#BngOcv枯 8 !3$$ΐ;ALc|BLphcvL[ )3$)3$3 31;s}v&;CBB`gHH[c,f Ө Bog#ՍۙӘ|:?`AB" 3$$@~s ?Md>OD/Z1Us}3_.Xx'05$$ԐxSC{'óx%g%T<Ǽ)['6_u~&'@ېxmC{'óx%SO}}<~(nWHh&Vr3ו<4T<%|<ēO"t@H<YOS<ΊG;zߪǏēObw@H<YOS!t#ؙ렝9>gt@H!$r&;J)KVrP\kJUBwJUBzc$ƘbVjDЍT+9jU͙S%nWHh&Vr|ɣ*?kKUAUskDդ OAH!!$jr l?#xeO'0ͳ ߯lal!t#ՍtAA;s)3FJ $q'm!3 †5^L6LP/vWS#&Ih!2v&DǷ?-LA;kc"qH!!$vagr l?#xeO 0`g^J_ !!; a!!C8$i,{an|BWA;Ұ3l!3Ɲ¸6Ln|Bذ3C+vagR-@Km!3 $΀;bagagV̋ ;BBH  !3 $q'ma†#Սtμ ڙ3_"%v&][U!$vBbgX6agV[8hg^G`,BVH  3 %wқZ7ߤytz*ڗOռ 3_$Q5`%DՀV<I\JNh%hy1UBIj@H!!;i'& †#v_U͙϶=J*ݮ 4LB $Pʻu鏥9m^&_7@H@!; (6 $ okJ 6N2|Z0BqH!d41 B7>!t5!Z!6 ojBm@'!$0$iTa a ᠷymxT o: aI[H  !6y,aAƧ-lxAo6 nۀoBBHMAFe6pۼz3_}ILa?xBm@Hc116Mj ͫ6Ryt}x[!6 O3ۤP3nZX+9m^͙WxtaooۀVxJobV6Mj%kۤZpWoBBH  !6y,aU~|BF-6oW[j} tDB3 -$ЖC<|Ħ?oc.HAH#6 $DՀ6TMGlHU?ys^5Ղ-0 a!!C8$i,4 B7>m a ᠪykT U: !Q5 $DՀf6TAUsi,3t#%¸<0)jH{h歡jR-Bj@'!;FJT  !Q5y,aAP5~B8jU͙U: !Q5 $DGl^P5C-T5owm`~o[[H\ -$t#%^bB7>!t5mဝy3gBbg҅;:i !m!3y,a apμemۣ D΀9B"HL cdA*JAUs#6R'ݮ 4LB $Pg+yi_}=bAos+D<& $DۀxmBy Du>Y=ۅXh?x!g8CygI<!$B)y4ų.y;g3$xBy m]>z|3!Oz@H<!;~KTO < ܼYs@3_}L5!Bz%<+gOw؆ZeI!?vNB6O G-?[HO/~@H㴅D< ǧ-lc9l!y,t¸BBHOAx,ǏO?]ϙ0AvfZHh%-c9yTԏo\[>DpP|J_S-@!CBH !; $rr lm a XtaBBwBbq@HX T3Մp| z3_q. q: aI!!wfZ ဪT5gFH\M0@wҍBj@H,T3S t5!3vc9!3{!3y,Fx,ǏO7҆ZڙI 3;B†5 ;G-3v[HL0BX-$v䱘-l?>map|4L[H -$vq'!$v& l?>!lؙA;s-L>B]Ah"ZIh!q&kK;Dp|kؙT ;: !3 $΀6L ;GzB7_S-@ ?-CBqH㐶0 aKy#5ЍO[jB=B8hg5Lc"΀;BBw†5agHp|3g~/$v&],΀;BBw†5agHp|3g>H(\!$rD0(3 $NZ΃)T>H㦩j~Q__BuWT5ߜW#Q5 $DՀUBZIjXcC`Co Uj#Q5>UBIj@H;P5f UGꀪ6j|HTM0xc$tUBBjX6TjV[8j5TM[HT -$DՀ0 l?>!lӘZ! Hh"ZIh{@7F'jr-@T $@ՐUCBBUͣfzUv_Y pU\ C[0i !ma4fi ]MVTW5 t¸UCBBTc,aAUMcBUӘBj=BjHH!!!1?H!iL5B M0@\ $ՐƝt#! +ՃagvfϟH WBbg@H!!$vf!LL\&vf}өM;s-$v;Bz/$v^ؙ1sg;W6]l؅E '΀ZHXkabgάo:ig;c΀Bbg@H-$vΌkabgJ†94̖Zh5Bz>  9;3VGyvog֋-<4̖֒.\?HAH!!$v03c&v&xeo а36+ZXK aR ! e^8faXZfB鄰igYp;BBH  abg! άo:!lڙCbglV %ZH ΀ZHXkabg03Nv'΀ZX$Ό8άo:!lڙCP z/$vBbg@H-$vؙ03q}BؙM'M;sH͊;NR !{abg_uCLgvд3[~pY-$vBbg@H-$vfŵЬCLZؙM6!36+ZH 8I-$vBbg@H-L̘9+U vش3[~jAB/$JBo$NB#Xa\ڽY/·ش3[~FH]~;BBH  abg!LL\W&agA%<lVja:!!CjaB[p°>0̄py a;c!3$!$vΌCؙR!\ a;c!3$!OR !ؙB[C֧&vf} a;c!3$!$vBbg@H-86s03NvkɡBbg@H-$vBbgZB[C'YtBش3ج@H 8I-$vBbg@H-L̘9wgJ^ذ3Ǧ؅+j!3 ;Bj!3c-S ;¦9&vfE '΀ZH 3ĕ ;sjڙ-?fk |z%7z'rvfj0zά[xjڙ-?#$v.\?HAH!!$v03c&v&xeo а36+Z 7IBX!!CjaB[p°>0̄py aΜ;c!3$!$vΌCؙR!lؙSlAZx΀Bbg@H-$vfŵ03q}jabg7Zش3جh!3$R !03c[\&vf} aΜ;c!3$!OR !ؙB[CؙR=H76)36+;NBbg@H-$vΌCؙR!lؙSlx/$v;Bj!3c-f]3qB¦9%vfE '΀ZH 303qBذ3禝S mFBz!Wz#w!ggƪ>z禝3BbgBbg@H;3fabgJW6! ;s*`K`v$Ija:!! ! S L76936+;NBbg@H!!L̘9+†97̖wp-~73 魐R ! iIsʾ:9wK*T5a7Pݯ??/A_$' vj[uHj{ gy~؂KM<<Žg-6~-Q' 6 $TIBE~^NzMmC✛g\k"D‐BJ${h`;Bؐ83B"qg"qIz|B$8c-k>!LbTmJ jBTBp@H%$TBp@H%T! 3py aS܇o!8 $‐' !8 $faX6}lAJ]X!L¦B"n@HB"n@H-$B[Ch30OL҆yh-?=Hm8Bz!Wz#w!囱=¸/߬[д3[~FH|c AH!!$v03c&_+*^لig;c΀Bbg@H;3fabgJagvf-$v.,ZX$΀;BBؙ1s;W* ;д3[~FH]X $vBbg@HΌ?ΌCؙR!\tz6CbglV9B"H `}Jx c/Zh76t^*Uj.y_1[HB$BB$FB$q]ˮ3}7ui6̖;c $΀;BBؙ1s;WU hkh듄uHZXֲL\ZV*˛Nv636+΀>I!!$vf!U9+†mڙ-?h!3$!$vؙ03q}jabg7Zش3A/<mV6!8C  !3 $Iz&vf\ ;W6ml؅E ' !3 $Ό&v&O-LS v6R !!$vؙ03q}BV6ml؅E ' !3 $Ό8άo:ign;c⽰j!3 $΀;3ڪ{aX&vf}SigB^H蕄H蝄>Fٙ=¸{;^Ąig^x:ڬ@X!CBH  !3 $303q_+~k *Ak񛄄>IZXuHm-9a}ja ¦uR) `-BD$$rBJI/~Aq$ UsT5[~~c$.\<!oJUBJTX)S%UTɦKT͊7FjIBX$DՀU3ڪDĕ UsT5[:u|COUbj@H!$BSrY{]EJ6]mlVTJ  (6 $یJ&&OO۬o:!lz YxBm@H!!$f!LM\&f} a Z A }>I!$BSr:oS@%/<4%Ζ>lT#+ ; }8cU>%z¦9$fB"qIBH$ !8 $308q_+~ۂ9 TVUAH%$TBp@H%$B맪OհMur^x6Ρit:ZňxBYFBj夂%xWGXx6Ρit.I]6: G,1: $I*(1:c-cq}jdbt7MsH͊wIbtIBH a}3&F'OJ†94Ζ[H|c-$J*Q: $D錵8E!L|¦9$fE 'IBH$ !8c-! Do:!lJC"qlV ]>BBH$ !8c-! Do:!lJCfBbqIj!8 $!$g!U9a}Bfz/lxclfk |z%7z'rfj0z۬[xlz-?#]8BBH  !6 $306q_+61zhs>ۀJH XhsNFo~ Ϧ9^䏈YT%J' (7 $Ie8f{'adCfOUjZ$DՀDՀnqm-#YtjaSUcDՀBj@Hm-°>!LT¦9tY|$IzUBzU3ڪDĕA鄰jYpUBja}U3ڪDĕ ¦9&fBjIBXUBBHTXChrUW*˛N昨' !Q5 UBz/86sUW* Usj-?}"!=A腄^I荄Ic#^W5Ef ?TUBBHT  aj!LTM\W&MUs͊C-CBX:$uH-CBhk?H! S L76i:Z6Z 3 $I"H䌅ֶBoՄm `lSSly-hɳ"IL IIL  9^Ϸ‚s:~6)66+ۀTPm@H@!M͘@#OL¦9%fBmIBH  a}یwI[CxRmNMoϪ} ϪIBH  !6 qm&&T6[~FX !$x$xCxR!lxSla?xBm@H!06c&&T6[~Bh{!=A腄^I荄Ic#^6E3禷3Bm{! !6 $ۀ&fĕ~lB-5$fE k!!Cja:!! ! S L769|Dk񛄄$!$! 0†97U͖Bj@H-OBj@H-OBfCh3f?{BfBذ3禝3Zr!3 $΀ZH  abg!LUW*W6=Hv΀Bbg@Hm-S JagM;;cH'AZ$΀&vf\ ;W* ;snڙ-:ZL-BTB"g@H!c NK_Tmsp xJT  $+3wߟϟ)DՀַgvjkπ?_w} KVI)o BB#㍜NB#_!4p;uƕ~7oʛ-?#$.\Uyc!7vBhR! 3!LM M-ACtYځuHZx :$0̄03 ¦O (B"o@H/' j MM\&f} aSӠyBBXyca}ZHXka"o07N>!$>IPp;a}Bfz._ل)oycAJ 8IPp;! FD a"o76}j!7 yBz/T $Nm-a&&†oʛ-?PAZc?T{NIBbo0|F-LZקa5M_gZGp=IUnӶsuHy8_0SU?HvfOm~/#+ ; }/x^( z5ԦyhjF *5 $׀&&-xeo15A8am4~' aR/! ap3NfB8†yh-??Zk!XhD듄 a-u>I_gB܌Ytja<$fŃj!5 $֟QAHkgB'YtB-:  ZXuH/a}! aA鄰k_c׀ ę ak76}CklV ݈ZH| ׀5 akL_gja<4}͖?_c8 !5 $׀~MB8f׬o:kK{۷b^XAZ*IBX0Q1q&3pySkBhrr+ ; }^^ݜigM4# 3 $8D΀\Nx_2l6j^W:'MU?ۀUBjQ5 U3ֲ.%&T汩jT%.\!uR'듄0蛿aI%LTS qSvVB"HYB"HYBz^N*{yJ._[4c OGOUmIJ  (6 $W`m76cmlV $$ۀoBBhkqS56q._لmoc!6$!Og:$uHoی8amLmنxlC 8I듄 !6c-ap9Bx8M6cmlVxpZH  !6 ! .GogBȽm.y1["$gz!Wz#we:3}7u-<%?#qAJBB !7$$0|d}BhN{t3ğBJL ԐJL-Hݿs)UImN7=osϕf\XT>IކTImHH4*M>ަTɞ9݄! 3MO\s k7FjHH!!!0! ZF)n:jN7QՌYBjIBT !P5$$Q\gaT5JBjN7=Us-eZT !P5$$@ՐqҨjA!W5g@Ռ 3@ՐSjkqI'+6MiO՜nA T 9I-BjHH-:sҨj U?iO-!=W'+ ; }\ײoXa\gү⦾񇇧-au? &' 15 $Ԁ،64|ŦxϦ?qΕ]~c!oJqB$7c-*Wɰ> 3Ury aStYTDՀ'DՀ:1s0Q5N6Q56+UNR !!$0Q5c&&T-lۦ󃔨x' !Q5 $DՀ&fDĕ M-lDجh!Q5$!$DՌCR!lۦs ' !Q5 $DՀ&f e^M6Um 8CT  Q5 3DՀ>U3>&&OU鄰jnUcAJT 8I-$Bj@H-LT͘&&T҆k-?=HmFB'z!Wz#w/>W2֋-k-?#$ߪ $ՀWBB|f !LU[JxP ! aR Zc a}76]bglV $v$IBH  a}&vfĕ ¦K ΀R !!L̘9+†kڙ-?;c΀$!$v03c&v&TvigOva>I-$vΌCؙR!lؙ3Bbg!3$>I!!L̘9+ivf ΀bgZ'ibg7>4]bglV|!v)3 ;Bjabg̵03qjavfO-!=@腄^I荄Ic#^3Evf RBbg@H!!L̘9+*^ل[ 4!͊֒C-CBX:$uH-CBhkٿC֧.o:!lڙCbglV $v$΀' !3c-!LL\6̡ig %]X6!36+>;Nbg@HRbg@H-L̘&v&T-lؙcl6[#+ ; }3cU{q}kvfcl!3vA BBH  !3 $303q_+~k9tY¥ov aR ! e^8faXZfB鄰igYp;BBH  !LL\ avfRbgAJ 8I-OBbg@H;3f+†96̖;c' !3 )3c-fbĕ avf}6魐A"g@HTKHO#[azN<T5[~$Q5vaQIjIJT  (Q5c-ehUd& Usl-?#$.,UNBj@HkqM8A˨YtxT5DجxJT 8IO!}!XMT͘9+U T5[~jAB/$JBo$NB#TXa\ڽY/·T5[~FHT]~UBBHT  aj!LTM\W&NjN+0̄py aS՜Uc!Q5$!$DՌC'YtBT5Bj@H-$Bj@H-ODՌCRjNMUBj⽐pUBBHTX{qUW* Usj-?#$_ ՀBjZBҌC|&TvԴ3[6?w@_#'a{/0!_!aCz^BA~~ߡ!o}7Ʀ9 q-%Zx15 $TԀPSc=w[m ռ`s&MosBadzOիOR!UhR.'.o:69|SdAJ8I듄(BtZ\ mUaX6$ι)qBbq¢–>I-$I6smZfB6Mo'6[O BB$FB$1BXa\o֋3Bju AH!!$0͘9ɗoJW6!lڙجha-9:$uH-CBX:${9a}ja ¦O ΀Bbg@H;3fabgJagvf_>مŃpZH Ό&v&O- Fvig|.,;NBbg@Hkq;'Ytz6} O'Zr轰AJ AZ$Ό8°Ragvf-$v.,ZH 8I-$vؙЬ{/LL\6}la/^H ΀ZX$Ό8S ; mڙ z9Bz9B*!3 $I@z cm~ئ V%桩jTIAB/$JBo$NB#TXyvj֋|h-?#$.\1UBBHT  aj!LTM\W&NWx:٬ham<:$uH-CBX:$9a}ja ¦yHT DՀBj@HU3fajJjfRjAJT 8I-$BjZ\ Uק&f}өMUDՀDՀUBBHTXC>!LT¦yHT͊)Q5$=H!=H!=Hm-aj0Q5N!R !R kqU'az/l{!Q5va^XUBj!Q5 nqU'YtjaS  9;3VGyvog֋-|lڙ-?#$v.\?HAH!!$v03c&v&xeo а3A%!Lgg.yt̖I虄^H蕄H蝄>k!v-L̾N{v|Әk"uH!!!v0ڙ!v&Y._ل[p;s *Ak񛄄>IZXuHm-6s0M'=;svf̊;CNB`gHH!!!v:sIV*Μozv撟 8ΐZ \ZL>0ڙS {v|̘-v' !3$$\F;O)n:!ٙM3cV v$ΐΐ\gALR=HlBس3hgƬ@ 9IB`gHH-vhg7&ڙ1+&Dΐ;CBBXF;sF;T-\tBس3hgƬ@ 9I-OB`gHHŵ0ڙd}ja3M=BRυ[~Dj5Bz>  ;s[y;StBش3Yp;BBH  abg!LL\W&ag?;p.3l.!!o!!CjaB[A:faXZfB鄰ign;c΀Bbg@H;3fabgJagnvf-$v.,ZH 8I-$vBbgZ\ ;ק&vf}өM;s-$v;Bja};3&v&O;鄰ign;c!3$!$v҃43c+Ճagnvf_>ۅŃ|w)3 ;3Zؙ>03N-lڙجh!3$>I!!$vf!U&v&T-lؙۦs k;BBH AZ$Ό8S ;o]l -3+ ; }3cU}^ۙ"&M;s' !3 $΀&vfĕ~lBv. P ! aR Z1s0M'M;s' !3 $΀&vfĕ a5̖ WBbg@H-$vBbgZ\ ;ק&vf}өM;s-$v;Bj!3 Z abg76]bglV $v$΀;BBؙ1sĕAڰ3wM;)3va %v)3 )3c-S ;¦K͊;NR !>Ikq;'aja5̖[H]X>I!!$v 5&v&O;oigf^H蕄H蝄>Fٙ{a\ڽY/bBش3ج@H 8I!!$v03c&v&xeo а36+.} aR ! e 30O- 3!\tBش3ج@H 8I!!$v03c&v&Tvд3[~~/$v.\qV !R kq-LL\ZؙM6!36+ZH 8I-$vBbg@H-L̘ abg76!36+;NBbg@H!!L̘9+ՃagM;)3va %v)3 )3c-Aؙ>03N-lڙCbglVpZH ΀Zhkq;'YtBش3C3 3΀ZX$΀&vf܃4O;Gxlڙ-?=Hmn!=A腄^I荄Ic#^3ELv' !3 $΀&vfĕ~lBvTfZruHZXuHm-1s0M'M;sL ΀Bbg@H;3fabgJagM;BbggR !ؙYtja;c΀Bbg@H-$vΌkabgJ+6136+;NBbg@H!!L̘9+†96̖؅Ńp΀Όibg MS v-$v;Bj!3 &vf\ 03Nvk3΀ZH IBؙ1s;Wig !=A腄^I荄Ic#^3ELv' !3 $΀&vfĕ~lBv4ھt??ۻ__BIH%E!`R ^Byg?9|y| Ϧ9%fE%' (Q5 $DՀ&f\%UW* Usj-?1Uc!!oNUB$Q5c-0! ZF%LTS 攨OٹƲHp+Wz3ƕ),#O36kZHT 8I!R U㳀P5yj@<U͑_[}!!$B, ,TM^TP!Q5`sUNEJT "%.B"-TE:T5υYsUNR !R UB䕪_ BجAHT 8IBj@H-$Zh  UW*U2T5G~HmGBo/ NB$IB_$j|U~ު"b _ȯ{ߋ=UBBHT  aj|&e ? 0P5/NY^y}HZ؇}Hm-´>0̈́pμvf BbgIBH  !3 $Y@XؙR!ؙ9EJ=\iIj!3 ;k -,&O-,K v楰36kZH 8I-$vBbg@H-,B ;W؃M Bbg@H ;㳀3yB83/C;sW؃ BbgIH!]ZEZؙ>]ٿtHv楰36k.RbgIj!3 ;Bjaag|ZXؙRp`g^vȯ-{!3 $΀'ZB ;ק&c#;sڙ# پ B$AB$EB vWu¼볷vfxvȯBBbg@H!!,6lAvT͚C-CB؇>$}H-CBhkH}i&ۗ.vT5' !3 $΀vgaagJp`gNC;s׋{H'΀ZH쌯%3y}jaag/]Z83جi!3$R !3> -,L^Z839k ;NR , ,L^ihg{AH 8I!]ZEZؙ>]ٿtHvT5)3$]΀ZH YhaagJ9 ̑_[H=ش?I!!$v Khaag_[xڙ# پ B$AB$EB vWu¼볷vfΜ^x}Y7!B؇Bbg@H ;㳀3y/[i9' ?IZ؇}Hm-´>0̈́pΜ ;c΀Bbg@H ;㳀3yB83硝9뷐{puj!3 ;k -,L^ZXؙK̹36kZH 8I!R ;䕪;sڙ#{i!3$R 3>  ;W*;sڙ#"$vl;NBbg@H񵄋3y}H ;r̹36k.RbgIH!]΀ZXv&T-ؙ؃M 'IBH  aag|&vf-z'$/P3[y}?go~ ¡vf BbgIBH  !3 $Y@Xؙ-4\Jx}Yp8I>$}H-CBhk´>0̈́p\ ;c!3$!$v, ,L^ehg-$vs$_Khaag_phg.YBbgIBH  !3 vg+U v23G~m!3`BbgI;Bj!3B31aagJp`g.C;sW؃ BbgIBH  !33y}H ;r̥36k.RbgIH!]΀.,3yj\vȯ-$vlZH 8I-$v$!, }m! ; }' }u-7uvXO1m^ ٙ]3>k;CNB`gHH!!!v: )V*_ ΜJxYpr'}HZ؇Zh0O-L3!ܾtA83lg| v$ΐ;CBBuf;ST9̿-vqַ?I!!!v Kha3lg.-ٙ]3>kZ 9I!!!v0ۙ,0ۙbj!3_[?شrΐ\ZL>0!vt73+B`g!3$!vؙZlg a3KtfgNwH!'"vt;CBHELRۙ˯-vlZ 9I-vB`gk -4f;STvFEG/mo!@蝄>H蓄HC;s"nvyiHvȯ{ܷBbg@H ;㳀3y/[iW[p!Cja>!!CjaB[E곀0O-L3!ܾtA83Ys;NBbg@H!!, ̑_[H=\΀$!$v3> Q ;¡/͚;NR !!$v3>  ;W؃M '΀Z·3y}jaag/]Z83I%lִ 3 $΀;k  ;'ٿtA83Yp.Rbg@H)3 3> iagJu"%vl.RbgIj!3 ;k -,L^Z- } }{(_m ~ڙ"E03G~EH=o! !3 $΀vgaagJ_ ;TfM v$Ija>!!^> 4KC;P5' !3 $΀vgaagJp`gvȯ)3`s;NR !?I ;㳀3yB}¡y(͚;NR !, ,L^؃M '΀ZH쌯%| ;קoaag/]Z83YBbgIja;BBH쌯% ,L^vf<vf BbgIBH "%vtvg"-L^.ҁyڙ#^؃EJ 8I-$vBbg|-S ;il- } }{(_m ~ڙ"C;f ބaBbg@H!!,6lAv1!$$IB؇>$}H-CBhkH}i&ۗ.v汰36kZH 8I!!$v3>  ;W*;83G~;c9BBؿN-$vBbg|-fb <̑_C)3 $΀ZH Y@XؙR!ؙǡ9+Bbg΀Bbg@H-$vZXؙ>} ;-ڙج;NR !?I_ ڙجAH 8I!!$vtvg"-L^.ҁyڙ#^؃EJ 8I)3 ;k -,L^ZXؙKc v/mo!@蝄>H蓄HCn[s} ڙجAH 8I!!$v3>  ;Wؙ^O6kC-CB؇>$}H-CBhkH}i&ۗ.v橰36k;NBbg@H!!, < ̑_؃;j!R !_Khaagdlp`gvȯIj!3 ;Bjaag|ZXؙR!ؙ9+Bbg!3$R v&O-,˷phg ;c[H 8I-$vBbg@H-_ ڙجAH 8I!!$v3> iagJu"%vl.RbgIH!]ZB ;קvf硝9 B[Bo'z'$/P3\3E,v湰36k;NBbg@H!!,6lAv9ד[`&p'}HZ؇r{, LS L/]sagl $v$΀;BBX+yڙ#~ !!$;BB؟;k -,L^ZXؙKs H!sEڟ$΀ZXv&T-ؙ硝9k ;NBbg@H-$vZXؙ>3.-ڙج;NEJ ΀ZX aag/]sagl $v$΀;BBX+E:3C;s׋{H'"%vt;k iag_[23G~Ah} AB$AB$EB vWu¼볷vfμvf BbgIBH  !3 $Y@Xؙ-4μ$zYja>!!CjaB[E곀0O-L3!ܾtA83/Yp;BBH  aag|v&Tvehg-$vqV ΀ZHvBbg|-S ;¡y)͚&D!!$v?I-,B ;W؃M ' !3 $ZB ;קvfҥC;R5-$vo!3 o!3 vg+U lA83/Yp;BBH  aag|v&Tvehgz;c6)3$]΀.Rbg|-"-L^._[xڙ# پ vw O"o;㫺ma^[;_ĂphgNYp;BBH  aag|v&e ? 03^O6kn} 8I>$}H-CBhkH}i&ۗ.vT5' !3 $΀vgaagJp`gNC;so!33 $og@H΀a -,L^ZXؙK̩36kZH 8It;BH䕪;sڙ#{i!3$!$v_K@Xؙ>3.-ڙSaglִpZH "%vtvg+U v43G~ma/9;كM Bbg@H ;㳀3yB839+Bbg!3$]΀.Rbg|-"-L^._/)@蝄>H蓄HCn[s} ڙsagl $v$΀;BBX+m~قO 9ד[`v$Ija>!!^> 4KC;s.΀Bbg@H ;㳀3yB83硝9뷐{pBbg@H!!,db_phg΅YBbgIBH  a.Rbg|-"-L^;sڙ#{i!3$} !!$vv&O ;¡9vfM '΀ZH "-EZؙRp`gC;s;c6-$v' !3 $Y@XؙR!ؙ!3`p;BH񵄋3y}H ;iH/C;s6_ vw O"o;㫺ma^[;_Ăphg.Yp;BBH  aag|v&e ? 03^O6kn}p'}HZ؇r{, LS L/]̥36k;NBbg@H!!, \vȯBbg?g@H!!$v3>  ;W*_phg.YBbgIBH  !3 $pv&Oiag/]%} !ҷҷ_K@Xؙ>!, ¡vfM '΀ZH YH ;Wt`g.C;so!3`-$v;BjavgaagJp`g.C;sW؃ BbgIBH  !3pv&Oiag/ nfg#Bm/Rz#w O"Zn^g7-,S~.gv|ΐB`gHHlg -43绤^} %Z؇}HZ؇Zh0O-L3!ܾtA83lg| v$ΐ;CBBuf;ST9̿-vqV B`gHHlg !3给_?A؟$ΐ;CBBu&4ۙE:3lg|\P !!} !!} %| )'4/].5!'ΐZ \g+Enfg׋H!'ΐZu-fblg !3给_;6!' !3$$\f;SOi3KEz?3G~AhE Bogz'$/\g-nvyphg ;c!3$!$v, ,L^o``gߵ[pYg{pS ! "Y@֧n_ ڙجi!3$!$v, ,L^؃M 'IBH  aag|v&Tv~hg{AH 8I, ,L^nr}agl\΀t' !3 o!3-,L^ٿtA83Yp;Bj!3 vg+U v~hgz;c6)3$R v&O-LFv~hg{AH 8I!!$vv&O ;iHv/mHA B$AB$EB vWu{\3E,v桰36k;NBbg@H!!,6lAv!׳[DN$ aR Zn/Ri}ja ¡y(΀Bbg@H ;㳀3yB83C;so!33 $og@H!!, < ̑_;c6'"%vt' aag|v&Tvahg!p;BBH쌯%| ;קoaag/]C;P5BbgIH!]΀ZXv&T-ؙ9k ;NR !_Khaag_phgJ v_퉝!!$v_K@Xؙ>!,6_ vw O"o;㫺H~ڙ"C;X5' !3 $΀vgaagJ_ ;Tf ^r}HZ؇}Hm-´>0̈́p<vf BbgIBH  !3 $Y@XؙR!ؙǡ9뷐{pY-$;Bj!R 3>  ;W*;83G~EH= $v$΀;k 3yB83C;sW؃ BbgIBH  !33y}vf[83Y-$vo!3 o!3 3> -,L^Z83C;s;c6-$v;Bj!3ٿti<vfM {ɡ;BBH  !33y}BXؙK#§9K mGBogz'$/P3ۋ4쭝/bA83OYp;BBH  aag|v&e ? 03OI%m p'}HZ؇r{, LS L/]Sagl $v$΀;BBX+yڙ#~ w-$vBbg@H-$vZh&& ,L^!3`p;BBH쌯% ,L^.dlp`gvȯ΀Bbg|-aag3.¡y*͚o!3$} !} !} ;pv&T-ؙ9k ;NR !_Khaag_phg ;c΀$!$v_K@Xؙ>!,6#3 } }{(_Es} ڙجAH 8I!!$v3>  ;Wؙ^6kn}p'}HZ؇r{, LS L/]sagl $v$΀;BBX+yڙ#~ w-$vBbg@H-$vZXؙ>0!ؙ硝9+Bbg!3$!$v_K@Xؙ>!,E:3I%[H ΀;BBH쌯% ,L^vf<vfͷp΀΀Yv&T<̑_/Rbg"%v;Bj!3ٿti<vfM '΀Z؟$Z aag/_v/-!A蝄>H蓄HCn/Ҽ볷vfμvf BbgIBH  !3 $Y@Xؙ-4μ$zYja>!!CjaB[E곀0O-L3!ܾtA83/Yp;BBH  aag|v&Tvehg-$vqV !R v&O-,K v%]΀;BBH  !33y}BXؙKC;R5i/9Bbg@H_ ڙجAH 8IBbg@HBbg@H,| ;Woμ ̑_؃ͷpZH ZB ;קvfҥC;R5-$v;Bj!3 Z aag/OC;sl NB$IB_$`g|Ui^[;_ĂphgNYp;BBH  aag|v&e ? 03^6kC-CB؇>$}H-CBhkH}i&ۗ.vT5' !3 $΀vgaagJp`gNC;so!3ZH ΀ZH쌯%3y}jaag/]Z83جia/9Bbg@H_ ڙSagl $v?I!!$vv&O ;phgNYp;B;Bvg[XؙR} v43G~;c6BbgIj!3 ;k -,L^ZXؙK̩36kZH 8I-$vBbg@H-,B 3F硝9K mGBogz'$/P3[y}?go~ ¡9vf BbgIBH  !3 $Y@Xؙ-4ΜJx=۬A l' aZ؇}Hm-Bi}ja ¡9vf BbgIBH  !3 $Y@XؙR!ؙ[H=o!3 ;Bj!3ٿtiΜ ;c΀$!$v_K@Xؙ>!, ¡9vf BbgIBH "OBbg|-aag3.v\5' !3 $΀Yv&T9̑_؃ͷp.Rbg@H-$vZXؙ>3.-ڙsaglִpZH ΀ZXv&T-23G~iA B$AB$EB vWu0쭝/bA83جAH 8I!!$v3>  ;WؙKR g5 8I>$}H-CBhk, LS L/]̥36k;NBbg@H!!, \vȯBbgg} !R v&O-,K vR5-$v;Bja;k  ;'ٿtA83جAH 8I!!$vtZ aag/]̥36k;NBbg@H!!,·3yehg-$vl΀-$vt;k -,L^ZXؙK̥36kZH 8I-$vBbg@H-,B ;Wr;sٙBm  } }_rabۼ4r73+^rn/RB`gHH!!!v: )V*_ \JxY­oggIB؟!!CjaB[Kh´>0̈́p\Yr;CBB a3Y@LR!vr73E ?\ΐB`gHH-v準lg4/]Z83lg|ִrZ ΐZhk )'4/].5!' !3$$ΐf;s4Oi^ ٙ]3>k;CNB`gHH!!!v: )Vo!3_ͷrΐ\.lg4/]Z83lg|ִrZ ΐZuZLRp`gv/-!]@蝄>H蓄HC;s"nvyil!3"!!$v, ,L^o``gV%忋= O>!!CjaB[gaZZfB}phg ;c"%v$΀;BBX+ڙ#{i!3$R v&O-,K v澰36kZH 8I-$vBbg@H-,B 3.v澰36k;NBbg@H!!,"vf BbgIBH  !3 $Y@XؙR!ؙ9뷐{;Nҷҷ_Kv&Oiag/]Z83YBbgIj!3 ;Bjaag|ZXؙRp`gv/-!]@蝄>H蓄HCn\3E> ̑_;c/RBbg@H!!,6lAv!׋͚n} 8I>$}H-CBhk, LS L/]Cagl $v$΀;BBX+yڙ#^؃EJ 8I-$vBbg|-S ;¡y(͚;NR !R ;䕪_ ڙجAH 8I!!$v3>  ;W*;03G~H{l.$!$v, ,L^!3`p΀Z·3y}vf"ڙجH'΀ZH YhaagJyڙ#f{ vw O"o;㫺Es}[83G~EH=HAH!!$v3>  ;WؙǤ^/6kZ fgIB؟!!CjaB[gaZZfB}phg ;c!3$!$v, ,L^"%vl.RbgIj!3 ;k -,L^ZXؙKcaglִpZH ΀ZXv&T-ؙǡ9k {lZ؟$΀;BBX+yڙ#"$vl;NEڟ$΀vgaagJp`gvȯ΀ҷ_Kv&O_| v汰36k΀t;Bj!3 vg+U vihgBI胄>I苄=쌯a^[;_Dl!3"!!$v, ,L^o``gJxجi7' aZ؇}Hm-Bi}ja ¡y*΀Bbg@H ;㳀3yB83OC;s׋{H'΀ZH쌯%3y}jaag/]Z83OYBbgIj!3 ;Bjaag|ZXؙRp`gvȯ-$vlZH 8I-OBbg@H ;㳀3yB83OC;sW؃ BbgIBH "O, ,L^!3`p;BBH쌯%| ;קoaag/]C;T5BbgI;BH!3> -,L^Z83C;sl. NB$IB_$`g|U~ڙ"b vȯ) !3 $΀vgaagJ_ ;TfM 8I>$}H-CBhk, LS L/]sagl $v$΀;BBX+yڙ#^؃EJ 8I-$vBbg|-S ;¡y.͚;NR !R ;䕪;<3G~m!3`BbgIj!3 ' aag|v&Tvyhg{AH 8I!!$v.R31aagJp`gvȯ΀Bbg|-aag-,˷phg ;c[H 8IBbg@HBbg@Hiag|ZXؙRp`g^v/-!]@蝄>H蓄HCn\3E ̑_;c/RBbg@H!!,6lAv%׋͚n}p'}HZ؇r-Y@֧n_ ڙجAH 8I!!$v3>  ;W*;23G~HpZH ZB ;קvfҥC;R5-$v;Bj!3 vg+U vehgBbg΀Bbg@H-$vZh&& ,L^!3`p;BBH쌯% ,L^.dlp`g^vȯ΀Bbg|-aag3.¡y)͚o!3$} !} !} ;pv&T-ؙ6#  } }{(_-¼볷vf!3"!!$v, ,L^o``gNI%^lִp΀?I-CB؇>$o´>0̈́pΜ ;c!3$!$v, ,L^ihgz;c6)3$R v&O-,K vT5-$v;Bj!3 vg+U v43G~m!3`BbgIj!3 ;k -,L^Zihg{AH 8I!!$vv&O ;r)/$vBbg|-aag3.vT5BbgI;B;Bvg[XؙR];sڙ#\6#  } }{(_-¼볷vf!3[BBH  !3 $Y@Xؙ-4ΜJxجia/9>$}H-CB؇>$o´>0̈́pΜ ;c!3$!$v, ,L^yhgz;c6)3$R v&O-,K v\5-$v;Bj!3 vg+U v<3G~m!3`BbgIj!3 ;k -,L^ZXؙK9s?g!!$v_K@Xؙ>!, ¡9vfEK!$vBbg|-aag3.v\5'[H [H [XoaagJ-ؙ[h=Bz; }' }зU">{kg- ̑_;c9BBH  !3 $Y@Xؙ-4\Jxجia/9>$}H-CB؇>$o´>0̈́p\ ;c!3$!$v, ,L^ehgz;c6)3$R v&O-,K vR5-$v;Bj!3 vg+U v23G~m!3`BbgIj!3 ;k -,L^ZXؙK̥36kZKsBbg@H_ ڙKagl $v?I!!$vv&O ;phg.Yp;B;Bvg[XؙR} { ~ -EzCw@OB_MxCZO5:L (5GA?ؠPlPh6?@tVDu5t#/Y@ڧ?PFi M?7@g"Ggsv@Ag6(;[ۊNE ts ÂAh;veH.;"/2JJPsPJfc Nڮ VggZW.;GW.P;. JPw~'OHOЙYg=%BA) \Jl{~ #TL؁D(>G;BAwP ~PJc=,EЬ'к=aG(p@.ߥBB) DЏB B |:A샾]T(pB(Wn ZzbY UTY uO> ɡu{CîP]*"RohDv 7ԆM LHBAjrAj RPZz> E.BpzPdhCHPd@J"SR*2E>V(oWNL㰙)RE)ڧTh}J)ڧT3B-/Dh'NMѭ2E6^T(2E B))Z"B+SB'65E@"";ڽr)wPd@J"SE]?$tjn)aG(2E.LHPd@JVȇЉ)MM>EȎv"SE LQ^LOBV"v"SRzb)ʋT)~Y*SdîPd]*"R^Xhe"Uhe|:5Eٰ+"p ET(2E B+S LQޮSt}ڰ)  U(HW.HB}=PB"y ~A}jT(2EvT(2E B))Z"B+SB'. 1} [ehWh S"O>%B })a,Ԓ'NMѽ2E6^T(2E B))Z"B+SB'>5E@"";LK"SR""_OV(/R]?$tj)aG(2E.LHPd@JVȇЉ)OM>EȎv"SE LQ^LOB^"v"SED'ZHZ'NMѽ2E6 EܥB))LH0r"Uhe|:5Eٰ+"p ET(2E B+SXhev 7ԆM LHBAj}CAj R RP_Ox0UBSSB)E B))LH0Z]:1EY)REYȎvw>%B S"Og*"B-LQޮ |I=*SdLK"SR*"R)a,2Ey*tbSS$B)D(2E %B)ohe" LOBQ"v"SEDhe| LQޮPdhG(2E.LHPd|=E]?$tj)aG(2E.LHPd@JVȇдHZ'NMѣ2E6 EܥB))LH0Z]r/}gSSL B)wPd@J"SR*2E>V(oWNL7ԆM LHBAj}CAj R RP_O0^y ~APdhCHPd@J"SR*2E>V(oWNLѫ,ޢ,SdGBTh}J)ڧT3Mc (oW^>$tj^+SdLK"SR*"R)a,2Ey*tb^hH"SdG;B)wPd@J"SEZ'NMkelLK"SR"")a$2Ey"tb^hH"SdG;B)wPd@J"S뉄V(/RV'SSZ"v"SEDhe| LQޮNMkelLK"SR*"R)a,2Ey*tb^hH޵d@J"SR*"R)a,2Ey*tbަh8 aC(H-SRPZPZ*> EohB|rߦhH"SdG@J"SR*"R)a,2Ey*tbd!&hHerhWh S"O>%B })a,Ԓ'NM[elؽr)wPd@J"SR*2E>V(oWNLPdhG(2E.LHPd|=ZH}C+StЩ)zL ;B)wPd@J"SR"2E>V(oWNLPdhG(2E.LHPd|=E]?$tj*SdÎPd]""L#)S65E@"w-)"R EThe| LQޮ )RߥB))LH0Z]:1ESSڰy2E  U(Ho(HB}=Ph^*7}jT(2Ev!T(2E B))Z"B+SB']bbThoQ7Ԏvw>%B S"Og*"B-LQޮ |IWȆ+"p ET(2E B+SXhevUOM>EȎv"SE)ʋ72EO> ٰ#"pED(2E %B+SHhevEOM>EȎv"SE LQ^LOB2E6E%B))LH0Z]:1ESS$B)]*"R Lc)US>5E@*";LK.LH0Z]:1ESSڰy2E U(HBAj}CAj PB"74WO>SSB) B))LH0Z]:1ESB{L R}J)ڧDhRT4E>Z2]zЩ)L W.2E.LHPd@JVȇЉ)} LE%B))L'~C+Sohe|:5E)aG(2E.LHPd@JVȇЉ)} LE%B))L'ZHZ'NMGelLK"SR"")a$2Ey"tb>hH"SdG;B)w.LH0Z]:1ESSB)]T(2E Wn Lc)US95EY W.H-SR RPZ*V a(4/r}Cpz95E@*"; R*"R Lc)US) 11E@*(Ѯ.ڧDhR}J)LESX%)UO> ٰ{"SR EThe| LQޮ ϩ)юPd]""z72EyV'SSY"v"SEDhe| LQޮϩ)юPd]""z")ʋ)~I}VȆD(2E %B))Z"FB+S+B'sjD(2Ev#"pEDh Lc)US95E@*";LK"SR*"_O|V(oWNLg6l^ LHW.HBAjrAj RP_O(ԇм UoPdhC(HPd@J"SR*2E>V(oWNLї,ޢ,SdGBTh}J)ڧT3Mc (oW^>$tj*SdLK"SR*"R)a,2Ey*tbhH"SdG;B)wPd@J"SEZ'NMWelLK"SR"")a$2Ey"tbhH"SdG;B)wPd@J"S뉄V(/RV'SSU"v"SEDhe| LQޮ)юPd]""z"&b)US55E@*";LK"SR*"_O,2Eyz&}B24EG>~ԟo$+J RNCw3"_N{r^y JL&T(1E$B)")Za,0EvU^d!y [?X}J)ڧTh}J>S6gSTlW^>$thO@*w-*"R %ThaUS?$&%D(1E$%B)Aha5O>  YڻJLIPbHJSDR"0EHhaЁ)Z SB%D(1E$%B)Aha5O> ߴ]%D(1E$%B)")Za$0EvEo%D(1E$%B)")JLB SЁ)ZbZhr*"R %T(1E: -Lw2Z+65Ek SRPZ\Zz*+Wn^2Ey~Y\[o_o~'gm'E >()kcN};>SDL WhAJ"mRi#R6aĵFy*tnSmB6]]*i#RH c6Umtj}  Eܥ*F *FAQ^޸6~Aj[lK"mR"i#6a$Fy"tnSm$B6HD(F %B6DB+m)B+mtЩ6UȆHD(F %B6)Zi#FB+m+B'6F@"i#;K"mR"i#_O$Fy"FO> j[lڋVHP@J"m뉅V(/RVG6NBm RPZ\Zz*+ axEBpr|:Fw1ٰ+3*y#R]*y#RX ci*4 Ue!&`$B{ײDm %B'>BS*އPKSB/|:5E$8D(2E %B))ߥB))Z"B+SB'>5E@"";LK"SR""_O|V(/R]?$tj)a EܥW.2E %B))Z"FB+S+B'>5E@"";LK"SR""_O$2Ey"2EO> {elLK"SR"")a$2Ey"tbSS$B)D(2E %B)DB+S)B+StЩ)WȆDh ET(2EXhe"Uhe|}$ԆM ~mU(HBAjrAj R 0r"Wy^O> GelLKwPd@Jw0Z]:1EY)EYȎ6PRUh}J)LESX%)UO> Gelr))LH.Z"B+SB'15E@"";LK"SR*"_OV(/R]?$tj)aG(2E.r))r))Z"FB+S+B'15E@"";LK"SR""_O$2Ey"2EO> GelLK"SR"")a$2Ey"tbSS$B)D(2E %B)DB+S)B+StЩ)zTȆD(2E %BT(2EXhe"Uhe|:5EI BAjRPZ*V ^P+7/r{Щ)zL B)wPd@JwPd|=PY,2Ey*tb^e!&hHe";|CAJO}J)ڧD3Mc (oW^>$tj^+SdÎPd]*K"SR*"_O$v LQޮ ש)юPd]*"Rzb)ʋ72EO> ٰ#"pEEʭL#)S:5E@"";LK"SR""_O$2Ey"2EO> ٰ#"pED(2E %B+SHhevENM>EȎv"SE LQ^LOB2E6E%B))LHP[O,2Ey*2EO> }}$ԆM LHBAj RPZ* axEBpr|:5Eo)aW(2E.LHPd@Jzb)ʋTi*tbd!&hHe";|CAJO}J)ڧT3M# (oW^>$tj*SdÎPd]*"R]*"_O$2Ey"4mWNLPdhG(2E.LHPd|=E]?$tj*SdÎPd]""^)a|V(oWNLPdhG(2E.LHPd|=E]?$tj*SdÎPd]""L#)S65E@"";LK"SR""_O$2Ey"2EO> ٰ#"pED(2E %B+SHhZ LBߧh8 aS(H-SRPZ* B} ͋\z^?,tj+SdîPd]*"R Lci*2EO> $8 B{"B S"O>%B DBm MTi(B/|:5E)aW(2E.LHPd@Jzb)ʋT)~Y'!B))LHPd@J"S뉅V(/RVgSS^"v"SEDhe|_)+wbާhH?"SdGjED(2EHhe"Ehe|:5E)aG(2E.LHPd@JVȇЉ)z} LE%B))L'ZHZ'NM{elLK"SR"")a$2Ey"w15EI BAj}CAj RPZ"V@Cy<\^?,tj>*SdîPd]*"R Lc)U)} [7Ev (B S"Og*Mc SB/|:5E)aG(2E.LHPd@JVȇдHr+StЩ)L B{עo(2E %B))L'~C+SB+StЩ)L B)wPd@J"SR"2E>V(oW܉)} }C)7"pED(2EHhe"Ehe|:5E)aG(2E.LHPd@JVȇЉ)} LE%B))L'ZHZ'NMGelLK"SR"")a$2Ey"tb>h8 aS(HrAj RPZ"V@Cy<\^? sjThZX+T(2E B))Z"B+SB'SbbThoQTh}J)ڧTh}J>S0j`vUOB2E6^T(2E B))Z"B+SB/}gSSY"v"SR]""z72EyVgSSY"v"SREDhe| LQޮϩ)7";PLK"SR""_O$2Ey"2EO> ٰ#"pED(2E %B+SHhevE}NM>EȎv"SE LQ^LOB2E6E%B))LH0Z]:1E_SSڰ) E(HBAj RP_O ԇмEhB|55E@*";ڼrAJ"SR*"R)a,2Ey*tbd!&hHe";ߥBS*O>Bh| d0Ey*'SSU"v\d]*"R Lc)US55E@"(""R z72EyV'SSU"v"SR EDhe| LQޮ)LKPd@J"S뉄V(/RV'SSU"v"SEDhe| LQޮ)юPd]""z")ʋ)~I}UȆD(2E %B))Z"FB+S+B24E>.|#_Qo(ww* -rݓ#)zHSG_$B)")JLI}c)*B" 10EޢiS*O>BS*:a,Ԇ?b*'CSt)LW.1E.JLIPbHJ{ -LQ]:0E)zHSGWn %T(1E$BMS0)j|:4E#"r %T(1E$B S=خ=$B) % %{=)j|:4E#"r%D(1E$%B S=خ=$B)D(1E$%B)^O$0E"Eha'M0E>%%B)")JLI}#)*+B'65EI BAj RPZ* B} ͋\*)R R*"R Lc)USޢ,SdGBTh}J)ڧT3Mc (oW^>$tjn)aEܥB))LH0Z]:1E)юPd]"K"SR*2E>V(oW^NBV"v"S EThe| LQޮ PdhG(2E.LHL'[H['NMѭ2E6E%B))LH0Z]:1E)юPd]""z")ʋ)~I*SdÎPd]""L#)St}$ԆM LHBAj RPZ*a(4/r'ާhH"SdGW.HPd@J"SR*2E>V(oWNL]b7E@*(Ѯ.ڧDhR}J)LESX%)UO> {elؽr)wPd@J"SR*2E>V(oWNL}j?H>HEh|V_o~_;˯6L݉6O>p{~5)ъHVd@J>}bsv'>uH.RH'=Z"Rb)$H!YkyWlsv/v*n7_7sod.I %vO)|H]]TlܫLN}j1Kv%pEv /Kke"ge|:K.ٰ%pxEv +K %^+qevE.=vi8 aS(H+HBAj RPZ*a(4/r'>viH"dGW.HPd@J"R*K>Vv)oWNcjT(Kv+%pEv D(KHXhevU.=viH~fkGBD(K %B])Z%B+B'v1K@*%;K"R"%_O$(ZRޮ T(PdhWhEF D(2J %BwEX%U:} $ E %BD)$'ZR^~ʭOSmH> _[7wP@J"oR" a$4-RPdhG(2E.LHPd|=E]?$tj)aG(2E.LHPd@JVȇЉ)z}$ԆM LHBAj RPZ*a(4/r'NM> EȎ6\R EThe| LQޮ WY!ޢ,`GBTh}J)ڧT3ma,Ԓז]zЩ)zMckr))ߥB))Z"B+SB'ujD(2Ev#"p ED(2E LQ^IЉ)z} L EܥBD(2E %B+SHhevUNM> EȎv"SRE LQ^LoVȆ7"p~(BD(2E %B+SHhevENM>EȎv"SE LQ^LOB2E6E%B))LH0Z]:1EoSSڰ)֯- E(HBAj RP_O ԇмEhB|65E@*";ڼrAJ"SR*"R)a,2Ey*tbd!&hHe";ߥBS*O>Bh| d0Ey*'SSV"v\d]*K"SR*KVȇЉ)z} LEܥB))L'~C+Sohe|:5EoIp,kÎ"d@J"SR*KVȇЉ)z} LEܥB))L'ZHZ'NM[elLKPd@J?!SR"2E>V(oWNLPdhG(2E.LHPd|=E]?$tj*SdÎPd]""L#)S>5EI BAjPRPZ* B} ͋\*SSB)+T(2E B))Z"B+SB']bbThoQ)]]*O>BS*ȇPKSB/|:5E)aEܥB))ߥB)W,Z]:1ESS$B)D(2E B)B+Sohe|:5E)aG(2E.ߥB))L'j;V(oWNLPdhG(2E.LHPd|=E]?$tj+SdÎPd]""7"E)a$2Ey"tbާhH"SdG;B)wPd@J"S뉄V(/RV'SS^"v"SEDhe| LQޮ)NBm R* E(HB}=PB"y ~APdh)LHPd@JVȇЉ)} [ehWh S"O>%B })a,Ԓ'NMGelؽr)wPd@J"SR*_)ʋ+7mWNLPdhG(2E.LHPd|=E]?$tj>*SdÎPd]""]*"_O,2Ey*4mWNLPdhG(2E.LHPd|=E]?$tj>*SdÎPd]"")a2Ey"tb>hH"SdG;B)wPd@J"S뉄V(/RV'SSQ"v"SEDhe| LQޮϩ)NBm R* E(HB}=PB"y ~APdh)LHPd@JVȇЉ)} [ehWh S"O>%B })a,Ԓ'NMgelؽr)wPd@J"SR*2E>E['NMgr뿬dî޵LHPd@J"SE]?,tj>+SdîPd]""B+SB+StЩ)L.C"SR""E LQ^ LB2E6E%B))LH0~C+S&sjS.2Ev)"pED(2EHhe"Ehe|:5E)aG(2E.LHPd@JVȇЉ)}$ԆM E(HBAj RP_O ԇмEhB|55E@*";ڼrAJ"SR*"R)a,2Ey*tbd!&hHe";ߥBS*O>Bh| d0Ey*'SSU"v\d]*"R Lc)U)} Ȏv"SE)ʋ72EO> ٰ#"pED(2E %B+SHhZ LB2E6 ]~ED(2E %B)DB+SB+StЩ)L B)wPd@J"SR"2E>V(oWЉ)} }C)7"pED(2EHhe"Ehe|:5E_)aG(2E.LHPd@JVȇЁ)z MA %?H/(WJ ~BEwHehRW.IPbHJSDR*0EXhaЁ)zB L@*(Z>%B S"O>%B }Bm Ϧخ |I=^ SKLKSDR*"R)B STlWLehKLKSDR"S0)j|:4E#"r%D(1E$%B S=خM0E> %ܥBD(1E$%B)^O$0E"Eha'M0E> %ܥB)")JLI}#)*+B24EJLD(1E$%B)^O$0E"Eha'M0E>%%B)")JLI}#)*+B'65EI BAj RPZ* B} ͋\*)R R*"R Lc)USޢ,SdGBTh}J)ڧT3Mc (oW^>$tjn)aEܥB))LH0Z]:1E)юPd]""z7"o} )~I*SdÎPd]""L#)St} [}C))LH.L'ZHZ'NMѭ2E6EܥB))LH0Z]:1E)LKPd@J"S뉄V(/RV'SStL ;B)wPd@J"SR"2E>V(oWNL}jP62E E(HBAj RP_O ԇмEhB|z} Lm^ B))LH0Z]:1EwYޢrhWh S"O>%B })a,Ԓм]zЩ)WȆ+"p ET(2E B+SXhevUݧhH"SdG;B)wPd@J"SEZ'NMѽ2E6E%B))LH0Z]:1E)ю.LHPd@JꉄV(/RV'SStL ;B)wPd@J"SR*2E>V(oWNL}jD(2Ev#"pz")ʋ)~I+SdÎPd]""L#)S}$ԆM LHBAj RPZ*a(4/r'>hH"SdGW.HPd@J"SR*2E>V(oWNLCbbThoQ)]]*O>BS*ȇPKSB/|:5Eٰ{"SR EThe| LQޮ PdhG(2E.LHPd|=ZH}C+StЩ)zTȆD(2E %B))Z"FB+S+B'15E@"";LKwPd@JVȇ$Dhe|:5Eٰ#"pET(2E B+SXhevE=hH"SdG;B)wPd@JPd|=ZHZ'NMѣ2E6E%B))LH0Z]:1ESSڰ))U(H-BAj RPZz> E.Bpzש)R R*"R Lc)US* 11E@*(Ѯ.ڧDhR}J)LESX%)UO> ٰ{"SR EThe| LQޮ ש)юPd]""z72EyV'SSZ"v"SEDhe| LQޮש)юPd]""]*2E>V(oW^>$tj^+SdÎPd]"" Lc)US:5E@"";LK"SR""_OV(/R]?$tj^+SdÎPd]""L#)S65EI BAj"Z"V U'Ph^"4WO>}} Lm^ B))LH0Z]:1EoSB{L R}J)ڧDhRT4E>Z2]zЩ)zL W.2ErdKn+:'*?$i f`cG՗ApsT(2E B))Z"B+SB'65E@"";LK"SR""_OV(/R]|:5Eٰ#"pED(2E %B+SHhevEݦhH"SdG;B)wPd@J"S뉄V(oWNLmjThZ"d@J"SR"")a,2Ey*tbnSSB)D(2E %B)DB+Sohe_>SStL o(2E.LHPd@JVȇЉ)OM>pjæPZV U(H-BAj 0U)R'T(2E B))Z"B+SB'. 11E@*(Ev+K)ڧTh}J>S0j`vU'SStL \d]*"R Lc)USt} LE%B))L'~C+Sohe_> {elLK"SR"")a$2Ey"tbSS$B)D(2E %B)DB+S)B>RSt} L EDhe| LQޮ PdhW(2E.LHPd|=E]|~C^"vPd]""L#)S}$ԆM LHBAj RPZ*a(4/rBSSB)O.HPd@J"SR*2E>V(oWNLCbbThoQ)]]*O>BS*ȇPKSB/_> Gel"SR EThe| LQޮ PdhG(2E.LHPd|=ZH}C+StI=*SdÎPd]""L#)S} LE%B))L'ZHZOB2E SR*K"SR"2E>V(oWNLcjD(2Ev#"p ED(2EHhe"Ehe_> Gel}C)wLHPd@JVȇЉ)}$ԆM ~rAj RPZ"V@Cy<\^|95E@*";䂔 ET(2E B+SXhevU}BLL> -2Ev+K)ڧTh}J>S0j`vU'SSY"v?T(2E B))Z"B+SB'sjD(2Ev#"pED(2E LQ^)~$tj>+SdÎPd]""L#)S95E@"";LK"SR""_O$2Ey"2E/NMgel"R )a$2Ey"tb>hH"SdG;B)wPd@J"S뉄V(/RVЩ)L ;B)wLHLH0Z]:1E_SSڰ)O.HBAj RPZ*a(4/rBhH"SdG\R EThe| LQޮ /Y)REYȎvw>%B S"Og*"B-LQޮ |$tj*Sd'"p ET(2E B+SXhevU}MM>EȎv"SE)ʋ72E/NMWelLK"SR"")a$2Ey"tbhH"SdG;B)wPd@J"S뉄V(/RVЩ)L ;B)w.LHPd|=PY$2Ey"tbhH"SdG;B)wPd@J"S뉅V(/RVЩ)L ;B)wPd@JPd@J0Z]:0E/CS #"r%Dh %{=Ti"t`>^y JL%%B)")JLzb)*B SԼ|:4E/)aG(1E.JLIPbHJ}70EvENM>pjæPZU(H-BAj RPZz> E.BpzAPdh R*"R Lc)USޢ,SdGBTh}J)ڧT3Mc (oW^|:5E)aLK"SR*"R)a,2Ey*tb^hH"SdG;B)wPd@J"S}oOVЩ)zL ;B)wPd@J"SR"2E>V(oWNLPdhG(2E.LHPd|=E]|:5E)aG(2E.LHPd@Jzb)ʋT)~,tj^@Pd@J"SR""_O,2Ey*2E/NMkelLK"SR"")aV(oWЉ)z}ڰ) E(HBAj RP_O ԇмEhB_>}} LmPR*"R Lc)US& 17E@*(Ѯ.ڧDhR}J)LESX%CvU'SSV"v?T(2E B))Z"B+SB'mjD(2Ev#"pED(2E LQ^)~$tj*SdÎPd]""L#)S65E@"";LK"SR""_O$2Ey"2E/NM[elLK"SR"")a$4-RVЩ)zL B{ע"SR""z")ʋT)~,tj*SdîPd]""L#)7tbާh86l E(HBAj RPZ*a(4/rBߧhH"SdG? ET(2E B+SXhevUBLL> -2Ev+K)ڧTh}J>S0j`vU'SS^"v?T(2E B))Z"B+SB'}jD(2Ev#"pED(2E LQ^)~$tj+SdÎPd]""L#)S>5E@"";LK"SR""_O$2Ey"2E/NM{elLK"SR"")a$2Ey",tj+SdîPd]*K"SR""_O$2Ey"2E/NM{elLK"SR"")a$2Ey"tb>h86l e@j RPZ"V@Cy<\^|15E@*";T(2E B))Z"B+SB'CbbThoQ)]]*O>BS*ȇPKSB/_> ٰEܥB))LH0Z]:1ESS$B)D(2E %B)ohe" L'SSQ"v"SEDhe| LQޮ)юPd]""z")ʋ)~$tj>*SdÎPd]""L#)S15E@"(S.2E B))%B)DB+S)B+StI}TȆT(2E B))Z"FB+S+B'65EI BAj"Z* B} ͋\*Pdh"R EThe| LQޮ ,ޢo R}J)ڧDhRT4E>Z2]zI*Sd'"p ET(2E B+SXhevUݦhH"SdG;B)wPd@J"SEZOBV"v"SEDhe| LQޮPdhG(2E.LHPd|=E]|:5Eٰ#"pED(2E %B+SHhevEݦhH"SdG;BT(2E B))j'ZHZOBV"v"SR EThe| LQޮ'6l e@j R RPZPZz> E.BpzA}jT(2Ev)LHPd@JVȇЉ)BLL> -2Ev+K)ڧTh}J>S0j`vU'SStL \d]*"R Lc)USt} LE%B))L'~C+Sohe_> {elLK"SR"")a$2Ey"tbSS$B)D(2E %B)DB+S)B+StI+SdÎPd]""L#)St} LE%BT(2E B+SXhB"2E/NMѽ2E6E%B))LH0Z]:1E)NBm R*  U'|C} ͋\*Pdh R*"R Lc)US} [ehWh S"O>%B })a,Ԓ˗OBQ"v?T(2E B))Z"B+SB'15E@"";LK"SR""_OV(/R]|:5Eٰ#"pED(2E %B+SHhevE=hH"SdG;B)wPd@J"S뉄V(/RVЩ)zTȆD(2E %B))Z"FB+S+B'15E@"";LK"SR"KVȇ˗OBQ"v"SEThe| LQޮ ϩ)NBm R* E(HB}=Ph^*ϩ)R'T(2E B))Z"B+SB'SbbThoQ)]]*O>BS*ȇPKSB/_> ٰEܥB))LH0Z]:1ESS$B)D(2E %B)ohe" L'SSY"v"SEDhe| LQޮϩ)юPd]""z")ʋ)~$tj>+SdÎPd]""L#)S95E@"";LK"SR""_O$ԤP,2Ey*tb>hHEmAD(2E %B))Z"B+SB'kjP6? LHBAj RPZ*a(4/r}Cpz } Lm~rAJ"SR*"R)a,2Ey*tbd!&hHeѮ.ڧDhR}J)LESX%)U/NMWel"SR EThe| LQޮ )юPd]""z72EyVЩ)L ;B)wPd@J"SR"2E>V(oWNLPdhG(2E.LHPd|=E]|:5E_)aG(2E.LHPd@JVȇЉ)} LE%B))L'ZH )RѮ.LHPd@JVȇЁ) MQrIϯ$+J RN~BE_z{T(1E~PR %ThaUSt{_b/QRK})ڧg}J}>S߯?O^?_O?gڽ8qjK|mDRD%ڈToBUmt{jK~6"wWHJm=&C$@ mԼ|:FB#h#r%ڈD(F$%B m=ڨخhP=$B6DD(F$%B6^O$F"EhOBRh#vmDD%ڈDhBmt{jD(F~#h#r%ڈD(F뉄ڨX-QIP^_b6")%h#R]"h#6FB mTlWNT'6l~rAj R'V E(HB}=PB"y ~ uT(Fv)HP@JVȇJЉ6ZrThT7]]*O>BS*bׇPK{IVȆO.2E.LHPd@JVȇЉ)z} LE%B))L'~C`*7oW^|:5E)aG(2E.LHPd@JVȇЉ)z} LE%B))L'ZH)2E/NMkelLK"SR"")a$2Ey"tb^hH"SdG;B)wPd@J"S뉄V(/RVЩ)zL ;B{##LHPd@Jw0Z]:1EoSSڰ)V ~rAj R'V B} ͋\*з)R'T(2E B))Z"B+SB'MbThoQ)]]*O>BS*ȇPK˗OB2E6~r)wPd@J"SR*2E>V(oWNLPdhG(2E.LHPd|=ZH}CStIUȆD(2E %B))Z"FB+S+B'mjD(2Ev#"pED(2EHhe"Ehe_> ٰ#"pED(2E %B+SHhevEMM>EȎv"SE LQ^L'SSV"v"S]*"RzbHhevEOM>pjæPZV  RPZ?PCy<\^|>5E@*";䂔 ET(2E B+SXhevUBLL> -2Ev+K)ڧTh}J>S0j`vU'SS^"v?T(2E B))Z"B+SB'}jD(2Ev#"pED(2E LQ^)~$tj+SdÎPd]""L#)S>5E@"";LK"SR""_O$2Ey"2E/NM{elLK"SR"")a$2Ey"tbާhH"SdG;B)wPd@J"S뉄V(/RVЩ)zL ;B)wPd@JwPd|=Eд]:1ESSڰ))U(H-BAj RPZ?POn^*4W/~LM> EȎ6? B))LH0Z]:1ESB{L R}J)ڧDhRT4E>Z2]zI}TȆO.2E.LHPd@JVȇЉ)} LE%B))L'~C+Sohe_> ٰ#"pED(2E %B+SHhevE}LM>EȎv"SE LQ^L'SSQ"v"SEDhe| LQޮ)юPd]""z")ʋ)~$tj>*SdÎPd]""B+SB+StQmjP62E E(HBAj RP_O(ԇ'7/r'Щ)%lڧT(2E B))Z"B+SB'& 11E@"( R*Q)ڧDhRT4E>Z2]zI*SdÎPd]*"R Lc)USt} LE%B))L'~C+Sohe_> [elLK"SR"")a$2Ey"tbnSS$B)D(2E %B)DB+S)B+StI*SdÎPd]""L#)St} LE%B))L'ZHZOBV"v"SEDhe| MT)~(>5EI BAjZ"V U'Ph^*4OgSStL B)wPd@J"SR*2E>V(oWNL]bbDhoQ)7ThS*O>Bh| d0Ey*Щ)WȆT(2E B))Z"B+SB'>5E@"";LK"SR""_OV(/R]|:5Eٰ#"pED(2E %B+SHhevEݧhH"SdG;B)wPd@J"S뉄V(/RVЩ)WȆD(2E %B))Z"FB+S+B'>5E@"";LK"SR""_O$2Ey"2E/NMѽ2E6E%B))LH0Z]zw}$ԆM LHBAj RPZ*a(4/rBQ"v"SR EThe| LQޮ ,ޢ,SdGo(HEڧTh}J>S0j`vU'SSL ;B)wPd@J"SR*2E>V(oWNLcjD(2Ev#"pED(2E LQ^)~$tj)aG(2E.LHPd@JVȇЉ)zLM>EȎv"SE LQ^L'SSL ;B)wPd@J"SR"2E>V(oWNLcjD(2Ev#"pED(2EHhe"Ehe_> GelLK"SR"")a$2Ey"tb>h8 aS(H-SRPZ* B} ͋\*ϩ)RkYb6? B))LH0Z]:1ESB{BS*O>BS*ȇPKSB/_> ٰEܥB))LH0Z]:1ESS$B)O.2E.LHPd|=ZH}C+StI}VȆD(2E %B))Z"FB+S+B'sjD(2Ev#"pED(2EHhe"Ehe_> ٰ#"pED(2E %B+SHhevE}NM>EȎv"SE LQ^L'SSY"v"SEDhe| LQޮ)NBm R E(HBAj RP_O ԇмEhB_>} Lm~rAJ"SR*"R)a,2Ey*tbd!&hHe";ߥBS*O>Bh| d0Ey*Щ)L \d]*"R Lc)US55E@"";LK"SR""_OV(/R]|:5E_)aG(2E.LHPd@JVȇЉ)} LE%B))L'ZHZOB2E6E%B))LH0Z]:1E_SSUg_ߟ~?~˿??E E(E %@(Sx>ٶ?3oL^wNWlኴK"mRi#6aĵFy*t/Cm%%B)")JLI}#)*+B'ujP6{(HBAj RPZ*a(4/rB_hH"SdG\R EThe| LQޮ 4fhHe";ߥBS*O>Bh| d0Ey*Щ)zL \d]*"R Lc)US:5E@"";LK"SR""_O[ߡP^|:5E)aG(2E.LHPd@JVȇЉ)z} LE%B))L'ZH)2E/NMkelLK"SR"")a$2Ey"tb^hH"SdG;B)wPd@J"S뉄V(/RVЩ)zL ;B)wPd@J"SR"2E>V(oWNL'6l e@j RPZ"V@Cy<\^|65E@*";䂔 ET(2E B+SXhevUBLM> -2Ev+K)ڧTh}J>S0jм]zIUȆO.2E.LHPd@JVȇЉ)z} LE%B))L'~C+Soho_> ٰ#"pED(2E %B+SHhevEMM>EȎv"SE LQ^L'SSV"v"SEDhe| LQޮ)юPd]""z")ʋ)~$tj*SdÎPd]""L#)S>5EI BAj"Z"V U'Ph^"4W/OM> EȎ6? B))LH0Z]:1ESB{L R}J)ڧDhRT4E>Z2]zIWȆO.2E.LHPd@JVȇЉ)z} LE%B))L'~C+Sohe_> ٰ#"pED(2E %B+SHhevEOM>EȎv"SE LQ^L'SS^"v"SEDhe| LQޮ)юPd]""z")ʋ)~$tj+SdÎPd]""L#)S15EI BAj"Z"V U'Ph^"4W/~LM> EȎ6? B))LH0Z]:1ESB{L R}J)ڧDhRT4E>Z2]zI}TȆO.2E.LHPd@JVȇЉ)} LE%B))L'~C+Sohe_> ٰ#"pED(2E %B+SHhevE}LM>EȎv"SE LQ^L'SSQ"v"SEDhe| LQޮ)юPd]""z")ʋ)~$tj>*SdÎPd]""L#)St}$ԆM LHBAj RPZ*a(4/rBoSSB)O.HPd@J"SR*2E>V(oWNLMbbThoQ)]]*O>BS*ȇPKSB/_> [el"SR EThe| LQޮ PdhG(2E.LHPd|=ZH}C+StI*SdÎPd]""L#)St} LE%B))L'ZHZOBV"v"SEDhe| LQޮPdhG(2E.LHPd|=E]|:5Eٰ#"pED(2E %B+SHhevEݧh8 aS(H-SRPZ* B} ͋\*Pdh R*"R Lc)USt} [ehWh S"O>%B })a,Ԓ˗OB^"v?T(2E B))Z"B+SB'>5E@"";LK"SR""_OV(/R]|:5Eٰ#"pED(2E %B+SHhevEݧhH"SdG;B)wPd@J"S뉄V(/RVЩ)WȆD(2E %B))Z"FB+S+B'>5E@"";LK"SR""_O$2Ey"2E/NMѽ2E6E%B))LH0Z]:1E)NBm R* E(HB}=PB"y ~ 15E@*";䂔 ET(2E B+SXhevU=d!&hHe";ߥBS*O>Bh| d0Ey*Щ)zTȆO.2E.LHPd@JVȇЉ)zLM>EȎv"SE)ʋ72E/NMѣ2E6E%B))LH0Z]:1E)юPd]""z")ʋ)~$tj)aG(2E.LHPd@JVȇЉ)zLM>EȎv"SE LQ^L'SSL ;B)wPd@J"SR"2E>V(oWNL'6l e@j RPZ"V@Cy<\^|95E@*";䂔 ET(2E B+SXhevU}BLL> -2Ev+K)ڧTh}J>S0j`vU'SSY"v?T(2E B))Z"B+SB'sjD(2Ev#"pED(2E LQ^)~$tj>+SdÎPd]""L#)S95E@"";LK"SR""_O$2Ey"2E/NMgelLK"SR"")a$2Ey"tb>hH"SdG;B)wPd@J"S뉄V(/RVЩ)L ;B)wPd@J"SR"2E>V(oWNL'6l e@j RPZ"V@Cy<\^|55E@*";䂔 ET(2E B+SXhevU}BLL> -2Ev+K)ڧTh}J>S0j`vU'SSU"v?T(2E B))Z"B+SB'kjD(2Ev#"pED(2E LQ^)~$tj*SdÎPd]""L#)S55E@"";LK"SR""_O$2Ey"2E/NMWelLK"SR"")a$2Ey"tbhH"SdG;B)wPd@J"S뉄V(/RVЩ)L ;B)wPd@J"SR"2E>V(oWLehB}x](IREQߩXh~{9xT(1E~'T(1E$B)")Za,0EvU=^d!y [?>%B S"O>%B }Bm Ꮶخ |$th/)aKLKSDR*"R)B STlWL);ْ㺾 1*afD );wVFuGF8c_SdÊPb]""MLs MLQ]0E/MS8%ȎVSD%OhbEO mϗٰ""r%D(1E$%BSzBSlW6LK=B)D(1E$%B)zd"41EœwB%1E6%%B)")JLI=%S5EN{(HBAj RP(+4.r7B_h"S\R EThfl LQܮ 혢4zheu*K)ZThuJ>RwB53EkXr)wPd@J"SR*43E6f(nWvLkPdъPd]""z747Ev@O?ohfO 횢aE(2E.LHPd@JfȆЎ)z횢y L:ZLK"SR""['43Eq"43E'vMkfְ""pED(2E %B3SdCOhfvEhvM<EhE%B))LHwB53EkXLK"SR"")'43Eq"c.]S4섮aQ(H SRP( 5 8Bm (KPd R*"R L })USty Z[aѪ.ZDhRuJ)HySdC_JwB蒙5^T(2E B))"B3SB;5E@ u""pED(2E LQ\):?y'k.)ZÊPd]""L =)St隢y L:ZLK"SR""['43Eq"43E'vM%3EkXLK"SR"")'43Eq"c.]S4B)ZG+B)wPd@J"Sdf(.RfЮ)dh +B)wPd@J"SR"43E6f(nWvLѵk恝5, a@j RP FG ]q8z횢y L:ZrAJ"SR*"R)/43Eq*cS4Bk2L:ZZߥBS*N:B)ol ]IgvU;]StLV\d]*"R L })USt횢y L:ZLK"SR""[f(.R5EaE(2E.LHPd@JfȆЎ)vM<EhE%B))LHwB蚙5E%B))LH]1E׮)D(2E %B)xB3S)B3St~Nh]3SD(2E %B))"zB3S+B;k恝5, a@j RP FG ]q85E@(ux傔 ET(2E B3SdC_hfvUhBtL< -0EhUh} S"N:%B })/t%)U'vM[fְz"SR EThfl LQܮ 혢)D(2E %B)ohf" L;]S5E%B))LH]1Eo]S4B)ZG+B)wPd@J"Sdf(.RfЮ)zLV"SEDhfl LQܮ혢)D(2E %B)xB3S)B3St~Nheh +B)wPd@J"SR"43E6f(nWvL{;kX R( 5 A(HBm=PB"q8 =?y#kP(2Eh)LHPd@JfȆЎ)z蘢y Z[aѪ.ZDhRuJ)HySdC_J:SBO 횢aEܥB))LH]1E]S4B)ZG+B)wPd@J"SdEwB=3EkXLK"SR"")'43Eq"c޻h"SV"SE LQ\L;]S5E%B))LH]1E]S4B)ZG+B)wPd@J"Sdf(.RfЮ)zLV"SEDhfl LQܮ혢)vBװ()Q(H BAj RPz6tEBpz~FGPd R*"R L })US! 1E@((U]*N:BS*ȆЕt(nW5E)ZꕋLK"SR*"R)/43Eq*c>h"SV"SE㿡)743E'vMGfְ""pED(2E %B3SdCOhfvEh}tM<EhE%B))LHwB#3EkXLK"SR"")'43Eq"c>h"SV"SE LQ\L;]S5E%B))LH]1E]S4섮aQ(H SRP( 5 8Bm (Ϯ)B+T(2E B))"B3SB;ScPhmQ)ZGBThuJ)ZT#M }+LQܮ =>y'k>3S+"p ET(2E B3SdC_hfvUh}vM<EhE%B))LC3SohfO 횢aE(2E.LHPd@JfȆЎ)욢y L:ZLK"SR""['43Eq"43E'vMgfְ""pED(2E %B3SdCOhfvEh}vM<EhE%B))LHwB33EkXLK"SR"")'43Eq"cn]S4섮aQ(H SRP( 5 8Bm ([Pd R*"R L })USt蘢y Z[aѪ.ZDhRuJ)HySdC_J:SBO 횢[fְz"SR EThfl LQܮ 혢[PdъPd]""z743EqfЮ)eh +B)wPd@J"SR"43E6f(nWvLѭk@(2EhE(2E.LHPdl=E5EaE(2E.LHPd@JfȆЎ)uM<EhE%B))LHwB薙5E%B))LH]1E)vBװ()Q(H BAj RPz6tEBpz~FkP(2Eh)LHPd@JfȆЎ)BtL< -0EhUh} S"N:%B })/t%)U'vM=3EkXr)wPd@J"SR*43E6f(nWvLѽk@(2EhE(2E.LHPdl=H}C3St~Nh3SD(2E %B))"zB3S+B;5E@ u""pED(2EOhf"EhfO 횢{fְ""pED(2E %B3SdCOhfvEhݻh"SV"SE LQ\L;]StLV"SEDhfl LQܮmK=l\(IRD?ԟQ/ϔ{sg Mׯ_9[dOiB+T(1E$B)")d*an/ S8 -N:BS*N:B5wSlW4EٰzSDR %ThbC_hbІ)4M@ ";Zr)"wPbHJS\_ϡ/4H!}CSTy'k2S+"p ET(2E B3SdC_hfvUhuM<EhE%B))LC3SohfO 횢aE(2E.LHPd@JfȆЎ)z뚢y L:ZLK"SR""['43Eq"43E'vM[fְ""pED(2E %B3SdCOhfvEhuM<EhE%B))LHwB-3EkXLK"SR"")'43Eq"c޻h ]âPF 5Q(H BAjjq9Q]S4B)ZGW.HPd@J"SR*43E6f(nWvLѻ,Dڢ SVw:%B S"NGʛ"BWҙ]z|Nhgh W.2E.LHPd@JfȆЎ)zy L:ZLK"SR""[f(.R5E)ZÊPd]""L =)S5E@ u""pED(2EOhf"EhfO 횢aE(2E.LHPd@JfȆЎ)zy L:ZLK"SR""['43Eq"43E'vM{fְ""pED(2E %B3SdCOhfvEh}tM<E 5LHBAj RP(+4.r7B?h"S\R EThfl LQܮ 혢Y)BEh RuJ)ZDhR7E6􅮤3Eq*Ю)LV\d]*"R L })US5E@ u""pED(2E LQ\):?y'k>2SD(2E %B))"zB3S+B;k@(2EhE(2E.LHPdl=E5E)ZÊPd]""L =)S5E@ u""pED(2EOhf"EhfO 횢aE(2E.LHPd@JfȆЎ)욢y`'t BAj" F 5QjCWh\ 4G'o~vM< Eh-^ B))LH]1ES4Bk2L:ZZߥBS*N:B)ol ]IgvU;]S5^T(2E B))"B3SB;k@(2EhE(2E.LHPdl=H}C3St~Nh} ߎ?FZE(E %@()k ?~響^_߾)Oۅ] ׎6jy :ZኴK"mRi#[5Fq5F'vgְ"mHxEkl?6mF?|@5)Y#Eh.=9v\ӄk-auE D+RH %ZB)j{xݎPu<}pF 5.H vAj R]TJv^Ga6=96vo]4쿝ְԂ]Ev T/K z3dCTA9Ў]u< Evi-~ Ev T(K B3dC_hfvUh.ݺvi~F/`d@J"R*%R]/4Kq*cn]4T$']q\)}P\)}P\ZPo?îϱP5>5+rM %\k)$z\B;vֵK@x"VTd]%.z]/4$B;]tV".Ev Dhfl Rܮإ[.٥%pEv (K+U}P*^tsv-Ú!װ%ppEz +K %\zw =a3 kG(ݻBi?kX R0HBAj RP( +4.r7B]4BѿPZG_H BC)H! ]qHCsvT %@k>B)H]uP^ūoj#]4"RU3ڱK]H/H/+K %\^x\G_w ?׏Ut y Z+U] %H(ẍ́ }PU ti KR%?QO(g3u~߿q̯_K.=uURD.%r㮪Gʷk]6UeOePJDRbKDRj&Kvݨ?nS5_v%vj")[%vj")KTI],ۍ)Z6TR6< RD5%%鹞ᅩ?ED5OqmKlXJTKDR╨&jz}jJ+BTMo'bN;D4%Ro]kϱNoyՍ~<DR•'DD5ѳ )Z?QDR╨z|jJBR tiǁKL&r4}U)?>SN?@j+HzAj RWz6t߸ȁkBO>C?y@(ux E T(rM BBȔlW6!}w5 MҼD)H Pd@JwOdVʽ{=9v\v5Kٹ]d@JwVd@J"R.]ݎ]zڥy`ۭEr .K %v\ZJv3{svUӫy3q"җ&4}UHv>SN@!:ZB %xx)ē2N7~~5'Nœw\5SMkXB %^j)THL52TSܮ׮jH5_5]"&H5zH"x}C_J:B;F@(iu"mHE ʹQ\ʹOޮ6dh mHEDhl ʹQܮhKWPъP]"i#Hz<66:?y'.6ZÊP]"K"mR*i#[/4Fq*4F'o^h ]âPQ(HBAjrAj Rkqнr"Gq8^'v5؎!vװ*3*NP@J"mR*4F6f(nWvѵ@(Fh )Z?Q"mR"i#['4Fq"t%.B;F@(v*hU(F.HPl=Q"UJB;5E@(u*K"SRzwPdl=EC]*"R)f(nW܎)vM<EhEܥW.2E %B)xB3S)B3St~Nh]3Sկ\d]""L =)St횢y L:ZLK"SR""['43Eq"43E'vM53EkXLK"SR"K"Sdf(.Rfз)vBװ(Ə" F 5 ʵBm^q8B-3EkXLK"SR*"R)/43Eq*cd!?t^1??eaUhZDhRuJ)ZDhRk=5E0T'vM[p*"R ET(2E_hf"UhfO 횢2T(2E B))Z%B)) LQ\ L{]S5^Q R L +73EqzvL[W.2EvLHPd@J\dl=E5Eo)ZÊPd]QLHPd@JfȆЎ)z뚢y L:ZLK"SR""['43Eq"43E'vM[fְ""pED(2E %Bz|)T):?y+k恝5,  Q(H BAj RPz\6tܸQhW{]S5 EܥB))LH]1ES4Bk2 :Z|CAJOuJ)ZTR=5􅮡 BO 횢aEhZET(2E B)B3SWnfO 횢aUhmdT(2E B))Z%B3SdCOhX L{]S5 EܥWn} ETh} L })+c޻hPdLK"SR*"[f(.RfЮ)zLV"S~!SR"43E6f(nWvL{PdъPd]""z<)):?y'k3SD(2E %B))"zB"UhfO 蚢y`'t BAjQ(H BAj RPz6tEBprO 횢aU(2E.LHPd@JfȆЎ)蘢y Z[a R*~S*N:B)_aC_J:SBO 횢aE(2E.ZߥB))Lǿr3SWnfO 횢aU(2E.ZߥB))Lv LQܮ=>y/k>2SUT(2E Wn} E ];f(nWvLGL:Z}C)wPd@J"Sdf(.R5E)ZÊPd]""~eȆЎ)蚢y L:ZLK"SR""['43Eq"43E'vMGfְ""pED(2E %B3SdCOhfvEϷ5EN0E 5 A(HBAj RP[#ԆиAhBO 횢aU(2E.LHPd@JfȆЎ)蘢y Z[a R*~S*N:B)ol ]IgvU;]S5EܥB))ZߥB)Wnf"L{]S5 EܥB))ZߥB)B3SBvEh}vM<^E+"R E]H 혢Ϯ)B7"pE LQ\ L+k>3S+"pED(2E %B3SdC(3Eq"c>h"SV"SE LQ\L;]S5E%B))LH]1E)vBװ()Q(H BAj RPz6tEBpz~FkPhZƯux傔 ET(2E B3SdC_hfvUhd!:hE)ZThuJ)ZT#M }+LQܮ =>y'kn)ZꕋLK"SR*"Rk=Hr3St~^h2SUT(2E B)) LQ\ L{]St .cOaU(2E.LHPd@JfȆB3St~^h݂Pz<)T):?y/kn)ZÊPd]""L =)Տ)uM<~"SVmA%B))LHwB薙5E%B))LH]1E)vBװ(7F 5Q(H BAjjq9Q)B+T(2E B))"B3SB;. 1E@((U]*N:BS*ȆЕt(nW5EaEܥB))LHWnfO 횢{fְ*"p ET(2E B3SdC_hX L{]StLV"SR EThfl LQܮ^Sty |C)ZGo(2E.}C))}C)_)):?y'k)ZÊPd]""L =)Sty L:ZLK"SR""['43Eq"43E'vM=3EkXLK"SR"")'43Eq"KX(JRD?ԟQ/_F[" V=:=SB)z=rQJSR*"R} }eU,7E@(({ RuJ)ZDhRwS57SmW3Eh LKSR*"R} }eU?^hۣ)zB)BwP`PJSR*4/4l* 홢q{4EaU(0E. LJP`PJFS5FSmWrS4=So(0Eϣ7"t}ʍ([~FST=y'g=D(0E(%B)B)MMQ]ML:y""tD(0E_FS-RFST=y'g=D(0E(%B)B)MMQ]1E]S4섮aQ(H SRP( 5 8Bm (׮)B+T(2E B))"B3SB;h()BEh RuJ)ZDhR7E6􅮤3Eq*Ю)zLV\d]*"R L })US5E@ v-""R EThfl LQܮ 혢׮)BkQ ET(2E B3SdC_hfvUhvM< Eh E Ef(.Rr3St~ 횢a E%B))LH]1E]S4B)ZG+B)wPd@J"Sdf(.RfЮ)zLV"SEDhfl LQܮ혢K;kX R( 5 A(HBm=PB"q8 =?y#5E@(ux傔 ET(2E B3SdC_hfvUh]d!:hee RuJ)ZDhR7E6􅮤3Eq*Ю)dh W.2E.LHPd@JfȆЎ)tM<EhR EThfl LQܮ 혢KPdѪ.LHPd@JfȆЎ)tM< Eh Eܥo(2E o(2E+73Eqoh]2S7"pED(2E %B3SdCOhfvEh]h"SV"SE LQ\L;]StLV"SEDhfl LQܮ혢k;kX R( 5 A(HBm=PB"q8 =?y#5E@(ux傔 ET(2E B3SdC_hfvUh]e!:heu*K)ZThuJ>RwB蚙5^T(2E B))"B3SB;5E@ u""pR L })USt횢y L:ZLKwPd@JfȆЎ)vM< Eh EܥB))}C)_)ԯC蚙5 ED(2E %B3SdCOhfvEh]h"SV"SE LQ\L;]StLV"SEDhfl LQܮ혢)vBװ()Q(H BAj RPz6tEBpz~F[Pd R*"R L })US& 1E@((U]*N:BS*ȆЕt(nW5Eo)ZꕋLK"SR*"R)/43Eq*c޺hoo()}B()DH .H/?O?~~_?ٿ}f3mv;譫恽]d'_~]d@J"kRjK>RUo>SuH.RHϓvBw]@J"RU|vv=9OmW(eBi O-J.}jP)}jP) %Om&vUhG(u<~ #V?PwW$@J"d]̈́R\>P:?yr,ɭ_eb?MIǞt/;Ul6ć] -,=_޾/㟿O^X|ъy~ |~_?S~TG? OH\W(5[߲߫^aKУa5Ԋ@5 a(P Cj TP8Cg9 aKP5CbehJ*ZdhJzVEPۓWC Kg2VZ%Ck U2VZ%Cm=P+zC"eh(ɫjZ%Ck U2VZ%Ck xC (C'v UC0,V*ZdhJ*ZdjEohX E=y5t<.jZ%Ck U2VZ%Ck xC (C'w UC0,V*ZdhJ*ZdjEohX E=y55T гXZdhJ*Zdhoa24eЏjZ%Ck U2VZ%Ck xC (C'vIћg2VZ%Ck U2VZ%Cm=P+zC"eh(ɋ]Rt4Z0@5 a(P Cj Tйg,:C"8 ݟ%E)be("E` Ed("E@%C3R4Ќ)z!$([v%%CkZdhRBk =UP+zC[%4e5]R"+V E̒ EdhFf]!E]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢YJ("E`HP)Y HQܮ!E]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢YJ("E`HP)Y HQܮ!E]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢-^)zԶ PT"j<~\u/WwLQث]wvѽ5V,@5qa/P/P {j\z\\g]"8 ݟFGC0/2Xkq*PPJfh6ەlt`!Z#ZZ%CkZdhRBk =U͢7ԔkBa#+V\,PPJfh6ەltb!$a#k.YJ(F@"l46=4Fׄv=FV"lTJ(F@fh}B3lvѽPJ(F`P)f(.R Ͱ5]ltϰ"lf)P)6E *ltb!$a#k"lTJ(Fs=>6TB3l?yMh+0OѬX%&/ڂPPčJ"n4 EPTB;K5V, a(PK.P Cj\rj T; Egh\04~tI EZK.PPDJ"RT24#E HQܮ 퐢Q):5EZ+CY2V)J*%VSI,zCMHQܮ ݞ&K>2RdꒋH%C)*HPЌ͢74#Eq2C>h EZ"Rf)H\f(.RЌO^%E)bPD,%"RB)*%4#E]%C>h EZ"Rf)H\OhF"ЌO^%E)bPD,%"RB)*%4#E]%C>h EZ"Rf)H\OhF"ЌO^%E)bPD,%%C)*H\74#Eq24#EC?hXjP@5 qa(PK\3t%7.r㒻?y5K>,׊5J"RT2")EohFveh}BtHZSA OTBk UJhʓYґ]=yMh}fȊUB)d("E@%C)*Yf(nWvHg !YkPD,%"RB)ЌEkB3#EVH"RTJ("E@fh}B3RvHg !YkPD,%"RB) HQ\kB3#EVH"RTJ("E@fh}B3RvHg !YkPD,%"RB) HQ\kB3#EVH"RTJh=K"R4 HQ\ HdoIΆ%7~w%#H'C徇>v|M/N^ mKBf2"2KRDT2" )z )J+C" EgCHhMQ~;>XRBk UJhJ U2T- 7ԊϤ(ٮ ݞ&I./ )*Y2" MHѣ MHQ] E&):BB );ەPBJ %PBy~(z 5MRtyIH,V %RB )"*%"RBR(zCRlW mK !*YJ(!EDRXOhBE* )*N^$EbPB,%"RB )"*%4!EOhB* Rtyi!$Z%"2K %PB MHQH%4!EkB򒐢YJHRDTJ(!EDz )J)CRT: u? kBX T)@5 TP a\3t%7.r㒻?y5K.)be("E` Ed("E@%C3R4Ќ)H8~3) E@ֳdhRBk UJhP+zC"PۓׄvI%#EVH%C)*HPЌ͢74#Eq2C.]Rt4{("Eֺ] EPDJ Eh'4yh{*)ڟ&K^#.+V ERB)*%"RB3R4>)UB;%EGCH("EZ%"0K EPDz|B3Rfh.)dȊUB)PDJ EЌ͢OhFv)tIHV ERB)*%ЌE*)ڟ&K.)bPD,%"RB)*%4#E)C3R?y1%EGÚP+xa(P0FBj::иah,K.)fȊY2" H,zC3R+C;* yh ) EZCJ'*J*%VS)Eo);Eq2t{.)fȊUB)d("E@%C)*Yf(nWvHѵKPDJ("E`HP){hF"uH5]RtH"Rf)HP))EЌ*Rt풢!$"kH"RTJ("Es=>)TB3R?yMh]3Rd*YJ("E@"RTJhFf'4#EqJh]h EZ"Rf)H\OhF"ЌO^%E׌YJ("E`HP)Y HQܮ|.):քZ0)a(P0FBj::иȑXO^ 풢[FXH%C)*HPЌ͢74#Eq2CnRt4e"k-@%CZ%CkZdht(nWnO^%EYJ("E` Ed("E@%C3R4Ќ)uIHV ERB)*%HQ\)ڟ&Kn)bPD,%"RB)*%4#E]%Cn]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢[FX%"0K EPDJ H,f(nW 퐢[ !YkPD,%"RB) HQ\kB薑"+V ERB)*%"RB3R4>)UB;K5V, Aj T#@5 P΢34.r$4vI Y Z\rJ"RT2")EohFvehBtH ) UJhJ U2V)J*OfjJGve5]R"+V\D,HPPDJfh)ەR%EGCH("EZ]r)PDJ EhC3R{hF' 풢׌YJ("E`HP)Y HQܮ!E]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢׌YJ("E`HP)Y HQܮ!E]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢׌YJ("E`HP)Y HQܮ!Eo]Rt4 ba(P@5 PH(P Cz\Bg9KBߺh"Rd%d("E@%C)*Yf(nWvHћ(D К Rd,ZZ%CkZdht(nWnO^%Eo)buE̒ EdhFf]!Eo]Rt4"RdUB)PDJ EhC3R{hF' 풢YJ("E`HP)Y HQܮ!Eo]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢YJ("E`HP)Y HQܮ!Eo]Rt4"RdUB)PDJ Eh'4#EqJhF' 풢YJ("E`HP)Y HQܮ!E]Rt4 ba(P RTP a(P0t%tq#8 ݟ$K`("EZ\rJ"RT2")EohFvehBtH ) EZZϒJ U2V)J*OfjJGve5]R"+V\D,HPPDJfh)ەR%EGCH("EZ%"0K EPDz=4#Eqfh.)zH"Rf)HP))EЌ*R%EGCH("EZ%"0K EPDz|B3Rfh.)zH"Rf)HP))EЌ*R%EGCH("EZ%"0K EPDz|B3Rfh.)zH"Rf)HP))EЌ*RtaM Cj"H(P Cj$s=.  a%.):Ykq*HPPDJfh)ەRt萢!ZSA2%CkZdhRBk =U͢7ԔkB>ŏ?mo|~_?SOJ~"PT"_M6wקO1kltbo_7 P~P)Ҋ*wY9ݵ&wcn!'xn a]JE ]J=gU*WewPwѰfG_]ēJE< ]ēLU{]krw9v}xFEp ]JEp sV{Uvך{5 kviztH"T."M=gyw5kv>!svkp"T.N@"T9rTyw׽*kMv GB Kv7"].P wjd*5s7ujX%RG.R.R@%w*{Ϊ=U)ar>xhX T /S@"<T /Ss= ϢSqJk`V2>D;:hքgk@">T+S@7J(bM@zXP)5jZ'4,RڡK]t4"dUB^PJ Exi)C' P),%%RBQ*% OhX E%Ð> hXj@5 PH(P Cz 0t.6:Ykq*PPčJf/2͢74{)nWvHg К `YJ("E@"R4j2t{.) cCX]rk"KnRB)*%"RB3R4Ќ)쒢a!0@%?(*"R@(2p`f{U^wck}(5wQ#RZ5*Q#RZYʻU5eÐ> hwWĐ"f)!‹\f ).R~f i.Ckjt5F dh=KyE ׌!͢f )nW 0.C:ֻ+BHJDP)!&o(*JϱƵ >׷ftwE< VēJֳVēJi=gU*w]*wך۠Kח&]:|vj'cݕ~T@?"՟ݸ׿=9k{9|v/Mt6չ2%.!MD%wJSݍo(]w4ٰ<A^J%܉^y~2~E* w*N^Nח;be(NdJQ);pGpdJh;]_l %o(wWJ(ODXOhRH%4yC8yMh5]_;4&%%C k"*%&RBm=P+EPTBtҤKgCH(KJ(KdJQ).= MRHХ5Mt}jj/4.Y h=K~DT򳞥 ͩ^eZS\DMgC+aM+y]̒5%ud3y]8yk.]_ 5DTDT2%, EPTB;@JGÚP+aj T TPOH@5 a\3tqXO^z2! \" E dhң M^Wz(FvA]`hT~;>XRB6*%a#RB6 5 H Ͱ5]ltɰK.F`P)aYf(nW `K !Yku%+븲I EPz|B3lfh.6dȊUBk)TB3R?yMh]3Rd*YJh=K"RT2fh}B3RvHѵKPDJ("E` Ed("Es=>)TB3R?yMh]3Rd*YJ("E@{("E@z))ڟ%E2~3>"E@-HP)xC3R)C3R?y5K)bPD,%%C)*H\74#Eq24#ECo]Rt4P+H(P Cj T TPܹg,ah,ɫ]RtH+C)d("E@%C)*Yf(nWvHMCКwx*Z*ZZ%COEo)mҽ$?yMh2Rd*Y2" H,zC3RvHѭKOEn@P)j8',wa3{9ָv-FV⊰"lTk=K"l4㟐lg>6U\;FGC"ld a#0KyEd(Fs= E*6ڟ&n<*Q_5PDJEt?=gUS寿^eZS\vuːn<ңsmܭOTZB*!$SU^ZϱJUݭY Tr$RvYr$SU^ZϱڥKGdm@5j T#@5.P+ wM {pw9Vw5CMV,JJֳd/BM@%{348.R~jza}2beh kdhR^j*PP 5͢74CMq2tքvQkXP%Cj*PP 5͢74CMq2^h E/%Ykdh}.55﮳ 钛?yMh.ftɊUB]d(K@"TJѥHvk. !.YkPD,%%RB]ft).Rfti.]z ͌wXX%%0K Ex PJ xC/a24Pz!$%kZϒ( g)(xCgLNǼatPݟ&ː^k3J(H@-, PPJ xC v[ kBX\rj TPPH(P Cz 0tз.):5kZK.PPRPPDJfhKIq2CD!:/% КZ*ZZ%CkZd/%͢7Ԕ]=yMheȊ%"0K"RT2")CQ\.a2C޺h EZK.z+ RB)*%5 HQܮ ݞ&K2Rd*YJ("E@"RTJhFffhjh1X2f-"RTJ("E@"R4j;EЌO^ 풢Y2"0K EPDJ H,zC3RKnuIYkuERBY2"z|B3Rfh.)zHDF\DJֳd("E@%C3R4kKFv)zaM Cj T TPո0t%t%7.r$4wI EZK.PPDJ"RT24#E HQܮ 퐢wQ):5EZ+CY2V)J*%VSI,zCMHQܮ ݞ&K3RdꒋH%C)*HPЌ͢74{(nWvH{ !YkPD,%"RB)ЌES?yMhON}LTc"R@(*5"{DS>ݰWٻZq`FGNwQ#0KֳVDJiET,?S#wך~5]1$+VwWĐ,ًP)!›1Yw׌!Cz2!]C"T+zh] yC.R@3?yMh!O|w! T h=K~"T򳞥{4u׊k(ݻ@hXj T @5qa/P {z\\g5.rK\]t4CP T2%( ̀,zC3+C;@.XJGmJE< PēJE2vd*YJ(bG Ezf(;貣!$#k*C;'ЀPH%4%aG]vt4CO1կz(UP םsN*^,\taUݸq(*areGn `[YP*ĎJV!v4Q\ɫ]v#+V"vf){"vNT&%7cGq24cGC?hX/V, PH Cj$8 q q1⸇O^ 풢2%׊5J"RdPD24#E(C"ehF' Mt? ,CC"Rkx(*帞%:Xaݲ%Ek0F-!zBE@%Yw.c*Qث[wo}vѰ.mECP)rݝ\&Zn?ǚ.C@uGm.BH`P)!{Ϊ=UuZJGCxF@Z T>QU%Fogf<.R~f@i.P CڳX= *]k U2VZqoh"ehخ=y5 >3dP,Zϒ( E@iHɫ]%+V"fPJ E@ P[74Jq24J&P:{, %ߍ>qH#R P屳{hȿ}?Pld5 n/ PP,JQPJz(zCl[ mKf2l?Y2*ZZ%Cm=P+zC"PۓWC@^8%%%,JQP[7ԊаH2n/Mt6{(yhV %̒"MՎ+"=3zd_/&HgY3IdgqO='*]YAUJvBRmϿKR>u`5Ɏn/n"LQ"\ϒU"숨dUŽETBvTdGbD%C ;"*JQЄ=аH&;$h+C ;"d(aGD%CYvXLJQH&;$h+C ;"d(aGD%C ;"*%4aGOhX MQqbxip;Nj߮ո>oP~(P ?MT=v-uv=?n$9No]đVrq$S]*wך~]kJA45p\J٭UrVZ%wk[=UurwX"Eѹ{Tr>Q"Tr%wOU{kMvxӥ˛7Yx*&7Ei=Ϣ{]ڟƵK.]be /ehR^k U*ZW[74"ehخ=y5K.<_\zt.Y%?\*yΪ_׽޵&wvu.<[=;!TJ+"M@%wi*{Ϊ=Uurw]r/HF"Tra';=gU*WӮv!egwk#w*P]ĠJ*wOwwݫ]krwiw]"u4,DQ2 Q@5q.P(pTݰn wcuK z""fzED n=K""e*nB®nH]DhXԣs Tr)Rv* "uƣaeV,.5Ig)IE\!Ov! E/=Yv Pj PPz7 BO^]u "f)B PAYE BO^ Bkx gdК(B(P),j 74,R.tr!\rx[RBx*%', 5{0nWvPӵ`(bMZZϒ5 E d9k1ԊP+zCCQvҵK`(KZZϒ/ Ex d9k1ԊP+zCCQvҭ P+PPո0=s=:иqaeHGC0,[kP" gPzg缧2Ԕ'v/3X%3JhJ U2VZzV nO^ 풢[`k+Ck"C)*Zϒ xC )ڟ%E2d("E@%C)*HP)xC3R)C3R?y5Kn<QgmtEPJ=gmEr>Uҭ0]D,[RZ5*Q#SUs׿u@kv Ї.ƈ!{?ov^ĐJO gAӛ) BG@%:*9u_%woʽ*]s\t@{@$Yx*{P<XϒJAUS%{zZ"{~!\OQ]kȧ"*VVVV!"$۟kfh=CKV =[w*z*Ck U2VZ%Ck If*[>{EKZb TGV!T%Zqhi͏UZڟEKZbeٺSZ%CkWdhJٳxC)C3?y5 3dP,@PPJz.Xso$wANQ=*%VZ*ZZ%Ch dϙ IВso-ghɊcZ=&1VVVVV!&=&e*[?{\]t4ba(P^S0@5 a(P CZqjh-ݳגXUj\M5w(fɪ*ĖJVz %{ʼEgY-{ƗXel-.69kRfk~j~j2[`K Ee6[?WC4V E4fU"fPDJ"4 If4WC4$+VuEV){JV*eVɪZzWYt!.R _m'vi=IV y E4 dh=K"T2 74,Rf4ijEw4;tɭI6,%VZ%CkZdjEohX E%t{jh&3d*&Y2$& h,zC3+C;4ޥIGCfZ*%VZ*ZZ%C >זkB螱#+V Ymɍe"h7PƐD!f_Ү;qG63Wιﶴ{)SڧO h>%ޞBrSwxcꎮz R6 e@Aʀ) Rt']pF\4wSwQ#/v@{G#}J@@J@;)Dw͍OށJ:Lr?\/v@oK+%^>%}Jڧz1Nhj&xtj>*SmiO h>%}J@z{"F hꮀOށNMGeE%"SRZU)):yLK@4&K@+Sherw5ǓwSSQ"/v@{ע"d@J@))Eh'^޳_~)LQNL] ǖ޵X3KLHE4)Z2E:1ESSt-H@)Pd^Pd@JLjOPBherwtb>ZELHiB))M(2E L*ghBz)L95Eׂg(H3 (Hل)P2=aBW1͍4hz>y:5E)b""SRLH heV1MOށBLLgrf=߿&O h҄)S>%ޞ8^@S#45ǓwSSY"/v@){ (2E %Vh#HL}VȋPd^LH (2E %)Z2EϷyLK@))ҕLjOrgherwtb>Zr{b[| "S@+S+S95Eׂ"_E%^Pd@JWneV1LQNL] Pd|i""SRPdV{V(7R/EI }NMѵ Eȗv@ E4&2E_nV|r|)zyۂ *_HwO${JROg߯ܢZyo:b"SDRJLI ha0EEw|;PY)zyH.ve\7( > Sڧ4}J@=qBFjBSQ@'@ai_FU;22^ۈ'E$%Dx=2r_wڝP<hh#mDRKI o86*+m0F W*6")%ڈh#PA-QH hrI:F/Cmt[mX0F$*F$*FD6*)% @< mAJZ%ڈ%D{iB mt/+FEwt^ %h-mDPHJ@6'NˠQ]h6-H@6ZK;DKPHJZh{1-`TtW@?ktC`- RRR (Hل] hn=CsрOށNcE%H"mRZiU@+m+ǟo*%1F,4R-rAJ@5}J@&O 'N#HMh* T=b7ѕH h"oR@F h* =NMѵ MhZ4&"Pd@J@+SherwtbZ"SK+K@))E2E&) Lʝ2t"SRr))]+2EZ;Щ)zLC@))E"PdV{"PYʝǩ)+"_]"PdV{"FjB/5':5EIphB))M(2E %{ZUZ]M=MMѵ`P/6[@ʀ){)) Rt'L*6h@'o45Eׂw-ŗ6W.H (2E %Vh# =BLLѵ -)Mh> Sڧ4}J@] bůoiBSQ@':5EO)bw"S~/EK@+SherwtbZ&"_]^LHiB))L*F)Љ)zkAL/"S҄{ (2E %)Z2E:N] Pd|i""SRr)ZFZ3tj*Sڻ!SRLH (2E=her#4uW:1EOSSt-HL/&""SRLjOZHL}B2E^&w-Pd@J@))Eh'gherw5S<5Eׂ}B) R R (HKjOhnMh.ۄ>OMѵ Eȗ6W.H (2E %Vh# =BLLѵ -"_> Sڧ4}J@oEW1d0EzyNMse=C){%"SV(7R@+St>y:5EeWP]>"SRLH (2E=her#2EwSS\"/v@){iB"PdV{"F hꮞS25Eׂ(Hل) R Rh']Ri@sрO&ej (2Ey))E"bZ]Y)$E1SK;^ڧ4}J@&O -M*F (wW@':5E/)bw"SPd@J@))+2ErSwtb^Z&"_M(2E`/M(2E b LMѵ Eȗv@){ (2E % u)V(wW@'ej (2ELK@))Eh'LQnOޟSSR"/vPd^z"SRz{ (2E=her#2EwSSR"/v@){ h&"PdV{"F he'@2E^"SPd@J%D)ʍOހNMѵ`z Rf@ʀM(HP2 eo=*HRt>y:5EIpb72ڧ"Pd@J@+Sherwtb^e!&Z&(f|i Rڟ Sڧ4}J@ohV1d0Ez%}J<2p7=_R_wFt'}ŋY_zj^@Jx6)uǵF\NT] 8ڧO hҼ)S>%nt"JF w!t٪OSm^i#/vT^%H"mzRjV|t+mh/^4H"mRjOZiHTWȋP^P@JW.F +F'Fr?t+m(F`/Ei#Jb TWȋP^H (F %6Z45R@+mt>y1Fׂ-׋ Pg(HPg(HPg(H՞ ]47Ҁ]wSmQi#/v@6{ (F %Hz{"JF h'@e!&-cȋ޼hB)Mh> S@'45R@SQzy:5Ee(2E %"SRPdV{z"HL}TȋݕLKW.2E PdV{"PYZ]]ǓwSSQ"/v@){ h&"PdV{"PY L}TȋPd^LHiB))=C+Sherw5S15Eׂ9w--]~/E"bZ]=|NMGeM(2E`/E"bZ]=|ϩ)(Hل){){] U @s#|tj>+S(2E`/E"b)):2s;kф)S>%}Jڧ'ԋhj&xtj>+Shod"Pd@J@2EF he'@2E^E@))E՞8)ʍOށNMgeE+"ҕLHiB=her#4uWW}NMѵ >vM(NHiB))M(2E=her#2E yPd^Pd@JLHiB+SZ]M}NMѵ M(2EPd^~/E2EV(wW@'sj hZt"SRPd@J@))L*F)Ё)z}ۂ *\IRD?ԟt=h߾}04E hZ~c?1E$%SDRZ{1-LQ]=|;PY)z}H.vdoQOiB)Mh> S{/FT;С)z}(L*vW.1Ed/PbHJ@)'E)*+ǓwCSPUSD~/%{{"Ԅ9y:4E)Z(1Ed/%tSDRr St/ M5'@N*v@w^JSDR %ޞ8)*))jNށMCaVJLK@)")%4)讞S04Ec 1Ek r)")=C)")Mh^@ STtW@ahn Pbh&"҄SDRZ{1-LQ]";*ϡׂ+lBAʀM(HP )F34 jwN뵋~ܐF@))E2EVh%;"Gޢ)͕ Rڟ Sڧ4}J@=qBFjBSQzSSX"/vLKLHiB))MheV1Nherw5S85Eׂ4-"&"҄"S'ԥPZ]ǩ)$(2E`/҄"SRbZ])@\ eP+ (HP )&tH{==CZfBAJ@))E2EV(wW@')zkA[K;^ڧ4}J@&O -'ChAO'tjXC۾#vU.H테x"QRDHm/+_￯X}Z:FOSmt-H㊴/ƵKx6)E׽O|z'V|>SmTi#/voHHi#P@J@+mhrw5m4Fׂ4HnB6{遊H遊jOPAh2Dq+mt>yЩ6z E E4H&FV(wW:FOSmt-H/&i#&i#҄"m' QZi]h6$H(F`/EKZiU@+m+my{>Oѵ Eȗ6 RH (F %6ZF:Fϒmt-H@{bȗv@OiB)Mh[*jU@=> }B9}Ƽ+3r7)P@J@=b+7tbZ&"_M(2E`/Pd@J@+ShBZNMseM(2E`/]"SRZU@+S ) EȗvLKLHLjOr+S L}B2E^&"&"҄"SRbjB'yjiB)݄"S҄"SRPdV{V(7RNL] Pd|i""SRLjOR(Nherwtb^Zbs傔}l)rAʀ] e@Aʮ՞tH\4瓷g] Pd|i3 %"SRZU@+S+S" 11Eׂ(f|iK@&O h҄))Zԓ }B2E^\d^%{ heV1LQNL] ҄"SK E%{ heV1LQO'tj^*SnB){iB))]Vh# LMѵ M(2EPd^Pd@JLjO|˭LQnr+St>yЩ)zL E E4&2E'2EЉ)zkAPd|i74&՞8)ʍԄV|>SSy ]2E %"Szߋȍ]MNMѵ`P/6@Aʀ] e@Aʮ\2 eWjOhnEz>yש)$)E"bZ]WY)$E1SK;^ڧ4}J@&O -M*F (wW@':5E)bw"SPd@J@~ǟ߿_/ [_ň8['uꎮifov>V}z4}˽uJ?>SO?>voEXSQ+NvK:)BD궗鯏z# W45D$NEҵ@;]+s<Ks<HiGTGWSEs;JUbEV EV 4*J_*+:JׂtEVɗvo*4*Y՞]Q*O'tj^+nBU{iBY%PdV{"*F he'o@ߦVZO eo e@Aʀ] e@Aʮ՞tÄF\+|tjޒ 1hooO (J %*VVi#* *XLҵ Mho\/m %*"RZYU@++6Jׂ7.H (J %*W#ФtV|~N[rߐܘ)]}J@}J@}J@=#jB'@-}mF@{ #H""R$H 'b MEh6+y#_=C7{iB7)M(F=(M_5TЉ)zkﵣ)ݸр"QRP$@Jz۫ $0UxOܠNT] vW-/HnY#Ҵ"k䩎mHw^؟SV9$/vPC{ /rH ^V{e\9HMk'o@ߧZ?])Aʀ+HP2 ejOi@s&|t+(rH`/E 9$!bZ9]8C Eɗ6 %!"RZ9U@++>uHׂ ^;n^'RH %H!xjސ<ސR_uߩPz %"R‹H o%V1k%rw5>Jׂt"KK@P)EB JVB)wW@'B}*|}*HgxO)"wإ]q__ڍ+K`/Ҹ"R{H)I׉Pz kA/퀢!%Ҽ"?"{H:qHSt-H@{ E t#RP@J(bt&rH瓷WޏC@ؼ}) R6 e@A& jOhnE;ЩC;!9$P@J@+hrwt>Z&9$_*mE Ei#JbZi]h6 EȗvK%HVh#J D}Lѵ Eȗv@4{-y՞x"P/+7tb>Z"SK;4{iB+ShBR3tj>య~z{EC))E՞8)ʍ]M}LMѵ M(2E~/]\d@JZUZ]=|ۄ~NMѵ`fBA& (Hل)P2=aBW1͍ Ez>y:5EK[|; %O$@J<()YŸ kѝhϩ6qEȗ6/H /F %HVh}FgrI:FSmt-H@6P^6)ݿ^ZiU@+m+m9Fׂ/}iKHiB6)*F6Љ6jkA/"m҄"mR~/*7J D}Nѵ Eȗv@6{ h&i#P>FzV|;F˞|E1ҍ۟(Y#Ou+Wkϱӝ:%4H!{.RH %H!y{+*{Mt'Bs*2FBɗv1J`/eH2*Ƨk%rwt B`gDR{"ߣP('=~mg߁?{wrB o#_=")%F%GbZ|讀!$!+8$PHJ@ t/FIiB ԜO!=$k9C")]!\HJW.qH|@s/FC* 8C-HJZM(qHd/҄DR!݋hᐊ != mAJZ%%!&8{{℺.@ TtW@an P(qHd/%KZ8{1MH!5'СCz{H_3H$3K/ED"~/%ޞ8޳45R@SQ:FoCmt[&x~/%ވK@7'- HHd:0EoCSt[Sv@)"{%KWna8)* ǩ)@ؘ"+lBAʀM(HP2=aBW1͍ Ez>y{50oׂ"_L(H (2E %Vh# tM.^]N_&#)Mhm"Pd@J@+SheV2y:5EIp(2E %"SRr)Z@g2Er'ij3ԋ͕ Rs(HP ) R6=*6h@'o45Eׂ"_ڼ"SRLH heV1LQNL] ޵ؗ|i"&K@))L*F)ϷO=UȋݕLK%\dV{[H]:1EOSSt-HL/&""SRLjOR(NherwtbZ"SK;"PdV{"FjB+St>yr)}>xr{ע\d@J@))Eh'LQnV):yLK~/EK/E)ZxF he'@2E^FFLH (2E %^ZU@S#2EwSST"/v@{""SRLjOr+S)z))/E^l)rAʀ}) R6=* ͍4h@'o<5Eׂ"_ڼ傔"SRLH heV1LQNLѳ,17I}|?~_kO?^FIp[ 퍌&O h҄)S>%ޞ8^@S#5(Ǔ yLK@))PdV{"F he'@9 M(2E E4"SV(7R@Sw5S<5Eׂ EȗvPd^LH (2E=her#2E yr){Pd@J@)Z@+S)):yLK@))=C՞{_*S+xtj+S(2E`/҄"SRLjO=@+S+ǓwSS\"/v@){ h"SRLjOZH]):}kR(H[.HP2 eW.HPϡ=* ͍4hz>y:5E/Ip/v@{##}J@))E2EV(wW@'EbbiB{b)DMh> SzK$'7swx>SSR"/vLK@))EFʭLTȋ޵E4&՞2EZ;Щ)zI.CPd@J@))E՞2EZ;Щ)zL E+"ҕ%D)ʍOށNMKeE%"SRzz{"F h^&ej-(zE"~/M(2E=her#4#)$EPd@J@))PdV{"F he'oW] v^l\"2 e/E e@Aʀ]=*ϡ4mB'@2E^"SPd@J@))L*F)Љ)zkAPd|ic@J@))E2EV(wW@'uj hZK;^LH (2E %)Z4I!]):_SSZ"/vW.2E`/3"3՞ LQnV|tj^+ShZRLH (2E %D)ʍOށNMkeE Et"SRr=her#2EwSSZ"/v@){ (2E %Vh345R@+St>y:5Eeb""SRLH 'Nher#2EwSSZ}ȋPd^LH (2E %ޞ2EZз)[){)) RRR jO͍4hC'@2E^"SPd@J@))L*F)Љ)z|Z&w-&|i#@J@5}J@&O -S'wrwx>SSV}ȋ݄"Pd@J@+Sherw@2E^"SPd@J@4gher# LUȋPd^+"PdV{"F he'@2E^"SPd@JLHʭL*+75R@+St>y:5Eo)b""SRLH heV1LQMMѵ Eo"SRLH ] }'l^~?*=~_rGe٩;zܑE%#wRB4V(7Rp'o@ߧZϬ e (HkHP$2=_EHv OށN{厼E%y^&7~]?z|7"wR@SQ@+w:qGwt-H{{vMh)M-҄)㡚TP/gh. }BrG^&#"w(rGD MEQ. Oѵ MMyǪyiBo){y{io{Rާ4}Js)aO2Is\n=i}BrG^&#P!wRB%TwinPU|t+w(rG`/E#Uh#=|;Щ;zܑ;#P@J@+whrwtާZ-K@;)E*FI ʭL}B2E^&""SRLH h-U@S#2E7SSt-'ԋ PW2 e e@A^@ʀU @s# h.ڕ{>y:5E)b""SRLH 'LQn }BLLѵ MhoQs/m %>%}Jڧ2Z8 (wW@':5E)b7"Pd@J@=qB+S MЉ)kA8>gh> Sڧ4}J@]DʍzЄ"SRPd@JLHiB)ZZHL}Vȋ݄"S҄"SRPd@JZUZ]]ǟo:5E)b""SRLH heV1LQNL] d| ~/E"bZ]ϩ)$(2E`/=C))=C2EV(wW@'sj hZh&"҄"SRZU@+S+S04EU Sڧ4}J@&O -M#P/~NQ]=O?h+"SDRJLI ha0EEwt)-HJLZz~)")OԄSDRPbn4I!=C SԜO?h %%&"҄^@ STtW:0ECSt[&w-zSDRJLI (1E$%)#Ё)zۂr)"{PbHJ@ St/F)*+S04E (1Eki"SDRzStoO|@ STtW@ahn Pb(1Ed/҄SDR݋ha =NMѵ`s(H3 (HP )&tH{Ez>y{˵߿2 ׂ"_L(H (2E %Vh# MvdoQ-4^ڧ4}J@&O 'N#HMh* }B2E^\d^LH (2E %)Z2E:1ESSt-HW.2Erw^Pd@JLjO;Ek?{@_ѩ L}B2E^&"&"҄"SRbjB'qjiB)݄{ (2E %Vh# =NMѵ Eȗv@){E?e\r[ۮ8mɈ#}nzp_*"I |9qUkȭ#K@+SherwtbZ"SK;"PdV{=2E&}$S45Eׂ"_E%{iB+SqB+S+S<5Eׂ" eP2 eP2 e@W{„bi|)yj (2EPPd@J@))L*F)Љ)zSt-H@{bȗv@OiB)Mh;)Zԓ{hO=WȋݑLK@))E2EV(wW@'yjiB)݄"S҄"SRPdV{=2EV|}B2E^&"&"҄"SRbjB'yjiB)݄"S҄{ (2E %)Z2E:1ESSt-H@)Pd^LHEh'." =OMѵ Eȗv@){ (2E %D)ʍ=2E+Щ)zN~ڻd@J@))Eh' LQ&tb^ZO e@A@ʀCAʀCW{U @s#mBsрM] Pd|is䂔"SRLH heV1LQNLы,] ޢ)~/S>%}JڧNES') y;r){ (2E %Vh# LMѵ M(2EPd^Pd@JLjOV(7ROTȋ݄"S҄"SRPd@JZUZ]MLMѵ M(2EPd^Pd@J%)Z2E:1E/SSt-H@)Pd^LH (2E=ȭLQnܤtb^Z"SK;"PdV{"F heWSSR"/vPd^{ (2E %D)ʍ]MNMѵ`P/6@ALHP2 eE e@A=*{hnEz6SSt-?G/6xF<()D˾8~{/߮Y/Aǧע;FRmt-Hz ;' /=KxƵO oҸ)SuVf{ DR9J$y;H{ }O 1I`/!|X/FHЉHzkAשǿS${i)aSާ4}JؓYv/F,FOT$V"ɋ݄"*$@JH)D*gJ$jB'"u*iBH'=$@JDHiHZ"J$ D$NEҵ E"ɗv@H{ (I %H$DHʍaZ#w*^$@JDH (I %H$DHʍJ$J$y"=$=K@HZ@+)H:_y6IׂblBAʀM(HP2 eE=*{hnE^F@I)Pd@J@WV1^9Љ;zkAУ˸rK"҄W>%}JڧNWV1d0Ez>SSV"/vLK@O (2E %ޞx&}dn77RGnꮀNL] ҄ڧt)SڧOiBĉ@墀OUȋPd^LH (2E %)ZxV(wW@'mjiB)="&"҄"S'2E:r>Љ)zkAL/"SPd@J@)Z@+S)):_y?r2E^޵LH (2E %D)ʍyLKPd@JPd@JPoOZHL)G e RlBAʀM(H՞tCQnEyLK@"~/L*F)Љ)zkAޢ)CH hES>%}J@T4Ez2]=^yЩ)zL E%"SRZU@S#uV|'arދPd^LH (2E %)Z2EЉ)zkA:r{ע#"Pd@J@))L*F)Љ)zkAL/tEtEh'>V(7RGneWޏܩ)zO.CG.2E -"SRLjOZHL;Щ)zL{(2E`/^LH (2E=her#2E+@2E^"SPd@JPd@JbF heWހ~LMѵ`z Rv䂔)P2 e Rt'L*4|},m~n7!@J<{!#Hx{'Eo_NTW{-m1FׂW3޻n]d@Jt5)MWGNESkѝ8Ct{ c_P+RH.RH %^;O^OPXvE> D$]@Jt:+zho"d{-1Kׂ /mdH /K %.VviTerwtb>vZ"K;.dHI ٥՞d\٥H heWߩ]:K %."Vv)7R@+ttj>*(K`/.~/Evi'RnVv|.}TvɋPd^H (K {heV1~nVv| .] { eG.HP# (Hل] hnE{(:_y:KK^F@^)P@J@=#HMEϩP 흌}+S.HiBQ)EF +'{H:qHSt-H@D~/E I${ #P/F(m9Fׂy#_P@J@7)ڀz1b:1ESSt-H@)~/E"bZ]ϩ)$(2E`/=!SRzEh'>@CQeWޟr2E^r){iB"PdV{"PY)):_y:5E)b""SR:r))ޞԋhjV|}VȋPd^LH (2E %)Zz)wWۀ~MMѵ`z R&@ʀ e@Aʎ\2=aBW1,7&4 ;Щ)L;K@))bZ]/Yo] ҄L/mrAJ@+ h҄)SzU@= NMWrrMhodt"SR%Vh# }MMѵ M(2EPd^%Vh# }MMѵ Eȗv@){ h"SRZU@+S+S55Eׂ"_E%ħꝢH=V|:5E_)bwE쥇"d@J%D޳8)ՄyLK@))EtVh# @2E^"SPd@J@))L*F)Ё)54Eg$gW7wG*|}'ТtWkh hoQj"PbHJ@G{~C0EEwt`>B Lѽ -)Mh> SڧOiB6^@ _)Z%%^JLI hQ@ STtW@ ҄SkB)")%K@ S(F)*+Skh (1Eki"SDR%)z#Ё)54EJLK@)")%ўPTz-LQs:4E S=")")M'-LQHMՄL篡) ]r)")%"=-LQ]_CSt/H@{"SDRJLI ha0EEwtbZbs䂔=傔))] G*v=_ykAL/m@J@))ExQ@+S+SdJc4 %{bG.HiBOiB)MhPoOP/FT y;r){ (2E %^LjO=@+S+S45Eׂt"SK#"&"PdV{"PBherwtbZ"SK;"PdV{"PBherwtbZ"SK;"PdV{"FZ{=Uȋ="*SqBS#2E+@xӋPd^LH (2E %)Z2E:r'ijEȗvGn"SRLH heV1LQNL] v^l&{(HP{(HP{(H՞p]47Ҏ\4+oG] Pd|i3 %"SR~?v3VkK)BSB|-v.F =Wȋ!K@;)E4i"Qn]M=Oѵ M(rGP^{/}">Q@+jB;ZZHMBI@'yꎮ (rGK@:՞rGN] P|i#{u@+ (rG=hr#rG+Щ;zܑ{(rG`/C;T#pEC E*wہNs厼hyJOSo?{)%}JsܧtS>%8ǩ(a ='a?b7-#P!wRBH UV1jB'eꎮ=ԋ P) R6{ e@Af jOpGF=4 ۄLѵ Eȗ6E %"wRZehQNLы] ޢ=ԗv@OiB)Mh;m#POS++:5E/)bw"SPd@J@))#2E:r+Sttj^˰"/v@{ע{(2E Pd@J@=her#2E+@% E"~/EV(7R@+Sttj^Pd@J@))Pd@J@=her#2E+@2E^\d^"SRLH 'LQnhb^Zrtۧ4}J@&O hSnP7;hr#4!=^yЩ)zL E%"SRZU_[*S+S:5Eׂ}B)P2 e RlBAʀ ]47&4 ۄNMѵ Eȗ6b"Pd@J@+Sherwtb^e!&Z%}JڧOiBԋ NMke"Pd@J@+ShjyLK@4&K@+ShjV|Vȋ"Pd@J@2EF heWށNMke퍌"SRLH hVh#HL;Щ)zL;t"SR"SRZU@S#2E+@5 s^"SPd@J@))}H/G|~rDnWYvSwZ#/v;{ 1rG %{{ ah/F hꮾL] o^lUAʀUAʀUAʀh@s# h. }kAܑ/=a~/E#P7Bh* hrQ@'M^b⎮ hUh)Mh> Sz墀z2\ y;r;{ (rG %]\墀?t*w(rG`/ESh`/M(rG=ȭ2ʍ=rG+@rG^"w~/w%D޳47R@+wtt*w(rG`/;PV{"PYZ]+@rG^"wP<E\QB{hrQ@o:uGo;b#"w(rG^(-H):_y:5Eo)b""S(2EZ\ԄVo&tbާZbL,)z {(H՞pEi|mBߧZ"SKO"{(2EZ\墀NLѻ,] ޢ)~/Mh;҄)S墀z2\ y;r){ (2E"S()ELQ. OMѵ MhoQ4"Sh&՞xLQn):_yPё\(ڧtSڧtީh)M'MEMhj&xWȋݑLK@)T"pEMRȾ梀V(tbާZ޵hB))ESPd2E()E)$kPd@J@)T"pELQ. hB:r+St~NM{e"Ou@)W墀V(5S15Eׂ}B){() RP(@ʀ\46h@W&cj (2E %"Ou@)W墀V(tb>Z"SK;44 MH@+S:1ESSt-H@{bE ES݄"S LQ. herQ@'cj (2E%yL&)dCsQ@=2E+PY)H.L޵表O hґ{:^:rz{⑛) =^y:5E)O Rt=e_OAO˞ %^^\'tj>XwE4^"DHE %R^v%.| "U4m1Fׂ?O .F %^H.F %^;OFt?>S%B)E D)${t^݉P k0 lxADADA?H㙋|m\?BZ"Ko7 %H("R(M,NT(] P$|i %&K@& ՞J,NT(] P$|i %{ (J uM&ˤ R. D(}Nҵ EBɗv@P{ h"RF(^=ʍԄVB|:JPbPKP$@J@P)DPʍJ( J(y^={ (zzR@?ґ[\ԑ{|;ЩPLo̘sb77ڂHPd@J@=זHMh* !}Nҵ CD=I${ (H %Pԋ]hϩ6$h\@J@7)*F@SQ@'kj;P/6G.Hّ RlBAʀ})&tH;rsрCZ"SK )E"bZz+S% 19 -z_> Sڧ4}J@TK|L5tG<$%=L.+K+ qz迪??UC]_wt/H@oagWSo=I {&Oi)aS EadO}**v0qGd/*HJ;z秮[Ё;5tG4ݑKK@;")%ўx˨h[F͕ _K|X];D4DRHJg齗bV/ kt"ײ?&G")%Dx${kZtV* aLZ^KI ocb퉇 xw-R]X_Ct/H@UZK;*tw%VXG{"Фt`~ ҽ %Vi-DPbHJ@tVQZX:JOSt-؁zBRf@ʎ\2 eG.HP2=aBW1͍ Ez$5Rׂ9$_L(H (rH %#G1-?z$<t!ٛ5 ]&OiB)Mh> S45RwST9$/v@C{ (rH %^jO=@++4uHׂ4!vM(rH E 9՞rH!O!=7db0@J@4H"&I$ґ@'45R@SQ:FOSmt-H/&K@7)E+(F ?aЉ)zkAL/"Sґ%ZHMhG:1EOSSt-H@)Pd^LHLjOZHL=tjaa@JP$@J<()DST0»Z:FSmt-Ջw2 e7T2 e/H^w'*jnEz6Smt-H@6 RH (F %6ZF:yYJb hT;/{ h҄)S>%w*>bț++:Fϕ6bw"mP@J@6)#F:rSwtZ&i#_M(F`/M(F Eh'QnV|}BF^&3z(BKHiB+mȭQ&tZ&i#_M(F`/P@J@+mhrwtZ"mK;Hi#ґ%6Z4"6:_y?r9 3^^Ei#PV{=FZiwSmދPH (F %"ozV/ȝ)G ) R (H= (Hّbi|mB_Z"SK{(H (2E %Vh# BLLѵ -"_> Sڧ4}J@T4Ez2]=^yЩ)zL#""SRLH heV1Mԑ[wSS\=yڻC))M(2E Eh'C+S)):_y:5E/)b"&K@))҄z{kj#~l[+ĩ:'eꎮ鮊ܑ/#~/!v#}碀V(t^Z.|]~_zJ{v<.?HiuK}J"SQ+!‹H /RL %bZ67RSۧtS;k{%}JsMSQs-?;Щ|z%nH>N~/B DK|T\ȧW{w"ަZ_d|iw" "R‹jOxtyr#ȏP@'mꛮ h/ctCE 4H8 'z__ԓe]=~*[{l7޿(rL %1{iBcZ=@S#5(+o@ߧVZO0 ewT2 eG.HP2 ebi@sрJ$yګSDH h">m)6:_y:F6b3HiBi#҄z{"InV|T'a_bE >%Hz{"JF hꮎ܉6zjkA"mK- %H"mR'QnV|}BF^&^Sڧ4}J@}J@=h%r#4uWztomxڛC7)P@J@=SnjNL] ґL/&""SRPdV{"P?hBZ $8PLHiBt"SRPd@JZU@+S ) Eȗv%"SR'Nher#5):_yЏ)@CA& (Hّ R)bH6+@2E^"SPd@J@))}H㟅pGB\gKVLGvWbw4>%}J3{,]f{{OsQnjfWށNG厼E%y&Md#45R@+wtt>Є"wR~/ESP4i"QnV|}Tȋ݄"wP<E\Q@&F hWށNG厼h/񀔽C{_cRާtS)i'$a vSw솎\@J;)B ՞ErGBUwSwQ#/vGnh#~/rG ٫*o;S}Lѵ | "wR%Vh#Ф4;:_yϩ;@L(HP#HP2 eG.H՞pbi@s&|}VȋP^H (rG %ޞz(7R@+StTbb>!4HK<"O8yBO.M}޽׉6jkA:{bI+F %H;C֊p%ΟeHD e_S=|M)p^>O?J7na`:I˺<{E D y$)@JNy5OӝZ*y{:Yn}JxO o )}\ZNgO=g噼!M#RB<H 1L=o65R@+tt>+(L`/l"R陵D(gEM3}N=ӵ =#Kb^zuz!<H hzɤ}. hrQ@oЯg@L(Hّ R6 e@={ل] 47Ҏ\4+@L^"P<E \Q@R EM3zs7U&O h҄ީh&O 'Nh* hj&xT-}Uo$yH{ (RK"(I(I(ϷJ$yڿ Sڧ4w SZ)\HMh* ;PyEv.L/=a~/Sz:^ڧTHME=^y:uG_;bzAT R~F})a(IѩItj*SE%T^Pd@J)Z ?M]HL;Щ)L;"{ (2E=her#4uWG}MMѵ d|iwE Eo${0HZ8)Pn^~"_> EԿԿԿ~DŽ~U+#3S ޵8(%SRH.FUہB-{ry ='h/҄)S>%ޞ8^@S#5(+@gvϦQSP`PJ@)B)DIj (7E"_ޢ"P`PJ@]DI h6EUQ@) LKGnSR'ͦj&4;3E{6Ebw)OiB)S)DU]M;Й)ݗ0yvxMRR DJ'E~5GKE_w?Nwl0~퍊X#ҴkR{t^],%ޞ8^@S#5(+:uHOCb9$"RH hV1M!:>4!&K@C)E rHV)wW:qHOSt-HP|iwE #9$ґ%CZ4"MhW'tꐞ*E E 4!Vi#H;ЩCzoiґ$HiBD)M(H={F h~ۨt0"oR E4&z1MT=tbZLKLHiB)Z@+S)I =OMѵ` R6 e RlBAʀMjOaBs# h.#yj (2EPPd@J@))L*F)Љ)zmt-H@{bE%}JڧOiBԋ?E=^yЩ)zL#""SRLH heV1LQ?tj+ShodtE4^LH heV1LQNL] ґL/\d^LHEh'Fz(LNMseM(2E`/&"҄VhV(wW:yyjIُQO@J'.E E4Hynz<GI}ռo?>SmcQ;"kRiE4^;}ݽٝ8C+rH"^@JËjOV)7R<+t6/St-؁z+H (Hټ)՞t57ҀM;ЩCzI`/v@{W#}J@C)E rHV)wW@'E~b␮iB{bɗ6G.H hEMh> Sf(N#P/++:uH/Cb7!9$P@J@+hrwt^Z&0P@J@4!&K@+hrwt^Z"K#9$"RjOȀ=SZ:RkAjaݛž۽8G] ޾(rG %TP!wRBU#/2BҚ;Щ;HcCؼCAJכE#y1QN] ҄"wdKw(H (rG %Vȋhrwt>Z"wdK;vDvDT# }Lѵ EȖv@;{ (rG %y{"FZ;t>*wdK\@J~/E>O(7R@+St>y:5Edt'Bt'B4Hx"Qd _hH}Hc;F6b7H4Hi# ǵFYi;Щ6HCHi^6)k"mRj@+m)!MT]  ք R (H0H-ޞԋʛz>yϩ6$H RH (F %6bZ}(wW@'_9jkAڋmii#&K@6)#J D}Nѵ EȖv@W^%HVȋhrwt>Z"mdK;Hi#;i#oO|V_9ʍ;4$hϩ6$H(F`/Ei#oOZiHR4F6bwEKF G.F G'QnV|t>W`P+v@{-&y#҄"o@g)G}VȊPd^Pd@JLHiB+S45R@+St>y:5E)b72Pd@JLHiB2E^@S#2E7_SSt-/EVl RkBAj5  \/ h.G}%ޡV쀢/"Pd@J@+S2E:1E_Z E4HK<wi KK}ռ?*cש6JC㊴H /F %H{ oǵF׉6jkAz"mdKRz' (F %Hy{ FJO'tЄ"mRP@J@6)EV(7R@+mt>y:F_6bwCB EtCBȭ#75R@+mt>y:F_6bi#{iB6)M(Fޞ86ʍJOށNWE%H&i#҄VȋqB+mKہNWE%^P@J'N,QOހ~Oѵ`Z RRR (H- &PZ @FGn..wSm]i#+v@6{ (F %HVȋhrwtZ&w* F Rڟ E4y{>FV +pO'tj+SdnB{עG.2E %"S@gherwtbZ&"[M(K@))EV(7RO'tj+SdnB{ע E"Pd=her#2EwSS]"+v@){LHRLHRT"/Gnerw=|;Щ)L;"~/M(2Eޞ8)ʍԄV|tj+Sd(2E`/E"҄VȋqB+S )KQoQ"Pd@J@4y{V(7RL=l@xPӝRAP@=yBFNٝ/CSX#"PbHJ@ S,F)*+S24E (1E9"~/M(1E -LQHMhG:0E/CSXEJLI hSlOZL=$nB)"{ (1E$%=h9yMKa])"{iB"Pb@ ST4R@ SԜחyJLK@)")C)")] S,KQa;0E/CSXE;"PbHJ@)")5'0EE#5)jN'th^_ SnB)"{ (1E$%YZЁ)z}ǂ4R%SDRj'NhaFjB SԜM] vVl&)֥PZ"Z@=ÄF.&|tj(~ (2EPPd@J@))L# -8_^ (2E%}JڧOiB>Rz1)*+Ǔ 2DPd@J@"oO|V(7ROށNMkrLH (2E E"oOZHLVȊݥ"&"҄{ (2Eޞ2EZ;Щ)zL;"Pd@Jy1C+SwNMѵ ])ݥK@))E2E^@҄V|>SSZ"+vLK@))E2E^@+S ש) EȖvLK~/E2E^@҄V|6)@L(H[.H PZ"Z@=R47r5wSStL;;E`/E"y1LQNLMb^ ҄e̖6\DMh> Sj'N#P+S+Ǔ [eMhZEK@))D)ʍ#2EwSStL;kPd@J@))M(2Eޞ2EZ;Щ)UȊPd^z"SRPd@Jj@+S)):[eE%"SRZ"/wherw] ҥ"[]){%Vȋherw:5EYPd^Pd@J@))L# ݦZ&"[M(2E`/M(2E KQVȋherwx6)@L(H[.H ք R '\FKQ..wSStL;"Pd@J@+S2E:1EwY) -2Ey䂔'jB)MhG*~ȋ%)NMѽ2EV&"{ (2E %^Z"/FzV|tj)b"{ (2E %y{;2EZ;Щ)WȊPd^LH鑋LHiB+S8Z;Щ)WȊPd^LH (2E %)bZ]C'>5Eׂt)BȖv"d^z"SRz{ heV(wW@'>5Eׂw-"SRPd@JLH heV(wW@'>5Eׂ"[M(2E`/M(2E E/E&" MMѵ`j RԚPZ@AjM(H- &z1͍\\\@'o)$kY\[L(H (2E %Vȋherwtbd!&ZE@&O h҄)S>%T4E^@-LQO'tj*SdLK@))Pd=k=@+S+ǓwSSV"+v@){ (2E %^L'LQnޡ):YLK@))EȭLV(wWzvSSV"+v@){ (2E %VȋherwtbަZ.ELK"d@J\d=kR(LQNL] PdliKLHiB))MheV(wW@'mj (2ELKLHiB) LQn.EI OMѵ`j Rs(H ք RkB=ÄF.O.ESSt-H@)̈́"SRLH heV(wW@']bb hoQ)~/S>%}Jڧȋ%)NM{e=r){ (2E %Z{#2Ez OMѵ MhoQ4"SRLH 2EZNM{eM(2E`/E"y1>r+S ) ]&"Pd@J@))L# OMѵ EȖv"d^!SR!S퉏FꑛNL] Pdli"{iB))Mhe'2E:1ESSt-H@)Pd^LHiB) LQn&2E瓷K] vVl.E LHw(H- &PZ @&47r5wSSU퍌)E"y1LQNLч,] ҄ermi)OԄ)S>%Z1b0EzYLK@))E2E^@S#2EwSSQ"+v@){ (2E %Vȋherwȝ)w(2E{{ (2E %Vȋherwtb>Z"SdK;t)Bt)B/E)ʍ#2EG}$-> SRLH h&2E^Z]M}LMѵ M(2EPd^LH (2Eޞ8)ʍԄV|6SSt-؁ZԚPZPZ@AjCAj5ޞԋaBs#\\z>y:5E)b""SRLH heV(wW@'SbbiB{L-m %>%}Jڧ)bj`rwx>SSY"+vLK@))E2E^@+S+}NMѵ M(N-&K@))E2E^@+S+ǟoЩ)L E%"SRZ"/F)Љ)kAPdli7Pd@J@+S2E:1ESSt-H@)Pd^LHRL'~lLQn>T|ȝY{EC))E"oOj=Z]M}NMѵ M(2EPd^LH (2Eޞ2EO&kj;P+6 RkBAj]@j;z1LhnkB'@2EV"SPd@J@))L# }BLLѵ MhoQ)#?QڧOiB>Ry1d0EzZ#؉~~;SxMW$ɼ&m5Fׂ4Hn\6{i\6)PF^Zi]h6$H(F`/Ei#oO SiH h'76F`/=i#P=hr#4uW:F_Smt-H-&i#"mR'QnV|6Smt-؁ZPZք RR (Hw'bxF.&|t+md(F`/Ei#Jy1QNѷD] ҄Je}#?QڧOiB>RQy1dFz Sڧ4}J@&O #M#P+l }BR"/vJLK@)")%0EbZ:0E)z,HJL/=aׄSDRPbHJJLѳ=?_0EEwt`n/CSXSK;^PbHJJLIiB S,F)*+St{ǂ"_% %4='0EE#uMH@24E (1EJLK@)")%ٞ0EE#0Ehhn/)bw)"G.1E$G.1E$G'-LQH-LQsthn/)b"{iB)")M(1ED)*))jNހNMѵ`Z R R (H- &PZ @.E h.wVȊPd^LH (2E %)bZ]4fZ&(RRڟ Sڧ4}J@hZ2]=OVȊ݄"SPd@J@))L# NMѵ M(2EPd^Pd@JL'CM E)Љ)zkAL-"S~/M(2E L# NMѵ EȖv@){ (2E E'2EV|2~d@J[))E"oOZHLVȊݥ".E)b|F he'@2EV"SPd@J@4y{V(7R@+St>yzkb#PZ\Z@Aj5ޞԋaBs#\\;Щ)UȊPd^LH (2E %)bZ],;Eׂ4EYȖ6\DMh> SHESԒ }BV"+vLK@))E2E^@+S+StkAPdli74&"oO|V(7RФtbnSSt-H@)Pd^LH h&2E^Z]] Pdli""SRL'Nher#5):CV"+v޵c 2E %"S@+S)):[eEK2E K2E Gne)#@V"+v@){ (2E %Z{V(7RZ] w  z R R 'b4ׄOށNMѽ2EV"SPd@J@))L# e!&Z&( Rڟ Sڧ4}J@hZ2]=O+SdnB){ (2E %VȋherwtbSSt-HL-&"&"҄"SFZNM= +vڻ]))E"oOj=Z]MݧZ&"[M(2E`/E"oOZHMhe':5EYPd^z{ (2E %y{"F he'@^"+v@){ (2E K2E KQe)#wbSSt-H޵c 2E %"SRZ"/FI iB+St>yз)@L(HKH-  z \/ h. =YLK@))E2E^@+S+S& 11Eׂ4EY\[rAJ@5}J@&O #M#PKS+Ǔ YPd^LH (2E %)bZ]) EȖvLKLHiB)wher#L}B2EV&"&K@))EV(7R@Sw5S65Eׂ4nB){ (2E %y{"F he':5Eo)b74ޡ^L'LQnV|tj*Sd(2E`/E"ҥ2E^;1EoSSt-H\dliPd@J@))L# &}j;P+6 R R R (HG.H-ޞbOށNM{eE%"SRZ"/F)Љ)zkAޢ,SdKG.H h&O h҄)})bj`rwx>SS^"+vLK@))E2E^@+S+S>5Eׂo/^H"Ҁ"QdE}\ϱTWȊݸ"mҸ"mR~/EoH6ʍ FwSmƘ;xѼ"mRW@J@6D6ʍJOށN{E E4H^֞FZi;Щ6z;Hi#P@J@+mxCQޡm>Fׂi#[}AGn"mRZi#/F6Љ6jkԊ̈́zԚPZ@Aj^ @s##7#c h/^ë́"mRH hV(wW@'CJb hTOiB)Mh> SHEmԒA }BFVHi#P@J@+mF:FSmt-H`dKG.F`/M(F Eߡr#`t>yЩ)L E E4&V(7R@+St>y:5E)b"{iB))M(2Eޞ2EZ;Щ)L;"҄"SRy1CS#2EwSSQ"+v@){ (2E %Vȋherwu))K2E!S#"#K@+S2E:1ESSt-؁ZPZCAjM(H- &PZ@=47r=rsq==r?Z"SdK )E"y1LQNLѧ,] ޢ,SdK;^ڧ4}J@&O #M#PKS+Ǔ Y{"SPd@J@))L# }NMѵ M(2EPd^Pd@JL'C+Swhe':5E)b74&"҄VȋqBS#2EwSSY"+v@){ (2E %^Pd=qB+S)):O*gNҧ^ۈ'E %Hz靾iW{Ng؍+F`/Ei#Jy1>+m+m9FׂtCBȖv7$^!!mRz"m_3DhrwtZb3  &PZ R (H ^ @s#7#k (FPP@J@6)#J D}IILѵ F%}JڧOiB>RQy1dFzSmUi#+vKHiB6)Mh'FϷjJYK@6)E'FJOށNW#+v@^H (F %'Q&tbZޡk-"Pd@J@))L# }MMѵ EȖv"d^!SR!S퉏FꑛNL] vVl LH ք RkB=ÄF.OޡSSt-H@)̈́"SRLH heV(wW@'[bb hoQ;Ԗv@OiB)MhG*"/F (wW@':5E߮-~v(HkD"^/G-~9kѝh6qEȖv㊴K㊴Hi\6jr#ųFqjJY!!mҼ"mRW@JZi#/orw5m=Fׂ4x i#P@J@6)#d46:OT}WȊ݄"mP@J@6)#JjB'{iB6;K@6)EF^@+m+m=Fׂi#[EKF KFޞx)Qn6:6z,؀z%?I(+J LϞSSZ"+vLK@"~/L# NMѵ M(2EP;K@))Eߡ)ʍ;2E YPd^Pd@J\d@JZ"/ LQ&tb^Z&"[M(2E`/Mh"SRZ"/F)Љ)zkAڻ]))M(2E %Vȋherwtb^Z"SdK E Ey1LQNL] Pdli""SRL'^*SKQe'o] vVl.E HG.H-  ԚPoO0 h. =[eE%^LH hVȋherwtbn] ?ks4>%}JڧijO#Luҏ\݉6Mѵ ={y"mR%Hy{ QJ DݦZ"mdK;H4H"m@+mj'/ԩ6UȊ i#&i#҄"mRzWȋqB+m hT] ҄"mdK E E4^Zi#/F6Љ6Mѵ EȖv@4H&i#Jy1QNm (FKHiB6wF:F6$H(F`/Ei#oOZiH]*mt>yݧZbs)#PZ\Z@Aj=r=ÄF.&|t6bi#"mR%Hy{"PYZi]h,D] ҄Ne[SStL E E4&2E^jB'>5Eׂ4nB){iB))M(2Eޞ8&" ݧZ"SdK;KLHiB+S2E:1E)l}֎)݉()D4HYjbNThި~Tt'>Fׂ.FϕEDY#]d,}?;Zt?v]z:k0bs]u ^ZcZxAj==0΍\Ӛ !UɊP^H (rH %֞rH+&?1qHׂ4_&O h҄)S>%TtH^jrwx>SV9$+vK@C)E rH^@S#5C::d9b0P@JHiBCGnr#rHwSV9$+v@C{iBC)M(rH V)wW܉Cz:kY;~B) (RH E 4H!Y c&Ug s:Jon7~Yv{E> D$~/M#}"ݽ46KׂtECG"R‹H /Kޞv)I:JoSt-H@QPd^H (2JޞRnVC:=ߧZbs]5 K Ժ. R @K h. =:!YK@C)E rH^@S#rHwjhoa4}J@&O h҄) b) =:!YK@C)E rH^@++ǟo:uHCb9${iBC)M(rHޞ8CʍԄV|t+d(rH`/E 4!&rH^Z9]M!Oҵ rl ޡH"&I$҄"Z})7R$!Oѵ Ś-"oP@J@7Dt??WrwtbާZ"SdK;"Pd=her#5):C= }lAE"Pd=her#2E7SSt-'ԊͥPZ"Z@Aj]@ju)^ 4#|tj>*Sd(2E`/E"y1LQNm! 11Eׂ4EY"[ڼCAJ@5}J@&O #mԒR+Ǔ YPd^LH (2E %)bZ]) -&"Pd@J@4y{;2EzV|>SSQ"+vLK@))E4)bjB'cjiB);"ޡ&"oOFjB+St>yЩ)0]>Z޵c 2E %"S@+S)Љ)kAPdli7"Pd=her#2E Y޵hB))E"oOZHL ] bPZ"Z@Aj]@ju)^ 4#|tj>+Sd(2E`/E"y1LQNLѧ,] ҄e};?QڧOiB>Ry1d0EzSSY"+vLK@))E2E^Z]M}NMѵ M(2EPd^z"SRz"SZHMhe':5E)b74^LH (2Eޞ2EZ;Щ)L.c?+v@{עϡ"SRL'LQnV|tj>+Sd(2E`/Mh"SRL'LQnV|kj;Ԋ PZ R (H- .E Ժy{P/KQnRt>y:5E_)b""SRLH heV(wW@'KbbiB{L-mn %>%}Jڧȋ%)NMWeM(2E`/E"y1LQNL] ҄"SdK E Pd@J@+S4I!C+St>yЩ)L E E"y1LQ&tbZ&"[M(2E`/M(2E w(2Eޞx˭LQn&2E YPd^Pd@J%y{"F he'@2EV"S~/M(2E %y{"F he'@2EV"SPd@J%y{"F he'o@ZCe@j5  RR @.E h.K}WȊPd^LH (2E %)bZ]oY) -2E傔'jB)MhG*"/F (wW@':5Eߕ)b7"Pd@J@+S2E:1ESSt-HL-&"&"҄{ heV(wW@':5Eߕ)b74&"y1LQNL] ҄"SdK E E4y{-2EV|>SS]"+vLKLHiB))M'LQnV|tj+Sd(2E`/EKL'LQnV|tj+Sd(2E`OٹȶVW @kbAGS.<+1)8V["RT2"RBm<ЌAЌw>5Iհݡx6~7> y#H']徇gP /_NZ$EO )ZPBZ2" MHѽ MHQ2] EO Rt5*%VZ*ZZ%C/ՖP+zCH{B)!EX%" %d(!ED%CRt/zCRLW6HS] !֓J(!EDRDTJ(!E<>݋Є%ӕ R$EWC0f-:r )"*%"RB )"*%4!E74!Eteh>5I %hV %RDTJ(!E&(rRTߡMRUPBZJ(!EDRDTJhBE0Hb&)z}JH*VRD֒ %d'4!E ehBwC)!EXJHYKRDT2" )}B ehB7C} jPO@5 q0 T5UtACcq<w 풢 DoƖ5kO@%Cd("E@%C)*Uf(NWvH@̈́.la_"g*?k"?kU hJUR ?~ï~rW=uGFϋa<[sP]DJ"jTrZrRyw4krÐ i6z3Q)!P)!rZ˻^Jaw{Z.I@"TVO^ܥK!CUB; ːfCHhMaYkz-PPĐJf iCӕϷ'ː^2d*!d(bH@%CC*1Uf )NWvҭːfÞP+ TPw(P Cjܡ@5 ]qw*:C [Bo]45GG.PPPPĐJf iCӕt2  UJ(H@"TJ(Hk<>WxuljJӦvB+VGngdhRB7*%q#RBm)TB3RtyOh1~܊UBk֢"DJ"RT:r)Z|B3RvHk͆PDJ("E`-HPPDx)TB3RtyOhfȊUB)kEt"RT:r3R>)UB;KfCH("EZ%"HP)Z24#E HQ 퐢.) PD2^K EPDJfh)ӕR%Ea7Ԋő T@5 TP aCW9Xwз.) PDH(PPDJ"RT24#E HQ 퐢7Ǟ К 8oZ2V)J*%VKbt? +C; 풢Y:r)kPDJ"RT24#E HQ 퐢.) !YkPDZJ("E@wx8Hݡ):'K2Rd*z-HPPDx)aJhuIl EZ"R֒ Eh8H{B-#EVHXK Et"RTC3RHQ!Eo]R4BB)*PDJ Eh'Ԡ74#Eq2C޺h6C)PDZ2^K EЌ74#Eq2C޻h6Z8rj"G.P Cj T#@5 ]q ]EghCcqzyC߻h6C)"@%C)*HPЌ74#Eq2CE!:h6Ck2HVkZ*ZZ%C/'E 5#Eq2.)zH#" Ed("E@%C3RЌ)zHV E"RTJ("Ek<HQЌw%E)bPDZJ("E@kPDx)):%EeĬXZ="RTJ("E@%C)Zf(RfnhgȊPDJ Etfh8]ݡR%E!ܡYku"RRB)*%5ЌA*)z EZ+C)kPDJk))ZEЌ)蒢ٰjq8rj Ta(P Cx\BW9%E!H *HPPDJfh)ӕR! !E!ZSA2^K*%VZ*z<)ZEo))ӕǝvIGFXd("E@%C)*Uf(NWvHG͆PDJ("E`-%"RB)ZwhF uf.)H"RRB)*%"RBm<ЌAЌw 풢Y2" RB)*%5ohF ehF;vI^;ҷOJEkqܟsuvG͆kgwk"w5*Q#RZ52Uww'*ìn!}tlEy.@;]J"dk-Zݽ&w;@ f0l^հ T^GjW}gq,C;oWg(͆`(JZ|*PPJf@iPӕ)XJ!ZÖ2^K*%VZ*j'ԊP+:+C;  (Y:rPkPJ"T24J ̀R .P !(YkPZJ(J@"8HݡP:' >3d*(PJ E@ (Oh ̀y.P̀+CPkPJk)(f@)Rf@nh(}fY2z֒( ED գU ^=aH]4^=E ;A$RBDZ ^=TBW; bxӊUBk"PPčJ גxCmf>a24)꒢ٰ'Ԋ@5 a(P0@55g*:C 8 =%KfC0"k-\ EdhFV8]!E_R45EZ+CdhRBk UJhʿzPS:R+C; 풢Y:r)kPDJ"RT24#E HQ 퐢.) !YkPDZJ("E@"RЌAHy=]R"+V E"RTJ("E@fh}B3R?nh}eȊd("E@%C)*j HQλ]R"+V"R֒ EdhFV'4#EqJh}uIlw("EZݡt"RTC)Z HQ{B+#EVHXK EPDJ xC3R)C3Rt$EWÖU<JTHGRrC3{!ED%Cd(!ED%C )"*{d>n(D=!Ck[Z2V)J*%VP{/zC PǝwC)!EXd(!ED%C )"*{d2Aޞjw(!EKT2Q %PB MHQ2H%4!E{B)!EX%" %PBJ MHѽdJh=5I.vZcI@QOJ~^k33MKsqdg%qmbbWZ`#Mѽ`d2ޞj*FP 6"kB%؈tltPl RMQ&6z{J*V %؈lDTJ(FD&^ 6*v }bٰ'Ԋ@5nTH(P Cj$k<. 8r;vsXZPz-P 74Fq2vC$:h _-$F*YkqZ(Ck UJh6P+zC PǝwC9FVXK"lT2a#6ZEohteh=wl EZZJ(F@"la8H%4FvsX%a#P)aU ͰQF]l4BBk;`DT2q# M^0]"%4y|{B9#EVHXK"RT2")ZEohFt)zHVw("E`-ݡPDx8H%4#EvIsFX%"HP)U HQz|/]R4Z0Xa(P0FBj8ȑXw 풢Y2" E/ EdhFV8]!E/R4BBk2rCJ;*J*%VK_\Eo)^<'K^2Rd*d("E@%C)*Uf(NW 퐢.) !YkPDZJ("E@"RЌAHy=]R}׎jl"PT (E@^kHG1{%UV\;襋fC+FZnR\d/F@%{3lͰQ `F!Z=!!lT+F@%C6*aUf(NWvK͆`(FZ%a#PBEh_6ԉaF/6bȋXK EPJ Ͱ*f(NW `[͆=V, TP a(P0t%tq#8 =%F!ZqZkq Ed(F@%C3l 6ul"ldZ2V)J*%VPA>VZa8]zyOh2ldE%C6*P 74Fq2n]l4BB6*PJ Eh'4FqC3ltyOhݲX%`RB7*%q#RBV'4{(NW 퐢[͆PDJ("E`-%"RBdhFV8]!E.) PD2^K EPDJfh)ӕRt뒢 EZ+C)k)HC3R;4#E;Kn)bu"RRB)*%"RB3R>)UB;KfÞP+ E@5 PH(P Cx\BW9[B_h6C)*HPPDJfh)ӕR* yh6Ck2ПVkZ*ZZ%C/ht(NWw%E)bu"R֒ EdhFV8]!E]R4ߏrG*]@P)j8pzT}0Wݨkχߏr{\5y^;XKiEVDJiEoʻU5eÐ^ i61$knWĐZ /bH@" 8cHq2Ð^ i6CCPĐZ2^KyE ׌!74cHq2Ð^ i6+BH_e*!$R@B2Uu^kwWٿ|]c]@5JVPk^JqE@  (ktPzٰV, 4 TPya(P0t] H8 =% fC0%k-.T( E@ dhV8]Jo45l@Z+CdhRBk UJh|B Jq2.Pz[ta7T҉[xPOēJ~^kOHrOHa:Y]zҥC*/WJqExi5{)R~f!wJo' X=!!R^Q*%R^m)TB3RtyOh}dȊUBk֢- Ed("Ek<ЌA0]%C>h6"RdUB)kPDJ"R HQ Hy=]R"+V HPz-ݡЌC3RvHg͆=V, a(P"0FBj8ȑXw%E!HG.PPDJ"RT24#E HQ 퐢OQ) К RdZ2V)J*%VKI*zCMHQ ='K>3RdE%C)*Z%C)ZG8]!E]R4BB)*PDJ"R HQЌw%E)bPDZJ("E@"RT:r3R>)UB;KfCH("EZ%"HP)f(R Hy=]R"+V EkPDJ"R HQ Hy.) ,cbК{("E@%C)*H74#Eq24#EwC3#EV EkPDJkH*;4#EqC;Kf~Z0FBj TPE@5 aK*:C GBcqzyKW͆`("EZ< Ed("E@%C3RЌ)萢 ) EZZ%CkZdhRBk T7Ԕ{B+#EV\DZ2" #7#Eq:rteh}uIl EZ"RRB)*%5ohF ehF; 풢YJ("E`-%"RB)*%4#E܌*R%E!$"kHXK EPDx|B3Rf.)H"RRB)*%^K"R HQ Hy.)H+C)kz-%"xC3R)C3Rty7K2RdPDZ2"RBd("Ek݋0Hb&)zJH*V %RDTJ(!ED&^&()zj!ܡꡈ"JHQ)dJhB6ISBVJ(!Ed-%"RB )"*% MHQ2Hb&)zZ!NtWJ%Pj<R=68WٻZs6bDE_a5"*P#RZ 5"*ZrRywݽ&w; ːf1@5 T].PpTrwCm{[v@i6NV,Z5ޑ(E@ doV= A@dh( J!ZÖq[k0 T2%( ̀*zC3+C;@ fC0F22%( E@ dhV8]z|JPbuHFG.J@%ҍv (λ]%+V"RBP*%%RB3 (Pz\CPk)(Oh P{B@9JVXK E@ PJ ̀*A (w գw+VWZ2zDT2^K EDi'4yh7d.x#CWwC 9aHڙ2 ֒!D PĐL)C¬uvK!͆!kGwj<p} T]iᮩ d*no wϟcK!͆]Nҽ ]Jk]J^kU^*Gs.P ';k)'E< VO^ҥKacA ޚ^DJ"T7K螌 u$C;tKfC0dwW:]*ݵ.'Uft)NWvK.͆`hgz-P).ѥUft)NWvK.͆BEpyP\k). Z_k ueq!WDZJ+"M@"TJVsvK"ӽvva'E .N@%w*w/wwkriww 0lmaQ(E d/P@%{m<Ɋ (C;Navba(Po7@5 q0] T5g*:C 8 =%EMa{v׎/POJ~"T^K~"d*w?juQlqEZ:@"T+bM@%{í)]ul|f|wPDZk Et dhFV@ѥۥK:kR@\*Y%SϿ>WٻjuQlqEZ"R\d/BM@fi}\3+C;EM!XV"֒5X^dT@;o.«6/4/t#TJ(K@xV vҭ fCHhd􄄈PPDJ"T2DZjE2Ðn]45! E d(bH@%C3Ќ!Cz2ٰjj Ta(P;k<. Gn,C;owk!͆`(z_Z"2A$"xCk߿6zb EZ+Cd(F@"lTJhVa8]F]l46{)PEPDJג r!Us[?~vk!VĐJiE V& )Zvk!͆=!;oEo+E VOvK.P ';"ɌxPdFaT7?nq>f2GΊ5>ZR|*%}P41R*օO!d""g4ZOƃϮ%ۯO*ܵJɮUV)ٵJ_PVto{B-MOěZr &S7BTMxSMo]4B\pd/N@%{p*{]EDALo]41Yke(bL`-1NVĘxϭ74$Cw;o*-v>Tk)*P)ZWK}w .b XD DZJkE VOìn7uyl1MZƈ7doE doƛVoӕMa7ԊU[j@5 a(Pk i6"dUB[I`-%TJh TUҽ+C;裋fC0q#k E%C7*Or 74eh}vIl bq E@5\8rj T#k;UB;ˎfCH(bGZ%#P)f(R @IvW͆`(bGZXK"vT25ohQ Hyg~<5Iհ#~w##H']M_YLd7I>Rd(!ED%C )"*jyL )*v th.~3>U UJhJ U2V)JxVAPknh}<%h+C )"kPBJRDT24!E74y( me$EWCCk)"*JHQPBJ&^&( m&)`ohA;o}) {BX@5 q0Ƒ TPG3tݑ9 qw bw~|&U#V E%C6*P 74Fq2vC):h /Zܡ@%CZ%CkZd'Ԋ0H%4eq.6z^ |k/@f8Q#*}) sn!=wlؐývv!$E .BH@%w*w/ww}s%4]]#RvP*(bLU{&@9vw@9JVj$#{P*ًP^xU8Hλ]%+V"iP4F@ tg@iStuvs(͆%kPk)(Oh (wJPbE@ d(J@%CPZf@)Rf@fK(͆=V, a(P#@5\8rx8ah,#nh(d@Ɋ(d(J@%CP*Uf@)NWvҋ`E(͆ d T2Q U2V)J 7Ԋ`<' ^3[FG."J@%Cd("J@%CmPӕϷǵ nPbu"֒Z:P*Z24J ̀R [(͆PJ(J`-Z"T24J ̀R [(͆`(zZ+CPkPJ E@i?!&f@)NWvҭ fC0-?e2z֒( E@i8H=e@~v-J%PJ'.J@%SG}7JϱJ|q"֒ZJ+J@"d M\>ktٰ{.I`-xP)Zr$SU^kpa=~-]4֊ŷ-GF[DfF4JШƠk ~syIEg!I R/Hyjg=;Fitkn7XEo(%P@J@Wo(͢zC)wW@;BJǂp^ R'I %'x{;v\x:SEcn]t,Hom^W[Z|)Ev K/K=5uerwcn]t,H@]Pd^"RZy]٥Y@Wv)wW@;vֵKǂx"t @JZ_Q<\)DrRo꫞5 sǥjM˸W^^])^L*^nƚfw9"ݮw-UE %;"R:wNעyNǂx2.dTmc3_r^?6CR]3P4uJ?;ퟟuLNGUZE\Y=S:%uJt)ѭS;Ӟn.s-zcAݫ]jAjp 7@jpTqߵ;S_T8#Jb!@Jx;N %^‹$H JB͢)ڑP] u,jXm" RZ%B{1%?ЎwzcA--4HF y'PI;͢NN]t,H@wP^P@JwTf{WɊŸ"R‹H o,q͍ϕC_9:Ϥ>ѷb9$K@C)ЕCEtrw5uHǂx"tf )$HWu)OfZvgW( q_$@J㊄Hi\PqKu%rw#>BX"dK RW&Hi^ t%r#uC] +>  %҄"Rz/EB t, ] ]MhG(}vұ M(2Jz/M(2J %({y0%rЎC:cA|BB ZBB E t"d ?!bMt;B+i\k2 - %"R‹lRnn+r~uұ b R R R(HwEwF8&t됾Jyzm !H'RH %H!x"d;S_7Zt;/%}uұ ]ڞ.I`/M+I i],U=tOwkإ]:D.]+N %."R:]Kע۱K_]t,tJ=]$^:\).Kfӝ?nnG5}uUӱ EZ^]{.zu D&KUtϽ<ݹ3X΋L_]t,tvV"]@Jtt2ttcMt;+KPV R" R" R»P$Tv$WWB PdliY(Y(Ҽ" 5IUЎwzcA-"P@J@w@W)7RcWi)]t,@Xx'Ƒ R(H#PGl:nBs#\rNջKVF@x)E z恦F ݥ#Юjÿ;j (rM`/M(rM E 4Ԋhj&c]t,HG.K"RH 蹗U,ztEJP:$( (2J`/(\df{ڛI=TЎCwұ X [(rH %!x"d2XYW uH5ƫKWmO0H.rH %!YpHpHv} ߻^=ZՈ.z DK7W@J7s*#]t,'3Iʭ)=:W]@J|*^n|ItcMt;v޵KǂHɥk.K`/Er D%KUtϽ<ݹO'󣫚U۞ 5Nf R.H]' rtS_ڠn;=;]=]^[%H;"d*&v%cKt).rP =)O7UtcMt;F5Rǂ(0Smb\!EF )ޕE'0r#3i*GH Pdlia@J@+4FF t##5,z+#+#cA|vBo5]+O %)Od,UR_5 #5Rj+2R`/ѭ]d@JtTEwaR_Ewa#H]=]d^[%H{抌H^dGH ɌԵr2{.2R Gz/EFR.Tfwa#nH=9+j٭).2R %HY0R{mKH c,I('3Jzo⯞=?&/˿~\/M u.H@kC")%K@*z~O/ h* h;_\F@x")%≤'҄{ jW+Іj4Uӹ e)D5z/%t&t+#/{| ēDRILI%iOH3&Uxc5 tizsv]ӭ͍7HJtw")%i*;徊nN爳N읾k{;ts%މt{.N3U)Utw*>GN읾k{;Dx'z/%i*^d)Z's;_\Of❾WI.N$%;ν*;jvw*>Gݦwd].Nd/ѭ}x'4Sr_E7{s[~_5:?_~Ǘ~u2'"z Kx딎:%uJGs^kȳ,:ߘr@rӄvL[ Pdli""SRLl2EvL Z oٮ[ HE"O$,5Fۻk/gS_ws'6z Y#z/="kR"kR{Utϔ*8C:E Z}D)$]@JtϽ*gӝ/|YݎPz cAJf[ZjP{hFB t4{ J(͢vZ ]P:$H( h %Ҽ"RjF?;RnߕP_9]߻BXZ 5n 5ԘP@AjL(H =, ͍@sqLhW(eU> x"R|Hgxj)wCM}kإ]:ǥ[KEr D%z/=S3RE޻X"t> LH.2M{ysg&NǂHik.N`/E Di'KUtϽ<ݹ3XݎzJcAzB+4Y(^df{V+ huw:$H< (O`/ғ1O {E,ztЎjz益cA\-{iBk)E 7jEԊh* h.wұ P\VoH.4H.N\$,UPϽ u|C5j:qEɖVTKx4H5ufяkJRM+3q몦cAjB5 RP Rl;g͍@sqLhW555YZE &Pf{XZRk H- 58rAjtM,:(#Ю)X"+V@){ h"SRLl2E2E+GR?\PV֮EZN h҄)SPkjE?#Ю)X"+V@){ (2E %Z{<Е)ʍЕ)_9횢$84&"҄"SRPdf{<Е)ʍ]Mh}tMѱ m_)D"O$,5l,~۝*ORf9vGW@Jx6)Ei?3C]i]kG}tѱ }AȖnH (F %^,z+m+mFǂx"ktܾmRz@(x"kd=mk8C:DH!]+tB{.RH %H!Y{ƚvgW( al H R H 5wwEwF\@WK]t,H@k2T %z/EBi] H] #PɊPv.uնn@J|Hi@O)D>Rk)w oƵc>vXWmO%%Ҵ"R:~Ͻ*gӝz-Og>x]dg']d@JL*^nf7D>XgtE %;"d.sz)Agik.N`/E Di'KUtϽuM1v}:߲]=Έn]d@Jt5)=)O7UtcMt6ҕ輻tBnWqVnR[_QHivBTEӍ}XݎPwұ ']+tO{nf${Utϔ;?PSEc]t,RV,dHhFv R^df{܃,:֕]_9]t_%+V@]{4Pd@J@]@Wv)7R@Wvik!٩3P$@J<\)DrR{W5t益cA:jYҸW^@JxjRMRM+q{!W@JTH (RM %^z^ZY7H]#Юj'"H5"RTH (RM=~BW)7R@WiUMǂxZxBƑ R(Ho4 5Ԙt݄F8+G]H͌ b%"RH )( cAPWm RZ܈'J %^P$,UGݦzYᅡ~ǟ߿YERKdI oȪ=ϿϿ[4REwa/M#u./1R+w΂4œ)Ҁ#5ST5si/=<%ERWHJx")%Jj?g~\S#35 5n:ǂxZ8Aj1 58Ajq8F8&t1&Θc'$P$@J@'PkjE45R@SQ@/q/iBk;\H (rM PkjE45R@SQ@W@%+:v; )uJ@&N hPkjE45R@SQ@;B+iBQՄ"Pd@J@Q@ϥo5&C@-+ :5t E 4^P@JHi@C󿩯»pHvk~qHH!D)$]@JtϽotc_E7T|H+^;8 AR]@Jg1I KtTELykvk. ]j٭HJt])EvR݅]J}݅]8]"RH.K %H.Y{g7UtcMQMo]t,{ն R.H.H 5 58-Uе:ڠavߺXfw[R[_Qtv)ѭ3U=S_|_mtm7QWm?"RH.rP{yXvԛlGH ba@Jxk=S ={hz/ )1_0sl߿ײBqTo]Gu,HO2^?Or/ ) ) ) ) ) $i%+ۭ~6YD:ӛxlz.ݥN U:%TuJPY{b3Z+xj+8=V3{SASASASASA&~@3:SvM]vG#HrS %RMYzZW[tn%DF>@ AD>KxqE{HLrQouG(Ҽ"R|lj=@S#4c޻XU۞ 5xPVɊP^Z%!{ !͢rHr*?qHr ` hma4uJ@딀)Mh:%?V@S#5(+G]rHVF@C)P@J@=!F !vGzFZ ayAJ@D)E 4H"xr#thW}a~G@딀)uJ@&N h҄Z{WVɊJW5^P!(T*}Ǟgvru,wЎ)ztMѱ EȖVPd^:r))Eh]H]5E2tEt"SRLH (2E=F vM# E"z/+S42E:r;5Eǂt"SdK#"{ (2E %+S4 h=X"SdK+"ґLl?rW(7RGK*nP('3Jݞ'ŧ ]5WTW@{h_0ڵ(x"P`fSjfST]9h\obv-Z4uJ@&N h҄Z{=-AG x9xz~됮!Y%!"R9U@3+tu\v(rH9$P@J@3ht㐮C ZÌՖV@^$H (H %o//WqFWW(F;i#C3m;4F'whW]˞|~jG Rz'BY#Od,UZʽ >kmvҵ7ZE t"R:~B)ot^ݎPBi.1J:^‹H /J %PZEfB)NW@;B EBɖV@^H (J %f 8HmL(]t%BS;߮H(^≄H'J %oMR&B;6wW(vb@j< R ^/O 5+7 H.ߺ"R)Ow/¬Ej v4}V"z.2M &KUt^MwwWm;݉w'3Z \]@JtwTEsɜxv>ŋHh{ /O 'loV/RaڮtwU\Aɖf&P@J@3մhtj Pli&KpK@j)T*z*ifPGnmk)u/P@J@k)#׊hvm@] jBF R(H R(HW$@xUt@ X@Oށvғ%+V@]%Pd@J@3hftc] 8rmiq"RH ݲ%-qJOW((2J#%ґ[7jE4㐞C P$liI$K@D)EiߡJqCϕOЮ6z^rXݡ^:r7)u/Eh)z|kW˧v \$@J%HNܷW-<`Z[lGe"*HZ~!PPou#=}i?uicŹW?ww?.߾o?\_/O[SbߠP(#J Hݾ=u;Gÿ&}[R{9`GtgmONn:%uJt)=S3}ݵ&ϱՂ)ѭS[DNn:%g{<ݵDw9Q@&N h҄@ZP+ۓ j[XM(F`/Ei#L͢i]h[W „"mdK P@J@6)ʹ,z6Ў6uѱ EȖV@6{Et"m4\Ahbwn]mt,@6PK@6)EhʹQlfh j[X=C6{Et"mRr3m4~B3m h[W „li54&y?FmvM-{ȊՄ֮E?"SRLH (2E=hfb#43E):,bQۊ]_yY#K<5)DRe8a5s,t_X8GmK]tAj\ 5Ը~-Uе:ڠ+ݮCzBiv=]KtD)$],U=t׾ZݎPzc:k!=V.I %'"d;z7Zt;vk)+ߌAJxkףEv t5#R34ql5('إ׮]:.1H (K %.fvi=. h.vұ EvɖV@]{Fv t#4~ԙE4{))vW@;/%vұ E/% (K`/Ev ٥4Kr3?y۵K]j_it)Sr딀)]֞-?_.[3M]t,3|-f&{KW q}#4uߎS, hPK7O^g^Ë4C[q ۙ=R}5T^s]J]N {:ɶ&z(\\uӱ`P+?Ȁ@RH T 5P@Rl{΢9Pr'@V-;3&ԊP^H h"4Zj[RP@JHi@CTa,,C&i9V]^޳8./e@Jx4uJxƵN oҸZ{~{[+¡ߺ;"+D--3#d`/!ObC7j8~). hG$wEұ E"ɖV@H{ifϽ*DlHDL$Y8Hߌ[8HiK딮:%uJsx!"5ǡ\\vE{&X} F" %TH$P!RBY?ՄF U&'@"=}MB" 5 $!R=$f{O5HL$O^vE{&XM(I`/M(I E" 4HE? ЏH:_X1 5ԘP@AjL(H =nBg@cq|ݟ튤L$YDK@H)E" 4I聆F h&'@"3ԊhBI)M(2I E&iO PԄnO^vG掬XR&K@&N h҄Z{<ЇPz2E+Ю).CLHiB"PH h, ^9ՄvLG —"dln"҄{ (2E %zf(6RvMGfX]K;Z4uJ@딀)]uJ@=hCF h&t{ k>2Sd (2E`/E"͢r3S+Ϸ횢YZM(2E E4 LQl&43EW]S"+V@){iB))M(2E L, LQ&t]St,XY RcBAj1 5ԘP@g{܄΢9&4+Ю)L+"Pd@J@3S4hfbwtV3s+kф)S:%uJZ'Ԋhh&4t{ k>3Sd (2E`/E"͢))ڟ횢YZM(2E Pd@J@3S4hfbw5S5Eǂ"[."SRr;E=LQl&43E 횢YPd^r))M(2E L, O^vMgfXE%"SRY@3S+c>X\N-\d^r))]+73EO^'k>3SdjB){iB))M(2E L, LQ&a/MSt.X&t@Iww=JRB??R?3ФZ>߫^_\֮7SDRJLI (1E$%)z=%І)B4Lѹ -)Mh: SZ4uJ@2V@>&6M%1EX]"PbHJ@S(z)J+ϷmKbfJLK@4&K@S(z)J+ St}isAr)KwuSDRJLI (1E<(zA KQb mKbfPb^PbHJW.1E$ MLѣ&(&NiaBkע/ESDRJLI hbE41EIwa/MSt.@)K+"\bHJW.1E+71EI#u&8yrY\b^PbHJJLIiBS( MLQ]Mh9X)룶W4Hj|'{ 5O R_m??ks,zjczZWZ/F %HfhݸF7hk?#k2!{ hҼ)S:%@E44R@CQ@'FLYP^H (F %6E4FF6:+V*P@J@6)҄"m4' i]hKW Pli3 H h}\@J@6@~OZWn'WnW]2mdE%H&i#ҕiYi]MhG]X&i#[ZMh"mRH hfʹQ쮀vѥ(FKW.F +if(6RWn'WnW]~_e@E4ܫ g[»4t:c-]?Ԡ RcZAj1 5Zk)G7u Aw9ٽvұ`X|])="h)"N^sH6SOyݻ+BܱJWHǂ6.gV[Z_c#4tW@;. 1Eǂ0EȖPDMh: Sz?p4~B-LQ쮀nO^'k)b5"Pd@J@=~B>҄f(c]St,L-&"&K@))5}$)E~uB螙"+Vz.)Mh:%uJWnPk9H=CCwt{ k)b""SRLH hff?CC#43EW]St.Cr))}E4&K@3S4hhfh ke(2E %"SRLlr3S))ڟ횢{fX]t"SRr))MhffOhhfhk\+@AjL(H 5&P RlYt@c#X_'@53EV"SPd@J@))L,z+PY)z c2Sd (2E`/Et"SRr3S4LQ쮮܎)蚢cAr)ՕLKLHiB)HMhf'5E)b54&"҄Z{<F hf'@#3EV"SPd@J@))L,+73Er;kk(H SR(H+PW.H =nBgeB?X"SdKg(H (2E %fh= h}BtLѱ -0EZ%uJZNiB딀)of3E=yЮ)L+""SRLH hffLQ쮀vLg „"SdK E E4ghfb# LuB33EV&"&"҄{ (2E=hfb#43EW]S"+V@){ (2E %͢r3S+c>X\dliu"SҕLHiB)HMhf'5E)b54&"҄fhF hf'@sj$>j|(H+F<()Dk|-~_?/?wor[uՏW]{n/Mmt.KRC{RD?ԟ=ىg{:sN߫gtH:˘6:KI /qH$%Cz/㤑Ē6E~hW~3>X:%uJZNi^딀)EԒ)鮀nO^'n/CjBC"{ (qH$%!&Q@tW@tH0!ͥhHJ@5!&8G{y=Рt&8yЦC$i %%!&8$҄Z{X&"[ZM(z E4 LQl&43E 횢2 Ec 2E %"S4f(6R@3S?y5E)bu"SҕLHEtfh]]S5Eǂp"SdK+"&"҄"S4'43EO^&k+P+ R1 5ԘP@AjLl:nBc#X?y5EApg+P"H h"SRY@3S+S) 1Eǂ0EbW.HiBN h҄)5'Ԋ)vMgfXM(2E`/E"͢]혢Ϯ): EȖVLKLHiB)H=C3S?yЮ)L E E4&43E'43EЎ)욢cAPdli54&?)Ԅfh:]S"+VZ}E"Pdf{<F hf'@33EV"SҕLHEtfh]]S5EǂGmN=Hi@() (E ERkXʽuyg>}zijs@${JR~ =kȿ}-I+Ц6$h+DK@6")D=h hC_$\&V*NiB딀)S:%uJ@2V@ uBhY&h#mDRJI hE4FIw/Mmt.ߐjoH$%ֈ4XCoHz3!cצCLwJj{D!4D!($Ҵ{UtϔUtךf!/Mt.XgSJR[%>4'TEӝk~uvvإY.Kx]")%vўg(Gmh5K+Ц]$vi+.%mLI6Nң&v)&a/Mt.X_KKJIi@]=j4.cw"z? Ho 5] R.HiTARnjcvcUM=?j{4D&z/ERs/Ow5x!H;%3]4ۛDi']@J{U=SW]kۑP:7smqT|ӭ]@Jt)=)Ow~{BEwiכk.%yHc")=w)=w)HY{}&Fj9V]#uIԣ"#"#R]d@J?hJŀvMGDje,4,F;ˑ[KUt-XQjڄH5FMj@Tٞt6؀Lk&] 7SHT_:PNt؟tr#@W^%*{)2kkG;hУ()x;E;˄V[.] F jWPiBEiGX*\#P}E&TSLNCg1]Nh}L( ծ Le@-S4ܝ)ʍݙWUS3EZ؋ LbB-SdН)8;S˄VLG] ґ] Ge@-Sdj"#Н)tgrwZ1EUSt-H@-S4{e8r^L?ݙHܤZ1EUSt-H@-S4*)2ePD;S Н):_yVMZ؋#2EF LbBG{"Н)ʍ2j"#See@wh=tgrw9roY5EׂE1F5RmBTjP#Վ\#Հ 47Mh.6+@sgFQL@-Sdj"#Н)tgrwZ1EX) lKC"S)&T:OQ@G1]Nh}L( L@^Lef{"Н)ʍݙWUS3EZ )2RLe3E'tgrwЊ)kA:r-S4#WP)ZHtgf1ݙ]VLg] P e8r-Sd8r^ݙY@ݙ#j>hCGQڵ2EF )2RLlOLQn$@w|h}L(*)2ȵLȵLbBwhㄦFtgW^VM j"#ńZH1z/L,F;S=bZCGQ5R jjP#&H5F G,mBs=_yЯ)$ڵ40"#P)ZHtgf1ݙ]VLb ()&TSLNTPhOwf1`rwz:US3E\{2EF z/Zh';Sɑ3E+@kgFQL@-Sdj"#ńL, ݙ]&bZ\j"c/\@-Sd3ELQ.@+j eR2E^LȵLlO!RC8(ˣ.@{Q:ńt T:*NjG=8ݱC8x!܋揝z9Q<Gs2`@qOCXbqK; Нq:_yYEifaf{Q:œv6LN]SLN]>TNcqZ5Nׂ1i!l*#PH5TF2R l8bpnmE~kABlT<8xp2R|,d"XHE\l3 qzkAmLff^e<{ٝqff+j eR5E𶌓lb"33NgugFQ< )Pmt)P3;^Sn$k.ZKUt-HjT%#P}E@-d:QK EUT~ڼ&~ڌоT)@u :ń@G{"Н9ʍh.z ^w~iO/{KF _2RO1irA\KUt-Hv/< [~HKF Ė_2R \($fvW^gUQ:EuI:P)! 83GН9E&x[/] E! T#%䃑j؍TnH5쳉L.6mCqZIo&cfń6F Tc*NJ@5f1ɍUnWUG;rGQ=:7c/S)@G{"Q@S#=^yZuGoIfPbBu :PNT:bB=^yZuGoSd<ji##OK)xZhf׏kVD[U$] m];վ:ŴZH1G2RLkKHw~95]k=~uvVmgFQƖU2ex-dJHx+ЪUzYQT@.~\)NT8u =z ]&ުZBWm#OK!)xZ HߞZӮZJo;4B)nSNWW-ozxrA\QLUt-X( db)T"E0R`H/lbPLSnw;Cqb,'];>6F Ra2R TK#NWO6st}ʏ_wLM^еtt^nOEk_֠[Opj/ w<>M)ZHArOF }/E")R[1QUu-XjK]dLj(#=2Q#":1u\5Q饛&GQ5RTދTbxG{OY "7kE>Wӵ =k}üZHq[HԒOF ;4N> ʧiB垌<-di'#Ͼ:{*k_׵݊zkzwLԽet-ekt7&*^5QׂtkKwWD)2R<R2R eF*6Bݵ3]@{AWZH1) h"ݍJstc}? ۭN12Rеދ)E"ݵZnEG}TuԵ =MY:j,=YH^KG)fKG)t, ZQUu-H@-5*z/Z>HQF }t$ÿx ЊkAj)T 2R{-@G14ZNUt-H@z;NqS)wTpDO:&đSL+/OHUt-XiP#ՀH5F5R j@g{Y @s#\lz >hϼ귊S)@u :ўNB)7;t 7Qy3S)@u :PhO:qBS#L+ЪP#QT@e@^hO:hj$@SϷ:ύCkGdidi9$#ŀZie`R_y9VU޳$%x-dkIٞ8gq\S#ᙊkE}Vѵ =Zh,=ދFFwf1M;mt:Umlji##PK)ji##Н6trwЊ6jk];Pe<-kd8q^)uCxC?z ݊C:kJRHkiF3B2RLt^nOES<]k=~0 kBgH5Rjk]#fH5#%T?JjdyxaZr \2Rе䒑nKHw+ttvƨ$Cڃ( 3a^K5)RMFTlO3A*7;t viPK5{1z/ZHTżT,F;Ք˄VTWU5] ֻ05㳓{RM#߾W<7+^CWU5] ViWZ؋iLeFJ{Es'kVW;] VvWZ v2R{qSZsڪFrP3]A{ArPF z/SWt+Fj3E e))c/nz/ZJHRR=xF1Ȕ ЊJkAjYTHԲPF')B)u",FrwZNUt-XP#~H 5R jjٞ0F7wU5] PmkoTL嚌@-d:D@G1pbvZjPbB-dP.)&ԲK=pFhIL.Nh.}(#ײK^Leef{"ѳtgrwЊ]ڥkAPK/ȵd2bB7@-4(#7ZJUt-H@-4*Q2e@-47"Gn*␾ZZi,U@-dPK")Zi'o$E'4ZFUmt-H@-o4*72卌@-o4ˑ;h*bZjSeE)2R<jٞtgr#9r>h}WMѵ LX&TP)ZH;tgf1;S Ђ)x*`:-NOoNV/VVoVw*R=4_?+ߡOES$)K"'P9)nL]@7h]LjR_RS;ePG9)ENuDL6SK}e^5v9q-j6Eu:ًqub\mў'u6e\ 㩨t:h.U篣WG9)Fw{"Ѝ64h#quB)߷h#'h#'PG9):nOFFtĕWEm@mh#'PG9):nOFFtĕWEm@mh#'PG9):nOFFtĕWEm@mFN"G9)F{"Ѝ64m$-jd;h#'PG9)&TPG9)n]Om.Omڏk;gj@TP#ՀH#H5=aBg1͍l ˄?&&p F ZFF 62RiY@wh&<_yZFMYiBSCVjy##ńZH17:zF2Ȅ)E5)2bB-SdP)&tgf1ݙ]VLs] ҄Zh,HT_ LbB-S4'tgr#Н):_yЪ)zޙQT] Ge@-Sdjٞtgr#3E+@ygFQծ)2RLef{"Н)ʍ)ETZH2EF )@w(7;St jwhPmdj"#PE)2R<L,ƇHL+Ъ)zޙQT@e@-SdP@wh#Н))b^Z>厢jP#՞rTjڄH5=ȝ47Mh.6+/R5Eׂzh,?[@-Sdj"#Н)tgrwZy QyZjLXSLNTPhOWg1ǷANhL(#2E^Le@wh#Н)eB+jiB-S4 )2bB-SdP{Frݙ )E5)2bB^Lef{"Н)ʍ)E2E^{2EF )@w(7;St j^vhP{TP)Zh'ݙHL+Ъ)zٙQT@-SdP@-Sdhgf1>LQ.E+@egFQL@^Lef{ℎE;S Њ)zk;jH5F5Rgj@Tٞtvbz2USt-H@-S4-F )2RLb3EW|E] PmQ)KP@u )Shf1`rwz:US3E\{2EF )2RݙY@w(wSZ5Eׂ4)KՄZ؋ LbB-S4;S=tgW^'j^whՄZ؋ LbB^LlO3EݙWUS3EZ )2R{2E=FtgW^VMj"c/ZHTPD;S Н):_yZ5E;S4 ej"#P@-S4Ň)塨b^Z w?m1Rx"#3%<-Q4R~{~~?oqWu^_8e\ߪZ>W#6F5Rm\Tkoٞ0576+@-َ?EET@-mdji##Н6trwZFo(6,];F SPN1:ϞH7y|8ϟcתCz9QTj9$c/ZHrHF ;4q\w)wq8CRᐌ@W!)rH=sH !Nh!( @-dP!)&t'9H+ЪCz9QT@-dP!)ZHt'9H+ЪCz*翗qOHB2<-dROH=־wqC=~ڕnU((qx-dk %#ў8; ]V[U(] -czBOHQ2R@+Wҵ`z׎篑jPTP#x6F4Rm@GJ#׆7XPtא金哌t-dRt{*ҝ5stv}5޵j?ZvH1]2R̮eFJ{Ek_ݍ]:n.Od|t-dZrH1\2RnKHw+t'sE5WUӵ`}vKT{2R o-S NW^mZ6Cϟo:UO~h ⋠S|t/NE):!٨'\{j7X\VN>پNJ@S)PntٝʭNG/\Wu{zg^T3SlO):A"_07f6n?WU>uSV8f-e e (#)K@)HSTOŧ[kb+:꽪[F+NF{12R̡eFJ{Es߷k 7QuSׂ];>?v5RmvTkFH)Aw6?r2TԵ`k{qvt-7ek)#]MTqSЭQuSׂ6{<ӵܔk)#ZnjnT+qSϱnM}l];̖2bv-7e]M)frS#gwR݊kF~w]/K3E"n:^5(#^k57ὶHuVMDڗR)NTShOS ]&xhD}t3󁛥kw<]u :ONSSS] ޵XV%G ӪS)tu :ݞRt{*] ݵXVHݵ3]H{A2RF 2RеHE#z ݊k2Rl)c/f2RFٵHWfwcΟcϪ,tqvT;T]#6F5RmvGJ0n=nH}=Uݵ3]m~Sеet-#5RH^Cb>FZE#HRRFᵔbx-%5~bUɴTo+ZP]<\yi #PjY(#żZH1=(FME&>Z&T;ZHNF w2R(_zx*7;t:UN\;{NF w2RyY Нw:_yZN^lWڌG :=TSCu =9ş̦ւ89+*F]XP-{zkHEW<A"_Ss< 7rn:UMwM^|囌,4RW7^3YMׂ4pKşvxDK8)N=/}Nq[KO_Ut-Xxf2RkP#Հ6F5Rm^g{Y Ld|Zk 5R𴬒 U2RH7in*}Uҵ`Kz<>)U_T2RL%FJᑊto^C9٭*;k&ٵ ދٵ bv^nOEk_ݵ݊ok:nWgz z/ZHAT;?5?:U5Mj{l'#l'#]=)ݞt׾2k Oҭ&d>EFNfN1:]⾫S)E"ݵ]kЭH'|2뽠S)tu =T;<tcݪv]H{A2RF 2RеHE#z ݊k:Wgz؋ٵbv-!5Rjv7o@r2oހ:evzZнk5RkFH5Rj;RHM}mtSst{'ꮝj']U)ZHAW]UTWu+ݪ^ t-Webv-We]t-W5Rjv^U^3W[ׂdֶ޽WF ̮NAWSnO)=S{V]O]U)frUF 2R{ArU#n\U5t+ꪮZ^y]k*#ZHArU#n\U5t+ꪮtGN)גUFdbx-Y5;Om,'$-^h#'^G9):nO<7hHxn >}6rR{h#'h#'Fw1m.oA}>Q_5Yy;"X#'ŀ:h]}e^Ks,~iBy-XFQFjxTkڸHq ,q͍ljKhi"#O<-Qdiw~k ;o(}$va9.(㪕Jju >Sjububul_kk-8UL_i}g}'e e&#),Ô)5SwWͽ" eL( #ʼn%xZൄ՞*Oĵ,bULq-rLZ嘌'kg44UڵJ6.Le@-dbB-tgYH&J#w*}uV)jB-dP>U2Rk1UㄖFJgV髳JYT@-dP@-djY=fFUݱJ_V鸠UKWy(e@-tgYH&J띧 ޵JUzԖaT4R1F*xi͔;Lk-Z= jy]%#]%#]tw25ҝ ݹ&vY.gQ]xZ NW^N73WqF³t˝gB黼UPm[ ^ Q2Rhghi$@K7uHߝCʢPmaj9$#ńj9$#l4#Hvi t!}j ÄZH1C2Rh琮sHLCuH, R'~ת同@h{g{ZfJ2UR݌T-SnFî)~t)!8ޭn`3Z*eQͬer-5U2>Zg>gXL߻鸠˧Q3SR3S̬N1:NSlOZdfxbfifv=q 4bfT< gJ̬V2RH*#}n3[[j1fvYfĻ駼RY3kbf3%fH)~KA)~tlpŘn@w%;nz-W@Z:N,"@K#ZLr~S]tz]UcN]S`&sJ읒3]S_\ϢPIX@S)Pt T~. xXEfvYF߿6ytWkNN/VVoV?=R/i|{^|!jlȦ._9 ]z-Ph<t tS6}:eOT^]IG|s]I1z-u :l8ǥn^n_E[pPR@u :PNTPϯ;Ms3M EuGNJ@S)Pht=CZCxYfě~W㗮B%g-;~IKN EwWdamڤؤvf\K=&96Y MrRmlRShc"@oMIWQUKZKUϵV)X8u :QS`&In{qi56*#w ㋌NJ@S)PJh}WmQZ~32#K߿tb/9kKN Ď_rR .∻jcFt;6)snq|W͢j⮚)qW5֊5 Z1F*^Z62b] NX@SLNXFqgj9E.wgv/t~) r-uW@-dZQȇZhi$w&wڤ&eQUK]LN1:u9)wΩ^ {qk Yj5RH*#T2RjݾZCxYfĻ~KYT> )u :bqgj16]<T<&IYT@NTzVwhS Z RrMzlRP&Z1 e٤Zhgj;6u&)AcR^*2%s|~Z`)Xc{jsڤSo<(Nܫkd'ʼnׂNAJ S)HJx-d멥gܩo逸]t\PNdK-奫&RKF >RXK-;SKY۩ZZzUKiD-V湁ŞkR:vbu[ Z{'|瘟N-eQn_ZkJ@S)P=?cCHLveqrwm[g\&kԲIF M2R@sGqG`, F*&HP#j 5Rj*ȸb]?*vbu :س"K~/@wMGg\k2EF T)2RLQ-3Eȑc>vMqA9r-S#2EZ޹x(2bhgj)E]St\PZ(/U@-SdP)ZjO Wz>c߿rw뎎 bm_ZHq[Hq[H1;EfsG請sGYTwUhxܑbfZܑhj;E]wt\P&rGy:-wdP)a]h;wTɑ۹b7"c##ń8r-wdP)&sGȄFsG'`,#HP#@TLhsVL W{ Z@k13]wYFLhPhSQP;sG"@oqGEf,*:PN1gJk1:l8H&y>;wE!TL h~~Z`ש)Z{g t}ZH1;2RkJ@e=ûWqxw6 -eBw;:.(E;KW3@-wdj##P])w't}ZHTaj"#ńZHqf{FEqvSk ʄj//Uj"c-&2EF k4#vc>wMqAjTL@-Sdj=#Frvh|eQ}mF#2EF z-\)&43- LQ-275EfQ5RH=HP#@TL W{Wqx( yk:SE2EZLe@=#ТbBk#Z S1EeBETC@LNTPhh ?].w't}u(jBjedjed1Ąv׮):.(jTMeP)&2EW{F -R#3E 5E_eXȢPZx(Le@-StgڙHvh t}u( 62L^#2EF#!=cjkA\!㎾vqA9-wCrGZ ܑbf-wtgZ-rWQ-t}rGyj#c-ZHrGW{F;dB;wy>wW玲akܫ厌@ZE_"ڹZdBw;:.'4 F*j՞aBk1FƄb]~xYfěW#:t#?lz4q<Դ}kS6/P3S왊[kJYN1c2}f8WL3 fYT 6RHb#T 6Rj0wZt tW6a= NTS=S^ :N#"@K#Z]<ݕM/lʢz^JTS=S ^ :N#"@;T]<ݕM/lʢ|縍TS=S ^ :N#"@;T]<ݕM/lʢx5R3%{Z :S`)_gk tW-tj)jBKՑS)Pt T:lQzFt ]<UK/ڈ'/$Lz(bWlEpđET&TSLNTPhgqBK#ZLr)zLQPk2EF )2R@>bB;ST1E踠Cגv&z-H1kIF ^K3^BdB;k^;SE5)2bB-SdP)&3EWqbB;ST1E踠L~' ;2Rk1{GF ;3-bE.w't}t(jB-SdP)&2EF LUH)Z<5Eeo[ZX )2RLhg4)Z<5E)ʢj"c-ZH2EF )#Hvh t}t( ej"#P)>gjkAܹgﺣeQ!ܑ-wd@1rGW{_y"I[Fcr ;:.{(pGF*xT<{vPcjbf @k1FƄb]<uG;ʢj#c-Z(S 厌Z4Q2Z w%vgQܛET&TSLR@ZLN43Nh)4Ȅ.we1Wf⥔LcR`)N]^dsn@wgQL厌Zܑ^ T;Go֞som-Jk c1Q b-d@l$#4RlR-tݵIMʢZ6X M2Rlhyň٤Z@wmggZ6X M2RlhgRhgj7ݵIMʢj$c-Z6HԲIF #&{6{h;@wg玲{KW){ϔz)Ͻ:vaJM0 ׮;:.?<'Y{hȿwg{(VQT@NpGV ;R@BaF" t= aj"+PS@8Nhi$@K ]<3Ez5Ej"k-J0EV ٞhGu@LQ^MѣZ )R5LhgZMQH&t)) Cѩ.PS)t :őSM3-bF!.w't= aa@ZYHVSvXGQ5L@Z5L^ =#HVSvXGQ5L@Z5L^ =#jr({(/(PmQq ;PY)J0EjF2Et욢hńjbBT5RPd 3ÄFZ 띧#eڵĄbB@-Sdj"#]hBLz(b2QT4[kTń@u )f{ 4Ȅ.weQL@-Sdj"#]hgjwc^vMqA9rkȵLe@-Sdڙ8-R LzyBwMKq)2R<YHqZHqZjxv6)Z<5E/)ʢ:r-SdńZH1;EV LU'3E75E/)ʢj"c-ZHTńZj8ٳhgjwyk^:SE2EZL^ )3͞@;ST Sk Cev)2RC-Sdj=#FrLziB_wMq 4bBT5R1F*P#@TC @0cB;@wMkNQP"c-ZH2EF ׇv2q֟eFqGn,*ھ0:bbfT|;Gbf r(F*P#@3%kP#zgZ62bC;@w{玲7oHT4Sq3YHS0e+3LCqqGnđE5ھ0:*NJ@S _dʹ6 -eB;@w{玲ZX ;2Rܑh玮4;Z<uGEy0;2RL厌厌@;wtG;eBw;:.(EګįR=H1;2Rܑh玮h"&sG uG;ʢ:r-wdP)ZH43CBfj#ڙ3]S^\GeGeG^ :Ce@;ST weQM62L^ )2RLhgڙHvh tw( v-LbB-StgڽeT w~욢( F*F*P#@TL՞Uj#h-Sz)LQP-#c-Zo)Zo)vo]hjwb %kޑ )SM3NhGYї -E.w't}t(jB-SdP)ZH3EWqڙ]ek ʄZ(/Uj"c-&2EF k3EWqڙ]]St\PZ(/U@ZLej"#]hgjw|k>:SEuZX )2RLhg4{hg;@wMGgj)\)\]=c7X[ ?ˌx}t( 厌YϔxX zGfhx˨ٵz;QPkTP-#c-ZjRJ-4;Z<uGcRP# F*fJLV5R1W{@k#h-cz;QPkrGR@-wdZhj;/㎎ ʄv#V奫T6x:X6f~~ẔNӱbZ`OE4q)=aeQM厌@e##*)Pe{s3v{;ZM,$~ EXM2RL㹖:LeӘ=FtCx&}ڤr[6)/]ae@ϵP&;2F٤ZMܵI1Tkq[6)S e:hZlR-t#w&}v6)1T=&)S`)XN=8b/Evs0ߋ3]wٹ,{厌@e##*##;ZU3vL*^g֟eFk>;EزIZ lR!b-tgMHv6ik&w, F*T5RqfJ5 F*fjx w3]٤,*M2e2Z6MEv6cvmqAy(:ń@u =S ^ )/"@;k:EkBfJ<)VA#SF zG?{){_i(@wW玲&rGZk1:*)P=4=rWl̈wmW kk!l$#b&k1sI4v69wl׮M:.(wU&+l蹖Z6MEv6cvmqAz 5:P))Tń@;OT*E$#) K3DY|o.NOށvG厢"wP.a^l 4 %Q.;*rG=U;{ (rG`/?.墀V(>Z"wKP^K@;Y'4 %Q. h}tѵ VHEʸ#ŌHe #W(rGKqvG厢螡 #*@J>1:w{oj^*tY6ğ]t-g61H R1HK8R5.ag{K84F8.;ЮMlRPd^lRPdOsQ@S#Iw2$C(:hB}J@}JH9~/MO hgTHMEMh&}V6)@j|)RŽD)aG_"&ث/r'h}V(nB;{ rG %TK$҄/c?^rkIeGܵIMClKM^Fdf{ilRnؤϮM^db &&٤ٞhRLzV6)c>6Z"KPd^lK@MYV6)7Rvlg&] ЇpWOiB}JWO #\'EMhrQ@'ЮMlRPd^lRPde~|4Z\Ϸ}~jǂmBg IuοȐԟ^AP_忤ϯ!v{鎞 w4c)%SSSSSZ[V;Py;z~JvXURB)' O O O Ug;?b߿46,;Mz~*l,$%K!!&&Jb'%􏪨iLK$si 4(Id/%6iPbȉe__"_wMwTYt@;"{ (qG3wDNФ4;* -ܑ9ytGOIyJI%T%+T EQZ m秦;z,H<{)>Rק4>%>)v'9. SnOôOh=?% %4P#h/;* m秦;z,H~!4{wDRFhE;@h^@jL(H 5&P)H = Y\&47r\8OޮzZ/wƄ󟿐ԧԧԧ4 41oU$Ǔw]w\( ESH (rG %ўPar#2Ew]S\(:޵(2E { OiB)Y&} LQ.jB'@2EQt@){iB))E4ўhGZ\Ϸ횢EE%"SRYV(7RWne'@2EQt@kѕLH{ OEhg=[r+S 혢)܇p@}J@}JSSSSА8+FjB:꿿O'k+SEE"PVh LQvLs] ҄"SKO E4VhW)Ў)uMѵ`E3 5 RcBAj1 5,W,.@s#ǕʽuMѵ E( )E" 4I!LD+[rO[&MO OiB}J@}JSY'4+HMEMh*SE""Pdf{V)ʍ]혢[] ҕ]ː]~/E4&2ENherwcn]St-H@kPd@J@))E2EMRHZ5E-%x"QRҍDHE(Rt~o_.S0>6J×W{qh[W] Ҹ"mKKx6)Ehg}V(7R<+mt>y׮6U( i#%H"m4۳orw5mtjkAPbP^i#FQvѽ;( K)H P Rlϰ;㙚[;.\?v ߻"Z#K̂#RBDH qh#HD$EG$ݓoQgC~-wؑ s/M8ݧ4>%>)a&.碰v +jv<KG){Ho5Dn5ݿtZkAUEV A{ /J A,.LTvҽk (J{i^U)EV JRZ{lFT@JJ"Rlk,@S#5(tkAP$bP$^rH)E"igZHD}B"^(_SH{iBH)MK@HYV")7R@Sw5tkAP$bP$^P$@J@^zV"i+II/]t-؁FL(Hg(H Ƅ Rl2͍}jkAQ,5 RH (F %G?Ϸh1[n݄>:>%> ))MO hg(@S#5(Ǔw]mRhQn\gi#O@J<{mE o?N^и"mR‹Hi\6)Kx+m4븦Fg'@%Ei#Pi#J F;襫C<5)D%x>r#޿ykqH/]t-H!RKxC)ݿ!KCʍ!O߮CzR/rH`//!RW@JYV)7R@+t>yuH/I}F t#RP@Jl 4z>P++^Z_Q4 R(H Ƅ RcBg{͍mB_Z"K39$P@J@+4+! h!Otҵ ~e|zKP&ԧԧ4>%! 4"Mh* }B5_zۣ(+]H"I$h 4+HME=|;Ю6zQP/^i#P@Jl 4zQOށvkz=#H"mR҄VhW6Ў6zjkAz"oK3y#"oRGj%?Y\FrArwc^Z"SKPd^LH (2E=+FZ5E)r){-"K2E L,)):횢EEPd@JLHiB)Y'2E+c޺Z_Q4@Aj1 5ԘP@AjLlt ͍@sq=M[] Pdby"SRLH hefqZ]혢7Y)$ޢ SKP&ԧԧ4>%;+H.oz]S^( E%ٞhlZ]혢) E( { (2E %~/EhgZH=C+St>yЮ)zOCPd@JP"SRPdf{V)ʍ]MhwMѵ M(2EM(2E`/=C))EhgZHMH@;k (2EE%"S4۳LQnV|~vM{e^){Et"SRz˭L,/E)ՄvL{] ҄z_[))E EhgFjB+St>yЏ)@h&KH 5\@Aj1= Y\&47r1w]SQ(:"Pd@J@+S4+ h}BtLѵ M(ʍԟ ))MO huBbrwx>]SQ( E%"SRYV(7RWnꮀvLG] ҄"SK݄"S҄o@JLl 2EZvMGe&Ի!SR҄"SRh 2EZ;Ю)H.c(:޵(2E %&ٞher#2Ew]S\"SRLH (2E %ӿ/ q?ˎ>*wE7HFt G{_qǿɍ]&uG] krGԽ&#P@J@&F h'ouGׂḧ́ԸAjq Rtg\9;Ю;QP^H (rG %ўh* hrQ@;S^㎮iBW(+ԟ }o`P&ԧz^FqqG(Ǔ EM(rG`/E(R(rGDMhDEP@JE_4i"QnV|>+wE#&%8Q@&F h'@rGQt@;{ K@)g(rG=3rGZ;Ю;QPo_t"wR' (rG=++HLh}V(^? )=%>wav\\ԫSj,@3 !SRPd@J^BLH UerQR#2EW)z,~KRz%?_P(7Wj=g?a(߿۝mSaf|Ǐ8|咔ݧݧݧIEɟaehSz҄ʧʧʧʧ*( Uj&45ǓwMSt{*L,+"S4S\0EEQ@ STi 3|e4kB)")M(1Ed/%_}gԄȜOhݞ S4nB)"{iB))75)*H-L9y4E͢JLK@))"r&)(Z"sinO)E"t^)")l쫸ڒ))2'@TYt@;z>%ўhCEOށ6M0Ez##SDRh 4#-LQQO~oQ4@Aj1 5ԘP@AjYrF+7;Ю)RW/_ Kͯ- %D)))@)z )))))@NhjOށvMse\d^LH (4ڳMHZ\Ў)zkAr)E { (4T 2E}B2EQtLKLH (2E %ўhG&@2EQt@){ (2E %F{VI herQ@?k+SE""SRLH hefq})LQh=W((2E`/E" 2E1E]St-H/Eޢd@J@^z)Bk 2E=[H%}$St뚢k4fBAj R(H 5&P:۳eBs#\@'oWk (2ERLH (2E %)hBZ;PY)%1)Уϯ_kB}J@}JSSPh:Q\F h*jB'@V(:"Pd@J@+S4+ hݺZ_/PDHi@() (E EEjow?庄 ǯy6DsFJEэ+F`/+F qE46u\+m+mtjkAzCeKO5~/Ei#J FF6$^(F %H"mRZiY\V(wW@;FׂԋEi#P@J@+m4+J hGݺZ"mKݕP@J@^zEBhgFz'FׂhKHg(H 5yAjƄ,@gq4DŽOށv=KLPgԧi#P@J@+m4+J hDG] ҄z2\ %DMO OiB}J@hj0wW@'FJEM(F`/Ei#J FF6 E( E E4Z}`gh}B^( E E4&2ENherw5Stk&vjRz'B4~/DZnud?ǵFQt㊴K㊴H /F %6u\+mqh{W] iX~/Ei#J FF6$HRi#.`H iٞ Fq+mt>yr_ZrAjyF/6K@6)EFQvыDG] ҄z2Q,5W.H ?QSSPGjd5u|0+H.(wW@'F/6P^H (F %6hrw^Z&iX&i#&i#҄"m4۳Nhr# }BFQtKHiB6)MhfqJjB;襫iBFM(F`/M(F { h,@rwK] PQ,u@^Pd@JLH hefqZ]혢)lbv _C() K<()|en'~ϱ?P%-CՋEi#lTiH kW] 7(H 5_@Aj+H 5ug:9'@FQt@6{ (F %HVhW6Ў6zhkAPT6 ԟ ))MO #jY\FrFzyЮ6zQ݄"m҄"mRP@JZiY\'FЎ6zjkAPbP^P@Jl:aV6Ў6zjkAQ,u@6{ KHiB+m4+J hGvѵ ERy#"oRPV (wW@;vMѵ ER""SRLlzV(7R/E):uMѵ`ERRx)ƕ R(H Y2h. =횢EE%"SRZY\V(wW@;MciBE(+ԟ ))MO #Y\Fr1EzyЮ)zLQ݄"S҄"SRPd@JZY\'2EЎ)z뚢kAPdbPd^Pd@JLl:)ʍԄ&}$S5EׂX"SPd@J@^:)Ў)z뚢kALQ,u@){ (2E %RhZ]혢)$R""SRLl 2Er+St>y{)zk4)RR(H"@Aj\= Y\&47r1w]S^(:"Pd@J@+S4+ hBtLѵ M(Rs傔5>%> )}VS4+H.(wW@'5ES[/g_W kD"^H-_]{-mFׂ4HR7H4Hiٞqe~}IwlskEIeHzDR#$&Hwok5H$&8}88I툤HE")E" 쥙}5H$@+ D}B"==cH)=cH)}ٞhl}gDR&#޻"Z&:զ`Wj??^.fvSSY\nOOhW$'ա E" $*$@JHqIZʭJ- GW-] yM4@)s b8۳\¹8^r#\hW-}Tj)(RK`/Ej)R(RKD@SQ@+QK]t-HR,5 %H-EEj (!V(ZEZ$a^b)5^"e^@J?i/]>5^@JK{* {+k>IQO{/H8ഗPPPPP}}otI߱6)VO&Eu;MlRS٤tq 1I`/!F6 IilR.ؤMK٤XꞪ ?Q3lK3llzV6)7RZ٤vmGe&] K@M{ (I=+&F h&c>6Z&٤X^vd@JؑM)aG6i6q^٤na?ؤM${}Jo{)ͱO OISSz&4`.Id,nWg] vQ4W.H *@jjg,i9Pr'@rGQt@;{ (rG %F{V;ʍ]Ϯ; E(\P@J@;) #Qn&$wuGׂ3-:~/)]>%>+ק4\ BTOޯܮ;Qݕ3}RD)E_"[%w;ʭq}V({o{/Hi? {>ɮ S.na`uGn E7޾hf;'jfBSBl;g. UjPU|>+wE7F5^nB{RPvvv҄&4~3EaOh}kM&ԧ4>%T>%T>%T>%T>%Tў5BBפ;Ю;L2C@Eԧԧԧԧԧԧ4ڳMHWY\+S=l(I镤RAP_{WڤO~q&ݟ 41Id/!&6$$Q]C]mؤS&=%6i.=PbHJ@M")MH@ T4RZ$s>MtJ 6t DRM")]&}/2EQ)M2'@6TؤYtW.Id/MK@M")%6=+ЯϓQH-ܑ9ytG͢J;"{ (tHJWna&(tGFI KJIiB;j:aַ6pG&Խ>RΔ%DMha&BEQ@'@TYt@;"{ (qG3wDNФ[zȜmSf%%͔J9Q@&]Mh=wѵ`Fk H 5H`q:۳RKSY'445R@SQ@'5Eϕ)OH ?ov%>5~[)a{ {4qŞ^횢E},==r@{RSSSSxuEM,@2EQtW.2E`/B "PU(uvLs] K2EԽ"Pfٞ2LQnf/#혢)$ޢ-"Pd@J@^Ll 4#MherQ@;k w-LH (2E %墀&) L5Eϕ){)z,u/E{))a)اI(uMѵ`( 5~m R(H 5 Rlr1=.hݪohrAj*d@J))LQ. Uerq%ٞher#2Ew]StLQPd^LH (2E @>ҕ[\ԄvLѽkȻܱ]Pd@J@)) MH@+S1E)$R"~/E4T 2Er+St>yr^(+"&"Pd@J@=+F he'@r))]&%F{VIʭLQ.혢{] ҕ-&"Pd@J@+S4-I iB+St>yЗ)@h\ R(H Ư- 5,: 4DŽOށvMKe"SPd@J@))L,@orw@e!:% ]&ԧԧ4>%> )hj&4xk^*SE""SRLH hgZHLhT((2E`/E":)ՄvLK] K2E]W.2E +%VhW)Ў)z隢kALQ,u@){ (2E gK@+S4+$tV|~vMKe\d^r))M(2E %)hjV|k^*SE]&"҄2ELQ܎)z隢kAr){iB))M(2E %)herwMk] vQ4 RcBAj1 5ԘP@g{_[fq9\@'oWk] PZˍfBAJ@))E2ELQvLѫ,D] PoQԧ4>%> ))MO #5jWgq(vMke\d^LH (2E %)hjOށvMke"SPd@J@))L,@+S 혢׮)+Xꞡt"SRr^ZY\V(wW@;k (2EE%"S4۳>Cor#uV|~vMke\d^r))]&2ENherw5ǟo5E)LK@^Pd@JLl:ѳherwc^Z\dbr){ KLHiB+S4+ huMѵ`E3 5~1 5 RcBAjY&t}뚢kALQ,5 RLH (2E %)herwcd!:Zz2LQ,u@^SPP҄>R)h$S+Ǔ 횢E]"Pd@J@+S4+ ہvM[e"SPd@J@))L,@+S+S5Eׂt"SKݕLKW.2E +ٞ( 2E1Eo]St-H@)(2E`/Eٞher#[5Eo)r){Et"SRr+S4V(wW1Eo]St-H-r))E EhgFjB>Ў)z뚢kALQ,uW.2E`/]4)uB+S+S5Eׂh͕ RԘP@AjL(H 5,: 18Oޞ]St-H@)fBAJ@))E2ELQvLѻ,D] PoQ34:~/)MO OiB}J@ 4)vM{e\d^LH (2E %)herwc޻Z&ԻM(2E %"SRZY\V(wW@;k (2E]t"SRr)Y_*Sc޻Z"SKPd^LH (2E=+F he'Ю)zLQ3"\d@JW.2E +2E^)ՄvL{] ҄"SK݄"Pd@J@CZHMhe'5EIp4#nBkX@t"SRr)YF LQ&c>ZOh P@AjL(H 5&P:۳hn\@'o5EׂXj\Pd@J@))L,@+S+S! 1Eׂ[{h,u@^SPP҄>R)h$S+Ǔ 횢E]"Pd@J@+S4+ h}tMѵ M(2EMK@))E2ELQvLG] PdbLKW.2E +ٞ2Ez)L횢2Ư-QtWw-zE"Pdf{V)ʍOށvMGe"SҕLHEtVh+2Er;kE(+"&%VhWI iB+St>yЮ)LQ݄"S҄"ҕLlzV(7R@Sw5S5Eׂ}Bhx R(H Ƅ,@gq4ۄ~vMѵ E(+"Pd@J@+S4+ h}BtLѵ eXԧ4>%> )}VS4+H.(wW@'5E)r){ (2E %VhW)Ў)욢kAPdbPd^P"SRZY\V(wW@;k (2EE%\df{֗Fꥨ2E+k>+SEw"SҕPd@J@)YV(7R@+St>y5E)LK@))]zV(wWWn}vMѵ ]Rw"S҄"SRPVhW)vMge&"&"҄ٞʭLQnO^<5Mc6xJRz%?_P(7Wj=g?'h俾rowi^8"PSDRJLI ha+І)zyhǂ4ޢa`>%>%> ))MO #MhWQi }B0E\b^JLI (1E$%)*@ STtW@i ҄S4rIJ@7E$%諸-LQ]m)z,H@)KPb^r)")]}[Wq^ SdNޯܦ)zy*L,+"&"҄@ ST4R@ SdNށ6MSaf%%SDRr SU\'0EEwu6LS=+]tSDRPbڳNhHha h<5McA-~m!4&"҄Yh+k;(+ 5ԘP@AjL(H = Y\&47r1w]S\(:(2E %~/E2ELQvLP=St-H-ʸrcy&ԟ(>%> )}VS4+H.(wW@'5Eϕ)Pd^LH (2E %)herwcZ&X&|S҄oHJ 2E1E]St-H@)(2E`/Eٞh7x?LOޯܮ)zLQݕ);$irZn6`Vw "EJ$k\gFV!aȚdw7)2ȵLȵLbB=3F2E+@2EQT@-SdP)ZH2EWq>r+Sˑ1E]St,HGeb:r-Sdők"#ők=V(7 MS5Eǂ2ET{1)2RLeZ8OhBLˑ5EǂhőkX0RjP#5&H W{ 4DŽ횢EQL@^L )3cްwiBE(#HT_:ń@u gj6EWqkK.@W^'k*SE5)2e@-SdZ8LQ.@;kiB-SKՄZ؋ LbB-StgV(wS5Eǂ2ETL@-Sdj=3FPT#k*SEuZ؋#2EF#2EF#2EWqHVhhU( ej"#P)V*@+Sˑ1Eo]St,HGeb:r-Sdők"#ők=[H&2E+5EoemP"c/&2EF LbB+St LQ.| ):EH SdP#5&H FjL@Lz'cBsq_y5E)j"c/ZHTP]홁Ff)hc!:X&T[ab)+2:PN1gj6EWqt{uB2EQTj"c/ZH2EF )3c޻X&2ETMeP)&2EW{#2EC>hwMѱ LQ,U@-SdP)Zj 2EL5E):r-Sdők"#ők"#ő[8)eBo5E)j"c/ZH2EF )3c޻X\RuZ؋#2EF#2EW{#2E)_yЮ)zLQՄZ؋ LbB-Sd]yB+S˄vLG 'p{w/^~j(2RjO#5H 3x;{ߟz:ze\?XF52RеetϽ35ӽ>3ݵݎCOtұ`FQFծ:xu)Wq:s#5qH]t,H@a^-dj9$#P!)V*@+ ЎC:cAj9X*@P!)&rHW{ Rn$Z9j!}$同G同@-dj9=3!FrH+@rHQTP!{1C2RC2RC[9]܎C:cA:rj9$#P!)ZHrHWqZ9]vG! P!RuG同G吮Gnr#9r+zvG吢\!{1C2RL同Z98OhrwЎC:c:Q@x(2RjP#5&H W{ 18LgW PRq)ZHFF  43(N/c>Xj2bj"c/&2EF L՞hhgЎ)욢cAjX꽘P)&2EF LUV(wS5Eǂ2ET62bB-SdP]'2EC+Sz횢EQ=iCe@-Sdj=3F2E+@2EQT@-Sdők"#ők"#ő[8)혢Ϯ):#2ETz/ZH2EF )3c>XZ(*)2ȵLȵL՞ȭLQn$GneW^ܮ)LQՑk"c/&2EF LbB+St LQ.1E):EH"#51Fj5RcBzgЫ8͍˄޺XZ(#H2EF )2RLUV(wStBt):$ڢ SKP@u )S=Sߥ]h$'S 횢[㍅(#z )2RLhe 2E혢[ ҄Z( Lj"#ńZj|LQn$Nh*SE5)2bB^Le@+S 횢[eZ )2R)2R)[]܎)uMѱ )ȵLe@+Stg)hݺXZ(*)2eGeGner#9r+SzvMѭ2EQTGe8r-SdP)&2EWq2S5EǂuB(ajƄH 5R՞2PiiZn\eٯ;:$Ė;6R Q7 ܑqzha.rGЎ;Ktѱ =x>1i,ݥ4>x4?bu :du)F(Ni*uG_;:-wd*)PYH*ڣ{lR73۱I_]t,H3k٤Xa&{1^Wd-tg&FrWlvmWes:ϔ:u)S`)&;%9v k*Eu[6 TM2RlUG!\o_cA:-K!l%c/K–_2F!<U~)K_]t,H@O-aILCXlN1:!S`O‰CPj=~KQT嗌@e%#*/)PU~*N~)7TLh/}wұ`( Fj| 5RgP#5fH W{&|'h.+/ݵIǂԲITC@-dj$#pD3Ф=47I1ct,H@O&TPN1:PbBu gj~*t{uB6黲IQT@-dP&)Z6H43Ohr#]vw ҄Z(#rG^L&bB-wtgZHVhuBrGQTz.U@u )S)&43Pn$@SwW]w](*;2厌@-wd홁V(7혢):#2ETMeP@-SdgZH&}Ў)cARTń@u :őS 3Pn$@t{횢EQ)2e@-SdZ8mDhtMѱ`( Fj|5RjP#5&H W{ 18LO PRq)ZH2EF )3$ZWX)IcSՄnq`Bu :ń@u )F{ 45Ȅn횢EQL@-Sdj"#]hj$@+S k~`B-SdP)&2EF L՞yB+S 횢EQMeP)&2EF LU'45)_y5E?)j"c/ZH2EF )3HVhh$k"#ők"#ők"#őhe 45)_y5E?e2EF )2RLeF2E+@2EQTGe8r-Sd8r-Sd]yB+Sז)|is"O++W+_V鍅{Ϟc5+4E1Ev"'P9)^.@}`!\j@u :ń@u )yދ3H>STt+4E/)uL@S"'݋3h㝢ϗ): uLѵT)rbBS䤘P3OhaFr-L:MSR&1E^Lc"'ń^'0EEw;E/MSt.H] P9):I1EN )g)* ;E/MSt.H@St-UGc8rS8rSto|.@W^ܦ)|)LUTGv-<:I1EN )gZC S$mϗ]E1E^)rR)rR) -LQ]&c^XQ@ԘP#51Fj5RcBzgЫ8͍˄}' eb)ZH2EF )3ctlMڢ\#ńSLNTPhg(@S#TvMke\{2EF )2RLUV(wS5EǂtZ(#2E^Lej=V(7 LvMke&2E^Lej"#ńV*Z]&c^X&2ETM )2RLhe 2E혢׮):$) e8r-Sd8r-Stg>r+Sɑ[S$]SZ(#2E^L )2RL՞her#ZW]SZ(*)2eGeGne|V(w#c޺XQ@jP#5&H FjL@Lz'cBsq_yз):$)jj"#P)V*@+S Ў)zBt):$ڢ SKP@u )S=S[Wq面]nNhU(ȵL@-Sdj"#]herw1Eo]St,HjX&2E^Lej==2EC+S:]SV( Lj"#ńZH1)V(w 혢): LQ,Uj"c/&TP)V*@+S Ў)z뚢cAjXZ )2R)3)ʍȭL5Eo):r-Sdők"#ńj=3F2E+@2EQT@-SdP)ZHqV*Gnerw9r;kEH SdP#5\#51Fj3MUF teB߻XZ({e@-SdZ8LQ.@; 1EǂT[abN1:PbBu gj6EWqt{uB2EQTGej"#P)V*@+S Ў)zcAPR5)2bB-SdP])ʍZ 횢EQMeP)&2EF LU'2ELhwMѱ MebP{1)2RL )3c޻XZ(*)2e@-StgX&rGTM厌P)&rGW{{hr#VhuBrGQTj#c/&rGF ܑbB+wt Q.qG]wt,HjX&rG^L厌j=&V(wwuGǂrGTܑ@-wdj=3-H]SQ(#2E^)2R[FF#732ʍheW^vMGeyS)&TSLN{vDB N~g C8@lb#5H W{&͗hn+Ю;QP{rGF ;2R@S;Ev'^㎎iBW($#P}E&TSLNL=e%"@W^'>+wE5;2厌@-wd'4Z\h}vѱ MbP{1;2RL厮@+w=rG+uG;P{1;@h 4"qG]wt,HjX&rG^L蹗P]홁V(7 MB wuGǂrGTܑ@ϽP}EZj rGuG;:r-wdőkH);2ȑ4O;ʍhW^vg厢8[FFje)񖑑aw{1:ųN1:aS;mj7؟ [ #7@#%H Fj5R@&Ns.T\vMѭ2EQGۀ2EF T)2RL*NPˍUx(_y蘢[㵱(*ڵTS̞NT=hghj$@S+@V(*)2e@-Sd홁V(7혢[ =2Et LbB-SdP]홁V(7)_yЮ)U(jB-SdńZH1z/Zj 2EMeB;5Eǂ4)jB-Sdńj"#ő{B_y?bOέqeٮ;%c厌厌^ ܑqD;g.%5;_yuGEQ–;2Q;2Whr+Ю;U( ~s )zP@u EVV(n꺣czWjP#54RjЫ=47rLh.+@rGQT@jH);2-\hQ.^㎎iBWoRkȄ)Tń@Q.4[F EQM厌jH);2ФSn.45#rG+@+ٍ%/Fj%R/F P3Rˍbd+Ô g+Ю;DZpZHARGF R:2R:sUo_~ݙ) W5]vEe]Zrg)+r?e@-)ԲIh~JE*mؤK& Wq4>~?:/+gTȽ4mҹ =S=S NTS)@oſ?"53X6R(ݿ=< u νMo 2k>J)n/xMx$':IAHN ^zk t{iZsA::uHrR{1INcy#ޞqnOgA* gYn/{q\LNYb39)&LN NoU;ij$#[X%qh*^ tY@䤘Y@ZXHVI\yڴJ*]ET:VITP*9)V(45UW^6JWQuGc@ZXHVI\yڴJ$CEUzwVN1:vaJ^=xX>FQ5RhP#5H Fj5RgX1SqڵJCma7oQGP#[:?*NJ@uE/2Z~/2ϲ"z/kU3-d@l&#b=4"Ә T+ЮZzM֌jZn؋ܒbf-d홁"@S#ؤ׮M:CyGKw^-XS̱N]c{x{*2LSqЮ;zQՄjG*)P@e##;Ub^er~q&V6) 6 leӨqerMEnڤ&EQlǫ M2R{I&"@W^vmkeZ6 M2R–M2RlR.I[vmkenߵ9_r@u )Saf-djc'#*,d@G>ZViYV]-dY8)f2NF8)~*㔋le k>*Eu,d@e'#*8=b3[o5Nǂ>EHcH FjFj 6Rj=44FC8cAjX*e@-dZ\her5Nǂ"jBu )S)&T^\R.t{uB2NQ_mxLjc~~^`)u w/BZ.=e^+Fկ AJ S)Hh_ُ/OH[{͸n?J+>+EuZ l2Rdogz*NF³RK+@j355 T=!@uy)S@+i ]&t{hW-}Vj) V8Z2RԒ ZzĞJ-~xYV]Y(g&-xfԒb-dlK-)~*<3Uji*@jRKQT3k%c/PYjHRKF TZzĞgRKlG-ݺjX~q@lƱlb#5e#5q,jϤrqLcn2Z:$p,ݥ!)H\⋫ :J@"+5WhΟݒOQT S)&T@S)PE{b{:skofvYV]tdSbu :bNX@\i\d+^yڕMv 3{!SgJ:vN]S`&T{j7s\\vҭKQTj%c/PY~HKF TL!Z 8?ˊknqszp:Sjfubfubfuh<̦v[eK3@u :PN48MEv[嗢s.cNJ@S)Ph$*<8m?ˊknqs3fVA)~tAA{_"+ 5_]t,XuD1Fj2R@e=#[;\3,+qJ d|ىY#5DJ̬2NF8)~*㔋cfs`d@mA3k'#ZH1qڣf.g6xqq8}U)jfϥ>{=ڥYAYAK"3[y8EQgϥ Tz/Pt T:6>?b3[٥oϲ":AEQ!-e@l9(#⻃zzE2N["/Z٤@ϞEuNgJ:vbu :dأEvs}.@-I, )t T:*NJ@QN!Z TdfeEuP_szp:SjfuAA)~tƟ"3[y8EQS쥀Z q2RN q q:)6R6Rc@eHٻ#Gέp.CxYV]](5R)Rbf?q2R XHP\3 qcAY8RHJ_bf-tGlerkWgYgk+E5qZ؋8)~,t5q"3[8EQg-dZHqZHqz{V)l8}wӱ ٌ_Ru,@l'#b8)W)8"@;yǂT jfugcNqѐNjo߿ދUZ\hr+04aaBu :PR@^)F{e*45ǤT+Ю_RՄn̹^{L)z/@+sQ.t{h/}W~)Kz-dnW~)9~fczP#5\#5&H TFjC@eƄ^U/?ˊ~*E\*{@A\\pn$@Sw ~IQT@afu :3SLk.45W]S٤(*R5:PR@^)F{f"@W^vmOe(PIF vޫS`)ߝ+00Mh$k##ők##*,wd@uwGǤ&~3ӵIǂ$l٤Xa&{Xb&)W6)&"@;6SѱIǂԲITl@-dj٤=]I<&U6iڤ&EQ=&Y6؋e",d\ lR.2ME&c~6X& NqW)zPSMJhXMZ MEntG_/Iypuܑ#'*9)P@uwG;={~L*lRofa^6\fֱIҽMrRL"ui);6ޞy T4&+3۴I_/M1ɱI^ulҕRwU&9Wdf T9^ TІMziڤsAP&]KՄ:6ً ulؤ{{ M M*ؤ׮M:@(&HjH 5@ԘЫ=\@s#Ǒˑ; UO5 SyXKH^#sN; JEI&EQM/L厌^)PYjЃson-RgYwmke[6؋ilR!l$LcerilR.c^6Xa&Rdj٤H)M2&"@+ؤWDG So )aNq)T!SMJoU'En]Z٤(ǤszL:S1IS`):v9=,` T\vkCFQM/LNrGF T;2Rk|ĞRkyLl6鵲IQT-db&EJ–M2&"X٤\ؤ׮M:ebzLlǫe8^-tgMʍdBwĕ }ڤc 4bB8ԘP#5FJLjƄ^홀4DŽڤ7]51H )dn$#5F M8cO M+PD[զe`P&)&ԲIF TM#l#[V6iYV]V٤(CزI^Leh$#!\٤\d+ֵIǂtWlR,IF MZ6ɸ"@+lR.c޺6XZ6)*M2leˤZ٤\h&umұ =:ruN1:3&TPbB+O*Ez ֛HR@7+D"@;o"}tmұ U7b;j$#ń{)M2лMzw.4i"&rG+uGnpES<&)S̱N]N=8̩n?W]w@-wdP)P@S՞p_}{~LlR7p&}tmұ –Ml-db&]홧1)&IsI%ױTR:Z fPof  $F'Mz@XEvl{&] Pc;T{qZ6)Rj$MEV6)ڱI]t-H@[:)aN1wJ{1:"@rLEU?6Z"cP#54Rjٞ47r|h&}T6)HH^#ÞN)#vثrJKq踣d7soՄj„t T:*N*#{cOϽl73{,;MlRb&{زIRe+I4V6)ڱI]t-HwU&Rkj)ԲIZ٤\her7>C8 Ứ&T8u :!|PN4ڳ>&"@S#9rS+Gn&}T6)1^zJtcN]S{u :h=^MIa&9{ԱI3\ -lRQdBS#Z$qh&})l,$xLrlc^&9)6(IkqڴI 4jB*&9)P96IʲIOǤZfI숛6OafQ!>$&9)MrؤG{ֻjaFIЗMIQ@j4Rj51= \kn|h& w/>le"Z6ɸ"@+lR.c^t-H@o!bI3ǖM2Ṟesl٤u+lK&] PcP&)&ԲIFj<&)P+2M==&Iϲ]R٤(1Leh$c/[6igƤ8+ҵIׂ4M&)fֲIRwU@-4۳lRn$Z٤ ڤ&EQMej٤H)M2!\٤\dB+L@6饲IQTIMcv;`lk$#&"+w]R٤( l,d@e$#*&ƞ*?k^*EزI^ {d$c/MY歹MʍZ٤7]t-(kP#5FJUP#5fvgx͍@sqL;ЮMzlRP&{ԲIR@-d\MEV6)ڱI]t-Hj٤X*lRcv;̱esl٤u+lk&] P&RHʲIFj<&)PY6ig կ|_>6{zkMxM:ڤ&EQ–M2ދil-4۳Ncer#!ܱI]t-H3k٤XfVP&EJU-d\jGLher#Z٤ ڤ&EQMej٤H)M2&"Gner ؤ׮M ՞h&$mmc$#k$#&"+ ڤ&EQMeP&)PY6HʳI'[!\t,;MzlRb&{زIRދ$&IMʍheWހumҵ`?(qH5Rj,@sqh.;ЮMzlRP&{ԲIR@-d\MEV6)ڱIo]t-Hj٤X*"%leԸ)زIW6)9>ؤM$M⛩e^llIǤZU6YCk*Eu[6 ĖM:^ ll:MʍheWށvm[] IM2R<&{)M2]I]55M:_yڵIoMj$c/&ԲIR@-d\MEV6)yLؤMebzLlRuzދ9l`{I&-}B6魲IQTj$c/PY6Hd$#*&ƞwrλIo]t-H3M0T= @l٤HCزIAM.2IqWl̾wmҵ`E1Fj<&H5R8^:۳<9w]^٤(*M2e"Z6ɸ"@+lR.c޻6Z&ԲIT<&EJ$#v&q5Ṟef9lRn7s|I]t-H@-K=HʲIF TM2RLha~cOIlp&W6)iIFjH?jcŽWN1:BKa*9S\܁vm{eM2bf^)PY6HaƞgKgxGK_Bl%c/[~)RKA\\d+_mAP⫍NT;8^u 9EV(z>]^(*_2"Z~ɸ"@~i/SMEvl{&] ҄D=&IwJ=&u9):+甋`R&k;( 5R5R@e*#5P6Ǥ񌛋cfϟeGK_Y#5f6Rbf?=NS ?1`fg( a*t T:*UG#*E5_2嗌,d@KM xqEfc>?Jy-H_n'fV)5:N1:N1:Z\{$d)35NqY8^'K*8)PYH!3[9ZRَ:kAYNU],U_^ )Q@SLNK4Vv)z6]u-؁FQ̬Fj5R@jٞM\@s#DŽzk>+Ef%;S)@u :%"@S#=^y<&}&2tDPlS)@u :h:H"@Wށvg嗢({xx5R`嗌+`R܁vTk3zOR~qW6}V)j不|?:NS ?FLlj7؟;ЮZL#.)fV@S)Pt Tit䖀Wi\dfeGܕMlBl&c/[HؒMF "כrLcWށvg2"̬3k%#ZjH1ZYZ\dB;j髫ZP#51Fj5RcBjƄ,@sq͍ۄ~uҵ eX*@-dj%#J-"@+/EG-] P]SLNT;u@^LN4:(.[EOhW-}Uj)Ƚ )@NFJ"@WށvWzf<EQ=p3m@^S :h:Hw]U٤(*M2e"Z6ɸ"@6\hj$@+wt뎾*wE^\N1wJ{1: "@++L;Ю;QDž߷^zJ =[F O{]xt)ؓ:!^횢EQMe@e"#*)P=LQƞ~n-pΟeGuG_;{;fVA)fVA)fVAH2 Sn7؟l@Z3Y#5H TFj2Rf{8DͭrqgϟeGܵII6QTNزIF ĖM2R lR.;hn$@SwڱIߘMզe<8R$l@u)ީM\h$=^yЮMlRՄZ6 M2RlherMEvlw&] ҄j„Z6HԲIUP&,6)Z٤\h&}wmҵ >M2RlRP&WdB+lR.#k+EuZ6 Mj$lR.IЎMڤkA1gBu\NPtPGND"@W'k+E5M2e"Z6ɸ"@r{Gہvw厢ߟb3ދ S ދ )VV(TП;Gn 4RCGJ@#5H/7Fj`7Rl,{nw]SS( 5Rj@e"#*)P=LQƞd`n-*wt,;;Ic(*ھX@SLNXFqgTdS#>_yuG?;j#c/ZHrGF ;EV(qG?]wt-HwUv&TPEJ<&{1;Y'z)7 D:_yЮ;Iʃ#rGF z/Z(R 厌+2;E&rGȄvO] ҄j2TC,U"Zȸ"@+wQ.~ZZ(*;2rG^;Y$Z\htѵ fS|3SꛩN1:vISqeraZ=~*wEk#c/PYHrGF Twtf*l&iڤ{6xFIW+oV߭ޑc@ZwT4WE6;hwt/H@WN1:PbBu :ń@Cxj;ݦH? 8"IqCuD pHrR{ӷۊ.~4ҽ ȷPSwJMN1:NSLN\'r*2Q\<m?u0g=3'@S)Pt Tit䖀Wh?ˎ)~ic#@&'bG69)'4jh$p.@;j饫!EH5R3)=k̬@g{/8&47r|mBꙈkAjXzP@-)RKZ\hrUKׂRKTԒz鹿Zjɸ"@+R.^jZj2\a,U@^L":%9WhrZEvKW-] P@u#WSLR@^Cu 4EV(z~Ktl-2ƍ-EQ=Mr*?^{N)z/@=CQ*45T;ЮMzlRPmmP&){)M2ЇMWE;Ю;zI2c( wd;pGF9ܑVslu+w ;z麣kAZ("{1;2Rl4,.8F*#܎)z隢kA] E)2R̞eg"#őgZHV|}횢k4j=H FjL@ԘP#5,@gq4DŽ횢$8=4 @-Sdj"#h 4P ]vLk] ҄Z({"SLhhGLQ.c^ZZ(*)2 )2R M)EvLk] PR2E^{2EF VI2EЎ)z횢kA-xʍ ދ#2EF )2R ճLQn$?uMke,SdPSLhgZ\dBo5E)z/US)@u-:h r@Lh.@WށvMkr|mL{e@-SdjٞhNQn$@+Stk^e@^Lej"#ńVhW }뚢kPEqH FjL@ԘP#5,: 4Ǒ{k*SE2E^Le@+S4+HV|( $8ƑET&TSLNTPhg(@S#L;Ю)zK)2RLe@^L,@+S Ў)z뚢kAZ()2RL )herw1Eo]St-H@-SKP{Tők"# 4I!]SV({eZH2EF )herwЎ)z뚢kAPmQˍjB-SdńZHqZhg<203uGo;Ym_ZHklo1 lBX.45;:_yuGo; @-wdz鹿Zȸ"pgQ.r?뎮!EH FjU)kL@g{8F |hW( 厌jH);2h 4Z\@wP QT@$g/꽘;꽘PhgMdBS+@rGQT@}ȵܑ轗P@gH޻ZߠzO,=~ףs|^`ש,lbkG\d+ô d78r-wdP)PYHJ:;eBWށv{厢\{1{;2R̞厌@+w4+޻Z\v&rGF ܑbB-w4۳BmWI qLvM{e&2E^L :ńZH1ўhW)eBo5E)j"c/SLhgZH&4uS5EׂȍjƑkP#5H#H = Y\&47r|mB?Zj2~K=H2EF )2R LQn$@>h}`!:ZjPbBu :ń@u )ީdž,O7x}B2EQTGeN2EF ўher#횢.XaB@je4۳Mbh8H2>Z\RuL@-SdjٞhHȭLQ.@;k v-C-Sd8r-Sd8r-Sd8r+S4+c>Z ĵDĵDb@-QdPKEj O>Rߏ'N|k=~F6Z؋qb\-mdJ:6hG}tѵ ZpZHFF 62R,@!b@+mt6]mt-؁FQL@8jlٞ ih. =_yFIl;jPgS@+m4+HV|(J>V*5R{TPN1:h:Q\F4w]mYi( @-mdji##J 456:_yF6ji#c/꽘PK)&F=V(76:_yFvpZHqZHFF 6YV(7mFׂkiXzc꽘PK)\K)JzV(wmFׂFTjy##ńZhgxmhZ` Ў)욢kA] O)2RLej"#ńVhW)h}vMѵ LQ,Ue@-SdZY\V(wZx5RjP#5\#5qtg9rgq9rq=_y{ꚢkA]8rcP#P)ZH2ELQ.@;/}a!:ZjPbBu :ń@u )ީY\Fry(w+5E_):r-SdP)ZH2ELQ.@o5E_)j"c/ZHTńZhgV(7{heWށvMWej‘k"#ők"#P@+S 횢$8j`dńZH1)2R)ȭLQ.Gn}uMѵ =Y(\{1)2RLef{ LQn$@;k ebbB-SdP)&2ENherw1E_]St-H@-SKP{1z/ZH2ELQ.@;k;({EFjL@jƑkٞȝhn8rsq=_y{(kAjX*&H2EF )2RL,@+S Ў)BtLѵ eXSLNTPZM,@#]Oh}W(ȵL@-Sdj"# 2E혢)  Le@-SdgV(7{heW'k+SE5)2ދ#2EF#2E=+F2E+@2EQT@-SdP)&2EF L,Gnerw9r;kȵLQ,UE)2bB-SdPZH&2E+5EIp E5;E^Lej"#ńVh LQ.1E]St-HjX&2E^LehefqZ]vLO] vQj)2RcBjƄH =ˑ; qzvtMѵ LQ,jj"#P)VhW)h`!:Zj2RTPbBu :ń@jfqx}B2EQTGej"#P)VhW)htMѵ MebP@-Sdj"# 4I!):_yЮ)LQՄZ )2R{qZhg}(LQn$@+Stk~*SE2E^LeZY\'2ES5EׂtZ(#2E^<YH1)Y'2ELheW'k~*SE5)Dj"#ńZH1ўMo*ĩltѵ m7aqW@b)5HӿbA?i/&[A)&[Ao{*$^?=w Vqf?[RjJ<¿ŧj{R(*Tj#+PY)fw[\fwTu;abAPUdȄ@u )ީgw[\FU}yg@|< udi#+{߿c,HH˟b}ǯᑬӪᑬt;ҝX^CiY+ϳ kH%+RJAאJV ^Z}evtvSLcEd(^/^}EJ7s{|Z oi{)ە>>R/V9? A3N,V g5lO:Ͳtz TtR2U~=鷸>ד2bbiBדK$k/a$+'g5(1{YUE'}y*kDx"6Rc@iƀHxf̔:Ttϟc;_Zkkk&#^x-d[Y\Hx& Ўob目 b8j&#P7)ViWoh7t}ӵ`?-Xyez/xZHMF ozny-|so7WkN:ogy\u\S#ᙊkG1tӵ c{1c2R̫嘌@V?+H.?wҵJׂT{! cN1U2RL ! }'ɄV|:Γ~_h?:ON1:OR_hzC ޽Ƹ?N+^*EuCx-dk %#J(zVB)wJׂtZB)J^̫%j ٞRn$,@;B+;( 5R6RcBjƄH Y2h.+oGk!] PmaR,jjdj9$#! zg)wuHׂrHT{rHF C2R,@+ ЎCz:kAjIXZ؋#WPK"){_JgqKi.@o?rufXGHq ePEJ|&;kvk!] ҸZ)qx^同fH{N ڵJׂزJT!FC"lYٞthHܵJo#Y+-dxfRPK+Wdf=+T=F4u 툤׮H *H2RDRPK$Whh*IЎHz튤kAzq^6>N#5~*~R`xڋY8uYxw0s\܎ܷH@(DO:M@e5PH TFjIjn퀗cfϟeGUKoɈjbp@S R!lb}EG{C84F4uUKׂ4p,=!)q)ߟKF{]ZiŞ`R'ޒaB-dPK-)aK-)P@UY\F2LhG-uҵ M.7oFW喌@-4۳zfWIؤM$M ej$#PgPLEI1;:_y?r- \)\)꽸;ZH4ڳ:;eBouGo;zʵܑG厌@-wdYV(7 ;Ю;zKʃ ܑbB^ܑ厌@=+F4u ;{~A"NT8ru :=TZgT_H*+=^y;@(\#5H Fj5R@g{Cs#DŽzk+SE2E^L )Y&}4&47):_y5EI]{h{bPS)YFqH"zk+SET\)ZH2E=+ 45):_y5EIp0)2RB2RLef{VѳherwЎ)zkAz(LQ,UGej"#P@+SɄV|}B2EQTG62Le@-SdZY\'2ELhwMѵ Mv-{h,U2EF")VhWI 1):_yЮ)zLQՄj#ÄZH1z/ZH2EMheWށvM{<YH2EF )2R)Y)ʍh.Gn}tMѵ`1#5xqH5R^#j:ڠ{۸~tѵ`ʸ>V3Rеet;ҝヲ^C~ǷRH1ՀW^N1:އ.:ϱ_2U:}V飲JQT-db-d@lYٞU\77U:_yڵJU 3kY%#{{ԲJ=+*F4uCc>VZa*RH1S UYVV)7U:_yЮURՄZV):A wJ{ԲJ=+57Lh*}tҵ M-CƅOgL,=Kّ;#sN0S`)BS;m垖>]QY( ^ Tў)sorgw=G噢kSc噌-d@lyٞu+ϔ!\y7]t-( Fj5RcfjjP#5fvgx͍@sqL;ЮZL ET;@-dj%#h 4 Th&}"+:6Z&T! c"cȄ@u )Y"@\vg厢&rG^ܑ ;YFϖ/2LhWށvg厢Z z/&TSl rG;Ю;Lv{]Lf)H\⛩ :d >+wE5;2厌,wd@Y~=>둛 $3лO:P)S@++ ]Wށvg厢Z ;2R{rG=+ЇPz2EMh}vMѵ }mHkeP)ZhgZHV|mBZP#5\#5&H FjL@8rg{=ln@cfϟeGuG_;Bl#c/[HrGF ĕ;D KtWR1) /̬NT;%~gj+4ڳ|3EF4w]wU(*;2"Zȸ"@&9s;Ю;QP{rGR@-wd\IrG;Ю;Q{)őS);8ru E&Bȑ{뎾*wErG^QPWhg"@+w=~h}U(§԰:Yu9)u9)'\ng;Ю;QՄZ T;2RܑC;=3M^eΟeGܵI_{GQT@b-);Wrn%Kp|N2d1?* ˿ĕt=b-tg+ &O^~wmҹ`IQ@Ը^jHoUcH39VݟEQܑ@-w)rGƉQ.45;ڟKtwEQ:?S„@u R ދ )F{ MEF4+Ю;QP{rGR@-wd"@+w~h}W(AHH#buj:6Ṟ aEv3ǟ(^u&xHq@S)PYH펶2?8l&}wmҹ >ĖM2R le+LcerݵIt:@uR[US{/Fg"VMwt< wtP9{qGwJuܑs"@ wTI~(^ᎎGG^{.sṞNfcأ"S 鎎GP9{qGN T;rRz[ 'ӢKff6x4mҵ }^zC!)Uu :4ui)'%{Ud?P(t{:Mt<vlc@Է>Mzg^ߊsBS#WMwt<㎜@wz:9 -QQdB wTІ;:Mwt-HW'S'ŕO㎜P3OhᎊF2I(ᎎG] PKP9{KM㎜E&pGE wtP Fj<)^\{v\\vQ( + Tz/&T@S)PE{# [̦~3ϲ"ڤIQT-db&EJ]–M2Nq&RQd7"@;躣sA-wKZ؋R@-wd"@+w bj#c/Z؋KrGw{I;ʍʭrGQTWv4ܑ厌?Z\dB+wLh]wt.HjX&Tw"\@-wtgF2;ڟNhIy E s-U2WJ=u9)~u9 S.2Ǖa+Ю;:厌W厌^)PYnzlRn-3[٤gY?6\^QߪFj 6Rc@)q { FjLݞ1h.o+ЮMzV6) &@7"Zo"'D"@o載Lvc\QT@aBu :ń^)Tń@="@S#Th=+wErG^QP'rG"@;uGjX΄ZH1;2bB@+wg PRrG^ܑ@-wtgZHO^ܮ;zV(H?EJ<).Ê?cOb S.2Ǖa+Ю;z&")\)&T*)P5Ol??2Mq&=+E5MZ6؋#X6H1M8_I11M+ЮMzV6)w1̬e,d@e٤=-{ǿUj$Z Я;:?(HK#5q HKn.N-7rw 뎾*wErG^ܑ厌@=3$ƄF4uw踣sAPU:>N1:PbBu :ń@C@8Oh vW厢&rG^ܑ厌@=3$"@;iB-wKwؙP)&TP##0B3Fr&Ў;꺣sAjXZ z/W@+w O^ܮ;QՕaBu+WS)홁&Uĕ[Y\dB'@rGQT@厌@-wdhgJ(7 Lh}U( T]:ń@u )@=3F4u ݞ횢EQL@^Le@r#Z _]St.XEQ5R5R@ԘP#51w{&wqz͍@sqLhLQP{2EF )2RL]F2EWX)ZЭΚ@^LNTPhg(@S#LhLQP{2EF )2RL]V(wSk;2EtP)&2EF {2EwqZi47e"| hy(H:V7R7y {Oe$v煤w_~o/xz?`}܊O߾ ~oԟԟ_tk_ߪF*C`_@ߺ@YETS)@u :h 43H"@'@߻@YETS)@u :h 43H"@'@?@YETS)@u :he~p b׃K8ĩgYv !> NX@S )u ўh*45 ׇ&c 4@jH_}}@P#5^홀9?y:n{+ г8XKn|s$սS`)u :h= tLU( г8-PNJ@S)P={^ůKff܈+.b$gQ]:bNLKXbqgTdS#ݞ}eAz%S\gJ]:vN1:v{4qƞ`O}qڵI,H@ϢPbBu T:*NJ@Q-v /gY.:5! [~ Ė_2R qRIM.2_Evk/ Z~)3_2R칗zZ~8I%KLh'K_P/{1_j%D&q&FIW]Z٤(*M2e"Z68ME&"Wn&umұ`r(qH+7RxM2R՞618O^&k ebI_d-dƫe&+ MzKtr nQHJȄt T:ńnWq[n$bPbB'uGo;r-wdP)ZH43Qn$@+w?yuGo;z.US)&TSLN43Pn$@Sw+P,DM.c7Uru"NTS)F{fQH"@'@2EQTj"c/ZH2EF ўhGV(1Eo]St,H/E)ʵLe@C@+SɄVh:]SV( Lj"#P)F{f)ʍhe'@2EQT@-SdP)ZH43M+2Eȕ1E]St,X( FjH+H Fjj*N/EcBsqݟL{ S](:PNTS)ęV(72ݞBt'1DQծ:PNTS@8Ohj$@SۓW]S^(*)2e@-SdZ8Mhe'@2EQT@-SdP)ZH2EWq O^vM{eZ )2RLhe 2E\S5EǂR]Ptg )2RLhe 2E혢):$) ex)LHЛ]zGbw̭pW(ܑ3k##ZHQ.Ր O^v{厢Z ;x*'c/fVФr;E.;躣cz GQ5RjP#5.H ^@L?747rLh. 躣cAjX*F ;j#D&M4&44@+w?y踣d7;x?3kFj/?3R`??n/XƓH1z/G9NEvEQ];2厌,wd@U8}ɍU'@rGQT@-wdP)ZHrGWqZ]_}tѱ =C}!g ;2Rܑh厮 rG;:$; 厌x:j##]hrwqG]wt,H@-wKP{rGF]vgI L5E)zZ؋+2EF LbB_]hj$@+S?y5E)j"c/ZHTńZj+SE2E^Le@+Stgկrw|+Ю)LQP{2EF )2RLUV(wS5Eǂ}=􇛿նnHqZHqi"#s1R_xNH}S_yE>CvgW V5jHAײFF ^^" ݵݎC:cAz]R,UᅱC2bx-dx]՞5G_BJϲ>oV鳲JQT[*{1U2RLe\(ȍhe'@V鳲JQT@-dP*)ZVH4 \herKaV\\WqIIJJJJz­goE#ߡ":2OC* P*]KOU'P*9):VIQQW^B|+PE*==$q6.RL :ńʜP}"@="@S#Th*==V*+ױJ^uҕR@h 4ZXІUzzhZsAraBX+:V9f*E6C* P-fS\VrR\^ z"@8?CS I1IRRbBtP$9'4~U4Oh*43Th==4ѹ =8xk.Ͻa^̱N.S:CSIt_\_0EWQ9 T)rRrLd]K^gY7CᎮB#g/;IqGN ą;*Lcᎊ"pl`(dP#5W#5qjt9&4˄&C]#jM@-w)dP}"@+w-~TELh^e|1R{T3SMdBSۓ EQM厌jH);2Nhr;Evc 3rGt {rGR@-wd"@+wGDG noT|3fj~~^\:ūNq1+Ô` T\ܮ;zLvgYT@ujK=ڥS)@u IMI{_\vc=S\:*NJ@S jݩZ~s o?ˊk+EزI^ lRSղIƉ .~wTHVh +wErG^QP'rG"qGO]wt,X_(q HK8R׸zgz^9&4˄>uѱ ~wK#PEJ~wd"@+w'Ḏ =xL{#5^sO{eravS厢K3@uYS)V)Z<(gv4*E%@-dj$#\hK\@~$1.(*ھ0:PbBϔ"cń'4Ʉ"@'@rGQT@-wdPEJܑq"@+wQ.>Xګ/2t {rGR@_"'rG"@;뎎 bj#c/s/rGƉQ.rGЎ;躣cAz 4Ri7S#kuW'IS`O2W0vN3>rGF+W*)P@e=t4xl&}tmұ ͬOUNX3.aui6X.a&RTlh$c/Q.W6)&"@;6k 7:@ϔzM{TZy\:~"@'p&}V6) 1l蹗j$DF{/2HVh >z0 厌PEJܑq"@+wQ.2wuGǂtvCqz=ڥS̱N2S\:0"ؓLb>?4ѹ`z~`hdlrK=>}Wzu+y-u 鎞]Eݑ@w#'h 4 %(᎞\&4 N1:PbBu :ń@2Q'4"@'tG; 3k^g/S)@=&UĄV(t{ 鎞 wtP9{qGN ;rR@oBh=?4Mѹ ])s:I1z/꘢[{fI1)*m燦):$)*)r )rRLhhG-LQQh=?4Mѹ ծ9IqSuLhhaFrH>C0EWQ=CSP9):I43M -LQQdBiiB9_PS)&TSXwje#5q1H'OZ#5_M.\s=O캣cAjX*&HrGF T;2Ri{W7xM1c>6)jFmm@SLӨOqgTdS#ޟڤ&EQl@-)ԲIƉMhn`ޑ־w@h6:~5ƹ?H?)7p~^\:tKSvn̕ XGwv?~seKEF;^& fRJGN p`ڢ_K>],x-d^,dg9$#.:3ZUVYv]YY(7 b6M􆠱?@8Rn$@+tkjP#5fH @P#5,-F8n+@Vz( @-)ԲJZ?Ev?Xt? xhxhxh2R`?xh2Rkc}E'4\{垖>]UY( ,d@eY%#*57#J+@V髲JQT@-dPP*)fϲJ=Uhj$@+tk*EԲJ^bB-dhϸUZWYv]ޙUks%3{,d\ў7_F4yLꨥZǤ;3c ;@^̬NN)z/a"@#H4z>]U٤( M2RR@-d\ 4Z\@rGQT_d̝R_dt9)^bu aEv3 w] #7bBԘP#5PH TFj2RlxL==&x8fYv]]٤(*ĖM2e"%ac/+I817ؤMS̬NT;SScR.4cR.x}B6黲IQT@-dP&EJlqEF{\hR.v]]٤(*M2e"꽘P&@wr#9r+tk+Ekx5R`?F)u9~8;vEQM厌@SܑCoIݵIׂd٤Xz$&)[6؋illz'4V6)ڱI]t-H@lKP&{ԲI^՟lR.IЎMڤkAz uS:;^)V(Zy\]k;($#5"%nv#5Fj`7Rlr0=~*wE1FjL厌^lcY\~, KtDIc4 /)S)YFq TG;Ю;QP{rGF ;2RDhrwqG?]wt-HPUSn,=agB^ܑ厌@CZH&rG+uG?;{S)\Nq@=+ФxܩP.2+@rGQT@-wdP)ZH4ڳ}'SɄc~Z\R5)2bB^)&2E=+F4#vLO] PR2E^{TjٞhG)EvLO] PR2E^{2EF#7 4#V(0E/MSt/؀I+V߬Կ?R>zh.}Օׇ)$ڢ`[FN )rRuLhhz?/h-D PmQSLNTPN1:;Mh 4z>MSRYTGc"'P9)Q\.@iiBS4@S"'=+$H\yЦ)x)L, uL@S"'=+eBiiBk"'P9):I0E 4I!&0E6MKr?>cE)rR<9IP䘢G{֧haĕwMS@S"'P9):ўhaF4u#a>^^\ͥ1E^uLދ#0Ez.@;O] vQEFjLP#5q5R@g{ hn\@Wގ{6=p-H@-SKń)ZH2EF )hz};E@S4_T[KP@u )Shj$@S =^y5E*SEuZ )2RLhefqZ]vLџ) LQ,USańj"# 2E=~}BOe&2E^Le@-SdZY\V(wSkiB-SKՄj"#P)VhW)h㝢?]St-H@-SKP{qZHPdٞ2E<U|횢?S[UGwϝ_C-Qdi"#OKEj<? ޽׌kGjkAWKR562x-m4۳ko(g%^ZxB2Rc^ԸH@Ը,@gqF|}jkAjiX*&HFF 62R,@+m F(6$Z mKP@u )SS Frx}BFQTGji##PK)VhW6hGvѵ MbPK{162RL 6hrwF]mt-H@xȵbB-mdPK)VhW6hGvѵ Q,Uji#c/&TPK)VhW6hGvѵ Q,U@-mdPK)\K_[*mזJ?ukQC6/|卌@-o4۳^0ʍh;Ю)zM.c1ETZH2EF )YV(7):_y5EׂȍjP#5j=H FjCg{ 8K!O_~oz,;;zKclbh@S ܑ厌=ODQ/FEv^㎮ifW_dbxLxx$@;u z/fVz?]uBS+uGo;P{rGR@-wd\ўuBS;Ev[] ҄Z( ܑz鹿ZWhh*rGЎ;z뺣kAzۍSǿ_^iu9)Nq0SaZuGoIyPd##*)PYHJhz}Ğ{+vl[&] Z6)CزI^ R"-4۳Ncer#ylvm[e,dR@^ll Il;ЮMzlR]^wJUu :v⮪S`)ꤗZ9n?3؀wmҵ`?r(&H@e*#5PjGUcOw/]Yv]^٤(*ĖM2e"%ac/+I8qs# ЎMzTtlҵ ͬ6-&Rd)TPh定M ڤ&EQU)qW5R`?i/GN]^9\{圖kޓU\mmZ6HJ*&)P=g4jrَ_zkA:o ui))u뽘FqeriQ.x}f~KQTT|!|uJ]SLN]j`R܁vm*Ob@-d %ƭPZ~*׌tjRKQT篥DK-)ZjH7ڳ2˫;ЮZzR{VS)US:h FMeBWހ~tҵgGxqH Fj4R<#%H-ojstV飲JQj x-def{8=}ɭpΟeGxdB``g2R {X`NXhrq]Q({%b}H2RD{fZ J-?ˆFQ 6R@l5ackFj Y_F8w]Y٤(*;J^cf@+^c/Z6ig^\hj$@+wt/qGnǤ(*ھ0:PR@^)&4ڳMEF4w]wY(~=xG)R⋌aO{]8u :0"+ôw]wY( ܑ,wd@e##hEfH&4u Ϯ;"m_P)ZHrGF aVI(1{;Evg] p ):P0)N4\ 4"VV(z~vg厢Z z/ZHrG=+zFrV|h}V/!EQܑ@-wdP)&rGQ.z|;Ю;QP{rGF ;2RJO(7 LЯ)l/!=jǗԸHH FjFjqz 4RKHoq=nW}M{vkY#c/Z )Z ){)wj{ OOtW!EQFծ:xu)F{xkn$<+t됾*ETPNTS)F{VI/4MeBWށvW吢Z C2Rhfq]vW!] vErH^同@+4+!㐾ZZ)sZHqZHqZig=r+ɑ@;됮 +RTńZH1z/ZigZ9HV|uH_C:r-dP!)ZHqVi#rHLh!}uҵ M0L同@-dj9$#! z(wϷMw!] vQj=H FjCjƑkٞȝhn8rsq=_yF}!Z 72Rhghj$@SS蘢kAPmQƑKC"S)&Tgh 횢EQMej"#P)VhWLheWށvMweZ )2RLhefqZ]&cZ\mX\@-Sdj"# 2E혢)$) eZHqLlzLQn$GneWޏܮ)N.\)XHTńZH1ўher#Zw]S]({e8r-Sdj"#zV(w#cZ\Ruj"#P)VhW)htMѵ`E1FjFj5R5RP#5 p~cO/֎C8g៮;$ھ K)[HrGF I?HV|(^~IQT3 3S)fVS̬N4{4 TdBWށvO厢Z ;2Rܑhz"@ouG?;j#c/ZHrGF ўuBS;EvO] =rG#rGF#WP)Z"@+w;$; 厌j##=rG=+FruG?;:raB-wdj##P4FrG+@rGQT@-wd=rGF#rGF ўuBS#rGȑqG?]wt-HGm7yqMc)5CH\cN1:F+T{e:/Mwt/؀yB?}:RbJGj'w,Z_숛%ٍtܑ Ď;rR vܑqᎊ&_S) {G/x;^)@u)3SScfnQh$W mϗ͢:wP9):IpGE;*mϗ; uܑ㎜@wZE6K Pͥ9uܑuܑ{pGE;*mϗ;$8K_dfEI1:qṞ :$*=$=>_ w4 TS NTcNTd@S}.@pGK;@u :PN0LEaZ;Ц;|I2t{NJ@S)P OTiLz,?]t-Q_d@lb#5H Fj Y4w]w bx5Rܑ厌@+wMh*tѵ Q,U@-wdńZH1;Y'4 %V(qGZj2T{1;2RL厌Z\hrw뎮 m7so,ϽϽF :u9)W)^COR7H,wd@e##*ٓ^erؤ?]t-H3{ X@SLNXFN1!zֻj*4Odr+3O]T@u :PNTSM2Rle@+lR.&[&] vQϽFj5R~iP#5FjYrq͍Lsq=_yumҵ D5Rle@7r՛HΛHoxΏخ m7so,=sosN{1:vbu 졈9NEGqQKqЮ;z"E|N8q^ԑԽS̾rf\;"+?ij_]#)꽠ky$#{/ENtxנ۱Jo]t-ZR>"t-d8e-)Ek;נQLo]t-D= S)S)fN)wj;נ{}ަxja3>VgW]K7)ZHAKѽS+ݽwt;魫ZL2M^̮ i2RнRtJw~kxwt-Xybv-dki'#{/ENtxנۑP] u-ؿFQxԸH5R7^#5<[r#Yۭ+ %bPF 2R$hh2SFF4)v${WB] [ )&TSLNTPhHhr#@W'+o 2~+i8 =,e@^@MEzx0 %P@-dhghj$@SUMׂtZ){ k2Rz/Zigz/]-7\vm7#KTj%#PK/@g넦F4ЎPz kQ;~#-JF z/JFJZJϱkW(WnZFH2JF Q2R ўu\kj$*mEuZ z/ZHF=[iHJjJEQ@-mdP@-m4۳Qn$@+mt>_[jCGngZiHV|hW}T( /jiٞhr#Ziw]mqFQ~72Rދ @>F4y(:^y5E)] @-Sdj"#P@+S 횢$8ZH2EF )2R{1)uB+S˄vLg] QjP#5rjC@:۳L,.@s#DŽz6]St-H@-SKX0RLe@+S4+c>St-H@E(*z/S)&TzVS4+H.(w+5E):r-SdP)jٞȭLQn$GneWށvM&O/=jǟv)nZEF (2R rH-?N}kƵgW] 篥x^62R 6M6:_y׮6Qki#c/ji##PKor#Ziw]m3>jײF^{ӲFF 5:w+xo!}vҵ`{Q;ӵt^е"{tOz ΫG]t-HwWK(RJ^ൄ%f{8zwR.@;B+;(OFj̫@x6RK= Y\F7󕷻WW(] PK(R1F P2Rh%fqZ ]vWW(] PK(RJ^L%j ٞuB@+ ЎP kAeKPj %#ńZBH1aVPʍȭJ_իGQTP#c/ZFH2JF ўhQn$@WWށvW+jP!{rHF z/\!@g[9]w]U9(*C2同@^l rHLhWށvWz9 Ղ{%@-d%f{VѳuBS#LhG}uѵ =iP)ZHTP@Wr#Zzt>]Sj"#XLke@-S4۳LQn$@SwЎ)k>QP#51Fj5RcBjSlt#77r|mBZZ(F )2RLhefqZ]vLw] PR2E^LejٞuB+SɄ&}Ў)kAjXZ z/&2EF L,@+St~vMwe)2ȵLe@+S4+HV|h}W( ej"#P)F{#2EM혢)#W[=4#WP)ZH4T 2ELvMwe&2E^Le@=+F2E+@;!Z )2RLhgZHV|h}W( v-)r-Sdbٞher#Z7?]St-Q@jƄH 5R:۳)77rPtk~GnPmdSLe@+S4+c~_R e]S\j"#ńZH2EF z/VhW);Ю)LQՑk"c/&2EF LhefqZ]?k~*SE2E^Le@+S4+H*Stk~wZ{2EF )2RL,@S#Zw]SS(*)2e@-SdZY\F2E+@2EQT@-SdP)ZH2EMheWށvMOeZ z/r-SdxʵLl**S zi{=t@?_ۨ7OJW+oV{gZ4~? #;Ц)z)L,*)rc@SZGqZ> 0E_/Ip(`P@u )S< 45 MEm͢PZ"'P9):ўhlZm){v-Lc"'ń:I1)zW)* І)zi{4~kPm"'OG9)x{:}z Ϳ F_/Mmt/H`4Ni:/9)_xm[hGqB7Ԧ6z),WG9):IF FEwz|;Ц6zcX#'O9)x{NW߽6KfQ㐜8$'^ϿCzg}-RHxI\y:57k~Cj H FjPjP#5ug:9w]4[J|EQ@-dj9$#! rHmm5tdsBlf7T#ńjWPbBu :ń@=FqɄ"@W'T)jB-dP@-dj9ٞhr# ЎCuHׂtZ)3z/ZH1C2RLhfq!tҵ #yIԒHF D2R-6zWF#o}EQF^u6rRhfqZi]&tѵ M/L@-mdji##J Fh?]mt-H@y卌@-odjy##x]h}( 4?Gn隢kA- @-Sdj"#P)YV(7C_ZkP#5H-FjY2h.#|hV( ej"#P)VhW)hb!:o] ҄j2X*)+2:PbBu z 4I!&4z>]SZ( L@-Sdef{V)ʍheWށvMkFQ62e@-Sd:)eB;kȵLQ,UGG )2RL,@+S F]St-H@bj`dP##őhefqZ]vLk] PRTők"#ńZH2ELQ.@;k ebe@-SdZY\V(wS5Eׂ2ET{2EF )2RL,@)2E+oOo]St-؁FQ<aj=H FjC:۳|mhncBWށvM[eZ )2RLhefqZ]vLciBE(#HT_ )SSo 4O[rwz>]S6[׏k#ʼn <-Qdi"#{oDjy:x5tvFoa<ޅiet-kd{ީW5v[!] al9Xc!{q[Hq[9Y\!޺ZZ)*C2同@-4۳>.ZV)wuHׂwJz؋RHFRHFRZ)~UO;ϱ]Bmڍ绫+<;Y>H1z/Z>HAKѽS+ݽ]۱Ko]t-Heb:-d^x-dxo_sl/?o:m߻Z#FjL糑#5@~H ij=418f|h7W) 囌jH)o2h 4Z\h7w}ӵ Mb8@-)Mi|S.޻Zd<ţm(XzJ#5^O)Nq0NN_7UT{;R܏ܮbzO/Ԍ7\1{rLF Tc2RS{zLʭ定v<{3] Z)CL^L㽗:F3JiM LׂLT<@P}EZigZyH&ЎgzzkAU wUK4)aK4EJDqExi//SϷUj=b].$1N$N1:ŽWc{4qŞ`Of;ЮMzOvM2R$Nt!bu ўuSC85!|k>e@-dj$c/Z6igZ٤HV6|h&}$P&)꽘P&EJMe+2ME&IȄvlG&] cebzLlRuze^&)W6)^٤Oh&}T6)} j$#ők$#ők٤CcRerَMڤk>Q@l48R6Ԙٞ定cs#]5󕷙ڤkA}M,HԲIR@-d\MEV6)ڱI]t-H@-KP@-)ԲIZ٤\herٵIׂԲIT<&EJ$#v&d8-4̕M`>ؤϮMl~53RBځ%,d{/7FjyA?p=s7T$Ew?xGLWtu$N1:;ީW5v+t-Xy|HAW_:]%"{tBwA9v]Y)(o7Z0b2R{RLF,8+LhG1}vӵ =;"D)S)S %MFJ"@W'>+ERL^{RLF bYF R.@;B+FQ5RcBjP#5&H FjLlt|mBBZZB) `j %#PK()&Z&4H&ЎP kAj XZB؋ {JF V2JЎP kAzuGN1:PNq@@+UɄ>z~vWzRP$c/ZFH2JF ў㝥Fz|h!}cGOZ D2R$hg(5ȄvWW] ґkyXz/ZHFF ^(h$߄h}uMѵ ծe4*)2j"#=T 4I!&2E+Gn}%1.:r-SdńZH1)2RL,@+S˄vLW] =jǟ)rwj"#ŀZ(RGj1OΟc6oŸHq5Rj^#5uGj{zέsq 숻";q"GQ!:bK$Ejbkٴ~|㗜\ v㗜~"ݘ6M+@6$@$'E$'&E6(ҡ t{iڤs@"s:u@u)@uCXZxEnW^;in/M c$'P&9)QZІ;49 u<ԽW)u)}S`)X^0ťC77c 4C8r@e*#5PH T eKO{oqMѳϲ"ڤ!~ n-6F ĖM\ lҵ=|эy#Z٤+PLE&_dPզeؤSR@\)z6gM TC+@6鵲IQT~CXS=S :"@+Oݮڤ&EQ\Ը&EJ\ :ųWS`;'!`OM?W]wZ(Վܑ T;2RyI#~hV( v4ܑ厌hl 4 %zrGȑqG]wt H\Pu)ܑ1@-wdjk{fI(rGЎ;zc@ \Ejwh##ők##EZo"=ŞV6)7;6k eb25ɲIFM2RClBerήlT\o]t +-jkHk<8iImH+8ߴj\[vES5E)5RtϹv)tu :]RtםZSmXKq<=kNѻgJ)tu :]RtםZSmULobc#8K1)YH{M孅]qqW:U) ~ :b7ϔ\^ĕNEzI+ЮtzSPK:sT3ZX=EC+_yڕNotjI'c.zP=jIk{ft дthG:u1`Eui:剺)ui)ugN]d[0HWjj*ڕNox[>roF Rs2R9׸l_׾ү^ӮMǀԮQNqC)S)Q~hrWq)NHx&Kw}1`EH Fj5R@jk{&Wq7rt 4(*m@u :PN4ghH"@+@Q~:o ݢ^cD5 :PN4ghH"@+@"IQT@Cu H2RDhl nQHVh +mEF\ѵ=3ƷMKv{WҥHNji##PK):4 4$V(|kv0k_3Rv52R𴬑9RKiWukv{!RC:^NqC)N7ܮIѮEnW^۵5|$ D2R$hl 47m$ h6:Q UTKsѡ62Rt홁 &CJW^:+(#H5RCjFHgz'y#\_yF6ji#c.ZHFF 63JhG}$::T+&#HTH@u);43(>EWW^;>*mEա62@-mdZi8Mɑ[i+Ю6QPKsFF 62R;Fy#Zi+Ю6Hc|m "K)\=@-mdZi8wh h6:g6/1wt HʸPq)2R+ҡ:PCu a 4;ʻ kvg厢:rG\ܑ厌@+wtg;ʻ [vg厢ZȘ ;2Rܑh厮 4m$W^vg厢ZȘ z.\)\=@+wtg;ʻKvg3rG1T=C-wdP)g~ޅғ)IVhڡ]S\Eաڵ2EF z.\e홁ƞ6)گ횢Ϥ.ᖫS)\NTSthl 4F4.Gvh}V(Cke@-Sdjk{f) W^~uM1`}FQ5RjP#5:H Fjt=Ы8y#\_y5E_)j"c.ZH2EF )3h}a!::T[ kWCu :E@O*@#9ݮvh}U(C-SdP)ZH4g4Gޏ{Gϲ"EQHFJH'Fz.:[^D?!q; g+Ю;QUZȘ T;2RsrĠp|W(.p}u1 =U-wCSrG\r+m7KQ]vwWsm-kY###ԲFFGe"%,C&ːךсsuH JUj ^K")ZHגHF>+=q0"+4튤[%:I\D%b{Ľ{NMvҭg-Cwx@lHCRKƊ 5ERKЎZu1 rfjH)Z2VhHZIVjizw-33C! j%#ŽK+ҵ=5)ly#vؤ[&RjBZ6Hѡz.)TP&]3 #4M;گvh*wEu={R^N]Lu2Lȓ6m7؟+Ю;U(ȵܑ1,wd@e##&ھ={Iϲ ڤczGQ 6Rjb#51R6hk{C8G7@sqˊi~^ t!$g.ѱIWJŽMrVqGtcH6Imڤ&]ET[zֱIN=R@$Zؤb#Z$ i~^ tP&9sѡMR c@ Tl$@rMjؤM:k)A5I8>R$N:5Ixؓ^{ᜊsZ:k+(5Rȍ&s TFj2RפG隔vѳϲ"$T&gQl _m"%zH5RC8?nE!tsq g+PLE&!]զeؤlzV PAS)Pb{Tc=xHn?ˊ^+EճPճ!t:?NPHVj*@~zQk_/dqR/ Ay5IAy5IAkP+ Y_J{M6^TyʦcvIj[]嚌t\"st5n?ڻ]Zy(*g2噌x-dh؞ߋWFҭgگz3EQ<1@\<7u g2R홁V)o$@+ϴ_yLgjy&c.ZHLF =33h+@5W3~zE@u)OThl 2Hy#vgv[3V EH+@jP#5ڞ Uy#\@+@V魲JQT@[>)@u :Phl 4I3o$@t ?ѱJor#7 օW_TS)@u =3(6+ЮCzR6w:PNTS홁&eDVv(]yuHo:Tk}jI$#P=@-d3ܡi#ThGu1 ]S卌jy##P)sM2^Frz7.@;k v-Le@-SdZ8MRL~횢EQ=C-SdP)ZH2EWq6)گ횢EQL1@-Sdj"#]hHVh k*SE2E\Le@+Stgi#Z ):( Fjrj-H Fj|m1R=-*N@F8.EW]S^(*)2e@-SdZ8M W^b!:==4 v-tNTPNѡ:؞C8M TC+@2EQT@-SdP)ZH2EWqZ혢):geb;j"#EZHѡz.V*@+SwS5Eǀ2E1Tsѡ)2Rte@+Stg)ʻ Ў)zc@jj"#P)V*@+SwϷ>C2EQTPs2EF )2RLUV(.@o5E)j"c.ZH2EF )3@2EQT@-SdP)ZH2EWqZS5Eǀ먍)#5_HS5FjP7R*lu#5FjPhݛiOSm|w}-FǀEѮF pZFF p62RKO)o-*,+b$EG$}$1DRP1)S yEz1m$@SqW]Q(*H2%@-d.h*IЎH芤c@:-Cw9-ds}gPK$]3wh8Δ7^9گvhW$}$k$#PK$)s)H2VCc{fHV")ЎH芤c@PK$PաH29j$cE"@+툤H:$ZIFg%"Z"XfJ$"@;"+ V1D%"Z"XfJ$"@;"+ V1D%"Z"XfJ$"@;"++( dI0IFj`7RIkƗ#5Fj`6qž{q-뎎 /Cc)PYHrGF T+GWqڒ7T)گ횢EQ#5)ZH2EF =+GWqZݯ횢EQL1@-Sdj"#؞heFҡiw1E]St HGeb:r-SdzHtLѵ=3he+5E)Pmd8rݡC\):2EFK_qoz>zrG1T厌@l#c.zV.W(V(qG]wt H@-wCP==kHo\+rG"@;뎎 b"ZX;EV(qG]wt H@-wCP=@-w)rGƊQ.rGЎ;꺣c 4"%ܑ؍xq2R`6R;Ł=o:MuGǀrG1Tt厌,wd@w={Iϲ"ڤ&EQ|1R㫍e"%ac.Q؞SnlR.Cx k*EԲI\lRP&+4Q.4m$Z٤+ЮMJcET:ԲIFޑ1j٤k{lRHV6i k*EuM:R\Δ&}S`):vcgHsquG_IyС;2Rt厌\)PYڞqyow?xAC8)&U6)yvlW&MزI1T݄-db=u ĖMgƤZ٤\h&}um1 lR U@-dP=@-d8^+lR.c6Z6)*M29Z6XMEV6)ڱI]t XFQ{xq2RhPcqڞ4o_y&}wm1 lR jj٤H)M2V&]h\rIrGW]w]()zP=S;46HnW^vw厢ZȘ ;j#cEV(Z\hM;:#z)#rG\t厌P]3whFҡ;گv( '1TC;2REJ##E[H/7F ;6q^`߸;:=]S=S NTcNT8:T}LkvMwte")PYH2EL/^켑J3c:2E1T=C-SdP)?3ФU(1E]St H@-SCPsTaj"#?3ФZ\hݺbƑkH Fj5RCzm*NGnq_yy޺Z(#@-Sdj"#P」G齣 /2d75)g}gu :EϞ)Y"c{(8ἑMKnW^vѭrGQT@-wdPEJܑ"@+wQ.n]wt Hb:-wdEZȘѵ=sV(o$ZkvѭrGQTzU@u))աz.АHh*ҡەW]wt{k4P{vGKq=r{hLѽ\m_PY):pGV T;zl7GU34# ݋ v45ܑᎬ@\=3쎪Q HGC3pG\5ܑ3whvGFҡI(wG#sG1 5}zεt+pGV ;zl=Zgw>zј={Q†; Ć;R 6c{ PvGF4# ݋ /rPhrwuGǀԡګС;2RQP+ҡIm.4i";گv(^u&1(E&R⋌vsq0Ը)X$`O ޓ厌\)P@e##&~yĞ^eeEܵIMzZ6ɘnsزI\te홟M &W^vm{ewyYNL :EV(9^F4&mW^vm{eZ6ɘ Mj$cEx^"@+w~G{oP#5:H FjthPcѡFjg:rsq9:4+Ю;QPsrGR@-wd"@+w;:="COd"%)K|1Rvlc"+Ô` T\;>*wEա;2厌,wd@uD/2iَMڤc@Y&?z.[6HزIF ĕMEI[{k>*EճPTS\t :S*wErG\t"P]3QHVh >*wErG\QP+ҡ;E:rGȑqG]wt H"m_ƏbzjH);2Vhr;EvgVQL[7S#55Rdlk9`ˑuGǀTۗѡ1Tt厌,wd@uwGo7ӼKi63S(^#cVϔ8F"c{nLE1m$@SەW]Y٤(*M2e"Z6X饣\h&R.>aPu[Ș=R@-wd"@+wODMc@ OU):TzP=GNL/"@#9ݮ]wY({9TD&Rs] :v2S`)W)^EQ=C-wd*)PYHꮉ&T٤gYwmge[6ɘ ĖM:-d&"X٤\ؤϮM:eb&Y6ɘKl"@+lR.c6P#5IFjt@#%s祑@홾7r8W^ܯM:$MC@-)ԲIƊDEVo""@;o"}%:_d i7Ľ7{oĽH\c)#Ed0MŵCrGQTG厌@e##*)Pyo"=bO7o-p&6+I{kkSղIFnsزIF ĕMEI!ܱI_]t HebzZ6ɘ z.Z6HI&"@;6k ֩qu2R aEWi*uGbO?[5RKϲ"$?7(*ZpԒ9:-dd\FRKW]@-dj%#s.RKƊM Z д?Uh&4m9 1ulc$gEzIEM*mؤחM:$I"@u)zP=S-^8*-).S:v T0h*Վuܑ T;rRy~-^C w$V^6Krw#'P=@w3-Q-ܑXytG/xg=}{߾N <u炧<ϹƵtٕz~,+x׽I;QK1`FQFj5Rd^#54R=S^9x_yi!@1ojaP%@-d3ۥ+,C.kW`tkHSxZHSEZ(Rt}_5n!v1 C C2R] 7I,^Z)*C2同@ @XhruHǀze#)MZ HSOK!)xsL)~]k׮P:v=.xuWS):@s&DV(]yvk%ZBɘ z.ZBHTJ(] M%t +^/||}|1<-dRu_9tc۵KjAKFvsKF z.ovM ThG(u1`}FQFjH1t-)EgwW5fw.=vұ`ݫF5Rjk]#v2GJЍ@7kj:}쪦cLW˚v߽V.Of#]KF j2RеTSFVn1UM{~sֳk&tu/f2MFսSjv{j;+tX0EqzjSMM;սky'#^ !-[MļLZ5QDEW, KW#՞k/~zUA8u!6q;WؾQw3]H=,GQKОR@u :PNT8MEVj(@wM#Z&H1{2RLeLYbHf2QOG@-e{1{2R̞34m$@SǤؕOǂd٧X*\D&ԲOF ӹ=#оpFqН/0=v}ӱ S,U@-dńZH1ۜ8Nh$Gjˇ\#N\#H5F4Rm@T)55k;S]_tC}ULǂy\(^Sx3)Z_g2RսSk3v{M[ hj/eF޻EMF/&MZY &XqOz8gx_v дQKjXfVkb)Zj)R Pz&rI?<"IQT!S)R@u/^Q.4m$@S ]^ tW$W") h_&TS)TJ"@+E]^ tW$W") z#%̠{U/wZN=6qӦ"v3 tW$V˷)}*ϞR%@u/Z"HIF HE&I@wEG%&IF/Z")R;PK$3NhKDR.tG$}스cAv!ScxOxO5R`%bu/s\\{<"IQT@RTfNq)@u "@vsg"kkQTGi<_^cTt T:R/2=E_d/9W<#޵IMBl٤[6b&؞qSiL &ok>ṷ!SF/uWV)&[lN1:{*rNCqkcRńv4R jTCeHCq?cC8om\lgĻ636Q3kFJ̬_x6R ^ Ts6y~g0ݵIMY&@e$#*&EJ%<;wqKykWψwg嗢kñl%#ű{ abu/K4V~)9w_:l7 )RN1:vbu :$?蓋`,P't/}&]ՄS)Pt T=tNik9S]^y[Ϥ@@܋ NV[ b ĺu/^Lcri\R.ty}3Pd@ڋ)RN]S`)c'T{n^/EQM嗌^"K%+㔷xqZ_x8}V) {8!S )VX@{1X\d+뛀~c$EqvGJFa7R j؍TnsC8m t/}U~)bBTH$o+)P^>G< ?c'ἵqSb8E/2NF/2NF/2N7LcHV~i}}3]U(C/]8{J:!SLN]l{er악3]G{p$t/Pt T=-]pZf6w{pZ_w ׾l^֟b ĺu/1g|$JE1m$@S뛁/EQ}:{J:du :v{l= U5Ix0abB{JM*NJ_.I>+tM\dfW<#5N_qBl[b8@TR M.27r뛁/EQ}:{J:!SLN]l{er악]t,RńvH5TF2R UV'GCunMGmw\l3qSb@S )[HXqlHmFKO/EQRwU?qՋ _EV~)@ww嗢(FHb-dn%#/"+4g~KQTj%,d@GQwKCik9+s͈q;oɀ(*pW)NX@SLclxWME1m$@SCx3PT$<ڋ NTS)uWս{2G"@7Kߕ_]5zjJ]S̱N]RS8ݵIߕMP&E/k$@{>T:&-3vV~)73㗾wұ 7l4ӨS )+sLcerOfg/ fQ3kH5z5FՀs{Ǥ\l@F5@wmOe(FFJUTc#GZ}"u :9"v^ڤ&EQMeP T:*&&-xi뗎D!)Ru/^ ֽF ĕ9E2G3~*Eu&zC6F/^`)ؓ^j69 (bG>$CՄjÄP T:*.Paᴵ©.xFBi_H3R G"/@l%+Lcr;~U4 :u'amhS`)&[SLN=6q|JEfyBwO嗢a/E/u[~ɸ.P^ҹ=4Rofv/cAzR,~)R 嗌^ ыiR.2_EnML@vR:S'a'g__߬߯?zGUxb`<^6R_o]NJJNJ@ST9Z[y[g'xFi^ tY'b@3b89@|ߏ+LcH~I\ t/$-va)uu)S`/,TQ{a t/~, K׏IN/P^)PjASN xK*V1b%fV;:!S )u :؞{iQhHTg~KgQͬ8uս%@ TZ $s]KN9v㗜 T^8O_z{)YT%@G㗮Y[jSb 4_:' Ď_rR vb T/E'=& fQ3k]5RFfՀ3<&b7=&bnjhBM{=j]5R]H_u :ven" t&V6)jBaB{JMeDPb{]UK?׌x/V~) {8F݋i)u ĕ9E2G!_zRP/E/5_2zT歹MɄf6鵲IQTwվTF/uWV)XcN]9"s\98ݵIMP&@{J@t TMZg~WRofv/cAzD!)t :bNX@\\d+s]~<~KQT@-]KF/^ҹ=]5on"wմݱI6X&uW)U{JUu9)XS`)rNWi(Nk3( 5RȍPWCe*#PP#U]5om\l3_zRtqO)ĺu/^ ֽ@\\lӘ7iw(bow4aEqvGJFF Du 업 \{nߋ3]V٤( l TM2RVgt TMZ MrK,Ub/)[~H8}\do+"@wۮ_:$݂)=ǫP݋սZ\her]V(j_JqW)uW)XS`)/ u"vsWg6-I,dP&)PY6)R{Rl*_zKǂtkC]KFib-d@Tw/d+yfw[4-9)fRwU̬P݋Uher Q.2뛀>vұ`(jwHjslv#հH5&8m t&=*EkڄFJL TʲIuI˻3v{W[ /xF_Bܗw^ U/^L"X\lf~Q(C/6K½*!S`)u 업"+4g6$H{LPmm8@e$#*)P]6i}'/"3,HNдWXa Ė_2R qr_Eb hl/)f]Uxս{1@+sQ.ty}!_SꮪS̱N]S`)'E.rNCqkw0M2RL*&)PY6)RB^Ho_~~o_0RZ^m*_zT~):b/EJX~4V~)/"_zKǂ1)6R/EJFa7R6RmT;T~nrax(N뗎 647^#*JF T{Htn8_[ /\3]^(CHCHKF Ė_2RLcriR.Cx3]^(*oݜ.zW9^'ыսZ\her}/EQURj]v݋9)ؓ^jOǹ9 MzODQM6M2Rҽ@e٤HWs{]5I'U~)KǂdX,d嗌^Lqthr;~}/ PmxR!l%-dnsGI:KCq>w{嗢aJK=&Y~ɸ.a/GK_mjSψw{嗢[~)z)Ė_2zKF/W~)/"_Kǂx6R/EJFvHCH5&p.6yiB?vұ R,IF T_2R)$|nx~npZU~i}3]Q(CHHC4:4^LcriR.Cx}}3]Q(C/:"zCXO)S`)W*^Y8K_nNah*N!|ÿC873qSb8E/u^ )u^ ֽ؞(ƴME.o>i 1K!S)&[SLN]8bOE8KIxՄI:*NJ@S$\RZffW<#5NqBl'-d@l'#4*"X\f~KQT@-]KF/Z~/"@+K~X0(j~)RjvTHH5&w\lvy(N뗎 h NPNTS)4"@^8ݵIM8rT{L8r^.P,tnM^vxF>+Ex=SGD/XqOwUA{19E2Gu>+Eu]5zCXOCXSLN]~Y_xEf(b-ww( ֆCX@S)PzJۣA^ofvy3bT$<@܋ NX@S )u^ ֽ$ڻj.29E.o>+Eu)uu :du I/=9g6鳲IQTj$,d@{T:&-3vRofv/}cAz{Ն}0~8u/[~HKF ĕ_EK뗎3(5R hīѫFfՀ3\l@F5M׮_:$_)qW5Rm-dnsG_ _KǂTvRqFJMDPY~DPY~jykWk]U(CKF/KFCXNqW~)9+;~k/ .Os3TlfV"3{T"@+s]^<|GQF&R/cbu :vN=`O|/@wmWe\&E/5M2 TM2 TMZ>cj~3;~ U5Ix06=^Lb݋iԽ@\\d+s]^<~KQTp_^mzJ:!S`)u 업&^98ݵI_շ& TM2RlRV'.>t^rK߻~X0? GQ 6R6R jhb#զH5 !м('O3뗎 h N]5ROP}]ս$Q{E%Tf~;EqW5R&Rj~^`)u 챉"v^ڤ&EQMeP&*&&-&o-~3;~{/ !lXAыiыiҹ=4&4V~)㗾wұ C:! uCXSLN]D#T{_~99Cx/}W~) T_2RV>t T_zp~3;~{/ Z~)CX嗌-d@\\d+K߻~Xjs~K_zыCKFɶҹ!+4Cx/}j<=xт^2R j%#ŀ^Aϵ??N y_{5uG-쪥coyѽj?gjtT{2Rjsh]#H5t#5MZivv=ӱ`>(xNWkyH{y[3v{[ ߹ 3?y]X3)a :!S):؞hF4.w뙎iBPwUNTS)^h}WRZ'3k~*E2Ok ̓ ĺ-tn~/+ϔL?XfS<&zL)S`)Guer앍z$>P)Pt T:R%ևprffW<#5O?7 E5:YAA)~tbfcǣ:ٴ`GMLY\ϬӗەZ=M",[#[]x8=^}Hl`@''b89)^RiZl$@ $>y/_:jf/^̬ОZ3{Tha?ˋeB7Kd@P/9)&Z8{KN/MɄ~I\ t/=^ t׏IN?`䤘c :vbu I8*=m7(b<^`BSLNJ@S)PzLQIWx!_z~,㗜^ vҙZa㗜^Lclx"X xK}AzqҹtuTs;~IKN _rR`/RQ{<~R&KgTKN T_r T_pZ/+oK΢BܗWRu/u/ sTEM@{p:̇pœjpējmv#հH5&\lv93]<_j٤X*&HJ",d@e٤s{:?FIOڤ&EQF)Z6H1{M2R^l4)&h*#w3]Z٤(*TSLNԲIwgĕ_Z_x/V~) {8?^ ֽ@S]!{19Ef2G.3PLŎ_zM(ǤTF/{R`)S`)&I8ݵIMP&@e$#*&EJ—8Z^pykK~X-KZ~)zы/)fKV~i(3^+E5_2z1_2RRz~qf+u/ v:)u)~tNSgu,T.2̾c 4bfT{1R jTCeH=GmfW<#5NoqY#f6Rbf?bWA)~tj3{nlmfv`kN=ˏ NRp2RTդ/_p}^5uy3]V(OkuOF ~2 =Db9m-Yψw[[)z)Ė~2zX⬵ӹ=YgmrOot,HOQZ,7R*)uы[-tn∽Oy~zOǂT ZHq[H1~z,ӹëlZUi}!ޒi8KW)zJºӨ{Xbu/XEJ,"fOQT9}:{J:du :v% xQ{ tW6%.n[bBu/Pt T:R𥑖8wq<+]^}66R jTC43<bƼ fQɦ(CH5)q)[HݒMF 챉#T{n/dcW6 ҄j_ӞcxL2Rle"%s{xn:"o-ōu}Gea8@lHC2NF/1riR.r/o_:R$!{R`):d^{N`,Tn`wq<'( K!S]DPONJ_.I|~pZ"3qz$b8){/2NF/[8KsC8m$@+_zT~)K!S)abu :dc'T{nߋ3]R!Rat/Pt T=/s>`^rCxy3]Sbmv8-d@--db/t?S_E]t,^(a#tD!ldH5FMjM\lvCx(N뗎 hbBcx6Rҟ*N!|nI8o-`j3qzO= GQ!fF/[)RBG@?Q!1ƴME.3]^(C/OK½*vbu)per악3]^( ]~|^]DPONԄ^h$|lofvy3b7ޓΦi#!Ө?ĺu/^Lclx"Ә6@w{嗢T=aN]S`)&Si~/@Q[ڋ)&!{J@SK+vN[ TdfW<#5NqBl[b8@TR M.2_E]t,Ho݀CX=a)&[SLNPB iB?vұ`E1F‘jjTCe*s{xnpvbψwG2 >EXkӦD^ ı=#Q.i /o>*EqvGJF bWS`)&[^Y\{e t/}T~)jBОR*NJ_.s|~p~s/xFk>*E2NK!ֽ@--denE1m$p7]켽~$]!S=a)u)&T{nߋ3PT$<ڋjBuCX@S)PzjurDCrIEψq[v6 )^ )u :⤒EK뗎UZ~)Rj%@-dhr_E]t,H@-KW^_2Ṟ嗌-d^\{嗆t~c 4jڑk*#Վ\#PvFJU~mDfv}3]Y(*Ė_2zX嗌^ ֽ43+vKao?7_XH1V@S)Pt TMZ>cj~3K5#FU켫~&UT:bqOCX$ڻj.29E.o>+EKF/Z~)R 嗌^MM]5.@wlM:W;]Uu9)jbu sErNCq]Y}[)ڗRUu T:*NJ@u٤]5I'U~)뗎ifQNX@S )u^ ֽ@\\herfk/ fQ@TjP#ՀFJ5z5Fܞ]5м f6髲IQwU#wU#~^`שvT)^`Ӕ`O {qyJDQM6L6ҽ@S)PUl0]5o-~3+/EQ!u/^ ֽ@{2G4V(_R!ܗ_E/u^u :vNP7a`Pڤ&EQMeTM2Rlq]l•_]t,HOдBp[~b/@\\dJZ3뗾I#OЀKFCKFCK&/@I:KCq뗾*Eu/΍^ºt )P`B=/K_~Xa/Ru[~b/@ls{iL҉iR.t/}c 4IHC8RIH6R jmv#&{.6y۽w(N_:$CKń)PYV2Rҽ@e}[#!xW<#]d@ڃS}HG"#b8)[H1q"Ә6_Z t/}W~)K^0zq^`)&[^Y\{e t/}W~)jBߺ9^L*Nē=N xKാqSb8@l'#b8)2NC8Z\_KǂԵ:u'RN]lN1:B"+ 5 Kߕ_оT= t T:*UOCDK'|)73qSb8@lH2NF/2NC8/"@w_:CupOCXSLN]l{NB iBvұ`E1FFJPH5Tu5T'g#ֶC8̮xFk~i:" 6; fM ֽ@l'c{9mFK뛁/EQF‘{U/u)W*^Y8K?_P=!&TOTt T:*}]I•K!qSb8E/u Ėq2zR.2_E.o~*Eu G/u^SLN]l{er악3]I&T8u T:*N8G= '%"3qSb8@l'#b8)2N7Mɓp֟<K?_j%@-)ᗌ^lD5_:ly#v K?~XtbZ~)z嗌^̱嗌s\\d+4 }K},'IIJJJJ'ڞ]{[c\ьx/~,*Ď_rzXNKNW׻_~ /On/E/]YNTS̬N4g|&hV<K/_: 㗜^uҙZ?&9k{FtM*v6e&}Z>K׏Igj-u bu/s\8i,i_ tՄTJ)PuD+|g0G~3+o/EKg/KN/;~$Q&EnؤMCKu:u)&[SLNpNEsnڤ&E5MrzʱIN TtmzWM xiky)_zI:zQ!)^mt :4u :4(0GECx-`>(a#HCH5Fa7R j؍T~n {6Cqk'K@C&)PY6HʲIq?c'ἵgĨE!E5}x{^jf{Ubfubfu,T.2i~/@wk嗢(FU,d@|Lt6bU)}v}3]Z|= %/9);_rRLcrKEn|u8 }uN=aNquCX~y7&"+ 5 K_P/@e%#*/EJ—_Z*s_1NXf2NT=8Y)z'8Abf+㔋le<2NQT3k'3k'#*8EJ쥒3[leW<#5Nqjf{Jgu>S Ybf+/l奆m8 C8bfT{1R jTCeH=Gg&(ֶv]_xAU*bfT{6Y#BU/~tA̞8H\l3w3]V(KW)fV@S)PzJll+vٴKEfvy3]V9(K}6zijы݋AK\df+/5g[Wm_9)FVFNF Rp2R=/yk~zOǂv]t#QNAWS̡NAWCnO)=5=ġ;נyvw]۩AeN޵O8tu/Z*HARQF S ݹtw5["잵ɬS)S)fWSnO;+tt1uRoϮ:̮t-%ek))#KНk]^LwWGƹ]~C'kdֽS̮NAW]nO)=5ҝs >vԱ`zj˓HH5F5RjtT)A7Rݴn5jG(xk}5Hjol󹤽yy#Y}j3PI(*ZRFyb^u/@+ 7Z tWB==W.F/TN1:OgO󷧆wy3]#H_a\iFq^KI)M T莄zJc(ײPF/ղPF 2RWEon:#H9.@wc; _;]+坌^ O;)xZ)R[xN]t,HjXj_K<)ZHq{ӹ=㗊FrF9QM]t,H@-KP݋rMFy\b^{xFq<S;vk bj%j%#ńZzܞqB/F2'tG( c 4 H#H 5R jjP#&ܞYl@sMܒm,:T7IC$kw*!^Q_w>y uHs?x"RY%H!x^{P- al ڝnW(}eBɊո"Ҹ{ /J qEBiǏk&b#3Jw]u ?6+(%Ҽ"RWkjE)ЎC: yryFKex` hm^y#P@J@7Z@ghhOށBt#Rd x̿]'uJZNiB딀)M)(Ǔw]SL+"Pd@J@3Shfbw@葙"+V@){ h&"҄{ hfVLQ쮀vLѣkRL-=aו[%&"]혢G(2ELKLHiB)ZF5EYr){iB))M(2E L* OށvM#3EV"SPd@J@4 LQl혢GEȖVW.2E`/]"Sf(6R@3St>y) vV,&KH Ƅ R]q@W]h, =횢 F F %Hx"QRDӿ!d)WM`t9vRm˯=kgw:iS[4uJt딦JUtUtfst{ W߯<~sD)$]@Jt*W*{Mt;B+e"R‹H o 5wPЎP EBɖ/ %H("RL( ]P $$Ҁ"d_ ϱ?]v;KV> Ҹ"RWd@J٥U٥]|kpETd@J@])Ev fv)6R/H]:Oh.}1 .`d@J0K ٥4K٥П] bP R(H Ƅ84Ǖ{>yڵK?XEC{ h"Rj})6R@!OށOt%4ˬX&N h: SZ4Ԋ~BC#45Ǔw]s9 (H]@I$P$@J@==H Eh6 3i#[ZP@J@6)5f(6R@KЎ6j EȖV@^ri#LL hGt\! (F`/E EhOh=HMh=3k~2Sd"\d@JLHiB3S~B3S 혢) „"SdK Pd@J@))L*zA iB3St>yЮ)L E%^r))]+73Eiۄ(IARAP(gϞNh.g@USov (1E$%^g{F>_b3i'Yv wt{ v8ڍiB)l):z/!SYkxoV?t_;Ц;%h[|:`'I {)aS^=$aO Sn+hނЄwDRk&(TBU(TOMtVT,;M "&DRk&6( .&%E] t{kڤkAx$Hu )]W.:%uJ]4uJ؃^%8ݚWOh&՛0Ik&6\BuU ' z~^߄[3K_%~i-=%4R%L9Q×47FjTl/%|-=t _S^t )Mv%\='aO,TnaeyYu.'Ԋ% R5 *@j ՞Wa,:9Pr'@~=KV"P@J@z恆F hf'@6i?;L(Ix"RlHiB=hPLLljB?k3djBߨ?qu{ h:%uJZf(6R@CwxkޗT۳v Gh-m$z/D2RW^ĚnW$/Jyʣ)ѭOԴ)E 4^+}5XU e\4uJx)S:%&|eH|E$ǓqZ*YK@U)PdV{yuHK>k4 %O@JBi.K(P o%^d@JxWWя%Ccw>i.@CP^W@JTV{5sH!O߮C*rH`/M(rH E 44sH9;ЮCC!\@JHiB4sH!=:!YP^P@JH hV Ԅf|j(H Ƅ RcBAj]qW*:h, =:MqZZE K@D)xV@C#4>$:h.Z+[mx)Mh})S:%}]mi#+VK@6)E4Ff(vW@?>/m͊P^Z E4^jjE44RWn( h}vM\\dliu"Sz/M(2E %)ZE43E1E]S4 (2E`/E4 LQl&43E+k>3SdE+"҄"SRHLh}fȊڵc 2E E4 y)Օ1E]S4+v-؂LHiB))M(2E L*z)ηh.؁ZP R(H Ƅ&tqz>yrh.@k2&Ԗ/E %LH hfh= h}BtL\E@&N h: SZJ%)vMWfX]"Pd@J@3Shfbwch.z>A+[zJiBNiB딀)MhЧ:˟ވS5sGVl}1#wRBH q[{~s X6)َ;꺣 ,rGzMB%^!.' (rG=hb#4sG YP^;T#p&4|H}(6R@3wt>yuG_;z-=DZӟ)aN<9S:9Sdg)[_@+(=C;)=C뽄 #*@J= E=C3wzvѭjbBAjL ƄRcBAj`_Mtcq`ۄ޺h.@;KH rG %T^Bj>F U-;Py;1\+/E 5\P@J@;)^VQr'@薹#+V@;{ (rG %fh= hݺh.Wn awmiu{ hӱN hҕ[TrBFL}B趴o{?kO- "O$@J<(ӟmW{qh[W_wY#]d@Jt4ګ{]#u߮ŠZ(RR %HI"%ZV,^@jƄ RcBAj]q@W@cq=MI$[Z\ %H""Rj_>@聆) hݥ;PYwŊՄ^Z SZ4uJ@==H EMh=2Sd hmdt"SRZ%fh=HLh=/EV"S҄{ (2E EhOhݥHLh=2Sd (2E`/Pd@J@)Z@3S)):횢GPd@JWn"SRrz1E) [.2E4LHiB"343Ef(vW@;5EsAL-"SPd@JLjFL횢GfX=Ck# EKLHiB3S~B3S 혢) bPP@Aj1 5 ]E46rLh,瓷  EȖW.H (2E %fh= h F߲S4l_0z֎_) h-dijNi@x) h+5W.,`y]gH#ǟc׮6^勽ڙ.F`/ѭ]d@JtDJUtUtn!}gɊ9$"Rz/Ei?]3)C::!YK@C)PV{yЮ)L E%"SRj@3S)):횢YLK@ Et{ hfV_;Ю) CPd@J[))E?343EzvLOL-r){ (2E %x)Ԅf|>]S"+VW.2E`/]^Ljj=]MhߚZM*ԟ$+J Rxg^&-:'4Eׂ|咔SDRJLI hbE41EIwU|;PY)qdmQRz/S:%uJZz>hh&4xio)Z%%SDRj@S4R@STm[USDPbHJ@)")MLѳ'44R@STm[bVJLK@)")%41EϢ))*Nށ6M-1EX%%{JLѳ=ʵy)JghSڵ襈"K1E$%=&(i&4tW@4Eׂ𱅘]@)")%g{<%'4Eb5tSDRr)")=C=hbF h&c9} bƄ RcBAj1 58螡h,瓷 Ȭ 4!.ݦoF@))E43Efh%;蘢a)0EȖPDMh: SjjE44R;Ю)zL E%"SRU@C#43Ew]S"+V@){ (2E %fh=jB?k3Sd (2E`/E"]=|;Ю)zL+"Pd@J@=H]1E]S4ڢ"z/!SRz)BhLQlf|>]S\> SR؂LH (2E %x)OށvM{fX]4\d@JWnfV?CC#43E7]S4W 5&P R(H tM*:h,gh}dȊ(2E %^LH hfVLQ쮀,D}1V֮E@&N h: SjjE44Rzy5E)b ]"SRzE43E;Ю)L+4&"ҕUWnfbw |kj(H Ƅ RcBAj]qhlX@'o5EsAZRdK\P"Pd@J@3Shfbwc>e!:h.@k"uJZNiB딀)Mh+?t=PKr%vMgfX]"Pd@J@3Shfbw5S5EsAڵhB))E"]혢Ϯ) Pdli E+K@))L*z)Ў)욢 EȖV@4"SRU@3S+}vM\"SdK+4;E "dV{ǖFcKf'/E]S"+V/E4^LH (2E=hfb#43Ew]S"+V@){ (2E +"ҕUWnfbwuvLWk(Hϡ 5ԘP@AjL(H =nBWmBh.@)3"Pd@J@3Shfbwc+:h.*Y;6!Hi@() (E ERU뿛49qjLY6{i\6)+F qʹ*qʹQƵh./Fi#P@J@3mhbwh.@6P^6)]^iU@3m+mFsA-"mz/M(F %6ZE4FF_]m4H (F`/E4H06;Q'/E]mi#+V/EH E4^jiHʹhW}eȊP^H (F +7FLh[Wk(HO 5ԸrAj1 5 ]E46rLh,瓷 u\"mdKg(H (F %Hfh=L hGݺh.@k2`K+4&y?פ~o]=Oh2SdE E4&43Ef(vW@;5EsAPdli54^LH hfVLQ쮀vLѭk"[ZE%\dV{kRLQ쮀vLѭk"[ZE%{iB3Shfbwcn]S4 (2E`/E?)ǖO_薙"+V/ERLHLHiB=hfb#43Ew]StL+"Pd@J@3SLQ쮮܎)wM\_V,0E 5ԸrAjq&t18O&5EsAL-- %"SRU@3S+St|h.@k2L-{ h҄)S:%W**zt(vW@'5EYr){ (2E %fh= hݻh.L-&"&"҄{ hfVLQ쮀vLѽk"[ZE%"S_2Sc]S4 (2E`/EԤ hݻh.@)Pd^LH (2E=hfb#5):uM=3EV^){"K2E ghfVOhhf|k)b""SRLH hfVLQ쮮܎)ztM\_V,0E 5ԸrAjqUt@c#DŽz>yG(2Ex"SRLH hfVLQ쮀vLCc( h)Mh: Sz)ZEԒ }B葙"+VW.2E`/E"]혢GaB)Մ"S҄"SRPdV{3Ԥ]혢G(2ELK@))EhLQl^2St>yrkVڵ-"Pd@J@)Z@3S)Ў)ztM\&"[ZM(2E`/E43EvMci}o hZDH";E wks rp!Ux^k\?N6bu"m^@Jx6)ʹ*7L hG}w\߿V,x R RjWmBh.@6i#P@J@3mhbw$:h.@k2Z%uJZNiB딀^)VFz SRLH (2E %)ZE43E1E?]S4@X\ 5&PW.H 5\@W{܄9&4ە5EsAL--rAJ@))E43Ef(vW@;Gc(ʵz/S:%uJZJyS%)vMOfX]"Pd@J@3Shfbwc~h.L-&"&"҄"S㟡)343E 횢2+VZ!SRLH (2E=hfb#43Ew]S"+V@){Et{ (2E=hfb#43Ew]S"+V@){ h&"PdV{<F hf'@'3EVFFW.2E %^Pd@J/E)ZER]uLO"[Z{iB))E43Ef(vW@4Eׂ *' _Qo(w3>>{ 4i?EGxkkAJLZzPPbHJ@)")MLѳ&(o* 0E 88-ʟPJZ%uJZNiB딀Z{^_E44RzÀ"mRH hVʹQ쮀6`9Al m4wѥ|AJZS:%uJZ'Ԋhh&4x>]mi#+V@6{ (F %Hfh=L hGw\\liu"m҄"mRPV{f(6Riv{XM(F`/M(F PV{Z}( }u?>]9$+VKHi\C)ǿ!e)6R<3t>yuHWXE %H""R}h)W'@#FV"mP@J@6)ʹ*zi;Ю6ȴ+Hi#P@J@=ʹQl >h.a6g^zEB􊄴jjOhbwx6]m4@XL(Hw^ R(H Ƅ8F |>3md (F`/Ei#Li]hOɋ6 „Jeh#[Z\ %:%uJZdP+zVt(vW@'F6b5Hi#P@J@3mhbw>h.mdK E E4 ;mghmvMgfXM(2E`/M(2E E4)ZE?;Ю)L+"Pd@J@3Shfbwuv`5EsArkע"d@J@))E43Ef(vW@?>]S"+VLK@))E43E聆FLh}1~IŠڵH, SRz)BRLj)LQljB;kʵbP R(H Ƅ8&46r|6_]S4kP[Z|l)E"]혢/Y) ڢh҄)S:%uJZJ/jIgbwx>]S"+VW.2E`/E"]혢) „"SdK+"&"҄"S㟡)343E 횢YPd^Pd@JLHiB3S~B3S =|;Ю)L+"Pd@J@3Shfbwch.W.2Er"Pd@J@3Shfbwch.@kע\d@J@))E43Ef(vW@;)ꚢ`v5HS E w"$@JDHYjܷC_|6 qb@Ƹ Rc\Aj1=wݸF8|nXE_0{ (F %Hfh=L hGݤ$:h.Z+@H h}&N h҄)5'Ԋ6v-FV&i#"mRH hVʹQ쮀vѭ0HjB6{iB6)M(F=~B3mgh'FLYP^P@JHiB3m~B3m h[WaBkg(F %H"mRiU@3m+mtj EȖVW.F`/]^H hVʹQ쮀vѭi#[Z҄"mRH hVʹQ쮀vѭv*r@J@4^7Z/Eb#R}|Rt`j)P R(H ]q@WMhlcB'@螙"+V@){ (2E %fh= he!:h.Z[q RZ SZ4uJ@ jEgbwx>]StL E%"SRU@3S+St L(2EPd^Pd@JLjFvM=3EV&"&"҄"SRjB;5EsAPdli5^LH (2E %)ZE43E1E) Pdli"\d@JWnfh= hݻh.@)Pd^Z E43Ef(vW@;5EsAL-o"҄"S_2SO^]S4@X0E 5 5ԘP@AjLjnBc#Xz>y5EYLK@))E43Ef(vW@;! 1EsAڢ SdK+>QZNiB딀^)hZҙ]=Oh=2SdjB){ (2E %fh= h=h.L-&"&"҄"S㟡)343E 횢GfXM(2E`/M(2E E4)ZE?)ՄvLѣk0jB){iB"]혢G(2ELK@))]+פ]혢G(2ELK@))҄fh= h=h.@)Pd^LH (2E=~B3SO^h.؁Zx)a@j R R(H ]q@WMhlcB'@;3EV"SPd@J@))LSvnI6p+3 <sIPVM2/ց\S*@+S Ў)a!:X&T[ab)PN1:358drw=yЮ)U(jB-SdP)ZH2EWqZ]vLѭkiB-SKՄZ؋ LbB-StgV(7{he'5EEQMeP)&2EF LU'2ELhݺX&2ETMeP)&T]herw1E):$) ej"#P]/)ʍ䒛@;5Eǂ2ETL@-Sdj=3АBV(wSt뚢cAjXZ )2RL՞her#O^]St,XFQ<ax(2REFj5Rzgz ͍@sqLh+SE2E^Le@+Stg)hݱSt,H-0ET\r@LNTP虚MUFr2EݞNh/mq2/Dg垮㓜$']'])Ek{LwAiVإk:v ]rRuң=󭶰KE#vIjvÎ]rR\%'P.=3-RHvI}ڥc:Q2H Fj<<H'#5tgzo7h.Kh.Vv) ej%#P.)Vv*@+ Ў]X&T b)ZzHKF ^3H>TtϷNhW(VB)jBk %#%JFK P3J(#^BX&JTM P2R՞Z HPڟNhW(BcܨJEQMeZFHqɵbB=3( TdB;됎iB-KՄZ؋ $bB-tgZt4M/'^XZ(*72卌@-otgZt-C'ܮ)z-CEQ]rk2EF )2RL՞her#O^vMkejP)ZH2EW{f)ʍhe'/@ߺX^r(H"#5PdP#5L@P9⸇O^vM[eZ )2RLhe 2E혢7,D/ݎ <-Qdi"#s/HM?KK}e^OsFoxNZ z/.52R\~-k)Ekk8C:k)tw"{t~z Xg+7iOMZ> O2Rе||螩WfwAc޺vXή%+k%c/̖\2R̮%"o(Bw}k UMǂe+t-d]4)Z)RnR+t7c2wۥ_+t-d]K;)Z)R|e^ ݵn?J+.Lz[rOrP^е"{t׾BwAw9]#u,X̏HFj@E*VGd%x=ӻqWqz*7詏:/;FQֻTFy{SF ^_3HN.wϷN(c>N#2(*ZTPNT@=FqɄ"@'@ PBvZHԲPF 3@S#xw:OHwzܚ #ŀZH1w2R "5?!)NǂtCS,Uj'c/OFq՞y\ϥ \?c/lZGW5 P5RrM^\嚮@ϥ (OH k>NPz?*^2@-tg='45j*t{ +>NɱնQ2RQ^e@g3H"@'/@?X^r(kP#5dP#5L@47rt >+mETZHTPK)V*@S#Zi+Ю6Lcx(*ZTPNTPhg(@S#LhW}V( ji##PK)V*@+m Ў6jcAZ(362RLji=V(7 uBs\q-mdb@-mdPK)FQ+x^3mFǂ46j\-mdŸZH163t~qϏ~wc;B8?:]Tl$#["HIF ĖHs7h%r#Z+ЮHDR3V1D%@-tgZHV"i +>+EI^c-dj=3J$FI_]t,XQ@ԘP#51Fj5RMW{&8~9xLڟ튤J$EQD@^D ўh*I+P$Eu:CQPbPNL/?oC(N43MEF2+ЮHDRPK$^;D@-d홁"@+툤H:{%b;zP@^L%@+ɄV"i:]uǥQT @-dz.I2NdB=3TdBS#Lh}uѱ MbP{K'2;3^9ʍhe'5E_)PZP){)DZj 2ELh}U( eb/u{L)z/Zj 2ELh}U( exʵLQP'rMRh\ O^~wMѱ`FQ5R)1^cBSטP#5^&44Ch}W(_KFOԸ^`??.5H]vNI'M(c(jB!t T:*NJ@v?!=j[̦~3ϲ"EQ!ܑ-wd@l##"X\h}wѱ U-wKwؙY%$#Z/!)frGW{jr#O^'/Ѻ'EX:PbBu :ń@u @S Mh*2ۓW]w@-wdj##P{rGW{f;ʍh'@rGQTP{1z/Z ;3Qn$@+w?yuGߕ;j#c/Z(RB5{rGW{f;ʍh'@rGQT@-wdPEJܑq"""[޺X>FQ5Rk\rCטP#5^&418O^vѭrGQH w)ᎌص厌-wt5qƞ+w4WXז[r)7jB}aBu T:*bBu T:ńF{;=Zf6~q*wErG^ ܑ厌+wLcrwt뺣cAZ(3;2R̬厌3k=rGLh'h]"pGF ;2Rܑ"wLs Q.2wt뺣cAPR5;2厌j=V(7 uBV({厌Z(R⛩@-wtgZHVh n;j#c/Z(R ޑq"EIqɭQn$@+w?yuGEQQT厌xʵܑhr{hr{hݻXC(T!RB51FjinƅH W s.c2;:$KC>T:*N!ĞTCn-<3,+bD=ٍE& 1㋌^ )u ўySiLh*t{ ;j#c/ZHrGF ;EV(qG;:b[؋ ܑbB-wtgF2;ڟNh+wE5ھpɵܑ厌@-wtg=)2;E&]wt,HjX&T.DZ ;3Qn$ZvѽrGQTjK|35Nޑ@-wtgZHVh ;j#c/&rG {GW{f;ʍh'@^(*;2"Z8""І;4ѹ`^=P'o'+Gj9։x=zPT4?˟C|_\c/ԟ~s:vNJ]a?~ `hKrjG+*t T:*N*3mSGefS>ˊ/;"#g/;IqGN ą;*Lcᎊ"@tGtvѵtIT:I1;z(4i"&pGuBR&qG^{qGN ;zgZMeBtG4; uܑ@wP=3-QHHNh_ wtՄ:ً u;Rꋌ ;zgZ-ܑ8ytG]EqG^{Ȅ'*{GΉ<E-ܑ8ytG]EqG^ ㎜xuܑhᎊ"@ wTveoǂEHo@Ƅ{ ^kЫ=%718O^&tX&P .pGFjH_$sRNkv)[(R2EvEMt7iBW(\#*}"t )PyF*u ݞ횢EQ]r-SdP)ZH43M٫LQ.c^X&2ETM؋ LbB-StgZetO^'k^+SE5)2bB-SdP@-StgZHVh k^2EF\@u )@-StgZHVh k^+SE5)2e@-SdF{f)ʍhe'@2EQT@-SdP-#'P)F{f[F]o5E)j"c/ZH2EF ўhG(jP#Э=wft :@=3(@S#㒻?y5E)j"c/Zo)Zo)Vo]herw1E]St,H\RuɵLjedP]'2ELhe'5E)P{1)2RLe홁&}Ner ~h}V( ej"#P)F{fI2E[vMgeZ )2RLm_=6[EzhYV]wY(*Ė;2厌-wd@\\df+wl}vѱ =&Y($-#c/^ܑhr;EvW VQj7S#5&H Fj5RH W{&+hn?y~uѱ Q,jj##P)Vo"@rwt,H@W20*z/S)&Tz_Ysۓ EQ]r-wdP)ZHz(Z\h}uѱ MbP{1[F^L厮FruBrGQTj#c/&rG?!5> MheLhr ;: {"P{qɵܑhDQn$@;뎎 /ܑ"&rGƉ2E&z(yk v-Le"Z8)EV(1E_]St,H@-SKCex(:R@-Sd"@+S혢):@(0EFjL@#%{"#5^홞rsq͍\@'/O]St,H@-SKńFJ<{\ eZ\herS蘢cA-ʸRK'T5rńZj$]홁V(7;ڟL{ VQ7Fj!qٽ!hH96Rs|5qžcsd7%7k%HrGF T;2RUFrGW]w@}L@-wd=)fO]hj$@+w?yuG;P{1;2RL厌@+wtg;EW]w\j##ńj##Pj=ݽ3H&2EW]S^( L@-Sdj"#ńF{fI O^vM{eZ )2RLhgZHVh k+SE2E^Le@=3F2EW]S^(*)2e@-Sd0E۟Ğ~[ ?ˊޓ1rGF$)@l##⤉EG VwE1Fj^j5{zgB8F8O^vG厢(d20RBq6R`?v']S`&SISquG;Pm_3&T*NJ@~w?Ǟl73,+MlRb&^ e@l$#h<4V6)ykj٤XZ6H1^Gl^̬e@'=Oherw=yЮMlRՄZ6)Rj$c/&ԲIF Mh<"Z٤\@6飲IQTI]Ǥ3t$bu :ؓ^{r>3XvmGe8V~nNJ@S)P=1KRኸ"/EQ]-db/EJU-dM\"\\;o"}tmұ =&D]uRaN1:dS`S.rNSqϮM:@(&H@eHx2?'q1ϲ"/EQ̬3)1F?KF?_8}1`fTt^gCGQͬ64̬NJ@S̬NJhc8 ]&t{ k>+EԲI^le@w IؤϮM:eb;j$#ńjdh&F2ջI ڤKmDĞB8A,weg%KY@S )L:dEoS#Z+ЮZRշs.ŷ3u :vNPJ@MhW-}&&T%Tz/Pt T:4_[^r,Xg(H Fj 6R@|gr 8Fp.W]U(*RqW5 gJ}c/?w\hRR.t{ mQK_I~p]Hj]HS̱N]M8?W]U( R%Ɖ'RKF TbO_mrkvdWW6 ]ՒMT]-dbK6)zuj=yЮ;W(jB-wdPEJ<{rGW{f;ʍ[+Ю;W(HH^#Ê^#SqI7n?W]wtQՄZ T;2Rܑm{bOϽl6^٤(*ĖM2e".–M2NqerilR.rWؤ{& c)AEX)u)S:da{K\SQvmҽIQTW@S)Pt T%W(p73,+_W~) &-d@l%#M\d7r7}}iڤsr{N7'+GjWuNu?6=Ys:yڴI/M :7+v T| VMz}o~DP-m S)Ht Rgj(~RϿ5y]{͸6KS- ~럿q.R{A1KN [IN ^^5n?:Mr<tu :tu))ELt׾BwAw9VMRH^G:9):IגNOT…teEܔN/t #@H''bG:9)ҩ(TH6KS: G:]Kw<;IݑNN trR`/SQ{!:Mr[Y_7o0]+w)nz/HXNq)Hz?ȭ}׆oz}isx PnrRuttϽԙOx֠ۑO7F ֋q1Fj5Rcxkjϐ)[;7(ry"Q.QFjo#%t^AtTf }'5W]ZGm{5R#k(#\$q xgaPM/T<@EX-)q"Gj9K_׍:L޲":U;2R{12RȖJwJ9;:꭫ԫvk(c/NYKG)Z:HAQZntT5t;:꭫۔:r,= W^KG)Z:HQ緩b8w:YQo;Emj."Rߦ^7Nq7N)nEMR@:2R|=t@-eQНZhWGMޢ(>_N1{:*bt T{¥¥s޺NZPSCXٙRNq#7Nq#7Nq#TI[lןbdQ@)H Fj5R@z7qyS1K1Jt888]T:*Nv+pm-J!|,qWCO5>gfv.߄c/5s/M؋AōS:ōM\gn?hX aPdP()ZFH2Jw{Vѳhi$@KuHׂ cvV)'qVHq#{ڋAtAf߮8~m7؟ 2ЮUXWw) j)&#PK1)l_{;t,1B#>) 6̬NXYN1:h~R-_2-efW@s'Z z/ZHԒNw{V;T Нt:_9J"AYFH #)a$FH1z/sRSכj9މvN1EQM~A#wHJńt T:<:?Uc^i-3[ϒw!ٹbfgJͬNq#7Nq#7Nq#Dף^ g1zύgzՎ&H1@LF Rg2RZ<ӫvkyKȖg2>t^+2gȞ<|?r6LׂLwugLXp,))&|=p=kLN毮t$QtԠ)AH Fj5RtԠ)AtzjnM}Z5EW;SjZu :Ŵtui)Δ; \b8:5:tgJ)tu :]L)5>jnQ}mUݹL):]NAWSН)E7wG-:RƟEMѝ+ݙRtu :]NAW;Sn4ts ZuT_mޚ _^)t p:h]\^T+']-u-BEQ!@jP#5H w{wqZ9zr5Qݜ1QT@oer NTS@-h)x +w) \zJ1:PNTS@_ak#Z 3Юjީ(*sS)@u :h e6=^9*Gm;_NTS)F{VQ\H"@W@v{( 5S)@u :h 4+H"@W@=Ez;S)@u :h 4+H"@W@{g:PNTS)F{VQ\FzrFSR$8)@u :PN4ڳ 43Ю)ޙ(gv-Le@-Stg=[FtgWN@ZMQP#51Fj5RcBjƄYhmZcBW@ggZ )2RLc~oׂ2ڢKX0RWdBu :ń@ChB.@W5E?;SE5)2e@-Sd3EwqZɑ3E+g]S3EQT@kj"#ńZH1)۳NFtgW@ggZ؋ LbB-SdН)LQ.GntMѵCw6g'k~w(jB-SdP)&2EF ݙN2S5Eׂ2)j"c/&2EF LݞuBw6 ݙvMEQMeP)&2EF ݙN2S5Eׂ2)jB-SdńZH1)۳NF2;StrЮ)ݙ( Lj"#ńj=+Н)뚢kA( Fj"#51Fj5RGݞ]\Ǒ{r5Ev( ej"#P)L]\LQ.@;ceBECcx)+2:PbBu 3bjwz5ݎ$ɑ^_e[4 R|{|o_RF_QG ~F_>soȊV'?X~ Y)SZN h:%ԊhhnO^MgZN h:%uJ@딀Z{wjAz+uJ@딀)SZN )(ۓWBז˓gZN h:%uJ@딀Z{1~,YF6:/z"mRz"mRz"mRzfh5FF]mt,@6i#i#Ҽ"m4LFj@3m?yy^Xb; H Ƅ RcBAj1=, @cqLhW]{.{m\HJ=b}zP$@J@D)>=E4(vW@;Fǂ0HRP@J@6)ʹ,z6Ў6vѱ EȖV@6{ʭP@J@3m4hbw]mt,@6P^Z%Hfh=L hG]XOlii#"mRz)BhǿeF(hRFLYz)Bgh"mRliHʹhW]3md h-^k F %H"m4f(6R@3m?yFLYKHHiYLF׮6:g(ȖVP^P@JlkHMheBo]St,XZPW.H Ƅ RcBg{Yt9+Ю)eȊPd^LH (2E %)E43E1E7YFǂ0kߣ)OԄ)S:%gi,zmMh( uBQ+VZ]"SRZ%)E43E1E): EȖVLK@))͢]혢[ Pdli""SRLl)LQlO^ܮ)eȊՕLKPd@Jz/EhLQlfh kn)b"{iB))EhLQlfh kn)b""SRPd@J͢f(vWЎ)uMѱ`^~`RzE4H"K_#(U~t$^X!YWxAj+H 5^:Yt9x?y_XeX[Z򂔀"mRH hfʹQ쮀vыDG Zh҄)S:%uJZLym4{i]ݞNhWdȊՕK@i#Pf{k=@3m+mFǂ ^۾!Y#Od@J<5Td)'<vT)^ӭ%"RH.RH{yk_Ewiv?J+^2d2FB  % %/L(Fg&'@B%JV"P$@J@4H(xPL(O^v˴omd|H'I %'ܫϔ׾ Z۱K/]t,ݠli*K`/=^^)+K=~\b#3i2]t,XZAj/ԘW@Aj+H 5uEb#X?yJwHV^H (J %PE4JJ]t,--\P$@J@P)̈́,ztB)vW@;B+h-[+-{ (J %^rPW#4JJ]t,@wHKPd@J@Q@#4)vW@;!vұ &I$҄{ (H %H"xσ< F]mt,@k"H"mRr6)=C3m4h0Dzʹ-^3md-i#"mRH Ohb#4FW]m>g[K@7)EZOhh܎)z횢cAr)K2E`/=C))=C)@3S))ڟL[ VV,&)1 5ԘP@AjLl:nBc#X?y5Eo)b""SRLH hffLQ쮀vL[ „"SdK+"Pd@J@3S4hfbwc޺X"SdK+t{ (2E %H]A huMѱ EȖV@){ (2E g(2E=hfb#4#혢): h\d@JZ%x)PK{R5EoFV^){ (2E %͢f(vWV]S"+V@){ (2E %fh=HMhf'@-3EV"SPd@J@))L,z)ՄvL[ 3"[Z=C){"3 LQl&43E }c(1 5xPjX;"RP)]^› YtNL(O^/Pzc+P$@J@P)EBiǽ;͢}z P: EBɖ/  %HiByPԄfBi:] %+VK@P)EB 4J'4JЎPz cAZɌoli5^H (J %PE4J L(YP$^H (J %PE4JJ]t,XA>r; I`/!Rz'B>R0^w0kMt?2]t,Xk[RƴԠ RcZAj1*Z }K6n.}oi/4V,.cZ/K %H/Z{,86RBX.YZSZ4uJ@N ,zt"vW@'uHrhBk2AJ@C)E 9?344R9+ЮC E P@J@C@ghbw5uHǂp"dKPAJ@C)]!!͢t&4sH :!YP^H (rH %CE4sHЎC:cAPli5!t{ (rH %CE4sHqH]t,@k "@JH (rH %CE4sHqH]t,@DՄ"҄"Rz)Biǿe%F}??COMmt.XJRy'ԏ(JRS{'4i?>?~]td4Eקb62JLI hSDR{ '@e!r)?(F)҄)SZ4uJ@=W聆F h(ZmSbfڵ(1E$%Stoh]S4Pb^PbHJZ%&(ijB4Egiݟ6IDI'E$kKzW??^6)FX+Fd/%ڈh#D݋h׆6>5ѹ C\îy%ڈ@%ڈt{ hE4FIwOMmt.X_b>WT!) (F$%ֈܫϔOJ6+]>WDҴDRVfC}5~Tu_W {mR.1 5Ԙ]tAj̮ r:ژϱڥX~J3EWngD>Qt\)ѭ3U=SW]k9V]44>C5Yx3) /RM %H5"4~E")jڟL5YTKZ%H5"4f)6R@3մ?yUMϙjb&"Rz"R=hb#4SMW]>ѕK>J")]5&K@k)M>J|tO?۟ڥ:>뽶Er Er %s L7׵7jzcL}&&&KUtϽ<ݹݎwzzcAxEɖ"4H<'&+݋2N>W'eQM]t,@kP^W@J\l]J>WbERԄnO^]:@Xx]1 5ԘP@AjLl:nBc#4+ЮPj+:%({ (2J= PЎCtұ LhW"ŕ RZ E 9̐tfi:]t E %!&K@C@3)Cڟ:K搬XE %!"RzfiF h'@9$+V@kWg(rH +9$҄{ hfR쮞ۓW]t 襨0z"RP$@J$H _V@C#5(mtjcAx)BȖV/E4&y>F@/bwc.]St,@)z/M(2E E4)E43E1E): (2E`/M(2E EhOhfb#uZҩ35Eǂ"/E 5&P R(H q@gMhlcB'@蚙"+V@){ (2E %Z{<F hf'@&::ßk?)) h-dijNi@x) h3UYܟ kXv5FVi#"mR‹H Ǐkb#3FW]mtʹ+Hi#P@J@3m4i]M[vu:6*C2Wne)OHER{ߵ׵&t:cʽ"]@JӊHiZϽ*gӝ?×*עJ׮P:nPů %^$@JËlfB)6R,vҵ+(JK@4H(5J蟮PЎPvұ EBɖV@P{ (J EBiOh&b#5Pڟ.ݺBXb RUW.H 5&P:΢4DŽO^v-JV"P$@J@P)̈́,z +PPB5+V@k' SZ4uJ@&N O=H EMh!2d (rH`/E 9$!͢)Cڟ:[搬XE %!"R9Y@3 8[! KHt]Wn"RZ+IK_ F6:yVЖV@y#P@JjyV@ߥ/w?yr\̊Օ[MhPd@J@4x)343EW]St C@))ELH h&43E'43Er;5Eǂk[SRDH'E %HY0r>U:|?2/]mt,XV,_xAjܿ 5ԸAj1=E7g,qݟjLYK@6)E4Ff(vW@? TJ^xs{m{3Y4uJ<N*_K7UZt?J^2dj\C{ /rH %!fif)vW@? ^2d (rH`/E 9$!͢9]8C:7$li@J@C)E tCRln\K:?yЮCz cjjBkW'*rH 'j"R9Y9]M[vK搬XE E 9$Pk!FjB3?yuH/Cb0P@JH9z'4sHЎCz:c0O@J D$sjvϔUtךfc޻vXH.WnmD.K %KUtϽ<ݹͼD޻Xҭ-=z/E 44fܫ{QZNiB딀)ofO%)vMkfXM(2E`/E"͢]혢׮): EȖVZ%"SRY@ҕvMkp-׊Մ֮E/E\d@JW.2E=HLhfȊPd^z/E43E+c^Xڵ"Pd@JW.2E +73E ['k^3SdjB){ (2E %^Pdf{f(6R+Ю)zL+KW.2E %x)O^uMѱ`rXRR(H 5&PWl:ʍ@cq\W]S"+V@){ (2E %fh=HL,D1~mbv-:%uJZNiB딀Z{Z PԄnO^vM[fXE%"SRY@3S+S5Eǂ EȖkB))Mh"SRY@3S+o޺Xoli""SRr)Wnfb#ufhzvM[fX]t"SRz/EhLQlfh k޲oXE%"SRr3S4LQ쮮܎)z뚢cArk2ԟ-z/E"PS=~B3S LuB-3EV&""SRZ+43E ):j(H\@Aj R(H q@g]h,+w k3Sd (2E`/E"͢]|S. 1Eǂ0EP[Z6UB;FaOg(P Cj\0FBj8ȑXozb EZ T2a# Ͱ*zC3l+C;"$F!Z#2>K*%VZ*RylPS:l+C7 bb}~nD'F@%?_gT2jﳖt2 VqE "T+Hk<}m)?7qbK+F@7$J"lT2a5oh eh7v%FV^y6gi#lTZpV?P3lF.6 a"ldEgPJfh6ӕltb EZ+C6gPJ+a5r3labKXPPJg)6ZE *ltbٰ'Ԋ@5  a(P TP񸄮34r$4盷^h6C6b Ed(F@%C3l 6 ItlHe`k ϒJ U2V)JT7Ԕ{B>ZZd(F@%C7*j+׊0HPRt풢HV E"RTJ("Ek<ЌAЌo%E׌YJhZRHPPDJ"R HQ H.)fȊr)*\DJ+7#EWnFtr;%E!\DZPDJ ϒ)ZEohFteh]h6C)PDY2"8H܌oWn]3Rdj"Rʭϒ Ehj3 HQ!E.) {BX T@5  a(P ]EghHh,C7o uIl"Rd*HPPDJfh/?UD HvHMCfC0(Ykeh} UJhJ U2ht(NWo%EYZd("E@%C)*Uf(NWvHѭKfCH("EZ%"pHP)gohBZ):߼'Kn)bPDYJh} Ed("Ek<ЌAЌo 풢[FXH8K"RTZVnFVѿf(NW+Cn]R4EZH8K EPDx|B yC3R+C;%E!HV"RΒ Eh8H܌oWn2Rdj"RErd("Ek<ЌA0]%C]R4Z0)a(P0@5k0KQ7v#FV E%C6*P Oht6ztlذѻvF@\Ja#ET62Fak?.6z,zoaH!$+cZkK)PF%VZ*jd'ԊP+:+C7 2x)bh"T2>K"T2 74 R+7eh}wl EZ"lΒ74Fq24FvwX%a#pV.F@"lTJhV'4FqJ b Y2a#p Ed(F@%C3l 6bٰaw툍JPJa#ET62FaZ 6:{\{6F/H5Q/F@"jTJk}ET\^Sv; ːfCx]B Zץ,ًP^ĐJ8cHqƐteh!? հ+QITF _oHK~ fMj# d(aHD%C C"*0w0d2 j|E*%VZ*ZZ%C ]'CJ+C7 m2GVZ!dh} % dh} Mһ MR2]`H&Cz5Z/ED%Ce(aHD%C Cz'4aH MRq&C$ iDΒ!V.aHD& ] MR2]%Mj )! % d(aHD%C.zCLW6ɐ^ PQ,\J+@x}~zC_BQoWn?0WnDTz˭ϒJQ)6oaz mGBB )ZK!E,%>KRDT24!E74!Eteh}vIl bRT#@5 TPX@5 ]q ]EghHh,C7o+wX PDH(PPDJ"RT24#E HQ 퐢1׶Y#*%&22V)J*%VPOaJh({B3#EV E%C)*Z%C)Z̼)ӕR%E!\DZk;8K Ed("Ek<ЌA*):߼'K>3Rd*PDJ Er3R>)UB;KfCH("EZ%>K"RT2")ZEohFteh}vIl"Rds;8K+"Ehǯ܌Ajf|r3#EVVnMdHP,%"RB3R>)UB;KfCH("EZ%"p E,Uf(NWvHW͆P+ PPH(P CjV*:C ʍam~uIl"RdEBJ"RT2")ZEohFteh}Bt) К|fY2V)J*%VЗPS|+C7 풢YZd("E@%C)*j+7#EqZa2Ch6"RdUB)g)H74#Eq24#EvIWFX%"pHP)U+7#EqJh}uIl EZ"RRBd("E@%C3R?oJ HvHW͆`("EZH8K"RTZk}S+C;}uIl֬EoVn} Edh}Uf(NWvHW͆`("EZ%"p Ed("Ek<>)ӕRt钢ٰj)Px0FBx o8 =߼^h6C)"@%C)*HPЌ74#Eq2C.R45EPk ϒJ U2V)JT7Ԕ-7NWo%EYZd("E@%C)*UAjf|nh]_Y2f-z"RTJ("E@"R㟡63oh H.)dȊPDJ EЌ74#EqZRt钢Yk E"RTJh} H*zCoteh]h6C)PDY2"8H웢풢Kz"RTzgi"RTZY25o'4#EqJh]h6"RdUB)g) Eh8H%4#!E.) V,^j$FBj T#@5  ]qKh04盷{풢 EZ Ed("E@%C3RЌ)BtHle"k ϒJ U2V)JT7Ԕ{B蚑"+V+"p Ed("E@%C3RЌ7E.) !"kH8K EPDx34#Eqzf|.)fȊUB)g)HP))ZEЌ*Rt풢HV E"RTJ("Ek<>)ӕRt풢 EZ+C)gPDJ"R HQVnF7+K)brk֢C)*ZHPix)aJh]h6"RdUB)gPDJ Ehj})C3RtyKKfnH(P"H(P Cj$t8ah,o 풢[[2&22VPDJ"RT24#E HQ 퐢(D͆К Rd*Zߨ*ZZ%C_*OVjJGte=]RtH"RΒ EdhFV8]!E.) Pi"PT (E@"Pdo7ݿ~yo~'.D]w={\a#+VqE"lT+F@fh}\3l+C;F!0*PčJ Eh'>o >0:߼'K)bPDYJ("E@"RTJhFV8]%C]R4BB)*PDJ Eh'4#EqJhG2C]R4Yke("E,HPPDx)):߼.)gȊEHPigPDx63r3Ro 풢{FXZDJ Ed("Ek<ЌA*):߼蒢ٰ\+0FBj T#@5 R ]E8ah,o 풢GFXH8K"RT2")ZEohFteh=D!:h6e"k-^J7*J*%VЗ`PS:R+C7 풢GFX%"p Ed("E@%C3RЌ)ztIl>0z׎@P)j8pT0W=Q?.6z,>im];8KiEVDJi}URywݽvңːfÞ]ޝ]JE ]LU:˻q`G(͆]ēޝgwOg]ēJ"dYuOw=fҥGFXH!jFt ]*f5Kqa2C]4¯:;$k~At "T+Kk<Ќ.AЌ.oҥٰj"@5@5 TP a(P8CW9 őͻ]+C]gPDJ"T24K R Хg.͆PDX@%C]*PЌ.74Kq2C]45Z+Cd(K@%C]*ѥUft)NWvҳKfC0}d/ Ex Exi?C ;C:߼?C@>DɊ3%pP)(jZ'4 RaH.C !"YkPYJ(H@" ;CwHv3|)"nTq# Ehj3 vHѳKfCHhZRHPi"RTZVnFV H=]R̾Cb E!dh}HP)f(Rf|fw͆=V, rj TP a(P8CW%4rco 풢Y2"p Ed("E@%C3RЌ)Ho@%C)*HPЌ74#Eq2Ch6C)PDYZY2")ZEohFteh}wIl"Rdd("E@g("Ek<8H=C3RtyvIwFX=C)gi"RTJ("E@fh}B3RvHw͆PDJ("E,%"RB)Z HQ{B;#EVZڂHPPDJ"R HQ H.),c?+V"REr)*܌_)|S%E!\MV+}SRB)*%5ЌA*):hWf*JTz՟/HWRr= M_?wC񑐢U %%C )"*JHQЄЄ%ӕ RhWCHhZ8~Z*ZZ%CkZdK%ԊP+kte=MRJBJRDT2"Y24!E74!Eteh=>JHj=Z(C )"*JH{R3"r %r )"*%4!E74!Et)z|4Iѫ!$Z%"rJHQ)dJhB6I#!EX%"rZ%C )"*JH{<Є% )*n mGBV2"r %r )"*܄~&(Vn=>V.!EZPBJ %=Є%TBRTܼ%KfnFBj T#@5 5g*ACcq$|nh}fȊd("E@%C)*Uf(NWvH@=R4BBk2H+dh}ZdhRBk }<)ZEo))ӕǛvIgFX%f-Z Ed("Ek<~̼)ӕR%E!$"kJ)zd("E@%C)Z&H2x.)\ן3zk?gDT hmq(*m\JuֈU-?i>kF]l4B\6*WJqEh5FqzͰ=]la#+VTY+F@gPx66:߼F6be(F,PPJ 8Fߐ2lF]l4EZ8K+a#RB6Z ͰQa[Bh6ZH(PW$ a(P0FBx9 őͻ]la#+V"lΒ EdhVa8]F_BfCHhT6b oTBk UJh/F 54NWoF_6bPY2>K"lT2a5r3l+C;請fCH(FZ%a#p Ed(Fk< A{B+ȊUBF,%q#ErVѯ8]%Ch6"RdUB)g)HOhF Ќo%E_)bPDYJ("E@"RTJ8Hͻ]RRI=POJ~"PTuVAMH}gF_]l4kgwk"w5*_DJQ#SUw0k{9^ i6lkGwj T#@5]Ȯ wM s ˢ?6vv$pE< .I@%w_gUT}rw]tlߌXH[SًP^DJfti/ѥ8]ڡK.] К \hů:@%C]*Zm{3^EohI hF7K.h*5QB]*=^]*7f ]:߼ڥK.Y2%pP).VnFVѥ8]]tl+%kV.K,%%RB]Z 5f I =]t"RB]*%%RB30Hѥͻ]tɾCbe( %C^*P;Uf!jvҥ fCX;$kV."J,\DJ+5r"ohH ;C:߼%eHa7ԊEBjH(P Cj$@5 ]Egh04GB7v5|>3~mbe(F,PPčJxVAPRt풢ZX@%C)*HPЌ7ԔϷ'Ke(Vn} Ed("E@%Cm<>Vf(NW.)fȊE%C E Eh8H܌o 풢kFXH8K"RTJ("E@fh}B3RvHѵKfCx"Rd3"pHP)f(R H=]RtH"RRB)*%"RB3RK8Hͻ]RtH+C)gPDJ"RT24#E HQVn]h6HV+"pV."E@H_)ӕn]R4vCX$Ư-@5 TP a(P8CW9Vn,C7o+%E!ZH(PPDJ"RT24#E HQ 퐢[͆`("EZZ%CkZdhRBk }X[Eo))ӕǛvI-#EVVnMdr)*Z%C)*Uf(NWvHѭKfCHhMQr)*%"YJ("Ek<j):߼'Kn)bPDY2"Uf(NW 퐢[͆PDz"REPDx|BxCote=]RtH"RRB)*%"RB3R웢8]zvC薑"+V"RΒ EdhFV8]!E.) a"RdEHPi"RWnF R}StyKKfnFBj T#@5 5g*ACcq$|nh_,X2&22VPDJ"RT24#E HQ 퐢(Do͆КCX@%CZ%CkZdKI*zCMHQ =޼'K)bPDY2>K"RT2>Kfh)ӕRtHV ϒHPPC=8H=C3RtyOh3Rd*d("E@%C)*U HQ!E.) !YkPDYZV."Ek<>)TBo7 풢?»v @(@P)CGMBgvѽfR޵.F@%w5*:rǟ t21bHZ-cĐYZƈ!1bHk<~g )Rim? i6Zx]j@5 TPy]q{]H.Czd Ɋ!d(bH@%CC*1Uf )NWvC|ÐfCHhWCb oTBk UJhF|B cHq2x.Czd ɊUBCgPĐJgPĐx63ohƐteh!= i6"dUBCg)Y21$RB3k8]zv#cHV8K E d(bH@%C3Ќ!Cztl E Z"RBC*\ĐxRr3tyOh!=X%}mRBD*%A$RBV'4(NW `G͆ kGlT58a#DT*;Jlbٰѻ߀E~5*_DLU@ASyw?`=2~vl}׎.PpFvj T#*5s7ud7Ԇcw n5]ēYr$'}URywݽ&w;t٥Ka.Kf*P]JΪ}ìn5=i6fw,HP]DJΪ}^rٰVk ҃q'҃q'҃>Kfi/AqٷKGm;=3dPĝY+N@"T24N ͸SN.w !;YkJ7*;N I ͸=]̸"Β;P)wZEohƝtwzvl э^J@%Cx*PY U8]AM.j PĚZ5rk*\Ěx;P;P:߼.] V,V.P\ a(P0FBx9 őͻ]>͊(d("J@%CQ*jZ)CCQvw!͆PX@%CD* PYPSgh `.6 Pč2q#pVn} EdP+zC E!E]R4 %k E%C)*=C)Z+74B)NWvP YZ+C보r)*%"RB3RЌ) EZ+CJ,%"RB)Z ;PKQF7o]R"+VoPDJ EЌOhFt)HV E(,HPЌ74#Eq2Ch6C)PDY2"Ehǯ܌Ajf|_Ϗ&)z5ly՟Dg RTܯ-Lh2j?wCU %%C )"*JHQЄЄ%ӕ Rh[WCHhZ8~Z*ZZ%CkZdK%ԊP+ te=MR,JBJRDT2"Y24!E74!Eteh=?JHj=Z(C )"*JH{ )J܄7&)z~$h\BYZJHQ) )z}BRLW mGBB )ZUB )"g)Z%CR.zCRLW6HI^ PBVke(!E,JHQPB+7!E rRTܼ.) V,V.P_[j\X@5 5g*ACcq$|nh}fȊd("E@%C)*Uf(NWvH@=R4BBk2H+dh}ZdhRBk }<)ZEo))ӕǛvIgFX%f-Z Ed("Ek<~̼)ӕR%E!$"kJ)zd("E@%C)Z&׿&L2C>h6C)PDY2"YZ)ZEЌ)쒢 EZ+C)gPDJ"R8Hf| 풢όYz"RK"E@"DJ H*f(NW 퐢.) !YkPDYJ("E@"RjP8]!E]R4Yke("E,HPPDx)Hm~uIl brjTc0a(P ]E8ah,o 풢Y2"p Ed("E@%C3RЌ)|S4BBk2H+dh}ZdhRBk }<)ZEo)q2x.)H"RΒY2"8H0]!E_]R4BB)*d("E@%C)Zf(Rdh}uIl"Rdd("E@%C)Z+7#Eq2Ch6C)PDY2"xC3Rf| 풢Yz"R3"K"E@OhFt)꒢HV E"RTJ("Ek<>)TB>R%E!HV"RΒ Eh8HʽtIlkN2Q P@56.P ?jl\S3Ko: q=]ltɰ*P^J"lT7Fq#(C;"$Fa߿V U2V)J*VЗcUa8]zyOh]2ldPY2a#Y2a5@]Eohaͻ]lt `cB+VE EPJ"l ͰQ Ͱ.6,Iߐj"?5*PODLU!oH\e^0K!͆!wk TZr!$!ruwwwϱg .PbPg^JOWJKPZEt̀R K(͆dh}P)(k ~3tyOh(]WtE 8]F.6 PJ"lT2>K"l ͰQ6:߼?C^6*!lT2a5oh eh7v-FV^6g)PaU+7FqZltbV.FZ=C6g)Oh oF,ʭZ%C7*7f)CCQ =޼zٰ'Ԋ a(P Cj\Xk)TB3Ry5K)be("E Ed("E@fh}B3RvHѣKEȖVw("EPDJ Eh'4#EqJhF; 풢GFX%"K EPDJ H,AЌw^ }vIѱ`M Cj<0FBj T#@5 q Egh04Ǒy5K)be("E Ed("E@%C3R40HΫR ,c"+Vnǿ~ZdhRBk UJh6P+zC eh(*۝WC虑"+V"RzPDJ"RT24#E HQ 퐢g H-ٮ"RTJ("E@"R48H%4#EׄvIsb_^~նgmPJEг׈o͚0WٻZq`g B\k2^ҵU\^a#5a8Hak\a#+V*F Ed(F@%C3l4BͰQF.6:"ldK"lzBEt"l4a8H%4Fׄv3FV襄"lTJ(F@fh}B3ln?7F%78> ۯ?n TA".Akf&_PLd5o 6PH/JQPJ&*zClL[ h`[[nTJhK*%VZ*jyC74 R Ey5o 6*^2`# MU&( m`[ J\] %؈PJ %OhA* 6*v^FϷYJ^0"PJ %܈`LW m[ BB )KRDz)u/JHQЄ]EohBJhBׄ6I-!EX%"K %d(!ED%CRt )J6HI!ͥUB )"PBJw(!ExdJhBׄ6Imbz酨LTc"R@ ("*z8WٻZq`K{_J:/^@5.PpFZjk]S9w\6%o4ݝ pl}r%wB*PݳWskMn?`E( yWwk"wkܭUrV)J*eVSU{\ZϱۥK:^ݭEp .K@%w\*{=UurwjuQӱ`wiV"T."M@"dݳwwkMn?ǚ.wוWmT"T.N@וʻU5ہP.:E Z.bPP)u/{*ݵ&wcnH&ywk{)Rv*e)gS]5S.:EtZ.SP)Nrݝ_s[VӊM*=V!XT"XT oVUt49Ri ӕ)UB;K!*^2"RB) HQkB=#EVPD@/ݡu/HPPDx63Ќ*۝C?X&Ԋ@5\0Ƒ TPG3tq#8 %E)be("E {PDJ"R4 yC3R+C;CC!5EȖw(PzGZZ%Ckz<)Eo))ӕ۝ׄvIGFX%"Kֽd("E@%C^24#E HQ 퐢.):"RdK"RzPDJ"R4܌AH~5]R"+V ERB)*Y HQ!E]Rt, EȖV ERB)*%9ЌA*)&K>2Rd*5DJ"RT2fh}B3RvHG BB)UB)d("E@%C) HQkB##EVH;"ZxC3R)Ct)쒢cP+8rj T#@5 a(P#w:ȍ0t.):Ck2--\ {PDx))萢cA0(2V)J*%VZ%Ckz<)EPS:R+C; 풢όY:r)d("E@%C^29P74#Eq2C>XH-\D@/%"xC3R#7#EׄvIgFX%"K EPDJGnFf'4#EqJh}vIѱ $"[Z%"K EPDx|B3Rfh.)H"Rz)u/HPPDx63Ќ*R%EǂPDliPD@/HPPDx)TB3RyMh}fȊUB)PDJw("E@; HQ H~Я.): ba(P@5 PH(P Cx8ah,#wjh}1˵behZdh Ed8HΫR ) E@%C^2V)J*%VP7Ԋ>a24Ϋ]R"+V E Ed8H+C;KEȖlWB)*%"RB)f(Rfh.)7^o*Yc"R@(*5"oo߿w9/]awF_]lt,X~Uۻ[sP)Ҋ*w^7YXeH_hf+zZB ]J٭{]LU{sUvך.P:%[Z](^ /J@%{PWm g;q (YzF@ R^P*%]Yn eh;/~wұ`]vqF@j T#@54UqʝaPsvwFXd/K@%{^%]E8HѥΫ"ǠKV UkJ*VPPg)CCQ ڥKu<^%?\*PϳWu*skMvPw5 kܭwTZi*&SUw0kkv;{CɊaPd/O@"T o,8{C)NWvPw5 ֯V E u/&R^kkR kBt;KWm"zODJEt гWu&t)U&ti9Vwt;= #TzFt WDJqEti5Kq3KWCt;KV_D@/%R^]*5K/Ԍ.B~G. Պ@5 TP a(P0t%tq#8 J (Y2zPPPJf@ia24JWC+:@ǸCXZ#%VZ*ZZ%Cm<>VAPTB;vϪY2%K"T2%6oa24eh!= XPlv%TJ(H@"4 ^WJׄv#FV襄"lTJ(F@fh}B3lvѣ!5R/*%K EPx|B3lfh.6z(cCk"C7*%q#RB7*% Oh E%tVC葑"+VGnZt"RTJ("E@"R4 HQ H~.)zdȊ^J("E@"RTJhFf'4#EqJh=XޡV, PH(P Cj$s<.  a~%.):Ck2P[Z< Ed("E@%C3R4Ќ[ 萢g`YJx?*ZZ%CkZd'Ԋ0H%4ev.)zfȊ^2" H,zC3R+C;%Eǂp"RdK#"K EPDx|B3Rfh.)zfȊUB)PDJ EЌ͢OhFt)zvIѱ $"[Z%"K EPDx|B3Rfh.)zfȊUB)PDJ EЌ͢OhFt)zvIѱ $SdK"Rz)HOhF Ќw^%EόYJ("EHP)Y HQIGlOUTD?!՟/HWx^S|14??]BGlA0kE* HRP@JFRSFRMWrR4Ģق`hMQp- {Z*ZZ%CO/)zCM˲kB{ht!5z҉[c @ROJ~\cJxh{lt- ꥸlT+F?jF gFk\{ht*VOH^+FHlTkF?EFlMW h{lt- ꥄlTJ(F? (Q6'xPk$@JP@J={U:WٻWΐǐlA+`H*!^+`HH3ȐAȐ׸U.TP/0$R^CB*52P#CʦvxQ X&Ԋ@50FBj T#@5 q EghHh,C;/ uұ --\! E dhƐf18]aHv4ǖ5_H@ֽdhRBk UJh6P+zC P۝ׄv-$#Ck #Ck E dhK"T2 74 R `[ ‘-\@/P)xC3l)C3lyMh2lda#KG.F@"lTJhf'4FqJhݺX-襄"lTJ(Fs<>6TB3lyMhK2C7*ݡu/%q#RB7*% Oh E%Cn]Rt, EȖV ERB)*%9ohF ehF; 풢[FXݡ^J("E@"RTJhFf'4#EqJhݻX~mƉ TO'PT7#a#6%.6:"jt~^rQ#={U*g}d&w; .>yXޮV,cRxkV#{k[doRxk5nY|e?JR 0{! !q dh E dhKf iCӕt2cz"tܟ!^!$!:^_ߵ&wc]@>[Wmx襴"T:~O*U{\n.ݻtXcDliu#z).‹]3)?3yk.3dq8z\Bt dhKyEt ׌.͢)C3y5K \hКPDJ"TJ(Ks<>]]ڥK.Y2%5WoFEt PDJ /?cSׯ8o֭M]t,XoU+,P jd@52 T9Yq|ga~%]t,c񿚳ރ-ݩRW{sǝJ*^d{JьlEnE*\q5K'xVs~XFN!Tr A%S*Vc*&Uy]gv{1 B\bŷRb*%{bqL gN2޻X EɖV"z)1 Ei)Cה;o*kƷ+VOH+^J(J@"T*mRMbċ8P)u/8PϺz'S埐ֹ޵n?n*O.zeZ%wT**w^urwX"I7^ݭP)0.WDJ={U*:Wn.}tұ`֫ T+P wjd@5 T]Sʹ: s,袦c W/^+'3PzG[nJSݝ_5=Zn?n;}$%w^rq';r]&i9Vw#֊ŷZ\ًP);kq_f}wNPĝJ"T+N@"4 ͸S ͸~.wȸ"z);P)wEЌ;Bp.w:K;]+K;^ (N@"dB={ u}\Zkrw9ָv!Gq A(KiE ֺET si@XBB]5 P)BET s .H Uۻ "T.P@A(S9Pa:; ˽{ն.P wjd@5 T]S5s7ud7Ԇϱd B]+OU@%w* P]LM T@.:րf kݺE nKETUv&j9v!$6/s'szt2#T:^r1(Rv^'\:kewiWwD3#RV,P^DJ""T /"RsٛPqJh&~5]yO_oԚy Q(RB*%Q(RBmOZCPкP)< V,ϲZ܅O'X,>-ݩjJɮUV)6D;8~`'[zMǂ;U TRP j8T)NVc*G$\q6]rWmnun7E .M&)ZvxW7 "tܞ@%wo*xPݳW݄7* o5]𦫶.Mܭ{dF t2׽.M]*w޴]&+fJG3M@%{o*ًx3Ox~.ox+CoWěJ1M@fioM_]t,Xy+CodhK E Pěx|B3fi.ox+Cod(M@"TJhƛf'4MqJh7}uyӱ $&[]w(z PěJ Ei'Ԙ74$%4KׄvWFX%~H*%VZ*ZP74 ehy1KkBX TP0@5 a3t]B 8 J Pj/@%?P*Y(D@TKi]g-w;@ !(B*%(={?fՔm[eH'\cE " {Eij3A*(C;vwXZ`J"l4 yC eh;vwX襄"lTJ(F@#7F ͰQF]lt,whTKCkJP)f(R Ͱ~5]la#+V ERB6*%a#RB3l4>6UB;軋!*^J(F@"l4a8H%4FׄvwX%a#K EPJ Ͱ,A w^ }tѱ`M Cj<0FBj T#@5 q Egh04Ǒy5'CXZPPčJֽdjEoh E!EQ_;֬e<*%Q*%VZ%CO'E 5#Eq2t.)zdȊUB)d("E@%C)*j HQΫ]RH+C)dhK EPDx))%EY2"K"RTJ("E@fh8]R蒢cAC)H襄"RTJ("Es<>)TB3RyMh=2Rd*^J("E@"RTJhFf'4#EqJh=XH-H襄"RTJ("Es<>)TB3RyMh=2Rd*^J("E@"RTJhFf'4#EqJhg քZ0Xa(P0FBj::8ȑXw^쒢cA0(,*Z(C)*H74#Eq24#EWCE!:9_c@@F~*YZ%?kzqG9M sXbgX^a#Ͱ,7 R~fhjh=3ldP@/Pк?3l)C3ly56be(F Ed(F@fh}B3l#]lt,OH a#K7*F@"l4a8H%4Fׄv3FV襄"lTJ(F@fh}B3lvѳ!*^J(F@"l4a8H%4Fׄv3FV襄"lTJ(F@fh}B3l6KBgqo(QITB?#_HK^_fjh2,y>&6:C 6KG.QPJֽd(Fx^ܫ M^0J+C/D!\ UJhJ U2VZ%VZd2t&)%h#"KRDT2" )Є%ӕϷ$Ebe(!E %d(!ED%Cm )J6HI%h.)"tRDTC )dJhBׄ6I-!EX%"K %PBJ MHU MHQ2]%AnoMRt. %h.JH饄RDTJ(!Ex|BR R MHQ&)%hRDz)JHQ) )> )JvH cP+ TP a(P0t%tq#8 $%Eǂ`("E8rJ"RT2" Fҁ8]!Ei4ǖ5Eк UJhJ U2 Oh2t.)eȊՑH%C)*HPЌ͢74#Eq2Cn]Rt,vvZc@POJ~WOcMn?.6MEE٫rTyw׹4^krÐn]t,Xҵr7&n@%wu"T\B2U˻;fwXJI7^[=:!Tr$RvO*eU{\ݵ&w;t֥Kǂ5.]+Ep Rv\*e%SUkvך~5]t55Qvi*e&Rvi*eU{\ݵ&w;NǂSXT@5 T^aV;KP3޻X Eɖ d(N@%Cw*qYfo(wwӱ - E RBw*%q9Ќ;A*w&˝\WmEtHE PJ={܅*{Y+uBcAkq-(襸ֽd/P@%{וfџ$yk;[6[zBB R^x*PP? vPӽ!5*u%K E t"4 ^WJׄv=e"TQ^J(K@"TJjE0HJh(ݻ@X-襄"TJ("Jsa246zbc|; P ?j T#@5P~c*&ujXeHǂb T&:1$!,Adh!wұ --.T+bH@"4Y\$C3yMh!' ߚ(!{)!U& i9Vw =PdYE d/bH@ֽdoƐf5cHq:;v{ƐX1$R^C*1Yf )NWv{! …-.TĐ@/%1$RBCjƐ uf i.Cz֬FG.bH@%C^J(bH@f i}B3v{! BBCUBCd(bH@"418H%4cHׄv{ƐX%f5J(bH@%C^J(bH@f i}B3vG! քZ0@5j TP aK,:C GBcqyIG #[Z@%C6*P ͢74{(NWvG к UJhJ U2T_4PSaӕ۝ׄvlj2GY:r7dhK"nT2%Cm<ȵ74 RGn(Ϋ]R"+V"Rzк Ed("EsXܚliuֽd("E@#5wdhjg\{?>?d"XZ$;ˎbĎlie1bG2PbĎx~k WC&!!eG;bu#vz)u/Pк2k񆆢XTB;ˎ!*^2;^u;PĎx;TB3vyMh}dȊUB;к =UP74ЌŢaG]vt,XjP@5 5Ua(5 T9gh,C GBcqyIg *ؑ*C;;P#BP;EaG_},tc3Rd*^J("E@"RTBbf(R*R%Eǂ5V, q0FBj T#@5 q뿶ACcqyIW *HPPDJfo͢74#Eq2CD":X =yFZ*ZZ%CkZdo͢7ԔkBk_pdqPϳUVZ%?kSZ%wkܭUrVZ%wOUND\ìe (YjPdoK"T908H5LWvW( ³S [ƿa%CP*%R^yC3)C3yMh(}1HF0J@"TJ(Js< (A (w^  (Y2%K E@ PJ ̀,:)C3y1 kP a(P0FBj::8ah,;tjh(}2\+VF*PPJf@iPӕ-XJǂ;U'xP)'j008as~ݥKǂ{ܾ1TJkܭUJkJi=UA*waܥK ]jnȿ~[nJ*[FNnB¬]ҥceVZ%wkܭUrVZ%w'7ڻ;ԫ ] ݥKǂ]J"Tr%w\2Uu2;0kAM]t,XEZwiݺE ݳWOZO޻]=˿\ֽ.N@"dݳww֚~.ݚdF .bP@"T٫rTyw׹ݵ&wvq%Rǂdjx.PpFvjk]S9w\6.zLVݫw)K":Tr)gS]*wךGU gSPzGe*Rv2U˻r)X+! |٭iNZ%wkܭUnJ=UʻU5ew9Vwꑰw*K"VTr*Uʻ0kaU.:'3bUɌX"VT.bU0WewWrê]Vu,XEZw"VT.bU@잽*wV*wW~%w;eUǂ]Ī{w]ĪJ٭{]ĪLOUYztYձ`u8zfF ]ĪJ٭{]ĪLUe7aUanªc}겪Gª *K"VTr*Rv2nª¬zvYձ`Uۺ TP wj@5]Ȯa#6%.:ִg Tr*UET݄UYzvYձ`uk]^"VT.bU0We7aUϱfWê+?OdUnJ٭UrV)rTskM~.z&E UE .bU&*ZvXճ˪ɌXյr2#Vz)UX&*UMXsOt2#VT:*[Rv*e*Ss .zLE"VTr*UX잽 aU.:'3bU\ҽXP)U{MXUXeUϓcU@H"XT*6`~t(R~* 24[ ҥKFXK"T2K EtiѥHѥɫ]t PDPDJPDJ#%.xCg>]UB;tҥKǂ r^*%%RB^*R,zCKI2t^@X|)}ԶF@j T#@5P~Rj*4u P?n(]E@ %wP*P]LMRk( "XJ@%wP*["d* P }UvW$w;@Jǂݚ'c]ē^̈'Es'\z-wc]t:@/K@%{]*[ќѥYt/RJk Хk. 7c+V|FL@%C]*l3dhF' ҥkFXKWDJWDJ ,zC3vҵK!5y%. Et d!Ќ.F*]ڟ&Ku|.Mg4q\*M\J%SUoH^ i]kk5]X"XRZi*&RZE&SywLrÝn]t,X}Զ].P wjd*k*nn wc̷.w:f~%ZьPi4#43o~~o?|fon]t,X Yq| P4>ZW_Kj!*CUy?Zc+Co_E%kf67Gm'bO`/9n6S=^yUy]ksvI-#QV&2"Q`/ًHP^DJAH,:)?CwehDݺ$X/"Qtg&k E$ d("Q@%C35dhF' 풨[BE$ %?D$ 42U5*{]u[^*(^J+"Q@"e*tMHT赆qDݻ$X|}Զ.Pp@5 T]S5s7ud7Ԇϱd%Qǂ]D+aJ"Tr(Dʻk!Q.:"Xw([%w*H+uRvkv$>!ӷGm?k\Z%w*MfLUMs/W֔w!Ա`d[-Pޓ%{ (pE7f{ %!)Vgwe pKílbĥ^J0Rs|F\ 4= Ƣ vHԽK!'+)-ݩ86UJk]d{Rkl7mEДl. 풨{`%J("Q@!HPɪz/YHPɪD͢#Q*#QWC$~;VF.BQ`/e(^BQ=,zCC#eh(jnO^ § ?C}+*Z"T2K xC (C;˛3ԊEBj\0FBj Tg,:Cc#8 ݟ$PĘliP1 E d蹗ѳ 59y P.U:CV^7Sv'*^2TOn|ɞ*??˚.Zz;цZˆ-YĖJň-(8F]eC޺4X2[qԖVJE4 d(I=Rl 5]v#+V E%C;*%#Q,*;E%Î޺Xgs\TBk{k UJ*` K OEQXۓׄv[ƎX%f42#^J֟KZ{ Eɫ]v#+V"vRB;2Ue(bGDj񆆢 Q,*veGǂ0rO1F-ݩ7 T\Z'mRkl0iEٞ&W\eGǂP+ 1rjXT*Vհ U=͢C cH.;zcŊ5J"vT2#;EohƎbwehwѱ $#[Z|*Z"vTJ(bG=>Db#ЌO^%E)bPD^2"RB)*% Ohh H.)z,C#"EPDJ EhHɫ]R"+V E쥄"RTJ("E@Z{V~2RdPD^2" H,zC3R+C;K!d("E@%C뽔PDf{|B3Rfh.)H"R EЌ͢OhFbw[ 풢Y2f-z"RTz"RTJ("E=>)TB3R?y5K>2RdPD^J("E@"RTJhFf'4#EJh}tIѱ jh]_R4UBk"*ZZ%CkZdy>H%4e&)$h+C )"{PBJRDT24!E74!EIweh]_\F.!Esi5r )"{)JHѣ=> )J&8yMh]_&_OψJ6 (EDPDT ׈>ql}]{69Uۻ[sKQ)JTU{yw35rwC4ҹ`u i[(w B"*KTU{yw5Jח&P:G-Jsi%@%{ P"*[`GeOeIk1e}6%ALX(G &^y]FŁ&5+x*4w/#:?F^rGz,X3k(\FKw4کϵS ہjtհϗ={ dj$dBL@%b*Y!Y|UӇ%t*3ܟ*|Jh 2/C*P){1<EohAL]t,#42!&RBb*%!&RB34 1g5] P)1P)184H=3Ĵ?y57 CkJ*Pz/%1&RB=P+zCC#eh(*ڥJǂ`h\d(J@[%CV*%aotΧ2ԔI]t,"dK T2$RBd("I=sb[n(*veGǂ`(bG2#PPĎf{|BH ݞ>CubP)(‹P8f{ܣvH9vҥ 뻓+CP{)(P)PEohbwe KXZ#%%RBP*%Rlɫ]4~+CP{)^2%^Jhf'4JJh(]@XF.J T2%ȭ(&vf@i.P1HF#VPJ"TJjEohbwPtұ $%[Z%%F.J@"4 }PzBJhvh.PC+V ED 쥄"TJ("J@Z{V vҵːkBX Tc0FBj T#@5 q΢346rKB]lt,G@%C#P,zCM~(+Co5TsXx)bК(J*%VZ*j 744R E=y5KpК  EdhFf]!E.):j"RRB)*%ЌF*)ڟ&K)b5r){)Z%C)Z|B3RvHѵK!*^2"FohFb#ЌO^%E׉-.6VF*(C;%EǂPDliPD^2"xC3R)C3R?yMh2Rd* E4r)*%4#E]%C]Rt,XjP#@5 TP alK,:Cc#GBcq?yIKPDli1rJ"RT2")EohFbwehE!:X᣶YP)5JUV)J~gir?K }U^rw9ָv=FV/F`/[%{6*[%{3l4>6ݕltbcAj"l Eh?P3lfh.6gȊUB6{)0F@fh}BC#eh'v=ЎAXZ=Q6*%a#RBdhfa]6wѱ j"l EhǏ F*6ڟ&<]{5wQ@5*PODLU{W޵w)ϱeH!Y!@E @E 434~f )vWv[! kPya(P0F^j:,:Cc#G@cq?yI[! ! T21$! ,zC3+C; MHÐ7$[ZZ%CkZdhRBk =U,zCMnkB-FVF.F`/Pz/l3ohbwehuѱ $a#[Z%a#PPf{634Fׄvd,Oaw;QpPDJE4qϽ0raB_ekŵsː!5_1$^+bH@"4jߌ!Cz2cA01$[Z_Đ^21$!xC3f i: -\׊H`/%K"T2Ao'44RFo]lt, F.F@%C6*=Q6*=Q3l4 6zbcrQ۾!xC'PF@ji T )u5Ԇϱ.C:"XE .BH@%wϽ*wO.*w'{]8xZx‹P)(‹l{΢Ʊ3tWq.P:OW+V"R^P*%R^ yC3)CeJǂ`(JBT2>Q E@ Pf{PPڟ.Pz!YJ((P)=Y#7v{! BBCUBd(bH@%C뽔PĐf{|B3$C; ːPĐlie(bH`/\ĐJ"4 Rl uv{ƐX\Đ^J(bH@{PĐf{CCڟeH#+V"! E ,ghƐbw5r; ːȵba(P@5 1rj T#@5 q EghlHh,C'/ bcA0q#[Z'cyv.zE4~5*_DJܫrTyw׾ݵ&wvuː>'xv0r!$!E W}kM6 fm<&?IT?=Tc^G? OHgC5R߱{z|vo/Mt.X%pk޷z/FQ7J{;Uٍ}o}Z9Vw2d[&R* i"*=}kXmrKfqdoM^J%܉^kHԽ_e3$ JAn/Mu.Xbeqrd1!QDETJ0!Q|1 lB6I%!QXJHK%$jW_͔YBJxCCQ MHTRTB$$Q炐PB="*ZZh74!QI#ЄD' mKrgi0G#(^2G{ֳgV4R* t{i§sAH(Osiz/%Ч %􉜨{ E\+>5)o4yӹ zB I*!SU!Z%kr\Uqj=eevӱ`5Ԋ1rjXT*Vհ U=?yȍ#7GB'vW/Pli1rJ"T2a%ɝGYz()CwnrMҹ ZSADdh}ZdhRBk =Uң 5s7t{.;zؑ[3\ĎJ{PĎJZ{}'RvHk BBɝ-HK"RTJ("E=ЌFЌO^%E)bPD^HP)ohFb#eh!E]Rt, EȖV  RB)f(6Rfh.)zH"R^J"RTJHɫ]Ro@RHPz/HPPk74#E24tW#C^XF̼bK[籠*ZdhȭU2 74c@24!=yIKV,F.P0@5 a(P Cg{辇FCcq?y5K.)behMddh EdhFf]!EQoݎ!5EȖ#dh}ZdhRBk =U͢7ԔkB蒑"+V E%Cd("E@%CdhFfɫ]Rt ,cZ2){z/HPPDf{34#E24#EWC2-Gm{D4q(*klwTg]{F.6:,75wZ%w5*{U{Sݵ&wvn!]2dj#d{zO=کd/bH@a\%{h{wʮOZQgY-RKFXY\%Q%^J0J`/YҸ;HE6JϷڥJ=uǰJPGTwTJv{Z%k]d{L݊n\\ vұ`y>j[?jS@5P j8ekO.bNzE %wa*PsS]:bz-w;Mǂ7Yx[sًxP^ěJfiݘBovyӱ ZmvZ%Co*Zixl xS ݞ.ofɊUBo{PěJ{Pěf{oTB3޴?y5˛xbeh vPJK^2'ȵxCpl UB;ELǂ0rkJP)^21&RBd?Eo)rݕtRcA0&.2Q%^2Q%*>PH%4cHבeH׌!Y!dh U!j4~)6Rf ijh!]3d J*ZdhRBk xC2Eɋ.C:#׊@5 a(P Cj TP8Cg=Cc#GBcq?y5nBx˵be(F`/PPčJZ{VFPRt뒢cAHhZK--PPDJ"RT24#E PHfh.)"RTFn Ed'ԊЌ*Rt뒢cAHhMQPDJ Ed("E@%C xC3Rfh.)eȊ3" RB)*{Ќ͢Ohh H.)HPi{PDJ Zϼ)퐢[ EȖV/E^2"^2ohFb#ЌO^%EYd("E@%C)*܌͢Ohh H.)Mlt}Q^_*M\JPJETtwTg]{F.6:,W@5VH+P wjTrwCmKv]t,XV,1Pޚ^ĐJ"T7cHql.C1XZZd(bH@%CC*1Yf )vW ~.Cg Ɋ5!0bH@\%C34Ќ!Cwұ \ĐliPĐJ E dhƐfpFnƐ' 2{ƐX%1$ E dhl:Ќ!*ۓWC 1$+VF#1$ȭ!jf )6R ݕt2cA!j"P)!xC3)C3?yMh!3d*!4rC*%1$RB34~f )vW ~.CK2R5E PJ Ei'4m6zbc:rX$@5 TP a(P8Cg%46rKBߺX YH--@%C)*HPЌ͢74m+C;D!:X Y UJhJ U2V)J*~twcwe5]R"+V#"  EhǏ\74#E2C޺XH-Fn EPDJ H,zC3R+CoMheȊUB){PDJ"RT24m4Ќ)z뒢cAHhZ EdhF."E@[%C3R4kB-=ԊUBk֢"DJ"RT2 HQl H.)zH+C){)F."E@fh}B3R!Eo]Rt,#"[Z!RRB)*%ЌF*)ڟ$KV, TcH(P Cj$@5: Eah,O^ 풢83Ԋ5NPz/HPЌ͢74#E2CE!:XZSkK TJh} U2V)J*OfjJGbwe5]R"+V E%C)*Z%C)#7#E2C޻XH-HK Y HQ 퐢.):Ck֢HP) EdhFf]!E]Rt,"RdK{PDJ{i"R4GohFbwe%E)b E%C4r)*Hl74#EzfhjhOlkL]JZjl#?(*"=o1_c2EWٻZq`.6:-/F`/a#R\6qͰQl̰%]lt,X b1jF^j T#@5 g,jl04GB'vGXK{PJ{ ͢74F2>$:XZ#Ɩ#dh} UJhJ 7ԊkB#FVK"lT2a#ohb#5r3l?y5>ފ53a#RB6*%Kfh}B3lvG EȖV#K EPJfh6ݕlFǂ`(F2a#Z%C6*j0ȏ Fj$C;裋a#RB6*Z陋l74F24Fgh}dX=C# Ed(F@ffяQ!E]Rt, EȖV#"F."E@"R4H%4#E~vIѱ`5ԊEBjH(P Cj$@5: Eah,O^ 풢όY2" Edh Ehj=f(vWvHѧ(D BBk2^li1rJ'*J*ZS/͢7ԔkB3#EVHK"RT2")EohhFnF'vIgFXHK{)Hl3ohFbw)쒢cAj"R^J("E@fh)ݕR%Eǂ`("E2" Ez/Y(풢삑HK#"RB)*j#7#E24#EWC3#EV E%C)*HPЌ͢OhFbw5r;Ka"RdKHK#"Eh'4#EJhF'_\Wmw~IT@?"՟Hj|\Wc_tns6%FD%{k<#{ 6"*KQ^ks\4R~6I4ѹ`XZZdhR^k UkaGjgltWnO^FX`P#$Ԉ'FD%?Ͻ;U_Wu~&C$ iD!R\ Cz߄!%2/Mt.0tKT26"*JQ) CzMR]`H&C:C CK+C C"{JQ)!=6J& 8yMtI,V#0$JQ)!0G'44R& 8y5ɐ/ CP^20$! Mң MR]C4ҹ \jD% 4r CzǏ܄!%TBT$ːV, TK)P0FBj T#=Yt H.6zͰ+Ck<#C6*Z%C6*aY~-46RfhjD /!5RJ*%VZ%CkZd'ԊHJ.6z a~;ɋ Ed(F@%C7*jZ)CCQvHk BBk"C)*HPPDJZ H5]RHPiFDKnFn H,zC3RvHk BB)W'HPPDJ"R4j6ڧO^%E)bHK#"EЌ͢74#EJvIkFXHK"RT2")EohFbwehvIѱ \Dli5r){i"RdQrÿ?~{\Df{ɯn~>60Lפ?˒K VXdSFfjX T#@5,ٞ/;2?y5ˎ.;be(bG`/Z%CO.2#oh(ȑXϷ*.aG@7+VE U2VSUZ籠*j񆆢 (C'v%cGV E%C;2Ue(bGDj񆆢 Q,;tѱ ?N\d{һpJٚmE 0jh]2vdj"vUBdUƎfѱH%4tW#Î.]vt,##[Z\Ď^bG@!v4p,zC3R+C'/ vIѱ`5ԊEBj S ag(k T#= =ڑX?jq]3vdbĎ^#Cdq},Q,el ݕvt谣cAlUk--0PDeTUU2>Q'2?n,PS:2t{.;fȊUB;{PĎLU8Qf(ehƎbQvѵˎ!*sZ֟Kf(ehƎbQvѵˎКh"vTJh Ed(bG=;g,Ѐ uv5Ѝ+V#/zEd(bG`/l74cG24cGWC蚱#+VndhRBk =UȭJ#7BfT(5r'v5cGV E%C;2Ue(bGDj Efhjh]EPĎJ = OTB;Z_b#ehvhbˎK \Tכjc@5lDg{,v]q5Kn)b1rj$d"E@%d"E=΢KhlH.)1F+Ck"Ck U^J*e 744Rx)ڟ%EY2" _-I6S YfГD 8wՅX(c\]" DC>2HQ. )!=C)֓J("E@g^"R㉆&|$C+R2tB>jH"RdYJ("E@%Cd("E>hr+R+C7+wJ>*Rdn"RΒYJhJ"R㉆V(RЊo Y3"p Ed("E@g'VnErQ ))Y˂ڭ,HPPDJꉆV(R H=SRQ"+v Y^)*,HPPO4"Ey2"E7C?jjPZJ(P-Cj T TPO0ԋ(rko ϊY3}%C)*HPPO44}h=C ehE7 MLSX"EV }6Pp RB{ UJh6hcB eh**ǛwC"EV E%C)*HPЊy1Z<]:!ESRt5g("E%"pHP)xbB+R&|$C'sJd("EH8Kg)j'ZC+RNH] )YkPDYZY2")b4NQ =|{B"EVH8K ϒ^dhE MʭH۔] {B T2@ TPZx3ԋ%EWCz"Rd3"pHP)x5( HQ ] PD3"p RB)*%O4"Eyz)JHNHcJP+6+3e(P-Cj%>`CB =߼=CSRt5$C{ֲX6 *HPPDJVȋЊ )zBLH~ \v~٫^%?{ګSH_zQ*~$:F Yۿd/F@%{6*[a#/ƸV(OWq`] i"ldE"lT+F>@QZa{BQa#+v EgPJ"l㉆V(R*lb!%G*zCBdh Ed(F>hr+l+C'1FWC2/2a#6b4Fy2tSlt5$C68K EP|<16ʃM,INcd(F8K"lT2?K cB!6:߼}Mհj֧RZ+@V.P-Cj b04r+wC;CY2a# 6ӕl5FWCJhTK6+d(F@%C7*<5&ԊP+Z =|{B"EVH8K"RT2")b4"Ey2tBjH EZ"R3"3"OLhE H=SRU"+v E"RTJh E HQ H))Jc݋;C)gPDJgPD|<ЊA4] )!\D[Y2")b|V(OWNHה] PD3"pH'&"EyJhE7+wJE)*HPPD|U[B ORTLWo:$EyK(!E,JHQPBJ -HQ1]: E!)z6R\J(!EDR=/EhhBzyO^ R.d(!EDRDTJ'Zb2 EͻCRt{)H;C )"gPBJRDT2 -HQ1HZ!)$ RDHQigPBJWnA: E!)z6g(!E=C )"gPBJPBZbJhAI E^VnZPBJRDT2DC RT R*R:%EWÞP+623@V.P-Cj\O0ԋaA.CsqzyK] О,`*HPPDJVȋЊ )ZHcFdhOQdhRB{ UJhJ U2ȋPSR+C7 ׊Y[d("E@%C)*jY ?]ClFӼeNՐ2ؑvK|Rfg-YĎ|<_߭k4bGy2x);zؑ"vRf;2Ug(bGFe6a"ZZ3g-JhJ U2W)JxV Mo Y3"p Ed("E@%Cm<ЊAЊo w=O-@"PT (E@"PdeY?I}w:FSlt5v Pݞ(ҊqTJݧ*?Ow={v bHVJ*W^*k8!E 4]zy7tʐ6F dh E dh E  R Mӕ>eHWCv E "T21$O4bHy2bHN{Őح\ĐYJ(bH@"TZ6hhŐ ehŐ7o~Lհ'Ԋ@V.P-Cj%@ TPO0ԋj24=߼:eHCbg(bH,PPĐJV ɋ4HZ1ͻo}$ʱ^S%W^*ګ^%Cm<1VATTB7NGŐ8K"T21$Cb44 RV |n!}T6bg(8Kg)" '&f MN] 饨'/ Zv\čJg)j_Z1joIte}LIՐ ) EPDJ"RT2"E^&(V|r"EVVnZPDJ ϒ ĄV(RV|n}$\DJ"RT2"3"O4"Ey2"EwC"EVH8K+"RB)*%"E^+7 RV|f] 3Ԋ@ TPZ e(P2`h24K))H;C)gPDJ"RT2"E^V(OWPQ )L,c=Cڳ%W^*ګ^%Cm<1VA*(C7NIgEH8K"RT2")b4"Ey2NIgEH8K"RT2?K EZXk *HPPDJVȋЊ )BLHՐ ) UJhJ U2W)J>Uy1j@te=SRtHH8K"RT2")b4"Ey2tBSRt5"Rdϒ EdhE MPHЊo:%EYK("E,ڟHPi"R/E)ʃiJݧjH EZ"RΒ RB+RŘЊ )OIՐ EZ;C)gPDJ"R HQZʝ{Eح\DYZY2"O4"Ey2"EwC^"+v"RΒ Er+RŸr+R;!E))kPZCj Tk2VBj b04r%4盷>jH"Rd3d("E@%C)*Z"/FC+R+C'! 1!EWC2(Ykgh UJhJ U2ȋPSR+C7 GEح\DY2" H)ӕR!%"kH8K ϒ H)ӕǟoO=*Rd.PDJgi"R/E)ʃKQE7NI# ڳ"RTJ("E@%C)DCmf1)UB'1%EWCZYkr)gPDJ"R㉆V(R H=SRH"REr)*=Cm<ЊAЊo GEH8K"RT2")b\)ʝ))kPZPZZ@ rj b04r%4盷~MIՐ EZg(PPDJ"RT2"E^V(OWNHї(Ą] О,RdY2W)J*%WЧ*"/FCMHQ =޼'tJ*Rdn"RΒ EdhE HQ ))RB).PDJ ϒ)b4"Ey2tBjHE+"RB)*%"zKQE RTʝY[dhHP)x)ʃiJ}MIՐHv+"p Ed("E>hhE ehE7 YK("E,%"Er+R M):߼:%E_)bg("E,HPPDJVȋЊjHeH P/w3R[>~짡 ׇӿu7DŽ_ِ %[P %dhAЂӕRtgC2(~^*ګ^%C{ګdS%ԊP+$Ete=CRt)HKH9KRDT2").FC RTLWHeH )ykr )"g)JHx~~l.FC RTLWHeH FJ?K%PJ}"OO[V??_ar'*zjDTrP#YJ+F}*w0ː!=2& [eL9K˘0$!}'.!Cjn:dH!y{]" DT+aHDm\0b| zvC R0$/vDΒ! % dhЂ!ӕ:eHWþr T} @V.P-Cj\Zxb04r\\o:eHWC21$km@%CC*PЊ!y1Z1<]:aH vՐ z,ګ^%C{ګdS )OWo:eHCbrCgPĐJ"T2bH^V )OWN!] )!YkPĐYJ(bH@"PEЊ! Cz2! v"ΒYJ(H@6.FCRT|ۨ;F0Y[r7*PPOLi24 )z!%"kH8K Er)DC+R)C+RtyOVȊ]B)g)HP))bLhEt )z!%g-؂HPPDJ"RT2"E^V(OWNH۔] Vl T2e(P TPOX^ A}!H6P EdhE HQ 7Qɷk?-ڸ@@F~*W^*T59jiʫ㯾?)6z8K"lTa#6bkt 6zb!_ۿWJyE6ʃT@Kl6FWC2a#k E%C6*ڟVȋ16ӕoMՐ V.F@P y1Za<]:FoSlt5$C6.PJ EWn r+lty)b Y{)B"lTJ(F@Vȋ16UB'mPKh Ed(F@%C+lhhteOհj&@>2e(P TPOX^ A}b!6 *PPJVȋ  6zb!3kY2W)J*%WЧ*~ȋPS/{B"EVV."E,HPPDJVȋЊ )z!%"kH8K EPD|<Z@jHTdP)('&JyJh7 \#( ED d("J>h,&Q:aHSt5Yk,\J+A$ʭzhhգ<]:FSlt5$C6PYJ(F@"l QVn7+w>*lda#pP)Za#/ƄV(OW `)6RB6.PJ ϒ6b4Fy2t>j bPZ/E@ TPZ e(P-C}C+RghE7 ϊYKhZRHPPDJ"R㉆V(R*R9%EWCJ("E%"p Er+RŸr+R+C'sJd("EH8K"RTJ("E>ЊA*):߼))HH8K/EHP))bLhEt )!%"kH8K EPD|<1)ӕRta7ԊMBjJ(P-Cj%@ z1Vn..C7o+6%EWC2"km T2" H)ӕRt!SE3?K*%W^*TERh))ӕǛNIѭ"EVV."E,HPPDJVȋЊ )MIՐHv E"RTJ("E> HQ):߼'tJn)bPDYJh Ed("E>hhE ehE7NI-%1+vDFo EdhVnEWnEtr'6%EWCZYkr)gPDJ"R HQZ{BV"+v EHP"RB+RŘЊ*Rt!%"kH8K EPD|<1)ʃTB>Rta7ԊMBj=Cj%@ TPZ C emާjH"RdMBJ"RT2")b4"Ey2tBRt5$C{Hvg^*ګ^%CH 5e Ey2x))WȊE%C)*HPЊy1Z<]:!E))RB).PDJ E)ʃ3"ENIѽ"EVH8K E,H'ZZ{ V,U xܝ`] /EVDJiETϳ~_f-w?Ǟ)Cz8Jh#T.BH@"Tݧ*UkrNOw{"wO*xP,e$Su>ϊs{MNcJ"蒵v/R.]*ً蒏'~ԩR=S:.WDJyEt +f\ѥ<]%tBSt5"d]B]g).蒏'&KyJhE7o ҥa7ԊMBj J(P-Cj%@ z1$4r+wCt髢KV Et %C]*PЊ.y1Zѥ<]:K_St5"d*PPDJVtɋЊ. ]ҥ!!Z;C^gigPJ>ϊЋPS\+C'@k d(v"Β((x3R7)CJߔYCc 8K+A$RBD*% bLh ME%tjH EZgPčJ"nT2yֶr b\(C'kJd("EH8K+"EZr+R+C'mJPDK("E,HPPD|<ЊA;ENI[E%"pHPi"RTZ)b\)UB'mJPDK("E,%"RB)ĄV(OWNH۔] PD3"p Ed("E>hhE r+Rty_SRV"+v+"pV."E@HPiVȋ1)UB'mJPDK("E,%"RB)ĄV(R H-SRt5ZI(P-RT+@ PZJ'ŐW&w'@} =O >UGoOnozgJzޫgW@RŸ{NhhE ehE7+wJ+dn"RB]*\DJ+K^+KyJ.OՐ蒵v Et "TJ(K>Њ.A*]:߼%cJP+6 6 T+@ PZJ'ŐU{H^2|)OWo:eHOmd.=E dh E d'\+FC rSQN] )wt^%C{ګdhJ U2jhcBSQo:%E)bPDY2" H)ӕR1%EWCJ("E=Cd("E@%CPD|*Rdn"RRB)*%"ʭHʭHQV}LIՐV."Eڭ\DYJ("E@"R HQZ[B?j bPZ+VBj T+@ PO0ԋ!y\\ =߼:%E)bg("E,HPPDJVȋЊ )!%(s6+dhګdhRB{ 5jh<]zyO}VȊ]B)g,HP,Z"/FC+R+C'sJPDK("E,HPPD|<1)ʃ3"ENIgE%"pHPi"RTJhEZ<]%tB>jH EZ"RRBwJ EZ`CB zy7tJn)bg("E,HPPDJVȋЊ )BLHՐSEY@%C^%C{ګdSh))ӕǛNIѭ"EVH8K"RT2?K"R+f HQ ۔] )YkPDYJ("E@%C)DC+RghE7 [E%"pHP)VnEZ<]%tBnSRt5"Rd]B)g)H'&"EyJhE7 [E%"pڟ%C)*H'ZhhE ehE7NIѽ"EV E%C)*HPiVȋqV(OW+wBSRt5Hv+"pV."E@"R HQZ[BSRt5ZI(P-RT+@ PZJ'Ő9&tJ>+R.YPDHPYB}=)ʋ4C+Rt>9:%E)bg("E`HPZUܯ܊ڕ;!ESRt"RݕHeW."E@eW."Ek={B+Ri HЯ))RC4ԋMB TWB2e(P] ] ]-yx%|r4tJ*RPD,3"2C)*3"EZ]3tBBLHRB{r"om\2C- U^eުn+7RkO yK("E`HPZU HQޮ:ykJԐ).YPDHZ HQ^=C+Rt>9&tJ*R.YPDHPYB+R{B+Rk ))RCJ("E%"0HPYB)ZZHKhE'DŽNIWE%"0HPYB)*KhEVqOhZZ))H;C)PD EЊnhEvʝ))RCr)E̲+"+ʭHQ^%"E~!տ}տ# "!?Tξ'XlCR EJHeRDTf(!EDeQ -HQ]3t@~!%(z}^e Ufh*3WYB{zBB廊خz<9&tH~hRDfJHQ)zwC RTl CRt7RZ_ ORDTPBQ MPȞ)jN )Z.Yf(!EDe %,)zwC RTl: E_?nH %hv %̲RDTPBZbЂ5'DŽI׏bPB,K(!EDe %,)zخ%CR EJHeRDTf(!EDeQ -HQ]3t@~ Iݐ\BVkwRDfٕKHQٕKHc=[bv99$O/~!&@u+@u TWB2lм\z>9:%EO)bg("E`HPZU HQޮ:!E&4)E2C{%WګP_ϞP/EZBS =:%EO)bPD,3"2C)*3"EZ]3tBH HlwHPYB)ZZS]_V|rL=Uȋ]B),%"VhV(o:!EOSRPDK("E`%""Rֳ'"EyЊO yK("E`%""RTЊЊZB'iJԐڳHPHP)ZЊ횡R4%EjH"RݕHeW."E@eW."Ek=[Hr+Rt>9\SRh+o@u%.CJ(P]ՕеUyWB'GC"E^ E2C)*3"2C+R)5C'("5zzksڟh Ufh*3Vn+ߡyf))zH"RfHP)ZЊ횡R<%EjH E["RfYB)*K("Ek=3"Ey H))zH"RfYB)*K("E@e H* HQޮ%tBH )ykPD,K("E@e EhgOhE"-)::%E)bPD,K("E@e E,)Z=)۵NH!%"o2C)*3"2C+R)5C'yJ/??_㏧~W!ң ݸݸZs/&|/Ү!] T@u.wJw]z=^Sr9S3veQ;e"T.BH@e޳:wonܫk(L֋w'E@ ^쭀*nڼH3Q&3t^@I \Zom;P(ZU Rޮ:J/Sd(JeW(l?WWq74#Kh'(T@ɋݕe E@ ,(%JZ]K(LRBP.(YPZϞ (EZB+t>9&t ^*.(YPPYB+{B+k )PRCJ(J%%02CP*3JZ]3t^@I Pꑷv"f(](WnQ^]իGÕ:eHjzr Tו T@u%.CJZf*n ͋ +瓣Slޘ;C7Pč EP_nwC"T4C'(#5 \@e'ZB{ګ, UGգ]3xrL&a EgHP)ZЊ횡R:%EjH E["RfYB)*K("Ek=[ziWnE'DŽNIkE=C),%"VhV(o:!ESRPDK("E`%""Rֳ'"EyЊO ׊yK("E`%""RTЊЊZB'uJԐHv E̲"RT~ZU HQޮ:!ESRd("EHe"RTf("Ek=[Hr+Rt>9\oSRh+-@u]@u Tו T@u%tg3tE^))zH;C)PD EЊnhEv )z3 1!EjH )Er O*3WYB{zvRHQޮz<9&tJ*R.=+"2CYf("E@eVhwC+RkNH۔!%"oHe"RTPDzghE"Z1SRV"/v E̲+""RTЊЊZB'mJԐHv E̲"RTPDzV(/Z1SRV"/v E̲"RTPDZUZ]KMIRB).YPDHZϞPB)5C'mJԐ E[;C)PD Ehg7"EyvV|rrߧH P/6W.P]?[r2+.Crz6CWqKh^eh.^ = y3"0 EPD H*V(o wRО\[+DKh2C{%Wj'Eʍ횡ǓcB"E^HePD g)ZЊ횡R>%EjH E["RfHZ HQ^=C+Rt>9&tJ+R.YPDʮ\DZUZ]KOIRB).YPDHZϞЊEZB+Rt>9&tJ+R.YPDHPYB+R{B+Rk ))RCJ("E%"0HPYB)ZZHKhGfOIykg("E`HPV(/ Hp~LI^l\HP]W.P]ue(P]WZf*nWn^eh.^ = y3"0 EPD H*V(o RО\[+DKh2C{%Wj'Eʍ횡ǓcB"E^He"RTfh? Ehgr}g)5C'cJԐHv E̲"RTf("Ek=)ʋghE'DŽNIGE%"0HPYB)*r+R{B+Rk ))RCJ("E%"0HPYB)ZZHKhE'DŽNIGE%"0HPYB)*KhEVqOhEv-R1%EjH E["RfYB)*K("Ek={B+Ri H))H,w,xKhZ , RTf("E@e"RֳZH3"E瓃SRP/6e(P]W.P]ue(P]WZf*nWn^eh.^Wh}VȋYf("E@e"RTfhEVq7"Eyf}"5"E+R.Yf("E@e"RTfgr+RiWnڮ:!ESRPDK("E`%""RֳZH3"EcB"E^He E,%"E_)۵NH!%"oHe E, HQ^%"EcB"E^He E,%"E'"Ey )"5"R]B),%=)ʋV|rL}Vȋ]B),,3"2C)Z HQ^ZЯ))RCLC"E@u T@u]@u Tוֳەyו{>9:%E_)bg("E`HPZU HQޮ:!E_F!&H )=EH6P2C- U^eުn+7RkO yK("E`HPZU M+"E瓣SRXg^ Y=C)*K("E@e EhgV(/ Hh}UȋYPDHPYB+R{B+RkW}MI3"o힡YPDHZϞЊEZB+Rt>9&tJ*R.YPDHPYB+R{B+Rk ))RCJ("E%"0HPYB)ZZHKhE'DŽNIWE%"0HPYBYf("Ek=)ʋ4C+Rt>y3ձgg);'5}[['{ggr &{=bd/Gl򂽙!" C#3dodo/Sz{eyҷ{](SzgPNTgM/JldM-i7ӥo fT.Zwl 1^:63iJ/Ml Pӷ5goMJ͸)3d3qYm Ħ);iJo&OߖқSh'1O#mzbӔ^4`ok \қQT)Szg0gڦ(6MDMSzbӔL-/7srJ/'S6cVS/ߋ?~OϿ?~?sw)v Bs=B^_}K6,sR^?LZ'g2Wl (xŦ)ʾpSg~UTf}#,uW;{̲ df/Y22kMyfoZz'{DX^me L ai!,0Mk-/["h;BXb",u`Ǟ}22˔^&{oY@Xky^+/ZO#ayM/CX`e L aiDXkyaEz#,u2mzӔ^4!-V^%:ʔ1zZ e}]_IWU^F /#X`{O~%WRڰ̎kWG&Ey^oWۛD2) a&dvBK(a# ays{S3) aiz3n򝮼RDXO;FX/%j^4!,0Me LSzK["hw^K9 ays^4!,0Mek)DXyJoΟ2w^J6 aiJ/CX`k-/DXyJa:rz6 aiJ/CX`ZSHoJa?eJa˫mz{Lo aCeo?Me k-/DXyJa:Rz df/ df/@f2wiOZzs=:FX2 d!,0M2a{K-{GuԑJon^2˔^&{oY'򂽮 e^=;V%j{93j^F4˨&{Kj-U^Q1RGN/VܦQ+0Me LSzZk ޒZ[RLSגZyM/V`˨2j)%Z -U^;Vcj^FM/V`˨2j[RRVO;V |~He 2h)Ay-oӆev\M dT2s,@f dvS{*lӆ-˩h^?Lt#jwSf *dvI(ĿdtI:tyswSe Lti$]kyޒtEz.uD1BWxir.pe Le^林vy=^c쥎5^kF4=Tf˧^ӂXc^1G^Ӕk4100Mf ̧$ =-(6^3~r8Tf ̧XڰkWG }ԑ yur8Tf ̧\W ,]^z30u=ٌo 6c``)،5dUWD䒁Ϥk{Ksݛ10pOCe_Sd`y7-Z11SGJW;{2K/@f޵UӛWj{>>cԑe/xysEL2^4[b`oW^a1RGa/on^a/0Mk-/[bh;^c쥎l/^˸˹&{{Zxo-/h;"]cҥl/C]P&{ek)<{J-_:í\uoxyj˙-0Met LSz}M^TUz2;Yz< ŹgFr,p)gr8҆evųגcQ(6^3kN&ӔdƳ|ZYig}y:S,on4x8Tf3lQ.+UKu>>Ey̳>Jx&{ix8Tv?MR7et LSzZ`ZSHCjyJkSyPj^4-0Me@ LSz}M^TUzGsԑ7e LSzi!,p-Z^|%+/Z?eJa}˫mzӔ^4OZSH//["h{<>5FXQ<#, E@f] 3walGXivUy}01*W(f L ai2&KG9T)FDF[ ayD)˽L2e^&{}MMM+OW-;+ɛY@&{Ce/CXPZSח-V^!1RG6=Qz^4ZS|?+T-SW2rf L\"aE+#5FXe˛˙!,0Me LSzZk -V^["L#ayM/CX`2)%Z -V^;BX_c^M/CX`do%ʋ#5FX`Gߜ3N ^4!,0M: sJu9'%{'2{wD{WLdDv.{J/]>ִn-Vz[T/{óҏ=ǸQEԊLZiQ5m`oZ쭨U)A&G)X#s_do/Sz{eJo/L5z5؛V*{SU=RZ^&{"Md/V5{+jUTE z1VwG~VOEԊLSz"d/V5{+jUTVԪ)SjVڦQ+2MEԊLSz"t9W걼p9WԪX;VO?Ej5EԊLSz"Ӕ^Dk 魨URVͧLRZ6ZiJ/VdҋV걼ފZVz'ǔZ9Z6ZiJ/VdҋcM!Χ*-{'ǔZ^DVsko?MEԊ"jE)z,/؛.Z5zuW^v37g 3{ df/Yz]kӻyfoZz'{zO,bOܥdoe *{Zk %ʋ㓽AFlG"%{{do/Le)`WiJo1z*W˙Q+0M2j^F4k *T||wLL1^&{iJ/V˨ZSVyVOSZyQ+0M2j)ZiJoI\Rh]#j4V_ӟ={Ӕ^F4QޒZ*%:ʔ1z*W2j)ZiJ/V`[RޒZE+#j4Veʛ2j)ZiJ/VkM!%+Uz˒#j4V2jͭZi2jUzKj[Rh;zyLԑjw9={.g 3{2K/kM{zWu7қf}S+ud{.@&{do?M2j-U^-ߵ:IQSwW]+0MӔ^&{{eJ)Ր޴RٛJdZ=ʫZiQ+0M2jޒZ{JeoI'{깤V^me LZi2j[RR[RdZ=ʫZiQ+0M2j)%Z -U^.zS+uVZyO93j˨2j[RRVO;V%j^F4Q+0Me LSzKj[RhwDJ_( Sx^4A+v};?~O/?~_s;(Gyԑf{oB?޻ӔdF4%z}˂l^Ǣ1RGQ<,@f^k \yk^ 3:󇉏1RG򚱭G9@&5c[`^߲$s.Gg8.u${cg=zi)׽L^2店[z}˂Xr=^/}/==Ψ&5^`^߲uܰXϜ3ydz`If3ٌi2״^fݒOK&{d/c``-Z^d`yJ:jko^z,3ZSHoJޒ?eJ ̫iJ/c`` l-/d`yJ:rzٛ[|S2) iJ/`kM![yJoSKz^jޞ-^2>˸^ M+Ht#׫@f d^ 3{ dfZn敚j}-uD(9ep *w.[>m6,##jxdԑGnU{eJr/׷4x9Ey}0)cz?ft Lٌni2-0MfµpmT#:YO).?E2^Ƴ4[򬵼`o"WYSz~1z[eukFG?5^`rͨ\ZoY:nXEy=b`cG 7@f2,@f^eiu*s>f`H^r=@& ^`f L/rI^"2G5a`f< L׌iu,*#:>cHɒrtkz}˂|n.9zrH٣)5#e`4y}ZoY:nXEy=fcnEQo ӗag `3plkK]1*{Oo$?-4^&{+M2V^_S׫޴RٛJ:rz/5L2<^4{O 㼖uϜT# >b2"ͭiz3"ÏZSHoW^-_:t9{zOI3`OSz* iJ)Ր޴RٛJ{}:Rz={̞@f^ ٻִۻyfocz?ƤK^K/^4P&{˷.[u>>kxd T^^m$^2˔^&{}M!^ TUz'{J)^2r2^ ٻִwUw{J-jS+ud{r2˨&{doI%ʋO52V _)xM<Ӊ`)L2^_SHWiJo1,W[{{˙Q+pe LZ5{KjW*{Kju1LEeʛ˙Q+0M2j^F֚%+iJZ}:Q+one LZi˹Vkyr.U^=;V%j{93j˨g/V`-Z^VyѲwD>J9Zys^F4&{ޒZ{Kj-{GsLԑeʛ[{d/V`.gF֚³Vyz)o%TԟFDFk1[ޓL^߲^&{e^&oYuܹEys6bu/׷^&{e[zw.cQ^+&pkѕz-ke^&{e^ǝXߊ1Ze.^2y}Z{e^&{eq:bzwټ18OLzCe=Q_nO ĸv}11SG7wȔP8T쒁兟Y%ˋ#5f`2ͭi100M2~E ,T-SzJ0)ii1`//d`yJ=2#wU{DvKdWz첗.{캜k}T7{^-!? 7Vss9EoniEͭ՛[ŢeͭI&.rd&{{do/Sz{eᱼ`kbX=;%]?n^ 4&{i^&{{5٫޴R]Ω*{'{pǍO 4ez2do/L2k z5؛V*{SUONy󏛘D{Gie^&{{e^_S׫޴Rٛx|w$ڋjn4d/bX~5{M+*{'ǔZV&{"*4ًcM^SފZjcJl/VQ+2MEԊLZ=쭨URVͧLZ=ժߜ"Ӕ^D4Q+2M)[Qb7-ZQ:ݫ^v}2,@f޵U/R7W1׿djoB,?9>3 ^FQ+0MʛZ޷o7-ZEU&"{{sﳎ;)4˔^&{{d)׫!i7Ue1z*W2j^F4˨&{Kj-U^Q1RG~2jͧ?J/V`˨2j[RRVO;VO?AG9ˠ2h)+j7s}f*!z#,u7kVdFJ2#X`Ok?7zij)Pz?eg1 ;52% |@*ַʽgnr/Y{L%#{Ku1Ϻ m hyq+oMe@ ,*2ɽ> G{H%oʽ#u*{{c%yq+/cX&2UAtJQkLTeʋ[y$/Vɽ% &>%yKjuʴ9Օ`6gFQ+M2jI^F{KjG*yKju$Z]%h̨{/VZnr՟\/%ە筿b}Jѹ5XH۵G;A=K4=~J N&8f~i&l[;XXme tOnO{&y}LA^yK-yGk9*83X}{c : &b%3'9*9G[HVcE%ӭq,ܛ<-9V;XḵT8e tOV~Qq=^gSAޒcAKZc,]O/vn=O/%iE?vOA[tOA&; OA^zy̱Vɱ&l^NA|1ێ%I]sAVZaaPב5hIcN,ۛ/ 4AyrWxf}?o/oo_xx}^/۷vc_+o}cx}|g/xiKo^Ҧg%cQFIn_>4xuxuxuxuxuxuxg xSKn^xNJJ: : : : : : MMQnOxmcE{D%^^^^^^٦wFR(x'mp+2#*4444446=m~>\O#܍yQqj2S JmcE~D%pp#'<4M>srM-ow};VdGYZe<0ij4~ t?:ON`v3(?|&mco~exSZAAWMMMMMH{<q~sb 2ۋI?۬NJMk0n۰cޯgP>֪YM>`````}Iֱ簎AX &m5kFջ6Ό4(zj̨EOՠXռrKV o[jlF%^O1: 3 Mg",7zg={Om Fڠk Fڠk Fڠ;ӔiǷNz1ug}T>&kkkkk#M>JTz{1ug},]>VFitqmtQ G5H;)umXZq~cs[F5X{n˨룚d}ֱðAXo9ntͨz6lt8=eTLjejErB75-6]HO3*z˨,{˨,{˨,OOx喂4]MGifTLQ 23]F5k52[ tOxۦ4]3*z˨^]3]ƦΞZm [Rk ot}$-3ڦ뙮xSgjLgjLgV+-M*~M+zoFڠk5]#m 6icxgzKi緤;(/&nî_9ͨ:4`{˨lOuՀզ(-)mɭϡGZ0fE:gT :Yii̲NNc;ռw' iz>YϠ83N糌k糌j|֬Ngú>>yr.V]F糌Meg6z:0[m϶bEƫex=5YF5fYF5fYyoVn4xWN,}֌糌j|Q 2YyoVn4x[_n}}++< [m2AWWltT2xm/z{1ir볔[3*Gٓ[F5`{r˨lOnRnQ.Vn4x[r-XoĞܚs'jrtkF%^t.x=eToiVtFe^ۦë-.cS]F5]++2^X=i2WWVRt0 'oޒkFjM44WWW1MM-o2޶z+M׌J23]F5z˨tʍotM+}5S]F5S]F5S]MazorKUm˭im~s8{rk.x=eT'j՘RnM-o2-֖[ɭXQ 'M[ʭռ[mɭbE٭Xոzv2v.y=h|[g"\,zB˨j)xj3(x[ 뭭X3%{jQ[f5fYas's֥XFyF[6`i6l#m6`icWΏ+zA7G(Ox xQWznt˨^Oa6-oW#RXdV\nFӫ7Nczuxu;hR(ӻ>m+KfTNjQ 2TXyorRXbEz k.),),)զ0-ezK4mu)֌{M),x=-Vn4RXbE^Oarz=eTj8K +7-ui+,Vdš%^Oaq)xK +7-ui+,VD ,t=eTcxu5iqMώ#u;w}Ϻ}+k'YFOzSX{>֞Ϛ$ꓬaXW>kYH.#m 6`i6m#m6`6V|l9:Fy}Ygͨ,xOj>2w)-}Vn)xK>z峮I 5ALNNczuxuӫ;hR(ӻ>mkfT|Q 2YF5>k5/-}Vn4x[>YYHcx=eTcx=eTcx=5笙v~Nf׾_לF-ˮ|'As[F5&YW綌MaYM>ֱðAemŊ4מzݿ?i֛]ƦD׬&Y׿Ғ+kz= ֞2ڳ^F5Xjܡ4H '1+km/kkρ`90=6IG:.ʁ9ݯe /V{ojQ ֞$ʁúr`komƊfTfiAH7l#m6k6`i_m:E5+tqlOxV:x=fTjQ [ xSK[: P*-vKjf3*j44WW1: Mazg4M-o2޶- ܿ8i6 36j=v~Jvl;[Bb7bx7QQQQjSRx2rہHZ X՘eO2˺x= 慓:)׭X_AqRkgzw22A^<+: `^bEbi뱑$Mai/cSX{kV+: J{9mu;K̨|҈)=eTV±=R(>mۡ\"^Ou.x=eTVټ7) -XOgpW6i6]#mk)-}Vn)xKʄϚQW ggYF5z>k)-}Vn)xKʈX3i6Hxq8i6VxW|89: o[a kF%^c-x=eTj-j^[~ U&Èr(_y6Hcx%NcxutuëӠ{ِ[R0$mʉvAkk)=el k] Gd}ֱðAX{[n"s-u5X{n֞ۚ$Z``Ra4m^gP63\3]Ƶq{˨\{kV +ӕzo.VDs8=eTc=eTc=5ɹJ _sz ʈ)u5ڳ^ƦQM>\:{o;0Vbg3O=pO`1מJGzmq_ -ޗ:=kKkχ=u5aƦ|ج&Ya:amXܟF8Í1F`m6k#m3Mig֩Ãu I۪cs ֞)33eF5X{̨룚d}ֱðAXGۛ"͵I ?iQ ֞73fZ`+o4üj¯gqA۷?oo։C\[q4`4q٦o8V <ьv>I=kF%^ϕ2xu5zl)--oadjzzlanjjQm xg4Loj)xSm cE:3bƦΞ31[m xOrK[~4mHp$CN^OWWczg ӛZ ez[룭X^sӫq8{ؔ^F5 xgb̍ot}M+2^Ou^OuWWcz=յwL=-XΨiczH6i6wwEӛ[: og}ƽwF%^Oh -x=eTlS;oj)xS-VX9XFxLNNczuxA^ xgޛ iz곴V3*׳VF5zʨ^Z[Zռ7-~m>GZڽ6ҠI+t=ieTQA觤%_6,S(>l+,V_6<{le=el k``}Tz]׏RaYmŊ|W]YF5ʞ2qW|jSx*}Vn)\Uc>K5,,YMorK[&m$_-{>k.,ӫYƦեZ ]ʍpn϶bE>=5K2WW糌M;mTg2oYNJwE==:iNpvxm:}FO[􁷈>Wlv}Y+*Z>˩^g9k,x+l^[#tyzypv7ezuxuӫ;U xg䳊Fw}ޮϺT>kEZ>˩^g9k,x+l^[^eYח+xjൄS rw)LoVRWXb/NjъJhe9,gSg] r6lS;azSKLoZ]_XvZײVN5ZʩƽײV6*Z ZL۵VחZ^Z98-kTcz-kTczgZ-oe oZ]_*k6CΖr6ez-kTczu5Vټp8W֪h4sZ]_XgZpS r ٦0*ZVJ\ew^V$3HkHxq8i6wwEӛ[: oZ=双W+5b5Fx=keTgj-j^[Zh+&2^3~従n U :iiLNlS xSKv4mkZZx=keTgjQ Z xKk ޖzm[+V :YWgMY+xKk&?j}޶z-ՌQ gM9u5j5/-Un4۲VmkŊm[kifTQ 2׳VF5j5/-Un4x[:$HZ"Ov9;'g# zSWW1: GZVy=[hnO۶VZͨ^ZY+x=keToiVZFemkŊؔ|jS+>+rnmŊYs,xu5fYƦrV]Ym}uk,VdWXs,x=eTcz=YLoWnmu+}֌gjg8=eTcz=eTczKYLog>yz=5|Q,cS>k5/-}Vn4xWn'4YƦ8=57G;Q^Ld}o-Vgpdc#m6$i6Xicgb=άSXM׽4]3FtgM.Kӵw>sK ޖ麷M+]yF%^.cSfS]F5fS]Mg xW ޖܺ+2^my.V]F--{T ߭37MQ|ֽXz>k.xﳌjL糌jLV>+ùYL޶Ϻ'2Y;#ggYF5jLoV>+7m{g"Ob92YF5z>k)LorKg2MogK5rz=eT,^g՘g-}Vn4YbE^grz=eTcz=eTczu5>k5/-}Vn4x[>Yx=5K -cSZF5ί<'oKa+U6Hk Fژ^#m]m:]3qсw}+2^|{\HgjQ Z xr۲VCbEƫ]xuӫӘ^^4iAk3|8Fw}޶zO2eΨ<Ngkgj-j^[Zh{Z"Ogby8{ʨzʨzj){Kk[ʽVL۶V掠Q921x=kel ^Z6yazKk{Z"Ogb92׳VF5zj)-Un)[ZUm[Zͨ^Z՘^ZոzʨƽVyazKk{Z"Ogb92121Zm ;T[Zh{Z"\,zʨ^])[ZռVmYbE;p6Ƌ6g#m5^#mL66wExsKǽ7GѶVx=k55Y+x=keToiVZFe>iY+Vd k5KxuӫӘ^#-Xռw枭Un4xۧm[Zͨ<=keTgjQ Z xKk ޖh[+V\,׳VF5׳VF5׳VM[ZR_e޶(ՌQQYզVMfz[mX׳Vs^Z՘^ZYզV-*GifTNgjLgjLgj{Kkʍfz[mX׳Vs^Z՘^Z՘^Z6-Un)ӛ\x[mXzj.x=keTgj՘Z-Un4x[mXΨ:aq8i6g#m5զonx{gZ"\HgjQ Z xKk ޖeXj3\,jiLNNczux`Vޙ{Vnm>Kk5pQ 2׳VF5j5/-Un4x[mX׳Vs^Z՘^Z՘^Z6{oirKjiz곴V3*׳VF5׳VF5׳VF5w)-Un)xKk>m[$SƇ3*jÓgM^Z՘^Z6-oiWgifTQQQ-j^*7{oZ}+? #QQլx+33ko> 9SXs|Q ؞2SXMᤞ*rrQX:VD+*Nj'1NvxI=:i٦ghcx>܈o/]u'vҠet-l ]`9ՠ{T'v:s.I-.&zn/IKVT|S rYN5V>ټYEY:VY?nQ' zSYΦ V5yRIz{1irRɭl--Tc-Tc|W鮢ɜݕwu]+*[˩ڣ ?J=euumg~tWRVK&KVTtS G5WWW٦7Eqt(uGw^XߑO֖Z$ޣ. : z)>*ZViK17y;xi?O.!i:ONcȓ DXy~ xpizgTFf nFf nFf nM=7n9: op/Ψī5x=el ^] 26ojӣz'RFQwzkV=pfN?u4Wo ^^46р7) izR뵔Z3*דZF5zR˨^Oj[JռZmI׶bEzVk.k}u3121Zm [}Coc=+2^-8=5021219-p.~t8kifTΞ2WWczuxuYզV-վ5 oZjF%^ZWW׳VMoirKܲVmkŊ|8{j.^Zk}u3׳VMoirK[ZUm[ZͨWEb^44WWqm xK[ hw}ֶVH; 6i6i6ij_rKx'mkVZx=keTaQ 2Vyoj)xKk>)[)ZͨĻu.٨^]iiLNlS xSKLvmJk5gjQ 2Vyoir۲VomkŊ|\)Y+Y+Yզ0-ezgϿ. ޖzk[+V/{4jzؔQ==FmWnKa`MbIVXošQyR{ ˨lOaՀ),g( +o[fTQ 2SXF56-o'm ўšSXF5nĞ2q#jS[*R k o[a kFz ˨z ˨z ˨ k5/m[KifTQ 2׳VF5j5/M-oi'mku)ՌJZY+cS2qjS*_e۶VZͨY+Y+Y+[Zռ0ʍɹյmXgT5i6Hx1Ft=-ӛ~8׶bEƫsz12Y+x=keToiVZFeC+2^rӘ^^44WH j5/ izZZgjQ 2Vyoir۲V׶bE^ZpQQjS*{oiWmQ9212121Z [Zhw{ oZ]Kk5gjQ 2VyoirʄmQ׳VF5zʨ^Z[ZռV^e۶VZͨY+xu526Yզp-Un)Z2m[kifTQ 2121Z [ZhenmkŊM3HFڠk5]#m 6δ[v=uxr |k+,V$֞zHF=eTgj>IGZ`Ϻ =YH:V`Әkk\4XiX-NcۋIsݖ[RnͨEi3ۓ[ƦQ إZ;ߢsK9Sے[bE[3*j3^On2˞21˞Zm:?`h4xK4mu+֌J212121Z xK֭-XW!Ğܚ{~X-x=eTo)VRnF%nmŊW!zrk!zr˨^On[ʭռ[mɭ[[n"ܚ{H2WWɭզp-Vn)Rn0ۖ[Rnͨzr˨-x=eTczK[LoKnrizgT5Ɠ6iHx1Ft=-ӛ~8bE xS^] 26'j-?Z xOrRX!AZ Qa={5mAWk"4WAW1: GRX!g:,}s+~Qn+r(kגAZ["X{ֺ=el 룚d}ֱðAmŊ|l{k|Q ؞21؞Zm wcR>ki>^]2qn{>˨,{>˨,>k5/ܕK|ֽXYs^] 26糌j-}j^[h|ֽXz>k.xu5z>2YyorYbEX,cSz>˨i½Y{K>{>^^g,x=eToV>+7mbE|#~oIFxK2]#Sv,T wުgqg wrZl9ɴSL7WcɥEH[Fڢi[Rݿ%Y.|1yr綞k/iܖQ ֞2{Y+%ZbE+GTF..ݦ]yGvm)|m뿁er*v]v+gj̲^nWWcM oDR(xG>kXQYX=Si՛YƦ|nSR>|ez>Y,x=eTN,ݼ4ϪfzG>kXQYXN糌jL^gYy oj;Y_cŊYX|Q x=el g%Ϫg}}+*^gbYF5j|)x[sŽY˽w쳾ZQy|Q{糌j|Q Kx[U|gLoD^#m}5^#mMiH[xwO;z[[Fyz b:4z˨^a۾gFwd֊v9X,jiLNNczux'vȽɬh/;V߭<=keTgjYݦt8֪ùVL;VE,)QW+[XƦLgjnSZR|Z}*gjLgjLgjέKskj9G{lX: l12121tzk._ZxrI{u=:iuxmM3z۴Dxejebq8;i൬S rV%j މ|Ydbv9y/xu54WW1: WZ=FZ5q2SkYej൬S rV%ΝSkYx-kTej൬S ѦtURvJl_NKgvT⵬S rײVN5vټ4j:E^ SG;\抨|Ҏy4)OZU,V^# 2׳VF5j7/mUm4xG}IYxY_bīW1: :iҒKx#nj{ܾLZ*pQ 2WWgvZRZ1Z߈ī^Z22׳VM okjKZUck~z=Ue1212q6_x|s6ߜ-vn;'Ha+XnĞŠ=N=eTjnn^YVa/),V/|Ͽ`1AW1: :iнԷh[R0~QgETԞ2YF5`{>˨hS:[U[ g/x>Yx=eT,{>ؔY|nSR>|g}ЊīGN'kcz=eTczM oDӍ%ʍx> 9SXX>gj)x=eTovVaFxez UX),x=eTjmn^*h+,Vbg X,WWM),xC@ùUXέ:o_w>ZQ92SXF5z ˨hS*R }9VX(QH[VFk'g#m5֓6p-]xkt ޱ,e=9GT՚: 2 2UXy oj;RXˌ+jX{4M^^4^i-ݼ7roaF}ޱlUDzʨ^ZY+x[kr8};VY+x=keTzj){[kU[ Z1Z}*gjQ 21KZh瑵[+V{gbzʨƽWWgMZݼVYϱbEūV=N׳VF5zʨZ%Z}+*^Zb921x=kel Z%Oqmyr[ZET{=keTcz=keTgjmn^[Z Zx֊ez#iKki H[xl-M'-]xkt ޱjUD%^ZY+x=keTokvZFwdY+V.g=Zbu57ezuxuӫ{%kFZF}ޱjUDzʨ^ZY+x[k֪6ǫ,xꫵVx=keTgjQ ѦtmUm)Z/xꫵVx=keTgjQ KZhwd֊YX,~2qQ{Z%Z}+*^ZbWWcz=kelzʨZ%Z}+*^Zb׳VF5׳VF5WWokvZF}Wk"*~21212Vy okj{ʌ{lXQ7 ikzH[k-M'-]O5/x껵Vx=keTgjQ Kx[kU ޑ^ddXQWebi՛2: :iҒKx#nj{ܾLZ}omoD~/Zi?XigHCp]Ƈ@!i|O딞Y rSX6=7WPi$kkkkk+M=uWgETޕ=eT糌jP|Q Kvj9G>{XQʞϊ,C,CݦL*m}Vm4xG>{XQz>+K2WWcz=el>k7/m}Vm4xG>{XQz>+K2YF5YMiz\%Ϫg}}+*^-),,ݼYbEQhe-e-Fښ^#m5i n}zw􎷶t={>?9}+*^-bu8i|Q 2Yy oj;Y?K|+*^myӘ^^44WJK>k7/ܻϪq2cӾQy8{oa뽅eTQ [Xy oVm4xGoa+nurXκxuӫӘ^+-OoDވ-Q/;V?[6ϠI+t=ieT'jн=Fo+,VQV,|U{KeOaŵ6e=x,ox_]OԪMwQ]IbE~ǟ5SC?i|.kS?k2qj|.t@9]?oSۈ{,~Ys%K!=el<{R˨7Oj6yn5Wm2$Kk.Vy4W,Ơz+6= UMzS5UeP[U މzjkEƻvNǵ8iw'1NSSD!Gq2\׊\{^' nr\N5uټ7p+1bwYz)Nq7Qq7vwc' r\N5vټ\M;\_/Suӫbrzu5Zr\%j މzjkEkiX4SjT-lGLhihVTZ1{>L幜jL幜jLUn1Kx#f1Fwb^fZQZfk/ӫW1rֳMiz;մGc,VSR$iuk?yxkOg8=eTc=eTcjX:5cʭʯL܊j_FeTc=soxdx|^/x6Wqڜ~+֯E{Numj|.tNs8y?~xtOh66\gLH[i#ma36#ma36#ma4uvG.^Kp)Ǻ]UgkuvGSغMݵ.H+wH[gwH:j|.t5>:Eٽ{>'(<`o,CQ91Ϟ36e=fT'vdGVF3#6` X Xz̨XjnS RV1ez`XQQ n+v6 cE^X,z̨^πݦ4;\Lo*[yht"KW5,YWF3Mxi=<_ocŊ:ϗ:g+M>K4n:υNs\4>ҳt.V;ϧ +<\o"Y84uttttخ4AArb2bEv^yiXiXiXGbiw֥Ëu .)}+/NN=$Zb; Hwu+\_&F 4XMaӘkk\_iX-4:a}2cmZZS_F5X{˨kO}E5X:a=acƊ2מ{u5`Ʀ̵jUM}%AX؊o-skO= ֞31מ31מjU-fs#E>Vd(sZ3dF5X{̨kϐE5X-ns>^L/{z6מ.{u5pkOkOE5X39*{2V/NlΥ``Ӹ_4X4Wd}%{\ Sz;o מ73fF5X{̨kϛEĺfy7cEgH[sm-Fښk#m6\iu;ub}<coƊZۤu?מF=ofTkϛŦuJay?{,p>A1Z:1: ֞73 ֞731מ7ji;oV\2/f+\k\4X4X4pk\4X_irzo٬Nj)s=fY0מ7{g͌j`y3cSX{,%֝7+mț}+\{VQ ֞731מ7jr;oV:fk.s=fY0מ7{=ofT͌jYT;oV: Λ{Λ=LK'מ736͌jYT;oV: Λ{,pkϛ=׊Q ֞73fQMY0;ovz>:o Qpϛx6Qg3ϛElyvFsX͞3k#mFbm6k#m͵XGH.^s]b\+ kϛ=מp# ֞73fF5X_$Λúf)r5W#o1؞831غ=qfl hWl2V7#*j^,444m+-}ݼ7r_6#;9cx==Ozz̨^OJx#F4-QXX,x=#fTgČjnS:Ԗr8G_;9v`(Y{Y3As`F5z,΁s`k.YcyɘU,|U{|js*ҀI0= x>ͩyײ6ޥ ϱcE=/Ou]/9)#kS5>:4Bq~oN;x;h3(z˨6}/<ՒWi;}?zQ# >Ya=v__gP̵K̵MkO}՘k] W+-u0scEkmsXσ`y0=$ZbXi;GVklXQX{RVQ ֞3ړbQM%{H}+ kϐ= ֞!33dF5X{,IWzoqc/cEaZeF5X{̨kϗE5ɺeܯ;_vl6e_/ÙvR)x=keTgvZՖV,x꧵Vx=k3iQ WӵhS W v;ݸX^>X?NJy,wccxnǧ>^l:ܣc}pv[;M܍4iA+)tܢM9ug;oudH?k|~)<~IcPiii6A-Q% l}tfkG<[f˩^] W;2[6%jZ l,xf3[;*Zf˩^lj^l=۔vfi)x;%ZSNK.Ζڋl-{UxiѦD9KK[ ީ~֎gk)g+M>K4\)iܢuƧ.;tOol}l7()Yb˩6] lr6+q$];Pmg'Re*k6B\/Su-͵[jLpKs9\楯Eh1Νk1+ ވk#my#mͳFz2H[xwO^5t5 ޱzz];5k7x׵xk?¬Gݼ֖ZˑUֱX=XGz6\vƐu2feKcZ'jpQ n^La=6\kEgYX,u5NjOq[Wv(Gҍ% ޑ3Zߒ<%^] 26^,Jx[U[ ";RX b),Gj*-oWױbEQe;H[x5Fk-Mw;z?kK]{޾+VaET՚: 2 27ڔEm)x[u޾]d^HYVxp6WWczuxuӫmJx#%/x UXx=eTjQ Ѧ7 oj{ʂw^[QSXF5z ˨^Oa*ݼmyw^[QSXF5jΞ26p*ݼ:_e;VX?.ýW5bz˨^a9ݦt8GR(Z+#Zb׳VF5jΞ26ez9%-okۗ["S^Zb׳VF5j)x[k:o_k)U,x=keTgjΞmJZR|ZUVFFz2^#mMikzwxw> o{ywlZkQ׳VF5zʨ^ZZݼ:o_. 2VoE9ѹ44WW1: Ѧ4MxKK[LqwlZkQ׳VF5zʨ^ZZݼVYbEj峾ӧY+cSzʨZ%*[k"*׳VF5zʨ^]ٳVMp%qwlZkQW+׳VƦ{=keTgvZՖrm* ޱz+2G+Zby8{ʨ^Zq8j7/Moi)x[kuʂwlZkQ9 126gjZݼV ޱzkUD%^|Y+cSzʨ^Z6ùVLokW񾏭+ʓsD^#m5֣iH[x5Mw;z҅F/x꽵Vx=keTgjQ Kx[kU UK{)*ѹkS5WWq844h{v&Ǫc=+qǵby\japc6pN:-n=ֹ5y?oDqmy6<i o)FH[t[ om[kzcz>ǵh=n gkk``,u5&Jzo:a}rl}9u'F7eOg`qj{:W5JKsa>^sa=[ۮXksk]3s[Ʀ՘kmŦU-uzd>Ǧ Ds`.s.=$Zb9k/V֞z=eT\{ؔ3&Y_i5v`(,knF:čH[5FڂtYԮх};v`_90x=fTjmn^[Z ց/xR9fJZ 1: :iiLNo)MoDR({ܾ;ցETQ 3s`F5l7/mXm4xGkXwe#^2131j9+Yr\FyEԞŧ'j$Q ؞mJ'u4/ri)tKQibE}hX,z˨^{qRKX oDވ/IbE멮X,z˨^]M{U{gwwMxK#5[x=%^n-٭ݦ7^Jx#(xG>kXQ<\{YFOzSz>4=gu>#=YȬ3H[uPiXGz;Ub3XnU_4`klOnۓ[F5`rk7~lזB[ JFr8)6Cii̲NNcuxMn^[Z ezcʭJ2ד[F5zr˨Vn%ܪHn}+3^ /xu5׳[Mizވޟk;z{XQz>+K2q8{>˨^g6%Ϫ-pn}*˨^gqm}n^:[U ޑ,VTϊ糌j|Q mJRY,g}_gOhbWWZƦ˨lg6cYm}* ޱi}VD]Y fYƦ|Q mJx[U[ g"_^gb92YF5z>k)楇gFs#bEX,z>˨^gݦYLoWYw~ZQy8k,cSjؔhSR>}2Y׊<;*:iN;=:iuxm}Fos&8g[r$IeR#ȠHV~{{dQ;n1 @jqZ0wT[XΦk,gSv>ټYM;Y_?kE^myr/^'՛WW1: aF4==n_w곾~W^mӘ^KhK9}XZΦ6%MxKK9KcIa]Ka9ՠk),k)]M(vSXn2SSX;*oRXΦS ؖz)rBSX* ީ)x-TFRXΦֳM oSX* ީ)xaz-l ^Ka9k)gNa5-oi471UX׊m)X>F[ ˩^Ka9k)gNa5-oU*Q9rq8j)xu5;l^z.-oUf_Ycf#m5]#m}I2]#mэ4iI}z_.h}!~=ka' zSX{:˸6Xj$+-uz$w`:ۮ|{2 Z!ZZZ1: : Wd}%ֹðAX/tlrc퉮Z1מ2]F5Xj$+-uz^ڋ 23zs?H0׺=el kO{E5ɺys Sz^͵skz`Y/=$Za:a}z^bs 1מ3q`)T%ֹðAX/ VET>yB̨!1؞36'vdG_kK Uc!RԞ21˞2S]M oF4% ޑz-VT݊zvؔQU-߈#F4-Q|gՖgX,z/x՘^g՘^g6m_-pn}*˽w^[Qy|Q,cSz>k)m}Vm)x[uʂw^[QYF5z>˨,s)m}Vm)xK9G>mX%=ge'+#m5iH[t#M}K*^Kp>_L己bEa%Ϻ?מitQ ֞2&Y_iu~ 9z[d$XQXkk\4X4ZZ1: Wd}%{/x1eǦ-+AqkMkktk] ֞M%t3ם:htmEgPDQ ֞2]F5&Y_iisaH{+YZqQ3ܳ^F5ڳ^QM%{9cEa)ZS`F5Xj̵M뫚d}%Jns#!6b(B,+ bF5`{B̨`{BlzGᄈSb,{kXD%^OոG{B̨,jnS RBc! J3bF5zB̨Q ݼ4my},XQ*F:H[ikzw>;z[[/x콼j,GTբ : 3 37ڔF4--owޗ8i/V6hyX|WWNczuxuӫ{_%%{Urm4xG}lXQj^OuOx=eTjཪeMx#(xWYz/oq8k5^ngjQ Ѧt8G4--p.Q|g";g.4fg8=eTl|VTS#t؝:_sz/1ʞЊF -=eT(G(G4ri)tKQ)bE{tbSXF5z ˨^Oa6%;]m*{"*%y ˨sj܈=eTczM ojK*Xa +jQ 2UXypnVm4蝮cŊr8GT5փip6^#mF»t-][ y*ykOg`,=eTUMaX GrXn̵綞koxiܖQ ֞2&Y_ioxzd~M+ kͭZ3]F5pt8=$ͭa3]k.gt̯- 3\["מ26'jDWTjisaH{k/VGoO{bi/=eTv7V{ՖB^,<^?[Q^F5ў2qQ{tv7R};^?[Q^F5z˨^O{jݼ^#1^(sD^#m݉H[ip6ݦἣwkzkt=ocXs]-tu5zW5Yޗ݋/;˻Q9 ۓ`Ʀ$QQ$nSh^R(<^cŊzRki v,VF'罌j̲罌jU-ƵF5hLtTW,xu5z27^Jф7 ow$>rgb-gjΞmJxŏ';:"(xۗ{g}ЊzB˨j)x=۔FR% ޑ+,VV,),x=eTvVaՖUX,;VXŠ^Oa՘^Oaոz ˨ƽUXyiz[U+VaETQ 2SXF5 k7/mVm4xG sXQ*Fk-F:H[6-]s.~+*^ͭXFx7jQ [y oVm4xGon}. 2zsv9KkbWWNczuxuӫ{%FQm4xۗ[ϢXY!g^Z^ZZݼVYϱbE3x]OZ^] 26U?˟ϗ??˿_(N/SFy>BLgkgiL֞26 VTju0sϱbE+k]Y&lgl] ؞mJԭϪ-n?L,Y|V,]21˞2YM ojKUcʇ.g՘^g՘^gո->k7/=t>6y>>p2Y<=eT糌jm}n^h|֯bEQ5Fz6ip6^#mF»t?w􎷶t5χbEXFx=eT糌jm}n^h|֯GF>k7/ܻϪq2cY糌j|Q 2Yy oj;Y>uz bzu^Ohť>SL'jLx*{#F4Mo}ޱU^Z{#*W 4sXƵ1x=۔FRJ#kklXQ׳VX{u5z21ZՖVկZETNV>LgM9=keTcz=k۔֪:_e;VZkQ׳VF5׳VF5׳VF5VypnUm4Z[+VٳVXκx=kel ^ZZݼVYbEQ5F:H[ip6ݦἣwpх}>֊gb^# 2׳VF5j7/mUm4xGkIbEū]%^] :iiLNn^オ=n_wlZkQy8{ʨ^ZY+x[k֪6#k5VYX,׳VF5׳VF5׳VMZR:_eޱjUDzʨzʨzʨFZՖV ޱr3|Pi<8{ʨj)tjeTWW: vN5c*QQQՀ),cSNjOa6QnVm)t[uʂwZQSXF5z ˨,{ ˨, k7/=g 6)bE}V,Y21x=el Va%ª@a1TX"}Fk+xiK_^ۗkVW'ΏC+*^Ga=JjuU ݼQX];PXˈ Vx볧Ә^^44WJф7Vh/;TX]QXV5: ˪^GaY(Kx51TXN(,(,(mw4m^ WC+*^8)`zeUczeUczy oU_La=Y?/QX{:8?kOg`,jX:a=[2bb6u'@ 6C NNcuuӀm?En>ټo.=n_Fy,^ZQד[F5zr˨^OnʭݼXm)xK;[/cŊ)6CL'M^On՘^On6mzLo+j#2[x=OjL'M^On՘VnmVm4xWYziVDzr˨^]䖱)ɭݦ4ܪ-pn* ޱzi^z/2Ҙ^] 26ez=eTczM o+jKʭXnr+rz=eT'jQ Ks+j9Gre,XQ+Y!iLgjΞ2q8{vk)Mo|6d={xGd}+ ވ5^#mMikzH[ӻtǻwpх}>_ bzr69,x=eTU-Fh WXQj~o%^] :iiLNF4h[=n_wl^[kQy8{ʨ^ZY+x[kr8};VE,Q׳VF5jLgM^Z6{okjK[ZΞpQ Y+cSVyiz[kU ޑz[+VTpUq02WWcz=k۔VLok?L9굵V6C|1򬕱)ӫ׳VƦLokvV ޱzmUD%^Z՘^ZY+x[k֪6yd^֊pU,^Z՘^Z8=k۔ZՖ2ewd֊oDip6i H[x5Mw;z҅Fp~[+VTjz4zʨ^ZZݼVY%AF֊v99KxuӫӘ^+-Yݼ7r֪6[k"*gZY+x=keTokvZFwZNv9LgbӇ2WWcz=k۔-ZSwlފbYR2rzʳVƦΞ2WWcz[kVLZ+z*{zؔQ ֪my2ckZQ Y+cSWWokv֪6=n_[k"*zʨ^Z՘^ZZݼVYbE==kY+Y+Yݦt8֪ùV>V(x#H[VFښ^#m5i wwG[[ZŲ#*j3^^Z^ZZݼVY%AF֊uzY{c:4M^^4^iZ%{V=n_wl[kQ92׳VF5zʨZ%Z+z*Y+cSzʨpNZR:o_wl[kQ92WWp)gvh^ZF3#k>VYX,׳VF5jLgMZ%O1:o_wl[kQ9212WWcz=k۔7֪6YbE^|xrUq׳VF5zʨj7/mUm4xG}lXQz*ٳVF5gZ՘^Z6mUm)skWckŊ7p6Җ0i H[x5Mw;z҅F/xgk"*zʨ^ZY+x[k֪6#ksIbE^rֽ7HޔiiLNn^wkU ezgk"*׳VF5zʨ^ZZݼVYckŊ:rz=keTczu5zKxZezgk"*׳VF5׳VF5jΞmJV-oi4;V?֊uz=kzʨzʨ^]mn^ZF}ޱZQQQ Ѧ4-ezK;V?֊uz=kj)x=keTokv֪6#kslXQz*K2q8{ʨYݦ4-ez[ku|8+ ވH[H[k-Fښ^#m56}zkK]{޾[ZETQ 2׳VF5j7/mUm4xGcIbE^rp67ezuxuӫ{%kFZF}ޱhUDzʨ^ZY+x[k֪6#k1VYX,׳VF5׳VF5WWokvZF}ޱhUDzʨzʨzʨhSzjUm)V:o_GQ,5JZY+cS׳VF5׳VM o4/Mokjޑ[+VY+,LgjLgjLokv⧘Z/;VE0Y+ӫ׳VƦmn^Zhwd>֊uz=k%^ZY+gvZRV9V(x#Fںip6^#mMikzwxw> o=o_gk"*zʨ^ZY+x[k֪6#k$ZNv9*HޔiiLNn^wkU ez공VY+x=keTgjmn^ZhZNgb^Z՘^Z՘^Z6{oVYϱbEūgbӧQQmn^[V:o_籵dg5xpQQUT{___wa`3#9VX)X,Oj]Q)),*ݼ4ʭªūϱbE)X,z ˨,{ ˨,jmn^*hXaV,x=eTjnSzjVm)gsWoĿ oDշ$#m݉u8i g#m56}zkK]{޾+_Š),x=eTjmn^*h֯eDF uzYߒb:4M^^4^iIa%{WX=n_w~ +rz=eTjQ Kx[U ޑ5VX)X,SXF5SXF5SXM*RElw~+*^OabWWcz=elz ˨ k7/Moj{r8֯ū{ʨ^])9ݦ4WLoi4xGZNgb^Z126ez[kVY_ckŊ׳VXQ 21mJ~*mUm4xGZU,x=keTgjnSZRZ2{֊oDսH[H[^#m5l-F:wxw> o=o_Wk"*zʨ^ZY+x[k֪6#k$ZNv9Zbu8i՛2: :iҒKx#nj{ܾLZ}*rz=keTgjQ Kx[kU ޑ[+VU,Y+Y+YݦtmUm)ZLZ}Ų^͉^+Y+Y+Zݼ4fzGklXTBWnzn_ギ'j^OZŦU_*f}7XXaԞŠQSXF5`jrv( 6#5VXx=%^Oa),x=۔nĭª-exHa}+I~8_La=b/|?ßAz3#WNu5X{≯6X_$+-uzd&^zaEk~lBQ ֞3&Y_igxi;Gek~/(&4 !ʌM2[UwWeLrh*cE빲X|zŨƹ2hϕ6E&/vܕv쥳cϠ+{v̨zv̨zv̨zv,cȎ+]Y%ʞ{n!ʞ3ڳcF5X{v,%֝+m\KgǞA1Z-qj{vؔS۳cF5NmώE5ٱaΎ۱R&O`-cƦQ ؞mJh^EBD{ 1V'0ψb1x=#fTgvkok6"zՠF;z)uXQFTMH[`Fk۲i붼tǻwkzkt=oױbEūzjz4My/cSj nizkK~4xGulXQz+Kx=elz˨ޫZ4εɭױbE 4fm^] 26UM=FGWafy_޷GrrRMk01:F5=el lt8=ӵ۔nѼ4ʭ骍fGM+I=7bOu 'j̲jU-Mx#NHn+*^nby#-cSzv˨ޫZф7 ow^>F-gwiq6{>˨&oĝ*F5g>+F,YƦ|nS>:_e;YEX,Ojg,x=۔>ќ#6Y(7∪5cH[xu#6^#m݈wxw~#-]xkt=omXo],cSjtVlnđvF\: 5VX[11뤎e-Ӏell(G(G4ri)tKQ>n_[yZ XnFx얱)xu5Fވ&-Q/x>Y,xu5z>mJx[U[ h|g>gy>+,cSgg՘gm}Vm4xG>mXQz>+K21x=el g%Ϫg}+*^Ohb{A˨^Oh8=۔kqpm)s-|r+VaET{=eTpQ)ݦUXm)x UXxዑM^Oa)ݦUXm*3bE9#i H[x5Fk{nオ o{yw˛B{oD%^-9,cSzd9ݦ7𖖂}%| ^d x2X=ZiL:iiLo)h[Z ezckZʇiqmYݦVm)x꽵Vx=keTgjYݦVm)x(gZby8{ʨᬫ׳VƦέKskj9G}lXQ=k%^ZY+ӫVy okj;VckŊ׳VXQ 2׳VMpnUm)skWY籵zhyϿ7xb['M9=ieTcxj5%_: vFxͅXa +9SXF5`jMeOa6QnVm)t[uʌXaUx5Fk-Fښe#m5,6F\[XalVD%^Oa뽆eTQ ѦUXmywYQ(`0]LNNczuxuӫmJx#%/x g"*z ˨^Oa),xM ojK*Xa c3x~6^m,cSz˨ݫzja`3ʣ~}+Ϡ`=elA,+MtX9[(=\{Fs7綌Ma&Y_ōuzd~M+ kOt= ֞2]F5X{+IWzoqc>^L_N{= 21מ2qQ3^Q-~icsk۳vA݀Z1ދ[F5ڳ^F5ڳ^QMU-u2Njɬ? smg3#m͵XikH[siuY/%X/ 퍾3(X{>̨kχ`0jX:a}zl>hϵ3H'njjQ W5JKsa*cE9õfgʞ[7gʌMa}Uz_vX؛}tgQQ ֞73fQ-f;ovz>Yxkϛ`1מ736fQMuJa\؛.:FKaF5`{̨lO6ݱfՖB*ޑ*2VT+ŧOx=WfTʌj\nS۾V[ Uzl>.M߃[cSQ1eOո-Gވ--o2ǫ,xB주ĝ>??eb)Ә^^4F_mwޑ]0ϼo6YϱcE9#UiхH{W\isaυ>F\is{קFuv~} n<ϟcƊR2jcg# nzS444]ix^ ɨySOm؆}^&ݟ#4U)_it0Gx) j2-u\/x.ǵN㸾q4>:ONcuf(y>ߣy}v++MiiiiiнOQzN},s^&Y4X4X4X4X4Xo%X:oz>Y_"*î1LAQAQAQAQA1$Þy߿V&u{,+ fT>4mJ7ւՖ`֔y[ւETbyx_ii| tc4>:/Zoͭ,SG|j7$g,ǵ7777ߚy4%q}E؂hoFl-k#m76]|~\z-]xkt=o؂:c:#MFNj| t,㼎S]cu^UOF{q7777:׻dkj+=Wk"*kz6&kp}mion^h/<`.$gDqi&kO{Oxlw3ݴSP:q=ZׯKd[jLNNczutmB­D%/OpY_"*磗yxu5444FlՖ5[c5[xaKWW3[O hSۚRf};6[ZQviiiiLNo)mUm)xK9c5[x7^^^^^hSzRkXQDGD^#mFk-Fk-F»tǻG҅F/x뫼R"*^ՓQ xuxuxuxM oVKS֖4 %AFO_E(S/bWWNNNNo)hR(xckZQ xux=ke\xM oqYLokj;V_ckŊz/F,ӫWWW1: !VGՖ2ER}ޱjUDjãgMY+x=k۔FZhZ"gP 'j 'j 'j Uq_jm\:,ۿJ(6= 3(X{˨k``,jX:a}z쳾P֒g\{wKF=eTjIWZb; Hn}+=$`-=eTUM}%:Hi;לt]+=Ɯk'4=X;i1'z ;ƺv15`-.jۻ|;kz9`mY/-TUMaX 'R*v(sm)kk' ֖sR`N5X_$+-W mDX~ez\k__ω`Zq4X4p+Ma:a}rO"mn{G>qҸa[v̩lˎ9Հmٱgn铦옸ʂwj^tvlG%^ˎ9՘e] s6eǞmJx;;ִLĎڱkEv;*Zz̩^K98-=Tz6/Moy{ ;]b2S!juwbˈ=NZF̩^ˈ9mJф%N돩V$^,t5ZsF4?D{jkEkyXky/gSZ˩x#+hфD;2]އߒXQFT{l-Fz2^#m=Zi n֖х} 5̊Wujz4zv˨^nod%Mx#zh|0{9?vy^WK#WW1: :i6%MxKKq2crisXXN簌jQ mJxy oi)xK#k2Vv9LNcz=kr׳VF5zj)z-okWYwl^ZkSY+gjκx=k۔֪:0ZFD%^ZY+x=keTZݼt8֪6yZΞޫ׳VƦQ Kx[kU ޑz[+VTgj{u5zKx[kU ޑz[+VTgjY+cSj7/mUm4xGulXQFT{lH[xH[VF»t;hU yh:Vx=kiQ 2Vy okj;VKaEū]b%^] :iiLN~cF]JF}ޱzmUDᬕgMY+x=k۔ZՖr8|ZZETQY+cSzj)mUm)x[kuʂwl^[kQ׳VF5zʨY+s)mUm)x[ku޾[ZETQ 2׳VF5j7/{[kUͽwd^֊ʳVX>Zyʨᬫ׳VƦmn^ZhZU,x=keTgj{u5j7/mUm4xGulXQz*K2׳VF5jmn^ZhZi닑FkH[xwhwѪFmlXQz*5Y+x=keTokvZFwdޖY+VT,k%^] :iiLNn^);,IvnEGPd{#iԳ]hU}jzx>L4@@ݰWkU {ꣵV1*7gZ׳VƢ.Sڜ[kUKZUckZx=kedglt^Z2%%ok?L;VQ׳VF6z^Z؜[k6RR|;VQ׳VF6z^ZZ]VМ#k1V̨VʳVF6^Z؜u6j/mU-4xGclQz*&K2׳VF6zj)ZBwd>֊gbY+#x=kedgvS okj;VbF5–2k-F:{[.%]Vut=/nckŌ׳V1Yu^ZY+#x[k֪#ku[ddQjULxu60WWѽ: ϰdvވZZh/;VZŨܜ=kedglY]9֪͹V[[kbT 2׳VF67ʔ֪:/_խV1*z^ZY+#x[k6ZB9[[kbT 2׳VF6j/mU-4xG6V̨VʳVF6[kgl 2Vx okj;VckŌzz*&˳WggEY+#x[k֪#k9V̨x=k%^Zx򬕑G+Z2ZՒr|es["Sx1ULx=kedgl.SZZR|Z}*FY+#^Z׳VL okjIZUf_ckŌ9Ǩk-a-Fk[xu2][Ku/xꫵV1*z^ZY+#x[k֪#k$Z1vv9ZduaՋҽ: :a}%kFZB|ޱjU 2׳VF6j/mU-4xWYWkbT 2׳VF6j/mU-4xGklQ7g|؜=kknz^ZZ]VYbFY,^Z8{u6zXKx[kU ޑ[+fTglG+Z2ZՒbZUwlZkʇ^Z׳VF6zj)mU-)x[kuʂwlZkgl29l.SZZRdckŌ9Ǩk5^#lua ]+=z={kI:Z}*F%^ZY+#x=kedokvZBwdY+f.gdheW/J00W.^WkU {껵V1*׳VF6z^ZZ]VYﱵbF^|^Z2׳VF6j/mU-4xG{lQz*&YggEY+#x[k֪#k=V̨x=k%^Z8{=kedZ]VYﱵbFY,z^ZY]bZZR^Zkuh5V߭QhY+#^Z׳VL okjIZUckZx=kedgl29GZՒV3ޟbFٜcT5–2^#lua{ww^Z҅|;V?Q׳VF6z^ZZ]VY%AF֊{Y1Y=ZaՋҽ: :a}%kFZB|ޱiU 2׳VF6j/mU-4xGglQ׳V1Yv^Z׳VF6j/mU-4xGglQz*&K29l(x[k֪#k3V̨x=k%^ZY+#ggvғsVYbFY,z^ZY]V|jl~ZkʳVF6^Z؜u6zj)mU-)x[kua ޱiUJ2׳VF6zZ]9Vޏzțxrx=:aux_etk)o38{Z}ujJrײVN6ZZv֪)4x'mIzΨݫ]Z ^aat3j^Kx#bB|ީxkY+'x-kdelիx ogBwb>ަ9vedٽrѽ:x-k, Zv֪)4x'mj3*^Zel൬Ygog^Kx;kk6VedײVN6Z^Zʔ;kՔ';VoSkQZjOx-kdel൬իL ogV*ˣZ}ujG+Z9xײVN66(SYXZZQײVN6Z^Z9YWYlǫx3w}[[t7af#lэ[|\ }Qs=z}>_La=VXZ0`klOaSXF6` kʵ-Ha=Pa1lg2ggՒɭ:_e9>Y1*Oe-egYF6z>k)m}V-)x[uʂw[糌lC糌l˭K]Ϫfs>^e;YϊQYF6z>^g]YbF9{cT5l-Fڜ[2=[(wܟ_e". 16\̨=Öpp.#Z.޵kI~u^]dd>YZ+F%^,cQWg糌E*m}V-)xg>bܜ=ed^g7UZRޑϺ}3*^gdYF6l|(xF%Ϫ%o˗wn\Y%Wgk3|~\a`AZxͅXnZ 䖑 :u=e\L[UK Rhm,Qwjxaaaa%0Jx[kUK {\>w},Qƨ^#l5^#l5^#l5]+=z} %]x{^{Rh9x=ed'l Q7FRRQ}bF^-vc^(ݫ^P o&1z-4x˗+{bTvDlΞ2^OaUXx o))*Xa݋YasVqY^ 2{u6 k/-%oWYֽz +&SXF6z ^ KxKI*Ucu/fŠl :x[𖒂UX,x ^bī9{XsXF6FңU&-/_gkbT 2׳VF6j/mU-4xGsIbF^rlW/J00WT.^WkU {공V1*׳VF6l(xu6j/mU-4xckZx=kedglt^Z27֪ ޱlUJZhY+cQ׳VF6zj)%qwl>[kV>(x=kedgv(^ZZh/x공V1*j3^ZWgcs(gokvZBwd>֊ٳV1Y>9l2glm.^ZZh[+fTgltgllΞeJskjI:_eޜ֊o[[xսFkeݣ%]xZ}*F%^ZY+#x=kedokvZBwdY+f.gY6g# zQWWѽ: ϰdvވZZh/;V_Qٽ2׳VF6l.Sڜx okj;V_ckŌڽн5N7 x=kedgltoVewd֊v9U!llΞ2{=k˔֪ewd֊v9U!l(x=k˔֪ewd֊V>U!l(xu66Z⥳VYbFY,=kedY+cQj/mU-4xGklQz*&K2׳VF6׳VLisnU-)skW_֊o##lY+#l=9a [xսLW{ڽ o]{^[ZŨY+#x=kedglm.^ZZh #kŌڽG6g# zQWWѽ: ϰdvވZZh/;V[6^Wg7k1]OZBדVF6>=߭l?Q*V+,fC=edgl l3,W#=Y(={SF=edƮXT~fKy#=[̨G'b_La=6]?Qua ؞2glnM.u%n)4xGglQvx&gkglmM.^ۚZhLt1՞h̘b# 2S]F6>%FUdBw$~rVCVq -#x=edo|]u}Kx˗Xle#3Y̨x=el(x=edo|]h{(xG gQz +&K2}ed9SXL ojIVa<9ObT>Zy Fz Fz FFVaՒ)bF^Oadٽ2ѽ2ѽeJxCV͹UX)bF),z ^Oa)]UXtoW6Ta=g${𨰜k؛]'7;aNcoaBaª~VSXOSX{TN-dlKa9SX]vꦤX]Fdǯ ī5xue(e~/-%o{Su{+ړA섁RXN6Z Nav )4x' 6UX9k rRXN6v USXM;QXzΨx-'YgE)WNa5Daަ 9֞,Z ^Ka98{-*S:{;ՔSX*;UXNaQ9[ l),'k),')WRSXbwnoŷhe)=Yvltlt^eJ)-fs(Ta=gRX{k),'x-d^eJx;ՔWXa1Q9a[aks6^#lmλLW{9ג.utuywl~m?Rφ'l :taPƢWCY* \vXOº=>#*,fVbsr a34w<= WbTZ: 2 2UXx oj;RX {n1Yv^OaSXF6 k/mV-4xG Xa1}Ǔl:aal: :Y7]۵"wm̯vJZz֯bFI,ٓZ]gS.o+jIyjֹ4K_Ԋ9M {_fumø tw.a}T3eg}]xcZ1*Sttttt^Jl׭E[#cؗe1cT>]kGpOsŢr~f۵^eJjZR\}QNU۵S۵[mo7]`ռutm׵.c~{սFܴr繌Ey]ܣחZRgP6ڜcTZ: : :aae)фet* ]{kbTVd;}fSgqm̖ Q&n˙#>v]̨b龠=$g6e\ 1[F9f[U ޑz_d--3*ޣpy,l3La^: ϰ?~.^ވ"v=6[Ep{f+&KيlgkgvRfӸ5[,xf5[1*OdWѽ0WѽzQ0UVx{[eU M/xf5[1*?6ba}I: zQ0czZRXBcz9Yy&E3)@Fø tw.(b]x?*FUa{[܌[܌m&Gs-VG|^{cŨī%xux=e\xu6zk)%m=)x,}cT}NVVF6lt{L o&-tqw>Z" 2 2X xj>XcŌz{+&~ҊɧF+0`0`0vj0QZՒB,/;XnʷC,zv^n٭]7RRQ|m쳘QZ1Y^Ohҽ2ѽlo=%{IJ#u+,fTŠ^OaSXF6 k/-my9֭UX1*=edl KxKI*}Q7F^#l=Za ^#l5k-L׳w^֒.utm ޱº +F%^Oa),#x=edov#Zh]FdŬ'x :ݫ^(SMxKI2 XaݷC70؛LgE,#tٔlWQ* \vX|}쳘Qb|x`{BF+{BF+loR+%nj #u+,fTŠl eJx[UK VacuoVʃXSXƢ eJx[UK Va+{6,`?28=ed Mϰt ;S|}쳘]YF6X{:kOg`&Y?}%RvXXn[r䖑 ؞2ۓ[F6`rk/?r>r+F^#lFkS[xu*a .TޣWk yܽcŌW{Ø0zr^Onʭ][ɭJFrV>at{uxuݫj*uo&1za-4x˗˭zQ9k^nWggEeJxc4-%es.ϱbF^gd9{>^g^g2%Ϫ%oWYw>f{=%^g,#x=˔>:_e;YϊQ9{>٫YƢ|.SZR>|g}^Ohdٽ:x=e, -#go)trXa1'Y1Y>2ѽ:x=e, ]$#k9V̨xȳV.{=kedglm.^ZZhZ1Qua[xսFk[xw%]s]xklQz*&gl Kx[kU ޑZddQj6,lat{uxak]7b֪KWkbTnΞ2WggEVx okj;V_ckŌ|KYFOD_2¸ 甍@:@q<O?Sj*۩=~q\ZyZ9SXƢP eJYª%[WYWbT&&)]UXm)x UX1*jMDz X),cQVa⥃UX#5VX̨ўŠ1SXƢ /5.gJZzXj1VLu6gI-Gx _yKx[U ޑK-f1da[wvu#lF:uj^:kס}ͧXj1VLVk͓ZF6yRVj]nEu=/_.G2Zƨz2Ö^hK^F[0Fһx o))x(xcJx=N*xk\xדZLawܟ<ibFݮbܮ"v ^YLm?Ϊ%oqֹf5[1*Oa_L>RcTF_3L%ۓZF6`RŻ׽ޭ:_PHs4W&#l7Ezo2¸/W|&ø/t㾈j^ߛv]P*]h;\?QϞ2Mgk[z4%npkyw,~k{=Փ^(xux=e\xL o+jIJXjR+Fe>'K: : : :]W7ʔ𶶪=*Z>^g9k,'x;*^[J g ީϺu>kJrYN6Z>gv>)4* ީϺu>kJrYN6Z>(Sze|VSRud=Y2Y>C峜lUYMI,q{>V Lړ%^g9k,'x-*SKs糚Bӽ#k쳘Q7Fl'g#lmx9a'ڜE^#lmλLÝ?ӯ_iF~56\̨=U?aԺG}ppחZKym W-4xWY.G22\xyM{Lxu6>d?0Eg(僫g4qw,~υir lgko)-Owf#k챘QWK Xf3īy,*-m=V-4xWYw~+Fo᧿v7Ko9a+>e[qm0=\qD5]PF ZuQ=֯cŨܜ=ed籌lp< nKVǪ{Gc1nZ9{+֐籌l< KxѪXK=֯WxV̨xFEvJWWW90bJx[UK "{\lckZx=kedgl KVZ3jz*&YggEY+#x[k֪ǫ,;Vk#ٓVF6fOZ؛=iA?sWlչ>^La=VXŠQS{ F+l(=˔VaՒBUXx? eQ[l-Fk[xS2]N]Kս ޱ(e~!F%^),),#x[ #Ha1v;KadeW/J00W.^/sj{\tXa} +Fez ^Oa),#x[𖒲9 |;VXŬ9{ +&Vd{?6l}ɪC˙"Z *R룸{R+&KԊl3) 2~}>KxKIJXj}R+FK;#l}iavFO8uwaQv.hׅG;ZнԊɲ{=dlp{Mg[{Ow9Vs5\cŌt}%psE6 MnzQ{k)5j|pgBwd>f=X̨ݫLy,#x=edvJ{4m=V-4xG>X̨xb]@l<(x=˔͹-<}챘Qz+&< 2XL ojIzUwEby,z^cqk/mΥm=*3ϱbFUVFFڜ[/FFk-LݣW o]ywl>[kglY+eJxZ:/_.1VZ9Ǩ6g#xu600W7ʔhRRQ|;VQ׳VF6z^Zez_2r&Ǫc}=3iy,F?{F?{k骗(uj{\c}+Fe?{F??!ES 3ʍd׵Tz.l?z4=ZAe9H͟{pavh^cFw䱾uz/~OigH~dq\M ɨUq4NPX*(Q]7ez<ᬫXƦpyݦzRZu)xz+K2q~zlPv֞zmߗ=eT'jIWZb; Hn}+wYׯ8õ ܖ)s-s&Y_#=6]c0؞=Nw l`{l vث8֚R&/Lt1W1: : : :Yi - El}+Mwk"*LiM^tWWgMmJx[U[ t/xǦ5]x&gM.뙮ݦ5]mMScUZfOtԺt=el ]OtE5uUKYANz+3+x~6$i>l-F:H[u)֑vg]:Xb}0ycƊZ 5ׯg/bs`F5X{̨kρE:.Xwa {\Ͽn,GTݢ4[&`{؞3;tEuvm)tKz+J2^F5z˨ޫZvȽ{t^ŧTQ۲jܖ=յ۔7^Jx׸j;[bEɭX,jL'M^On՘Vn%Ecq8r}֣8܊'jL'jL'vr:ʂw,܊zr˨j䖱)xu5[yizKKʭ,xrʭJ2WW'Mɭݦ4ܪ-o+Ο˭Gyٳ[Xκx=elʽWWgvh^R(V#3Y(VUk'g#m5i ipm;҅Fyz b^# 2sXF5^ݼ7r{k;zsgIћ[xY2KxuӫӘ^+-hфD{ܾLZŲgjQ 2Vy okj;V?ckŊ:rz=keTcz=keTcz=k۔-[\xGglXQz*K2WWcz=kelj7/Mokj;z%glXQz*K2׳VF5׳VMiz[kU[)˽wl~ZkQyQ{gjL^Z6%Ѽ4fzckZJ2׳VF5jnSZRVwl~ZkQW+gM9u5zؔ{o)mUm)x[ku>zZkE=:iuҞx'^'9NM7pnZDؾZX{wTfW!?hZl൬S Ѧ ϫ x籚|ⱾޖxkEgmwk/N̳NNcu?@>WȽy=n_y걾:r-Tv^c9 ѦDi)ui4x'm걮uz-ZkQ׳VF5ҳVF5ҳVF5ƲVyi,[kUͣZ}+ꓳgbFx=keTgj-~j?}ޱhUDj3Y+cSg] 26okvZF3OYGk"*JV:!i\:@qi\=NWA+n< ޱhUD%k{I: : : : : =Nx[u[+V{oDlH[܌H[܌H[vkGjK׽F|޾[Y+x=keTgj6%e-_Q[ Z/xok"*^ՓQ ӫӘ^hS4-Q};V[kQNNNNNo)-muTm4xckVx=keTQ x=k۔֪m?[Y+x=keTgjLo)-.mUm4;V֊ٳVX{u5z27S[\x[kU ,;V[kQ92WWY+cSg] Ѧ,֪6#kwlXQW~%4Ә^^PL oTmuTm4xۗ[kīmJxoj{>[+V鍨k/FFk-Fk-F»tǻオɹFZ}*gjQ 2Vy oi)x[ku޾]dg)]JGF5jLNNczuxMiz#𖖂DZ}*gjQ 2Vy okj;VckŊz.g=9U{ʨzZ՘^Z6mUm)Z,;V^Z՘^Z՘^Z՘ZmUm4;VckŊ:rz=keTczu5zKx[kU ޑ[+VTp8{*8]Lgj8=k۔ZՖr8ޑ[+V_xlH{1tj 'iSz*=+?P: ΄Ha}+(k({ +),),'KVng:[U[K-V}7JH[ictui0uaCH[wjt5h~K-VTxux4WWWWW7U[m׍GHj}ײVD&#mݛ4i7+Mݛ:׻6Am5cjJ2\F5{˨ݼ\n|޾k嬈JYF5z/g뽜eToZm5Wm)jXs}+j4WT;4mJ6jhwƚa/aKuɇ-UӸi4ÖN*Õ*hm؍Gޱ*-Osbe14y˨|4n/~Bj9[u+뫼[p탖 pƠzl gvҠFVi)xKz亾Ʈ\W,xu5zؔy\QsVrf6#=6[(x#H[x5jkzw>5֖х}>fgbl=lEz2Ҹ ~z,۷F GWuEu5X4X4X4X_ir:w9)ˍqݡ_k\jiiii\?V.un;G"1a(ߞ#4nm+`4`4`_i-?/vyzU V?P{7wD󷑶#M=i\'>Ui\:C@q]D7߻*(*-x6Q x=Oc<{6̨7φٰݦSy4 ;|l k)y<4Yq]4Yq]4vqVxc6,b {mߏl`0㳁&ܝ;, b\XR1X:[ZZZ1: Wd}%ֹðAX?Lf3dȞ<6k#m6k#m6k#m4&]:Xb}0ؓt=OfTɌjd?'^mՑWi'3qx̨uztƣ{֓ET+m$ޫ) :iiNotAwVxc+ZZ4Q ntttܢM6'؊\&폀ETQ 3bF5Fވ&{K#3a(?0x=fTgŒjཪIx#FĀD;q_oSuxwTuҞN<'^'y8;iO67MKx>oSux,zb/^' r]N5^j^m ɛ`oSuxrR\N5^2ވ&MxKOYw*.rQy8kskY-糁ײZN5FфùD{c}ukG%^-ky,gSrq<֫M nASRvJ|ʂwj:kX{uӫӘ^^F"6ѴLqwj:kXiiiii6%ERQM{ܾZZkY+x-kTejիyYX﷩V'g|xrC>9[ʩ^Z9YWZ5Z}Mյ{HrײVN5vռVM;V7?n͊7p6֓g#m{H[^#mm{w􎷶t=Z{>{+*^Zbhe׳VF5zʨZ%Z=tzLyM,'=~E:iiLNo)MoDRD{ܾLZiUD%^ZY+x=keTokvZFwd+]zpQQnSZՖ2:2ckVY+Y+Y+Zݼ4mywl*gjQ 2Vy okj9GZZp8{*8],Q 2Vy okj;V֊gbj)x=keTokvZFwd+*^ZbWWgMY+x[k֪6#k>V(x#Fk-Fzr6^#m=9i nyGxkKףU.ZU,Vk׳VF5zʨZ%Z/ 2YQjbīW1: :iһVy oߵq2ckɯ? ٬t=iel ]OZՠ{U{~_3w9sa=RXcŊˢ߯`weT${ؔI VTj:a}0e>Y]2YF5YF50}v5\>6\iO{+8]> Q 2J߻y okj;2\cŊ3\X>j )x=eToX [뵻R{wddžgb.Tx 26oXDh p W,x=eTUM )xZ%% pFwd>ƆoDÖEip6HSxjH[xwxkt-]s.pc)w8v6ո MOi\:@3<Nrj\!UP\(x0c{YӫtttttܢMO$W|o(&3ϥcQ^+6FR,Vwc# 2ܓ^F5GҠ(ZZ Hs}5+q%^M-|Uwc)yݦ7޾Jѻl}+*^^lVTx=e|6e1 %Ǫc}=+*Kȇ-֕&tWNcugNcuWAvUr{-R~)V>J_iNNNNNKs a cʍu|I: : : : : Wd{`a=6\ELX,x=eTo)m}Vm)x[u޾E0ϊp|Q,cSFgՖ4cŊz|V,xu5YƦ|Q bRޑ;Yx/"gӘ^^ƽW7S[x[QU p1I2-WWW7ڔF4=Z2% Xa$IƻGXκxuxuxuxuxM oDR(xckVӫgMY+xu5j7/mUm4xGslXQUxH[k-Fښ^#m5ݦom]x[+VTp6Y+x=keTokvZ #kYdQ9GbzuxuӫӘ^hSވ&-Q};VY+x=keTgjmn^[Z Z/x공Vxbz=kelzʨjmn^[Z Z?e;VEp8{*zʨ^])x[k𖖂V ޱ,gjQnS֪{GslXQY?ƽ׳VƦLgjLokv֪6#k9Vx=k%^Z՘^Z՘^Z6mUm)Z,Z}*ʳVF5WWgMYݦ7VLZ}+FT5֣i g#m5tǻwkzkt=oklXQz*HgjQ Kx[kU ѻV_K+*^r֣U,xu54WW1: WZ{Yy o6Wk"*gZY+x=keTokvZF) ޱjUD%^Z126ez=k۔ѼV=n_Wk"*j3ģgMY+xu5Vy okj{ܾ[ZET26gjnSZՖZ,x(%%#*j3^ZWWY+cSVyiz[kUZ>9{*'gZY+Yݦ4-ez[kuezꫵVY+V21x=k۔֪LZ}+FT5l-Fښ^#m5^#mλMw;z?kK]x[+VTp6Y+x=keTokvZFwdY+VT,k%^] :iiLNn^wkU ez껵VgjQ 2Vy okj;VckŊ:0=N x=keTzj){[kU[ʽ,Z.=$^]ٳVƦnS~*Mokj;VckŊ{*{gjQ mJx[kU[)˽wl[kQyQYWgMqmn^ZF3#k=VYX,׳VF5zʨ^Z6mUm)Z,;V߭^Z՘^ZxQ6%-okgbEވ*FڲVFk5^#mM6p-]xkt ޱzŲ~bQW!4zlQ Kx[kU ޑz, 2Vӫ]bսHޔiiLNn^wkU ezZ>owHcz=Nmzv&Ǫc=u/v_= ІuqmzuӸ.tׅN(bktMwc=tn|E%^+Miiiii-b oc=_A1qZ{l2XQyfwya(sR?La=ZmUnsZ-aD=eTcDu5X{N+6ju0s#.V6ss .cS\F5X{+IWzo .mÔǶB֪lk 1מ21מ2q뽪IWZb;\ 9/V~sm6n6k#m͵XGbiw֥Ëu .SXEO+"DlOՀaƦnEn+Sm)tK;a?cƊ9Hi̲'Œ^OۊݼacE{1u[ŧxuӫ8uxCeJګ6#3^xKMiiiiii ˵Dtm)s\=n_cjWWW7ڔ>=n_OyhY͈J2WW罌Myݦ7R(xGglXQgOuby.cSS]F5~ƸFgɭbE뽾%^n՘^n՘^n61&3 ]])q\{+K)yϟX2Ϟ2hӿ]?]K\Z e'R6Z׊<;U~=ƸӞ'GN*pҞc='9N*xuv4#wUp}M=ֵUi/Mo 7c9MW[^ͻMoRuK|ʂwoE<N󛰓^c9Kc9yWc5~bwoEX{^c9՘^c9՘^ct&j މzM=ֵΖڋ%^c9ky,x-jSyΝLc=:p۩cӸ tWNc죛*(Qyтwlf+rzbz=el 7l晭ݦfkKV<2[fuz=ճXM-cSzfk)mVm)x[uezfOk"*3[F5zf˨Ʃ-nkvf6=~ʂwlf+gj̖Q 27ڔ5[Lokc5[x=-cSgl8u5Fޗ}1j=Vm4;Xה"t=el ]-?Ɗ|:ZkJ>ɯ_?AX?LJQ>Z_~8u5`4Njl(G(ןVF}>Z(Ux5Fk-Fk-F»tǻu#х};VXŠīx=el ^] 26o)h[Z Va/x{)PFT/F5WWNNczuxM oDR({ܾ+VaETQ x=el ^Oa6%Ѽ:ʂwދYaz=z/g),x=۔ :ʂw[Q9212q8{ ˨*ݼ4ªp)bE}rgj)x=eTov"Va/;VXŠ^Oaq8{ ؔSXMpnVm)xKޑz+,V^Ŋrz=eT簌jnS۾U[ U,;Vﭵ^Z՘^Z8=keTpnn^:[kUZLoD^#mi #m5i H[xwӻwkzkt=oclXQjb:4z/^Y+x[k֪6OY. 2VE{t.)1: :i6h[Z(xckZJ2׳VF5jnSZRSGk"*jý׳VƦLgjnSZR) ޱhUD%^Z՘^Z՘^Z8[kZFs8Z" _0^OZ^] 26Uy_݈jW7J>~2cʯxk`՘d``qP{+6ju0s#1Y(s1`7e=el kOgE5X-~U+YcŊr.="Z,>qjii NNa6{Gzt߱bEQLf-Fn-Fn-Ft]ՖF>wXQ^pX|J[7iϻi\g;U*i\:@qJWArVƣ]d tWDjW444]io,yMMW[I׻6ynعXmXD%pO v" pO Eu=c7/--o+c`XW*vn;y]ғW0sQ>~glXQF96c`i fH[5M_?Vx~@y+6i6Ҹ.OnׅuӸ.;^;UG;v^?E,Q9Z1: n:yisK&Vzy ~\YD@2<z(~^^83mټ[j)Rnףt^x=eT缌jQ [+7-h;/V䧱6FX]z˨j)xoj-xojFMG[s"Վ=vwi.x=eTop>ժZmIG[j"V,I-ӫדZƦ %2I_-~mKG)"*212דZF5F-oj4ےZbE^ZXNM-}S˨ƛM٦oirK[~SkizR둾@#zxzV+^j՘^] ՚mZF9)v<뱎Ψ8盳<:iON<6] ޢOEWlLkszbq8;iൾTM-xoj[V* 7oCtuxNczuxuӫӘ^#??۹՗n&|Ng;f5[NJ|[fk.g] ٚ/|8ƠMGgAVhvkaq84y\4c\1:@q$]P Kul=*5̖S nr2[N5K~Uh2$+%.(ﺮ[R0̨7Ӈv.$d>,&Ϟ3||Qsavr v>aeCγÌj̳Ìj̳f;yN _:cEQ5Fx>Gg#mFژg#mFژg#my+w~ha҇EToi}HÌjp|Q nfӛ[ v>v}Of|{,ޥWW1: :i6]9M-ow}۶_~ETՆ : : 27ڴ-]Wn)xSr]bE~njiiLNNo(oR[BWW1: :yi6]lނ7)nOxf4[UOc#m<#M=4wո twN.iIursF޶zjU?:i 'M-<՞FِE0׶3-\X#rsޫ.Ii:Ii:I>Ҟ4p5-Ls=Jb,]x+bzuxuӫӘ^h2)7E o[w}+kH4WWNNNof-=Vn4x'muj 4ޜc.`z=eT绌j|l2rKh Gp"ZMיX՘^^44H{5-_ izR&Dj"*\|aT^^^hӂ7Ey2) oc}+籌jy,cSj==ezSʍoZ}+YX,gZY+xu5j6o9Kk ޖh[+VdgjQ mZ䲘ZFe>֊ oDl7g#mFiw_7v Ʀczgxst-xۯ϶bEƫ`iUTx=ke\xKk5w=sK[Z -kdQ9[rj xu5Hxu5W7ڴLo2MQw}۶VY+x=k$^ZZ-[ZhgZ"ΞpQ=IzS׳VM*-9MoZ}&YX,zʨޣY+cSVy*7mY϶bE^rxU챻 8=k$^ZZ-xKk ޖl[+Vd׳VY&jΞmZZr8'ޖl[+VdpQ&zߵ26ezKk5Loir۲VmkŊ׳VXQ G5WozjiZ2ee֊ oD##mX+#m<{7^km7tсwնVx=kiUTx=ke\xKk5w=sK[Z -kd`Q9[rZ+xu5Hxu5W7ڴLo2MQw}۶V_Y+x=k$^ZZ-[ZhWZ"ΞpQQl2-ezKk4CX8{tV:i=jiLoiΩMQw}۶V_I׳VXN^ZŦgj6o9Kk ޖj[+VٳVXYTƿן[&?j}޶JU,x=keTpQY_xKk5-Un4۲V_mkŊ)aTc-[zhTG54>Ҹ tC8uCӸ J6{Hxf4[-t544yfkI}6{l8ynbE~:<8uuuuuZJټePK iۮt]x=eT^us]M˧hނ7-*޶If)gj̖Q̖Q-lނ4[Lol=fpkHx1Fk5٦pczstoNmX~EiiiiiiMrja6:M" ޡEZf8#>*iC\FdqW]Ӹ twN.n.C y~{Um65k#m6XGbiW֩Ãu Yi׺ocWςic4`{̨lςՀmqo* 5΋Qe8ji̲NNcuxCE-xtn)Ûxۧm;["*ja^ys^F5zki[Rk opJQ3\F53\F53\F57ڴMދ- Wn42\bEz:4^]44WAHYG5Z5ŤQn۴+ΠxlQ ֞2ڳ]F5X$#mavk-uk.V.xLl]L)홮٦.MWn)tKӵ4muK_6#Niii̲NNcM Ra喂75nM-} 1: KS.cSF"mɭ{[n"Uk Fژ^#m5^#mL66]on~uzmŊYxwWW糌M,xK5-Õ ޖϺ='iq8GTNAiiLNNczuxMFtZ(xۧm{"*z>˨^] 26f-oW}ֽYx=eT糌jL糌jLof-}Vn4YbE~zB+gOh՘^Oh՘^Oh6-{,^~[Fo>[ VXxbī126ez=eTczjּF3-kuo[+Vd^ZWWcz=k5۴-Un)[ZLzսV^ZY+x=keTczKk5<{SK[Z oZKkQ׳VF5j<{=kelj-lނ7_mX*Fx2^#m5i66]-xst<{'mk^~ +6C)xu5z[*7-k>$HZ"Ov99W+#՛WW1: G=kY+gjLgf-Un)[ZUm[XO"*W!^y*,Q Y٦ezD-xKk ~+ވ5ƳHxq8i6iczgxg7t9:OxꣴVx=keT^ZWWoifʍoZ} ҲVӫ]8cz27NczuxuxZ-x#jr>MoZ}*rz=keTgjQ Ѧp.Un)si'mkQZJ2׳VF5zʨZ-[Zhe>֊pU,gjΞ2q8{jiZ2_e޶(UDzʨj)xu5Vy*7mYbE^Zb92׳VF5zjiZ2_e޶(UDzʨzʨƳ׳VF5Vy*7mYbE^Zb9x=kel ^Z&jZ2ee>֊ oDiZi6g#m5l MW3zҁ7GٶVxZ#5Y+xZ[Zټoir۲VC+2^rӘ^^44WH[lނ7r*7gi"*gZY+x=keToifΥogi"*zʨ^ZY+xKk5-Un4۲VmkŊ|8{*ggjΞ2q8{jiy*Un)[ZUm[ZETNgjLgjL^Z6-xy*7mY϶bE^Zb9212׳VM Z2_e޶,UDzʨzʨzʨƳVy*7mY϶bE^Zb921x=kel O>l<+X ZXGTͳ6> ic<Ҟ.>~QmF> rj=6t1޶*}QQ NJj籌koi-=Vn4x[khbEC<_tBNJŻT"c]wNcuCr]p-}tz3Q_mŊ.N&44444Zm{W^cb92qz˨zkIlf+7_w6[ߥيgl՘glE5-ژhMѡ>rKq2[mŊ.eKuɗ-]{Ʃ{]T^rcޟbEQ5Fll nFf nFf nMחr-ӛcz'mSJ23[F5zf˨l-xSK[ "-xيīӫӘ^^4F7)nOxXx=eT籌jy٦o[*mybE~/3oS]jel ^XF5>l2ʍoX?mŊXX$#mavku{c2\[:wW:i֛YΦt֬&Ys9M^^LܺUrkF Hr6!n-gS[gGt%F#no]uo`ܚ %jSY٦S%2W+noܚQ9rqT[r˩Zr˩Vrl2*n2ʭ[%fTS rג[N5Vrlނ[Eے[bE:#ik F8H66]-sg?Xzr+g^On-xK5-Vn4x[r)_x3>;j^44W7ڴLoDLow}޶ܺo WaҮgx0׶úevi=9vݿ`iQ ֞3&Yi y% &-UVeH?s`2ggʌj)jQma=^^L:=}#iȔ*-jq{̨lOՀ}k3jRN_Lx۪=}O Z41˞+=v7 綮^ϕWW܎6-x#M-o2-;޶cH?^)WWWXii=ҖY-x#3hnOb;bF5j)t=!䃸br%לX{%Π` 1u5X{Bֺ ty骄Xj;sbm!Ɗ sx` 1cSNmO` ^s] ŬsbXY\i m Fژk#m6\iu3<ҮSsĺ->*!vkO` 1=!fT'Ģz0+!ĺ->V]3>XAZK'ZbƵbF5X{B,-+!\G[";F36 XTgx%RJ9u[}hb%\+X{>̨kχ`&YՖ^; dkNvcF=9vu5ړcƦ=9JGaXA*h2V3\#3e/!i̵gʌjLYTj 5RafmoƊZ$X{BQ`yTY0s]yZ:fgP{̨y3u5X{,6j\W,ny7cEqGDՏ;4>ty̨!gƦ|:-?ͻ#I S~϶*cEQHx1Fk Fژe#mmrFxsKӻ>m۱C<"*zz̨^O1xM ވ.xSK^ebYj4޺b.`z=#fTczu5zFѦoDMQgہ"Ξz'fwD喂7rL޶,Qy8kizؔQ mZFM-o2޶L_O+DT)xu5S]ƦѦoDMQg[n"Ξ݊p8ux=e\٭٦o|krYmŊZX -cSZF5|[F7Et8M7gmvxsV챻 9,x=eToiވ.xSK9S-kٶV}+QٳVF5g] [&?ZrޯbEQjeW+#mL6iczHxg;WooWi"*zʨ^ZY+xKk5-Un4x[kHobE^|Ƴ7HޔiiLNZ-x#j iz+ɔ7rzp)xu5zѦp.Un)si'mkUZJ21x=kelzji[ZRj oZ}*gjY+cSjLoifùV-kնV^ZbQ 2׳VM*M. -kնVx=k%^Z)[ZټezKk ޖj[+VdY+cSzʨZ-xKk ޖj[+VdgjLgjΞmZ0Q ZFwjݶVHx#^Hk Fژ^#m56]onx>m[ZETQ 2׳VF5j6o[Zh -kŊ< klWo44WH[lނ7r*7wi"*׳VF5j)xu5j6oZ\ZU&mk]ZJ2׳VF5WWgfgoirK[ZL۶VߥY+x=keT^Z6-xy*7ùe֊YX,2q8{ʨ^Z6-xKk[jiz;)fF26gjxj6oZF3-kݶVYX,׳VF5jΞ26oifʍoZ}+2^Zb׳VF5zʨzji9Kk[\~jӶVHx#g#mFx2^#mL6iczgxg:ooOi"*zʨ^ZY+xKk5-Un4x[gHbE^rp67ezuxuӫ{-j6oWk izgZ{Hlb26]OZŦobH^$m3΅:Lg-aHc]`&Ykaaĺ~P֒֞:=eTc=eT>IGz0 [r-Xў܊--ɭ٦[-*(O)"*_=eTד[Ʀlӂ7r+7mɭbE^Onb92ד[F5jեܚ[r+7-Ӗ[x=%^On-x=5۴Lo)rK9Kp~+ވHq8i6^H;t;-xstL~-܊-x=eT'j-lނ[mɭG[n"O'b:4zr˨^On[ʭټo)rے[bEƫ%^n8u5zvG]-x#.sYb]ikAYgAYF5X{>˨${>˨${>+-+\|֣XYo7`7e=el\{:+ɹ>-=ۋIsݖ[iW^=u['v/A~=8uNiNi4So~?qԿIۦ둴^D).cS(z˨Et6-yXirzM+۶gb|LQ 23]M t2_2:VxgTL^'y;iON vҞx|^ho}N>횮[efTLS r2]N5Vlނ2]E1]:VL\,g' r2]N5Vlނ2]E1]:Vd隋%^t98-Tp[y totߺXZ_ݚ%^Ku9k.x-uiyǿh)Ƚqە[C\gejΖrq8[v˩F]7)v|볎yz-5k -gSjL%6-xFc([Wa+2׆Ú%^] :YWW1GLgow}:VYejkY+gSZl2*Z ގuձ"Oeb9rײVN5ZlӂVEK[Y+q>ߐz|Ί7jza1FkHxq86]p-xstL~mW+ϏXM^ZY+xKk5-Un4x[NoR,ϟݩ3~>j^44W7ڴLoDLow}޶%^Zb92׳VF5zji[*7-kuk[+VٳVXQ 2׳VM Z2_e޶*pQٳVF5gZ8Kk5Loirޖ+z*QY+cS~me/-Mfxcby,=eTmqtѭх};v`Gox4iۧOo)=ʭRF};v`/%-^'D5: &I0Q Ѧ7izKK[ibE={~^ŝ i7ez2{6%\jK?Q_eޱz/f)숶k"g.tjuk)=U[ ޣ_e;6]G3]LL|4]yp>hz.Vù@Nu xjLS]bSשݦ4phXnuv+^gD5:%٭ݦ8h[bEV,n:%섖ؔ9޻Jx#&% ޑz+,VTasXx՘޾x_iwMxK#k1V(x#=Z,ֽW-"mMH[xE»}-]O5޷OckŊw9*w+묕^gD5n^[x}$ͭ"Sވ{u.Lo>ۧ1}xMiz#𖖂DZ}^gbq;}5:k%6o_ Z6%GkU[ ޣc ޱ_7Cyag&,QIvKT~UkYaX G>cX 6stkD5X՘kbӖZb vXXnvno ~SpĦvn+_Ńuzd>Ʀ˔3]}sKT3]jGӵ6#16]x-^gD5:%יݦ*=hLth]Ymju[i H[ӻĻO뙫FslXQ:iuKT3]xk7/=h\ddXQg}-޾x4Ooi O7 oD?CF}ޱsXQ:笾xQnSZ^֪-ez#S,)Xu KTN^vh^ޣªfzG sXQ)Xu KTSXxmJx =u<_cŊ7ݣH["m"mipi H[ݦ'}Nom[kzcU|:#5x4:% Naj=*ݼj;RX_ˈ+bg=9pi7ez4iLoWZzv7/sm4xۗ+Šh;Naj),)xj=*ݼWYW70}sXq)xnSFR({ݾ[h;ZjLVV{Vy ZFwd֊U,n}5:k%6Vxj7/=ZhZ" 88[XgVQ}!Ҟ/sTº_s9 k;ߤ 6{kgĦvKT3XQeX:,VcXgjv>KTYMjK{Ỵ=Y(x#=t5"mݕE+]Y-"mݕwxwyW-]xktM}w쳾>+-^D5:%,Q G}Vm4xG>{鑑bEoı;ExM> }ۧ7Uވ&}h^/;YGvz|޾xmJxy gF};YGYxjLYbS:۔}Vm)ޣϺ_e;YGYx՘^D5K{YLg}}+X{՘޾xvޣϪg}}+*^V,n:% -Q ݦt8ª-p>ur8wyehpvKTp9,)xmJxyizKK[LZ}+:kuJTVxmJx֪GkuJKoa%Vn_wl~*:k%Y+Q Zj6hjK9K;V?ckŊ:az=n:k%:k۔Um)x);V?Gkvz묕^gD5hv|VLZ+:k{V^gD5ޣKx֪6#k3Vx-^gD5:k%Yݦt8Um)ZݯcksVmggD5ggD5xmJx֪Gkuǀk49\ҨT0[0(ߑ0-+xxNcӌ uk4~?ӿ?/Ͽ<_~폶NJ?˯Un+r~Gm&wgc&O?^yu Gu]M̯7SY1{}/d@ּd@ּd@ּ.dWek)67#^?{V׽l?B}n%-el /cKx[]e_9K[ȖxpG~9OCWo=.neeeeXc??_Q)ɠb`9{DjoZ{ { { { { { {kLU앑bTw{y޶BUkaaaaaaoi2R*n//ީVj2222221MVuWFR۫ѡm۫^/^/^/^/^/^/doU'{e+U^^콽Vj2222221MVuWFR m۫^/^/^/^/^/^/doU'{e+U^^=[m۫^/^/^/^/^/^/doU'{e+U^~gjMd7{Dv7Md7{.ޫ{#ٻ5{OS$W1AX6^/^/^/^/^/doU'{e+U^^m7OSnzUkG>eeeee[cd{ˋiEFQF*醽JaZ݇7ٻVAc z}:V}>{#j5v鍨UҍF*Fz#juӔZKI)z}ZQQ鍨UҍF*Fz#jt#+juޔZ PקSjWhz#j5F*Fz#jt#iJZ-FJzWܥZ>ըF*Fz#jt#JoJZ-MzO)+4mz#jt#JވZ4wE#%+jeR{J^VjTmz#jt#JވZ%HZ݇7wE&GF'?B[Ugo ko΁ZzY7f5zWGҫfszo_ 9wIӾ2k ތZݰ7VA7ͨUu{]R|gb]ށM/J?r{}*ݾW7dٍMd'#^&22el/#]v{1r^;cDXUQV 3t apqztDa=#,V8CXؽF2% .JH354K#%KKI1jA~ZU aݰ7CXA7қ!]"1)K&GaBӛ!Zlӛ!VЍfkiJaHIaR{6 aHonw.!c MojMon7CXA7қ!1)K#%KKI1z^"f+Fz3t# %ÛһDX:h{^+$Uu65{YKo k@cwTH[z_~N1bbw82 a a1M.{_ߥې^:$WWUAXp*膽z22[c^)Jn//S%7VA7ͨU {3jt%Û]R+4Qcj =3jU}*Fz3jt#cһV:RһVS_XPf*Fz3jt# %ÛһV:h{D^+46 ތZHoFƘ...%eIjӛQͨUЍf*Fzj oJZIz9VfԪf*Fz3jt#cһV:RһVS%MoFn7VA7қQ]R1)Kj&GZB[Ugo k*5{YKo k@cwTH[z_~N1bڛQZ@ ac]R+).{9VS?MIa^/^/^/#5G?ߩz?U8wWv:z!1c.9VU axƱ#g+7 1̷j:7K#ẕXuƱj=3t#Ͻ_XoKUU48VЍf+FP3t#K57uɱt<81b9X9XA7ܻٗ-Qa+K#%K%mɱjӛq8Vuf+膽K57wɱtФcs,VHz dp kޒ9{n-AfV۳WGҫf.s,VwZw钹w@....K5f| N]ކE8ֻ;n)ZA7|ޥ8''e8)U!1l/VU axFn/dl頱l-VqZޥl%cK#%KKI1z_^/^/./[nw.nR=&[Wxgd[{3t/֘Jw%Ac.cXU}}2.e^#^.X1)KuC=X<{qgf3töXA7l˾UnAۿ[L'BF{̃^ƋVVv{3t h1 gC&oj[ ?ZKUU4ΠVЍ`oƱj7XA78V {35tX:ٻX:hGcBǪތcݰ7XA78do^SwIw)=VKjUU(VA7 PͨUЍyU1%A#juLX!魪75jȚ75{YKo k1];W{u-Zm/?ZBͨU-vs ތZݰ7VA7]~k oW.bo GK`J{MG>˰Ha^/ӔުNHWw{yZ}-UU aoFboFnaoiwItػV{՗뿓Ԡd-Fz {zz֘&{R5(#^4^^=V_KjUUwRa^^^5%ґb {{גZUsFboFn؛Q1]R+4n//S%#ͨUpQͨU {3j54[Û]R+4Qcj `QZl aoFn؛Q1%ґr8/.%kIjӛQތZxf*ƳwI.Qcj IoUoڟM*7]ZY<]0bSoZmT<s,VXý ûeeeee^51.qE+6,rıOU;v˰˰˰˰˰9+3^Ǫ{̱޾e^/^/^/^/^/^[:cccU=X<*ZwZnYw w w w w wּ2sܞ쇢x} Pؚel/l/l/l/l/;iu-^cU o,LGsZýGsYý ý ý ý ý kӣYfRǪ{޾x'.zzzzz4'{e+U}ǘ[ 0W-v+᛿(e+(n#o~Ƿ;2|qr -%_a@  |04Uu t |/?t 7Md7{-ωfo"9콏bzw1[z՛b)z{r;G:醽zzz}xl)ʠw{yAw'-۫^/#^^]{~b֘JHWػKs=0רwDv{2.J "̕tc0}SW{ޞ[Dw-Xb{8neHowng;o~ߘ X>`bYFO-U{\p/p/.ǵACa$Jz]=gnD~{2kxh{^F콌]e삚Ж*@&Ob)z{ZQmz ߼ ߼ ߼ ߺwdekA[8Xѓ}᧬iźFA2 X׸7{\nbuE̠S"[j߮❌۵ {2vq\} ]}>&[UU@ȚoȚoV2w\1۵Y߷~̺u0tG?cd]Ui\ݬ;aoƺboƺnػd]cSȗ{̺p-HX<.VmvX:z}Ǭuɺj XW 3tu[\cxSPdKGdlBGU95{Ysg[sЭ;t}kWGڞZmrN1b1{b4.{2vA]7ven%3\'.x`bo%GdMK{Wզwe+oyyu{1'ey{b1z[Zb){{{A]B1)Kcd]Uf+膽ni֘TyHIlG#%٪}ieie/#^FȽ{9 dǪ{LzOH݋S"U:[Ewö lŶvc _\qq.rRoY>\o#<^FxexeDˈuYlz0^Eތx}̼b:C^[ y:C^A7ݬ]6y=O"^᮷c YQ*H-/ؾfg+(fgOTW8W%c{?`ë^Y;Y3<<5Y;YKeKeKGf~ Xf_.ρ {vU7*(<1M ^J{?{ ޗU km,Dwr/cx!iN@<*%=3t÷ w-]ͦ_>u8)'GBNkl~v5s'ޮ3&\3&tpߍ֘TyHW{DG9s'/O\Ͽb]Ǭv?\w#^]fƾAbM.!{w)y>f]KUU{\2{\{^F콌]e;{Dc.Xdު::5Y-5Ydcr~ttՖ}ǬSnޮj p/p/.su#`ւ:t}j{ґb {?чO!.۫.;c'v{/cx@VS1cZ'.xC=f]KUUko_l2kaaaaaoMs T L{b1\9#[A7|V 2UN8ʐqrɺ?Hq-ąW^0j٧FP}7Zc*U*#^4ޥHəB\Wqe e~zP.2v {5iH] gѼ_s?8_AӜv|;| XԈf૮^ǵ(e.j;ڿ]q^_t8_)H|U>3t#nWЍ.d|yc ͳ'Z9_u {\g+F3t㡝1^/f]P{3UwAzƺꢻg;zƺn<359=K'OwuB쭪{dͷ@Țo΁V24crO#!7'1bZ@n.cUuHwɺw)%몪c]%s c]A7b[{hiN`ɺtz9f]fn}+(e:d]c/2N.YǓ<%몪s_^sﶓ/Ǹ/SO`.~Ǭ呭oZ7Cj_bg/7/7/7/÷.y= 㜜!go1~^y2]fe /c_x^FkYUu *Zwڝ w̺eeeeee7g#0(^A^.^ˬ^^^^^]fgs1{y.?^i/x.z.z.z.v}NAyN/#e<=zX! d@ d@ d@b;t}kTGjwy.UUkVe؛Q7G{3 64[ûeHwIw)S%{6l.{62vAFn<`A7B.'5?} _'.Qc =3 Vݧ@o [F{1_ZiC%xc `UǵVǵa42 2k/#K57Ki{L^ތݰ7`>3 t;{dy頱y6brXǵY_Q٧qƼn}7ee^o]f]f79V_Ч'|vrW9䫪\o ^^]fk }7TXFJPۻ{YuU~xqe2v {`:yvodr\Wե7[ k[ kcLӏÓ9Ֆ}Ǭmɺj XW 3Uq\35t=ڎk).Y.cd]Uuu kdd삌u݈}ƺnӜv0vL]c]oǬz\g@o [ƺ=o|q^߮u8d]O|̺ޖXW 3UqA]1%A4>b]oǬ`qe]fk/cxoi^F콌 zx~!=f]olE2|2|2|2|2{\qc2dk}MLB_U0q*_E1* W]~_z owɺt{ĺގY+^qe2be/cx2%3v]%몪M;HPt7 ߼ ߼ ߺ̦qZ:dk=yl1b乪@֎@ d@ d@ւ:t1XGjwyu/YWU aoƺnaa|6]a).Y{YuUngaoiJTI{Jz?{̺w骺@^J^ ]pGbcSeǪ{Lޗd޾x'.zzzzz.ؘd]{ֻ۫p2^ ߼ ߼ ߼ ߼ jL?g,%As8o//%٪7#[A7V {3tdw=XGʩXˋ}ɱj8V {}7e؛q7Ix}-Gw1|Itl-V'lb4Vu= /2t#K5f<=dl/VUm3t÷l-#[9$[c2d%xd:Y{ d@AtkAc~6j{ґ6{ڎ]dcI><dS c;vn-]/.X1kuG?Jćᩪ6E^/7/#^o^o]1&{|!uG/%몪5w ý ý ý ý ý.!%As\o//%몪w/nao٧.!db頱w{boC'gǵ^Oc/ieie/cx!2v j;Ty's?Vcd]UXW 2t÷uU74S8<ːqrI?~L>~0<_ T%As\c lZXWq}+q}+q}kLsBKuC{̺>6 ތu83Uq1^.=y>1b乪@><fx kA-;n-Av\1]Ti{kٻ9ϟǬjo'.dd삌uZ c]c...رc ׃@j.7c]A7қekɱ#!u[|̺>XWЍf:c]A7%û>u+>b]Ǭ`qe 5q;.2be^F콌]Dbc.X"FJXקƺj=k2d,Uo1~}.WU axF=3t#w1%Ac.cd]Uu_l߮^.2beˈ ~sO`.~ǬS uzo^o^o^o^o]f;ڳ1%ѓ}sIj W 3UqѯAӯq-U>/Y{X1b]Wׁ]ׁ@bZY} k`L CvN]szY+N\\zk{d/o^o^o]1&v{!:d~LsUDs }7 }7 ji T {ۻ{YגuU}{nv2v ]e/c,ؘL'.xC=f]_B\HF|aZlk ߼ ߼ ߼ ߺw㜜\b-=y޷aq\{{w{l1w#5鸖*ǵJ{?{̺qe2v {5iH] gh_~߿x?yOqO"Cr]⟗뺾^*5W帶\ :Ocu94hu[r]Eyw\0%q ZK,Y1(Lq0F0]\ivka.z{͉uyNra})מ2Zgu0[X{eHؑчo`:a4c0`0`aʐ2W/]W.=ם{e': : : : : :Nk5ʝJJ;UnOx`*`F6z,OT:x=6˴|*X.)xK/M`U`M~&`]P \yg o[,VezFlpq(<6$ƥEd)׽k 0vׯXUl Caq_a0C6ڳ~Ϋ㡝+?j`o;He+VU?aeq)CvY&?qo׹ȐL_b%m%vhX}Jaa?OFFFM4j*)x*x愷mwcUkƸ>a:@:@qD5 rs<&m^|]ӽ:6G:@q0^q0$ J%+]cv]HOXUkk#lp37#lp3SzI]=]"yuz/WJ0\ܳ_qmj\{k^W{U.)xK׵ʄw{R0rqmqaj\a:a:lY._ڹ<޶z/]W=6-#t600ar\jv=˹,V.=z{ x~+V%pmמ2Mk~šxZjo[\h\P'q XZ109umø tmh{Ƹj.:Ng\?7{uݫv=ug:i~^w޶_U ܳ_F6{+ܳ_F6_Okoש-]׾4 ou+V>6G:@:@:Tb]P* K{ZMMMUb\Z+~Ng\o{Ѷ_H+Vp#l<#Lk#nd:t}ʫ*tͫ*޶(]Wqmqaj\a+bdmoqC ]V R W޶(]W=6qmdF00aj\2)wv Tzy{ x~}+V%p~/#=edQOv=w}%o*4x[ؑZ *6~\~\~[Yorr]Ôd;2øȧiEd:&a:&a: L4Na:@:@q$5~8kgl#lŪ^#lt6a6a[ƳLOg\A2~_wv]U \ : : G?:hY{U^UMߜQzLe]ǪFƵ]p\RF6^g.aQ.Hϫ ol}f+Vezf7l晭&ǵY7Lb~\WlV>qhTFko[\huu}ɸXx00aiWgoii9JJUn2u0%=ɸWKa?uOc- tw.a4.ajOQ/Mrk"8޶,]W\ n2s]M>M5˹,]W.=r]mŎiY"s]q續l\F-],ނt]m϶bGƻrs_Ylla#L>u6Rb-xK UؑƪFxa6Fkdxl,e+\WU&mUXU/[ԇ]p\RF1Í0}(wATs *wAsI[}i޶*Vq}lV?Xlr\va:auwA)f` %-P*W#^tttt܎09Lr\qqL?U*]WJf|aaaaa4j)fF-%V.4x'mUXx=ed續l\ zN,ނ4[mbGl왭,WggC-#xK5-V.4x[fmؑzf+6K21u6zf8ٚ[f+-6[HxcU g#lla{7G%#xYȫi䒎W:r}~;2ïJY}T0Q.̖m4]Y.(V&m4ADʧȶ4 7l7lln<˹ 2^uj.xKו+ޝ뺵];2ø( 1-uttmyJx:s!kʐ[~#__ilWdS?0q.oq-xKו 9뺕+V,&ǵ.auw.(جrJ#m[bU}x2†ʌ0w7#Lv恵ĸ.V.2:~^w>LIgQd\ƧXr\0UZgFFks*)x*xWSÛ xU9u(uw.a.aQ.Hϫ ouݦZy'Fؼ/qS]ơ`;=ތ~~~x "._q0ײ-ukk.vkOsf9u6z\ơ#L>O%IѵʥxK| xG6F6{:K:9\g-ؑEaaa=$^ :xz)F kzp)7/vdxuxuxux0Wg#l,ނ7b8^e޶''3^cUXa:”1¸ +e.am]q6lx Jv5׽\*w঳MMS/[L o\du*=|X޸N~hhc\000005ʴlU^RIV=>mk{bUl4WdOcOs[jYe+-uok.v-OsC"1]i.#Mi.#wAf\{ۚ^~+Vez_2J nlil~ks!Y~+~n{u#bi.#Oc 2QqirIy'ގ~隭cNJw~vxG?;a3L\Kl;2CÈsx0 .߮.a&w.ٸ *v2Ës< wGV~FZb6 lrۑMif)Wki~jcGne\sx;am.'u6zo^gy{ E<;~銯cG~9u: : : Qo.xSIV=>m CuogV>\;# 2AYF6z>+)aWǑ*̓YkN>Y`,#,#,#ȶ|V*;}YmŎu`]},PYF6YMma=IuۋY-ر>}m Fk#l6F_GbaW֩ƒuZXMT-&\%'k'l>IGz0EX[[{#vACj{|Kڳ^F6ڳ^F6ڳ^M>-3<-v`H=v=fdF_{ 8>IGz^Ʌ5bo\fD#|K0=fdÌl>IGz03|]uˎ;R_kekOG:}1Pf'"d}d~w7Ubn*cGb홲s)33eF6X{,IG.ºތIf΁͌lYd ו7_sz^[EfF6מ73"ו7Ke[ؑZ$fyמ73=od_W,U׾~o{3v}_aca}m FS#שƒuZ}ĺ+ov. ֞73fF6X{kϛEuRafmoƎמ7;Í0XCkϛמ7l+o*L_2 -o>KbGbx^{k : :aa&YaK_#?sz{1i{E1=ofd͌l ֞7lW*L_Wl1uۛg|g\=ofd͌lkϛš+o* ʛiuۛ֞7;y3#3fF6X{,IG+o oy7cGz^{+X{kϛ`y&Y֫"+omo^ysQpϛ٘731=ofdyyȶY*;}fmoƎמ7;`y3PXlPGʛik_;V⾯͌3}au]Y iqb7ٹ(X{kϛ`y3#=o֕7Keu˛};R_{ܻF=ofdF_{,}}d[XW7Keu˛} fHM+XlapkkF_aG<{TvXo/&7ٹ(f͌l ֞73fma]},֭};Wޮę ؞83gF6`{Lf3; G[#\Yl{{\YOߌ_K ވ]Gێ#==;vOeώ٠1#t=;ScSm>*;v.A1#ڳcF6gnjl jώE\ٱTvvˎ};R_{v+ڳcF6VXd}]ٱTack^mؑѱ6Fca6سLG\yu-> .Xx=#fdgČl Qo.xSIVr`mƎܽ'l$ G,ނ7b/E;-^x=%^{Ξ21=5˴tyKJF*pnîY{a?bīѽ2{=ed{L X]7imɭ϶bG^mɭ8cwד[F6zrRn-xo)ǧm˭\bUZi3ě'CΞ21=5˴to)rI[ʭU&myXu8{v+6-#x=edgfQ{SIV޶<ʊW ' 9=edc8{Bp2-xcuJ ޴ ޖl+,vgb^a^a^a2-xs.*xǯնVX 幸FxatѼFؠk0e(#jSG/z1u[a} +V{lm),P`{ Ra]k.)tK?>m+[ktJZWW: :^a2]',ނ7iW2+VlVb# Pz 8šeZF-*޶*V՚q(xu6SXơtofʅ{[ 뫭ؑ^cU 2TXx RaBbG}?+6),#),#SXLp-M\*UVX_ŠUٽ0=e ^Oa)Yoo[*\h {=el gOa2=edc8 ko[*\hW[a#Vlx=ed{=ed{=5˴tohorRXmŎ7Vp6p6Fa6xѽLWs7t<{?~}~;2^|b^# 2׳VF6jo[~*/^} ؑj^F00WWѽ: GūYo^ {껴V*V>aqmYYe8*\Z?&m[ZŪY+#xu6׳VơZ-[Z\he֊y8{_٫׳Vơtgl-,ނVmYﶵbGY,zFzFzjiΥ%e8ji8wibUgZ^ 2gf%o*4۲VmkŎܽͲ{=kedpq(ùVxp.U.4x[mؑz*6K2׳VF6׳VLK*-xu8֊ olFFFk5^#lt,\vo.WGOxV~*V%^m}8:x=ke Z-xKk ޖ ҲVݫ]ΰVY g#ՇWWѽ: Gbf{VmnUٽ2׳VF6z(2KkKp.mnU׳VF6z^,ӂ7toirޖ;pUlٳVF6^Zҽ[*-kuk[+vdgl,ҽ%e8ji8խV*gl gZ^ eZ*c޶%26C|0q(Y+#xu6sif\Z\hsZ֊y8{*6Y+#x=kedgf-U.)[ZU{o[+v$kl FFke❫%x oZKkglY+Pl-,ނVmY -kŎܽ kp6{uxuxZ-x#jr=>uoZKk{=kedgl [2Kk?>m[{ibU 2׳VF6FgoirI MսmؑgbΞ21=kedc8l-,ҽʅoZ֊gbY+#x=kedgf-U.)[ZUܶVZŪΞ21=kedc8{FF%oi'mku/UJ2Wg{=keJzjiir-kuo[+vY,gl eZ*-*tձc;WE:ak= {u {u,zޢ{ oZ^*k5W%^Z9kY+'xu6Z,ӂ7୬UQhveH:v.af10C^^^FaWkuokUSvVsUvel൬ rVg* U&]ku{\x-kdel൬ :M%[Y+q|۵VX?ΟV>ZY9lY+'ٲVggoo[YtoZ^ؑײVN6Z^ZeZV֪()[Y+q{RY*ײVN6el gZ9Ε:to*)x+k%OxRY*Z^Z9ѽ:˴toe7ܱV:vlYYgZ9ΖrײVg*J Z\{ّƪ^#lZa{k FγLWs:sI޼:w|۶V? 2^rֈͪ{0z^ZeZ*mYUvoR,yƟ[e'f:aatoiK7w{|޶z-UJ2׳VF6zZ-xKk ޖzm[+vᬕٳVqfgl [*Z^֊v9U!l gZ2=k5˴ Z2oZ;2^Z72׳VF6zji[Z\Rj۶VUY+#ٳVF6sif\Z\hw{ oZ*V%^ZY+#x=kedoiZҽk)|0UlٳVF6gl gZ2-xKkK ZrֶVHXUkg6xѽFke❫K:1'mkVZXxgkgl-,ނ7 [)c8ǪĻu._aat{uxLK7i[ibU 2׳VF6jo[Z\h[Z#?{=kwwݫ׳Vơ [*-kֶVx=k%^ 2p,2KkKp.sZ%³׳VYggl,ӂV-*޶z+Uggltgltgl Z-ùV 疵zk[+vᬕBlݫ׳Vơ [&?Ej|޶z+UʇW+Z2=kedc8{jiΥ%oiW}o[+vUxѽFk5^#lt,\vo.Wp{ibU 2׳VF6jo[Z\hn2eޓLoα*nil^^F0Fo*)ݛV=>m[ZŪY+#x=kedgl-,ނVmYbG~z*62ѽ:x=ke Z-xKk ޖzo[+vdglkedc8{jiΥ%e8ji8{ibUg|^Z׳VF6zji[Z\Rj oZ*V%^Zxzp\ZYe8*ܲVmkŎ<=kpY+Pjo[Z\hn2uoZ*VezFlq(ٳVLp.U.)ùV\~;Rƪkg6a6xѽLWsڽo^ݻ?>m[ZŪY+#x=kedgl-,ނVmY!AZ֊{?1kWJ00W[~,ނ7b*SGibUvgl 2VxVy-kѶVY,׳VF6׳VF6WgoifʅoZ};2^Zf׳VF6z^Z2-VaOjUZUܶVU9=kedc8lq(x=k5˴-xSI[ZU&mkQZXx=kedgl<{=kedc8jo[Z\hsZ};pUlٳVF6׳VF6WgoifʅoZ};2^r`Y8cwн2ѽ:x=k5˴ 0Q ΥcٶVHxcU g#lX+#l5Fa6a{gxso.WGOx곴V*z^ZY+#xKk5-U.4x[sHbG^rpkWJ00W[,ނ7b*SgibUvgl 2Vx ZBe>֊{=kezFzFzjiyZ*-kٶVx=k%^ZY+#x=k5˴-kKʫUiWsZ}*VpY+#YggfQ{Kk MnOx곴V*z^ZY+#Z-xKk ޖl[+vY,gl gZ^Z2-~j[Z\hgZ#Ulxu6׳Vơtglto8o.xKk UmؑƪFذVFk5^#lt62]+\jW oZ}*V%^ZY+#x=kedoifʅoZ} ҲVݫ]ΰVY g# PWWѽ: Gbf{Vm6繸]FY#z82A뿿_߿O|vU0z-;[ 뫭1…gν%`,#,#&YYaXnbGbs`,#=ed"d}d[X#.EXo/&vyğo f綌lpm٘G6[XEXLWt#DDy`.#=edM>J.}.ºڋgνb{ Y&Y u-v`H=v=fdF_{ 8>IGz^Ʌn 1vg.#laym F`m6S#:Ux<`mؑXk4}_a䘑 ֞3&Ya y%}*n2v$֞); :=Sf kϔ`}d u-o=KK#҉apk aap#L> uۋI3;$ǻ|:A`waaaaaa2=OE>%~>gv*=[-ؑ~{مϸ}G?fa:Bq_0 }q=g b?HeK'b禳fơp󄙑 nQgntoZ{[컭ؑsdY92Pz#Yo.mV۲bm+ƎbYi1#SbLK׾MmcG뙰,z&^τѽGڽoZo} owi#l3ac8a66a,ӵ{o.xՁwjuk.v]m.Pz]OwETa` -uk.v$֞:ߢ0X{kOw`ȶtW*;[]c]Y=0`{lwـ}d[ʳx؎S9-uk.vd[㩬Ø: :㩬6jy*72KhTn[*CxĪ|~{+F6laaa2-xP/tnϊUW;#Yơ,P>koΥʅog>y8{>+6g糌l,P>ko[\h|֭ؑ^=uў2AYF6f"Ib-"[r֖[ȭɭ,[ٓ[F6`{rlOn2-RnB[\bGAl6޳x1gxuRyut-Py6^cU 2^n7ʴo*)x*x[>Y جFzB^Oh{d[,ނ7b#-uo+,vdŠ^OaSXF6 ko[*\hֽؑz +6K21=ed)Ye8 +\*Ugo[aK),#),#),#[*Y{SI[* o[aKl^Oaҽ:xK5w-Mf8ֽؑbΞ2SXF6l-,ނTXm){[a#Vlx=ed簌l,썯Y-xӗ޴ ޖ;VCy.aדVF6z]OZE6e(#;BR=ϝ?VuY:v- z]ut_ؑ,5770t9r2]gO.()tot_ؑZknx-delLYoثoeBc/]uxglT :˴୾U%r}?-wv//Fxa6FؠkS>S8Zy1ut=~ĿI곲lm.P`lL,ӵuRB}Ixۦn*ج&^t.#\Yoirޖzm.v՚3vwxu6FgC^ [+-6]x/kc^Ou.#x=5˴ Z*O_Nf8W_Lù-^wU양양-#eZҽMtog};rzB+6 -PzB#SYo^ʔ ޖzm+,vdŠl gOaΚeZTXtoWs[a&pVlx=edl,ӂTXM{[ 뵭ؑSXY 2SXL Ra咂TX\ؑƪz2†0Ƴx5^#l<{gxٛK:ѽ޶z+UJZ׳VơedgfQo\h𶾟6$H緆ٱ sq/0jDz8=)ٮ:U^ ŤVn+P. ֞23XF6XltgPȶ^+ unbG~*{>+6.# PƶЇPofSv?qOQ\~FΥRs [ibU>=edgltglL>qYoirI?eg#Kc׭4zFS ZCԿ +-2e<%h4Z1k o&ZkhS[Z+o꼽[ZEˬ&}5ӄY+pmmJxKk-ZxJ+9^H[xA ^ mm[zt}1:ooxmk/s<g&]&W]&beHav)Ҋ#ذ-Xib 6f T$߫i=Mbb}fzo GGat&Lgjbt&j-{Zb;,9(#6[Zascj4fhjb&j-{Zb29(kYy\߃芵%"] M &@5}$j3޾6(?o?/@~n[Pk}.fz=6sͬ'of@5Ad+s}:wXsPs}c=v`o[]X3X۰f Tk@5 iuXX/XFֽLZ?I~mXt836|&j-{Zb;,9(k6c;%҅uoĚɱ_4Lj뾚XZ:wXsPYUVvf m=EZlikAHz,>z+o_R@ 2o "f ޫusծsmʛ/X{8;#ذf Tk@5f Tk͢Zb]y3k:cyG)ޮ& H`K4}`i:46]ܱwqTlޑ*{2fE(ӄ2pm\&Wф7׷8;cc;L3}iۧix44}ڻ=-?jsPc'؎WvlXjI5cX3;Z֕uelv콲c`úWKbTĚٱֲuX+;vfc=c{ֽkfbWTg8cQ- ٱ cz,v&Lk`3=۔j#!MxGBc,ĴF{i /H[xA ,YmӶt{>c7HKnnzA2  /`ޫ_F˔7ZxG}V8^ /^+˼WT;}y/PMx8,W^nSKxkQ=noxR.R2^ /ZG&jM{o)ᵨkQy 2{/X2 /XM o鱼[zU{,0 m}1ipi /H[O mikzwx=[ztMy{;X&]x{W$}2MxՄ7ڔZTxKޑ\dJVh{cqw847iۧiz4ὧܵw}jzѹ56ckYZޞڏolmSpS5} 4} 4} 4} i-!S;jx곴Vm҄ӄO>Mx4ӄ[iKuaxdZpf T7f@5qcj#MܬZgi">Z1ki,4}5ej)-TxKkuޱ,UD[Zjˬ&}5ej)-TxKkuޱ,UD[Zjˬ&}5ej)-TxKkuޱ4{/V2kˬ&Z6% oiW~Vވv ҖikzA 􂴅Gݦ+>ZyK^.qWi"e T^f@5e ThS[Z+oZwdJ+|ziWY+PMˬnӍy͛,:_c}+<.4}i>M4s)vq] *o{cE{|wHHx4ӄO>Mx4-n^[ *o7cUzx{ $cMy,PMxme.-\zUޱ*=VD[cj^@5M/X׌zwr7/MTxKu=W"e T^@5e T^3V[z,o뼽{cE;!Ew!Hӧ~ŧj:4} 4}>&)(uw^< c}+-SZ}iۧ o&}Rwy7{챴¾ G;AziH[@76]Eǎ^ͣ{cE<&cj<&Kx[zw챾M2DK M=X`SM/XyݦcXd/= c}+-p@53Xy,PM\zݼ4ϥFy JH@>Q>M>McߧSP)(uׅMc}+2[_MܘXMqL$:Kun>6[ߥيh -PM4ljl%F>^lE=}>}ƾOӧOiZߍwӧ:!5cPiz_>M4aӄO{w>!_evbXs}+I}_|J>M4O>MMɃ[*h=n4\"=X?g(?= K,vmJ?}W-*oJ]k Psmͅ /\ͅ o~jZЏWixV\hh.TMxj^Ц^~p&RMo!4Cu_HGK&Djj^"P5Mo)55ԪށԺJX!}}i>Mx4Mo&a^sX[ت{ަw(nRmH-TMxBՄ&Dj)-VR΅1wn xBՄ(,TMxB4ѦĖPXU5u1TXHii:4t8iۧiz4 MU6Cu@z߯jovtӄ8, /qX?mJxyZ٢;VZXۻ%,kizB4i^k~Jx kmF\I+ oDi /H[ ^-M+^o5 ZjTm5 MtjˤTtD^GC~|W~|º (oە^GĚ,PMjdfbӖ?ֹb}z.}VDc,PM,PM]ݼtl>-#K+ooytT3{t MxKZ, >[*:oog=>+|Ù,PM3Y>k7/ΥFkzG>y쳴žz=/14Lgj:ΊjsֽZz[\rPGry,X3X۰fn Tk@5fn+Ņut=MVk&k}5LtMuj3ԾWkY}%9(kη藱ҊS}%E]GulX3X۰f~jzb TөDWTkY߫%ի_viױ cͬcmÚY/PMĚYֲWKA9ױ ccmÚ90PMĺ394]Gm"~ mݯAb - mn#:-X/&?Vg\4f~jb&կXW~YzXieX3$ĺf> l={Zb}blvmlp&@5fr T\39ZX A* kfk3&̔MŚ2PMZKaao襰7 cͼcmú&̛MŚy3PM7ji+ofm7{{30̛=67t5f`Sf,%֕7țV؏;"4 Kg`3qጉݦ;voNm{oLxGmʴ2Wf4\Tx+mJx㭯77ļ;coc;Xez T^@5ezl)/&߿I[$_BL+ oDi /H[wbu'm+^o5 ؁ImIx{``SejW=ݼZ*{`4c~W-_$ۅD˼e TՄyݦ4ѼZ*Ltiν'ZZ3w^&LujTWKoq%{}F HnV8^fbq-PMs_Mx oŕ7 oD^ g}V8^&bq -PMxj˄TxF4hkQ) V,n2 /sX}5ὧeMx#ZTxG}l׽bqY+PMxՄYݦt8JxOѪV竴'籵z7Ţ/FZo_MVZMu8ՄYݦVRFkzG}l§YXe T2k /VM oi[ZU[+05@ښ^5 mi޻tŻ[ztMy{;VhY+PMxjˬTxmJxy oi{. _oioo?_/zO OGy>>&Sֽ7-ޣs>Mx44}ihSфZ鵨7ckaExŧOՄY+2k oivZywd>J+ˬU,n2kiz4}5-n^[Z+oZie*xՄY+PMxj[ZݼVhY ˬU,n2k /V2k۔[ZUڽwl>LˬU,n2k /V2k۔[*:_[ZEm@ъY+PMxjzb l9ڔ[*:ooxdYXN/V2kizmJxKk-Z2[+{oDikzAb^- mMn^ Gףy{;VhY+PMxՄ&Z6% 5ZxGsI {o,g&>Mx44ݼ4{y7Zxgi"Noot83k6޾2k6Z%F Z}Vp(H]&@5e T2in,n7g?=cfjpdQ流Ha}VIV,nOj@5f Tlvҍ8dURayw> K+/SX&LajnS[*,oTX竴Xa} +퍸?: /SX2۔ [*:_+RaEk"e l*LajWsVvl-Rag"26^@5e k)Mo[*Uf_cvh- m} i /H[ߒ@ 6]uz Gףy{;VX_Šh),PMxՄ),PMxM o[*w2߲~o4}i>Mx4Mo&Ѧ7izkQMq{;VX_Šh),PMxjTxj[*ݼTXh) bSe T^@5ek)Mob/^ywdJ+/Vˬ&ZjˬnS[Z+ogsY;V_ckYXe T^f@5ej)-TxKkuJWi"{t /V`Sej)-TxKkuJ;V_hY+PMxjˬTxmJxy[Z+owlJk/VՄY+2k۔[-*3ﱵ F ֓3H[xA ^hwG-]x=[ZEˬ&Zjˬ&Kx[ZwI6UD[G4}i>MxMiz#ZKעwlKk/V2k o_MxmJxy oi;Vck~e*>2kizՄYݦVRM,Yﱵ ˬU,n2k /V2k۔[*:_ckm2E^fbqY+PMxՄYݦVR-* Z}*Y+PM^f@5{jˬnS[Z+o1ck]ZxՄY+PMxjˬnS[Z+oZuYﱵ .gX]+PM3V2k۔[*:_e秩xw^v{r&i%i7$6$톗ݾ>t^--m7SkTYm"kE /V"kE oeKx+kU4ZxWixX')'m˶V4}i>MxMiz#ZK5wj*k-^dH5E֊T^dH56%*Z*hX秩{/V{S{/VY+RMӋգM oe oeZ'):ڋ[Zj‹&Z=ڔV֪hV֪J;VOpY+"kE /V6%*Z*jNӶ6OIbH^$Ȧ"iE{vQ/vam׍xz*(#E 6RX`#E v)rn Ta=?U/^hxE /zT޾NjmJx+UTx+c2۟~ {h- m݈A ^wwG_ G|Zߗ??/SX2 /SX k7/-7ZxG kfe}KRtZ M{42]ۧiz44}FF4ᵖjz-*mz TXm2 /SX2 ov^k 뼽+g3+^bSe T2izmJ[*,o |w_(La/SX2 /SXM o[*Uޱz.VDÙ),PMs_Mx /SXM o[*Uޱz^zhxE /sXte Tӽ7ڔV/^/#[xմsi"e T^f@5e TZG+k꼽[ZEˬ&Zjˬ&Ѧ4 oig/ck5"i- m{A ֽ-MW;z^o[ZEˬ&Zjˬ&KxKkޑzYdV.Vs,47iۧiz4ὧ]O|{ަwl^G$A.V`Se T{Q_밎v>^+p.z f T$3ij-{:wXsPc>'b  f> l*gj|nSz*}TtKuJ;Y/ϊh,PM6Y2۔>[*:c g>+-^@5e> T^@5ݖK[w^J/Y2 /Y>k7/-}7ZUޱz)}VD[gj|&gj[ݼZ-}yu쳴¾G ֣H[xAzi /H[^6];z-]x=gE|&gj|&KxKޑz,e>+w> /Y2 ovȽgo|gimҕ˄ù&LhM7ޡJsDވ&ޑz+,HwYm2 /Y2 ovgyw^>K+Azf>+8}X,PMxՄYy o鳼{k7/-}7ZxG>m쳴§X &gj|&KxKޑz,pg/Yg@5}5-}n^[,o|gied/Z2 /ZM{_ޮ?SxGoaV8'Xpf lù&a6%oD6-#k6VZx{#Z#7^f:KkgSZ'籵z䷀~{Q4LZMEI+PMt:ծ:,عz+,QF)أe@5f TRaQ.7ZxG m2q_MTxՄTXy o;RXc7ii /H[7bݦs֎^zKх}V89w ҄),PMxՄTXy o;RXc)X oӄOi{OKp7/$o+w-7'E={Ù),2 /SXMp%F HaV2e T^@5e k)-TRaҦwͷhzŠ-^@5pf l9ڔ [*hMHaV2[}5{ًW`Se TRaùTXh=^MXa/^E@5e T^@5-_Kx;Vck>ZvzjˬTxՄVy oi;VckYXe Tӽ&ZMVy oi;Vck7 #- mi-MGG+.cl2kiˬ&Zj[ZݼVhY%AFK+or-޾i>Mx4Mo&dvȽZ+o[ZE=Մ&ZMYݦt8[-#k1VZ##x>HӭI+PMtDIvcqWvپuX 1VXZ'5SX=),PMj:KNjU[*UI=VX[h{R@5Laj3 ovRay5#1VXZ=g1{>,&Laj[*ݼTXh) V,ng@5}5e l*KxKޑ+,pLa/SX2WRa%F Ha}Vވv^A:A 􂴅-MoI;z-]V]xGϱ V, /SX2 ovRayw>),pYVW>Mۧ oӄn^W6cY*3SX2 o_MxmJs:Kuޱވx{{/sX`SM/sX2۔/^yK||wl>M/V=ՄY+PMxmJxyp.7Zq{;Vh;Zj:t83k[ZݼVhYϱ b*W^fˬ&KxKkޑ[+pZ/Vgf@5}5-n^[Z+oZie*xՄY+PMxmJS oi;V_ck7ݽ'ggu8m+^ozr{>?Z}V8^fbq7 MxՄY+PMxKk-#k$Zi]βVW>Mۧ oӄn^Wk6ckUZ3V2k /VF\Z+oZ7ckUZxՄe lej)-TxKkuJ;V_hW>zb l*ZjˬnS[Z+oZu8Zi{{{/Vâe T̬ùVy[Z+oZie*VZj޾2k6Z%F Z}V8^fbqY+PMxt83k۔S oi;V_ckYXe T^f@5ej)-T^sY;Vck7ݣH[V m{A ^ݦ+Nt{>?9V8^fbq7 MxՄY+PMxKk-#k$Zi]zr-޾i>Mx4Mo&dvȽZ+o[ZE=ՄY+PMxՄVy Tsiޱ.UD[Zjˬ&}5M/VM[Z+o1ck]ZxՄÙY+2k۔[*:_[]xՄY+PMˬùVyp.7Zޑ[+G+fbqhŬe TՄVy oi;VckYXe T^f@5ej)Υp6%#k=VZx-^f@5e T^fvZyKVLޗxw"i{/I%i{/I%iѦ Gr8--m7Skdvۛ!ӄY+rm‹&z4/᭬UhX%A&§w97k73I~SMo&}O{Z=FZ6SkTYmY+RMx"ՄY+RMx+kh^[Y{J;V/O/V"kE /VFҽVEKuﭬUZZhY+RMx"ՄYGZ-Z5;V/O/V"kE /VVùVEu8OZWV{qhG+dH5M/V6 ?V֪hNZW8^d/V"kE /V6%*ZùVUMۧ oӄOi{OKj7/ܫF q{ޱz.UDÙY+PMxՄY+PMxKk-#k93kъY+PMVZ6-Tk.KxGyl2k[Zjˬ&Z6% oiWiZ=*+}1b l*ZjˬnS[Z+o|ZiMoD; mi ^ mi޻tŻ{t:ޱz)UD[>Mx&Zj[ZݼVhY%AFZiOorX{Ajz44}ӒKx#j{ަwl^JkvzՄY+PMxՄVy oi;V/ck>ZvzjˬTxՄVy oi{Jޱz)UDe T^f@5e TZ%R=Z꼽[Mߥ\?ɪGˤ6e T{Izs!?ӥam(XaiLaf TsSXmJߒJ-RaFy^̬hŠ-^@5e T^vRayKTX4cR*7b@5}5e l*La6% oWV/H[wb;1H[xAں6]9[zt{ޱz-VD[Laj&Laj[*ݼTXh)eDF K+|z{V, MxM5}i>MxiIa%{UXh=no;VXŠh;Laj&Laj[*ݼTXh)ױ ^bq;Laj޾26Ra%F HaV8pf +8} 4Laj&KxKUw`3Lgj뾚X36kZ;juXx1z,޶ܹfg=暹-PMĚֲWKs:x1zlJi.PML63]hSR!nigcӥ/H[ ^f- m2H[xwxw-]x=tEL&tjL&KxKޑz.e+wߕA2 /3]k7/-M7ZxG}lh}-޾26^f@5-Mn^[.oLtie+xte Tӽݦt -#>6]ZxZT&}5M/S]`SMon^[ޑz-pn/[2izmJ{_|ݢ[!yݲ"z)G=9}ֻ6DuD'g&@5{4}5eBk)%R}1XaiO/sX^@5M/sX2۔;W oDZTxG}lGOZOY+PMˬ{oiv^SZχZihw8e@ 􂴅i nuzw[ztMy{;VhY+PMxՄY+PMxKk-#k$,:cqwioӄOi{OKg%{zMZ}bYOm7C: o_Mx oivZywd>J+|z2k /VYݦt-TOٹ%ɒHv+#;Eߞ]fFzv,X_@ݩZTVbY;VcjFQ먕P#^GjVǼޒZewD>ԊV{Q+FZ 5u[Rl)M,xGsL,VZgSW+GwVBn-UxKjujL>L᫕V{mVB:j%hVǦoI[RLg[}~svJ^GuJޒZ[Rl4ηoS+6҇>cFbl+V{؊Wsz7[ڛOWOWIiVBxj먕P#ޒZB%FZ}-2Vl,g}+ƈ(Lj>:xZecjUR}ڶQ+F:j%J-U6xGkLuj/uJVBx:6VRޒZݿejZ}%IJ`OȇVZVBx:6xy%FS+6r{m{j먕P#^GM!ޒZeKioI2wLLZ6^Q+PZ9j%Ը{Kju MoISZùG>|8;j%J{jQcShoI[RLWIiVB:j%hVB[Rl4wZ}ݧ]blWxj[^1=6]{NfKW{cjFG> kc먕P#^G-U6xG{Ab#۳ho?FLj>:xZecj]R}~8;j%ԈQ+F:jul ۼoI;VcjFnV{pvJ^G:jul *[[RLSZӶZ 5۫Vձ)[Rl)&iZ}Z嶽Z 5uJVǦoI[RLSZӶ=⫕V۫q:j%WZ[Rl4}Z}j:j%pՈQ+Pձ)VR[RLwIiVBxjQ+F{Kju -U6ϘZ}+և[^1cbl{l^͖c{Ԋ7>I1F=?"]CIA+F?-[7& _IY/"2BX?;O*1Ǩr?FU{OCNScS"}P#^:%Ԉw-Vx;BX?cFw^uK^M!aeKDXo;FX?%ڧm{j!,F{{5u-VxKu?&;FX?p::%hCXBx:6xK-%aݿew~JO:%hoFao["c^jU"l4wa{mP#^:ul -V-S{DXmCXB:%Ը{jDXǼaeiaLc#6of7^3^3miӥK-Nm2EXYn>*eԈW1,Fx^FWo/ Lc#۳߻,jۏ~x1ۏcëy!={Ua4>>wJ^*juNgE*jeԈWQ+FzM\Q))z{I0Ͻ納G>ܽZ^EUiS{+jUXJj2;Vo/:mZ5ګQZ5ڻm VԪx+j<>;Vo/:m=򡽊Z^EUiSV[Q-SSjRQsƫQZ5۫VOBۼpVԪ0Vj2VYQ~sVʨ^E*j)[QR[Q-S{VmVF*jehVFVOB{+jUM{GϘZڻOxغ{؊W[c+cӵot7x_b 6rZYVBxj[Rc^VhQ_27!^t֯nXghoOc#mSh> &Kio:%ǧ՟Z6^G:j%ԈQ+F%:xKj&oY^G3E{jQcShoIVo;VJjO:j%hVB:j%hoIyR-ScjVQ+FuJ<:jul -UxKju)1SR}먕P#^GuJmSVRMFs՟1b#߽Z {jQ+F{:6xKj-%ޒZݿejZ)>m먕PZ 5먕P%:慻Vh;VcjFj>cbl+V{؊Wsz7[ڛOW}S+6rZYVBxj[Rc^VhQAFb#۳[۫o?F{1ho?F[c_SǕ_|w+xo;V%ڧ퇳VBxj먕P#ޒZB%FZZ嶽Z 5먕PZݻIT7)[RLSגZӶZ 5먕PZ 5[Rc^Vh{)1z->muJVBx{5ձ)wMޒZIkIiVBxj먕P%:x[Rǧx5{io|sVܽZ 5ձ)wMoI2;V%ڧmZ 5먕PZ 5[Rc^soIܽ#j6VloW[c+^1+VǦk{5ljo>]?>mL:j?1uJVBxKju *M#j ȈZY΢V{W#~cۏ~xcZwon+w0wLJjOgG:j%ԈQ+F%:xKj#j6Vl:j:j%hVB:jul woIVo;Vo%ڧm{jQ+F{jVǼp*M{GmLYwVwVBxjĻSh> *Mo;Vo%ڧm{j먕P#^G-U6xGzS+6r{or{:j%Ը{jܽZB{ZeK{KjucjVR}ڶQ+F{jQ+F{Kju -U6ZڻOxآVbl+V{؊Wsz7[ڛOW}S+6rZYVBxj[Rc^VhQFFԊor7۫o?F{1ho?F@y!={U6xo;V%ڧ퇳VBxj먕P#ޒZB%FZZ嶽Z 5먕PZݻITU6xo;V%ڧm{jQ+F{jVǼoI;VcjFnV{moFZVBxKju *M#j>Vlx{W+G3) ^G:j%ԈVǼoI;VcjFQܶQ+먕PuޒZeKsoI2ݽcj^R}޽Z 5먕PZ 5[Rc^hoIѴwD>Ԋ}+c+^1+VblWxMk||lǘZuj/wbxj먕P#ޒZB%FZ},2Vlx{Z6^x1ۏo?F{1}ju +FS{꣤VpvJVBxj[Rc^VhQ1b#QܶQ+F{jQcS{Kj--kucjQR}ڶQ+F{jQ+F{Kju -U6ǘZ^n먕P:j%J%:xKj&S+6rZ6^:j%JZ 5-1/[Rl4ǘZKoV^uJq:h~֏oߴl'ۗIa}kCXB*;%ԨCXB*\"l4a>i[]c+^1,VbluYxMׯot}Χ+~9^rw1uKCXBxKu +M#aBX{W#~cۏ~xcaB{{1,>m?jP#^-V6xGsuk/uK^uaeK{KucY"}ڶ!,F{j!,F{Ku -V6a^nPa 5۫oy!aew>CX{!,FuK[Rl4Zuj/:j%ԈQ+FZB%ʖޒZݿe{껤V{jܽZ 5^GwoIy%FS+6R{i[Jxj[^1=6]{NfKW{?cjFQ}81uJVBxKju *M#j ȈZY΢V{W#~cۏ~xcZB{J{1)>m?j먕P#^G-U6xGgLuj/uJ^GuޒZeK{KjucjSR}ڶQ+F{jQ+F{Kju -U6ϘZ^n먕PZ 5ձ)VR[RLSXs}grJ#G:j%ԈQcSVRMFS+6r{m{j먕P#^GM!ޒZeKVo;V?%ڧ먕PuJq:j%Ը{Kju woIѴwB_{Nx׌׌k~k~}tioao{xLJLc#ǫYn>*jeԈWQ+Fz⭨Ua4N˂ j,Z6^x1ۏo?F{1}]ӼPh}|jZTꜶΊZ5UʨVFx+j4/[QhP)zl*ju*jehVF*j)ܽ*,U󖩽SjRQsڶWQ+F{2jWQ+F{+j4/VѴwB_걑۫Yn۫QZ5ګӦފZފZ5o;V/:m{{2%^E*j)[QR⭨U))zI0J6VīQ#^E6x+jUXJj2;V/:mZ5^EwVFVO[Qh3Vlwv^1cbl+V{؊tm9ƛ-]ͧ+S+6rZ#^G:j%ԈVǼoI;VTeH,gQ۫o?F{1ho?F@y!={Vh}|jZ)>m?j먕P#^G-U6xGϘZ^n먕PZ 5ձ)ܽ%ʖr-S{&[.zmfoV=?ZwZ 5Pr_|HGa^nPa 5ֱ)TDXR\"LU#?%ڧEP˽:%JaB%ʖo2;FXJOxj۫CXֱ)["l)-ScDX!,Fa 5nb7qyktܽ#:FXlwvEKxj[^1=6]{NfKW{񱽯cF!}cP#^-V6xGu`g!۫o?F{1ho?Fy!={EXh}|jaka 5uKCXBxKu +M#:FXl::%hCXB:ul woܽ%º1z-xO^ 5Pa 5[[*M{GuLuj/uJ^Gu[Rl)-[kIi^GuJ^x:6xKj-%ޒZIkIiVBxj۫VǦoI[R1)1z->muJVBxjܽ%:慻VhzS+6ݻOxآVbl++VblWxMk||lۘZuj/w_:j%ԈQ+F%:xKj&z[dD,gQ۫o?F{1ho?F@y!={Vh}|jZjΎZ 5uJVBxKju *M#j6Vl:j:j%hVB:jul woIܽ%1z+>m먕PZ 5먕P%:*M{GmLuj/uJ^Gu[Rl)-[[Ii^GuJ^G6xKj-%ޒZ?>;Vo%ڧmZ 5uJVBxM!ޒZeKVO[IiVBxj먕P#ޒZ[Rl4wZݧ]blQ+1cc+^1^1=6]{NfKW{cjFQ}c먕P#^G-U6xG}Ab#۳EroFLj>:xZecj^R}~8;j%ԈQ+FZ 5-1/[Rl4Z^n먕PZ 5ձ)ܽ%ʖr-S{꽤VmVB:j%hVB[Rl4Q1b#QܶQ+F{jQcShoIVo;V%ڧm{jQ+F{jVǼd))1z/>muJVBxj[Rc^7YJ%|wLKjOxj먕P#^G-U6wD>Ԋt.^1[u[w[w9ƛ-]ͧ+~9^GrJVBxj[Rc^VhQAFԊormc#~c ݳWj&ǧGIi쨕P#^G:j%ԈVǼoI;VcjFnV{mVB:j%hVǦp*[[RLSZӶZ 5먕PZ 5[Rc^hoIѴwD>Ԋ^Gr^GuJ^GM%ʖޒZݿejZ}juJ^GuJޒZB{KjoSZ6^G:j%ԈQ+F%:xKj&۷LGIiVBxj먕P#ޒZB%FZ}ݧ]blQ+1cc+^1^1=6]sz7[||lZuj/w_:j%ԈQ+F%:xKj&\dD,gQ۫o?F{1ho?F@y!={Vh}|jZ}jΎZ 5uJVBxKju *M#j9Vl:j:j%hVB:jul woIܽ%1,>m먕PZ 5먕P%:*M{GsLuj/uJ^Gu[Rl)-[gIi^GuJ^G-1/Vh;VcjFno|~?,먕P#^G-U6xGsLȇxhuJVBxKju *M#j5Vlxi,cblݽbl++VǦ{NfKݛOWwטZuj/w_:j%ԈQ+F%:xKj&ZdD,g}86^x1ۏo?F{1}ju +FS{ꫤVpvJVBxj[Rc^VhQ1b#QܶQ+F{jQcS{Kj--[WIi^GuJ^G-1/Vh;V_cjFnV{mVB:j%hVǦޒZeKioI2wLJjO:j%hVB:j%hoIy%FS+6r{m{{5uJ>آVbl++Vblݽbl{l޽otݽt{x~9^Gr^1FZ 5uJoIy!ޒZewDQ+6r=Yj/jۏ~x1ۏc,Pc^w^U6xo;V%ڧ퇳VBxj먕P#ޒZB%FZ}Z嶽Z 5먕PZ[Rl)woI2wLKjO:j%hVB:j%hoIy%FS+6r{m{jQ+F{:6*[J{Kjucj]R}ڶQ+F{jQ+F{Kju -U6Z^n먕P:j%J%:xKj&S+6rZ6^Gj먕x(-U6xGgLHY-j%և[[w[w9ƛ-]wo>]?>޽?cjFQܵWVBxj[Rc^VhQAFԊormc#~c ݳWj&ǧOIi쨕P#^G:j%ԈVǼoI;V?cjFnV{mVB:j%hVǦp*[[RLSZӶZ 5먕PZ 5[Rc^hoIѴwD~Ԋ^Gr^GuJ^GM%ʖޒZݿejZjuJ^GuJޒZB{Kj#j3Vl:j:j%hVBj[Rc^VhQ1b#^nuJVBx{5-1/[Rl4N˔Z=6bp6cʌ~8x׌r>O/޽o2VVgi#^E*jeԈVOB*& xYdB9ޞR۫o?F{1ho?F+zݳjUMORZYQ+FZ5UʨoEx+jUMj2V^Er^EUʨ^E6Vܽj2wJ>^*juN*jehVF*jehoEVԪ0N˔Z=6r{:m{2jWQ+F{z[QR[Q-S{㥢VmVF*jehVFVi^hoE iZ}Lc#WQܶWQ+F{2jWQMOx+jUMj2VVgWQ+FZ5UiSwoE wD)}}8Epc+^1>؊Wc5sz7[||{9^Gr^1FZ 5uJoIy!ޒZewD~ʐZY΢V{W#~cۏ~xcZB{J{1SR}~8;j%ԈQ+FZ 5-1/[Rl4՟1b?;?W+c\Z 5렕PZm,y_<琬o_&UykUvKQeUvKQaBK&3FXl!^a 5PaaeK)o2wkuK^uKaB{K#guk/uK^u["l)M`xGag9˷g9%H,F`m{C-|:|ϊd=YcFyC\ c+k1>Zj1czuYkUtx+)kǶcdؖP#kǶY?ڬc!&uGuLHY;mvKkvkY?B!Y{z=׎z 5zP6X%xH#:f`l{6v Lkv lY?Bwq_W }=f`%ۧݟ_zE؎ 5]2cORMFS{306ҟio10PPˎ>!Dd`o;f`%ۧm 5P 5[2c^d`h;b`cFnc`{c`bx^Cic`ǦޒeKio2w^oֿlܧm{{ć` P#^M!m^hox)a1b#wv[c+^1>؊Wc5sz7[ͧ+I9^r,ƈס.Fu 5-u ?Fn9^GroFLj>ϸy!={W6xo;Yo[σ[ݻOg:%Ԉ-FۦOCR>)a^nPa 5ֱ)X_-%=[ocjFG> G6^GjQ+P[Rc^V6xGmL_n6^G:j%hVǦ[R[RLwZjwVBQ+F{jVǼޒZeiZZ嶽[B:j%hVǦޒZeKioI2wLJjO:j%hoFZVǦoI[R񾏩W-j%Vbl+և[|l{No>]O{B,Ͻ'CۏV݈Q+F%:xKj&z_dWf۳ݽbx~x1ۏc,Pc^w^U6xo;V%ڧm{j먕P#^G-U6xG}Luj/uJ^GuޒZeK{Kjucj^jwV먕P#^[Rl4Q1b#QܶQ+FZ 5u[Rl)-[{Ii^GwVBQ+F{Kju -U6Z^n먕PZ 5ձ)VR[RLSZӶZ 5먕P:jul *[J%S+6R{i[_؊W[|l{No>]OGIiVBxj먕P#ޒZB%FZ},2Vl,gQݽbx~x1ۏc,Pc^w^U6xo;V%ڧm{j먕P#^G-U6xGcLuj/uJ^GuޒZeK{KjucjQR}ڶQ+F{{5uJJjO:j%hVBQ+[Rc^hoIѴwD>Ԋ^Gr^GuJ^GM%ʖޒZݿejZ}juJ^GuJmSVR-ccjFj>cZ[c+^1+VǦk-]|Z}j:j%ԈQ+FZ 5-1/[Rl4 #jFnor+ƈ(Lj>:xZecjYR}ڶQ+FZ 5uJoIy!ޒZewD>Ԋ^Gr^GuJ^GM-UVo;V%ڧm{jQ+F{{5u-UxѴwD>Ԋ^Gr^GuJVǦoI[RLSϒZӶZ 5먕PZ 5ޒZ[Rl4Q1b#QܶQ+F{jQcShoIVo;V%ڧm{jQ+F{jVǼd)1ޯ1b#wvE؊W[c+cӵotśOׇScjUR}먕P#^G:j%ԈVǼoI;V_ =Yj/ww##~c ݳWj&ǧWIi^G:j%ԈQ+F%:xKj&S+6r{m{jQ+F{:6VRޒZݿejZ}l׿yx_c|uJ<:h%(CjɭvÄm#5FXl*;*;%ԨCXB*;ul U.VtKucU"}^a 5Pa 5\"c^K#5FXl::%hCXB:ul -V-S{DXmCXB:%hCXB["l4}aڻOx%VblWxj[=xt{a}k:%Ԉ!,Fa 5-1/["l4""#Fnov+ƈ(Lj>:xaec]"}ڶ!,Fa 5uKoy!aew^r^uK^M-VDXo;FX@/ܧm{{NW+ǰCWamSw&K7S+6r{m{j먕PZB%ʖoI2wLKjO:j%Ը{jQ+F{Kju -U6Z^n먕PZ 5ձ)VR[RLSZӶZ 5먕PZ 5[Rc^hoIѴwD~Ԋ}+W+1cbl+V{؊tm9ƛ-]ͧ+9,g1FZ 5uJoIy!ޒZewD~Q+6r=!~cۏ~x1ۏc,Pc^w^U6xo;V?%ڧ퇳VBxj먕P#ޒZB%FZZQ+F{jQcS{Kj--[OIi^GՈQ+PhoIy%FS+6r{m{j먕P#^GM%ʖޒZݿejZjuJ^GwVB[Rl4Q1b#QܶQ+F{jQcShoIVo;V?%ڧm{jQ+F{jVǼޒZeiZ}Lc#6?xo{of췽f7ާM>O/8y|h˔Z=6rZٌVFx2j[Qy!ފZFZ},2Vor~YnՈc#ؕZ= *&ǧNKEiᬨQ#^E*jeԈVOB*& |RFnVgmVF*jehVO[QRފZ5o;V/:m{2jWQ+F{{5UiSw[Qh;V/SjU,Uʨ^E*j)[QR[Q-S{VmVF*jehVFVOB{+jUM{'eJZ嶽Z5ګQZ=m Ua)U󖩽SjRQsڶWQ+F{2jWQ+F{+j4/VѴwDW-j%VblWxj[=xt{?cjFQ}81uJVBxKju *M#jKUԊormc#~c ݳWj&ǧ՟M|>o3gsϏHA+n\$9ren9zܾi`94L808'@7ѽ'[uXXai?> ^53XP%,MIf+n>:/b,c\Xm_l@7,M1gHd|gi?ϊS,MYf> tScJxK#g;Yϥϊ6gnJ/Y|>k/t>|giܦ,Me> tSzcJ-}T-}*-c\Xm|2)gnJoRzKVzG>e쳴^PޣA VzA VzA»tO^{>>e쳴23(^@7e> tg%A g,=2v8,[}7˔޾Lx2/ޫ,=7j>--cb_Z#Vۛs/tsfB *}7eB *1tsՄF Havxzٷbs^@7e tSzcJxoaH*-ckRZXmˬ覛3Vˬj/F*:oxdnZ6ZnJ/VˬSJoi|[ZUޱz)Ue tSzݔ^f@7V{x)A;V/cke*6e tSzݔ^fRzKk#UzKkuJKZ*V2k)ZnJ/V[Z=Zޑz[+jFle+le+lcwHWz}u=:Vx /V2k oiZwd^Y+pY*6xnۗ)}eJo_&WYV{x oޭZx[z굴Vޜ݄&ZC&KxKkޑz[+2k2k /V2kǔ[ZUZz굴VڦY+Me t͙Y+M-^Joi|JVck^fbs^f@7Y+Mej)V>RV竴kibM/Vˬ2k)K-ZYױO/VM/Vˬ2kǔ[Z+[ZUZz굴VڦY+Me tSzݔZZi7V;lY+P^P^P1ӻWx}+}[+pZ ʄY+Mx݄V{x oi|;VoKv8,k[}7˔޾Lx2/ޫ,Y=7j--ckVZXmoZnˬ&}7ej)ݜcx oi|;Vock^fbs^f@7Y+MxcJxKk#ճV竴[ibM/Vˬ2k\Z=Zޑz[+2k2k)ZnJ/V{L)*:_wlJkmzݔ^f@7Y+M-^Joi|JZvxzmzݔ^f@7Y=ZHZ;Vo6ZnJ/Vˬj/V>hwdJ;,eZ􂲅􂲅w޽z#]Յ||NZie*6w7gP&Znˬ&KxKkޑz_dd.gY o_eۗ)}^eZ%Q{V>h=o[Zj{sf t^f@7e tS9G ZxG}lˬUlnˬ2k)Z1% oiWi[Zj^f@7Y+Me tSzKknΥA+#k>Ve*6e tSzݔ^fRzKk#UzKkuJKZ*V2k)ZnJ/V[Z=Zޑz[+2k2k)ZnJ/V{L)*:_wlKkmzݔ^f@7Y+M-^Joi|JZ}vXzc ʖe /([e /([e ={G ޏˬUlnΠLx݄Y+MxKk-#k$Zi]βVw޾L˄/Sz2ʒKxn|{<;V̬&Znˬ&Kxm9|[)oƉo|e 2k)Z1goi|[ZUޱ(Uxݔ^f@7Y+M-^Joi|к9Zi?{Y+Me tSzcJ-T-*-ckQZXmˬ2k)ZnJoiRzKkVzGclˬUlnˬ2k)Z1G|ޱ(Ue tSzݔ^f@7V{x)A+#k9Va/([oΠle+le+lcwHWz}u=9Vx /V2k oiZwd>Y+pY*6xnۗ)}eJo_&WYV{x oޭZx[z곴Vޜ݄Y+Mx݄V{x oi|;Zi}*6e tSzݔ^fҳV>R={KkuJKZ}*V2k)ZnJ/V[Z=Zޑ[+2k2k)ZnJ/V{L)*:_wl>Kkmzݔ^f@7Y+M-^Joi|JZ}vxzmzݔ^f@7Y=ZHZ;V6ZnJ/Vˬj/V>hwdJ;,eZ􂲅􂲅w޽z#]Յ||NZie*6w7gP&Znˬ&KxKkޑZdd.gY o_eۗ)}^eZ%Q{V>h=o[Zj{sf t^f@7e tZ%A Z}vxzmzݔ^f@7Y=-TZ;V_[M??/?Q{3Vˤ2i)W5@ܾ~_;]Q)2SX2SX(3ǔ\*, |*Vb@7e),MYf tSKĥA+#5VXe +6e tSzݔ^RzK#UzKuJKXa} +V2)LanJ/SX[*=Raޑ+,j-^P ^P ={ztW9c)ݜA2 /SX k/-ZxG {ۋ1)6xnۗ)}eJo_&WYRX{x oZx[z TXޜ݄),Mx݄TX{x o|;RXc^bs^@7),Me k)={K#ճTX竴wūXm2)anJoū=W>hwdJ;RV竴wibM/Vˬ2k)K-ZXϧv/)V/)I/)K~K~>tKcOz)OSkupZ͙ /V"kE oeKx+kU Zx'iIv8Xw޾L˄/Sz217jo֪NSej{sF֊t^dH7E֊tZ=V֪NZ];EjonӋ"kE)Z=Ɣ[YbJoeNSej^dH7Y+ME֊tSz+k^JoeA+k4VO/V{s^dH7Y+ME1Z#Uz+k\wj>*kW"kE)ZnJ/V[YRz+kU ZY籵KovxAٲVle+le+lcwHWz}u=hwdJ;>el2k3(^f@7e tZ%A Z, 2v8,k[}7˔޾Lx2/ޫ,Y=7j--ckRZXmoZnˬ&Zn[Z=V>hYO/VM/Vˬ2kǔ[ZUZzꥴVڦY+Me tSzݔZZiYܦY+Me tSzcJ-T-*-ckRZXmˬ2k)ZnJoiRzKkVzGelˬUlnˬ2k)Z1G|ޱz)Ue tSzݔ^f@7V{x)A+#k:Va/([ -l-l-{L;^J.sz_J;/V92e t^f@7-^[Z+ #kw9ZoMx2/޾L˄*Kj/ڻA xKZ*Vۛ3V2k /Vj/-ZxGulˬUlnˬ2k)Z1goi|z|ޱz-Ue tSzݔ^f@7V{x)A+#k:Ve*6e tSzݔ^fRzKk#UzKkuJKZ*V2k)ZnJ/V[Z=Zޑz[+2k2k)ZnJ/V{L)*:_wl^Kkmzݔ^f@7Y+M-^Joi|JZvXzc ʖe /([e /([e ={G ޷ҎeF?jDDGˤ6e tݫχ?jrG//Ha-#2RXa{ cHuM2%/LI*kY_e>:/b,c/Xc5YX35YX_ZWYb'x^z-\3䚹-Mfn tSۊn-[b:/b,cU-׽%=#\3)Ltnխe}%yu^zk/\3Y/Mf tSn-[b:/b,c%-׽?R{)0Mf tSn-,VXXi&̇n5ar|XtkY_}-yQc۱gn͒r&Ln5cr}ukY_eurzǪL;r\l}e \\::Qvgm^mq>_L؛if_z=AX3o5fX3o}%mb=fcocSLf tS8l& |TI[6s%[FZT;o/3:6~ ,eۗ)}eUٷF}>h=ow{o$_qj- /cPez t^Rzcx TU O/3bMoMeF 2#)WXMxc5VwL;=9=90Me tSxn;ulrlw{c$3)́nJ2s`-SWƮ\؁i߶mI0Mf tScJOKa>R%R*-cn`K^wS*{nr)T *#16]awjP^P^P1;^ ޏVl ʄ-Mx݄ީިSw>>K;ooy-^@7,Me>k)7UkJU=o/͹A93^@7e>k)%A g}}vxz{ˣ2g~Xts /YPe>k)-}T-}*-caEe>+67g@7|8Tg>|gi eB t^&@7 =k???Vw5 ݜÊ3ڛ3sX^s&ڪZie*6e tSzݔ^fRzKk#ճV竴gZ}*V7 ͙Y+pݔ^fJoiRzKkVzGsl^P ^P^P1ӻWx}+[+pZ ʄY+Mx݄V{x oi|;VKw9*6xnۗ)}eJo_&WYzKxjޱ,U7gf@7 /VPej)ݜKk#-#k9Ve*6 /VP&Z1% oi3ޱ,U͐^*Znw͹V{x\Z+;Vck^fbs^f@7e t^fRzKk#UzKkuJKZ}LY9V2k̬覛3V[Z=Zޑ[+2k2k)ZnJ/V{L)*:_wl>6>_ez2i.Vޫ5WġMڄ;]Q)rvwjP`ue 6([wjP`{zSH]_]x(v8^bswe&Lan[*=TX>h)eDF K;fx,ԠL-e o_&}ۗUݩc ;MXY (}WbS3 6Y`=t.}TtKu1cee}d/&gn|,ǘgHY g}>+V[gnwӭ,p|S{}MG*6h=G>k쳴߳ϊ{Y2 /Y{L o8ZxG,p Z*-޾|8T7g@7ݜK>-#5Yxϊ-^@7,Me>k)Y>RݜKuJ{}֗}eHVQz2}LbB+."Lhn˄SKmkJHa}vXzc{e /([7gPuse /([7=;޽z#]x}u==VXxŠ /SX2 oRaw),pY7 o_eۗ)}^e[X{x o޿ޱ.U7gf@7e t^f@71si|9|[ZjY+Mx݄Y+MxKkw`#Z7ck]ZXm2k /Vtsfj)V>R-շ)(V[ћ3VP={݄Y=V>R-uJ;V巰b˾)ZnJ/VnΥK7Zj5Vck̬Ulnߜݔ^f@7Y=0Q )V竴wibM/Vw^fˬSKxKkVz'ij9{K~/)K~nΤ/)9?tX-Fbos|JZ];/V{sss&e‹&Zn[YZމzZdbw9?jon݄/Sz2˔޾Lxz /ڛ*--SkTYޜ"݄Y+Mx"݄V%6Rݜ+kox멲V{ŋ&Zn‹&z 朋 oe Z}=Ujx"݄Y+Mx"݄7Ɣ^b5ᵑ oe Z}=Ujx"݄g/VP={zM?gnCc5mX{<&cn3Xc _qVTxmzٚxǺv4X{s.<<_~~%,Uz)᭾}UTx+?[zX{~#Gkoɇe y_L?}~ 2<~ lU!tםG/e ? k7V;l፲/([xA ^PwOW^ m=_8^bswse<&ncnc^8/[>dѯ %#j*Y x_eޗ)}ǘRPmUA x;6[ϥي7ef t^f@7ef t^zK-͖ZxWixf4[ef t^f[. ʔP1ڪk#UzKulj-Mxيn-^f 9,4[>R-x;6[ϥي/3[2Z}7=cHXޱz.=V'~TSЗ /#/OA_k8=m)u=ֳ镟oS~j^-[M2qc \ŘvKlVzw챞K-㷉ⅷ/޾Lx2˾LxcL o)|k֛e챴DGvxA ^P-lcݫH^_]xޱz)=Vh-4(S7˄/޾Lx2k3! x鱢$ˀ/-2X/W8V<-v xM]*cK%6RUx{cj. ֯{e)M?}bߗ駠/OAOAn< cl_AXlLcn4&l Z]~ =_l0hݜޱz/-?-^@7e t^@71%6RVw$^RK;ՊY|)Pznˬ8Tx݄^? ޑz{,pZ26xn<8Tx݄7SJn^JkUyl^Kk˄/ӳ/޾L޾LxcL o|9۠x[Ws'z^-޾L7Lx2˄/޾LxcL o|kwl^Kk-݄&}eۗ o)5I7RGx|6VaX^P-le ^ZHWz}u=oxꭴVe t^f@7e tZ%6R-xû{YoLŐe o_&}ۗU?rfMXz+VQf tl@7f tRa( -#6VXʄ),Mx݄TX{x o|;RXoc)⽺o-LaC),MxCKK;<{6}7e 2)Wިgwd>ƦK;/S]T݄.p^2XMxc5UɭVln2 oMx -Մ7V^[ޑ,pLh/Z2˄Sz^_ԢToQt)93g~ e tSzݔRa%A Ha}v8^bs޾2^@7-^[*,Xaie+6xts /sXPὺgo&*#k9Vaxc ʖe+le /([^P1ݟ{GZsl# yLtw@7.VPѽu*nwm}yLG sac{{e(Sĺ$3n>_ z>>K;5Y k@7&LgC[*KXEɭϱccoÚ-Mݔ뾛X_e-,GXEϱcDcoÚ.Mĺ&WY*K7yQGsX3۰f tkf@7f+nuƖX؁ib,6wA^Θf tSK>f-#9v`x-^@7e&́Ct`{x o|;r`c9e t^@7ݪn[:=t`>h9e˒use /([e /([xlHףWف}vف2e t]@7.s`q=&,ؕ;_;lhַ ^ u_$3MIf t[Nʁؕ;06`{*2U*}7om;j￙A H{}v8^bsy/Mx݄y=T6oHuBWiwVTWln2 /S]2յǔRzmkJHn}vxz݊-^f@7ev t^fVl;Y_cNtc]2=ztGխ}Ϻ{־_=]Grk,ãVln(3)}7.^r)|;[_cɭer t^&@7erk)ݩCc%A Hn}vX([AٺU[5([xAJ^,_]x;ܥ o2^fks#ިJ:_]Fdˡ+VH˄/޾L˄/SzcL oHVwͷe6 /SX{L o /-ZxG {oLa2 /SX{L o|JoWi+Raj(LaC),MxcJxK#RaַݜŠmz݄),MxcJxK#Raַ}HxÊ-޾aCe tӫU)쵑 ;Vcke*6xݔ^f@7Y=7T[Z+Zie*6x݄Y+MxcJxKk#Uze Z}?Mյ#ݫͫ)y"e?7gRܜI^Rss~zKo1~ZkEjonKʄY+Mxn‹cL oe oeû$Z}?LyګmzeKݔ޾Lx2˔S)6RUxZZ/V"kE /VƘZ#^NZ];挬ޜ"ݔ^dH7YǘZ#Z5WiZZ6ZnJoMx" /V1%*F*jNSejW>zsF֊*Zn‹cL oe oe4SkTY͐"kE޾ZC쭬cxժVŠX里vY}"kE /VҋcL)*Fމ~ZkEjon"kE /V"kS[Yb[Y*KϽaxc9use -lݜA ywo>҅WWzޱ?x]zA2k /VƘZHV #k'*G"U o_eۗ)}ƘXM鵑 * Z=*Vۛ3V2k /Vj/ᵑ oiޱzxL^& /VˤUt!?|~fW۟HkJ_Tc y+F ㈿Qݔ供X3nux1z쳞Km,Mn 6YPf>k)=K#g}sb|&}7e> *}7=KʥA+#hwd^J;ox굴Ve t^f@7e tZ%A * #kj2e}0ѹ< &}7/޾L˄7Ɣ TU=ox굴Ve t^f@7e tZ%A ZvY|)гY+Me tSzcJ-T-*-ckZZXmۛ!e *}7Y+p[Z=Zޑz[+2k2k /VˬSJoi|JoiWi[Zj^f@7={ݔ^f@77ƔG*6hwd^J;[ibˬ&Znˬ&KxKkޑz[ddۻ={A*}eJo_&Wߢz玊U=o[Zj^f@7e t^f@7-^Joi|;Vock^fbs^f@7Y+Mej)={Kk#ճV竴[ibM/Vw^fwSzKk[Z+;Vock^fbs^f@7e t^fRzKk#UzKkuJKZ*V2k)Znz2k)K鵑 oiޱz3~-^s/VPY+Mej)V>R-* Z*V[ZnJ/VˬƘZHV3{j􂲅􂲅􂲅wwo>҅W׫x;V掠/V2k /Vj/-Zx?e\Icɭ*&Ec=2tvv(~c~Y%AFJ;jzY*6oΠLxE^_&Le{%kFZA %ckZXe t^f@7e tZ%ޑz[+e*62k)ZnJ/V{LZ:R={[ku˒ޱzkU2k)ZnJ&Z1%1ZA+#k6VQˬUle tSz݄Y=VuJokwY;VoU^f@7Y+Me tӳV{x)VzGZvwbM/Vˬ2kǔZ:RV,[ZŪM/Vˬ2k)K-#Z/񾏭vƪ ʖe /([e /([e ={t᭫p>_[ZŪˬ&Znˬ&Kx[kU-#k$ZiGMw9Zfe/2eJ/ޫ,Y=7j֪Zx/[ZŪM/V2k /Vj/mUZiGM/V٦Y+Me tSzcJZՑZ]{kbզY+Me tSzݔSZ:R-VzG}lYlˬ2k)Z1%#Zﲤwl[k6ZnJ/Vˬj/={[kUZiS^z,)L?2i)LZn /V{eoFw%b}zoV(3)Lan2SX*=nd**ǻx? K;ʃ8V^P ^P ^P =x֑Յ|w>Z/SX2 /SX k/mV2"#5^,hP&J/^_2ʒKxꠅxޱhV2 /SX2 oVaA Ha}v2mzݔ^@7)= -YgowY;VXŠU^@7),Me tSz[ oΗ/x 룘SpZ3SXJ/SXSJo /-#Va+VaŪ2)LanJoVaA;RXc^2)a1T oyJm_:eIZ}*Vmzݔ^f@7Y+Mm^Z:hwd>J;Jzce ^P ^P ={zoJo]]xϗ[+xYZ#6 /V2k okZA Z}. 2VQz#Le˔^_&Le{%kFZA %ckZX3V2k /Vj/mUZiGM/VZnJ/VˬSz֪TZﲤwl>[k6ZnJ/Vˬj/VuJūϱҎ^Ule tSzݔ^fRz[kUG|%ckZXe tSzݔ^f@7V{x)VzGslYlˬ2k)Z1֪Tm.Kz공Vjˬ2k)ZnJokRz[kUZiGIo:l ^P ^P ={zoJo]]xϗ[+xpeˬ&ZnZ=Vu;V_KvT,k-^Mx}˄ח)Lxdި[:h=^wlZkpf t^f@7e tZ%ޑ[+e*62k)ZnJ/V{LZ:R={[ku˒ޱjU2k)ZnJ/VZ=ZA+#k5VQˬUle tSzݔ^fRz[kUG|%ckZXe tSzݔ^f@7V{x)VzGklYlˬ2k)Z1֪Tm.KzꫵVjˬ2k)ZnJokRz[kU_Ck;Rzg=+sۍk/Ow硵/V /Vk oc~/mU7hXK Ux˔^_&Le˔^_&WYNo&ZuKz[__6o|DH+MtBDH+Mtn=&GX uS{x)ʍ-cbG}lgn2YL|1q㳺*rwY;YX%> uSzBݔ^P7YnJg=}vc eA ]P ]P (s(?˄Wb}姱ҎškMk@7YWYb痮2vo34]QX{TcaD\3)LtE7XKXEiҎši^wSUݔk[b N{ocTlr꾎2L{n 6^ʹ^#V{kV{Ū˴,3)L{nrV{AiҎrR3^@7i/Me+٧rʄN{DywQE^̬$3)W7*k',yQ9ӎk{70@7)0Mf ,YWz_m;/fJBbjLn 6b̈́`Bl/=[!V-#!<bQtv:l=A VA VA»tWxHA]WszL;*^&b P&Ln$& ^{x oWX{iG˼Wlxݔ^@7y=kNd_;2]cӥ{clf t]Me \Te+ݿg LfI=6]hX{K$Lt5]DWtsߩ,뼨\ok]n2Z[{ ̬\3)W7*K:/ȁ=v39^Ú90Mf tSn-κK;v{cќ́n5s`r\3΁+#La=^oz,L{nbʹ&־X3nuzK;#ilL{n 6^`3ǔJ"V{DyZ 6^̴,3n^[F*:_k/̼Wle tSzݔ^Rzcx oU#66]Q`{/x2)2t vgz۪相E$}f \TIf tkMUfY_eKWXEzK;ʗXuOeP`lP`lP`{~l]GՅ|ҎiʠLx݄i/Mx[ګZxG}#?)L{n /^˴Wts'uO2ae^{.Q^d/ՒEړK#e/l_(2er)Ա\F*eUQ>^ˮd^I /S]T&17V2R-;[cAVlxݔ^&@7ɭ=[uʭ]{+bLnnJ/[rk/[uJ. ޱzoVZ 2ǔʭ:R[,xr,Vl3{ t^&n1%12R-Jg׌U^&@7ξ2.*Lh1%1Tx˪XaiGj/([3([xA ֳ-l={xo[Wsz? K;*^b;A2 /SX k/mVXaiG76[anJ/sXSJ/{Y֑*Q%ckZX3Vˬ2k)KmUZiGM/V٦Y+M݄Y+pQm^Z:hYҎYl2k /VgfZ:Rέ:e9ꣵVjgf@7ZnJ/VZ=# ޱhUZZn)Z*Z12Rm. ޱhUZ^^fEY+MxcJxcx okYҎ.G?1k8}X^f@7ξ2kǔJx[kU-#k9VQƪK/([e /([e /([xAz1;:u8Յ||8vTZf /V2k okZA Z}. 2zG;*^r-^Mx}˄ח)LxXMxcˈ렅xޱlUÙY+Mx݄Y+Mx[k֪ZxGsl#6X<6 e tSx^Mto_4/2a=u=(V8?1cѰGkf@7f+YW+ebǮ\ogŪ=tl3f> tS[-:h9YQtyˣ/]g5Ne> t^MYf>k)}j}Vw>[6gnf> \TxcJx[UG*eJg}}v2L2.2pG>Txޑ,(xcե/Zle+le+lcݫgo[W5YQ2]zA2 /Y>k/m}V|##W2Y`#E 6Y`ǘIf:;e._N}ӯgU,Mx}7="Ճwg=Ng5Vzx!`(߳be`P􂲅-{L;:ҕ޺/_/T-F2e t^@7m^۽g7B Ha}+izoYR}ַeJD˔^_&LecJՄT-{|IXa=m"== ]f@7e t]f@7ѽ5LXz䳞>K;I|Vl'5z% tSeRWǙ,r g=}vTgf,Mx݄=Yu]z쳞ZA|覣,MG5Ygqꠕޑz,eB+6n˄2 oP oyJ-;RXOc?)6[2.*Lan*={%k*tr8SbLan&La1VaA+#} w^&E -MxcL o&e[Vw K;ꃘ)l2)LanJ/SX{L oHUX,+bV^b&LanS*:Rm. ޱznVg/SXg@7Lan:[VaAp)Ҏz83mzݔ^MxVa%ªޑz+,xŠ/SXn k/mVXaiG!{}qfq#ff@7e tݫ!*K?;BeX|giGr1([?%(Ylcګ(בYuu=_>z,x+YٝԠLx+Y2 oJ^۾U-W^),xYGulx}7eJ/^_2ҿ*Kx 렅xޱziVk"La &La oVaA Hav2mz݄),Me k)={[UGgowY;VX/ŠU^^E),MxcJx[UG*:e;VX/ŠU),M^@7Lan:[VaAp)Ҏz832) k/mVXaiGVlx݄),Mx}7m^*:h)Ҏ9ln:&fUzj*#k:Vڑ c([߬@٢ VxA٢ VxA٢ePFP /Zeq>L:VXQX3{LĚ,M+Y-o_uJf GF>ȗS2;#e /l_`21ݏ=]G*eЊg>+V-^@7݄,pQ݄Y{x oꠅw^>K;ʗXx Rz^@7e>k)YuJowY;YϊU,M݄,pQe>k)m}V>|gn?wj@7e: tӣ,Mg~),xY +6[2ח /Sz}^eIa%Q{WXu{|IXa} +V&Lan&KxHu8 |w>YY_bG^E^@7)=mV |Xa} +V-^@7),Me tSz[[F*:_+VaŪ&Lan&Kx[UgHa}vԯVūlZ1pf tS:Hū]GkbզY+M݄Y+pQej)mU|Z}lmv?V2i.V ( 2acI=RXc/g֠le+ɠle9 kPQXGٝub]\}vLg=1(k@7f: t뫛e}%N~oz$>+-(Ynװfn tSݔk涢e}uK%nXLtiGa-X3_Tf \TYWYb:/>^[nX4kf@7ᾛX3.\3,[b'u^c:Xu?f2}9:JUց%I|w>[/s`2 /s`l/mX;r`cc覓)0M'5S`͞k\erKBbj̄(3!)ʾ`3!tb{5ETt[!vc!پIz3#.,3# /3b{L oWA9ӎ􂲅􂲅^t᭫ 9_c/^e(^@7e t5=}ZxGkle+6[LunJ/S]TSJ)k\u;[_c/[ݔ^_&n{^M[z{x o&eUxG>k쳴gln˄gMxcJ6j[Vw K;*^8} ),MxݔVaqA .WjVoLan&Lan*=UXu;RX_c5af{83Ù9=t8qՑ5]WkbզY+Me tSzݔS۾UG*:_[ZŪˬ&ˬˬSZ:Rm._Skuȇ^5xIٷ"exI7^R^R}1یo5/xWQ,eZ /^dȽ /Vv1V͠wb- 2y?Q]F{jEʄ_Te˔^_&W]k{"t8#kE /Vv1Z5Vz'Z];jzѳY}ӇEx"݄Y+Mx;k^Yf;VϿQ"k7Y+M3VZ=ƔZ5#Y+spZ_ګpF֊tSz"ݔ^dH7VvZ5VzwYNZUY+Mx"݄wSzz)VHZ?L4VQXuxAlepe /([xAJ^t᭫+ckW+*6g/(^f@7e tZ%ޑ*Ckw9˔^_&Le˔^_&WYV{x oޭU/_;VOU{8{#Z /V2kǔZՑp.ޑz[+e*6ÙY+Mx݄wSz[k[|%ckZXe t̬ÙY+Mx[k֪ZYҎ^fbM&Z /Vj/mUZiGˬUlxt83kpfj)={[kUGùV,Z=*V̬2k)ZnJokRz[kUZiGMw9Y"Znˬ&Rz[kUG|籵Ҏ7V]zA-lΠlepe ^t᭫+ckZXx^_&Z{^f@7m^Z:hY%AFZiGMw9p(^Qח /Sz}^eZ%Q{Vu{|IZ=*Vmz݄w^fEY=t8֪TskwYs)UXx̬2k /V{L oU|Z=*V-^f@7Y+M3VZùVu:Gyl>{ˬnˬj/mUZiGˬUlx݄Y+M3V{LpnUZckZX3Vgf@7Y+Mm^Jokꠕޑz[+HxeL߬?]&.V^ݾO{ _&{J?~ql]=(v:V]Aق lPNjP`uR{~R{HI]W ޱziVZLan&Lan*=UXu;RX/ˈvx>A-2ח/Sx}^eO2aey_<zi}V(3 6Y`n|S:[UG*:a ޱzi}VZgn)g /Y{L oHY,x>e hNj@7e: tSxtR_I}:OX#2[Qm=3(kF&mnb}uzϟzd^ƦK; k&{ k&@7Ltn:n-ޗ΋b}r.3+ŏ\3.\3)W7*KuE9ӎE.*ؾL?Z2e /l_`2=Du}u;;c@DXiG#pP/(>ies([ P>{)_u,´#?.`1 `]gw(iJ7SXk3͐Ǣa핒"ʬ"ʬ覈2+,[b',֝;sa=bUM@`_ /llMcru?uzL '{m=YTUfӾL _υ/—stqt)ɣ{Γ=<&l̓n<&l̓Etvw}}>La=d9L _U}_-3_v,#Cc_XUfY2ebڗ/ Lz]qDͳ/ӎ|v?@ي3([@6P-etrY\Q>La=eEwEڿ%־L}X2eb*/JX籋f /{|Y,S7P̝ڠL @7}$/`|:ؗw,-k{BG7v*k_2e/n\;ΗŢe}2ڗ/k_&־L}Xo_fX癋u~)ǾehY_{-̲ebڗ/k_&W2sz/G~U la_e/l_&ؾL}`2iԅ3j>fU ܗUf2eܗ / o\-xǞ=EKחUf2eDח/ݫ̞y條ba=Vd'k)knfȢ#!̐nb &W7:\XX̬?ƾL;/EkPre.נle+נle+נl2Ǻ|.z>.GѱzKlPY}<-P&Lnxu;ݛ(Ƙܗ=λC2%3-2j˔noeJ7f;)J7f>1w=)(קj;d'{,7(} g_82ae/Ac ({IJ,/^_&Lx}2ecJxc5-#޲*gcå兿Xu3([xA ^P-{Lw{t᭫ Xj}R+V-^ח /^&Ax}71%:Rm. %@F"R}s݄w^_2ecJxc5Tx˪{|;VX6I_bHe \Tx݄9=7 oYޑ[+^fbM/V2k /V{L oVu;Vck/Ve tQrHG\{<jh~)Q0:N"Zjˬ)-UnVLZ6ը;/i:DI+PMtj,am(XaiElX31,PMY`jz̺گo g}V$Lgk Ě,PMֲk-Hۺ6t3 gn˪jo`b=2]߱Ҋ8fe 6H[ l- m 8vnC»>>}ǦK+2oi /3]Մ.oS[R-MIx8o0tY^iz44}iۧizME ojz'c-ME[tjW^fL)-MWnk t}2eÙ.PMxՄ.oS[RMLwl"{-^f@5e T^fMoirK4]L;6]ti2.3]2eպ$K{% veלXM7}H'uTx݈T,kSeRMQ#-'5[=jTxՄ>jZ47F g}>K+2^&lq -PMG5Zj&M}+h;QXkG$vމI9$K%i'^vNݦ;[<艷>{Ta]+2^|q3$Mx"Մ),RMxk xJa5'ˈLJf|h;[_viۧiz44}ZZ4M-nOx xU ˣ-^H5E T޾"u)VRV$Su*o4HaM5Haj‹ݦRXEKRXU&SuY/}/RX"E /RXwJa-Ja5WNJ&9/n"E /rX"u){ojgV'gd|q{/VdS{"hUYyoeF ZVdZ/V&ZMVwZމ:^Skux-^dH5E֊Tጬݦp8W֪hZ5W/ {"h ֣H[3H[xAښ^5ަ'^>7t5ޱ:?fZnzA2k /Vʛ*7ZxW. 2V$S֓E:ZjWiۧiz46hZMQnջVm2k /V2k )-Unj};VZYˬ&}5M/V`SM/VަV[ZU&ck.E[ѣV`Se T^fMoirKVLx]Z+x{#ZMY+PMx6-Z2[wR,zb Y+PMxj2k6սV޼hUZh=Z{l"1ke[Zjˬ oiyoirwdck/Vˬ&Zjˬ)Υ-\ZU3VZZu8 ^g5ަ'^>7t5ޱ6 ~nDI+pmˤ&Wuס!ϴߥA)2"#y{~k vFO>Mܧ v8'vZSETxۧQ+O,ڞLaj&Laj[*,o^8SKuR k};VXRaY&LajW2m [*R-Ix S*,xՄÙ),2m xK[*_e;VXRaY&}5e l*LayRa oW֧TXmHLaM),PMxj ˛ʍ֣Ha} K+G:`e l*`j Ukߒj-ɷx%ŠX|g쳴"%1e۷$@5f> Tl泼M.}VnNg2giEkikAںhuR{x=E[4^&W^&[~ ˛ʍޑ:),ۋlqw84Moiۧiz4҂TX»>MXa²h;Laj&Laj[*,o^[*h^e;VXG,e T^@5e T^kS +TRaOx p;Kiaj:t63eպ$K{% vlFy{1gs{ɣ0Y*{4f: TkZXu b?ێ,G]u̪ H]g5#9hIq*̌=5an;"sUV_Oϯzz?~?cÿ_;Ͽ}?_ۯ>Wze+?6@G9&?o~cf=v$kQeeeeee>$,u\b6#^......Q&Yeu0"Y^Y{F`m F`m F`m ֳLeWiƒuZXYZuuuuuu2( aazHע```````}IGY`' $ϫZuuuuuu2( aaf=vtݎl(l]l]l]l]9MgzVi>?E7{= 67^$ 3ד`kL^F ޴ ޖ;rz=57K2^F7zk)=6ǷVs5Jm{t#ᝫlel Fٸ9eQ6nkLWk<ґ޼:7{[n#ܬk׳[F7zvޣk;W޹zMo4x[>>Hgx?l%^ 22ҫ{Es5oZ޶º$9,x=et簌nc 靫o)7 ޖ;rz=k57zFz=ket#Zc x xoiW۶VZU^ZHgn׳VF7[Z5VyФemkŎ^Z22^ZHg֘BzKkGJzKkʔ޶jzFz=ket#2Z*սmؑYY׳VF7Y+SHoiHIoiW۶V$SƷ0LV>h Z׳VF7zj)-U)xKkʈѶV???5]lܛA(fl5ƽyϲӄ8I |ˈ\UQ6ʀm=e lOa݀]*58im)0"-Ŏ ?eedYWe]ޣ,(5w^V4xǧ֣TXsU 2SXF7 k /-V4x[ VXܬFeՇ^Oa^Oa1]gՀTXym}VXx?_%^ 2%2RaʃoKa= fSXF7),SHoHykU*Ugo[a=J5WSXF7),э k /TXyФmŎ!3X?g`gn3X|t Wyr\u[XbGb%aOgGK$ntq(=5IGzqaaxh-v\Uml((ml6m{T^vHr^x'mQ*jg^gWw糌C[57=YI ]9W%^-H...# sL!s5M#oZ%޶(}\x=et糌n| Z xK ޖh,vgݫz_2^gH֘Bz˯d呒+YLm+YsUJэz>Fz=et#Z -}V4mbGNf^gH糌nYkL!#%_eJog}>kz>Fz=et#2g>+|Gg#ZsL'nZF7 5+YyJ*Sz #}SFÚ%^ݍz8nS;қF ޴Jz[mؑ;W((5^l5yw^yuٶV\('n t2%W& uҰn}%sbG; sSeDY l]Fuu5Y{JV4xǧ(g檼S{ ^Oa),xK +-VX,),эz k){ 8q(c xKG Ra폏x q{a Fٸ7eQ6e#F٠;˔eWǑ&<`q_LbY_Q }. ޗn`,PX{>kvnu0+z葖ZBs. k]k]k]Fuu>$,u\$ۋIrkٕ k-<os[F7X{n룛d}q°nbGz^{+X{F=et#מ$[`4vXo/&庭J5W[o6P^ơ^F7]j5z#n/PxyY<{2CI...#sL\ xHV=>P"^Kh^Kh9ZN71s5M#oZoGa^ ؑZ%^a9H尜nrXZH[}YK\eJoZ^*kVӍZFz-kt#:[}Y4XKZ;rz/k2r^Z9He1V_*FJz+k%2kn/Z2r^Z9HenVBz+kU vk9Zez-kt#r^Zc 魬U1R[Y+q)]ku{Z鵬ӍZFzu7ZS;[YbФw{||ˎ޹eZeQ6k FkZ#ͫmdfGosU 2׳VF71#oi'C*[OZkWJzuxuec xjHo)x*kiL6Cܜ=ke ^ 2oiZAe^֊YY׳VF7zFz=k[Zmؑj3ܬnFx=ketgn-^[~*Z ҲVx.# 22ҫ{]0m /?uX޶z+\7gZ׳Vơ[Z5VymYbGNgfys 2׳VkL[ZYsUFYF7`{>l ؞Zc w9gAzo,vf6(>,{>8Zc xKGJxKʔ޶z/5Wezoa -э[u-5[XyФ 9šez=et#2^Oa1 + k)m^**),эz FzK[*V*z>^g,xK>+-uk,vDu.F|эz>Fx=5;,ީӄrלY%T?EYF7,Itэ$$,u\$-uk-v\{nܻG{s[F7Xns[PX#'ۋIn[ͭsQ]F7X{kOtȵͭ-&q-ukk/vw۞g P؞2%؞Zc KG R{2Enݶnэ,{FKm+׭ؑʞ:gn׳^F7YM>nN<"v`?v2ʞ3eO݈'nDy)ܩjr)w ޖ;҃x*Fl FȲQ6e#FtŻVxH޼:齷;2^Ư}Q^O{i/xK+-uok/vdW^{KٽXH罌n^kL!8[/zMļ )mu?JsUޜ=et#2^OuHS;W4Rni-uo-vķ^xeד[F7}qFx=5ѳ6:Mx%mŎ|j;gv>-Q>>(eNo_L\ ុý;emŎ 3\s|}F=etg֘~wWy4'EKõhn{i|4{F=5Jn2P<U+ ׽mؑ{ OoܮuߏQ/nJk5Wez=ketY+э1#oi'mkQZ*jٳVơ׳VF7Y5Vy-*޶Xonebz8zFxnwݮ_Hv;h+,vf э({ F=\*i),vdZ 57KxueeW( k /W )mmQƽ3XF7z] Gz=NVl,v({>knQ| ؞2YkLA\k)mY*gy>ƝYF7Ԟ2g;u)xK?>mgUYF7nYơYkL!#oW}grY\x4I -PnZơw)!iM<{[ 볭ؑšSXF7z Fz= +_eJo[a} kz SXF7),-^HoIoKa};RzkQ6e#Fke5k7t7cz fuseϷ?aW_xݡ;c3/V=[Rk8bG~ۿͻkbkF?m׍ׅ.ux]2^g=~8 f}]xq°ܶX Wi|.cpݸ{4\kx~\k/jE*Z^ r1sxo)7 oWj_תkY-xu7ZV9:iMxKc;YKwjf=7n⓰s(7g}(x)7ϛq*Fٺtֱ#?4$6O«L|vʈqmMN7^ ]"'sUTn]uZkl9঻q̖s(,u)ܮ+UnWv=XkU=6۵...# X1*F 4hnޮǺTkJrXN7Zc wcoc=?qgGzU((5^l(xט]Wy#yu;Wyx=57Q^cy,xK+-.$]'a1mne  22ҫ;;W4RқV=>^W |~)CAXgx˷w~"[R-(9-=etkiC%[`n׶bGb sȵk]][Z\T> zm-vw`Luh]l]l]l]l]#z:N.HyD'ݖ[ܚ'n x=r+$mZʭ*zr^On--^xF RnOxr뵔[sU 2ד[F7rk /-V47zk-vg\Ux5^l<{(7gl]cޜoHo^x;2^OnͻWxu7zr82[kxo)ے[oÕt~ ΎW+ynxu72ҫH.TS!s5/iAw{|Jo[nUr\ j]OnBד[F7ԇ!8M[u;[r-ؑQmX?('nݠ .Pԣyv>ӄzp. Zڳ]ơlэ${kvn:ar_mŎ0<,Seqm]эn$t?ʞ禮J3fmma4><"מ2S_F7 zģQr' ĸH["-ؑryscQk}(pσXσnuŮ4aXW__suۊ/ytyoҐb^Zw'ŌCɵ'Ōn&Ye!q°z{͉u[W\pO`)2=EftfRdin)"cGKk]p]k]=\Zqe>dzqya{__@÷J^```````}IGY`'=<.z{1s}.F`m F`m F`m ֳLeWiƒuZX٭f`=of kϛ`f:N֕7_sbfhusQэ\nq(=o6\W,MqnmoƎt_FeZZZqee(ufi^Luۛ*ov. ֞73fF7X{kϛnuaf7cGʵν{bfF7XnfPʛ s?-n7;Ey3P=ofJ=o6\W,\٭ؑr|}ȵ͌Cay3=o6֕7Kcu˛ތν͌nfF77=fi+oto{[Eqэ\{F=oft#מ7B+oN[fH_1{ۯem FQ6`e#FـtrZ~50t$9cmUƎW񌞛wz^ϕ빲5~w#Lxv~LnjncF7ҫckL^Ho)x*m {[#3bsLgČn3bF7zFl)=6/AmƎW$nΞg^ד`F7I0ޣ.k9;k޴ ޖ;2^{2x=e ^{{txj;W޴ Ugot+u.7Ξ2AWw.Pͺt=5~JJI麷M;r=57({lݍ({8G6Ys5Mm}Y\wjgݸS{>Fx=et#ϚYinGg#EyOFFـm(eQ6l kL(:tz};2^gNmW ^gYkLoH[U&C~K4\2222ҫHS;WCzHVIIYsL糌n| Zc xKG 4h|֣ؑoΞϚ%^ݍz>8z>FzK[knx=et#x=e gʃog=>rscҳɬ,z Fz=etFzK[*<{=ke ^ZY5w/VyФe>֊9ez=ketgnS[Zk)ܶ gA>>fYF7z>^g1#F]Urg}>k7]2Kw糌C5YyM&-Y|,,x=et֘g呂YLmgU^gH糌n|d|э7ZZ gAޖj,vU((5^l(xט]Wy#yuYx=57Q^g,xK&sgOxiYϚ2Z^]^]Fzuxuec 靫o)x*}Wrx߀ez=et'nS;𦑂7 x=5ؽ H^asXkL9Q)xgW۶V_I^Z22׳VF7zj)-U)xӠIoZ};rz=k57K2׳VF7zj)-U)xKkʔ޶*\oת];ey+kxuy>$^ݍ<21174RUһ=>zKv}lޕxe7ڍW.Ux2Bx2^Il*tW1y^y$]xIzZkm7g nr7cc>W/o­X?&zK֪9k D,-J,-t1*F cLx <,ky,x-t1*F cLxRy*ky,7gc9ݸ9[Cu)22ҫ;;WCzHIoZm^Kk5WezZ,0Ww...S[wqa5A(^l5FxAw=?8*G|yq_L{[a# ֹwDF]`,nQX+^sb=Hg/~?Ekȵ..#׺ ֺ\2XeQX gt;X{)zDe֞ ؞2'n.G RnOxr뽔[sU 2ד[F7rk /-V4^eۖ[ܚ'n 2wi /M#%{)-x=etƓؓ[kLo)H[ʭLۖ[ܚ'n 2Rnr+sKn;O-x=et'nj*[y[Szr뽔[sU 2ד[F7rk /[yФ%nmŎ޹eパQ6eSQ6ek kL+<ґ޼:齵};2^OhͻWxu7zB82w~*\"a4x[ 6$HKa#fg",neWW^]ޣ+K?|ڀ7w{|JoZJk5WY!Y+Pnq(xKkrs.mngn׳VF7zZʃ&-kuk[+v䛳V>ܜ=k5ؽXY+x=ketoiZAw{)mku+\ 2׳VF71goiH9j|۶VZU׳VF7z^Z[Z5ZAޖ;Y+nΞgțgn Z x"۶VMl\l(㍳GדVơ GwvfӄN[ VXHQNm FـmOIFـmFـt}kHݼ:Q;2^OaͻWx=et^OaTXkxoRXaDZ ;A<7KeeeW( k /W )mu/\7gOaSXơ[*5TXyֽTXsU 2^Oa[*5TXym){[a#ߜ=57˛^OaSXF7 k /-V4x[ VXx|׾5]ot72nκ .)gK5;Id-ԚvI-=et'ncrp /-V4ynI{[j#ٓZs]n.OclcWycWFQ6^Fٸe#Fxi^_yu ǫh{,vd^Qoff(>n n n nM=gOOq^yȐLky֚oC;2p{ٚ(> Gٷ??kx﬽I26oتo4[mbEƫlbzuNczux4WWczuxOblr8+7ӽ~JQy7aƧ@1:'0Ɛ4>=^>Il5~Hy}9 i,t54y˸6՞ۗa(mg[R֖ZHQuRiFl Fڀm FژQ#mm5-tsto-X7sV,VFxiii =U<ctn)xKoMVX[O"*WWWWWW7ڴ2MQw}VXP^ogp#6Ҡ-t=el ]`ՠ{TS7v{m;[>Y'bغ٦eK[ dYbEX,z>˨IYƦr8orK,x[>Yx=%^gYƦ GMgFnmŊW ={>Ξ2YF5Z&gFnmŊ*1ZӘ^^ƽW74ӂ7+*7ctgB|K6V!ZF5zB˨hӂ7˷R) ޖº+FTM6Hk5^#mL66]on~uzmŊSXX=ZiQ 2TXy $[* 0"ɬ9rz_ j՘^^4F7)nOx ^@z˨^] 26oioj)xS-kuo[+VJ#['jՠI+cSՔjWC: yyS úmŊ|#>o{,ޥ[Wiii: اڿ =۹ wW.VT1muOۓZXݞ2וj ҳy RjF3-uoK-VyV,xu5ٓZI-ޤ[JR7.ֽ-XzR+K21G5דZƦM -oR]mI{[j"=\ߍux/x~Pf1Ǧj| t7m$ŧt_| ^z}+3kg-#m`36#m`36#m`4`iA1(/&nG/9+Jiֲ ؞26gj. l9+oa2\$^P X݈4Me^,4F d6oZ ez'm( WDjz2WWoifʍop=چ9+H)x=eT^l2{YLo^*#B\YWq844g^Fz}A:ŠܿŠ^),cSjilӂ7fGn)xS9[ VXȇb|Q x=elZ +oɬp8{ +K2WWMmZ +o#.B^Ӹ444ghӂtSMpnཽuֱb=gT{'^'I{uҞx'^'l|1*Z[Dx oZ*k56C൬)xu5Z:* U&Ctmj= n]-^]]4iB@φ\t0ۋI 6ʅ:k?#r`7eMamYM>-z ºno]uwemym&l] ؖr66-wg-nUQ[fTޕ-T峜jۖrqnW>lrWN-o og*5峜j՘^g92:۴Lo峊Y*ޮϺ%F<vFrWWcz+u6oRV>K\eYgͨīx-l ^g9Yg|ʄnoϚQYN5gg9ոZ>˩g[𦖂Yb{g"=9GT5i6Hx1F;ton~x _bS^g,xu5>k6o[h|k,VdZWW1: :ii=Үm6o~F>Mo[aWƓsDxux=e\xu5zki9y RoZ+סogpo4Z/a922 jPFP{{i }W}k`՘d`՘d`8j^; 5\o9ngET۞2YF5`j fcY-}}{"*z>˨^]sYƦ|lӂ7ܕKnOx>Yx=eT^gYM hނYn}{"*z>˨^g8=eTN\ټorz?X>Ss6AHk F^#mЍ4iq'Nz1(+e# ؞2ۓ[F5`{rkzRusKx[rcZxr+>՘e^,44f9Ղ7 ވ^Vn4xۧm˭RnETN'jQ 27ڴ-Vn)[ʭ o[n}7뽒eTJQ ٭٦oJVn)xW>қB6Z^Oh -mZFt9SK-VXH@3XP]`ՠ,tj1H[L! 55QngEumGwnFYjiچZ{3\<=՞O݌M٦S+pFe>چC W!z+I2ykMQ4\m϶bEQ`mHǵ6HSxjczw7Gq3сwz7lK-Vdky> lƱxxH{fvISp\ۮ6nƵ)Z>)ʧ|#%>ߛ"4C=lফMMW7d9yni϶bEg8Nuj bSy\{'< 5MB o湭>KQy74Q jkoZ-5Wn)xK͵>mkRsET4Q jkoZ-5Wn)xK͵>mkw#*t[G|i| t7mM[qi| V:ϧ5gi"*wkas3MWNNN[*g{oj)JoMXZx=eT籌jy٦oVn)xSyrny϶bE~rm+RaET՚SXƦQ xK5M-oWw"*z ˨z ˨z ˨Ra-xSK[* o[a} +jQ 2TXy R k}VXߥŠ),x=eTj-lނ7ow"*z ˨^Oa),xK5-Vn4V-VX_?ۏŻOVx=el ^Oa[*ټoULoۧm+>_NRv=eTYWoiboj)xSmYbgpo(AHk F^#m5HS2Ү2uxNz1(+k`k%h3XF5X{˨룚d}-畼vXo9z~Pys]s`Әkk\4Xi^;\AXo/&n˭)w.wskm`-=$z0 XMOi"Li N gMltt]rK[ ot+gjLQ 24]y tF3۫Lxۦg I-''-IH֛B]Ʀ=ɓH[N)WD({˨({˨lO{Հ]jټeK ޖik/V$Q{s˨^O{i/xK5-Wn4xW~JQ^F5j՞26^MW5 R{FnmŊ4Uxm Fk5^#mLl^斎[o齵M+2^Ouݧx=el ^OuZ-x˗rK[>z%nPyӫxuxuӫӘ^hӂ77E og*uH糌j|Q ϊj[R]%YkN>VQ21ʞ21ʞ21ʥϚ[F|s+7Q^eYgET|Q 2YF5>k6o[h|֭XD YF5jԞ26ՠt9+Ϻ}+k킆<dYF5&YF5X]H[X+yqj;[r֖[HWεJQ`-cSX$#ma=z ºenmŊZ]IiDQ3]QM>-k-uok/V~moVF8ÍHsm FژHS#:ux|Jz1XX{ \?Í4X{ ̨kO`^nuo 1V$Q5Hc=!fTc=!fTc=!6tb3z[$BliB~wFT: 36gČjlӂ7M-o2޶,j՞3qT{̨Q]:ټorr`cE>@Oرx)`zu5z3t`y ҁFmƊW!z,} I0xu5gO6-xrK9#~mi{[{"W,ӫ^ƦQ-_[|+7-uo.Vdj]uK7gT>tiCMeK{9ո+j୴ټ填^Eގuױ"Ob9r^N5Zl2*ZVK\eޮᵴZq#S rA^|*W0 %yeK?wV]gpmHa#m6}HqPGbiׇ:DZĺ?ε6`i/=eTº^nikݹN6f11؞26e=eTc=ծ]6]=r(x[뽭X"*jg^,{˸6f^F5f9 l6[A]jnkjӫѰX=`iQ 27ڴ7)L{t"Ob.jκxp7ᜢmɭbEzֹVFkOcM.x=5۴-ӛZ ezۯx?riz#i6g#m5ƝHxq'm+ҁ7G og}eވJZWZƵZF5F]𦖂7ERXmŊm[ZETQ 2׳VF5j6o[ZhP#:Ί< kսHޔiiLNl6oןFw}޶,UDzʨ^ZY+xKk5-Un4xWgi"*zʨ^ZY+xKk5-Un4x[mXs/iKQ92),ӫSXM Ra喂TX̊XUxq8i6HxHl^sKV޶*VD%^Oa),x=eTofʍoKa} #RXӫPXX{4M^^4iš[FUaFw}޶*VDz ˨^Oa),xK5-Vn4x[ 뫭X:3wF^+ëA3XƦ=)ծ#u;WDZ4m% ZYƦ|QYQM|V0+ĺfb+{>˨lgՀ٦噺Y-}*޶*}VD]YF5ʺx=el ^]sYy]9_eY_!3(Nj8=el ]Ogՠ鬨&OrW^; 5brZ>yn?9L綌jIGz0 [XS`0`)0=fTQM>J^{j;[B-XX]%K~kwi|jǦ4>:^i:đ|ھ,՘gOfM hU2m)"cEz rz=GfTȢOLȌk+Z(+mYcEQmT)0ƐiS`!7Ƨ`v))ȝC~O["=ī{I: : : : : G˟j;ި'msETFx6/LgjL^Z72-ezKk>MoZJkQ921x=kelY٦oirKխmXW+=k{>,QQ-lr8*7-kuk[+VdpQ޵21mZVLoiW綵*pQQQ-l2-~mX7 6Hk Fژ^#mmN^9: oZݓL9V>iqmQ [𦖂V!AZkd x2唒X{4M^^4F7)nOx^ZQ x=kel ^Z6-xKk[ Z2m[{i"*zʨ^Z՘^Z՘Z-[ZhemkŊhYX,gZ՘^Z՘^] [&?jiz^ZQQY٦p.Un)xKk$mkuOG+Zb9x=kel ^Z՘Z-[Zh疵+YX,zʨY+Y٦ezKk[jiz^ZٳVF5׳VF5׳VF5Vy*7mkh[+V鍨k a Fژ^#m5iluzg7tLo}+2^|Ob:4zʨ^Z[Zټoirz1$HZ".:iiLNNczux/-x#۹nm<=keTgjY٦p.Un)simY+x=keTgjLoif-Un4۲VbE>=k׳VF5gZ՘^Z6-[k[jizQZQQQ6-xKk[ ZOxQZJ hY+cSWWgM[Zټp.Un4sZ=֊pU,gjQٳVM*-*գVY+gjLgjLoif-Un4۱V:V;<'^'9N^'lezo'^2:Vd줁ײVN5ZʩZ[V֪h4x;6$HZ+2^rj.xu54WW1: GZ[FZv4]kxՌٲVN5Zʩ^Z9mZZ-p>Z[efT⵬S rײVN5Fg/<\XEzu=ֱ"זǚqmy,ǵ屜jז: #2ϕWoǚQ9ϖr1ϖr1ϖr1XXEK[y,}Xcͨky,xu5H{/<;2zSFMQXE9;XNJ|89s.'g_Os4>ǵ)i NS$ŐW$wO+mKQy8{f˨7l-L5۹,Vn=2[mŊ噭X\p\{f˨q-ꙭ٦帮z2_ez/VD<{f˨<{f˨<{f˨JQW"zx=el hӂXMoc} -zCyzs,V_4Wo ^^4ZFtވ^ʍv4mQz2{C˨^ -x7fLo~>JQXF5z˨^cmZ[?"-oj4۲VmkŊ|8{*ٳVF5gZ8=k5۴-Un)xKk4mk1!O4?bx=ielzʨ՞;)߿_?Mj^y0 ĺ>C^,`['֞23XF5X$#mavk-Y?޽>)4ZZqj4X4Nm#M>saXAXo/&u[n}Ltasm;# ֞2s[F5X$#mavkk^YM+ֹ>6H1F`m6HS#:uxNz1u[{}N:gPQ ֺ=el k] Gd}-z º>kVD HcgMlρՀ}ڮ9v^In2+xˊ}+2px,V߫4{V̨pϊNټoirtvgi"*ٳbF5zV̨^ϊ=M-ezK+>m[$k7īǵgŌM7 F5͞mZb-*޶L^piC b1Ǧj| tC4<| Rt;ϧGa|yy] ޫ3aƦpLQ nѦg;:5)ݸe>6aaXtQAtQAtl2︼jRFϝ`mƊ3`X՘gπŦn0<ǻY hWy"፨z2Ö6icz#M55٦+xsK~5+2CXK[4>ǵ-ڸii| | z|=| W+a+ϓc74cW n:ipipip6΅dj2$Sy>sp&m4 =Hg<=e\K5-Vn4x[fmXCZq\ii| tc{4>=^>H6[_ي|̖Q ntt<5t}kFnΥڷ&mlET=YWWWW1ѦorK>mlET>lwi:!i:!i| ˧ E)x&m]zgi77777uv.ur9[Xƞn.=eTfA-]Wn)ZUynuETמj\QO續j| <5| Jו;ϧ`~ڮiz#<i˓6k#mp3qm nF8g{u]Ƀd:s"v]_b:4{+kcS{k:9:rK[U&mS/#y>UNc4WWNcM oj)xSn]O"FSƧb2jƧTboe_sHxf'ia#*]ӫӘ^77lUlBt]su]+X"ƞ=q&kuu-xbPK׵>0%<$U!zʨ^Z[Zټoir۲VbEYX,gZ8=keTY٦[ZR_eսVOΞ2q8j)x=k5۴-Un)xKkmX7 66i6g#m5]{=keTcz=keTcz=k۔VLokΟLZ}*rzgMY+xu5Vyiz[kUZ"ag/R4jI+cSfOZՠ{U{"tYo+,V֞zKֺ=el k``}Uz9,V֞z=eTtQSYQM%{蕬bE}gX,t5ۓ[Ʀ lOn6'VnՖ2ɭ:ܟ>_^r+V$ JV^^I{y?*+5Pn=7rxeU#juU i^ȭ~r%_Yj_4WWNczuxuӫmJф-Q/xr[Ϩ^GnY-xeUo#~6rk4xrQc(bE:rt0ܲ1ܲ1iSFnu-ez>eޡzo3*ב[V5WW#Mȭ6%Ѽ4֣PnŊ:+YrzeU-kS敬%+Y];YC+*^Gh=KвWW#M{U_"F+swvbE8bqXV5:˪86ùy%k)xWԧ,ޡzf39ړҸ:ʪ:ʪ^ΆYl: vF3ױbE刪,#m=Fi FH[5FڂtԵn. ޱzmVD%^Oa),x=eTovVaFwCŊ:Z,ՍHޔiiLNvȽ?gF}ޱzmVDz ˨^Oa),x[ 6#:VX)X,SXF5SXF5SXM*R:2c*QQ)ݦUX-fzG uXQSXXNjLj8[VaFw^ b),x=eTVa%ªHa+*^OabSXF5z ˨^Oa6ùUXέ:r+>rX^:{簌ƽsXF57ڔF4Moi)xKYbEވ*Fk-Fښ^#m5i n֖.56VxYZ#HgjQ Kx[kU ޑz[d+*^rӘ^^44WJKj7/ܻq2ckZٳVF5zʨ^ZZݼVYbE^Zby8{ʨzʨzj){[kU[ʽVOYwlZkQ9212121ѦVmywlފbY_"*jý׳VƦLgjLgvh^:[kUVx=kl׳VF5zʨZ%Z/ 2VxY*KxuӫӘ^+-Yݼ7r֪6{k"*gZY+x=keTokvZFwd֊uz=kzʨzʨzj){[kU[ʽVOYwl[kQ9212121K[Z Z/x꽵Vx=keTzؔnSZՖ4yd֊pU,gjQ mJx[kU[ ;VckŊ׳VXQ 2׳VM okjKZ,Zom >_T^I+#ٓVF5n2q뽪=sِ?,vn;;z[[Fyz?>~V,V^g,x[gFw>,VT,%^] :iiLNKx#j{ܾLg}^ ~ ZF5zB˨^OhmJsDRHa}+z+2121mJxjK۾uez공VY+Y+Y+Zݼ4fzGslXQW=N x=keTgj 甦VLokۗ[mmn^rIcj͞26lUTS?_J(?La=VX[X{$# zSX{֞jU-ua l}VD]YF5`{>˨Ʊ,vv]YbE+GT5Җ2^#mͲikw~W;555Yx=W&# 2YF5>k7/m}Vm4xG>k鑑bEū-z^44WJK>k7/ܻϪq2cYF5z>˨^gݼYbE^gb92121mJgՖrm}SgETN糌jL糌jL糌jLov>6bE^gb9x=el ^gݼ+Y}Wy9hQ92ZF5jΞmJs4/--o2#5VX9X,WW簌MsXM _k6"K#k5VxዑgbU^ZY+skvZFwd+ ވH[H[xl-Fښ^#mmO֖ùFglXQz*HgjQ Kx[kU ޑ$Z.gαXӘ^^4^iZ%{F}ޱZٳVF5zʨ^ZZݼVY?ckŊ:rz=keTcz=keTcz=k۔-Z,;VZkQ9212121KZhwd+z*QY+cSj7/mUm4xLZɯ-i E"-^OZBדVF5^7ىj7sJ9sa=RX u=({ ˨(j)C@qjK*e OUDSXF5fSXF5z ˨Va楓UXLHa+,V鍨kH[x5Fkh#mmO֖х}޿cŊSXXFx=eTjmn^*heDF ;KabWWNczuxuӫ{%F]aF}ޱ*SXF5z ˨^Oa*ݼUX)cŊ:Šrz=eTcz=eTcz=۔ª-*,;VX[Q9212121K*hw+z +QQ*ݼUX)cŊW t_<tWWcz=el xm*Mx#J#kwlXQz*Q 21x[k?ŽVOYckV^ZոzʨzʨZ%fzG{lXQ7 g#m5i H[xw֖х}ﱵbEYXg# 2׳VF5j7/mUm4xG{IbEū]z^44WJKj7/Um4xۗ[ZETΞ2׳VF5zʨZ%Z}+z*QQnS֪{okΟLZ}*rz=keTcz=keTcz=keTcz[kVLZ}+z*QQnSS okj;VckŊ׳VXQ 2WWcz[k֪6#k=Vx=k%^ZY+x=k۔}ת{okΟ{껵V^Zոzʨƽ׳VF5Vyiz[kUNZ]+==I{u=>tgicz>MZ]+*^ZpvkY+x-kTogKx;k4k$Z]+*^rj/xu54WW1: WZ=FZ5q2SkYej൬S rV%j މz}ZkE^Zrz-kTcz-kTcz-klSv֪i)ZOYwj^_:krz-kTcz-kTcz-kTcz;kl^Z5fz'ej鯆IْVN5גVN5גV$={vdw~XOTa]+Im)XԖrRXN5`[ ٦tRJ)(חºVTڋ%^Ka9k),x-lS) oħ,7z}֎j܈-TFl),7Na=SXMޑz`V鍨k;ikzH[k-M;55xSŷ<+uAHI)x=eTobcp-Ha=o-bg),;_Ә^^4FF4Moi)xKk"*SXF5z ˨^Oa*ݼUX)ױbEz +SXF5SXF5SXMiz[U[ )k"*SXF5SXF5SXF5UXyiz[UXaNk,9,9,9ݦ4݋W+Ѫޑz[+VTgjQ mJx[kU[\\xGulXQz*K2׳VF5zj)mUm)x[ku;Vzʨƽ׳VF52qmn^֪6YbEވ*Fzr6^#mMikzw>;z[[Fyz֊U,V^ZY+x[k/^FwdޖxŊWebīW1: :iҋWy o_q2ckZٳVF5zʨ^ZZݼVYbE^Zb92121mJZՖrmS[ZETNgjLgjLgjLokv֪6YbE^Zb92121mJZRVOYwlފLY?^|bY+cSzʨ^Z6%-okΟ["SYX,׳VF5zʨ^Z6%-okΟ[ZETNgj{=keTY+Z{okjZ{#ip6^#mMikzw>;z[[Fyz֊gb:4zʨ^ZZݼVY%AF֊v9ZbWWNczuxuӫ{%kFZF}ޱzoUDY+x=keTgjmn^ZhZNgb^Z՘^Z՘^Z6{okjK){k"*׳VF5׳VF5׳VF5Vyiz[kUZNgb^Z՘^Z՘^Z6mUm)Z,;Vﭵ^Z՘^] 26gvZՖVOY{k"*j^Z׳VF5zj)mUm)x[kuZ*gjLgj{=keTZݼtmUm4ޑ[+V H[t5Fڢk5H{|9SHS5%X?L叱bEa$`3XƦ Q W5JK'ٿ9XzdXQXkɳts`Z1: :i$+-[X Xn}l?3(pm`-=eTUMa:a=2]cŊ2מzs.s.s퉮&Y_msSz>ZQmq)i/jݼwm)\ ޑk/VQW;#zؔYQYn&Ep^OYw>ZQ^F5^F5WWvV{Ֆ^w>ZQ^F5jLMiݦ^mScjJ2^F5^F5KsjX{{#ik-Fښ^#m5i n}zw􎷶tMo.~M+*^OuU^OuS]ƦཪyvȽS ޑ\zd$XQjV,xu5WWW1: WEg?_?HMhs ~@edž*~uR\ǵjWT{|i۽m\i^m,IϱbEK[Qy\_OiWObEYX^Z׳VM oVY?K+*^rX,jiLNNNczdvȽ[h/;VZkQy8{ʨ^ZY+x[kr8};VLYokDTQ 2׳VF5j7/--okckVx=keTgj8=k۔-ok3ZiUD%^Zq)xu5VyizKKZ,xO)ΞʳVF5zʨ^Z6mUm)x[kuZiUDzʨzʨY+Zݼ4mywl*gjQ 2Vy okjb4V֊{oD^#mY+#m5l-F:w~8om]x;Vx=kսHgjQ Vy okj;VY+VT,k%^] :iiLNn^wkU ezok"*gZY+x=keTokvZFw߱bE^|^Z2׳VF5j7/mUm4xGZ[+VT׳VY+x=keTo8hZRZku޾ckVgjLgjոzj)mUm4{ܾ[ī_k7/ܻϪq2c|Q 2YF5>k7/m}Vm4xG>{XQYXN^gYF5>k7/m}Vm4xG>{XQz>+Kx=el ^gݼ+:o_n}VD,x=eT糌j6݅n^hw䳾>uzb^gx|QG+g6%Ϫ-ez[uez>Y,,,ݼ4ϪfzG>{XQW yoa2ZF5oa%[X(ºVd;*I{|ux=:iI{}v8?7MKs}ۧej^,Nx-kTejճy oVhN˒ kuxy{īW1: :iټ7ro֪i4xۗZZ<-kTej൬S z6/UhNZ]+Zj/kY+ӫײVΦճy ogFwb^ZQZj/x-kT^Z9V%j ,ZtjGlY+ej൬S z6/UhNZ]+ǟ;i|/SᵤS'+KZj=v~0_X?Lz{;;?A2XN5&2XN5&2XN5&&Y_iu0s2Y׊2זY{38N-Tj*ćskKïǬ(O`Uh#mFڂmCH[ui n]n][Xn'bz6-x=eTo+vVnFw$e:<~{u}-iLHiLNNczuxMiz#2% ezr뵕[x=eT'jQ Kx[U ޑz-Vٓ[XΞ2121x[r6#:[x=%^On-xu5rk7/mVm4xGru,X%=-g綌j͞2AGaSnc YYoϵoFLgMdtE5Xú3]\XMkybyljT).mz|9ݑ~F?B ױbEO{+K=el pwdܑGm7/ݧ׷Vx=k%^Z׳VƦ 甦VLokۗGzoUD壕gj?֊v9XM^ZY+x[k?Z/xY"Sޣs?0: :iiLNo)MoDR({ܾ[ZETQ 2׳VF5j7/mUm4xGclXQgZby8{ʨzʨzjqO&3ϭ:2cQ ǵby,j{̳m\'m={"]{E=OiH{|?nq_T@q4ƩLWArƣ{WyX,XF5y˨7] nOc%l&3ϭ:|l>ZQ-ꙭ&k] mJK_٪kd>f.iWz2q]j\:"y^;UGu}^mʌHޔyipipip6y~4%<?P>_k:<_Ni\:Bq]4 uL\\;UG;_˲ٓ_F5y˨6O~EG돿8tϱbEKϠ`=el k])#zUz=MAX?s\ZM``8uuus`}IWZb; c% sdi֛3bƦXTju0sSXmgk"*O{6̨lφlφ:McϱcE(cQM>{~̨u1EvU<_c?Ɗ7ju6<i67#mFtwdGjKi]kzcڰJ*44444F"RF};a_ īUxuxuxuxuxuxM oDD{ܾ˵ܿD=/QFt\ : : : : WzK)"쫼1GTHN?lτiS`{&lI퟼b6k`cUNvI't]aF5_N$nO2ѦKgwi)xKy cE} X,x=fTUM )xj~Ļy o}mm4xGkXQ^}i̱Ʃ~mzUrƩӸ |(MWh9ǚ\}|/?iq8_{MMMM\i[U[<4Xs`NNN&k] : ୿Kx[U y5+ ވH[uH[W#m#m]g]uz&E ޱj5FdTjp4nSm2$[u(qv_ii\:Bq]4 uLgw'y7w^N&yҘg7777h|{ݞJ!YH]BeLXQ/1#uuuuuuTA-Q5Wj{ܾ*3E,%Zq\kUӸ tWN*i\: *(gG ޱ{I|\_Qy\444444Eq̻ץɐ,Qy[ɷ_e6ϗy: : : : : : Ѧ4%ʠD{>0VqDH[xH[xH[xw鎷F҅FX|}+^^^^^hݿז4 ޱ.o'-#m=lEnlq\T@q4ULC^ yg};UX/QRXN5Z ˩^Ka9mJxzȋؾ]d"RO;*^œS ӫӘ^hӃϿ=ۙ4%<?P>Z/"k{nY--Tem&e;X/Q9rq8[˩ly,s籞Ksi)x;%/xX;*Z˩^c9ky,xJ|UVdwfK| 1+VDp#mݍH[ǵi6ݦݸFW҅F׳ywl_Zh=Kbu76-x=eToqXYz7~\ז5[ ޥEFfQ9G T44W7ڔDR({ܾ{cETXƦLNNczuxuӫmJф%/xꭵVx=keT^ZrIr+c6#v?y#?ۆ 2Ȏ{#SGU{ji[ZRFe>֊YX02׳VF5zji[ZRjizꣴVӫx=kel ^]ٳVƦѦorYOn)xSޖh[+V.g jΞ26gj -Un)xKk>MoZ}*rzNNczuxuNoi[RF3޶(UD%sīmZ:*nGi"*zʨ^ZY+xKk5|1*Un4xWl[+V{oD^#mф>KQ9NJjy籌k7c64[ɐ,^6[I0ϞيHޔA̖)=5۴ jirK[U&mYy̖Q x4y7̖qmaW5fs8og.LwcLwcƧ@)i:!i| SP y><޶,VDzf˨7l-ܞk/f;yNMd]g"*{˨pu.bPKו[ uOxۮt]x=eT續j\Q Ѧa+EL-o⽵]+늨k e FڸFz2۬66][:P޶ٺf+gjVTxu5zfki|xSKm"-Ŋ<_Qұx6#M=Ki| dbu8ÍMxfkvs$ŧ4[izfVJbLxuxuxuxuxugx[ l;ϐHxVzJbLxuxuxuxuxuxor#m{["*%3Miiiii-u2Hx{_ xV:'g7777hhw^o9ʣvnNJy,x=eT籌j6-xv낷V^e۶VZETQ 2׳VF5F-ZZ oZJkQ׳VF5zʨ^Z[5ZLo {Z"}k{6ik Fڸiluzg7tLo齷+2^rx)^Z׳VF5sZ*o=Q9bWW1: :i6-x#Loj)xSnսVxLLNNNNNoi$հMvm{.ӫmZ:*nսVxNNNNNoi$[hnOx^ZJ2׳VF5zʨZ-R7E۲VbE~rʇ'gZ x=keTgj-lނVmY{Z"=$^ZY+xKk5M~-~t8սVgjLgjQ [*7mYGZ"MoD^#m|12^#m>՘gh/blނ7yNQnOxX=㷯iH;i| +US4>:OA[| Jݕ;ϧGXߥNJ${.ޥq7ipipipipip{+q\f+7يܿ98.VDq-=q-mZ0-6[ȏ_pǵN>q4^1:i| Bj-SP 4m4 [ي3[F5yf˨7] nѦwOWf;ǯu3-v]칮X,{˨pu<2)ʠ+7-v]x=%^u{Vwcu7Ղ7E[h\Ou"፨z2ӵ6nFi QmL66][:rtoލڮb^# j續ku :]ケ-oQ2[?IZiiL&jLNoiezSKLvm~JQUH_"M}U2xf˨6*i| <5| J;ϧ`g~fp޾8p?#by8jpiLNNNczM5۹aA4[ynlETמ23[QMמ2 ٚ[𦖂4[޶I~xuwc^帾uֹ"\,Ief5l p)+l.Z lLx(阭[.xF;[/y>u{뚭sE>-52[N52[N52[6ɻӀ]ƕ*Z:~ٚinl-ejzvsy&VyƯ+Mol*5rzY2[Φp̖S nzIލeޓpf+nl^-K^X4Fιpqݷ&mlET=iiiii6-x-Un4x'm 뙭X,zf˨^l뙭٦orK *޶z/=VDz˨z˨z˨Fn1ʍfz[X#y,cSz˨pS d[zh<{c"=m^ƣNNpii: -p~T pn{cETe>B7V>iiLNNczuxMFtZ ez'mkQZJ2׳VF5zʨZ-xKk ޖh[+V{gbSzʨzʨzjiZ2_e޶(UDzʨzʨzʨj6oZF3-kѶVYX,׳VF5WWgM[Zټoir۲VmkŊ׳VXQ 2q8{ji9Kk[\ZUùm>6UPϵ?;q6{ؔՠIxshǿ8^Ή: rKa}+QX{V QI Q ֺ&Yi z º>>؎z236H1Fڀm سMc{FwA7GYxb+i|Q 2Yy gFw{ #-48#*W WW1: :i6-oj)ӛn}g"*z>˨^g,xK5-}Vn4x[>Xggby8{>˨z>˨z>kig2_e޶,}VDz>˨z>˨z>˨>k6ogF3-YX,YF5YF5WWofʍog}}+2^gbYF5z>˨^g6-srK9Kt8}gz9'gOhbWWp)'jLoiezSKLoKa}+z+K2121ÚmZ𞋗}[ }-kuk[+V$UVFk5^#mL6iczgxg:oֶVx=kiQ 2Vy ZFenC+2^rƏIXӘ^^4i?{ۢr82Qz8;mn<=keTgjQ [VLoZ֊yz=kzʨzʨzjiZ2_e޶*rz=keTcz=keTcz=keTczKk5Loirޖ+z*QQl2ʍoZ֊gbY+x=keTgf-p.*ܶVZET ׳VƦ8=kel\ZټezKkխmX׳VXNgjQl2-ezKkuzmkŊ7jz1Fx2^#mL6iczgxg:oo=)BD%^mY+Y+xKk5-Un4x[>HZ"Ov9Zbu8i՛2: :i=k54ˍv4mku/UDzʨ^ZY+xKk5-Un4x[޶VYX,׳VF5׳VF5׳VM˽V{Kk4mku/UDzʨzʨzʨj6oZF3-kuo[+VU,Y+Y+Y٦ezKk[&ޖ+2^Zb׳VF5zʨ^Z6-xKk[ Z2mku/UDY+^ZWWp.lr8*7mY{Z"Ogb^ZY+x=k5۴LoirKZrGZ"፨^#mh #mL6iHx1MW3zҁ7GOxQZJ2׳VF5zʨZ-xKk ޖz ҲVӫ]ΰVXFxLNNczuxϴZ-x#jr>MoZ=JkQ92׳VF5zʨZ-xKk ޖz+z*QQlr-Un)Z2MoZ=JkQ9212121[VLoZ=֊yz=kzʨzʨzjiZ2_e޶z$2~^|bY+cSzʨ^Z6-xKk[ Z2m[Gi"*zʨY+^Z6-xy\Zh疵z+YX,qs`?^)Y+Y٦k[fy,7y.=yj{,V$=n h|6o0ҎoSH #m|.1F\ilvwsǧMxk?P 2XF5y˨u ֥Cqm8XGҒZ_Ӫ\Xk$4FTZ1: :i>$3mavkۋIۆ4\UaFlgM.K5w} -nj4x[mXʞ1HޔY )٦S.xoiWmJQ923\F53\F54\y pF3-6\X,3\F53\F53\M+- * Wi"*3\F5WWgM٦oirK[U&m51Zk=bo@4M9=el|Vgvkںtcx26gjLgd}V[X-^{j;wtbe Yi6Nm#m6\i6:HNsb3(X{˨kO{`i/=ka]i$C_Ϡ`s`Әkk\4XirϴaXAz{1u[{}Ol ,ڳ^Ʀ`Y/cSX$3mavk-v`HkO=q2ҘkO`1מM%znlŤn id.se\+Xj|)=fTcj^;\AXwێ"͵'ǞkkO8=9fTc=9$znq5Ťn琢.ss홲{b3eF5X{,Igaz z{1uۛ}Wf73qj)u5pϛŦ ʛú;ތ {g͌jQ ֞7jr+o:\2 -ofXY?6w.#m̵6XiH1בXGuS?moƊZKq~ϵkϛ`y3=o֕7Km73(fF5X{̨kϛ`yYj;[g#eEk-k`8uugN&3ma=xΕŤn{  : ֞73 ֞73&YW,uvXOۛ"͵͞kfF5ZW͌MayuRaf?moƊfϵ͌jQ3fQMuRʛ9moSygP73qj)=o$ʛúfkNfϠ`y3=ofT `yT>-gxR9[Xpϛ=׊3fF5fF5X{,I֕7Kf+oeo]ovX_V:iǃv vvҎvNpl5g҃n=FYlvU35S +sreN5F]𦖂7E۱c;WnP&sSj)x-=TYž[F/oG߆RsEƫ=xuxuxuNNpi=V]Ftne=A%!%j$S Ѧp79E^:W鵼\,g{9՘^{9՘^] g:]Ftotߺ\Zk.x-TjT׳M%䢥Lo^K*ܕ[Ӳv>Ζݚ{ٲ[N5g] zi[7)nOx>v:<ൄCⵄS rq8G]𦖂7EQX:WrXs<-TpSֳM sz8Gt(x;o{ݏ!l~1bEQ5HOFk5^#mLl^7tLou֊:CK磻^-Y+cSzʨZezg:9 ޖ:ܻx6yyNCii NNcxut4巤f瓃^Lz3XϵߒF=eTgj>Igz0ug}+]YX=ti|Q ؞2Yy]YmbEX,z>˨ƹ,fg2_e:>=iSaDCAܖ=el ^g٦orK[U&m^J2q8{>˨,si[R>k}Yϊ,x=eT糌j-}lr-}Vn4ޖzo,V{bz>˨,f-}Vn)[UYHx#H^#mL6iczH;t;-xstL~>JQW;#z>x=el g-xSKmaDZ"O<㷤Xg#՛WW1: gClނ7r27G6^m),cSz ˨]OaEJf+ĺ>CyՕϠ`-u=e\=eTYMʨ^; 5\|Gg"۞ϊ|QcYF5mg6-]-nWF>JQ,YƦ|lӂY-}*޶(}VD%^g,G糌jեϚ[RK[ og}>+糌j|Q 2Yy gFsmbEz>+{糌jΞ2q8{>ki9K[>k~}+ވ5s6Hx1Fkm9:w}Yϊ,xu5z>xK5-}Vn4x[>s葖bKje]Og22AGafy^tnɭ϶bE>2lnՀ-j}Jyvdy27QZLo<"*nOq)vHcqm6#yiśZ e[R-XٓZXγ'jܚjޔ['f-o)g)"zH;CH;CNC~^Ɛ4>:!O!/W<4>:yi|.t\D7S=E6#mkd_x4W,wcOsi.<5۴xRs2_\H[Uǵ6)ic,Hci F٦+zҁ7Gdz~n抨i.x=eT^Os6-xy RsFnmŊZ70c.miFv8ui ES yHu[jKQy\{R˨7] n26'fq]jdHk+G[s"sDp#mܟH#MFH:t}2GǠ9: o[s=JQ\F5z+I2 Ihln[ RsOxۚ둜xīUӫӘ3M՘^h2)7E o[s=}bS^Os{Vx4lӂ7Lor>mkG",iYHc+VF,m)Л2.UyG\jӫx ]ɠ(wlFemŊ3[XγgjYM̖)xK5܍K ޖz+2^lbe"Mލ=b=el3[F5>ٚ=^>8wf6[xpV!glফq7l]%ccǬ[_mŊ7; 6*ic,q8i6ic,gxg7tq8OxkןFtQMi,tj'v8ukaz8Je|oemӀel(4`GQ2ʩMQnOxR뫔Zx'MדZƦ6-xK[ hW[j"߈O܈wb݇2{w˨ݭټezwr4mUJF)I-'f-xSKRa2m+[z +>՘^Oa221ѦorKW[a"ΊjL^Oa7Ԃ7a(sKx[ 뫭X"E:iLNNNpi M ʍvt8WrVD%^Oa),x=eToi[[ kX7 6Hx1Fk5٦+>Z9:w}VXXxWjQ 27ڴ7) ޖeXW7G+# zSWW1: gf{}=7wi"*׳VF5j)xu5j6oZj oZ}Om3}H֫t=ielzʨݳAf|O~rD ^(w[a"ZpR{ + eOa2ʞšmZnĥ-nWFKQyRkM,{ ),cSfTXyIZ RaOx ;a(#*jM^OaSXF5WWof-*޶NŠ1SXF5z ˨^Oa6-srKͽ 뽅%^]{M9=eTczK5LoVn4xWNO[a"፨:q8i6Hx1F;t-ӛ~~JQSXF5z ˨^Oa[*ټorRX?È+j3bu8i՛2: :i=5ܫʍv4mS*Q 2WWf9-Vn4x'mOxjQ 21Wy ūhOZ"Ξp^2q8{ʨzjiZhUZUm[ZETNgjL^ZWWczKk5Loir oZ*gjY+cSzjihނVnOi"*j^Z׳VF5zji[ZRZ2m[M^|iQ OV26l>_a`mg; UX9kF(;il'8vvҎQv6Jb+_^jCw= Z֕Z \zI%jS !~oO]nEK[%Ox#H[20=vI;L;2vISp^c4^)n.=^.:ϧGەZJjͨ<-T%jpS nO}%JsMdj=uGs=޺\Ӿyi&Yi̳NsӘg" 2)׿/_9~<~?Us?õ3J|ߟ?\:y%yCI>O{f"/Ҽ!$'sW~&y y'@>I~NӣL򂼒!$'L򂼒!$'sry&yA^IސwJ9-@I^W7$0y%yCI>Oo%L򂼒!$'ϝxϯL򂼒!$'ϝrp8J 4z z7>P8Y!C$%&6PIKQyrΏCl0[a$CpDK14R fhYmpLK14jw ѥ QCw Q24,~G0\p)e7dh/0bh4CH:а^;R n24,а&CpSK14A "fh;KG0\;R yGp;@@lQ2*gu@@O{]f/tovUle4 a7 ådhXv åF.6pKw{pDаа+ {s8 _`CK14C4 a7 åi.M?_nt34wtzWKֻ2\w f?%Q2>2~GCgxTGG14 : å 5Cfh0: b1].YpzWKֻ2\ay9` +e0\z KֻGmM'Co:~N4 a7 ådh̘^]z]vaCcF1c{Z;_`tp|1csu0\A; fhN7cГvxw{6cvCnȾZ34|G Q24|GuDl(ӡ;J(~G=$)å4C$2\2~9:.w9ٳKƣiG}Lǣi${׻I1`o;NƠt24w;=a۱QѰh}|d)%dd_MKdC2\ %2\ %e}ٳfhPvAm}S2\= ldd{t~9}eHK/2\$%G2\~9}9vw${6CyL3ap.,cefh2dh7}:f(å ./0\pr:_`fhX^2dhX^aptd"%.YNe;K#.OC;[j(ӡ;JqݩIddQKedQKOΓ.]v'im@C6 а< led;-%i.N.ӧKG0\; `wt;;=w;JQ24|Gp> p> Þ åi~ no ˗ʦS:Xbd:/Xb$CCߕnʕ_`]̗Wz|Wlװd:%X\ǒ sǻ2\ߴ e7}6=w)%ߑ |G2\pY1Ƴ1f341A bfho<2åK Ηl ݳ}X.6pɶQK2\m<;}qo.pEK/2\2~9{{ ./Р hm@ɺǽef/'}d@Kp(_\G a34;lm@2\F{pk}>ػ nw34|G=;~ QufhXu?@KuKGаthN'Cv:G./g34l2Gа=J.=-{6CCK{>X%{5{>O34_?#.?#.?:.6ΣpXun\ K34(/Р4C6c2\r\JKKpq).9.uqr~ fh4C!3pɶQKu2\2m/pɲ+%2\ %~׿Ȟаٻ^rq˥7p> p> ^!t5'2\2Ɣ1 1edy9\z ^lK34_A Kpw|34_A Qoak+d \G&%/e^ٳK#wGup~@34l å뺳m@UpKu0\u{.Wua]Kdd?@K;~KpofhX^z>@K׻I..b~ӽ.HK/I\G.HlX n1;w34z[e7fhX^2d?G{Ε˞^25G׿\`fhz Q?| fh5C}{.KpXJKR2\2~K] {6CXR j{[l;{[n{z䛾.oߑ wewtuz52\2q dd\wu%}ٻG#ƫ]./ƻ;xWKcWf/٫[n}aٽK34, n24, f^34C fhsn]ž^.c:]ެw8k-t㼅_`cAWfhXd:4_a >1UٳdhxB24W\ ՚Z34Wk'1.Yp6@K2\Gdґ2qo'u丷:red-%2\?-%7BN9o/{6CK2` 0IzL.YpEK/2\~ .lK34_lo=.%{6{x8#R7ǥn=',%2\=.ݜu"ܛ'Р=jQ34ha]Vp:.97!%&dxb{tHlQC(Gаe^K0\4 o~} ltC {7Co!yae4CcNMs:{}ʞ5&Q34xG;sb_S dd %czOlvZnv߽g34hA; fhݻ?-{6C|G;j{g34O7Ct34O7Csg34hA fh07quA2\2Ɣe׹fh07 n˞а nw(㜸wege+㴸m&_lnɗakɿw^K2\ lVl8N/8O/ݻaFIKGmtQmk=pwR34w fhP>zAln34wA b!ddDKIddDKI$g=AIA/ᒱ dd,%%ccSɞ^2?}d<8{?z bfh{7Cػdfhz= Qgx3<.34C6Р hѵˋy4C(ӡw dhX^:f=ayAnc1ãА=ay34dfhX^ ghTU_=(?UŪbՃ/Gy>޴5޶5޸5޺bG Ū7M Ū Uow:tgVK԰÷P}ϔ>k(V}dPЮX]Cꃻk9NXrHa)VˡRc=|&uRy iS}<>DT"m'/8R)VIxrS}<>SP2UCV'~k>TOom6\㹩_RjT%Z-y5~=r TWIJUR}&K %bEZA[RH3;II GK }MZ=gPI9,1T &VW*V%&f88x Ū Ū ŪНUwj# ri}خab_(>=fVl}V8oVehV@߭EXIU/UoU/ɫKWRo5r Ǔ;>ޔ\N-CJi}v#Ū7NZz/:s[WעPcT[4gj.jyԢiRNЃTS3CPzН-}.TK{TK{S}E\,5xN~S}<)>TɫrU/nU/oU/pU/qwcoxUR}7T\FjTZu,ժ#îIe}w=lZ|󱇦Ie߹>FM1iLSr1j9H=T :NP} fZ} &gr=Ϝ?M̜ؑ@P .)KZ枞A)y\zb54%澞XllV=~eZܒbRz ;~u\.b\S#jFrU岚V M*GábΦjiX- XtN^>:/}9)zIϴK4}f:"F2!Crʥs}xP3鐋1bTkѦX6Z>zPXֵXmCkn$T<+klDrXP/ṚهzbQ}lqNxTciifG2.%A3HZb ˱2fXUM;ތ>ގ9 qNMq\>e]=KiwB6gJ:I7Ki؅3}i%VS{yP Ū ŭ %zOݾ\&j6M%=~%zi_s/&>XڛciovNyoPUnZ"Z6ZB ~w&n9vV]MUKXTU{,V};ۛcTX7}X;>Xڛ3Ca8aùAj ѡ3FHf9vVKiHf9vjvw/T)m(Vm!܄٫{Ge=yvw!K1mm!s"ivW-Tg;>Ά77W ժǐMgL> fZ.URo^J;ԻJ^-,˸-,γD}R3u{+0>X`(V}O; jD}M1kQ_Sޠ+y.ukJ^qL͐Y<,+O@X(VP}f-CCC C->5rLͰ\,jYURjn~>/s^Rjnn8Mvph\ղ"Eղ"EJ-+RX-+R-+Rγ"e9Tڡ\;1> ڡ\=iHSYhc2V`S}|MqDW]LUR:jՑ j՗)>](>](>]>~p~lAE[>;>c>WCYbŪhUSY9=&3'.T)Wֺ%frvpNlmJՌ@6%fVe.U\RZ\TKsKer.>S3dZ} &gj٨o9uVVmևŭuw0աX>F}ˁC+ֆb՛XաZu~NV]>@.ժ{sҗH4`_t6l(V}O^-qTƳ3yRvp!_&noM)>7DMy:ZFM[Iu>n=w}g޹>5DZ8הOݾ$WJrVKjۡZ-u$*osX;>Xڛcif/ժʴZuijե}N=\{=dcio>XUG2ժZȶTǙSxeûP},VK{S},Mɫo_J^U CgbWŪw%B3hNlJ^rCZAV7j=ap]@^=cn7[bDȦj9Bw:fjA)nI1kQ_SsijeeTnqZ-oZ-opVf. j2 jbHZfahHɫL-" ժǐ=MLղ"E[R}KFMҾbb_*>SRM}j+~ZVC[Rjv^YUR}n_"d)VK,j!_CRM^qCqjGo *Yy8RzG zBy3 p[VH 6o>~M~+jyeZ:Zu^I9۬]&UL^%g*>WIɥW~9zXM8=e?Μ9}SJ^yBDci1dnCnXeZ}*>c-rP%ĢRܖXtN;>,Hf9x(Vy>F2ˡCʴ\ʕ'/TXtN?^35CǺ얕jRz~Pj^Tnrn٦n٦@}v;xs?nT%܏ZM^-cR1[_urSjƐb5cM1䦔(oc}R*V4Z9Tn)V)V)V)Vڏ۬-cR?(ժR?(ժCe̤Z4>;>SfZ}vZcZeVJ^-RTiqjr0B1y8CjN _>ƢACj gsZBɥYiMMɥuQW}8Pݺ\uoP[qS7iri/'HZj1>6p[K.jY!jY!*)>srKSriCURr5q{S\-k?㾬ojY\ro W)4ۛb5ۛ3ۛg}YI.%R:B궔vnK^Jқ{m)VKoBUR|f%ySjze}Tjs^RzK[yg};ggYRg}{S} .}V>}Yu>NSri8M>NS|Ӕ78KKJ^-=/nղk51CRvZޗRr5=ZM꣎j ]f/@SsijL'nK0{K3,Ty9ө>S/Tyޗ^}zMɫ6jzM^jSjzopzMT+{^MT+{$O)op9S3L/>S_-'yνjnX(>}Pr/_,\y788Mq>4yZz.IyevI2$j]<}ǑjsRznBUMH ZZgVK}[y9#ſ_w^H2K#˕W=gG2,TIRzT^)ժWfJꕙͱ\qrb.IZfX-KR٥CYkѦX6ֹ>֢Mfx,HZvaKZvaKZvaKZva'Х{BҾ*?,iҾ*Ua܁ϼeTnUWRzL1;_bHe}\3TVZu|5p(cG2soBяNό~4gF?Rg7t-sZ:7ֹVMskAZMHZέb[+j7skKP۲JղJղJղ1қjխTO>7X"d)VK,jrֽ%B~Yd<)VxRX-'IZN{xeMeMeMeMeMXc{P}hqBY>̘XtVYڇj}VY*ve,Sڏ:*Wf*Wf*Wf*OwVPrdV *ZeRSPCݾP}uBo/  Vj|Po[_VT8 Շg,TZì%ϜwUUl**;=rPzd(V=c21UϘޡ0Ttd CZAw(@ g^6TuvBq8PY(>,q2ϥ2B^(>F y!/T:nRo_>S_u>T\zU\XX0~U *lLޫ W*l(V*l(VIvW -)UaNURZIj rCVG2/\K֢M rcZIʳ,&Vy:PtʡZY7{c2 7T3,w *o(ӇY,Ba`3jս jս Vݛjսg:q!LX-=/)VIao0ַP}yqB+V]3VۥZu ժA.BjMHZzRބ7!jMp V T&c,TcѦ؛hϼsG}RzAU3HqV=uU #K qN Mq>ХUa DZNc}Mq>{gPr6|V9>T UΆK.*>S'gLݞr/ώX%= = = gUժG?LU~HV=ɫnwKxBws j'nUlV;Kmo=:~](>/P|<_tLi_zRzHUI"V=RdRF}M1kQ_S}-V~M1j`S}3K]CZfL2$*)>3EyժvjuTۥuN39V JoPUR:nj|:򂗼rջSzP3w k+w -\rB?+w -T)W˜TJ^T򾉅j5U=TEMUǢR:jձǑj}VǑj}V9pOR4>NS}4>NS}gCZu ժcV3]]A_-T)WV)WIr[KU;>+l(n}VP0~W ժG MU@} g^jj8 [42'miqf&-u2sBHf[\cɥ[J^XL\Srifj52?(mEGTE3VS&job7%b5ˍCq˴Z٣?yCZAjPݖvz2t۽1dL;i7TyIw^nUG?v(n}P[~yjWKmDK/UR_͜r/&B=&Cͫ0n=!ժG?^.`Qw/~iC}v`Bo;_>`o>~M\qWoF}R\IꞗTyIruiKvPU+V]Z-ʳ,TX-}g)VKYwbbMHZzsgBWgz^MɥMzPU<<>yx(n}0✖jRjRjRjRj'o#q)VK.jۥX-q%n?M ]3x/i{ȴZHT)j#EYAw[0H5UR}[0bշ` Ūow{r%ws,+ws,T{T{G?Tn'VKjۡZ-u˭ӤU;LݞT{o(yT)IҞ+]>S3,qTۥu.խvV&n?yȤZCU<>y(V}27ZJɫeRR_\jS}\f-ru_Z癵lW\*V_%DZӲPJ^- - - - OJ>V='jgaSsi%jEgaS}\z^RjEu>S.=/yDjԢKL]3H }=NWP}|CHƴZu ժ#VyIr57/TkN5CSs\55,WMTUS}lHV=$ժgZT^y5e e e _5%f yjլlhS}lje,z j=zӚW]_ITџ=x^漤X% HZ-op漚3op;KZJyjj.{-ZŪɫ> a(yY/TɫLURޝ'!OUMHu^n=+խgxϳbbg7cTҬb=/ RyV6gZeA:8y<8CSsɸV:/R:;ygWIyTigIZJ34gJ2'm;_sFL)L[f⤸%gJ2wz}[=VwlMq޹)VPri]fΞγ'>Y-bM*֦*֦ҬbmլbmJ^M벬>Y c2BZ 6wG/YRՆRՆRՆR*>Zu$cZ:njqTd>zt/UUߴunUS}KsX-1%fb R21r6Eb1-V}ӤjY3waC{u܅P}\eZ}\%gUReKG}RAnIuO[G}应v(VIlϼL`gjeTEZȶeT>q$27!jbMHZ&.37qY.IɫeT^A'ժGդZM\&RM}7 ժGLUI}Xg\ϥJɫed{X_> .#s5;_./MɥҔ\/M}_Iͫ|Pzvɿ zC7K7}.TN`S}rCPzִZ\TKjxUHe,TcѦ6X)4&.l)V.l)V.l)V.l)V.,R]R]R]R]م}{LH,@S}gh Mq)o{LXx{X%gjbIZnhעR7!->5DZ撵ܵTEZu-*ժkQV]rVe} vp {(VwRcշ`jU߂1c(V} PA~]3x Bi1iLS}&X%g7Tbu~YURqc>qKH._Iͫ%)MgG/jdf5GaG/5zR[J@rvlό@6gF 3#Myws_b5"Ŵ-MopYrq"E{\VHZ6j"6+RR rBC}V;ky[3HZE6c$i1iuPoAUSriEcTUS|swv)Vz)nb)Vb)ViYp[3HV]ڥZu}%ժ۬g-X-X%g34g34z۩EZTRz\vraT3,7Ūo~U>ߧfX8R#ժgLZT1M[>NS}/sR78}yb)y,MHZ&27Me@Rgn>F}M1kղr@ղr@J^-+A׹#MsWr+cTf<2Ì걌T8 /Ӫ%j7><..XhF P| P|;)>̝:|μ>7ؙS|ZV.>-+bz5|1nmۡqvhƸ=78ο~O\iX=qy޶}ۡXUmv(V?D#ޞ{c4.XQ]|NaFYPXy[(V^VfY{Vj8q"4VD-C 8OwiYdr8_pۡ#ۈCSV#ۈo7t-R|λX۹);e5{pCA ݃C{cQhjEXXEXX4ʣP<~ʣP|%ǯ'chN=hN=hN=hNoϲ~Uh'ъJi|B=XݯX5zh3h=4VcYnw gP|+}wAzl}&ڄS|XpJ)Xъ67+oE wS۝)Wx?`ՖXy+ [Q(Vފ3E{7ߠS|tRj[4e5n]z^3N#jFMYH@c5N#yz3@c5@c5jǁjy[{B7)>mFf&4V#343>hjq>(V>Kbܣ8q>4V|h X?v5)>m]|ڶ+ŧmRJgdzXb|)V/|5(>/8(>Ko4V~?NidF?(>qYXR4+C.J<'O.<\+?y4V~p Xy\+KcsiwRtŤ+bRtԗ-+Kcsiw.Υ9[VmXEK})Vb=NL*/Z+ɻڻ W,Jcį;ZPFhB-C(Ve`gq?(;'=Π8VKYj)V:n/JX=[}}QY'A)D?rtKcg +V+$5e?Πd>8(>O惃VǢhi|,Z+ǢyL~u|UըWE'cAXtP|:O.<\+?y4V~p<Y76,JXi+9_$>(>m+C.JKd)V|qf)V^{PmXmjaS۝RJq)>q'޶Cc4>3h|gpkϠж^^A_ŇŇ)>W/4V^+_ /W-JqJuRt+]~1b5 AA(VohB 7 O=7] /JqY4VwYRXŇĸŵ+M.V>b (V>->&l)>&l)8RO{gwVO{g:>b5`hܔ*C+/?4V~wiXߥӿ󼭨VhEYD'A)+])ǢvP|ڊ1$ﻱ3KSV~&yiL<X/w`(V j<^cbsgh1w~uVsg)>Xq^֫1w1wm̝sY8yNT)>}+ASXɰqPzr)Vc$:Π!9$yXb5PH&b5F2p: 7 Ob5 7 xS__w 3wg޼b@ěPP4+,ϙM{xK/ȻXlVW-3;h|:wӔRgvX:M)uF+zX8Ū_p衱3zhƌ1j{mx;(>d]|8ŇӔUgLο`gNa$~A?+39=+,o1fpcX1fpc0H^VXbKP|WM V]|X]rKNsgh1wj̝sMYug(Vb5zΝg;X[1wj̝)1wm̝y^A7(>.>JimWOk5zP m|PƘ!1f /W-s^<~@(V3zhj衱3zhƌ1jcP|uwczRJmFѶs研RǢ#shۛ9ÌagqNjmťXQY<(ڮb'b5j;9dUkzskK湵(>~*W)Vc$ӶKyȥXUzj)>YaqJcgywΜ㢼7wVO|/qHb5`(VwmΡ/،l/،Q5(VcFNASJKSV#Ow6dy2Xè)>蝦8" MYjį+hF*wjW_#w=NWNimF8} MY4V#~MY4n#~՛Cl)>)>RJc MY-c}7Vc̻sgh9x 7(>mX-c[1b h|_je|6XlǘAa6l)>&^u>{:b5Zǽ}1m>Cz|t,:f^7<ϼzo)μM4nc3/hj̼rs7gb5fgpO[j|3lgpJ) Xu,ERJr_rS_9ŊS|fjb+~@ W#X)Ň)>WNrssqXۡXqq]y.߅]+ 4VJSJ]?G=4e5Xz5zqUȺbq(VgRV޶C<ޅlֽpvx7>=h|urhYi)*ŧe4Oi.Ҝm,8|^tq3JX2V˽ϴ c64nc64Vc64Vc64Vc]عmvcQ0wvcQ+&Xᅦ /4Vc X={UK(V S|UK(VI9oopq)1ǁmqssks^Lr(Vfc3/(ni&S|㌙9+'۶8)+4n~?N3n?G&yo4].>۝ø)>m~Rqx7_ǁb5PF8Gn8Ӷ,Y+?33XZ*XARb%3JhWJS|7lv$3ۡXQ_trO[ёG}Wۯ0A'K,Xb3z(VbP|F;C=&;Ň~Ň/ӟ ҶKSV~{iX辰=7k{j|:ŧ_p՛ǿsk̝XJYϝϝΝ>՘;Cc5X34Vc{)+w)ω!;ŇS|_9ŇS|G=+Xy {g(V;_ͺƌP|FgPF}#3zi|:w Η PyѶ6PFν)>W :(Ve>zFhFFj'AQ+Y G}P|uu5b2PFhB-C(Ve+wT OXjBc5VxP /1 S|RƨC ДءWXykPb5 ݡ(Vcpww+)P~Ehܔ'_2;fg@-C(Vej Xg\^^)ŧJiڄ=:]JY*6ګPF{hzu9N(Vc$íӃӑOG2JSVeՈ@Bc5"и$4n#y5y$QtOk@B3j{#N)v}v+ 6ըۨ gPpOkOkR|ZەƹД8q4nhƹWm&zS|ڶ}PFը7qycX(Vc6}N)CGmoS|ZG JY5rƐRV#ۘr)]~Wcij,X+4V~Wc6ѶsW6QپF=&Nim'@qm|JYL'/Pj|FUk8Oۨq7~8_o<_{?yXQ޶CPmbAP< #EPCH]BuP۝H)>vP۝z =v Ac5VXUh*U{ۡXۡXyT ϝ|>BJi|i|i|i`whbE)VDbEi1d(Veewiˠ+#EPʳ,yG# j9ŇHS|9@# Ո!CSV# Ո!Cc5bwc%#P, (VG 's>b(V P|n@c5bj'8Oq {DkXf9ŧ#Z j {=)>qy}Xq{E)mEXUN&4.zlC(V 6.F!_{sƧ>)냦F!7#w7wX1Bn)e/8b}P{RJ!X7AX=vASVJb>N!4Ub5W=)>mGT ՘y5vݨSJ3U6f^93__RVc|ըS|Z]JJ)>_=qX=qДwwO="EPF=qNkDX{dFRJmFL_5RiL3b2_o<&=zLw1^9XP(V~яψ~@X+_ǁbm;+o??ȎI7Bc5n&J)>N!;3b2P|8P|8@~^b5`s //R ϼϼyg^n~ϦvϲjdfBc523XO33?#3h .>mRJd>c%+M@)+@q 7M|U4V#R|蝝C4ԨgDՠX&X|>F}Na64ed>y2NSJ=Oi|z<X9}W#4e+"Nb|+WNHgAc5RFƧ"XP(V jdzrSZV.VmF ը_9^^.5%Rj?b~P)>/'/i/i/i/)V~F^7@qA(n>KsO>#_5)>_>(Vcs>O)rJ)gB6j۝Ci|:wh)7XSn=;8Д՘@68PFSn]|}P j|P ޥػ%%%%)|/Д#P< #߮j84Vc 4Vc 4Vc 4Vc˷߱jW] wOkjW] uoWÝRJmƺ3Qۻ4߱JYydۨW]wvJ)^=&߮~ /4Vc4Vc+иSOo;@c5@c5@c5@c5<]zƚW(V{?yN+-[XjyAc5ּk^X)Ň5gyAq;+Cq;+?>/Cq;+C۟&1j& hl1xu(Vb8P|Eqq+oEXy+ {g(V;?gY@c5βje8qӳ,1b5ګeWcjW9<^KRUR|3V)+Xuui+r?1b+(nUQ5(n>zzsz+_A+_A6q4Vh X6'l<]{ъv%)>mъ,gdG?=))Viyo| ДոA{S|$ h(V IR m|R1K}:KuJ)T(n,i`gϘBSVc ۘBc5fД՘>ͭ}ƩXSOBc5N=jztXzՙS|y9Ň|μ7_u co81g74߮M8Up74eս8_Bq# wU{q`WL'mUX Or?{-K5Rt+]/J OfĠt3RtF_K})V:v_-cR+_-Wx-5zVxߌAiGi +=+WxKq5RFCkɐ:(Vq<1!u^;֝'Y-YⓕA|pP|2 ~f)VeΗAlo,j r=qAcEag8]]*j8yb5zPFCnmFkA *ŧ_P)>*gw8pXqᠱlAcنV+JWLJbʊ5b2F)>C4>ɼ<ˢ4eY,XyEi<"[VI^+$/g3KcyzP|Zz+^)flۨL:(V .V+Xy?A(V>x|y~{ dwP|;(>Y/(j|Ar?'KեA܏R$cP|=܏Aa$bH)>Ƨ׈Ac5"EXH4V#RՈ)z +yA +@׋={w7o )R+1$nҔ-j8~8ŧ m{ |Xy>CiJ y޿A[QgpO]|7wˆ8^5g6ګO ~[O{+TU JAi2R+h3R.Vb»q󌔾7H+߅]ǯx+_A+_7PFmAi?~P)>~])V'3(V~])ns1g OG#&ۈ@c5b2d^#&JX3b1(Vy5&1(VcޘS|:1(V#xcx r2ޠXuw(b5ܡpyqS|;ŊqS|;ŇVgbwX+WP^ gP^A+_Azn{d:A +_A=+Wf:GT XXޥ=jX4V#ՈAc5jo.+Xy {g(V;_Pwb3/(V>b3'l9cQ;;Ň)>EƇ,Ac5"EX.˱]B]ByNNP|$ P<G2f:}?Nb$F2Na$F2NSJɯǐX8HŇS|<hF 4V#O'ȓy7O䭖VP蝛'VOYeߌe)^qx7_A`#ENj{5"EPF?HF'4V͓q8MY'C|3gP ))jD"hF)zs>Ch8aP|^mX23 OG |A_AcƯ~>CߠPըW_9ŧ~>n{@SV~hߍZ;@KwyՈAcQ#RjE)z;:?+^w9gSV3@ qXW8r4;_XyXy|9(V>bm;+oXΗc|OsZQ͓9F +@q;73@q/(Vct̠1R^"(V^Aj{5r?%osO+?4n~rKi<'Z{ XFލߡw]j<u+(V7)>~h)V>:u+(Vs X+(Vcܨq޹Q5X+ŧ])55\o׿?(vXͤqIK7ykXqàڮ2ĚW.DAi'b5惜4(>mG1DAimJs*QV(ŧs١4n~Cifmƞ8(ncXԫ2aՖanF4V#W j0A42ͤXq{s՜Ӗo& }dASFVA}dݖըWa֫mG^5+)z5 qYaXIY(4e5и)ŧAt>W~S)Vc$ӸS^X3B[FըW=)VW#Z U .Z?}Ňz#K)>+PCr_0i_)>8N :Ň/4>&έuEƧqQi\iM[5.4V:UNcոSZF\/8PܼqQ(nMJwC?A:Ň~)>fg|AƢNa,N!4>G۫Ji|BX)O(989+C>(V>ǁb3t_;1ŧ_Oi.WLx+_1ɧj_ASV# 7?97!C cP|mRORJ~kO)V>K]|%ǐ,֞QgP|Z]|2(ŧJi| #AȠmdA62fН#ǢP|םXlTjPFШS|:jPF\sį9M)5Wi4>Usz9WДhwqm;'ZUv?:99Nb5UWNa+8Ny48PRXyL՘p_j1Aa)>̝3zfНJi8Ji8~R)e5zqBq=N(nޥpҠy}PH{OΑmAc5y}gbPy}Ni3b}gc}Qw;;JbwT ըXg9Mj9b}XS>hFsb5Uc}NHfb5΍#w6)ڄSX1j>PF?XSʗ+AAS|\#3dXXFdXHA(V>zV5oj8+N^d Pmby}P:ONSF8P|$ͣPܼǹNwb5ګFkw2FJYz,VR+SQFjiJZji|uRj5X) mԫf:Ūjd^b^)ŧRʪRZRVWhmи q@6n+z5bPFޜCS|gpjZ(Vi)>qFqy̫NvLhFf&4V#3j5ДՈB6PƨنNw>hF^4V#MYy}׈B,V(V~+bbY>(Vc!b5FȡXrc}ȠsOȠjdAc52W׈@BSV~z =PH&1i^5b}W X^5~uX5~4V_9OWNz~5BPƸ;Ūq~H5"EXH4V#RMH4n#Rt5Rt0(VWLXj8+_ )Ʃ\PFHS|Zǩ\PFm\r9Z]:TOҟYc-Ya_zo׳,?xP^Az+WwW_A+B +_ݍ_T.(V>b+3@=οj8 q4V_#&jUϿrO@e՘=b2wc2NSJ8Uc2NӘӴ otbE+vXѶ;Ŋ=NJ)>TOR|è>|%+C4V=UizS|UGъ6W)VmEGъ|A~ܡXV4h(n j~\A9+{sՠ)+^^^Q{=PF^X^z={wSʪJŪjb5U3Aw7)VbŨ)> \{܊"Bc4>=Wi|zS3VD(V>nb8P|uߞ?YNӳzV= X84n#ۈ3@6 w3X +_bw3b5U3z5PF{{ֽSJS_9Ňԫh}Y*4e4>=i|z#Ogu:&)㢼wПy3Ύbv(V^ۡXymt> PD2N%"wTA +oۡXyw墨GgjyhFn&XyP})PSﱾ)N>{gmyhFnTh(1JjRԻ3qB=Ngg j8cuwZj3F^и9/hƜݑ=vCSWc:4nc:4Vc:4Vc1=v(V v #nb5`{-{7nwJ- jYݲXec&3qииPw~:X垿og4e3fXy+(V_AL3fXyc(V3@h+3+3+3+3+3y=c/+oXh&Xyt3"d(V!CGPo3֋>Ƨ4BvFNFu36b)VNmwU+m;@}jC(VeP q YKhƬ%4u5f-qXY˧k j tO[hO92YKhƬ%4Vc3VASWc4ncъvi~oq1j& hhg.Am{GNop.Am{=c>sssggd'نmdq{➇UψۡRP>GS6V#n?# j۝CvRCZJ>(>i'm$O{ 78(>'AopP|2kO'8(>y O VS.gKcXyf4VYϐOQH)JתbkJ)>+Ri2|2'#AkP|<ƐX)ŧA7H+ J-74n~Wci|ߠ****+lb5}^gP| gGfw w J)>mJ)>m|a)VeAc߃*2p^(w O[?;4V~vti|ߺu}XAi]RF]qvt])պHJc姑O#)Fr 6I-qJd3(> OV O89OW~sV)VbR4Yf }{W|ɱ[ecJi?4{2o*jUojٸmPugb-R|ZW~ki,|{S#JŇ*{Y|hE_"+b9R4Qf=-kXCc5vhFj/)lm>u+]\C.Jq}+Ϸb9R4^KҜE=!Cc5"dhF Ո8>Jb58i|82޶Cc'!l$X)@O߫CfRt~0|+)8PwbYThMFNqS|y6R^vfA񩕟\+?4V~JsiX)>gm;4VmjX<Th|2O*Zg-=mAo*M])Ň)>NmP 4VJmPƇ۠A yJ)>dCN)>䯜Cs=+Xyc(V3w)CW{7o|ֲ+)&qYePqJcqJcqJcqJcq}gbA(V>bA(V>?83G^PjW9(>,>AWP(Oi>}BAw({zs& h|}r|}i|}'=Go$_ȷS6V#~6~WPb(V8;~NQ.1wvNi|;;ͳ6XqS|mPq۠=QX9ЛŇ'e :Ň'4>]9~pΠA; wC}Y\+4V~gqiw,~mAYK/Z:Og-2x,mƪ-Xep Ncuh M]qSP>='R|^~R<'CY<s}P<'$ZW"PNaDc^jW|_|)|&㖱Aw(_i>}B'Mءu[ŇXC,bQ G+?+__WA (߫p4(>^zg;;M-qo>eƇ3~gZq?NiFw -ø4V#qB}E4Ň)>N% o?!y{(V֞-g: =Ň)>8NSK{䯠Xy?A(VB~~pDR&XMʥ+rFUn`񶝳wrQ|^)ŧR|^)ͳc}>{ŪAcŪAcŪAcŪA~1øǤ{L=-C'R|xN :Ň'ป+={+={+={+={' XͤIKc>A%v5gz Ơu+v5A+oEXy+ [Q(Vފ~`4Vcec5~@c4- cP|&JX` oOS|}x],>]Zb<>ʢMz&ŧOb5+}b(jWKWc4jW]WZ+/vhRW}bJ)>}'8fX{h,4nc1 {(ZW>b5`s}NtK-&9J- jY'Ο2pn͈d:G4Vw;Ūء!CScJ{泖P2+]bKP|v .}C\ji|Cv搝Ƨ9dyh؅=(VZޮ2bըoU*7Xu4e&bфRj핟[J]#zXtKqMV_{jNSW|꽖qJc_Wc +_eWY@UP|ŧyX'j<jb5`|Fùy[;h8vpnygȽ0>\ 9v/1+@R+@B $+@^G?|I)FΗX/;_B/opܮReD2N!qS|]c4Vc4Vc4Vc4VcՕNş`W:9ŧ-ŧ-ءj _r˰jˠ+W^ c64VcvhBxX%4nc<g-%u5F^]eP|2WoWei0F^$eG]u4Vy9M-u4Vy9ZWc4TUJ)VmEbպR&r'M8UGNcřN=NGNj]b[6n#BlF M('RF)> q_ԛ2zàR{-U{%P蝹Caw( +P4Vܡ0(>w5~ŇrujVPG2+(V@HsJ `P|ZWZ֕R|ZWJSK֕ZXK6V:glJ++ӺROJiꪫX!CUhFLٸ!  1՘jݝOoXLS|ZWZ֕Rju5漠;1ۘA23P<X=+;um)E)>d?C)>d?1j&g:Ac5FX=漠XyXyrCǃP缠Xyf=Ac5Ac5Ac5Ac5]w)ź>)r")r'sksςG=)>;;Ňyg0w= j+/S|h>P(Ո)Cc5vhF;XA;ŧVޡ0Sqzt8_B6иE/jPmbm;+oۡXytڸ hǽ(ec5bQhF,{gz/zY|C?4>n3ϧCb5 O!sj$,>mbߠ7)W:ASWc/4nc/4nc/4nc/ӽR|(ŧ=R|(M-uO3bhFۈq14n#f > ''b壉?h9zgNԈ?RKmǩ9V ǢP<RWBqX] dJsJO=W- S`)V)*JXi+<|,J`)VK'XxCc4>|'+!lObA!s9ACyC߹4V߹4V߹4V߹4V9 RF~AUXUeUUƇUŧu#Xȫ4V>*Jc#|~!!J)>~Piu;A!Ň~pu_+?4V4V4V7ӊ6RtGU)V[+-[Qy3@c'yAIaP|^QW*?(> Or}ӺQ4Vec5>jD}XըoߞRD}R{ըo޲X=d>(>},ԺROJ)>R(A6>hRO^r"T2E1?+^-c tutJ38Ň)>RCo+JWb+RJ)X銔|~WGώ..K-+_9P(J~bk?JҵCA)Gj,@7ߠRyVW|%yi|%yi|%yi|%y{+Ke+ϪAڋ䟗R ~Wi>X}^M@UhhX*^u41H~D)V v41hY侉 F}RKRF$gyT>*yJcs^k1b5A Of-Ň':< Ň'vc1 ՘j@c5fZ%vhFojۏ])Ezg;;Ň)>ѥѥѥѥ=ʳP|&gՠXL:#zh|G'4>C4>C#jĢXXBc5bѣ+RRoR|XX|O>nW)M]ҸR蝦3CJc7o )^ѥqUXCŧXeѻ9>蝡߃ ^o)O?4V~:eiCzg<_+R+bPƟ {ŇCv8XyNXdXd?N)jd"hFl8)c5ګf,>?V́^'G\jn >|j䯠q+hFl+(V +_A9r2X 4V#'@c5r2gs2~+>dmPX`s26js ~N%v;;=(>W^+^9ŇKLJ)>8Nq=S|F Pbm;+RV)>}XYa=׈Xy{R|dC$>AU+U+U+U+zQ(Vbנ3xY|C~+RO+RO۫C4V|7X1v(4V~?NX/߱^+''7zNQb嫣XŧRjOp;C=+C=7ue渽.XuJc֕SROJ)>+ ^mEGv(ngq;7ۿ7Bc4>۝Ƨq4nw}!C6"dhF ۈ!})ՖK-jD2ӖaD_?9qG)G)VqE~@XzYEbE,~C9z(V)b"(V)z7n|.+ӺROJij]Xy@ٸI-7? 4n~B{5vhߖՈ)Cc5w bkՠXZ5(VV U{w6=VGCWP|G^ﮎ@~Pb``e8Ji|ow۝Ƨv6Ku mU(nm rAmƇ6Ň*j]~P)Vm:9)X1?8a#نjO_\+?a#3vՉ^W]e Z ~kO)Vw֞\44vnc4nc4VcGeho5U~8ŧoB`RW#f:dXX^\Q(5C[G]78Bqh:u9"vNο=ew/X/M]Oϓ)jDܱ>(>}c<\9s7sKldks?A4M4Өo.A٥}XR󷽳KNG1ߠߏSJ]`RW#Aj?bF2c4Vc4Vc4V~L߸N9$O0W~'ceT~4 :ŇߠS|C?,v.9ŇS|x۝,tyQ+yA+E(ӇX4VJфt44>M8Ň*fk+N"rS|hEV&C+ZQЊ:Ol'V]4>]4>]4>]+zq_jiώ.s2e<'s2ʣ>(VAy(V>X8hL4Vc&1՘K#[+yA;cJh8;: j=(VqZ ΈyAc5f⠱3qиYQWq+(ը9Ň8R{ ]A+5BlRK~Pic4M]jP|O4nc4M|:]P|<gLXX UvK4V~Piӷ*M]]Bob5Z4V%4(>}͔%mqfA{kBNmsP|x۽,>N޶9(D?etS|xۯ{L{LRmS|ǙP| +_'@SO/] Q*^b(eP<'su:KM)ZQЊRK e`K D}v2EPF~+~P{J]*^b5Zўvj8+ qV5AxۛryuO5Ac5r2X 4u5r2X՜5条XjN)>dӺW睯1 ~@SW#՘wmd?z;pVTVT)>mE潺ȪہKSW#@ٸ<4nc4nc^o=N NlSWkuuZ__yv3;KǬ%eqS(nrwqNQ,^N!4uskǝť+A֕Qը[+&rWW1(VԕŇrJ-QWNe}P|;CP|bTh(1JjRԻT;qgq)V,V^A`,9Y<(>},>}Ji]G^ԕY\74n~gqi|XXR1S|w(@c5PjܡոCq;r+WP|&A8(V>w4{P<b1+B!{WJ{WJ!z vXuXqO˱➸A!'3-{-)hErۿhE{)>mEǮFhjjjjdzԕXuWS|_9ŇS|3ہKhy}wɔ{qRF$e|:dhjlR~01Ai+:VB(u,VOW?|<Ϡ[OA{gXy]A3++(V>v~:v~t4>;;ONӱRy^(n@q8Pܼyz3Bc5Bc5Bc5Bc5>ݗ+^9Ň~)>NZqyiLec5f⠱3qXff>(>R,>q)DPjؗ j ݗWc_Bc5FB6F<8|P|~|E Ѷw4Ϯwm(V>vbsP|?=gq;4V#njX?s毠XjZch|wu<{Pj)u5(VAJ] OquUU)V^bU)V^֕G}4VʣXyԗ[W>cRXi\Xi~|lxi|Ui|Ui|Ui|UOfUi|Ƥ4V>cR+dD?(>HY3ۥCJc7o )~,@i<*W4V_s  OzAI3(>qŧ-Kc|{i<ߞƐX!CJc7o }~r)Vc+bRt$gOƃ$'Oͪb5u2⓸}P|O[Q_'S+ϫ4V~Wi~Xz}^߃C]yY|+PWNmHG2PD}N!sZ"חOY\+ 4V~vi.X]VwJlm)V:/JGX|OU4d:(>OFQ2|7Gi|7Gi|7Gi|7Gi|7G|+֖bR4[[fk=qͼ2'AÝ/ diFLX!CcPb1+Xy̐[WV-rǷ,.G^G^P|"/i!Cc'8JC^tyAi]YX,Ai]X,luYƇ,gY βFx8oP|;kY|;+ŧ|ZW~oxiҸq{K;,VwjΡXޙ5EԈAi,ei,'b5+e;G/ Uc<Bc5ƃ_z'^ҸRF RK}3wŧb5vfBG,eSKq=Ƈ=&{L{L{L{LŧOpX!3b5bPoxqBcߠR|TO[1b5Zи=e6FиgDkR)*j<)jYdMQV5EO)>Sq(qXy+ 8Gq)o)>XoXjޱ>(>}#;GY|G`MQ [\=A% + #c.AqXy9||O4>|i$RSw{·P s}P<crWXJMb0p1S|^3@+ŧ핖ŧRgb1+q*^5pj;Jc;Jc;Jc;}t*M])ŧOP)>}JTgCqO0CqOُc̥sXTh\*4Vc.\3T~>C)V#f\S||GNJ]V Jqhs2~8ŧ~@6X1~@6P<ʳG~@f?~@f?߻R ޥԕ]*]*]|Piw bk K5X|ߨϲ(JbRK}X~|{Jc{Jc{Jc{Jc{}>S+]Zx]F}ZZUX'ȝzӸwT6 w0*_tpޠ sܩ7h|SoP|Gg?XyhE9sPɌъv=S|ڊъd?|GUJUd?|GUbU9cQ=A/O7(><-ʟ eXǢP BM)S|EC,bQ2~h)Vz])V2E[+џ]q +oۡXy{g(V;ɜc^5'vqʳy|ngԕ Pmܱơ %KH >{j TCOp/~cMSOsoߠzZ+?4n~iiop䯠)b5ܶ9(>Gh+hF j䯠q3AɳAi?~PiOCo0y619|o====XMY)ŇS|gzťX~wbowb5AvŃRJ^RF?AýY5h~>UX8}6V~?N~o?b5bf՜~)*jΜS:  J)+(n rNѠ?gW_Ax+ 3hg+Zs䯠Xy+ [Q(VފBVl+h~NtӔRW_A+_A+__#ʿA(V>b+(V _#jԫ毜7AAWXGPc(V2@9WX4V#_Ac5WgwTcG+_W@ՆP{LruFAǤ4V~miX=&h;) )>DNa$s~>+A\\+ܮKE|4Vc4V#SAc52EI9(V>b9(Vbcѳ9ώS}~vt)V 6'A?;:optJ'hJ'hjtmt:9T<~P)>~O*ʳ'rzJY~SŪ+}~VXiXYaqJg~c1BJ'+X7ؕN]R"(ncܕNNS):>/hjMY}^gyc1fjBcr>sdXoC)ydfΑ)jd))jdq9stb5dӲgiYNgs2XjdqUG2c1)3F2kb~P)>w5.A>NSii@^c+o2ø'@Q+AQ+]=S)>۝CmwiJ'\dmەӶ])>d?1G՘mC6qsW1Gjԫ;ŧb5Uy]wJ)sPF+9z;8aJY,7bPgq}G6Ƨ'l8OOp4xKSV~uiܔbVO.hlc3(>XDk0Bvg@c56j9;(>+j[Q(V>b>(V>b壾oJ)>NuӔ*{jjjj>hƨ+Њ:ŇqӔRώLhLh)>ƪ_A~X wg28Pǁb=+q̼?+ _ _ _yc$jP jPH&yop䐡Xy<G2P<Uٔ!CSV# !Cc5rXr.ZS8N!q1S|qC/-nA!ga$APV9_Xy gLXy^9VCEXy^EXy^4G2P|$G2P|$G29    *jU(VBe(PVY^9Ň)>WNrylhwECvж;ŧe5мjEyQhF^4(c ͋:Ň)>NwvOkXFmJ'NPFmJ,*zՕNN)  )yz[}J{ƪ{Ge|(Ň\_6Bqo0^6ګPd +333)/gjmmmto77Agՠ?b7b7+AЊ~^(V@8P<6R+rRwb#d(V>Bb#d(V>BFA(V>Bb#d(V>Bb#oG}߱;>j}ո q4VoWq! 6~lC(Vl?oAShEC+4`wǜ4e5漠s^X9/hƜ׷s^;Cc5zghC?A)߱* * * * *Ua? :Ňo)>|NwF2X՘1j87g>(>kzxZ5Eϛq3Ahjăиx 4n#|S|ɌKg<>mqoxjX|мxƩ7<zo SO)qSOoFvhFoo9Xs @Bc5΁jk}7>JimWcimgSz両Qz両bcQX7t ooj{Cx+}6e>q+"gX4>Acߠ!:T+-[+!Y'$dJcJcJc'cՈ+mEK҈+mEKV4'ڊb+JҕXʁRt77wcu7H^t4>EyAع Y7C sE{ƢyP|2΃Ӷo3/f^+ͼ4V~yi6houȃՠd|5(>_ OA~ʳGiY|!;ŇS|ZRFA!їbcܽNY<ⓕⓕⓕӖg-K7O[,c7Pcg(n;Cxw}JcwJi|:M)5ʝ jD^<yAc5"/hFjy9Ň)>D^NSVr?UhFų)yAc5"/hFj;݊y<;AŧϘb5AfLB7Ȍɠg7跙b5An3|>O }i|4nJTOA_AWtttqtZb5AN~ײkwa)ޠS|]إŇ78_w)>C?FN!ϐ{eWXXX9Uc0Bv#d0Bv(4eZQЊ:ŇS|hE߾+]\C.J!b됿a1՘]j.Ac5fK.nbW]r=S|qè)ĸ4X)ŇS|_9Ň'wzYqɠ8Ňi|:zݪ8NyWQ8#%ԳjVUbY5(nUbYgSJ4>4>4>4︙gvvvP|hͤXyg WP^N|7G~mwN#4>zqh)VY< g-Xym~1 6ŇoПŇo)>|NSJkފ^AgtߠS|Zފ^7s+ŊVtkYzZJ)V}JTO&Xy mDиh"7K| #/(VyA G^Gqeb|5,--q|GU)VzM)VzM)VzM)VzM~osPFbGՠ^ (V=:71nSEmXsP<6CGmfAimΥXehe1(>|VYEX)D+:+ߩWAwWc&h8cДRת{B^)b"(V;Cq(7soo+SNXXXmoϭ-gx+bP| QV#Ɓj8X@c5bnsgLzOܠ8Ňi|>-1nƸ1n7Vcܞ(+ݟڊXXXj ]ʍ`2&ħmR|ڶ+ŧmRJ-XkՠqkՠqkՠqkήU;.!(VV)>-KhEK(w~ :(+XQVN񡬜dV GP<gXyǰ1S|qCb ^~Cw)V,V@8 +?W-ӊ:7tn4>=(>W|2WP<-cz5g-ck[Ň~ПbE?4e-cy~zR)V_gLX՝/׈&Xy^EX+cM@c5 hƜ4Vc+cg(V>jFNs^}V>fb +&GPܼMTA4V#XhMPg78ggY| wso9ŪXnAaw ݥK7to.Н ޾qB=N(V_3MD[tjXV4ъb5ZQn^c'a5q8Xyh|Nɽ{@9/(V>c缠X9q`jYs?tlƹ<qG Q_TN!JuwHq 4opFP|-z5P<ʳP<ʳw3@c5 X<4VHhF=!C+ϪA+Ϫ]e8˂gcjN!45*衱=4V#jDX>7Kjo%&S|:Ň)g>3h3h3h :ʪQS|^ {gY@SV, hYи,)qݳ,n흕YiJWP< ۘmZB6f-ƃtҟ_YLg-ٔROҔҔROv4ӿb78n&-+q3iA7wz/ϷfAwgwvS|ȷP_A)+Xy cg(V;zd VDNwvS|&RJD1 R|h7+ xxuOߠ>OߠRR|}G:Ň^04s[)z5fxq3X\{;X;~pԃb5FȽC!W'zmԨUUkR|Zە3EPF{hB4V~pb5j{(Vc!b5j{l4]F,>R(UojKmϥ_jO寯ٿgEsUb#(V>E5+WP^AzUo3%jf^+^;YŇ?Y50q-C&V Nep-S|hz5XzըW8ŧj疕WP<b xǃ9C+=3G?n~/^+=hTW=)>NtS|ZG JYV+PF+U>e>W9e5j{W/>W9opޮřw>nWRb3y͑cμBnM9A6+bsP<yg(V>nby(VنbI8+ i^00AX:ŧopl)>}0(V 6-s^V=;iJHji|tj2XS=&P7 SZR2PFAikXzŜW7HD"zX;Ň)>mJ'(V ՈtO{) ZVJ,޹+RJq(n^\L=N)֫q4nhƙ|F78نmjDX(k2 "t|5@c5@c5ۦINcՓӲR|ڊ(4opEV4ъ6j{uOk[_5/ꔲj+:@SVc?4nc?4Vc?4e5|;@h8ŧqU~؏~R[3t?ӼAZ(e5=)>ͪl-U8lSʊ)VWNr;;?#[ zgS|WN}ƹP<ʳP<[ OػG}P<b+=]4V#XX~<~fbc(V>fx?#b5FNaFNRu3ΠjMYS#F@c5Nxzsը=5)>,>JSV=y(VRVLrX,gb5j{ N)g6j{ 3<38!;Ū}X+gx)>c4nc4Vc<3 мgmXy3흕z3Д8qmd?qُ+q2tS|26Xُg24RAq%(V>|K}ƝДոqg14VbhƝO,~3(V)bkkXk՞b5bUssNa.)cg(esP<c{➑jd9hFNyyFN_5'W#'s2Os2ةjqU{}8JSة$M@e0(V3 U G+}XidYACVm*;;;;ŧO,JG}X騯+bP(jWy^b5ګPF{ޥdҠaҠaҠaҠ )X3R'Aɸ}P^IU[QUOkg?JǠX{Q~NcP|ZY*ŧ]i|8(Gmqqq>_RK٥Rt.+ͷ_{$<(>K'9A^<'S3(>+S|WN! +@ +@̋)^Alm~'pфS|&C{-+!C2+Xex 4V#'@c5r2X̋}^oRygYƇXŇ~RS|C?2E/aOVY O'΃yAޥl-4Vw...AݭOߠ*3ENi>P|ʳP<G}f?^#j~8ŧ~@m;7H>/_eۊ*Ҕ((ҔZ+?4V~rKi,|gt˟O缜Ƨs^Nz +@ 2= c]j.AcjS|Ny +X+]bKo?s O *ŧoP)>8/7RJz#Ę)VØ)VM~~X)OǃX)O(=|=<b=+qXy{7kC=b=+&Xy4{wWcUWNM;ʪ+iJK1|v.MYҸN?K*b5*QBs^o_[;4>ry9O缜X[> MY>y7Cqq4VJaNaro_/Zh,Vej X77tn4>=h|B뙢7eCGnAibHj8b m;XŪ=Θ1b5 XOgLcn1717sM}lw˖bx+__-} dj{k Kck Kck Kck {G~^_iޠW!rP|:BB|;r^ߠ RF?|w)WNa|+WNa|w~m?^R|Ƅg2+oXy{u4b㫣 ojۡRU4>6hJcjjjj;8?&X*V(VB~Az>bcQ(V>b#(V>=NƢʕ8O(G+?J)>􃇟4U+ePO[eP#cۡXy ȷC6и|zy)>D^N!rӔR3LjXu}Ni+:"/(Vw1֪I8M)uXutӔUת#Ɓb5ʪk՜bղ1QVqh4eij):w)zzzzPX(O{zvΡ,CbgX;;ŇqA+zПAYz?ȳkٵ!Cc5FX24Vc !!~rbA:Ň~i!_Ac5V@cA :ŧj̘@oǃP<b9&Xyjiʪ#KX)OGNSJ!;OGNbw;wJg)~L)VM,VM@hG'Ʉ,+RXy ʣT(VܒpH-+?#4V~kiNv(V>nƸdXyV:O#SmEޥXi$HJc姑o&33/jX}٥{xR1S|qCkkROJ)>mӲR+N_3@=+N4V"8DY]cu4g?}:g_y]]StPmbm;+oۡXy~mNvж;Ň)>|lCc52X64V# l_l_# sP< WAgWs!CPwbʼn9W@c5V@c5V@c5V@c5V\]s2+oXEXybdXHdxZhFjdkڋ{B}, A(VBxǃWǢBocQ0ucQRBc5ƢДBc5ƢXձ5lCUPƘŧ}پ8/XŇPƘ׈8Ѷwm{w_coNj0CSbco84ncomm綂Acmoo+(jV9 ŇNeG ՈRQ*4V#JjDw3&P|$G2P|o8+~ܯedXyg?Xyg?ǹߞJ)>d?C)>d?F[+(VBe(PFYuvݝ]rϿ<+3@io1`hJ)V8Nq=Ӽ¾ǜ+qXXEXysKǃP|#z(V>껻VkՠXyNdXyNdUO@c4>]4>]4>oI+XzۨWzըW]Awy)>dH)>d:?x<4V#3@c5 X<<íwj3m{ lʊ;{Dи=4n#FD7GDjFNiYըo?>OY;ŧϺ}&JYV4ъRb m]w蠭t]?sszވ34eENRHŊQ*4V#JmjDX(nz^(V^5JuOv}v/fL>c?g:iz-9nE VV 44cW& n4dgD0C,_Bw;&\Gƃг d<=+BJƃ??;~jM@xpS|hE7{C+YMM%WĦ0J2Ɓb8Pv@O8@J8г1d=+|2H&(Vf)>+ɄJdB|'6βXsM@d4=}y~iO32b_AqQ(V{4jE?M|d&zVw zV2=+}21=bWPv 2L+e)>iEe&2 mJ-7b^gbgxJ]96Ŋh_h;_3e=E%,缾(nۡX* nۿ`^ j@ڳP,\}+cgYzV2vg%co_٩jWPv{jWPv{NjXݿbW̥~e2bPw~+qYIzVwpS|nzo_2l|edwpS|enOB;ޯ~3û).wp*wpR|r'ZM+*#zՕ&#zɈzn2fWlC=k7'핬نb%m{leu7k7ҶhhYoVGe 3d =+;CJߌ2g%g%AYxW3@J|>ԕgg&?W|bPv\zu%g@qo|zV2Ɓqg%cY1/O_X9cMIax{9;R:ommXѶo,.Mg%>YIzVXdnzV27=+M\X 3@b , +Y=+Y=+Y=+Y=+Ytfx;$=+ɇ =+CJI+Q=+Q=+Q=+Q=+Qu尒3 =+:CJг-܌՞b8P՞b87!դOrnz>)>̥^8~)VD?6ŊǦX86+8(uS|lcMwPBJBJBJBJ^猺LSгLSгsg%g%ɈdqI{%=(VIMw\lx=4DEÑV >C~kGZ.xĮ2R7yZ{G7yZs".s M9єє99~2lj&qr#ۇė㷏\ϕo7a%ڹ,,,-%-r˒77&o.N*ߜ/,0؍G#vnm<~sU9*~gTen,vrvr$^T^T^T^U^hS񛓭ӭ_v<}af?#yX#y}އ >f}@9Gk)yOϞ?&g;xdӽo.+.\X\8H|<~{I@9~{Q@9~{Yߏo/+,\XX?{<~vY_?#VX|~㍯d or_6_ۜ1.OƿhJ|M£)ݟwƿ?{Coo),oo*,oo+,oo,d/{ 3Q>~eXƿ~-p,p4-^B{ Ky喧`5 fYG^K{Myd~<~GSC?9}~}?MGk?O쭥%>9~On_㓛ǯ>֚m>ں}u9xk@Ň<{QNڿ+??zX|觋s6Xڿ#oŇW<i৹˟<icϤI/<~'<~'߃@I?'<~~'ǃVooD<#colyr&L@Ni[Nh~ -?cmG{G,>z7߷ݙ#ooФ`ECpv"ޖCGCpCe?OI|?O>ax;?kڿ{썥TlM<~?scY|+o!8~g!8~z4>k͍p|O>{3oo+Gso+Gso +Gso po kg"Eyr#k7yY|hZx4r<}uN hb-N|+p&"pfyĎ"ӏo> ?ߥ|d}"<~~a?t}Gx.6ǟ}?ؽ6X,y v,?SqnO7_G,~_.~\6k5xOI?'_rsŇ\Z|ŇY|~m<~2>S~?'_r]'/<~}Ooag_8~Sqd"x 3Xߏ1yz- ݇6G-橸7XG,ͩ?2spi/hK8l"p{'b8~6_ҿm`ysm|ypl|'=g翜Ly'GI?ã)]G7m7XG,ͩ8bߏ/?ǏsG_e Mv.~?v)yvG6+_vu &>ks8~>ρis~o]>bml?uNuXۗSqm_v󖏦_xΟY?;9;iˣi72g}#{d?"w7?1x..b\<ҾP>Ҿ)g_#u|9boN5?IM?ã)Sx4%~$W8OI ?'''gx2}?x8~5~9~lO?do<~m2~{>ӿzNǯk7y~gחl7_ϛ/5.69~]9~fX_[߀GSG??ye$wr_6Gͩw'SGǣ)G8~G#k`r# ?v}._Gl\MϏ_g6#;yį{<~kqoecs|.68ճ_GW]GWƯUWǯ>~+X3+#Ʃƹ[a?N0,?}D?GƗgƯz6~y*+_Q>~hj~/yvKjy*.y\}s4w"ߏW,<~'/<~2>Oy(8~? 폂79b97^??'!xGSW~d 9#_!vcٕS9ǯﯭyq?#x$_є˫<~ҿOgx[ў^|koX#?[?[G缺>+ xd~?'_xd>p,?eve~ae~aszY~ox$~ OIM£)3ϾgYx>/j~k~k~k~͹x<~ǯwe|/E,k|hsƇ6ǯ姆99~l_/Keק_iѴh_y5y ?y8ќesԟρish8>9/og㣮#k_ol <~};[w׾m{s=]w-2<~r/<~2OON5J??'gx Op,1?_ ?z&x /<~2}w}G?/<~Op,p,or^?z&x]>b}-.?{x[|橸|Nz-~n|m8?i8?x7~3;yNG_7x;M~}?GӞ˻m>|M>yw/ǯ[?Dy4'_ov}8t?~h~]>~X~w'Xž˻7_LhJ?m_˟G9p,λ񡷭oOkI| ?'/1MYve|y2Eo?˟ Gsr889#oO,xm#eXۗe XۗSqǯwN/ihN/ǯ\,~o۟GYwyz>k»kMN5ǯ7<{<Gsx.;,l}ӻσk罻?cWG,Sqm64'~s ?]>~y??MG,K|h%>y>,7_y}+8_ѴWp4mk>}&Xbo7_?䩸ǯk7yY⧔ǣi߻>ǹ?99bs8~<}~L©F/j/M~?c_8~79[_֗%pl} ?[_/Kv1?b~'!xOhJM}zƗ~/G,#Kjs?kSuuukSm>|M>©? GѴp4-7??i9I?YF'[I?'O߀g7 8~~v'7xd۷K555gַm~?Ywєah_?gpl͟oϟ3I?'#x$m叅O/I?'+ ߗOϞx;?{.,v}gpl~ԟh?{:SqZ~8~#T\7_6oOѴoOs}8~6 m©Fv|9<~־t|G+Ov|y*O|4v|?7+˿w5yڿg}or:>p Gsr:>p4m_qx$7<~T pl.?=?u?_'{xd|?˟/]G,"?˟,"M˟G'u|zGwr׈/)KG/߬Ѵ?F_G_ogGG|2> OG?b7o# Ww [?1#FTx 1Gߏ#e.v3)_ /hFx4w|8K7?'pd{wKc|)gs8~6>g_<~?OI?d~|MkM?GoϿ9SG/ ?Ly4e2MC/?/?tc_xp/|2GS~rϏԟvs77WdKm~b\.~\x$?GGp&Xڿ#oۜiIIhJGS򿄣)_d*I~p$J8~_%?ɯr GY%(?'?OixO?i_9?!K}%QQy?.2? &_7_7_7__?_є=<ҿ&KxϞx;?{:xۣ#ursͯ©?є)壹w|4%3{?:y'GߟCS_:<~~t!|ߏCS|ٿzfGS1yҿ<~}?f;yڿ'1y~LO'_1y~Lǯߏ/_{8M~d_{g}CΧ ©F9.M9@? <~|3᩿ \7ʧd Gk=$/_ۿ_{4?M=_{H+K~e}K|ms?$~є=<<~6ϴe XC|:K/e|xOⓔ_|G㓛#ֿG׿_nO7X6O~#g/?#<~ker}H~p/N5J~p4%@8_@gO?k|}>?{?8 k@x7yM=!Ng]??~?lKy>oKv}ӯ~G\᧹˟s7ޟI '3<~OI|?^~f_'3<~2O/I'_~%??9? ?9? ?9? ?9?@_[_=ɏy?c_c X?[_M=9@x*,7yM΃vi_,3SyќN%]Kje|9~8wr:9~om_~m?9_2ѴkGsrbߏ_}Jxd Uxd~_kpl?[֯6>+7^#.Y>b%ϯOԟOhZOhZ_'Sxkt~Zr'~+UgW?U㧛/͹ɯkI8~Ss-> G⓿O~k~X⓻|ڿ婿~|ԟk'#i_·?o+_;9/wpkp4-GkpOۯů7C#ů~mjT\_[l|/s.N28 /S~->gK?Ƈ6XY>b}'O<-~s7?y<~x6Qp&X#w9}?Op4-~GѴ{<~vm#;yz'&?] l#MG7ѴzZ?'?x_?? f&_o%Ϯ?~>?Yli!xƯvem%~9_CO[7?[G7ѴMϮozZ|?'!x$>w?Cgxd3<~~?YAw_[|7??x.Os??x.%\G,G,9/ Zg8;Gs=k?y?OѴpl4?? O%^7XƿG,#؜z_SGShJMrꥇzarj8~rj8~r?zYgxdN[gx |є/<}|gY~.8~ z5?WB>eW',~ߜ_{~v?yZu)C_'gxğ??ã)WW/_Ư6Gkjs*߀OєAx4e3<2?ze|xq<~8?~ګFve|y2> {u_WGﯭ|v_jKGo_mWporbT\Mm^oyNM֟Ϧ| M'7xd#8~#v<~o}?'#xd|ѻw6?orĺ~8JVـnw_@` O$g eD>3*#ed9b{s6ϼj~_ğjFfjF3_~boOpbyh%yƻ߻b_ng|Xqn9>~Oߕ_}\?}/~WN5V~,ʏYp4+?_W pj~_//+~/Wp/Wps]pNؾ*U)?}o֯p4k*Z ǯ֯ww p"~/E=4Wp*_+_E _Ep*ǯp*:__E\??ޕǯF8~_o|oڻp<~~on_jwW_S~f|ڏb~Oضߓ+m=9/G~o~o>~|:~]~^ͻ~~?>l~\1\?ϟl~oa hHp4k$8?gGT\x\~g>_E_Ek}v~Skp"_$\O~vI__>{>7?E _įE _į>_58~'Wl_<~ǯ>pkwyQ/}O?;97Kh_?;WpWwǿwy_ޜ+8~Vܶߓmէomg~>{ͭ[O_hVfhVO_}rr_~* _}?[G_Wpj~N5*͚_7p"Fyj|}7\ ׯ/ílէ?us(_9_ GWs9?0~m~]^}*?/⻟_/s+ngy{r{r8wr|Λs=kp52\z W>ugoؾ__*p5k|>\WaNj0WZ q{׈\|^.>$\x/\h=_[I~_~x?\\|oǯ_wr\1ǿ7voOE \fOhVoo%\\}7['wy\17n8+'ep5} Www7WlG_Gyj:8~wVN5VfşE~\oşU]^m+<V_?q~>N߶ɽ>N߶ߊ?é?Ѭ3͊?Ѭw'+~m\+wro _oѬhHp4kOf__Ͽ;>V\_pb_/|7[K8~5Wp*_o|w|%\+_/}f|?~~Uep+ \1/b4?q  ïUopWopW?MA\\'̥99N9ooOmy5\{1\W( Ͽ?W}pWl/qKoey\;2\c+GpWGp~Wl؟z S;b\}NSs_#/ϑьs̟w+~w`~?bwowowwO3z??Mpܟ&8bO1 /s׏1 9ྟ#@_9~0`j̟U0 b;+ᅮSmBN88j3r5/r#ׯگ+b/+28bG垿r1#E~ȏ\b~DpWopWë4Y^}4~9b?)G|hG3?>?EwȑN?#SO?Tl߰<ߐ 9瘟yrg|cOD|c _ ߊw?OKo{}~q~b~u_wr񍟊oXbyn|.7n١ob7nn~Ưn߷?=4vs\?oU~~nn}~o߷s-f,G3?S~w_E//s@596+#?pp\_1}\s?Wp7f G3/ь r4c€}=c| /Ɨp"//p"2;U_wE_E~b_7W3{sŌޜR7_ ׂk[f;ojVjտf6~0Euߛ+؟a*fϱ?؟a_~q??Cp*+}TN,O5ur5cW3f/1_%ׯ)_=? 83~5 3?G>q~oȹCNrjf~G\~ɹߘsFp#8~\?.?Ǘ7&0ws_|f;q>sGy/]^1/*?/7\1Srs\?/7~~?g3ӿUyNp/yo??[pj~_Oi8~5?ӿ~ ?b?n㏛+f߿m~[111uy }@pŶ q_,G3ǑS'W͹>\3pb~foO8m?؟P_O(/'7'S'W+{>w~|g~?-˫yߒynp2\z ׯ/7~ɹ?=©8h8r4|9q>ǿwO~-~1?ƈs \1/7Wl|sgѬ ͊n7/L}b9~~a?sOؾOؾOؾOuY^}N>'oϱ9?~Wϳ؟؟_s@pŬX>+f\?o7|.}|^ͻDݿ?ѿwrŶN;9*~/h>q>͓6~ps\1o7WW]ps\?o7X_+)%/p4c}ь~W矉=S>>m=[q~Oضߓ{ F_o G37ь }{r;bE|oC~__yrrrrr_͊Ѭ|)7Wo/ߎj| j| ǯƗpj| ǯƗ>E~"\?7 _ _g|Vsm_ʣ}4c}͚s}_~/p5#>W3p5#>3Kpo͟pj}Z[y~~_W߷]?bߛ+bߛp>w{=|4ǎq>Ĕw|~s\17Wͩ?χK8wr<"8~?χŏ<~\?W3?xps\17Wͭ?Ϗlp4k>͓m~ģ#</#3>w[s]8X/u\?7Wsqso< ]psv}7oGG<}>*?fGѬG<*~*~+~ׯڇFyoWzxBpwWl'Wl'؟P hr4cB9?U__G}8~5ǯc?Go/ׯWO8V' c؟ͩݟs?Y~/?ȿͧ^b}7|.?~p/9ëpb~_~>g_~>?x}8~~_/9`o./Gpn*_ߍ<ͭ87Wޜ㟱hr4|I9q䀽/p/pg~S~?}nY?8~_W?Y _pW_+糼b~>b~>9.sp Rhmxׯp;\z?o~9͏b~>++{cyV|,߶ߓm|Y+ߓg/]_qs{r\s/ϓ=~{O'#nqs?)m=m/[;©fGwY;>wgׯW9_+Ͽ Wwy\ՌsCρW9p*?_<|)h~3?抙ssϹ9cY?_YjVojVoq~8?oӼ*?_Gspb*~/p /p38n*{s\17U^_S_Y58_Y^~__yk+߷j׮b~>[q~>~~>~!8?GhVk^pc79>b\1o7_ \͘߂[p5c~ fovW7&8~ǯU~k^_Wo+{r___Ѭ͊_6~7E|_7\?zڿ_ mm|Zׯp4o9߮zU|_ćE|_ćjF|W!8~?ǯUk^> _7߯C7WlGA^> ___jlW#8~_?z$ZׯWWi]V>nn>n>~o]Ϸbn>~>w{޵> f _w>n>nƻ׀W<~ýT G{=SýY^n] |sĶ|sĶ|sĶ|soxp?ߏ)g/\\wwOU_OU_O?}Wopj _Ϳw]pjq8~{W_UW?~>nV>n>/|j}-|r?8\j)8~u:_ǯ?RZ / \3͟T_?ǯWgTwr?wr< /Ɨp G}|?\?WO~us_\1W7է}N_Q^jw~?gn߶ڿp/lS/Z G_sEg}*ǯowrv}y7nS?8~W?8Y?yp"~ /p"_G|v}ާkp/pb|/}*_;b~OضߓmЧUey7o|w}޷ͧ^|IhG %[__{~CpU8~'Glϯ9b{~8==ѬwKWg8~Wg8~n[p\|+bn©Ѭ)p4k} Z-5? ǯ4WߝV=:_;boo_K8~5 ǯ/hw/\~]^gSq}s6?m~͹{~s8wr;~['o9V|'\}jjFfO?~%.(~ gc r+ 7b>`6Gp~WGp~G\zr"W_'/@\l~wEw_?^"/cE~ȏr\;>)w3_o/䈙?1'#fdpnϥ7Kp4gy47\} ߏߏ#Sp?9~mMrrϟr\;~ <0~ /_<~M_6`ǻڇ~ؿضb>Nnm˩_^f/.GߝK_Wl/q~_m)H|_ь9~ "`b!ׯ̟1s\rp~|v\?#+F~Dpȏ' ӹurAy}Ͽ;b['Wlm3<_G,ߏ9<} >n~~?ns)sS'\sK_Ef/Kь~_j.u_*8b/1 K/KK.gm/wjz\}Eɭ}3e.wTNher429q~k?5WggBy"~/?;;++s_~^~N^i9gy{~z_J_(_E| _~_'3|sŌ?\17=+3?;8~g\???4Cr4#HfьTɩ?oKU~׏9)g~_9?1#`pĜ NI^Mg}sm*լێ)߷8\n5V_9?܊/æ>'Wl_Vc}?~o~vb~?nߏOK<y3%WѼˏK<?\;r ?+f?g7ͭ87s~?jrMy/wͳ<~SK~34c)KRrb>j~N4\?/Ͽ͟Eߝ<?_17~|s|?\?7sTTp_*8~/? _'NwrN{l Rߏh#ˣyrߚs̢_?4?H_?$/`oy?;ϢGyp"ׯߘ}o9bN9~)/;-ϖr/ϖwww6psoP^o)\!~ߑNض+ӓ+ӓ~~ \sˣhx9>~ߊ_fPlo俯_=ߚ?o/7;_~+}><g9,G3_?K$\?Mׯ?S4\9Y@#U~ʏWp*?bV֬_|Wy~~1c7W|s|?|I`&>w{$Wp*_8~0߽`pb| /Ɨ3A~1>77~ѿ߷Yz~P_o> gO\17 (?7Wlgywrwr*N89~ýY^b_n+f?g/Yf,G3Qg?WlY^'~<q~f=mȿ_(_ ͊pj}_b)7דW7?s_"NؾcS_l_Uu_KpŶu^~+>ׯé8_߷b㏿U|_ŇU|_ŇU|o/_ǯKU~ /W%_W%pszܟ0bU~4܊V~?N>'}|vV%p/wjF~ \~ W_W%_rs6m~S_W?_լEy})o6mOOOO>p|r+ͻQ˽pϏؿS_)_E_917~_7~}{tc| /߷+}9og+,ߓ 8Wp4k8_ʏ7~}7~}{l~ģ#Rb)9~_j>ǯ#_G8~Gy#߽bnNpnO3/ߜͩG_jfjFW]^17WͩxT 8Gy~TpR<6qrŶ}\}\m'o?xfr/7ьh\??x7Ws\?Ϗ?xl_P?Y?xlpS;}}8~'v{sv{s*nǿ7o0Q؈G~n>~ϝ?>ws~|(%GѼgxsG7qsl7WqsvCȩ7ooΟ\?8y~nᅴg©Yp4k7{z>߳7WfWpb_nSΥGpj|GGp4k|GG=k~ /kpG[qמn߳b{+߷b~eߨo?~~m|D\͈լw}x8~>_S>ȿS'Wl+ѳ/͚Yp4kϚ?~1/E~s\߅p"_Yp">/Cpb/C>߀wrĆ{#6ⴏC=\p5>+P^z?}?sϚ߇Ypj~Ns"['K~_=3y>NpOO~ ߑz<߮_x~nY^}Q+3YZ.} ʣY+h?87WlgyŶ}goׯ͏߂Whjoqs\1+f~ݫk?+h%WjLߛ+fٿbnn/Wp5W3Wp5q/p 78~gyĆ{ϟ~_̿7~1Z/Ώ+f9߮xU~\ʏYp4+?O\)\zWOwr\17W͹>USEY]rsv}kק\mgy\m'oϵ>WOYSh8>S^>)p;\oP^W'_\o=\_6>~]^n|./O$$͊O©O6>k:_/WlukxU \p/wjFk/yp| 8~u:__Y6> \n|.؎Wl<:b>|OGywoz7\_[fyq{G %gs>TWi7Wqsl7WqslZvsl7qs}/]ssl7}\?;?>n>n޵Wh\m_GʯK1Og~~x4O$\O\O7>[p/pׯ~]ߺ9b~#nNp֗լӻ~>*~Wcwyom8ߏ_]} } Wp5}OS8~ ǯOU{O߅K~1/KE~{zW|_E_E _/~1/޳ͤwU.߅Wp*3k}#3=L7v}޻'o_OjVv+WL`F1w2KXrZ }ڭB1kyxHv}⧯ۜkbӔOgW/hI~v8~2jMXۿk79bm&^=jǯ}M[/ͩPʣi_;zu?M(<~PxzuO;9b}?lޏ^Hև<~?Hs{>뵞*09b}?&~L_ˏ}?Ѵq48lx_ _ _}5eY.X6ߧl|:yǯG:ԟin4ߖ~~#Fjs?1;7s "~s߻oSҿOI/?߿O??<<~ O/I%?i˻ɷ?;,<~v>Xx|`_8~?=l>b?/ OI|7n8xwgY|-<~_ ލ-~U8~ OWƯ OWI4?韆'wWo˟ O'gwϷpOQ8~?}w}'8~|1>< ˳O 'SMO|?D#c_g\Ѵ£i竅GW \o[?}ߺ?.#Fysg~mԟŇ£ihZ|}hZ~bxgY~]6>g_o[|s*ퟭMy4}n,o[|s?)?[﮿|_[kl/S?Oc+?+,%<~~_x.2y_[8~2~ Oo-?}:~XFxl[xG>-?'p$)?o|p$7F8~t|oog3gtGKvyz#;yG?GGѴѧ>6O#?'Oo}#<~#Fjs_ms;>X~D8~־t|ǯvLxl-OG@/_㷿op߷㭿;9b}'G87Gs  ㏻X11Cx/S#pҿ_We7#pҿ??pXWKJx8.%"_#p_rYpZ'.?4$?ͯ¹H*4w "/'v'pn{OO%!K|C8boGW$߀pv|8/ys'Gwrz'GwrK'Owsn<~̿Eԟ|4eIx4eIx4%@_pzgyz'~w~ߝv _wAxR>~2?' o_ǿ?Bѿ9b666/r*єZ~M):©F'p$~.u~ O/I/?gWxe{_1WGUc~Ux?+=)~fyM_k'wXۿmr}~&wEy$?єXx4%?Mɏ=@K}g wX©/|+o ھT\ۗk"۾9Ϭ}a5~%#橿Ư6O5~9~_Y_+/> }{#8gߏ+O5=T}?8%h"7y8Hx8Hx/žo$dX~͝_G{̾o+~fyMXɩڿp4LϬLG~]l|D~q~Sg ǯﯬmd8q_7Ǐw맅GScp?Wg7. onO7To? 1-^A76Gͩ?6.2~߷/Os?p.2~n||7G<-I,?O 맅GߍOn߷9~|6Ǐ[0c9~6ǏcɻHk/ѴhZKx4-[\Eo-?'oߗd8~ Op}OߍO~[|2<~ 'gY|fz'GW<~{}2>xo?!<'£)''!pn8~Vfo|7~yĎsix,~7!s>p_~k,nlp;7kY7;e3xd}[~Nxڗw1kyr*[o揾'G䈵79~M-(<'P>?ѴhZ7}6GWOSICr~ʕShZ)Ϭ}m|_<}h_~dc|9b/ѾlM?~\$%4w "/?&K8~2Op O?Ax,~?m߷s?A8~?O?_M_ߏ'p$-?_ O~.>@52?_'K8~2 O/?]?cW۾uuuXU8~= 1/|nl~,/Ϳ婸>r~Mk_+|ۗ5eG_o>?or}~&߭O"_єєє?K8~?OI ?4?oqqqXgϳ<~m'ǯQ?~*g£i£i£i~8_㸌?5orYNnIZ85~z$>M9r?yĎssSkd5OΟ'rh>ӔGS/w2ϟw~X|7o㻻 SPx4mhCGa߷2e8~2 O?Zx,?kڣUk?->?˟ OOί_{i?\8~?ޏ'GSOg:5?9b6G橿|hhhhg?\8~־4?qGۜgGߜGi;Eo#vߞozZ~S8~ҿOI4??93q?~ϾqCƇ6XCG#y?zC?(MGǏ?ٛ#;#;9;y?PxCѴPx4->M=zZ|(?gKC#>9eƇ6G,Oŵ}//᩿wG/)Mbߧ7#Lԟ ]?ysi_lS<? $(M3ǯcs%v "?k9I%?鿄'pyv>S8~pgKo"#v*_ O/I%?'//U8~ҿ O/s8~OI9??vgCYo~m|_A8~O⓿ޏ9b'7G8~>7gߴyĚߴyĚߴyĚߴy*7kbM)/Ѵ8־t_o=Mo 7gMGOoYG߷s_go_T\Wkjr߮g/SM{i_mo5y~~t|G7nyڗyxo"h;E_qxlg7lp$|n8~}/i8~ OƗƗM/7XǗe['a[8䇽? ϾݟfGcm_y/?%<'<3Дp88~~=#,X#1}*7_W<~]?y s'_<~dbsǗ/_}S>rxlםjexo|c~fsĘ6|uƗhwy{ޖ~sGU.~\dmI_8~'߻oou|u|u|{}?omsmߝ??ޏ9~mΟo߷9~|6_ǿo?mhZ~{x4-=< OI4?韆'S2?OF8~O/F m/yzB:mєe82 GSƗhJAvx8~|]~?#_{z{r*>ǯm~?ߜkeǯke ᩿#6_<~?buΏ ǯ6Ǐݷn`s~߿ã99~O_ߧ_ s/g:><?'߷pd~0?:y8~'pd|?<<~6>?;'<~v>Χ?CƗI|#?o'p$)sou~uu~uu~uO>OYh=hͯ~~szgyz>~v~c|~u#vcsm~8v;}?l|ZsSֿ5cS~?<~?<~~?ya;SGڗhZ쏝i~S?{c~c㟞9~ZxS?i?gG O7'?~, ?{?gY8~ֿjlXo<~~4`~O#©?5#c>2<~dxqr~L_ߏS|sQќ/ɿNť#XO8b}XGM8b G,ˎDž# %>.DžGM1g1g1g_;~ p> /p~G,~?`p2)_ G߿}?&Giep}_oKO8b> $$$$z#ye?i;O8~;>ow#c}>@8b}?$v3>ˎ#8Gsg|~MXGKO8b GWkW0㏻UU=8s=px?Sw?{g߳SY8۾z=T\~}~}a3{X/#}$Nʧ%gKgL~plYKǯϟw|$?x$ws%K=?s+g8~;~g#Ex1_#q;?є?є?є?)<>}@#o~bG?{8C~Ϲ|?¯6?p. ?]/_8#?'ߏp'ߏpd?G8~"?NAsxd9b|?6Gy؟.?T333Ǐ˗yM_79~}&Ǐy~6Ǐes?oc%gίGS)gє3z-~W#?'/7NXNX乿oqkB8~mfyM_ۿce/}n_?|4-M}5%{ G]#M8bOwOYc89~}&~ͽ8/Yo_є}~M_'ہ=˰+;';7y_X9  ''£)`|ec~asĘ_S_} p#8{%ͽrLYA#.X_}W__}I$~y<~?yowKp?. Gퟜ?so|MﯵW?kgkwį_?ׄG5#Mx/9+?hU`79b}&M/Yv~ć6Ǐ??6ǯ_8~3`5%k<Sr~<(Y&fyϟԟ_8?_8?Yx?9_?9_+ SrЁ/r>1?Kyd-? O_O|? #R7^/e}?I[U\s᧹_ť<8o9_ߔOo8~ro9?9##f7b?6G'}4OYx?#p4}GSp$>ǿ9g_xd}1#Ft_7E#ԟ寅G£ikߍ}4W1/#FoE?YIhKx4eXx4'Ǐ_r~l9b|?6IǏI8kGS'9ox\O)7 ů£iY*<~n[m_d[8~2Lyq?~4>-}ϲm|hoZ~Sx4'X(?n|hs;9~}'ǏKߍm_,_{m_Gsbh1w#F|csĈolO9hNmmoYv?wVʣ)h7H|7}8~OIW֗xgY_/O֗'󉟛#F9b#F=?7Eƿ᧹˟_84p$~į919b̟oG'|x4|x4|x4|}?d8~2>Oyd|7߷[IIWM2O#?韆'}<<~GcGcGcI/Mk?/SMkO#oMXۿS/%?9_M9_w?wE#o}`Qu+muy*#?~m9~6_xOοGSGSGS8@G'ӔOI>?+T_??Xﯜy*ԟO*h*pp$~OI_rkJ/<~}Ͼo_/_o6oNnX??}1=>a?[8~} Ohǭ@o<&1/#mszmǣ[M[M[M[s'G1/:| Ѵ Ѵ Ѵ _xp]1k#F|ms?S GShJ/ OI/?'r=6G1v<~_euU6ǏCWm_&ǯ}/]_Ѵ?ޏO?G[?h3)O5i]?i£99b}?&<~ ?aӄ'ã98Y4[}?Y8b}?l}ϣ{?M8~4<})O}8q4`j}~Gy9sgSG/ p]S?ap9<}~L_ԟ}?<88-σ`szgyz'_Ǐ˭C1?ƿG9~_6Ǐyq]khZ*< ů.#x8~OI|Ux,~?_We.ޏGc|9b|6Gyy(y?<~}?&ǯMp'ǯǯ J5>y<~mƇ6ǯϟ\gh8=}/>MZ kY^  £99b?o|M&G7|4mpY6~{v9~?|l?=sSǏ#Dy$?/p4e~:MƗ?iG<19b_nOhhN-36=gh??gC)įo?O¹H| [X,L8> I6bb;UR?8L4wT9M&1fVyİTOvsDL͠-еON͚"-+c4j5[1?aZY<+rcijӼj d5j-25 {Y¯+ހ,:4֛eo@9WRD8}YC.@MfC&Ne8KUUE/W .Gz%A24S.p 7/}9z8}CӨHO~C^?̏E}ӏ__}^}<v f JNb>NCcaRb5kJx{pzʼn5^` Ao&N׶Ti7c∹ppDR~Ǐ=Ա6 CzMҡ]'&D4 }l?@ |Zoc Gao‰e'h-bCq-azDJͮ} Nyݾ͆xna΋ ~Ԍqyei\ޑGqos7C=34rD~3_&!c2"q :p_t4[0|{w<4x|"&]ƪO$43iE$3)*Vla8\er#kFcډtޞIGԪ8}eץ,P & ׉7k,}JadB ,cU,5d#bzY xŤXZ`ۤ;%> Uم'fny)EA;A]6ܯCQ tS  ikWnqΓxcp9fYrStn Xsg5n^ٍrbRT)Lh{=iHgJ=BPӰ-@8XTp&j~ rۜ%v :E jL"?"7ݪ,u^0I,)$:Ib(jUSvhšXow8gxldcVu.ݤ(~Wx(f՝!_B|Z(SN |c,d \5MatL% *#u?XUjhiXlWAтh7*JҐ2EԢ\C] |k߷9F2Lj {õ.{!7Roy[Q0Ri݊n_-wK!dIIV ̳v =LwuTS̓xB,v!Z=:MuRvB Yv;xcDLzfK!p2 ,Hm#n4d(Fs4766 Npک5-LMMu՝bcq%rKĎHM,2c=Nt)T\>Z6}>9WfxKR=O)9c}B4i7O}(jo]sU8W]s&3q_bjTxV]H?_gh{XН˙;ȝG˵MW::E3<tQ3WU܏ OZۗhؿ'~NcҠgy7=qV|TU\iԹDݷ8^& 5g_SQ%5h{LS6p658B%s6V/:4bFWȶ@chsd]K}ܢeںL]2~!HKҲCQ ?Saq%~8=m24-cN7Ҧ-0{X8TPi&=Vo= xl/_rels/workbook.xml.relsPK-!~ ]x xl/worksheets/sheet1.xmlPK-!G(E" xl/theme/theme1.xmlPK-!Ƅ xl/styles.xmlPK-!V- xl/sharedStrings.xmlPK-! 5Mf docProps/core.xmlPK-!ޣ1^ docProps/app.xmlPK 2 Spreadsheet-ParseXLSX-0.35/t/data/encryption-agile-SHA1-foobar.xlsx0000644000175000017500000004300014576335353023743 0ustar michamichaࡱ>   !Root Entry0EncryptedPackage" )DataSpaces PPAVersionL  !"<Microsoft.Container.DataSpacesh EncryptedPackage2StrongEncryptionDataSpace2StrongEncryptionTransformXL{FF9A3F03-56EF-4613-BDD5-5A41C1D07246}NMicrosoft.Container.EncryptionTransformDataSpaceMappDataSpaceInfo`StrongEncryptionDataSpace4@TransformInfoStrongEncryptionTransform4 4PrimarySummaryInformation( DocumentSummaryInformation8 Oh+'0@HT` x Microsoft Excel@q@ ՜.+,0 PXd lt|  Sheet1Sheet2Sheet3  Worksheets@ ̱ ꁞLXK03ť,*(Ŗ㢎9]NZmdx&3? "6z?Ş|-?  F}rzxƋs&|,sQÀ:2{{d"5}adG"uB\[]q;6.Sup凶RD܄,(Ѩ5VT)aW/K^~}ic`׿{LY}6ZVqg0ʌ Vt)v] \?Ês$Гߐ ŀf2k|Dr'+VNFv-Tr2%,/l 'pw0fij6ԑ5hK%㢤wmWbQS(jMJ9ԛ$N#uQ}0uuhu7X CbEEe9\/iʺql$Ȅ*o=|oE~PւM< Jn1J\)A@SqAR3kJs!?6ZML߇~;<Ϥ0G0":KA_bU*proRs@%] i0tɱ S7PtF 3WbG?`= mک2KuE'X9^+2 vT5Y±K`(RQf1js9B:'c|P$-ޫu*HH:\ɷc\Mf|}G )g Tùǵ^fh@kP aoX.=ŀ@ǑNwtc 8*ed!i!"o,v_b-4+BKߥ{m\C3I(~n3 >@>b``[H==]ojAЉ>51ڧBYGŜgȶ{nd2[/u^֗2'[2&}q p*pnBdy6̚S*}# r6S؅B)CTDq>8,AUg@FbjC>U,8v;iԆ?k`#3dէppiΧY@% \ )7w(Ikp+7_ pRXO0(ԌOp>X(J.t+1R#bjQ7-CJ[TD=.0'0 tNYVtc36r5z~2[:J#l}ӸlIn$N6B1[?AKbHa|^.o,l|f%|3En<%bW QGu DvpK7O._]jnn,O\}\| ڭ̄ }G'LKtL,]&E 'OP{ZYP|E mDJ4ͣXZ 1M mq4:qTKАʅ*k#3 2KccmNފȬֺJ-2³-7KjuHU2jo9yŀ.+{Sg4zVHAYHiUۢJP_j\HdPX3ҜY\x91qksk&@.?%0YJ љ%Izn9=BZ,4k 3Ät\q}~mM]4\_Bh3>Rf}sHVGfh똰"FwRq! 0܂pk[ɍL>cddc_ȺwcapV;RAs .f XIQt d>[j9-UTRtgMvIM4NQ%X!#](Pm 0hi%~- y6_Y qAez`}{xlOAG28$u7n"+[u6+DDWCN)j["J5]Y/DК0=DT B)݇z5$Z]/6|ܰuI>WYBၱ$H;l,n^;&rU~OC(8o4NiT[ >ZDDG!W6=w ǵT},YnUyk1D ;ʄY!-Acwב)|)9*1~P(%S>a4RfȨ S3s?~:.s|g6q#xCYeÐJ_4˼Ht=I{}1s qcm"wH7SK(+2O51!ń}Ŀ"-%mFVдDg:}M ̸;фxu$\BQT;$+HUlZ5BWwzp/h:d)UN_Ccu?vc9ݥCĸ:̬K;iI2jE<YWO }ykOTdbYwbi{PE?b`P=};s71l_'4%a &8*7oȀ= vSlF蔽PCY :\Q8G%-H\,_O?zf`uݼNuO㘶L,@saj,ky2fWilk }y3 ǡQl3Ņ5 MX/nZ$ljBt6| =m~\c>v5D<;:ӧrI;jh/d,̉ER8X%ATWXr+︂՛e[o_X 7C}0RTN^YKjՅf3(sVD(yާEqT+<Y_E.ڷ{nOt8NsIRN͚t~N]H\e{xFf%[8h,G,l&0_O6"e]lս渴-4di^X5=qS<}S8]dƶ$>sdSWҧ*_0ϑZjџDyvwUTEh OGY|y@*t-;i S*ƢjJk`Z]"H#D+|<rZ+.E/Pe~^|wZˁ3o6aS3­kkLQIΖʥYj2Bi-V7n̮aۧ? lrr=:WRvE*"9Xg]j{a0"&&JkԔOȕ ~µSM Y=v7tn%m|].zm95HF}pF:z0k {Xm߷ޫKPO'NnkbE6 q  nmZ HjtĴ. ZyRaok-f};)_|g/e*w;$AH܀|yy8˼}? }!Ȏ\nA9pu-Y]K6 4Ѐ_IZo ]迂pql9ܞShBq)\ q /^^ƤVCNR3;*rU3.X8Q&3D0~SLV|諒jS&xRhK9Nl)`^Z$/nsk|LBF<@4w D>Ca 6|h`zF㨂¡a!]Ox̜̀%W|% vq4|J=,25 Au5-x.xA$~&azh4pljK=V*#[ApBpAB`'Aiq^F5E$߼N?CA&A?~e7dG1xs5GNQ#Ӟݢ%d/WT0|i4`0pi~#7EePhLXMSkbxGLD&RR63gnߏ=W܆&\Z^l:1jtAf%sӦvQ9VԲ~$;`aWG hw>kF Z}zj+-^5Tԙc_@~԰FƛU)L}_EvѾ Ê$}YF%'^-|Jd-0݈؇ޥ"}+zB{ L:% {ʠ7b~ Nϙ+cmj13$ OռˢpC܂bKOvf.c] fc*6(L0DI2򐓝~!R?tWfY%20 ; !?-hHߨmk"UmmiSYeoDu4AgzN;jº*~ԅ|ἕkD|Ť{G_ܐ~!Q1;ZO/:뤐ϙIgbl̒]haj ɏYIi/p:#z +lJ\Kqľ頾!+߲)~q!݆Ӛσ#uA}7]_:ܤbkJTuLKTM{|snצc8ak\ sgVH ;aJrW-.- osAXP$ub{U_['ad flAcԬY 4Sp#H puݟO)#dTR^?~ p|Z͞%{09L ^RKy|;p_$j6YJЈcCX#fBAʗC< CX7Rc,1gh@ zzPHDu. ublŷئ6۵!՗[gI^IgḦd]q[Dm7^wy7a6@, #{feQr{cf`.[`5`ʞs 3K^l1zh% _@B7a^4)X#؏XV\01ğQ-#~/r8.Mloن¾2/+`H5~^ X=J#5 VJ )L 1~{S)1 ,'Zlj @ $a)0i:luO`{nvu]pW&z31ɰ]ÒA=<{Vt3KF8~>W`\l$ئ˻TvG I-٫ZYjBYݥyJ#]ݳzXA! =q8'SUF:iFl>$Ƨ귭)'. U@,A[(YдPS> G9exfNvQ~enQY[PKEKN̈+ NEؑKc(W2 62IbxK~ W>[l#٬ì %o)~e:W`ڄksK5ަ.Sb& ȐC;ը68I4ʼ"*]Կ,c hM `SakTR0!nˠKV\]%/Ϩf5Z; #8y εIpTG,ng;h_(BQ fYM;YxcXx3@ɧ'N-e{ j!OHfw+K X@ ءA;[d7>~_S 10Jq/XT S|^خ/c^y<ԍ|j tI뙂 cݮK 5q_9,@_}nZ7F̒6Ք$^l؁7~+Lv ,7IE>H!~)݌pr^+q,y)_GC%IƤ0 Iٸ2~7}>A'P:QkowFU% ߶fW7^ Xg NRFJjODжr Ml!ya!!tՔCOLys4}#:}hr7\zEy8ҁuUd*b˚ ^{r=/fpy| q2Y3C4DEncryptionInfo!Q=="/>Ip>fCu:A2G>ZJnG"<=]l=v.N,#hϵq(K-4!Lggm&~0p6'bl)7Ro_:ହdb)d%Gx ͈^"S3 ikH_8U2ZkK?L(dd%^(MODS]lS`Ѯb*O'Kf_tH]].u~լPߕN-\CWPKW(^#FPKBt=F[Content_Types].xmlN0E [eJ%T|'Ud{&)%Zʲ{nFq5Y[CVc6JyMfw%4EQ6AK5rW'ف'Vd9B.htw\.sAZ4ܮqeG0뭶T`|7Pa4!}~a}DLE¢+/чPַK}'  1k ^ջ Os_"S T5KU; _|\<{8 dVhw\ApO=WûoWPK%8(PKBt=FdocProps/app.xmlM 0D~EȽADҔA? 6lBJ?ߜ0ͯ)@׍H6V>$;SC ;̢(ragl&eL!y%49`_4GFJWg GSb ~PK|wؑPKBt=Fxl/sharedStrings.xml=A ツ.z0Ɣ` ,q2oԇNEx5z>W(RK^4{ŀ5yVymXV\.j 8PKp&xPKBt=F xl/styles.xmlYMs0Whto t3饗3 [Md#L J4i ݷie2զp6e<'l9o_'*rK c Tgp%e-lKT_ 3ME˨FyJŽeT"`u9/e 2fr{0Je!Mpb)S.a9|'P5d!C%[k0mJ¸fNA@C5b.#>mЃ֒& 6W7n+<{;G@"iy}t84N%9%9|#+#<3t@jAxF¯#HW?k>)#|t ?GipB.9kz,@9\cuS3 ŅT,W*y .%/ 'h:.bN4eZӹݑWp@#>h#?v0gw[ўN+S43LS<ľZ\lwC|7f[U`S<&8N}D8@UEs5Z ,w~fCŒI<(}007Ň#܆/#ɝWq˔ _H,>|[A[wZ @-xitPӨ{ݓi4n{oi:'o#@(3js76jޅ?PKkdxPKBt=Fxl/workbook.xmlN0D|wj Q@H iv6-*j4of|AACR (h]8jx߿>¦i.OO!isk)cZőBqs|idBzVAzt 5#v3ͧ%L26nL,۱zR:lptI$δǃ5q8o^Ij୽1"9dPKZPKBt=Fxl/_rels/workbook.xml.relsN0 @wvBMwAHQ6$ ;Y痤ٜI"@ap`yxs('3*6Eҽ<Ζ˘0NiSt`ԫtɀPjUm?Ç^f v;|!`KETп# /E>? 48F:Go{P4zmPKX0PKBt=Fxl/worksheets/sheet1.xml̽[sG~~W(p#wi" ojV,Yի?(4_7UYc!zn|nq}???~?|ٻ>廟||᧛~~?~tǯڭV>|?w>/Y_.wWo?x_/o6y×ӯ7wޏ7/Wyz?}}cB?||On<~?Cߨ75P)ߠT+)/7갤4(ߠWij=V̨ƣzSazTW]=̐[|sqӤq}\~,A0]~/Vk?̗vUڿiIh\){././=|i{/AY./i<̗NU=̗Nh=t~k?2at~/yy/^=̗NtKhuKgP|3,*K*K]=̗nmR6_+K_=̗a0_e0_e0_ze0_ze0_ze0_ze0_zelKlKlKlKlKlKKl/N0_2aO*Goß>sWxO<8˯WپZܽ_wn_>Zw/{mz_Yg {՗&ۻ|s'x/[e_޿ޟN?M}}ywyo~n~E˹'; Ǐo~#wp;~LԮ}ǿ]~s8ڵjuT_q~~3K~GU[A58hpjk޽_{y8bj7t?5wm?ΆNlԾ_޾;=SZzN͆o~7Co09%:+ p}n'> W7?SZQ{0],ί?<~sռ7G׫~Zf ~|/?j)XogM4wUwS_ތ4_yo݇?}??y'wq;iP樾y4O_~]wF~x&v|=AN/v:}͏Ѫ\.m$zqUnͻ /q)Źfot !֥û/r E&fFxt]۟?~ 0vԆ?ח2)L\V*_*ގ?{8+_㏿twġ"쵸hME.N?, ʾ%ֹW2)Ln2\ξu*CYRoJ<}/."W>)\[v{YՎ'ת^R:W={Kw65ND_ywww}O_%l}B9_ <בmS/n_?}v]ݳ~s6]Ǜ۷<9׍G jd.|_j..Θ~M5o%fj('{W6%*;6o"j8>گ{G6O>΢GwBw,j {Ī"UsluZ^dsn]w}󽑏ە[ɛ^(r2?aT7衭o=حE@{,ػ@Ozzǣ?&h.-H[kL::~sy4ڋP|\vvtktk]#:k6;7:G9E:mg$AݪVtN#;c^{dN;]SES},^4}|t):M>oҿ~?|N_B\?x=轾h.ݎ&DyTi*DMWիΫޫWWW?^UWUU}_1;^{P op{ux[:|uunYu'qzmY#rd]lʑm9bDjeOTDhyj2v1i+ g jw=M0SM+AS [kRzznÃvE³܇WN"S5ʇ^TQ'ƁF ZM/?Z=URM$ 82Ȩ9*GˑrT ./3.Gʑr,G&ȴ#Wȼ.GȲY#rdSlSL4 4ӔhviJ@C)J5ԀRZj@L 95ՀTj@TQu DՁ:؉:R'{QZ`7@H ] ;t)8Tne#%SSSPRwY/ ͱc3S<ɧQ3P| (zO35!hO5|.ʑe9*GȦٖ#L|*O'jAj22TK$ J>UJ>D޷J%`..VulO &'eUw Za"SɧSM}|!S_|p|e^B M5 | Z%7쪋&+7+}߯X]c)0ᙵrQgYGT:6@ddGKH9H4/#{7'#'IrRp.Kڳ46|TaDXڰ<; -N@%T _=2UoWt˙`s *&ƀ99`.s ` 0s\f%`VYf-`LjjlRDԈQSr*bURSJk$5A1"FֈX#"kDeȬ5"FֈZ#bkDmȭu"N։:['W'"hDe`HBaܵ-bkrW&rWUj#rU5 SBn24oDXQU'^W7^ŕU#^M~UN {U| k]f `րf -(欈۪za!ۏ_RSW'QLoL)ކ Mڀɶǔm+vJ~U'W9\Z+7jג{NjfرDk=l/}dQeQk8r=Nڂ˶[~ɖ a1G|rf#0{y1`s \f)`f0׀Yf `րf T-5"FԤԔ[GImMYGP5F$ֈY#*kDf5Fֈ[#jDmuNՉ:ھ:Y'X'DbPbwlX7?{튣ؚUUZUg^[ 2 ,n鷢N TQ*|xU_hDg%EEk*4tjU3dK^W0K0[lAPebk۪ѫZi*zU|^o^$:?<%Adkݳ~8dorWPXvM+Uk.]pj d`d?]K9=hfbFNv \첵>AkGE㲏$>(%Bl$[0Z^v 58wE0ǀ9̩bR޽0g9`.303\fk, 0klIU=*S#zjRPU jJq#&#(FֈX#kDd5FֈZ#ZkDlu"N։:['rdDd]l‹RdDbHJG}q[ 4U+֑kW$L% ݛл 0:+ğz ^ xWV;~k"'dKIjܞ!x%_BZxYf5`6dJ9+"vNL6WO}:L}'U-`eE9eϊݴUW}VAF MvѫڄfFo/v`dQѫު]6>h2zmèYyxY'}e_>dK½68wE0ǀ9̩bb^^h 30f `35`Yf5`6Ƥ&@DK55)*y5@R[#kDaH5"FTֈY#BkDiH5"Fֈ:['rDnȭu{u"NT։:X/6O^,&yh"yUV X &yd*yXMM@'^U ⏼ L%o+U6O e&gN^ո=C*J|. 0klH^bk/&ۏ^ZS٫W~'QA>{%[l+9XkY+xNٷbGX|2}Uuq]6}-D6kۋ;9KT*}-g &L_=1*}mVGI_pb -.c\+:0G9 `NBc00Ss9`0+0&55"ZjDLI9U+)5ښX# kDbh5FdֈZ#JkDjh5F։:['rDnȭݫuuNvN$։zч[=M WYjU*.}Ul:}Ud"}UXdSѡXV; ?0*rX~⣯d>~hDX+l>᪍^+7ע{W ͋^^."WY+g%4^>/"zmXX}$6 'l !.cGjp:M}93`sS${y1`s \f)`f0׀Yf `րf T95FդԔGImMGP5"F4ֈQY#2kDg5"FֈQ[#rDnȭu"N։Ⱥل։:X/+O_,&}h"}UW kW֤L `MrIag Sį*~x"~T (_g_Eɗ/`Yf `1م?JWTUuIt0d>YA (+~eNJ ^UW}@F MچfƯo/6`dQj߳MƯU6+O<>p l '_jx#Sip<]}93`sS${y1`s \f)`f0׀Yf `րf T95FդԔGImMGP5"F4ֈQY#2kDg5"FֈQ[#rDnȭu"N։Ⱥل։:X/+͏_,&~h"~UV5WAƯ__7uy0+ݙT*ɫJ^ލPW5nϐ/!y-_ ,0lc%W<,'`XQvWeeOI}0SUa~`}d__sʾ;j9E'W9\Z+7jג{NjfرDjˤ{v`b٣fqz}!-0|]`^qWth˙`s *&ƀ99`.s ` 0s\f%`VYf-`LjjSDԈQSrWPSJk$5A1"FֈX#"kDeȬ5"FֈZ#bkDmȭu"N։:['W'"hDe`HBa/ckW&WUjUY &|d*|XhMM@ӗcEUkW7H_ŕU*@t"'dh 8}U (Ż0+0&;P"}T^_,$_RSW~'AϾS|3J7Mv8]-+{)Vl5OfrW 2W0n'f%^643{~{a#';^.{v^b٣fqdz}!v-a^jxG+:t0G9 `NBc00Ss9`0+0&55v"ZjDLI9U+)5ښX# kDbh5FdֈZ#JkDjh5F։:['rDnȭݫuuNvN$։zA~:g5٫@٫*XkWDLE л (NJzq*0 AFADDgM9!CJP q{U| k]f `րf  (WW}a)ۏ^ZS٫W~'Q]5{&? no7G>`e9eߊ`UW}AF Mvڈfo/v`d/QeZ~.Lls46{TcTڬr֗3#0'9ULl ss\0L3`怹0K0[اh15&T;Hjk;bD`(5FDֈY#:kDh(5Fֈ['rDnȭu"NvNDՉ::X'Giew06*4_eՎnHub""&o2n F'cEUݝ)L ᫺_LFkSg_UŻ0+0&PSJ4٫\j"{|V*oV4B_U:W2dwd]-'z%)V觥5OEzjW tJMUnCu2rU*z첽&>ASkG-FD 8i .Bh $[BՎz_=2UqWt˙`s *&ƀ99`.s ` 0s\f%`VYf-`LjjlSDԈQSr*WRSJk$5A1"FֈX#"kDeȬ5"FֈZ#bkDmȭu"N։:['W'"hDe`HBa-ckW&WUjtU5٫ S٫Bn2nI jG{( A@$ 0T *ܫ8zU ѫz/ z-_ ,0lc$W jWU0ܫ\2{UkMe^U^D}+Td ;Ζ甝+vjpT'W9\Z+7jג{Nj#fرDk=0}dQeQk8=N˾[~ɖPkQyd; ]ѡ/gF91`Ns 0瀹%`&f+s `Yf `1SR#bjDMMʩJ_AM)y֤yňQX#kDc5"FtֈQZ#RkDk5"N։:['rDn^uu"N$ %vLJu׮8I_H_UՎF M_[ 2 ,n&C&x*aEU Wqe UMt x3 U3j|. 0kl\{5+X&{^RS٫W{'^;5{3J~dw ɮ]+vJ~U'W9\ɫZ+7jג{N$jfحD%k=l/}dQeQk8lQlM*D VvٌX &yd*yXMM@U4cEϼ J%oɫÏ`O4㙄pW9|. 0kl^U* 1|t𪖚 ^>?>(ۆgeŮlYVkMŮ|2vU5q 6v-D쪶kۋ:9FT*p߳MƮU6+O#)l l xaرG~~drf#0{y1`s \f)`f0׀Yf `րf [T-5"FԤԔGImMGP5F$ֈY#*kDf5Fֈ[#jDmuNՉ:ھ:Y'X'DbPbhú֞æSWƩ,Xڑ1).uUl:uUd"uUXdMFMAIXQV&bWU]YĮ DGM9!#'KEO q{UN 0K0[l@W g*2\(&]RbW}bק~eg)%[L6 ^*+7ע{W ^^hF"W+g% ^>0"xmXXGI[pBO Oq#K_58wE0ǀ9̩bb^^h 30f `35`Yf5`6Ƥ&@DK55)"x%5@R[S"jD`(5FDֈY#:kDh(5Fֈ:Q['jDmuyuND։:X/^$&xh"xUVx01R`m*ؚUU`uS7Z7I0VTՋWU W5 "xx뉢ϻRS3jܞ!xUŻ0+0&PyW ҿ* 40W%%OûϺ}J+Sᬒ-6J^Aaٵb?F%|2yUUq=6y-D򪶡kۋ:9IT*p߳M&Uv6+O<#+ l Pv<瑩48wE0ǀ9̩bb^^h 30f `35`Yf5`6Ƥ6@DK55)*z5@R[#kDaH5"FTֈY#BkDiH5"Fֈ:['rDnȭu{u"NT։:X/^,&{h"{UV':)6{lM*T*л lWU Wqe Ng?f^ո=Cdw%`VYf-`L6Dd/]ò^XPvWEEO"ow=h5Lfnn;H1ӲWPXMɯ\>O^"H^ɎPs"yU5n#*yL^es-|&f*J^'Ǒq\vH~3Ev 58wE0ǀ9̩bb^^h 30f `35`Yf5`6Ƥ@DK55)*x5@R[#kDaH5"FTֈY#BkDiH5"Fֈ:['rDnȭu{u"NT։:X/^$&xh"xUV':)6xlM*T*л puƫT*]^E'eDM 8xU /`Yf `1ـ@oVt𪖚 ^>W^a0dwtq(ɾ}+6JU'W9\٫Z+7jג{NdjfذDej{v_b٣fqz}!v-%עb;?lp>m}93`sS0g9`.303\fk, 0klIM}*S#jjRNU jJi#&#(FֈX#kDd5FֈZ#ZkDlu"N։:['rdDd_u"^(;>lilM*D VNڌX &|d*|XMM@XQU+N_W7H_ŕU#ԫ**tjjU 3KH_W0K0[@nPäl?:}UKMK_UK_D]soSJN\L@ (+{e׊*{٫Ul k='W ^^FW]v>h2{mèYyy']eW ?dKZzaG~xrf#0{y1`s \f)`f0׀Yf `րf T-5"FԤԔ[GImMZGP5"F4ֈQY#2kDg5"FֈQ[#rDnȭu"NՉ:ڿ:QY';X'DbPbz֞ŦW٫,XWŦWE&WEMdԎYƊ:ȿ)JD ѫ^Fp/yW2dsT2loa6,ZV SvM+Uk.L^p'e$`dOM^K9MhfbFNv \&첽>AkG-F%8i .Bl$[BՎVyd; ]ѡ/gF91`Nsؽ 0瀹%`&f+s `Yf `1MR#bjDMMʩJ^AM)w֤wňQX#kDc5"FtֈQZ#RkDk5"N։:['rDn^uu"N$ %vLJu׮8I^H^UՍ&F M^[ 2 ,n&C&w ƒ?*( A*Ww4d"ch~հ8zU ѫ(0+0&OJxU 0LdѫZj*zU|^o^$B?AJ}(v]-+z)Vl5OFrW 2W0n'F%^.43z~{]#';^.{v^b٣fqy}!-.{,}+:0G9 `NBc00Ss9`0+0&55v"ZjDLI9U+)5ښX# kDbh5FdֈZ#JkDjh5F։:['rDnȭݫuuNvN$։z~~g5ɫ@ɫ*XHɫ`kWAWMdԎr,2N^W7H^ŕU**:H*:_**a53pW5a_@ZxYf5`6dJ|U-tꅘ>:zUKMEϋ^U͋^Dۆ^ݭ(L<[V\>^:^ɦPs"{U5ņl%*{^e]|&f*{^'Ǒq\HajxG+:t0G9 `NBc00Ss9`0+0&55"ZjDLI9U+)5ښX# kDbh5FdֈZ#JkDjh5F։:['rDnȭݫuuNvN$։zA~:5٫@٫*XѩH٫`kWAWMdԎr,2z3EU Wqe1N& ??7UTW5pϐ ^0K0[l@ѧMoVhmWTUu߼I|jgAݭ{oPV ˮiT'W9\ɫZ+7jג{N$jfخD%k=.}dQeQk8M|L(ðlna){ZNJSM˱k6J^p&r䕌uk=ɫ܄%o/tddɫU es -|׆*;H^'Ǒq\H6Gjp8=}93`sS0g9`.303\fk, 0klIMM*S#jjRNEJjJi#&#(FֈX#kDd5FֈZ#ZkDlu"N։:['rdDd_u"^(;>YlM*D Vnt4R`m*ؚUU`wS7z7"jT*0 A*Ww/ ?uT3'n!y%_BZxYf5`6d5kEVͿ0vGGjUyѫy[ |YY;P0ղWk~ZMUW}AF M٫چffo/`d'Q٫eZ~.Kls46{TbTڬ<:{UKMe^U^DjW0ts'2&ZV SvO+Uk.^pgjdd`dO^K9mhfbFNv \f첽&>AkG-Fe8 .Bl$[ ڱGtrf#0{y1`s \f)`f0׀Yf `րf T-5"FԤԔ{GImMzGP5"F4ֈQY#2kDg5"FֈQ[#rDnȭu"NՉ:ڿ:QY';X'DbPbw|X??z틳ؚUUZVDY &{d*{XhMM@P{}W7^ŕU*NL W5nϐ/!{-_ ,0lc%W?*W`⃯R#T֚ _>okW2t{?كɾ}+JU'W9\Z+7jג{Nj#fزDk=l0}dQeQk8=N˾{~ɖpkY68 wE0ǀ9̩bb_^h 30f `35`Yf5`6Ƥ>@DK55)*}5@R[#kDaH5"FTֈY#BkDiH5"Fֈ:['rDnȭu{u"NT։:X/6O_0&}h"}UV#ֆ _ _z7uwP/rcEUS*|x;:AjM孆PM yU H_W0K0[@G"eW}_RSW~'Qu탪W0d{kWodWˊ^Aaٵb?-[^sd*>zU #z&[BmZrωUmC3u0rU2z-g%6^=0*zmVxGIWpb V36L+:t0G9 `NBc00Ss9`0+0&55v"ZjDLI9U+)5ښX# kDbh5FdֈZ#JkDjh5F։:['rDnȭݫuuNvN$։zч׻?Z{^g` gUUUaw7y7XQ0zU^ΣWue1H*:`J*2rfUG ^]f `րf  (LdIGh>2zKMDϊ^e͊^F>z}5)%[/Ԑ}-'|%)Vh5OzjWtJM6UCv2rU*|첿.>ASkG=F 8 .B $[B;i/l;z֗3#0'9ULl ss\0L3`怹0K0[اh15&T<HjkdKğy-c;|ɸ+:40G9 `N[Bc00Ss9`0+0&55"ZjDLI9U+)5vښtX# kDbh5FdֈZ#JkDjh5F։:['rDnȭݫuuNvN$։zn~'5@*Xz)6vlM*T*л ӉN(cE w( A*W5^P@щL_q{U`Yf `1ف_{ krVݦL^RSɫW~'A^۩z%3J |ŲY@Y+(,{VlШ5O&rW2W0n#&%H^.43y~{]#'J^.{v\b٣fqH~]!-a5x/;CO_ΌscT1)^^j 30f `35`Yf5`6Ƥ.@DMȩ=5)*{5@R[#kDaH5"FTֈY#BkDiH5"Fֈ:['rDnȭuu".E6@)u"N$ %vlj׾8^^UՋ2kWdLe ݛл 'CSѫD*zUUbh8{U ٫(ջ0+0&;P pXͿD*0WeeOw_8|xv }oa0ײWoŎZ _sd*>~U #~&BmZrωUmD3;v0rUTZ~.Kls46{TcTڬ ^"+7ע{W ^^>"WܳZM U66,O#+ 'l /xa1#G_58wE0ǀ9̩bb^^h 30f `35`Yf5`6Ƥ@DK55)"x%5@R[#kDaH5"FTֈY#BkDiH5"Fֈ:['rDnȭu{u"NT։:X/^$&xh"xUV?jo# ^ ^z7uwP/:f+j?0 A*Wwq"'d.393pWQ%w%`VYf-`L6^2JJBLvWO"VT flnP Mv jY+xNٵb?WE|2zUeq=6z-Dkۋ:9IT*p߳MFU6+O<#/ l U;j%^v<瑩48wE0ǀ9̩bb^^h 30f `35`Yf5`6Ƥ6@DK55)*{5@R[#kDaH5"FTֈY#BkDiH5"Fֈ:['rDnȭu{u"NT։:X/^0&{h"{UV#Eֆ _ _7uyP'WEUSS*|U?5 mX q{U _0K0[@/fu@GjUyjy~վ?—%[lջ =ղWkņZ~UW}AF Mچfo/6`d'QeZ~.Ks46{TbTڬ<0l l Q.cyԗ3#0'9ULʽ 0瀹%`&f+s `Yf `1IQS#rjDOM _AM)u֔uX# kDbh5FdֈZ#JkDjh5N։:Q['jDml_hKMX1Pl`HB1bu NbkW&WU.{b"kWdLe ݛ`:KQXՊ1W7_ŕU?&WE39qWQ%w%`VYf-`L6D"bsKWTU5It|xeUg/-6^Aaٱb?We|2{U5q6{-Dvkۋ:9ET*p߳MfU6+O,>0 l DZTkyaqWth˙`s *&Kss\0L3`怹0K0[Tأ95&Ue;Hjk;bD`(5FDֈY#:kDh(5Fֈ['rDnȭu"NND֥&(EvN$։zщ [=M WYj6R`]tDȽɛ+zU^΃Wue'ئV#(M^<}J`Yf `1ف/ W9CLʵ&WgefeO#UuJ}L*a%;\s?9e =\"SV.qm.-8[Ѽ6텞l&"՛ܳM U66,O|#/ 'l v_=UrWth˙`s *&ƀ99`.s ` 0s\f%`VYf-`LjjlTDԈQSr*WRSJk$5A1"FֈX#"kDeȬ5"FֈZ#bkDmȭu"N։:['W'"hDe`HBa-NckW&WUj_;R]n%WįLů л 0WE[߇N`*~xU\Yůj8|UT'L孆PM yU _W0K0[@g"eIU.7_WTU߼I|jݧ탻_ 4R XQ? (+yeӊt"yɫU-k='W L^^l>WUk=l.}dQeQk8yU #y&{BmZrωUmC3u0rU2y-g%6L^=l1*ymVxGI_pb ߆.c{<}+:40G9 `NBc00Ss9`0+0&55v"ZjDLI9U+)5ښX# kDbh5FdֈZ#JkDjh5F։:['rDnȭݫuuNvN$։z~~g5ѫ@ѫ*X[)6zlM*T*л o+ݎݙT*ѫ^DBQ:%/y&!q{UM/`Yf `1ـ8"bg 棓WTU5߼It|jo+P&3e1eϊݴUW}VAF Mvڄfo/v`dQeZ~.Kls46{TaTڬAkG-FE8 .Bl$[BT/l;CW_ΌscT1//4`sKL3 0W0 ,0lcRSc FԈSRZc I5F$ֈY#*kDf5Fֈ[#jkDnȭu"N։:ٽ:YGW'*dDbHJ}ح_t*8~%0:I.p:h"\}F&NRUtb2X?D +y'b@FDcᄁ=Mc=}+k<ZhM 2ݚ߀[Et[ɬ^v"fuk gH~ uKŢ0t -rYTZ7t' "ڌ1hz!-<)bڲێsZY j ^b"ZɫܶMMWw6䑜$Gu E'{`P=>#rhD#@JRc@$Є@StE9 В@+ !Ж@6qT֐YB+]TUnzJnzjHy I!5$א_ClH I! 6$†Tؐ aG:H#vÎ6ٖב::_Gko[%M%dFG#I'K~L~?uT7:k,d+&ɯL~~@ƒ_u?/"-_ - "К@m d3߄8F])#Ue.Μ>}!r ,z_1¯./YŽ+Ioѯ3ӽ>-TvoKL}0|WQ߶붓8}tquo@&əKr0\7ythQ v :: ]@94" tBS %y1tN ]hB)f"М@ZhIhK jB*kHf i/E7>U7>A9$אR_CkH !6$4ؐRaC2lH #!v$Ďؑ;bG;^GlHz#Rur݂+{__Uj d}+WWpS?AEcI?z+1 I+.-_5"̜H, p]+d+ݟ(3K]%>+8 I+.-_5$Tc -"}췺o5^4t¨Y./Yo3ӽ>-ToKL}0|W:-mm'q#f7\3an@fQR_\Tnaxx|*PtDcTB _^jL3@hJ4'5ZhE56ȴ&l.YC:kZhe jMO@iMOPI!5$א_ClH I! 6$†Tؐ aCBH #!v$Ďюב::_G^GH|T|wܠ ޺WWVt0d}+WWpS?A Xb_C; $n"ԯ ,_5ExF9_5/!-_ - "К@m d5~7gq$ф9XFL2_՚3'_0_0t׫zuKoA兿f ;V s/嘉W- nom_[ _b Fom:3܇MW6d$GuHJ7pa`H`% C#@':P@ %&hF+ tMZhM 2 (d֐ΚZZtPZuCkH{ !5$אR`ClH !6$Ætؐ;bGBH #!vu$Ѯב:_/'W߻?[{[*6ʒ":I6UpMT ݟ*,3W _uiٯ¢6Sgr!#_ZhE56tkJdY#rX.b*~ek~F}_2t׫/oEeef+OeHfz_ 2_2xUfE~n53'ç~/_pۮN|֣߆7L3_yt&>[VmĠz|$P58wgЈ@G:& N%p:#9.tI @s]hA%VZhC-Lm !5Ve݄Vݴ^CkH} ɯ!5$ؐ`C"lH ɰ!6$Ďؑ;bGBHxɯ=#uu$Kwɵ ߶8~~U[)$Y .h2\}O M{ k-d+&᯸ N 6Sgj#Us%d+yA%VZhC-Lf-7h-/ejW] 3U93}y$_0ttߋ8_𬺟%e^ 1Z9/<-ߒNſjÚfĄç{vx=n>2mv'93J:뎑82nQs{hy|*ipʡtLJ(qP^jL3@hJ4'5ZhE56ȴ&|.YC:5n-I_i{*$3̚׷T3#Ruxh@r_R#27W-OAuS ʽʾʿ$¡4áDJĩDJĩDJĩvnϛʿvJ9*Nx =ީ*!9/S/e \y?Z֊^#vx8¥1%)> X_{翴zҊwQ^he6hgT}_%W\:_z0 tƿT;TkY\~5_&.{E T_+bVa{:5엞W,WwdUKE,}|\_0%c;>Slλ]<ΛjuIEr( ⨥'? qơ3@BLJ6Ѝn tg{=@Oz6Ћ^ 4@km 5@-z\A)ˆl(_1*Kh=-[O12o(ro(o(o(2p(rp( p( p*p*p*o-o*o*|O8띊~_r8h/S/e \y?ZVjqa1L~¥1lw@-Z1#b!>ނ_!Zhm(25[$.JSxRGKt*sg!vxK|?/&_w|܌U/լhqW@o _z"z_x\+ߑiW/V{hq$Nq{u;v`;oIJ%*8/ŏV+bɌD}(0@4BE?>Եn tk;@z2г^ jVZhcv m JY6fCy6XQYE)(n}zC7|C7~C7C8C98CY8Cy8S8S8S8Վ7~yS7ծ7|S7GyT lҐŢ_ __@vGlw@kĚe~ Ҋߚ& _g0䥁VZhcv Lշ>ӃPVlr\:_z0 tƿT;_Ã׌ _с\!V9= ^q G'b:v҆7~_,w|ɕ8:w\|07'kRQŢߡ Nߟ 8OЙ taK]!Tum@z0У lhihkm[4R P -ƿbTn| [6b4eP P eP PeP PePTNTNTNMet[TMM%TQ5rۿ?8qơ3@B8@75Н `G=@/z5@+ 1@;۶s,J<,Z Ũ,ݢ[=pJJJJ JJ¡,Já<JĩDJĩDJĩDjǛJjכJ䛣c8 `rX,> t T hnhAw ZĊk70-g_!Zhm(8UpQt4b3ԑs/]3ܙ~޿egŹ8P}Yѐso _z{_x\*ߑiW/mW{hqxNǧ\uSޛy˕yP]R6)UH.ʼnX4(G?f'Sq@0Х* tc[@z4Г bW- 2@m 3Pm&WPʲ4ʳW-ZOAuSJJJJ JJ¡,Já<é<é<é6n˛J6J9*F@z_`| O:<Z?gjq:) r?'Kc akE+_Z;'~3_Z?K 6@[ \ԧifgƕ#_@gK3;~W{TWT%Fr-9>^q 'b:v҆7~_,w|u8:w\z07'kRrQEjpXd|"> tn ] `|k@w7Ѓ dg@K 6@[ lۢl(͆lh1tSPlݲ)Ro(o(o(p(Rp(p( p(p*p*p o*oMo*ow5ީ*!}t T hn:KXlwDV3`zxi^he6hgTP1=E XGKƿtsg!z۟7_1.|E .\W ͵hqBo _zz_x\(ߑiW/W{hqyxǧ\sSޛy˅yPmRrN `\-Aq8j.h}?38}(p:>o Cg:7Ѕ. tPvm@z0У lhihk}[4R %P V-ƿbTn{ [b0%P P %P P %PP%PTNTNTNM%dVLyS7|sT{xxd-Q[^O@g:7Ѕ. th1Э to=@z1ЫZhm(XfPJLJYB9vPI3aQvP~%PP%PP%PP%TN%TN%TN1N%d-LS7|sT-?&`rqpЪgHNA0LhĵDgCꤕ"^#8m7_?8qOơ3@BLJ6Ѝn tg{=@Oz6Ћ^ 4@km 5@-\A)ˆl(_1*Kh=-[O12o(ro(o(o(2p(rp( p( p*p*p*o-o*o*|8 _rqp:g8Cr:x* k74vQҊ _dpi~oRk=O/-gd0~䥁VZhcv LhS/EoL藞;~/CߟUGe\W i}0@AKODO+t;2*jo"X>.1Nq{u;v`;oKJ&80ŏ G ?g'Sq@0Х* tc[@z4Г bW- 2@m 3Pm>WPʲ4ʳW-OAuS ʽʾʿ$¡4áDJĩDJĩDJĩvnϛʿvJ9*Nd =ީ*!?Z/S/e \y?G׈-/s_4ƿ7+>Kn!_ZψiB; / 2@m 3Ppi>pRGKtJsg!vv}G>7VGozE T_+ZVt$d~{/PgfГJ1L~iڛvE/ fs;>Slλ]<ΛjHEr( b-' qơ3@BhLJ6Ѝn tg{=@Oz6Ћ^ 4@km 5@-\A)ˆl(_1*Kh>֭O1Ro(o(o(p(Rp(p( p(q*q*q*o=o*o*|;ӁN{_`없\"3D__@vGl@/`1~¥1)>K kĔ~i>#4@km 5@~{7OcpU~.ЙRi~?N~Wi W/Cs-+q2f_\3~y~q~G]eW~_Ģ_9vr)zo~.W~M@HzT"^byga摀 tn ] v/6Ѝn tg{=@Oz6Ћ^ 4@km 5@mR P -EfTn4[=pJJJJ JJ¡,Já<JĩDJĩDJĩDjǛJjכJ䛣ۿ<읈~-_rqp::Cr2%x"%J~kw4vTq[/]_[)/d[k/.'D_ O@+ 1@;[HL|ygQ~6eo}^[{*(:p1 hi}(@MDtfXLC._ܯv/bC/i'םfwrwTOJU/Eqb (.b@?8qơ3@B8@75Н `G=@/z5@+ 1@;۶s,J<,ZŨ,ݢ[n>pJJJJ JJ¡,Já<JĩDJĩDJĩDjǛJjכJ䛣#8_rqp/S/e \y?Z5RA _焿pi iEZX3xDu}FK+yihk+S34S^.uĿaK6wƿ"oGoqwW{p+Zp_14W# /Hb\L#Ӯ_ڰ/b"/1vr)zo.M@IT"^GbQpg'sq@0Х*NƇ6Ѝn tg{=@Oz6Ћ^ 4@km 5@-:]A)ˆl(_1*Kh>֭O1Ro(o(o(p(Rp(p( p(q*q*q*o=o*o*|;8_rq<=Cr:x*kw4vTή[j/q?'KcLK_Zw{HzV3`K$@+ 1@;צ*y8Ew XGKcK6wo껟;-׽/Cs5+qz0@AKDO+Kt;2*jo"X>.0Ҏ i'WfwrwTMJU/Eq` (.?~m338tfs]@WP1Э to=@z1ЫZhm(ضE+(eP `b+Feغu)S P eP PeP PePP"N%T"N%T"N%T;TMMTTM%~'w2iT lҐŢNO/pnjF׈o9/\_ZvTπ'~3_Z?K 6@[ \~χ -c2gaK~4wfb~>ߛWwq[b8.v}ٯYю1@AKDO+Kt;2*jo"X>.0Nq{u;v`;oGJ$8/_-h}?1H׌D}&0@4BE?>Եn tk;@z2г^ jVZhcv m JY6fCy6XQYE)(n{zC7|C7~C7C8C98CY8Cy8S8S8S8Վ7~yS7ծ7|S7Gɝdp;[e4 gHNGOE/p:.> _0~N @V|x/g0奁VZhcv MJL}3E{ XGKtsg!~ߟUxoq;l1-8P}Yё`{:5W,wdUKE,:~|\b0i'םfwrwTQJU/Eqd (.:S7tfs]@WOP1Э to=@z1ЫZhm(ض>Pʲ4ʳ׌m7bͧN7{C7}C7C 8C)8CI8Ci8C8S8S8SxS7ݞ7SzS7|sTܢ?}/EC. *%<P'_%lq_(%~FK1b~ɶ[Hz /_$/ 2@m 3Ppij8W}F69KsG/^/~޿~}pрVGRUp+p_34W'%S}25NHqL]]L_Ģ_ S+\vCޛ-ߙ˥ߙP]R6)UHŁX6_dpLp|"> tn ] @75Н `G=@/z5@+ 1@;۶r,J<,Z Ũ,ݢ[=pJJJJ JJ¡,Já<JĩDJĩDJĩDjǛJjכJ䛣#8 _rqe3$__@vGlw@l3a_%_焿Ғλk/ζC{ħ4Ha/?K 6@[ \6ψ1`/=v:_͝WoQNZ\W լuk/==X<.ȴ𗶫oXb` Եn tk;@z2г^ jVZhcv m JY6fCy6XQYE)(n|zC7|C7~C7C8C98CY8Cy8S8S8S8Վ7~yS7ծ7|S7GHqT lҐůzt T hnhk'g9/ĿV⳿@ܞ-_ZHiB;$/ 2@m 3Ppm>p1&/ /]3ܙ~ݿ}?O7fEh~\ʊn|o _zz_x\(ߑiW/U{qym~ǧ\s#ޛy˅yP-R)UH.qXhh}?0DD}$0@4BE?>Եn tk;@z2г^ jVZhcv m JY6fCy6XQYE)(nzєyC7{C7}C7C 8C)8CI8Ci8Sy8Sy8Sy8Ն7}myS7զ7|S7Gȝ $'p;[%4`q/S/e \y?IuV|8L~¥1g&n!-_g$0H~ǟ䥁VZhcv MU ~Ɇ!.uDaK~8wFw|T~WjL\W ŬȘ^~q 'ǥb:vn7~~_,~w|U8:w\y07$RrQq0Z ~?5=o Cg:7Ѕ. tPum@z0У lhihkm[4R P -fbTnz [b4eP P eP PeP PePTNTNTNMet[TMM%TQ7r)NeV/ 88lgHNGOE/pnj^#Y|8~JP a+|@~ivIo_Z?K 6@[ \Т7rK&tJsg!vvw[xcuKp\_14ײ'!c{:5䗞W,WwdUKE,}|\_0i'fwrwTIJU/Eq\ (.Oh};0DxH@@g:7Ѕ. tPC]@3н h'=@Zhe6hg`۶{\C)ˆl(_3*K{[f8P %P P %PP%PP%T"N%T"N%T"NMt{TMM%TQwrNND/88l4!9<ZEĵ?gꨵ׈[_g$tiJ~=nZ2GZYCt /_ / 2@m 3Ppej&\~? EoLC/_|( eXߏw}qq+Zpz5W@uſfh.hEGNVek6#r1MqE/ ſWL;7[ƿ3oſ3'tRz\/#Aq8-߱ ߟ 8OЙ taK]!Tum@z0У lhihkm[4R P -ƿbTn{ [b8P %P P %PP%PP%T"N%T"N%T"NMt{TMM%TQwrGNſV/ 8h/S/e \y?%g; 9/ſk׼OL3_\/?K 6@[ \6_thD9_@gK3;~W>W5o,yU-Jח8s Թ/4bNL#Ӯr_ک/bꂹ/O;ֹ広 )]Z$W@P\,liD}0@4BE?>Եn tk;@z2г^ jVZhcv m JY6fCy6XQYE)(nxxC7zC7|C7~C7C8C98CY8Si8Si8Si8~7|xS7՞7|S7G}9T lҐG$ϐ} }-C_ڽͳ׈-~8L}JP a+xyln}i># 4@km 5@4__:_z0 tT;O~?wzI%A `pi ?l-b~j=O/-g俴_!Zhm(2U1[44S.Ri?DN:o-z/p\_14W'%c{:5W,׊wdUKE,}|\a0-N.;@҃ &)]^$׋@P\,[bxL`:3й. ti+|k@w7Ѓ dg@K 6@[ lۢl(͆lh1tSPlݺ)ro(o(o(2p(rp( p( p(q*q*qo*o]o*ow;~Ow*~iQ 2<PF/`?'Kc a3Ňi-$E|K/Wǟ䥁VZhcv .MՇ{7 .Rm ?o_ߛWRs+:p_14׳!g /DbXL#Ӯ_گ/b/O;7[nk&ڤt}Rz\/AqX4!9Z  Nޟ >o @0Хj tc[@z4Г bW- 2@m 3Pm}eCi6gEKn> -O3Ro(o(o(p(Rp(p( p(q*q*q*o=o*o*|;Eo'{'_b\>)ydKDKhhEG /]_\쁱vXq>!1B+䥁VZhcv .MEJW=u_|( ſXߏ[+=~׼7י+_с 9ſ(_^,whEE,~|\b(%_1Slμ]=ΜjIEr(N HF?38|(p8>o Cg:7Ѕ. tPum@z0У lhihkm[R P -bTn{ [b8P %P P %PP%PP%T"N%T"N%T"NMt{TMM%TQwrGNV/ 88n//S/e \y?YF_0~N ˿U/Oi># 4@km 5@JJDRGKtjsg!~ÿe+[\Z\W hi}0@AKODO+t;2*jo" X>.1Ҟ i'םfwrwTOJU/Eqb (.fmhpTx|"> tn ] `|k@w7Ѓ dg@K 6@[ lۢl(͆lh1tSPlݺ)ro(o(o(2p(rp( p( p(q*q*qo*o]o*ow1ީ*!ǭ3$__@vGlw@5^yE/s_4ƿSĪ[ǿzҊwI^he6hgTſHMĿ79K/=w:_͝-=ÿ?WW_%z 9ƿ_\3qG]ſ__Ģ%_9vr)Nzo.M@IT"^'bqh}?3PD}*0@4BE?>Եn tk;@z2г^ jVZhcv m JY6fCy6XQYE)(n{zC7|C7~C7C8C98CY8Cy8S8S8S8Վ7~yS7ծ7|S7Gɝ 'p;[4˿DNO/pEG\kOqi/s_47ZwHz3V3_|wY^he6hg .M/X/q/=w:_Νb˟k[\W/Cs=+Zrr2濽_\3qG]忴c_Ģ%_9vr)zo.M@5J5:3q( bqh?6\׌CD}00@4B`1Э to=@z1ЫZhm(طE+(P e`b,Feغu)S P eP PeP PePP"N%T"N%T"N%T{TMoΉԮ7|S7G˝Dp;[E4A=@3`2`@ vHl@N k 0s`4&7x$PEL}FL yihkKS<:*~ފEwL3; 0Cw{ xkq;0Nq{u;v`;oIJ%80_F;2LxP@@g:7Ѕ. tPC]@3н h'=@Zhe6hg`۶\C)ˆl(_3*K{[f8P %P P %PP%PP%T"N%T"N%T"NMt{TMM%TQwrNN/8_"'_'_B엸vGlw@Ni[^(%~FK|`_Z'nO/'4WHţ4@km 5@/g|'/>ŘsG/^/ܗ~>{Es-8P]YёP}25q]Ŀa_Ģ%_1N;1@͖C >)]^$׋@P\,_n3D}.0@4B P1Э to=@z1ЫZhm(ضE+(eP `b+Feͧغu)S P eP PeP PePP"N%T"N%T"N%T;TMMTTM%~'w4yT lҐwt T hh։5RG` /s_4+~g _g_!Zhm(2?5b⳿8d҃/]3~~_=<(?k]\\W ȱR{:5W,wdUKE,:~|\d0i'WfwrwTQJU/Eqd (.:S38tfs]@W'C]@3н h'=@Zhe6hg`eCi6gE[4bͧN7{C7}C7C 8C)8CI8Ci8C8S8S8SxS7ݞ7SzS7|sT܏NV/ G[|2<PDan9 0\`[I/d_b?1`Za/?K 6@[ \6_q].ЙRm?Do=-{'ͯWt@ſbh.gECNo _z"z_x\,ߑiW/W{hqxǧ\wSޛy˵yPmR>)UHʼnXjh}?3PD}*0@4BE?>Եn tk;@z2г^ jVZhcv m JY6fCy6XQYE)(n{zC7|C7~C7C8C98CY8Cy8S8S8S8Վ7~yS7ծ7|S7Gɝ 'p;[4gcgNǿOſ/pnhiZ'׈҆0~N VT;y!>|FKo?K 6@[ \(zc;L/Cmqӿs+:pzŚ_\W hɘ^Nq ''b:vv7~_,LiNq {u;v`;oKJ&81AkbS_38tfs]@WP1Э to=@z1ЫZhm(ضE+(eP `b+Feͧغu)S P eP PeP PePP"N%T"N%T"N%T;TMMTTM%~'w:yT lҐwt T hh]#vxP|3p?'Kc |"/S>ރ_!Zhm(4UoQi .K/=v:_*͝-볿e+Y\/q \̊vo _z z_x\*ߑiW/V{hqxǧ\u3ޛy˥yPMR.)UHyXyhG?Oěg:3й. ti+ݿ@75Н `G=@/z5@+ 1@;۶JY6fCy6XQYPlݲ4)ro(o(o(2p(rp( p( p(q*q*qo*o]o*ow[govw"%~qI *%<P/FlQK.M/.I;U#b#: Q^he6hgTX%&~ߊEKǿQ:ſ#~>Nywqkƚ\ Aek6b1MqE/K ſWL;7[ƿ3oKſ3'tRj\-#AqhFC'xT`:3й. ti+|k@w7Ѓ dg@K 6@[ lۢl(͆lh1tSPlݪ)2o(ro(o(o(2p(rp( p( p* p* pn*o=o*ow;~w*~iI| 2;m~OugŽ_LҘ *>KXk/F c~ǡhkS6ÿ8bD1_@gKU3}__|Pyouê q\Ίo _z"z_x\,ߑiW/Y{hqxǧ\wޛy˵yS6)UHũXg'퓁q@0Х* tc[@z4Г bW- 2@m 3Pm6WPʲ4ʳW-zOAuS ʽʾʿ$¡4áDJĩDJĩDJĩvnϛʿvJ9*N@{``\43$``@vGlw@jQ|0~¥1k7/-gd_!Zhm(0\&? l)ԑs/]3ܙ~޿[\}W:^Kf4.v}ɯYь1@AKCO+Kt;2*jo";X>.0Nq{u;v`;oEJ#*8-ꃿC|s{"> tn ] @75Н `G=@/z5@+ 1@;۶q,J<,Z ~Ũ,ݢ[/Nq{u;v`;oGJ$8.0Z ~?5=o Cg:7Ѕ. tPum@z0У lhihkm[R P -&bTn{ [b8P %P P %PP%PP%T"N%T"N%T"NMt{TMM%TQwr)NEV/ XB3$__@vGlw4w /s_4&7*n!-_Zψ~='yihkKS34C.udaK~6wfoߟW:^:W/Cs=+rZL{/Pfѓb1LJiڛvE/K s;>Slλ]=ΛjIEr(N Ձh};xN tfs]@W53Եn tk;@z2г^ jVZhcv mUl(͆lh!UtغU渚S P eP PeP PePP"N%T"N%T"N%T;TMMTTM%~'Nǽul;!ֱS/uh"<♶?Xr7AOҐ"Zw5$6 0αC+ 1@;v̅g7$&L/Еs}J??{Y5W@jhfEKNߎ5yW-wlw}Xb@U$/-g$ 4@km 5@ψP1RGK&tJsg!zv;=8|ɸ7)u迁~\͊v /D@DbVLG#Ӯ_ڭF/b /O;g7[GnKF&t]Rz\/Aq8mr>?8qơ3@BLJ6Ѝn tg{=@Oz6Ћ^ 4@km 5@-\A)ˆl(_1*K=֭{O1Ro(o(o(p(Rp(p( p(q*q*q*o=o*o*|;8~_rX/S/e \u7?|/`?'Kc |g9+_ZvIof}FK gyihkS6z;L/C-}KOW5[37P}ٯKYю1@AKCO+ t;2*jo"X>./1vr)zo~.~M@5I:/q( ŢO ~?9=o Cg:7Ѕ. tPvm@z0У lhihk}[4R %P V-bTn| [6b4eP P eP PeP PePTNTNTNMedV͜LmzS7|sT@{S/UKC."9<Z?gjq:{ r?'KcKK:~y`gZYI|K/%gyihkS=G ; /Cǿ_ո7P}kYюso _zz_x\(ߑiW/V{hqyxǧ\s3ޛy˅yPMR.)UHyXa_3N8tfs]@WP1Э to=@z1ЫZhm(ضE+(eP `b+FeغU)S eP P eP PeP PePNTNTNTTMMeT{TM%~w:AT lҐⴅ!:<Z&?g-גA_$piL~iIZCJ[HZYI|K/%gyihkS6_4;L~/UCN~w'`\_14ײ /$8$bPL'#Ӯ_ڭ&/b/i'לfwrwTKJU-Eq` (.-{'G?}Oěg:3й. ti+Ϳ@75Н `G=@/z5@+ 1@;۶JY6fCy6XQYPlݢ4)2o(ro(o(o(2p(rp( p( p* p* pn*o=o*ow['ovw"%H~qȷ7۽//UK\y?VLr_(%~FKuбf!M_'$4WH~ų4@km 5@թH~L01ͨ+GQ~/w׽q \ˊ; {/PfB1L ivE/ s;>Slλ].<Λj Luf jQEc?8qơ3@B<@75Н `G=@/z5@+ 1@;q<JLZŨݢ[j=`JJJJJ JJ¡,Jé4Jé4Jé4jǛJZ91o*|;;^`.LҖ8@ tn ] ֑`1Э to=@z1ЫZhm(E'(P e`άO,{&ΡϡСѡ$ҡ4ӡDԡTթ\թ\թ\j[ʿB1o*|ŸŸ>\vt tn ] ͈ofk@w7Ѓ dg@K 6@[ ۢm(ӆRmkO(k=<8]P %P P %PP%PP%P&NeT&NeT&NeTTNp̉Զ7|S7GW3׿gO_=N?Ͽ׿?_?~( ??O/PK t_Nh PKBt=Fl3IdocProps/core.xmlPKBt=FW(^#F C_rels/.relsPKBt=F%8(_[Content_Types].xmlPKBt=F|wؑdocProps/app.xmlPKBt=Fp&xxl/sharedStrings.xmlPKBt=Fkdx axl/styles.xmlPKBt=FZxl/workbook.xmlPKBt=FX0 xl/_rels/workbook.xml.relsPKBt=F t_Nh  xl/worksheets/sheet1.xmlPK ?kSpreadsheet-ParseXLSX-0.35/t/data/encryption-agile-123q.xlsx0000644000175000017500000003200014576335353022465 0ustar michamichaࡱ>  Root Entry pRT`EncryptedPackage"xDataSpaces@S`b.T`VersionL <Microsoft.Container.DataSpacesh EncryptedPackage2StrongEncryptionDataSpace2StrongEncryptionTransformXL{FF9A3F03-56EF-4613-BDD5-5A41C1D07246}NMicrosoft.Container.EncryptionTransformDataSpaceMappDataSpaceInfo0=T` T`StrongEncryptionDataSpace4@TransformInfo iT`Ѐ)T`StrongEncryptionTransform4 iT`6'T`PrimaryEncryptionInfo @ ̮}mGTL BR2TH*`pM*[od)Ӑ_Hbt3f|AF(xFIJl'83Cm WsQ0)\Yp M=2o#Z&8;ƘIŠ>5dP,MS4V=1JF'}Zj:oq+coѨֻx Hr԰WL.Sw"D}];]!Mr]].qϹH%ۓc1-MHoO:;أPQŰK&X? ՛Q8VދgI b0a΋HoaK(/1PQr=/ v!W*Rm v1u/~ ]yyFlnj6;*B@dh R 5`IH%-$X…92ݨ(5|ln!ES+ܜZ'\Tv$, YK1lZpk6q#^BA6*CWI3x\|Ҝ.[x>~n@ͮB|wh Ӯ4tk]QTVQO7!"kcpq 4@D{<`u^VsQ&Y|X.U㺡>! ?W3K]mFp,$YIǩ0w1a~Sf wA-V_Dt6bc3$^}=1iUjCprh(pI+$$h6z[nR쉽*"ak|"GYEv>3ù.~9%hJ_Ԭ|ZO`@I;of^ofO!#A '=+Y{P T##Z++"d 2"ٝDy&u(3?_ 'Nr V:%GuOEɂ\×M[(yf<6Z *>Ň5PBC$ ޫMN^E#Ed6Eš oN2qwجlȖEJdvrϓ(0l7YMEǓ&&\@ ٝU} \Z1m|\fYVx)=D`S(;}{?55, lnҽaGF|`NU࣎Vؙt脩 |Gm:amȩ2wvRygDN!-A(Ύ^G͏ ޟ51o)Gj< e,AN}ư`&Nw&#%\wQT*:on.o:4KSG!+Kd1tyGŇ F)DG#%Eُgi)U5煶-&8IЛds%%^y^:>4L4, >m0!`*v[{t-Z/ *c\qP9_ ejE\H$CM) y+Կe n졥x:;bE{߆>Py)-oaIXjH?o0+C HesMnqr9E;xwh]p)x{2݅> {OcenpM#+R/G[y-u<& 췊**w4)Ө{e?Cf sP98*D\U9XV0fϞlkU/_Y4Hdk٠.\, ,{%ś'ֈ ?W8TMօp,=J J~=C&P j?=PrNP[Q'O=8MZv>"P\^2PYЧG3yDB*3kAufėO:s0H!Z U½z\&K9Փ I XQ~ m<{Ơ*b눼6±VT-jOp2g^n'yĩ!?jXL(ع0{!JaJLN5F\´qS^D-/!c)$5|w][F1'TغLQV!@ʦGY:/D纱zZ) P2e G$H߯m.';p4Qe SH*=Sx|!*MxN$H #rЀ2"zz6j5qPk\=QwxM3= /H郤 64 뾥A| >׉??!s,mf|vvA`T`Ŗ>`y$/K)Y[+KTH 80Om{xOV^A=u[!`Zv6gʻE8y>)jFQ !ozzWHE1=l!lz@^:^]m暸jgٜr>hۏcg2Q֞x@4 㭻^PQ3(`T(+f,U۲aUM;ew';f߆2[4:jD?tt4xHȝ[OF}H+8Mg>_wxҝ8ոg,+Y^FՋv#޻!-3.TWJi¼xC gJGuJlk~Ϭ a^CUhcb);a&4Nò]@ )olf Z)Aہ+Y'Pԭr: Kq4O8fI[ĥຘ2-yO$2e567GNb7ۯjͱbJĄbF[ch Pn>U8*!R0KyY^ j g"hlWgn)^+EGHu!(8;ت7g(цo!z"Uqh|l>%_Nq<ĘE  Uvh"nfѢZMˏ3qD24fdᙾ^7ٲB5Nc!FF\*7yΧKR^V}wzpeӪ'Dr>R˄ z [ě5q. w6 Ma|>i<eԜ> ]51]4\hVAG쒱OftU|s@o˹-S"+IGBmή4{UyფK=J?lN,n<9U=مHO8fWS㛌L|`5x6.ų=tp/ `? %VRC~&5Q8.H&lEQ!UO?;vS]HdH$El6G =F.vV+1ox|DޭxMv%h^}oy29t8{<3.X3Qvw47a^bܑ/EZ#ƥ)4~5UAdb2UG`rKR^\y, Ɨ3ͬ(2+G bĴYÁkdlEr,򆹫˦LVZrWn|)K'!ǼIS7 XlWs ڬIzD𹣚 dkӗd$F(]茶aRDz1bJ:|tX~ 3,p RZVТpGIfai:c"d'^C;%7XL9} m$YL[C՗gJaJNxj)R2"/L(<2uQAJYTbnDaݷD5),ppT(ݖ%?כi'1(FH/q6pͭ"x#A%}.},Õ ()9htlÓw671;h0lCUvV!1$ }2Vl##fٰ{?-Rdk L8NzrtE2tX)xLHYtOF \)4BP?@?F7_fTKT5kv^-vھl  \2% ۟UD:;JC<r5 l 4Y٢3Q:3ISXc%_= ɛt8'X6Ÿs?0]rS AUJ4 XMޅa)aWdc(RQ&n-܃rZ[qEtf'?k)&^Lx'D<6F $yїm] ]>j\5OˎI/>|bwu& Z5+q=f)#. ͌+/,muq9{Te _nҩB:.8]/!LWܣbJnҀH D'p粐K.BrÅN#ʅ[J= GA=K3 ;K:3i+ulo)TVd$HSaAygFpRׯ<:IOC*w)81o0fAt9B;8sy(. r9.J !8}xm@ yg L.jeƜ "5{^<ʘ re'?ִ1%"KaTS+Eu xy.Y$O.S$'^ Ch vYtQ1@Z_]%<ߴW9K\5ҌJ=s]sOW;;%>E)B0ܫ˴]ޭQ%SQ:p]t^ե:i̖ޮ#pQf58Dd,VOT2郢Eߞ_{k4a)&4Efdb5LOUSi +6rCW )[Ub# 쀊;GlQZ}A-ǥwbƫȡTg~"0:C3A>GGfMBp VK70B@0!Yۑ33y95 =(_%vP"qj2\ ڗ~9s4V.48ܭ ")?8m{&LNPg쑳%o)k)!·ph~Dmg[W.^5U羚(,їHFc:S.`EwĦz^CK4섛W!~ܯ@6FUFԋhzt Snx3$y֖C8G$kzɷIdUVV]۩U\p*gm2TBSUG5B VyyGb<;)ki*Ƭ=%H5yTelyfS{JC6]8Ã)f%_0m bLYxW?s*d(@95LGLY 2`>.*vtuՒ4Cu16|9Ksm6:Y*A+#΀VR@g74T]Gt%'l^-P~iK?(Zna|rT\Rj' t-TV 0g1q u yDh;'hXڗ1Oi)syg!/ 'e;ݟcĴ*`s`5>a9UAD)ҩk$;&솥ѴK&<%lp&DuWnŢ K6V߿hi[n"*"SriaANZ:Y]8C%A$'iR(< cX] E\(ԮIKKW_g S@e :~ҬkOeG93wWfl3/CSs7u5iI1u4lLzB6gUjH2S10LjVo0XmEV8/Al4oZjBF6+SWSNGPf9FUVQ==" encryptedHmacValue="fEesuUg7D3L1S9sP+5W7MN6HGhTGz4Cjh+PNnLz3DIGcR9H2ar0xu0jejganryP/PlsRMqHCdLuejn9HTwkkOw=="/>Spreadsheet-ParseXLSX-0.35/t/data/bug-4.xlsx0000644000175000017500000001651114576335353017457 0ustar michamichaPKhB _rels/.relsJ1}{wDdЛH}a70u}{ZI~7CfGFoZ+{kW#VJ$cʪl n0\QX^:`dd{m]_dhVFw^F9W-(F/3ODSUNl/w{N([qTuPKhBxl/sharedStrings.xmluTMo0 W/v.YeءK$X%LH뿟``:GGRgD4/&(exS&W0[UJDM=-y&zo~Pey'q:9$E 59(EYUJ(;B,s|/ܺ9K*q ׆^؞$i:;<Yz#dzX;^ " &wYHX!*BƁtܚV_gM hZjLR&L03il@}`hZ $cƎ P; M+Vwp#FHOK;V:42Dw1)= {;H/0󚜿}ڤ8pXz;ollug<|?Ҹe{"7G3`䃤dگ³LƷ֠fhXYS#ǼI?`5djZ6'A:1KӨcjAPy i4 h vǀm|}D/XH9)j0*}yMOO{wJ11L91r)y"? tGOPKr)X,?PKhBxl/worksheets/sheet3.xmlTS1~_{9p(3V:ӷp2$'_MSPdo_=u M>g`2lRp?/пF| I6*X7#vXG ( z`wGJ=uD.XUԵͣH{kQ!?dk2&]֢r %%)KXdH2qVw~@T"tut> yLxA*U7+^ʣP6Gh+/.lgn:{n5Q^{F<p#)韡ͺbk-+# dq?2 5 Ҋi:4v[ؒ7߲?6 H*/Av~[|6nIa 0 B3*+ sϴB4Y#Fv"©wdR9qg|,ߞ✌Q懂ױl*66g? PKwN:PKhBxl/worksheets/sheet2.xmlTS1~_{9p(3V:ӷp2$'_MSPdo_=u M>g`2lRp?/пF| I6*X7#vXG ( z`wGJ=uD.XUԵͣH{kQ!?dk2&]֢r %%)KXdH2qVw~@T"tut> yLxA*U7+^ʣP6Gh+/.lgn:{n5Q^{F<p#)韡ͺbk-+# dq?2 5 Ҋi:4v[ؒ7߲?6 H*/Av~[|6nIa 0 B3*+ sϴB4Y#Fv"©wdR9qg|,ߞ✌Q懂ױl*66g? PKwN:PKhBxl/worksheets/sheet1.xmlXr6}Wp^ ^=2il˱-B' %H'f\.{|Ύ:ąpR.hx{:5O,-hI&+7{ʾkB#]s^FbM6iъbdI&╭FuH66i^33>r/%]l7Fu^tfg2/8a4a/Ӣ&bJWdNS#="sZ'qOy\TV]>@q%>4꺟y)2{^j) ZvKiUNXzԸ\沅wݼ)ݦ {eO\,$KbEgiekoEfL2qMʙ`STu52cjcCr l}uoO WJ'˗Kw%Wλ:,Ez:YִaE=cc']c}PKǃ>PKhB xl/styles.xmlXO0~_aY{IK[`Ji҄iҶ7q ǎlZ PiM鋝/w};NUUIсH}|7?c 1RPƧ;O5>Ό)>:2} *N"UN \х$)ugNN'y"B!˫˛U x6΋?޻۷Z[x\@Frl24,GIHƥR!.|n~J/<ҙb?g{^6^,x1*u%AMiuz4v.c#@(f$O9!\S܂wEb̎F%1F0iVȔ{})n<҄GT mS**#&RxL1q?!3m ]iH%`Xd)`H1TQbqӸ^M*y1Sy/U]\Նo%kM 31A f('{fWj&{fOjN1N^"Qfg??6{eۍ3Abɸa^sԠW;$Bs:ͅsҰ[if;РϖjjR)*uth7lٮZY PK`uPKhBxl/workbook.xmlRn0+k=a9(ɡ4ir^+5E n]я8MDqwg83Ί hd1ʥ@6nYɟRDz|(/[V+x+,5,[DlVYցqr0 (jݡI@ ck(X|_cٗ`G߃A5OW~X+<F^PxI~C6>=ԕd" ܍wNom%)R$ciQ?*(Ͳ姦h4t?bR͆GigShV ̘DS[fV+ty.ADOwГ`S{CxүSl?`kN㏱_%Fy_PK-ѰIPKhB[Content_Types].xml͔OK1KI[ADvۃQ ֳdC&;ٶ"Ң^6,~/$tmbw5!+)kj4+t2XPÚ)!P`%rG+F1.KelR=. Lt/-LgPKhBf; _rels/.relsPKhB4&edocProps/app.xmlPKhBnN>5docProps/core.xmlPKhBil$xl/sharedStrings.xmlPKhBr)X,?xl/_rels/workbook.xml.relsPKhBwN:xl/worksheets/sheet3.xmlPKhBwN:P xl/worksheets/sheet2.xmlPKhBǃ> xl/worksheets/sheet1.xmlPKhB`u xl/styles.xmlPKhB-ѰIxl/workbook.xmlPKhBcI>g[Content_Types].xmlPK hSpreadsheet-ParseXLSX-0.35/t/data/bug-10.xlsx0000644000175000017500000002215314576335353017533 0ustar michamichaPK!U6+w([Content_Types].xml (TN0#(q[Bi
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Crypt/Cipher.pm
StatementsExecuted 11 statements in 169µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111235µs9.43msCrypt::Cipher::::BEGIN@9Crypt::Cipher::BEGIN@9
1118µs9µsCrypt::Cipher::::BEGIN@3Crypt::Cipher::BEGIN@3
1115µs25µsCrypt::Cipher::::BEGIN@7Crypt::Cipher::BEGIN@7
1113µs16µsCrypt::Cipher::::BEGIN@4Crypt::Cipher::BEGIN@4
0000s0sCrypt::Cipher::::CLONE_SKIPCrypt::Cipher::CLONE_SKIP
0000s0sCrypt::Cipher::::keysizeCrypt::Cipher::keysize
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Crypt::Cipher;
2
3215µs210µs
# spent 9µs (8+1) within Crypt::Cipher::BEGIN@3 which was called: # once (8µs+1µs) by Crypt::Mode::CBC::BEGIN@9 at line 3
use strict;
# spent 9µs making 1 call to Crypt::Cipher::BEGIN@3 # spent 1µs making 1 call to strict::import
4218µs230µs
# spent 16µs (3+13) within Crypt::Cipher::BEGIN@4 which was called: # once (3µs+13µs) by Crypt::Mode::CBC::BEGIN@9 at line 4
use warnings;
# spent 16µs making 1 call to Crypt::Cipher::BEGIN@4 # spent 13µs making 1 call to warnings::import
51400nsour $VERSION = '0.080';
6
7219µs245µs
# spent 25µs (5+20) within Crypt::Cipher::BEGIN@7 which was called: # once (5µs+20µs) by Crypt::Mode::CBC::BEGIN@9 at line 7
use Carp;
# spent 25µs making 1 call to Crypt::Cipher::BEGIN@7 # spent 20µs making 1 call to Exporter::import
81500ns$Carp::Internal{(__PACKAGE__)}++;
92114µs29.43ms
# spent 9.43ms (235µs+9.20) within Crypt::Cipher::BEGIN@9 which was called: # once (235µs+9.20ms) by Crypt::Mode::CBC::BEGIN@9 at line 9
use CryptX;
# spent 9.43ms making 1 call to Crypt::Cipher::BEGIN@9 # spent 1µs making 1 call to UNIVERSAL::import
10
11### the following methods/functions are implemented in XS:
12# - new
13# - DESTROY
14# - blocksize
15# - decrypt
16# - default_rounds
17# - encrypt
18# - max_keysize
19# - min_keysize
20
21sub keysize { goto \&max_keysize; } # for Crypt::CBC compatibility
22
23sub CLONE_SKIP { 1 } # prevent cloning
24
2512µs1;
26
27=pod
28
29=head1 NAME
30
31Crypt::Cipher - Generic interface to cipher functions
32
33=head1 SYNOPSIS
34
35 #### example 1 (encrypting single block)
36 use Crypt::Cipher;
37
38 my $key = '...'; # length has to be valid key size for this cipher
39 my $c = Crypt::Cipher->new('AES', $key);
40 my $blocksize = $c->blocksize;
41 my $ciphertext = $c->encrypt('plain text block'); #encrypt 1 block
42 my $plaintext = $c->decrypt($ciphertext); #decrypt 1 block
43
44 ### example 2 (using CBC mode)
45 use Crypt::Mode::CBC;
46
47 my $key = '...'; # length has to be valid key size for this cipher
48 my $iv = '...'; # 16 bytes
49 my $cbc = Crypt::Mode::CBC->new('AES');
50 my $ciphertext = $cbc->encrypt("secret data", $key, $iv);
51
52 #### example 3 (compatibility with Crypt::CBC)
53 use Crypt::CBC;
54 use Crypt::Cipher;
55
56 my $key = '...'; # length has to be valid key size for this cipher
57 my $iv = '...'; # 16 bytes
58 my $cipher = Crypt::Cipher('AES', $key);
59 my $cbc = Crypt::CBC->new( -cipher=>$cipher, -iv=>$iv );
60 my $ciphertext = $cbc->encrypt("secret data");
61
62=head1 DESCRIPTION
63
64Provides an interface to various symmetric cipher algorithms.
65
66B<BEWARE:> This module implements just elementary "one-block-(en|de)cryption" operation - if you want to
67encrypt/decrypt generic data you have to use some of the cipher block modes - check for example
68L<Crypt::Mode::CBC|Crypt::Mode::CBC>, L<Crypt::Mode::CTR|Crypt::Mode::CTR> or L<Crypt::CBC|Crypt::CBC> (which will be slower).
69
70=head1 METHODS
71
72=head2 new
73
74Constructor, returns a reference to the cipher object.
75
76 ## basic scenario
77 $d = Crypt::Cipher->new($name, $key);
78 # $name = one of 'AES', 'Anubis', 'Blowfish', 'CAST5', 'Camellia', 'DES', 'DES_EDE',
79 # 'KASUMI', 'Khazad', 'MULTI2', 'Noekeon', 'RC2', 'RC5', 'RC6',
80 # 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64',
81 # 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent'
82 # simply any <NAME> for which there exists Crypt::Cipher::<NAME>
83 # $key = binary key (keysize should comply with selected cipher requirements)
84
85 ## some of the ciphers (e.g. MULTI2, RC5, SAFER) allow one to set number of rounds
86 $d = Crypt::Cipher->new('MULTI2', $key, $rounds);
87 # $rounds = positive integer (should comply with selected cipher requirements)
88
89=head2 encrypt
90
91Encrypts $plaintext and returns the $ciphertext where $plaintext and $ciphertext should be of B<blocksize> bytes.
92
93 $ciphertext = $d->encrypt($plaintext);
94
95=head2 decrypt
96
97Decrypts $ciphertext and returns the $plaintext where $plaintext and $ciphertext should be of B<blocksize> bytes.
98
99 $plaintext = $d->decrypt($ciphertext);
100
101=head2 keysize
102
103Just an alias for B<max_keysize> (needed for L<Crypt::CBC|Crypt::CBC> compatibility).
104
105=head2 max_keysize
106
107Returns the maximal allowed key size (in bytes) for given cipher.
108
109 $d->max_keysize;
110 #or
111 Crypt::Cipher->max_keysize('AES');
112 #or
113 Crypt::Cipher::max_keysize('AES');
114
115=head2 min_keysize
116
117Returns the minimal allowed key size (in bytes) for given cipher.
118
119 $d->min_keysize;
120 #or
121 Crypt::Cipher->min_keysize('AES');
122 #or
123 Crypt::Cipher::min_keysize('AES');
124
125=head2 blocksize
126
127Returns block size (in bytes) for given cipher.
128
129 $d->blocksize;
130 #or
131 Crypt::Cipher->blocksize('AES');
132 #or
133 Crypt::Cipher::blocksize('AES');
134
135=head2 default_rounds
136
137Returns default number of rounds for given cipher. NOTE: only some ciphers (e.g. MULTI2, RC5, SAFER) allow one to set number of rounds via new().
138
139 $d->default_rounds;
140 #or
141 Crypt::Cipher->default_rounds('AES');
142 #or
143 Crypt::Cipher::default_rounds('AES');
144
145=head1 SEE ALSO
146
147=over
148
149=item * L<CryptX|CryptX>
150
151=item * Check subclasses like L<Crypt::Cipher::AES|Crypt::Cipher::AES>, L<Crypt::Cipher::Blowfish|Crypt::Cipher::Blowfish>, ...
152
153=back
154
155=cut










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-pm-73-line.html0000644000175000017500000062427414576335353022756 0ustar michamicha Profile of Archive/Zip.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip.pm
StatementsExecuted 541 statements in 3.46ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1114.37ms9.88msArchive::Zip::::BEGIN@11Archive::Zip::BEGIN@11
1112.13ms2.30msArchive::Zip::::BEGIN@6Archive::Zip::BEGIN@6
1112.04ms3.83msArchive::Zip::::BEGIN@9Archive::Zip::BEGIN@9
1111.46ms1.64msArchive::Zip::::BEGIN@10Archive::Zip::BEGIN@10
111410µs3.66msArchive::Zip::::BEGIN@7Archive::Zip::BEGIN@7
111363µs458µsArchive::Zip::::BEGIN@12Archive::Zip::BEGIN@12
193272µs152µsArchive::Zip::::_readSignatureArchive::Zip::_readSignature
82241µs343µsArchive::Zip::::_newFileHandleArchive::Zip::_newFileHandle
81129µs35µsArchive::Zip::::_CANArchive::Zip::_CAN
82223µs80µsArchive::Zip::::_binmodeArchive::Zip::_binmode
11116µs52µsArchive::Zip::::BEGIN@37Archive::Zip::BEGIN@37
11113µs27µsArchive::Zip::::BEGIN@289Archive::Zip::BEGIN@289
11110µs10µsArchive::Zip::::BEGIN@3Archive::Zip::BEGIN@3
4419µs12µsArchive::Zip::::_ISAArchive::Zip::_ISA
1118µs20µsArchive::Zip::::_isSeekableArchive::Zip::_isSeekable
1116µs6µsArchive::Zip::::BEGIN@16Archive::Zip::BEGIN@16
1116µs18µsArchive::Zip::::BEGIN@221Archive::Zip::BEGIN@221
1115µs18µsArchive::Zip::::BEGIN@236Archive::Zip::BEGIN@236
1114µs23µsArchive::Zip::::BEGIN@275Archive::Zip::BEGIN@275
1114µs27µsArchive::Zip::::BEGIN@185Archive::Zip::BEGIN@185
1114µs21µsArchive::Zip::::BEGIN@14Archive::Zip::BEGIN@14
1114µs5µsArchive::Zip::::BEGIN@4Archive::Zip::BEGIN@4
1114µs19µsArchive::Zip::::BEGIN@205Archive::Zip::BEGIN@205
1114µs16µsArchive::Zip::::newArchive::Zip::new
1113µs19µsArchive::Zip::::BEGIN@188Archive::Zip::BEGIN@188
1113µs18µsArchive::Zip::::BEGIN@206Archive::Zip::BEGIN@206
1113µs16µsArchive::Zip::::BEGIN@201Archive::Zip::BEGIN@201
1113µs16µsArchive::Zip::::BEGIN@23Archive::Zip::BEGIN@23
1113µs17µsArchive::Zip::::BEGIN@269Archive::Zip::BEGIN@269
1113µs17µsArchive::Zip::::BEGIN@295Archive::Zip::BEGIN@295
1113µs18µsArchive::Zip::::BEGIN@302Archive::Zip::BEGIN@302
1113µs20µsArchive::Zip::::BEGIN@305Archive::Zip::BEGIN@305
1113µs16µsArchive::Zip::::BEGIN@306Archive::Zip::BEGIN@306
1113µs17µsArchive::Zip::::BEGIN@199Archive::Zip::BEGIN@199
1113µs17µsArchive::Zip::::BEGIN@247Archive::Zip::BEGIN@247
1113µs16µsArchive::Zip::::BEGIN@273Archive::Zip::BEGIN@273
1113µs16µsArchive::Zip::::BEGIN@288Archive::Zip::BEGIN@288
1113µs16µsArchive::Zip::::BEGIN@307Archive::Zip::BEGIN@307
1113µs16µsArchive::Zip::::BEGIN@35Archive::Zip::BEGIN@35
1113µs16µsArchive::Zip::::BEGIN@189Archive::Zip::BEGIN@189
1113µs16µsArchive::Zip::::BEGIN@191Archive::Zip::BEGIN@191
1113µs14µsArchive::Zip::::BEGIN@192Archive::Zip::BEGIN@192
1113µs15µsArchive::Zip::::BEGIN@197Archive::Zip::BEGIN@197
1113µs15µsArchive::Zip::::BEGIN@200Archive::Zip::BEGIN@200
1113µs15µsArchive::Zip::::BEGIN@212Archive::Zip::BEGIN@212
1113µs17µsArchive::Zip::::BEGIN@230Archive::Zip::BEGIN@230
1113µs16µsArchive::Zip::::BEGIN@238Archive::Zip::BEGIN@238
1113µs16µsArchive::Zip::::BEGIN@251Archive::Zip::BEGIN@251
1113µs18µsArchive::Zip::::BEGIN@257Archive::Zip::BEGIN@257
1113µs20µsArchive::Zip::::BEGIN@260Archive::Zip::BEGIN@260
1113µs16µsArchive::Zip::::BEGIN@268Archive::Zip::BEGIN@268
1113µs15µsArchive::Zip::::BEGIN@274Archive::Zip::BEGIN@274
1113µs16µsArchive::Zip::::BEGIN@279Archive::Zip::BEGIN@279
1113µs16µsArchive::Zip::::BEGIN@285Archive::Zip::BEGIN@285
1113µs15µsArchive::Zip::::BEGIN@291Archive::Zip::BEGIN@291
1113µs16µsArchive::Zip::::BEGIN@300Archive::Zip::BEGIN@300
1113µs20µsArchive::Zip::::BEGIN@301Archive::Zip::BEGIN@301
1113µs16µsArchive::Zip::::BEGIN@308Archive::Zip::BEGIN@308
1113µs20µsArchive::Zip::::BEGIN@309Archive::Zip::BEGIN@309
1112µs16µsArchive::Zip::::BEGIN@190Archive::Zip::BEGIN@190
1112µs16µsArchive::Zip::::BEGIN@198Archive::Zip::BEGIN@198
1112µs15µsArchive::Zip::::BEGIN@204Archive::Zip::BEGIN@204
1112µs16µsArchive::Zip::::BEGIN@222Archive::Zip::BEGIN@222
1112µs16µsArchive::Zip::::BEGIN@239Archive::Zip::BEGIN@239
1112µs17µsArchive::Zip::::BEGIN@256Archive::Zip::BEGIN@256
1112µs15µsArchive::Zip::::BEGIN@265Archive::Zip::BEGIN@265
1112µs19µsArchive::Zip::::BEGIN@277Archive::Zip::BEGIN@277
1112µs17µsArchive::Zip::::BEGIN@283Archive::Zip::BEGIN@283
1112µs14µsArchive::Zip::::BEGIN@292Archive::Zip::BEGIN@292
1112µs15µsArchive::Zip::::BEGIN@294Archive::Zip::BEGIN@294
1112µs15µsArchive::Zip::::BEGIN@298Archive::Zip::BEGIN@298
1112µs15µsArchive::Zip::::BEGIN@312Archive::Zip::BEGIN@312
1112µs14µsArchive::Zip::::BEGIN@203Archive::Zip::BEGIN@203
1112µs15µsArchive::Zip::::BEGIN@207Archive::Zip::BEGIN@207
1112µs15µsArchive::Zip::::BEGIN@208Archive::Zip::BEGIN@208
1112µs14µsArchive::Zip::::BEGIN@210Archive::Zip::BEGIN@210
1112µs19µsArchive::Zip::::BEGIN@211Archive::Zip::BEGIN@211
1112µs15µsArchive::Zip::::BEGIN@213Archive::Zip::BEGIN@213
1112µs15µsArchive::Zip::::BEGIN@227Archive::Zip::BEGIN@227
1112µs15µsArchive::Zip::::BEGIN@235Archive::Zip::BEGIN@235
1112µs14µsArchive::Zip::::BEGIN@245Archive::Zip::BEGIN@245
1112µs15µsArchive::Zip::::BEGIN@246Archive::Zip::BEGIN@246
1112µs15µsArchive::Zip::::BEGIN@253Archive::Zip::BEGIN@253
1112µs16µsArchive::Zip::::BEGIN@261Archive::Zip::BEGIN@261
1112µs15µsArchive::Zip::::BEGIN@266Archive::Zip::BEGIN@266
1112µs15µsArchive::Zip::::BEGIN@272Archive::Zip::BEGIN@272
1112µs16µsArchive::Zip::::BEGIN@278Archive::Zip::BEGIN@278
1112µs16µsArchive::Zip::::BEGIN@282Archive::Zip::BEGIN@282
1112µs15µsArchive::Zip::::BEGIN@297Archive::Zip::BEGIN@297
1112µs15µsArchive::Zip::::BEGIN@310Archive::Zip::BEGIN@310
1112µs15µsArchive::Zip::::BEGIN@313Archive::Zip::BEGIN@313
1112µs15µsArchive::Zip::::BEGIN@202Archive::Zip::BEGIN@202
1112µs14µsArchive::Zip::::BEGIN@209Archive::Zip::BEGIN@209
1112µs14µsArchive::Zip::::BEGIN@214Archive::Zip::BEGIN@214
1112µs14µsArchive::Zip::::BEGIN@215Archive::Zip::BEGIN@215
1112µs15µsArchive::Zip::::BEGIN@220Archive::Zip::BEGIN@220
1112µs15µsArchive::Zip::::BEGIN@228Archive::Zip::BEGIN@228
1112µs14µsArchive::Zip::::BEGIN@229Archive::Zip::BEGIN@229
1112µs15µsArchive::Zip::::BEGIN@237Archive::Zip::BEGIN@237
1112µs23µsArchive::Zip::::BEGIN@286Archive::Zip::BEGIN@286
1112µs15µsArchive::Zip::::BEGIN@311Archive::Zip::BEGIN@311
1112µs2µsArchive::Zip::::BEGIN@8Archive::Zip::BEGIN@8
1112µs14µsArchive::Zip::::BEGIN@252Archive::Zip::BEGIN@252
1112µs14µsArchive::Zip::::BEGIN@262Archive::Zip::BEGIN@262
1112µs15µsArchive::Zip::::BEGIN@267Archive::Zip::BEGIN@267
1112µs15µsArchive::Zip::::BEGIN@240Archive::Zip::BEGIN@240
1112µs2µsArchive::Zip::::BEGIN@25Archive::Zip::BEGIN@25
1111µs1µsArchive::Zip::::BEGIN@5Archive::Zip::BEGIN@5
0000s0sArchive::Zip::::_asLocalNameArchive::Zip::_asLocalName
0000s0sArchive::Zip::::_asZipDirNameArchive::Zip::_asZipDirName
0000s0sArchive::Zip::::_errorArchive::Zip::_error
0000s0sArchive::Zip::::_formatErrorArchive::Zip::_formatError
0000s0sArchive::Zip::::_ioErrorArchive::Zip::_ioError
0000s0sArchive::Zip::::_printArchive::Zip::_print
0000s0sArchive::Zip::::_printErrorArchive::Zip::_printError
0000s0sArchive::Zip::::_subclassResponsibilityArchive::Zip::_subclassResponsibility
0000s0sArchive::Zip::::_zip64NotSupportedArchive::Zip::_zip64NotSupported
0000s0sArchive::Zip::::chunkSizeArchive::Zip::chunkSize
0000s0sArchive::Zip::::computeCRC32Archive::Zip::computeCRC32
0000s0sArchive::Zip::::setChunkSizeArchive::Zip::setChunkSize
0000s0sArchive::Zip::::setErrorHandlerArchive::Zip::setErrorHandler
0000s0sArchive::Zip::::tempFileArchive::Zip::tempFile
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip;
2
3228µs110µs
# spent 10µs within Archive::Zip::BEGIN@3 which was called: # once (10µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 3
use 5.006;
# spent 10µs making 1 call to Archive::Zip::BEGIN@3
4214µs27µs
# spent 5µs (4+1) within Archive::Zip::BEGIN@4 which was called: # once (4µs+1µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 4
use strict;
# spent 5µs making 1 call to Archive::Zip::BEGIN@4 # spent 1µs making 1 call to strict::import
5211µs11µs
# spent 1µs within Archive::Zip::BEGIN@5 which was called: # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 5
use Carp ();
# spent 1µs making 1 call to Archive::Zip::BEGIN@5
6284µs12.30ms
# spent 2.30ms (2.13+168µs) within Archive::Zip::BEGIN@6 which was called: # once (2.13ms+168µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 6
use Cwd ();
# spent 2.30ms making 1 call to Archive::Zip::BEGIN@6
7288µs13.66ms
# spent 3.66ms (410µs+3.25) within Archive::Zip::BEGIN@7 which was called: # once (410µs+3.25ms) by Spreadsheet::ParseXLSX::BEGIN@11 at line 7
use IO::File ();
# spent 3.66ms making 1 call to Archive::Zip::BEGIN@7
8210µs12µs
# spent 2µs within Archive::Zip::BEGIN@8 which was called: # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 8
use IO::Seekable ();
# spent 2µs making 1 call to Archive::Zip::BEGIN@8
9285µs13.83ms
# spent 3.83ms (2.04+1.80) within Archive::Zip::BEGIN@9 which was called: # once (2.04ms+1.80ms) by Spreadsheet::ParseXLSX::BEGIN@11 at line 9
use Compress::Raw::Zlib ();
# spent 3.83ms making 1 call to Archive::Zip::BEGIN@9
10298µs11.64ms
# spent 1.64ms (1.46+174µs) within Archive::Zip::BEGIN@10 which was called: # once (1.46ms+174µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 10
use File::Spec ();
# spent 1.64ms making 1 call to Archive::Zip::BEGIN@10
112123µs19.88ms
# spent 9.88ms (4.37+5.51) within Archive::Zip::BEGIN@11 which was called: # once (4.37ms+5.51ms) by Spreadsheet::ParseXLSX::BEGIN@11 at line 11
use File::Temp ();
# spent 9.88ms making 1 call to Archive::Zip::BEGIN@11
12279µs1458µs
# spent 458µs (363+95) within Archive::Zip::BEGIN@12 which was called: # once (363µs+95µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 12
use FileHandle ();
# spent 458µs making 1 call to Archive::Zip::BEGIN@12
13
14228µs237µs
# spent 21µs (4+17) within Archive::Zip::BEGIN@14 which was called: # once (4µs+17µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 14
use vars qw( $VERSION @ISA );
# spent 21µs making 1 call to Archive::Zip::BEGIN@14 # spent 17µs making 1 call to vars::import
15
16
# spent 6µs within Archive::Zip::BEGIN@16 which was called: # once (6µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 21
BEGIN {
171200ns $VERSION = '1.68';
18
191400ns require Exporter;
2016µs @ISA = qw( Exporter );
21113µs16µs}
# spent 6µs making 1 call to Archive::Zip::BEGIN@16
22
23222µs229µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@23 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 23
use vars qw( $ChunkSize $ErrorHandler );
# spent 16µs making 1 call to Archive::Zip::BEGIN@23 # spent 13µs making 1 call to vars::import
24
25
# spent 2µs within Archive::Zip::BEGIN@25 which was called: # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 32
BEGIN {
26 # This is the size we'll try to read, write, and (de)compress.
27 # You could set it to something different if you had lots of memory
28 # and needed more speed.
291200ns $ChunkSize ||= 32768;
30
3112µs $ErrorHandler = \&Carp::carp;
32111µs12µs}
# spent 2µs making 1 call to Archive::Zip::BEGIN@25
33
34# BEGIN block is necessary here so that other modules can use the constants.
352150µs230µs
# spent 16µs (3+14) within Archive::Zip::BEGIN@35 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 35
use vars qw( @EXPORT_OK %EXPORT_TAGS );
# spent 16µs making 1 call to Archive::Zip::BEGIN@35 # spent 14µs making 1 call to vars::import
36
37
# spent 52µs (16+36) within Archive::Zip::BEGIN@37 which was called: # once (16µs+36µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 182
BEGIN {
381700ns @EXPORT_OK = ('computeCRC32');
39110µs %EXPORT_TAGS = (
40 CONSTANTS => [
41 qw(
42 ZIP64_SUPPORTED
43 FA_MSDOS
44 FA_UNIX
45 GPBF_ENCRYPTED_MASK
46 GPBF_DEFLATING_COMPRESSION_MASK
47 GPBF_HAS_DATA_DESCRIPTOR_MASK
48 COMPRESSION_STORED
49 COMPRESSION_DEFLATED
50 COMPRESSION_LEVEL_NONE
51 COMPRESSION_LEVEL_DEFAULT
52 COMPRESSION_LEVEL_FASTEST
53 COMPRESSION_LEVEL_BEST_COMPRESSION
54 IFA_TEXT_FILE_MASK
55 IFA_TEXT_FILE
56 IFA_BINARY_FILE
57 ZIP64_AS_NEEDED
58 ZIP64_EOCD
59 ZIP64_HEADERS
60 )
61 ],
62
63 MISC_CONSTANTS => [
64 qw(
65 FA_AMIGA
66 FA_VAX_VMS
67 FA_VM_CMS
68 FA_ATARI_ST
69 FA_OS2_HPFS
70 FA_MACINTOSH
71 FA_Z_SYSTEM
72 FA_CPM
73 FA_TOPS20
74 FA_WINDOWS_NTFS
75 FA_QDOS
76 FA_ACORN
77 FA_VFAT
78 FA_MVS
79 FA_BEOS
80 FA_TANDEM
81 FA_THEOS
82 GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK
83 GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK
84 GPBF_IS_COMPRESSED_PATCHED_DATA_MASK
85 COMPRESSION_SHRUNK
86 DEFLATING_COMPRESSION_NORMAL
87 DEFLATING_COMPRESSION_MAXIMUM
88 DEFLATING_COMPRESSION_FAST
89 DEFLATING_COMPRESSION_SUPER_FAST
90 COMPRESSION_REDUCED_1
91 COMPRESSION_REDUCED_2
92 COMPRESSION_REDUCED_3
93 COMPRESSION_REDUCED_4
94 COMPRESSION_IMPLODED
95 COMPRESSION_TOKENIZED
96 COMPRESSION_DEFLATED_ENHANCED
97 COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED
98 )
99 ],
100
101 ERROR_CODES => [
102 qw(
103 AZ_OK
104 AZ_STREAM_END
105 AZ_ERROR
106 AZ_FORMAT_ERROR
107 AZ_IO_ERROR
108 )
109 ],
110
111 # For Internal Use Only
112 PKZIP_CONSTANTS => [
113 qw(
114 SIGNATURE_FORMAT
115 SIGNATURE_LENGTH
116
117 LOCAL_FILE_HEADER_SIGNATURE
118 LOCAL_FILE_HEADER_FORMAT
119 LOCAL_FILE_HEADER_LENGTH
120
121 DATA_DESCRIPTOR_SIGNATURE
122 DATA_DESCRIPTOR_FORMAT
123 DATA_DESCRIPTOR_LENGTH
124 DATA_DESCRIPTOR_ZIP64_FORMAT
125 DATA_DESCRIPTOR_ZIP64_LENGTH
126
127 DATA_DESCRIPTOR_FORMAT_NO_SIG
128 DATA_DESCRIPTOR_LENGTH_NO_SIG
129 DATA_DESCRIPTOR_ZIP64_FORMAT_NO_SIG
130 DATA_DESCRIPTOR_ZIP64_LENGTH_NO_SIG
131
132 CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE
133 CENTRAL_DIRECTORY_FILE_HEADER_FORMAT
134 CENTRAL_DIRECTORY_FILE_HEADER_LENGTH
135
136 ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE
137 ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_FORMAT
138 ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_LENGTH
139
140 ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE
141 ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_FORMAT
142 ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_LENGTH
143
144 END_OF_CENTRAL_DIRECTORY_SIGNATURE
145 END_OF_CENTRAL_DIRECTORY_FORMAT
146 END_OF_CENTRAL_DIRECTORY_LENGTH
147
148 ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE_STRING
149 ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE_STRING
150 END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING
151 )
152 ],
153
154 # For Internal Use Only
155 UTILITY_METHODS => [
156 qw(
157 _error
158 _printError
159 _ioError
160 _formatError
161 _zip64NotSupported
162 _subclassResponsibility
163 _binmode
164 _isSeekable
165 _newFileHandle
166 _readSignature
167 _asZipDirName
168 )
169 ],
170 );
171
172 # Add all the constant names and error code names to @EXPORT_OK
17312µs112µs Exporter::export_ok_tags(
# spent 12µs making 1 call to Exporter::export_ok_tags
174 qw(
175 CONSTANTS
176 ERROR_CODES
177 PKZIP_CONSTANTS
178 UTILITY_METHODS
179 MISC_CONSTANTS
180 ));
181
182134µs152µs}
# spent 52µs making 1 call to Archive::Zip::BEGIN@37
183
184# Zip64 format support status
185329µs353µs
# spent 27µs (4+23) within Archive::Zip::BEGIN@185 which was called: # once (4µs+23µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 185
use constant ZIP64_SUPPORTED => !! eval { pack("Q<", 1) };
# spent 27µs making 1 call to Archive::Zip::BEGIN@185 # spent 23µs making 1 call to constant::import # spent 3µs making 1 call to CORE::pack
186
187# Error codes
188213µs234µs
# spent 19µs (3+16) within Archive::Zip::BEGIN@188 which was called: # once (3µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 188
use constant AZ_OK => 0;
# spent 19µs making 1 call to Archive::Zip::BEGIN@188 # spent 16µs making 1 call to constant::import
189213µs230µs
# spent 16µs (3+14) within Archive::Zip::BEGIN@189 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 189
use constant AZ_STREAM_END => 1;
# spent 16µs making 1 call to Archive::Zip::BEGIN@189 # spent 14µs making 1 call to constant::import
190211µs229µs
# spent 16µs (2+13) within Archive::Zip::BEGIN@190 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 190
use constant AZ_ERROR => 2;
# spent 16µs making 1 call to Archive::Zip::BEGIN@190 # spent 13µs making 1 call to constant::import
191211µs230µs
# spent 16µs (3+14) within Archive::Zip::BEGIN@191 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 191
use constant AZ_FORMAT_ERROR => 3;
# spent 16µs making 1 call to Archive::Zip::BEGIN@191 # spent 14µs making 1 call to constant::import
192212µs226µs
# spent 14µs (3+12) within Archive::Zip::BEGIN@192 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 192
use constant AZ_IO_ERROR => 4;
# spent 14µs making 1 call to Archive::Zip::BEGIN@192 # spent 12µs making 1 call to constant::import
193
194# File types
195# Values of Archive::Zip::Member->fileAttributeFormat()
196
197211µs228µs
# spent 15µs (3+13) within Archive::Zip::BEGIN@197 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 197
use constant FA_MSDOS => 0;
# spent 15µs making 1 call to Archive::Zip::BEGIN@197 # spent 13µs making 1 call to constant::import
198217µs229µs
# spent 16µs (2+13) within Archive::Zip::BEGIN@198 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 198
use constant FA_AMIGA => 1;
# spent 16µs making 1 call to Archive::Zip::BEGIN@198 # spent 13µs making 1 call to constant::import
199212µs231µs
# spent 17µs (3+14) within Archive::Zip::BEGIN@199 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 199
use constant FA_VAX_VMS => 2;
# spent 17µs making 1 call to Archive::Zip::BEGIN@199 # spent 14µs making 1 call to constant::import
200211µs227µs
# spent 15µs (3+12) within Archive::Zip::BEGIN@200 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 200
use constant FA_UNIX => 3;
# spent 15µs making 1 call to Archive::Zip::BEGIN@200 # spent 12µs making 1 call to constant::import
201211µs228µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@201 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 201
use constant FA_VM_CMS => 4;
# spent 16µs making 1 call to Archive::Zip::BEGIN@201 # spent 13µs making 1 call to constant::import
202211µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@202 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 202
use constant FA_ATARI_ST => 5;
# spent 15µs making 1 call to Archive::Zip::BEGIN@202 # spent 12µs making 1 call to constant::import
203211µs226µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@203 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 203
use constant FA_OS2_HPFS => 6;
# spent 14µs making 1 call to Archive::Zip::BEGIN@203 # spent 12µs making 1 call to constant::import
204217µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@204 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 204
use constant FA_MACINTOSH => 7;
# spent 15µs making 1 call to Archive::Zip::BEGIN@204 # spent 12µs making 1 call to constant::import
205246µs235µs
# spent 19µs (4+16) within Archive::Zip::BEGIN@205 which was called: # once (4µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 205
use constant FA_Z_SYSTEM => 8;
# spent 19µs making 1 call to Archive::Zip::BEGIN@205 # spent 16µs making 1 call to constant::import
206212µs233µs
# spent 18µs (3+15) within Archive::Zip::BEGIN@206 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 206
use constant FA_CPM => 9;
# spent 18µs making 1 call to Archive::Zip::BEGIN@206 # spent 15µs making 1 call to constant::import
207211µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@207 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 207
use constant FA_TOPS20 => 10;
# spent 15µs making 1 call to Archive::Zip::BEGIN@207 # spent 13µs making 1 call to constant::import
208211µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@208 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 208
use constant FA_WINDOWS_NTFS => 11;
# spent 15µs making 1 call to Archive::Zip::BEGIN@208 # spent 12µs making 1 call to constant::import
209211µs226µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@209 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 209
use constant FA_QDOS => 12;
# spent 14µs making 1 call to Archive::Zip::BEGIN@209 # spent 12µs making 1 call to constant::import
210211µs226µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@210 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 210
use constant FA_ACORN => 13;
# spent 14µs making 1 call to Archive::Zip::BEGIN@210 # spent 12µs making 1 call to constant::import
211212µs235µs
# spent 19µs (2+16) within Archive::Zip::BEGIN@211 which was called: # once (2µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 211
use constant FA_VFAT => 14;
# spent 19µs making 1 call to Archive::Zip::BEGIN@211 # spent 16µs making 1 call to constant::import
212215µs228µs
# spent 15µs (3+12) within Archive::Zip::BEGIN@212 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 212
use constant FA_MVS => 15;
# spent 15µs making 1 call to Archive::Zip::BEGIN@212 # spent 12µs making 1 call to constant::import
213211µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@213 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 213
use constant FA_BEOS => 16;
# spent 15µs making 1 call to Archive::Zip::BEGIN@213 # spent 13µs making 1 call to constant::import
214211µs226µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@214 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 214
use constant FA_TANDEM => 17;
# spent 14µs making 1 call to Archive::Zip::BEGIN@214 # spent 12µs making 1 call to constant::import
215214µs226µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@215 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 215
use constant FA_THEOS => 18;
# spent 14µs making 1 call to Archive::Zip::BEGIN@215 # spent 12µs making 1 call to constant::import
216
217# general-purpose bit flag masks
218# Found in Archive::Zip::Member->bitFlag()
219
220212µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@220 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 220
use constant GPBF_ENCRYPTED_MASK => 1 << 0;
# spent 15µs making 1 call to Archive::Zip::BEGIN@220 # spent 13µs making 1 call to constant::import
221215µs231µs
# spent 18µs (6+13) within Archive::Zip::BEGIN@221 which was called: # once (6µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 221
use constant GPBF_DEFLATING_COMPRESSION_MASK => 3 << 1;
# spent 18µs making 1 call to Archive::Zip::BEGIN@221 # spent 13µs making 1 call to constant::import
222213µs229µs
# spent 16µs (2+13) within Archive::Zip::BEGIN@222 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 222
use constant GPBF_HAS_DATA_DESCRIPTOR_MASK => 1 << 3;
# spent 16µs making 1 call to Archive::Zip::BEGIN@222 # spent 13µs making 1 call to constant::import
223
224# deflating compression types, if compressionMethod == COMPRESSION_DEFLATED
225# ( Archive::Zip::Member->bitFlag() & GPBF_DEFLATING_COMPRESSION_MASK )
226
227212µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@227 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 227
use constant DEFLATING_COMPRESSION_NORMAL => 0 << 1;
# spent 15µs making 1 call to Archive::Zip::BEGIN@227 # spent 13µs making 1 call to constant::import
228212µs227µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@228 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 228
use constant DEFLATING_COMPRESSION_MAXIMUM => 1 << 1;
# spent 15µs making 1 call to Archive::Zip::BEGIN@228 # spent 13µs making 1 call to constant::import
229214µs227µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@229 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 229
use constant DEFLATING_COMPRESSION_FAST => 2 << 1;
# spent 14µs making 1 call to Archive::Zip::BEGIN@229 # spent 12µs making 1 call to constant::import
230213µs231µs
# spent 17µs (3+14) within Archive::Zip::BEGIN@230 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 230
use constant DEFLATING_COMPRESSION_SUPER_FAST => 3 << 1;
# spent 17µs making 1 call to Archive::Zip::BEGIN@230 # spent 14µs making 1 call to constant::import
231
232# compression method
233
234# these two are the only ones supported in this module
235215µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@235 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 235
use constant COMPRESSION_STORED => 0; # file is stored (no compression)
# spent 15µs making 1 call to Archive::Zip::BEGIN@235 # spent 12µs making 1 call to constant::import
236212µs231µs
# spent 18µs (5+13) within Archive::Zip::BEGIN@236 which was called: # once (5µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 236
use constant COMPRESSION_DEFLATED => 8; # file is Deflated
# spent 18µs making 1 call to Archive::Zip::BEGIN@236 # spent 13µs making 1 call to constant::import
237216µs227µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@237 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 237
use constant COMPRESSION_LEVEL_NONE => 0;
# spent 15µs making 1 call to Archive::Zip::BEGIN@237 # spent 13µs making 1 call to constant::import
238212µs230µs
# spent 16µs (3+14) within Archive::Zip::BEGIN@238 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 238
use constant COMPRESSION_LEVEL_DEFAULT => -1;
# spent 16µs making 1 call to Archive::Zip::BEGIN@238 # spent 14µs making 1 call to constant::import
239211µs230µs
# spent 16µs (2+14) within Archive::Zip::BEGIN@239 which was called: # once (2µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 239
use constant COMPRESSION_LEVEL_FASTEST => 1;
# spent 16µs making 1 call to Archive::Zip::BEGIN@239 # spent 14µs making 1 call to constant::import
240211µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@240 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 240
use constant COMPRESSION_LEVEL_BEST_COMPRESSION => 9;
# spent 15µs making 1 call to Archive::Zip::BEGIN@240 # spent 13µs making 1 call to constant::import
241
242# internal file attribute bits
243# Found in Archive::Zip::Member::internalFileAttributes()
244
245215µs227µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@245 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 245
use constant IFA_TEXT_FILE_MASK => 1;
# spent 14µs making 1 call to Archive::Zip::BEGIN@245 # spent 12µs making 1 call to constant::import
246222µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@246 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 246
use constant IFA_TEXT_FILE => 1;
# spent 15µs making 1 call to Archive::Zip::BEGIN@246 # spent 13µs making 1 call to constant::import
247213µs232µs
# spent 17µs (3+15) within Archive::Zip::BEGIN@247 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 247
use constant IFA_BINARY_FILE => 0;
# spent 17µs making 1 call to Archive::Zip::BEGIN@247 # spent 15µs making 1 call to constant::import
248
249# desired zip64 structures for archive creation
250
251211µs228µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@251 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 251
use constant ZIP64_AS_NEEDED => 0;
# spent 16µs making 1 call to Archive::Zip::BEGIN@251 # spent 13µs making 1 call to constant::import
252210µs227µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@252 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 252
use constant ZIP64_EOCD => 1;
# spent 14µs making 1 call to Archive::Zip::BEGIN@252 # spent 12µs making 1 call to constant::import
253217µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@253 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 253
use constant ZIP64_HEADERS => 2;
# spent 15µs making 1 call to Archive::Zip::BEGIN@253 # spent 12µs making 1 call to constant::import
254
255# PKZIP file format miscellaneous constants (for internal use only)
256211µs231µs
# spent 17µs (2+14) within Archive::Zip::BEGIN@256 which was called: # once (2µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 256
use constant SIGNATURE_FORMAT => "V";
# spent 17µs making 1 call to Archive::Zip::BEGIN@256 # spent 14µs making 1 call to constant::import
257212µs234µs
# spent 18µs (3+16) within Archive::Zip::BEGIN@257 which was called: # once (3µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 257
use constant SIGNATURE_LENGTH => 4;
# spent 18µs making 1 call to Archive::Zip::BEGIN@257 # spent 16µs making 1 call to constant::import
258
259# these lengths are without the signature.
260213µs238µs
# spent 20µs (3+18) within Archive::Zip::BEGIN@260 which was called: # once (3µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 260
use constant LOCAL_FILE_HEADER_SIGNATURE => 0x04034b50;
# spent 20µs making 1 call to Archive::Zip::BEGIN@260 # spent 18µs making 1 call to constant::import
261211µs229µs
# spent 16µs (2+13) within Archive::Zip::BEGIN@261 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 261
use constant LOCAL_FILE_HEADER_FORMAT => "v3 V4 v2";
# spent 16µs making 1 call to Archive::Zip::BEGIN@261 # spent 13µs making 1 call to constant::import
262215µs227µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@262 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 262
use constant LOCAL_FILE_HEADER_LENGTH => 26;
# spent 14µs making 1 call to Archive::Zip::BEGIN@262 # spent 12µs making 1 call to constant::import
263
264# PKZIP docs don't mention the signature, but Info-Zip writes it.
265211µs228µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@265 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 265
use constant DATA_DESCRIPTOR_SIGNATURE => 0x08074b50;
# spent 15µs making 1 call to Archive::Zip::BEGIN@265 # spent 12µs making 1 call to constant::import
266210µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@266 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 266
use constant DATA_DESCRIPTOR_FORMAT => "V3";
# spent 15µs making 1 call to Archive::Zip::BEGIN@266 # spent 12µs making 1 call to constant::import
267215µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@267 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 267
use constant DATA_DESCRIPTOR_LENGTH => 12;
# spent 15µs making 1 call to Archive::Zip::BEGIN@267 # spent 13µs making 1 call to constant::import
268224µs229µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@268 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 268
use constant DATA_DESCRIPTOR_ZIP64_FORMAT => "L< Q<2";
# spent 16µs making 1 call to Archive::Zip::BEGIN@268 # spent 13µs making 1 call to constant::import
269213µs232µs
# spent 17µs (3+14) within Archive::Zip::BEGIN@269 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 269
use constant DATA_DESCRIPTOR_ZIP64_LENGTH => 20;
# spent 17µs making 1 call to Archive::Zip::BEGIN@269 # spent 14µs making 1 call to constant::import
270
271# but the signature is apparently optional.
272215µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@272 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 272
use constant DATA_DESCRIPTOR_FORMAT_NO_SIG => "V2";
# spent 15µs making 1 call to Archive::Zip::BEGIN@272 # spent 12µs making 1 call to constant::import
273212µs229µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@273 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 273
use constant DATA_DESCRIPTOR_LENGTH_NO_SIG => 8;
# spent 16µs making 1 call to Archive::Zip::BEGIN@273 # spent 13µs making 1 call to constant::import
274211µs228µs
# spent 15µs (3+13) within Archive::Zip::BEGIN@274 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 274
use constant DATA_DESCRIPTOR_ZIP64_FORMAT_NO_SIG => "Q<2";
# spent 15µs making 1 call to Archive::Zip::BEGIN@274 # spent 13µs making 1 call to constant::import
275213µs241µs
# spent 23µs (4+18) within Archive::Zip::BEGIN@275 which was called: # once (4µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 275
use constant DATA_DESCRIPTOR_ZIP64_LENGTH_NO_SIG => 16;
# spent 23µs making 1 call to Archive::Zip::BEGIN@275 # spent 18µs making 1 call to constant::import
276
277213µs236µs
# spent 19µs (2+17) within Archive::Zip::BEGIN@277 which was called: # once (2µs+17µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 277
use constant CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE => 0x02014b50;
# spent 19µs making 1 call to Archive::Zip::BEGIN@277 # spent 17µs making 1 call to constant::import
278214µs229µs
# spent 16µs (2+13) within Archive::Zip::BEGIN@278 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 278
use constant CENTRAL_DIRECTORY_FILE_HEADER_FORMAT => "C2 v3 V4 v5 V2";
# spent 16µs making 1 call to Archive::Zip::BEGIN@278 # spent 13µs making 1 call to constant::import
279212µs229µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@279 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 279
use constant CENTRAL_DIRECTORY_FILE_HEADER_LENGTH => 42;
# spent 16µs making 1 call to Archive::Zip::BEGIN@279 # spent 13µs making 1 call to constant::import
280
281# zip64 support
282220µs229µs
# spent 16µs (2+13) within Archive::Zip::BEGIN@282 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 282
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE => 0x06064b50;
# spent 16µs making 1 call to Archive::Zip::BEGIN@282 # spent 13µs making 1 call to constant::import
28312µs115µs
# spent 17µs (2+15) within Archive::Zip::BEGIN@283 which was called: # once (2µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 284
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE_STRING =>
# spent 15µs making 1 call to constant::import
284111µs218µs pack("V", ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE);
# spent 17µs making 1 call to Archive::Zip::BEGIN@283 # spent 1µs making 1 call to CORE::pack
285211µs230µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@285 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 285
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_FORMAT => "Q< S<2 L<2 Q<4";
# spent 16µs making 1 call to Archive::Zip::BEGIN@285 # spent 14µs making 1 call to constant::import
286213µs243µs
# spent 23µs (2+20) within Archive::Zip::BEGIN@286 which was called: # once (2µs+20µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 286
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_LENGTH => 52;
# spent 23µs making 1 call to Archive::Zip::BEGIN@286 # spent 20µs making 1 call to constant::import
287
288229µs230µs
# spent 16µs (3+14) within Archive::Zip::BEGIN@288 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 288
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE => 0x07064b50;
# spent 16µs making 1 call to Archive::Zip::BEGIN@288 # spent 14µs making 1 call to constant::import
28912µs113µs
# spent 27µs (13+13) within Archive::Zip::BEGIN@289 which was called: # once (13µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 290
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE_STRING =>
# spent 13µs making 1 call to constant::import
290110µs227µs pack("V", ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE);
# spent 27µs making 1 call to Archive::Zip::BEGIN@289 # spent 700ns making 1 call to CORE::pack
291211µs228µs
# spent 15µs (3+13) within Archive::Zip::BEGIN@291 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 291
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_FORMAT => "L< Q< L<";
# spent 15µs making 1 call to Archive::Zip::BEGIN@291 # spent 13µs making 1 call to constant::import
292214µs226µs
# spent 14µs (2+12) within Archive::Zip::BEGIN@292 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 292
use constant ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_LENGTH => 16;
# spent 14µs making 1 call to Archive::Zip::BEGIN@292 # spent 12µs making 1 call to constant::import
293
294221µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@294 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 294
use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE => 0x06054b50;
# spent 15µs making 1 call to Archive::Zip::BEGIN@294 # spent 13µs making 1 call to constant::import
29512µs114µs
# spent 17µs (3+14) within Archive::Zip::BEGIN@295 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 296
use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING =>
# spent 14µs making 1 call to constant::import
296111µs217µs pack("V", END_OF_CENTRAL_DIRECTORY_SIGNATURE);
# spent 17µs making 1 call to Archive::Zip::BEGIN@295 # spent 600ns making 1 call to CORE::pack
297211µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@297 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 297
use constant END_OF_CENTRAL_DIRECTORY_FORMAT => "v4 V2 v";
# spent 15µs making 1 call to Archive::Zip::BEGIN@297 # spent 13µs making 1 call to constant::import
298216µs228µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@298 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 298
use constant END_OF_CENTRAL_DIRECTORY_LENGTH => 18;
# spent 15µs making 1 call to Archive::Zip::BEGIN@298 # spent 12µs making 1 call to constant::import
299
300213µs230µs
# spent 16µs (3+14) within Archive::Zip::BEGIN@300 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 300
use constant GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK => 1 << 1;
# spent 16µs making 1 call to Archive::Zip::BEGIN@300 # spent 14µs making 1 call to constant::import
301216µs237µs
# spent 20µs (3+17) within Archive::Zip::BEGIN@301 which was called: # once (3µs+17µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 301
use constant GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK => 1 << 2;
# spent 20µs making 1 call to Archive::Zip::BEGIN@301 # spent 17µs making 1 call to constant::import
302213µs234µs
# spent 18µs (3+15) within Archive::Zip::BEGIN@302 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 302
use constant GPBF_IS_COMPRESSED_PATCHED_DATA_MASK => 1 << 5;
# spent 18µs making 1 call to Archive::Zip::BEGIN@302 # spent 15µs making 1 call to constant::import
303
304# the rest of these are not supported in this module
305213µs237µs
# spent 20µs (3+17) within Archive::Zip::BEGIN@305 which was called: # once (3µs+17µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 305
use constant COMPRESSION_SHRUNK => 1; # file is Shrunk
# spent 20µs making 1 call to Archive::Zip::BEGIN@305 # spent 17µs making 1 call to constant::import
306214µs230µs
# spent 16µs (3+14) within Archive::Zip::BEGIN@306 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 306
use constant COMPRESSION_REDUCED_1 => 2; # file is Reduced CF=1
# spent 16µs making 1 call to Archive::Zip::BEGIN@306 # spent 14µs making 1 call to constant::import
307213µs229µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@307 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 307
use constant COMPRESSION_REDUCED_2 => 3; # file is Reduced CF=2
# spent 16µs making 1 call to Archive::Zip::BEGIN@307 # spent 13µs making 1 call to constant::import
308225µs229µs
# spent 16µs (3+13) within Archive::Zip::BEGIN@308 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 308
use constant COMPRESSION_REDUCED_3 => 4; # file is Reduced CF=3
# spent 16µs making 1 call to Archive::Zip::BEGIN@308 # spent 13µs making 1 call to constant::import
309212µs238µs
# spent 20µs (3+18) within Archive::Zip::BEGIN@309 which was called: # once (3µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 309
use constant COMPRESSION_REDUCED_4 => 5; # file is Reduced CF=4
# spent 20µs making 1 call to Archive::Zip::BEGIN@309 # spent 18µs making 1 call to constant::import
310211µs227µs
# spent 15µs (2+12) within Archive::Zip::BEGIN@310 which was called: # once (2µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 310
use constant COMPRESSION_IMPLODED => 6; # file is Imploded
# spent 15µs making 1 call to Archive::Zip::BEGIN@310 # spent 12µs making 1 call to constant::import
311216µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@311 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 311
use constant COMPRESSION_TOKENIZED => 7; # reserved for Tokenizing compr.
# spent 15µs making 1 call to Archive::Zip::BEGIN@311 # spent 13µs making 1 call to constant::import
312211µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@312 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 312
use constant COMPRESSION_DEFLATED_ENHANCED => 9; # reserved for enh. Deflating
# spent 15µs making 1 call to Archive::Zip::BEGIN@312 # spent 13µs making 1 call to constant::import
3132795µs228µs
# spent 15µs (2+13) within Archive::Zip::BEGIN@313 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 313
use constant COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED => 10;
# spent 15µs making 1 call to Archive::Zip::BEGIN@313 # spent 13µs making 1 call to constant::import
314
315# Load the various required classes
316163µsrequire Archive::Zip::Archive;
317154µsrequire Archive::Zip::Member;
318157µsrequire Archive::Zip::FileMember;
319150µsrequire Archive::Zip::DirectoryMember;
320155µsrequire Archive::Zip::ZipFileMember;
321153µsrequire Archive::Zip::NewFileMember;
322159µsrequire Archive::Zip::StringMember;
323
324# Convenience functions
325
326
# spent 12µs (9+3) within Archive::Zip::_ISA which was called 4 times, avg 3µs/call: # once (5µs+2µs) by Archive::Zip::_isSeekable at line 441 # once (1µs+700ns) by Archive::Zip::_isSeekable at line 449 # once (1µs+600ns) by Archive::Zip::_isSeekable at line 443 # once (1µs+200ns) by Archive::Zip::_isSeekable at line 445
sub _ISA ($$) {
327
328 # Can't rely on Scalar::Util, so use the next best way
3294300ns local $@;
330814µs43µs !!eval { ref $_[0] and $_[0]->isa($_[1]) };
# spent 3µs making 4 calls to UNIVERSAL::isa, avg 750ns/call
331}
332
333
# spent 35µs (29+6) within Archive::Zip::_CAN which was called 8 times, avg 4µs/call: # 8 times (29µs+6µs) by Archive::Zip::_binmode at line 432, avg 4µs/call
sub _CAN ($$) {
33482µs local $@;
3351636µs86µs !!eval { ref $_[0] and $_[0]->can($_[1]) };
# spent 6µs making 8 calls to UNIVERSAL::can, avg 775ns/call
336}
337
338#####################################################################
339# Methods
340
341
# spent 16µs (4+12) within Archive::Zip::new which was called: # once (4µs+12µs) by Spreadsheet::ParseXLSX::parse at line 75 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub new {
3421300ns my $class = shift;
34314µs112µs return Archive::Zip::Archive->new(@_);
# spent 12µs making 1 call to Archive::Zip::Archive::new
344}
345
346sub computeCRC32 {
347 my ($data, $crc);
348
349 if (ref($_[0]) eq 'HASH') {
350 $data = $_[0]->{string};
351 $crc = $_[0]->{checksum};
352 } else {
353 $data = shift;
354 $data = shift if ref($data);
355 $crc = shift;
356 }
357
358 return Compress::Raw::Zlib::crc32($data, $crc);
359}
360
361# Report or change chunk size used for reading and writing.
362# Also sets Zlib's default buffer size (eventually).
363sub setChunkSize {
364 shift if ref($_[0]) eq 'Archive::Zip::Archive';
365 my $chunkSize = (ref($_[0]) eq 'HASH') ? shift->{chunkSize} : shift;
366 my $oldChunkSize = $Archive::Zip::ChunkSize;
367 $Archive::Zip::ChunkSize = $chunkSize if ($chunkSize);
368 return $oldChunkSize;
369}
370
371sub chunkSize {
372 return $Archive::Zip::ChunkSize;
373}
374
375sub setErrorHandler {
376 my $errorHandler = (ref($_[0]) eq 'HASH') ? shift->{subroutine} : shift;
377 $errorHandler = \&Carp::carp unless defined($errorHandler);
378 my $oldErrorHandler = $Archive::Zip::ErrorHandler;
379 $Archive::Zip::ErrorHandler = $errorHandler;
380 return $oldErrorHandler;
381}
382
383######################################################################
384# Private utility functions (not methods).
385
386sub _printError {
387 my $string = join(' ', @_, "\n");
388 my $oldCarpLevel = $Carp::CarpLevel;
389 $Carp::CarpLevel += 2;
390 &{$ErrorHandler}($string);
391 $Carp::CarpLevel = $oldCarpLevel;
392}
393
394# This is called on format errors.
395sub _formatError {
396 shift if ref($_[0]);
397 _printError('format error:', @_);
398 return AZ_FORMAT_ERROR;
399}
400
401# This is called on IO errors.
402sub _ioError {
403 shift if ref($_[0]);
404 _printError('IO error:', @_, ':', $!);
405 return AZ_IO_ERROR;
406}
407
408# This is called on generic errors.
409sub _error {
410 shift if ref($_[0]);
411 _printError('error:', @_);
412 return AZ_ERROR;
413}
414
415# This is called if zip64 format is not supported but would be
416# required.
417sub _zip64NotSupported {
418 shift if ref($_[0]);
419 _printError('zip64 format not supported on this Perl interpreter');
420 return AZ_ERROR;
421}
422
423# Called when a subclass should have implemented
424# something but didn't
425sub _subclassResponsibility {
426 Carp::croak("subclass Responsibility\n");
427}
428
429# Try to set the given file handle or object into binary mode.
430
# spent 80µs (23+57) within Archive::Zip::_binmode which was called 8 times, avg 10µs/call: # 7 times (18µs+44µs) by Archive::Zip::FileMember::_openFile at line 44 of Archive/Zip/FileMember.pm, avg 9µs/call # once (4µs+14µs) by Archive::Zip::Archive::readFromFileHandle at line 752 of Archive/Zip/Archive.pm
sub _binmode {
43181µs my $fh = shift;
432819µs1657µs return _CAN($fh, 'binmode') ? $fh->binmode() : binmode($fh);
# spent 35µs making 8 calls to Archive::Zip::_CAN, avg 4µs/call # spent 22µs making 8 calls to IO::Handle::binmode, avg 3µs/call
433}
434
435# Attempt to guess whether file handle is seekable.
436# Because of problems with Windows, this only returns true when
437# the file handle is a real file.
438
# spent 20µs (8+12) within Archive::Zip::_isSeekable which was called: # once (8µs+12µs) by Archive::Zip::Archive::readFromFileHandle at line 756 of Archive/Zip/Archive.pm
sub _isSeekable {
4391200ns my $fh = shift;
4401300ns return 0 unless ref $fh;
44111µs17µs _ISA($fh, "IO::Scalar") # IO::Scalar objects are brokenly-seekable
# spent 7µs making 1 call to Archive::Zip::_ISA
442 and return 0;
44311µs12µs _ISA($fh, "IO::String")
# spent 2µs making 1 call to Archive::Zip::_ISA
444 and return 1;
4451900ns12µs if (_ISA($fh, "IO::Seekable")) {
# spent 2µs making 1 call to Archive::Zip::_ISA
446
447 # Unfortunately, some things like FileHandle objects
448 # return true for Seekable, but AREN'T!!!!!
4491700ns12µs _ISA($fh, "FileHandle")
# spent 2µs making 1 call to Archive::Zip::_ISA
450 and return 0;
45112µs return 1;
452 }
453
454 # open my $fh, "+<", \$data;
455 ref $fh eq "GLOB" && eval { seek $fh, 0, 1 } and return 1;
456 _CAN($fh, "stat")
457 and return -f $fh;
458 return (_CAN($fh, "seek") and _CAN($fh, "tell")) ? 1 : 0;
459}
460
461# Print to the filehandle, while making sure the pesky Perl special global
462# variables don't interfere.
463sub _print {
464 my ($self, $fh, @data) = @_;
465
466 local $\;
467
468 return $fh->print(@data);
469}
470
471# Return an opened IO::Handle
472# my ( $status, fh ) = _newFileHandle( 'fileName', 'w' );
473# Can take a filename, file handle, or ref to GLOB
474# Or, if given something that is a ref but not an IO::Handle,
475# passes back the same thing.
476
# spent 343µs (41+303) within Archive::Zip::_newFileHandle which was called 8 times, avg 43µs/call: # 7 times (34µs+272µs) by Archive::Zip::FileMember::_openFile at line 38 of Archive/Zip/FileMember.pm, avg 44µs/call # once (7µs+31µs) by Archive::Zip::Archive::read at line 726 of Archive/Zip/Archive.pm
sub _newFileHandle {
47781µs my $fd = shift;
47881µs my $status = 1;
4798900ns my $handle;
480
48183µs if (ref($fd)) {
482 if (_ISA($fd, 'IO::Scalar') or _ISA($fd, 'IO::String')) {
483 $handle = $fd;
484 } elsif (_ISA($fd, 'IO::Handle') or ref($fd) eq 'GLOB') {
485 $handle = IO::File->new;
486 $status = $handle->fdopen($fd, @_);
487 } else {
488 $handle = $fd;
489 }
490 } else {
491813µs870µs $handle = IO::File->new;
# spent 70µs making 8 calls to IO::File::new, avg 9µs/call
49287µs8232µs $status = $handle->open($fd, @_);
# spent 232µs making 8 calls to IO::File::open, avg 29µs/call
493 }
494
495810µs return ($status, $handle);
496}
497
498# Returns next signature from given file handle, leaves
499# file handle positioned afterwards.
500#
501# In list context, returns ($status, $signature)
502# ( $status, $signature ) = _readSignature( $fh, $fileName );
503#
504# This function returns one of AZ_OK, AZ_IO_ERROR, or
505# AZ_FORMAT_ERROR and calls the respective error handlers in the
506# latter two cases. If optional $noFormatError is true, it does
507# not call the error handler on format error, but only returns
508# AZ_FORMAT_ERROR.
509
# spent 152µs (72+80) within Archive::Zip::_readSignature which was called 19 times, avg 8µs/call: # 11 times (34µs+21µs) by Archive::Zip::Archive::readFromFileHandle at line 784 of Archive/Zip/Archive.pm, avg 5µs/call # 7 times (29µs+54µs) by Archive::Zip::ZipFileMember::_seekToLocalHeader at line 70 of Archive/Zip/ZipFileMember.pm, avg 12µs/call # once (8µs+4µs) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 872 of Archive/Zip/Archive.pm
sub _readSignature {
510192µs my $fh = shift;
511193µs my $fileName = shift;
512192µs my $expectedSignature = shift; # optional
513192µs my $noFormatError = shift; # optional
514
515192µs my $signatureData;
5161912µs1970µs my $bytesRead = $fh->read($signatureData, SIGNATURE_LENGTH);
# spent 70µs making 19 calls to IO::Handle::read, avg 4µs/call
517193µs if ($bytesRead != SIGNATURE_LENGTH) {
518 return _ioError("reading header signature");
519 }
5201927µs1910µs my $signature = unpack(SIGNATURE_FORMAT, $signatureData);
# spent 10µs making 19 calls to CORE::unpack, avg 532ns/call
521192µs my $status = AZ_OK;
522
523 # compare with expected signature, if any, or any known signature.
524197µs if (
525 (defined($expectedSignature) && $signature != $expectedSignature)
526 || ( !defined($expectedSignature)
527 && $signature != CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE
528 && $signature != LOCAL_FILE_HEADER_SIGNATURE
529 && $signature != END_OF_CENTRAL_DIRECTORY_SIGNATURE
530 && $signature != DATA_DESCRIPTOR_SIGNATURE
531 && $signature != ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE
532 && $signature != ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE
533 )
534 ) {
5351800ns if (! $noFormatError ) {
536 my $errmsg = sprintf("bad signature: 0x%08x", $signature);
537 if (_isSeekable($fh)) {
538 $errmsg .= sprintf(" at offset %d", $fh->tell() - SIGNATURE_LENGTH);
539 }
540
541 $status = _formatError("$errmsg in file $fileName");
542 }
543 else {
5441200ns $status = AZ_FORMAT_ERROR;
545 }
546 }
547
5481918µs return ($status, $signature);
549}
550
551# Utility method to make and open a temp file.
552# Will create $temp_dir if it does not exist.
553# Returns file handle and name:
554#
555# my ($fh, $name) = Archive::Zip::tempFile();
556# my ($fh, $name) = Archive::Zip::tempFile('mytempdir');
557#
558
559sub tempFile {
560 my $dir = (ref($_[0]) eq 'HASH') ? shift->{tempDir} : shift;
561 my ($fh, $filename) = File::Temp::tempfile(
562 SUFFIX => '.zip',
563 UNLINK => 1,
564 $dir ? (DIR => $dir) : ());
565 return (undef, undef) unless $fh;
566 my ($status, $newfh) = _newFileHandle($fh, 'w+');
567 $fh->close();
568 return ($newfh, $filename);
569}
570
571# Return the normalized directory name as used in a zip file (path
572# separators become slashes, etc.).
573# Will translate internal slashes in path components (i.e. on Macs) to
574# underscores. Discards volume names.
575# When $forceDir is set, returns paths with trailing slashes (or arrays
576# with trailing blank members).
577#
578# If third argument is a reference, returns volume information there.
579#
580# input output
581# . ('.') '.'
582# ./a ('a') a
583# ./a/b ('a','b') a/b
584# ./a/b/ ('a','b') a/b
585# a/b/ ('a','b') a/b
586# /a/b/ ('','a','b') a/b
587# c:\a\b\c.doc ('','a','b','c.doc') a/b/c.doc # on Windows
588# "i/o maps:whatever" ('i_o maps', 'whatever') "i_o maps/whatever" # on Macs
589sub _asZipDirName {
590 my $name = shift;
591 my $forceDir = shift;
592 my $volReturn = shift;
593 my ($volume, $directories, $file) =
594 File::Spec->splitpath(File::Spec->canonpath($name), $forceDir);
595 $$volReturn = $volume if (ref($volReturn));
596 my @dirs = map { $_ =~ y{/}{_}; $_ } File::Spec->splitdir($directories);
597 if (@dirs > 0) { pop(@dirs) unless $dirs[-1] } # remove empty component
598 push(@dirs, defined($file) ? $file : '');
599
600 #return wantarray ? @dirs : join ( '/', @dirs );
601
602 my $normalised_path = join '/', @dirs;
603
604 # Leading directory separators should not be stored in zip archives.
605 # Example:
606 # C:\a\b\c\ a/b/c
607 # C:\a\b\c.txt a/b/c.txt
608 # /a/b/c/ a/b/c
609 # /a/b/c.txt a/b/c.txt
610 $normalised_path =~ s{^/}{}; # remove leading separator
611
612 return $normalised_path;
613}
614
615# Return an absolute local name for a zip name.
616# Assume a directory if zip name has trailing slash.
617# Takes an optional volume name in FS format (like 'a:').
618#
619sub _asLocalName {
620 my $name = shift; # zip format
621 my $volume = shift;
622 $volume = '' unless defined($volume); # local FS format
623
624 my @paths = split(/\//, $name);
625 my $filename = pop(@paths);
626 $filename = '' unless defined($filename);
627 my $localDirs = @paths ? File::Spec->catdir(@paths) : '';
628 my $localName = File::Spec->catpath($volume, $localDirs, $filename);
629 unless ($volume) {
630 $localName = File::Spec->rel2abs($localName, Cwd::getcwd());
631 }
632 return $localName;
633}
634
63512µs1;
636
637__END__










Spreadsheet-ParseXLSX-0.35/nytprof/XSLoader-pm-250-line.html0000644000175000017500000020277114576335353022365 0ustar michamicha Profile of XSLoader.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/XSLoader.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1515152.72ms2.72msXSLoader::::load XSLoader::load
0000s0sDevel::NYTProf::Core::::BEGINDevel::NYTProf::Core::BEGIN
0000s0sXSLoader::::bootstrap_inherit XSLoader::bootstrap_inherit
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# Generated from XSLoader_pm.PL (resolved %Config::Config value)
2# This file is unique for every OS
3
4use strict;
5no strict 'refs';
6
7package XSLoader;
8
9our $VERSION = "0.32"; # remember to update version in POD!
10
11package DynaLoader;
12
13# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
14# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
15boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
16 !defined(&dl_error);
17package XSLoader;
18
19
# spent 2.72ms within XSLoader::load which was called 15 times, avg 181µs/call: # once (537µs+0s) by Crypt::Cipher::BEGIN@9 at line 8 of CryptX.pm # once (341µs+0s) by Test2::Util::BEGIN@7 at line 24 of POSIX.pm # once (202µs+0s) by XML::Parser::BEGIN@17 at line 29 of XML/Parser/Expat.pm # once (170µs+0s) by Archive::Zip::BEGIN@9 at line 134 of Compress/Raw/Zlib.pm # once (166µs+0s) by POSIX::BEGIN@11 at line 64 of Fcntl.pm # once (165µs+0s) by Test::Builder::BEGIN@15 at line 24 of List/Util.pm # once (148µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 254 of Digest/SHA.pm # once (141µs+0s) by Encode::BEGIN@9 at line 12 of Encode.pm # once (135µs+0s) by IO::Handle::BEGIN@276 at line 11 of IO.pm # once (128µs+0s) by Storable::BEGIN@109 at line 109 of Storable.pm # once (126µs+0s) by XML::Twig::BEGIN@1125 at line 64 of File/Glob.pm # once (126µs+0s) by Test2::API::BEGIN@5 at line 94 of Time/HiRes.pm # once (115µs+0s) by Archive::Zip::BEGIN@6 at line 82 of Cwd.pm # once (115µs+0s) by Test2::Util::HashBase::BEGIN@33 at line 18 of mro.pm # once (104µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@15 at line 14 of MIME/Base64.pm
sub load {
20 package DynaLoader;
21
22 my ($caller, $modlibname) = caller();
23 my $module = $caller;
24
25 if (@_) {
26 $module = $_[0];
27 } else {
28 $_[0] = $module;
29 }
30
31 # work with static linking too
32 my $boots = "$module\::bootstrap";
33 goto &$boots if defined &$boots;
34
35 goto \&XSLoader::bootstrap_inherit unless $module and defined &dl_load_file;
36
37 my @modparts = split(/::/,$module);
38 my $modfname = $modparts[-1];
39 my $modfname_orig = $modfname; # For .bs file search
40
41 my $modpname = join('/',@modparts);
42 my $c = () = split(/::/,$caller,-1);
43 $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename
44 # Does this look like a relative path?
45 if ($modlibname !~ m{^/}) {
46 # Someone may have a #line directive that changes the file name, or
47 # may be calling XSLoader::load from inside a string eval. We cer-
48 # tainly do not want to go loading some code that is not in @INC,
49 # as it could be untrusted.
50 #
51 # We could just fall back to DynaLoader here, but then the rest of
52 # this function would go untested in the perl core, since all @INC
53 # paths are relative during testing. That would be a time bomb
54 # waiting to happen, since bugs could be introduced into the code.
55 #
56 # So look through @INC to see if $modlibname is in it. A rela-
57 # tive $modlibname is not a common occurrence, so this block is
58 # not hot code.
59 FOUND: {
60 for (@INC) {
61 if ($_ eq $modlibname) {
62 last FOUND;
63 }
64 }
65 # Not found. Fall back to DynaLoader.
66 goto \&XSLoader::bootstrap_inherit;
67 }
68 }
69 my $file = "$modlibname/auto/$modpname/$modfname.so";
70
71# print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug;
72
73 # N.B. The .bs file does not following the naming convention used
74 # by mod2fname, so use the unedited version of the name.
75
76 my $bs = "$modlibname/auto/$modpname/$modfname_orig.bs";
77
78 # This calls DynaLoader::bootstrap, which will load the .bs file if present
79 goto \&XSLoader::bootstrap_inherit if not -f $file or -s $bs;
80
81 my $bootname = "boot_$module";
82 $bootname =~ s/\W/_/g;
83 @DynaLoader::dl_require_symbols = ($bootname);
84
85 my $boot_symbol_ref;
86
87 # Many dynamic extension loading problems will appear to come from
88 # this section of code: XYZ failed at line 123 of DynaLoader.pm.
89 # Often these errors are actually occurring in the initialisation
90 # C code of the extension XS file. Perl reports the error as being
91 # in this perl code simply because this was the last perl code
92 # it executed.
93
94 my $libref = dl_load_file($file, 0) or do {
95 require Carp;
96 Carp::croak("Can't load '$file' for module $module: " . dl_error());
97 };
98 push(@DynaLoader::dl_librefs,$libref); # record loaded object
99
100 $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
101 require Carp;
102 Carp::croak("Can't find '$bootname' symbol in $file\n");
103 };
104
105 push(@DynaLoader::dl_modules, $module); # record loaded module
106
107 boot:
108 my $xs = dl_install_xsub($boots, $boot_symbol_ref, $file);
109
110 # See comment block above
111 push(@DynaLoader::dl_shared_objects, $file); # record files loaded
112 return &$xs(@_);
113}
114
115# Can't test with DynaLoader->can('bootstrap_inherit') when building in the
116# core, as XSLoader gets built before DynaLoader.
117
118sub bootstrap_inherit {
119 require DynaLoader;
120 goto \&DynaLoader::bootstrap_inherit;
121}
122
1231;
124
125__END__
126
127=head1 NAME
128
129XSLoader - Dynamically load C libraries into Perl code
130
131=head1 VERSION
132
133Version 0.32
134
135=head1 SYNOPSIS
136
137 package YourPackage;
138 require XSLoader;
139
140 XSLoader::load(__PACKAGE__, $VERSION);
141
142=head1 DESCRIPTION
143
144This module defines a standard I<simplified> interface to the dynamic
145linking mechanisms available on many platforms. Its primary purpose is
146to implement cheap automatic dynamic loading of Perl modules.
147
148For a more complicated interface, see L<DynaLoader>. Many (most)
149features of C<DynaLoader> are not implemented in C<XSLoader>, like for
150example the C<dl_load_flags>, not honored by C<XSLoader>.
151
152=head2 Migration from C<DynaLoader>
153
154A typical module using L<DynaLoader|DynaLoader> starts like this:
155
156 package YourPackage;
157 require DynaLoader;
158
159 our @ISA = qw( OnePackage OtherPackage DynaLoader );
160 our $VERSION = '0.01';
161 __PACKAGE__->bootstrap($VERSION);
162
163Change this to
164
165 package YourPackage;
166 use XSLoader;
167
168 our @ISA = qw( OnePackage OtherPackage );
169 our $VERSION = '0.01';
170 XSLoader::load(__PACKAGE__, $VERSION);
171
172In other words: replace C<require DynaLoader> by C<use XSLoader>, remove
173C<DynaLoader> from C<@ISA>, change C<bootstrap> by C<XSLoader::load>. Do not
174forget to quote the name of your package on the C<XSLoader::load> line,
175and add comma (C<,>) before the arguments (C<$VERSION> above).
176
177Of course, if C<@ISA> contained only C<DynaLoader>, there is no need to have
178the C<@ISA> assignment at all; moreover, if instead of C<our> one uses the
179more backward-compatible
180
181 use vars qw($VERSION @ISA);
182
183one can remove this reference to C<@ISA> together with the C<@ISA> assignment.
184
185If no C<$VERSION> was specified on the C<bootstrap> line, the last line becomes
186
187 XSLoader::load(__PACKAGE__);
188
189in which case it can be further simplified to
190
191 XSLoader::load();
192
193as C<load> will use C<caller> to determine the package.
194
195=head2 Backward compatible boilerplate
196
197If you want to have your cake and eat it too, you need a more complicated
198boilerplate.
199
200 package YourPackage;
201
202 our @ISA = qw( OnePackage OtherPackage );
203 our $VERSION = '0.01';
204 eval {
205 require XSLoader;
206 XSLoader::load(__PACKAGE__, $VERSION);
207 1;
208 } or do {
209 require DynaLoader;
210 push @ISA, 'DynaLoader';
211 __PACKAGE__->bootstrap($VERSION);
212 };
213
214The parentheses about C<XSLoader::load()> arguments are needed since we replaced
215C<use XSLoader> by C<require>, so the compiler does not know that a function
216C<XSLoader::load()> is present.
217
218This boilerplate uses the low-overhead C<XSLoader> if present; if used with
219an antique Perl which has no C<XSLoader>, it falls back to using C<DynaLoader>.
220
221=head1 Order of initialization: early load()
222
223I<Skip this section if the XSUB functions are supposed to be called from other
224modules only; read it only if you call your XSUBs from the code in your module,
225or have a C<BOOT:> section in your XS file (see L<perlxs/"The BOOT: Keyword">).
226What is described here is equally applicable to the L<DynaLoader|DynaLoader>
227interface.>
228
229A sufficiently complicated module using XS would have both Perl code (defined
230in F<YourPackage.pm>) and XS code (defined in F<YourPackage.xs>). If this
231Perl code makes calls into this XS code, and/or this XS code makes calls to
232the Perl code, one should be careful with the order of initialization.
233
234The call to C<XSLoader::load()> (or C<bootstrap()>) calls the module's
235bootstrap code. For modules build by F<xsubpp> (nearly all modules) this
236has three side effects:
237
238=over
239
240=item *
241
242A sanity check is done to ensure that the versions of the F<.pm> and the
243(compiled) F<.xs> parts are compatible. If C<$VERSION> was specified, this
244is used for the check. If not specified, it defaults to
245C<$XS_VERSION // $VERSION> (in the module's namespace)
246
247=item *
248
249the XSUBs are made accessible from Perl
250
251=item *
252
253if a C<BOOT:> section was present in the F<.xs> file, the code there is called.
254
255=back
256
257Consequently, if the code in the F<.pm> file makes calls to these XSUBs, it is
258convenient to have XSUBs installed before the Perl code is defined; for
259example, this makes prototypes for XSUBs visible to this Perl code.
260Alternatively, if the C<BOOT:> section makes calls to Perl functions (or
261uses Perl variables) defined in the F<.pm> file, they must be defined prior to
262the call to C<XSLoader::load()> (or C<bootstrap()>).
263
264The first situation being much more frequent, it makes sense to rewrite the
265boilerplate as
266
267 package YourPackage;
268 use XSLoader;
269 our ($VERSION, @ISA);
270
271 BEGIN {
272 @ISA = qw( OnePackage OtherPackage );
273 $VERSION = '0.01';
274
275 # Put Perl code used in the BOOT: section here
276
277 XSLoader::load(__PACKAGE__, $VERSION);
278 }
279
280 # Put Perl code making calls into XSUBs here
281
282=head2 The most hairy case
283
284If the interdependence of your C<BOOT:> section and Perl code is
285more complicated than this (e.g., the C<BOOT:> section makes calls to Perl
286functions which make calls to XSUBs with prototypes), get rid of the C<BOOT:>
287section altogether. Replace it with a function C<onBOOT()>, and call it like
288this:
289
290 package YourPackage;
291 use XSLoader;
292 our ($VERSION, @ISA);
293
294 BEGIN {
295 @ISA = qw( OnePackage OtherPackage );
296 $VERSION = '0.01';
297 XSLoader::load(__PACKAGE__, $VERSION);
298 }
299
300 # Put Perl code used in onBOOT() function here; calls to XSUBs are
301 # prototype-checked.
302
303 onBOOT;
304
305 # Put Perl initialization code assuming that XS is initialized here
306
307
308=head1 DIAGNOSTICS
309
310=over
311
312=item C<Can't find '%s' symbol in %s>
313
314B<(F)> The bootstrap symbol could not be found in the extension module.
315
316=item C<Can't load '%s' for module %s: %s>
317
318B<(F)> The loading or initialisation of the extension module failed.
319The detailed error follows.
320
321=item C<Undefined symbols present after loading %s: %s>
322
323B<(W)> As the message says, some symbols stay undefined although the
324extension module was correctly loaded and initialised. The list of undefined
325symbols follows.
326
327=back
328
329=head1 LIMITATIONS
330
331To reduce the overhead as much as possible, only one possible location
332is checked to find the extension DLL (this location is where C<make install>
333would put the DLL). If not found, the search for the DLL is transparently
334delegated to C<DynaLoader>, which looks for the DLL along the C<@INC> list.
335
336In particular, this is applicable to the structure of C<@INC> used for testing
337not-yet-installed extensions. This means that running uninstalled extensions
338may have much more overhead than running the same extensions after
339C<make install>.
340
341
342=head1 KNOWN BUGS
343
344The new simpler way to call C<XSLoader::load()> with no arguments at all
345does not work on Perl 5.8.4 and 5.8.5.
346
347
348=head1 BUGS
349
350Please report any bugs or feature requests via the perlbug(1) utility.
351
352
353=head1 SEE ALSO
354
355L<DynaLoader>
356
357
358=head1 AUTHORS
359
360Ilya Zakharevich originally extracted C<XSLoader> from C<DynaLoader>.
361
362CPAN version is currently maintained by SE<eacute>bastien Aperghis-Tramoni
363E<lt>sebastien@aperghis.netE<gt>.
364
365Previous maintainer was Michael G Schwern <schwern@pobox.com>.
366
367
368=head1 COPYRIGHT & LICENSE
369
370Copyright (C) 1990-2011 by Larry Wall and others.
371
372This program is free software; you can redistribute it and/or modify
373it under the same terms as Perl itself.
374
375=cut










Spreadsheet-ParseXLSX-0.35/nytprof/XML-Twig-pm-129-line.html0000644000175000017500000711241414576335353022262 0ustar michamicha Profile of XML/Twig.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm
StatementsExecuted 74150636 statements in 41.9s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
364369329.97s35.2sXML::Twig::::_twig_start XML::Twig::_twig_start
1095679216.34s15.8sXML::Twig::::_ns_info XML::Twig::_ns_info
398167215.90s22.1sXML::Twig::::_replace_ns XML::Twig::_replace_ns
364369225.66s25.4sXML::Twig::::_twig_end XML::Twig::_twig_end
380001215.08s7.90sXML::Twig::::_a_proper_ns_prefix XML::Twig::_a_proper_ns_prefix
364369112.12s2.69sXML::Twig::::_replace_prefix XML::Twig::_replace_prefix
364369111.71s1.82sXML::Twig::Elt::::new XML::Twig::Elt::new
4215601421.66s2.08sXML::Twig::Elt::::first_child XML::Twig::Elt::first_child
364369111.56s1.69sXML::Twig::Elt::::set_atts XML::Twig::Elt::set_atts
397806211.18s1.46sXML::Twig::::_handler XML::Twig::_handler
12729211968ms1.00sXML::Twig::::_insert_pcdata XML::Twig::_insert_pcdata
20298611915ms958msXML::Twig::Elt::::next_sibling XML::Twig::Elt::next_sibling
12729211829ms1.91sXML::Twig::::_twig_char XML::Twig::_twig_char
3379911720ms8.21sXML::Twig::::_twig_start_check_roots XML::Twig::_twig_start_check_roots
25458232678ms678msXML::Twig::Elt::::text XML::Twig::Elt::text (recurses: max depth 1, inclusive time 145ms)
72873821599ms599msXML::Twig::::_add_or_discard_stored_spaces XML::Twig::_add_or_discard_stored_spaces
3381311545ms579msXML::Twig::Elt::::cut XML::Twig::Elt::cut
185824341524ms524msXML::Twig::::parser XML::Twig::parser
1565187500ms1.57sXML::Twig::Elt::::children XML::Twig::Elt::children
3380771317ms1.17sXML::Twig::::purge XML::Twig::purge
674081451278ms278msXML::Twig::Elt::::att XML::Twig::Elt::att
6776831177ms203msXML::Twig::Elt::::in XML::Twig::Elt::in
36436911128ms128msXML::Twig::Elt::::keep_atts_order XML::Twig::Elt::keep_atts_order
338132174.1ms653msXML::Twig::Elt::::delete XML::Twig::Elt::delete
12748710964.6ms64.6msXML::Twig::Elt::::gi XML::Twig::Elt::gi
37216.09ms7.38msXML::Twig::Elt::::_install_cond XML::Twig::Elt::_install_cond
21113.22ms5.96msXML::Twig::::_parse_xpath_handler XML::Twig::_parse_xpath_handler
15111.98ms3.48msXML::Twig::Elt::::_install_xpath XML::Twig::Elt::_install_xpath
7111.59ms2.49msXML::Twig::::_use XML::Twig::_use
1111.01ms3.56msXML::Twig::::BEGIN@151 XML::Twig::BEGIN@151
1611618µs870µsXML::Twig::Elt::::descendants XML::Twig::Elt::descendants
15421527µs649µsXML::Twig::Elt::::ancestors XML::Twig::Elt::ancestors
7711479µs1.42msXML::Twig::Elt::::cmp XML::Twig::Elt::cmp
711392µs12.0msXML::Twig::::new XML::Twig::new
2121382µs8.48msXML::Twig::::_set_handler XML::Twig::_set_handler
111307µs480µsXML::Twig::::BEGIN@1125 XML::Twig::BEGIN@1125
11711242µs242µsXML::Twig::Elt::::set_gi XML::Twig::Elt::set_gi
45821190µs5.29msXML::Twig::Elt::::passes XML::Twig::Elt::passes
111141µs169µsXML::Twig::::BEGIN@25 XML::Twig::BEGIN@25
111136µs252µsXML::Twig::Elt::::next_elt XML::Twig::Elt::next_elt
632125µs584µsXML::Twig::::DESTROY XML::Twig::DESTROY
2711117µs120µsXML::Twig::::_tag_cond XML::Twig::_tag_cond
3711112µs153µsXML::Twig::Elt::::_gi_test XML::Twig::Elt::_gi_test
211194µs6.12msXML::Twig::::_set_xpath_handler XML::Twig::_set_xpath_handler
161186µs12.3msXML::Twig::Elt::::get_xpath XML::Twig::Elt::get_xpath
16151584µs6.13msXML::Twig::::descendants XML::Twig::descendants
1616182µs12.4msXML::Twig::::get_xpath XML::Twig::get_xpath
11181µs81µsSpreadsheet::ParseXLSX::::BEGIN@11.2 Spreadsheet::ParseXLSX::BEGIN@11.2
11179µs240µsXML::Twig::::BEGIN@148 XML::Twig::BEGIN@148
211172µs72µsXML::Twig::::_add_handler XML::Twig::_add_handler
71165µs88µsXML::Twig::::_twig_final XML::Twig::_twig_final
71163µs63µsXML::Twig::::_normalize_args XML::Twig::_normalize_args
11161µs4.78msXML::Twig::::setTwigRoots XML::Twig::setTwigRoots
753160µs60µsXML::Twig::::_join_n XML::Twig::_join_n
16151560µs1.56msXML::Twig::::_unique_elts XML::Twig::_unique_elts
71150µs80µsXML::Twig::::_twig_end_check_roots XML::Twig::_twig_end_check_roots
73148µs70.4sXML::Twig::::parse XML::Twig::parse
211148µs92µsXML::Twig::::_set_pi_handler XML::Twig::_set_pi_handler
211148µs88µsXML::Twig::::_set_special_handler XML::Twig::_set_special_handler
161140µs40µsXML::Twig::Elt::::root XML::Twig::Elt::root
16151538µs78µsXML::Twig::Elt::::twig XML::Twig::Elt::twig
71133µs44µsXML::Twig::::_twig_init XML::Twig::_twig_init
11133µs49µsXML::Twig::Elt::::BEGIN@5096 XML::Twig::Elt::BEGIN@5096
71132µs32µsXML::Twig::::_twig_xmldecl XML::Twig::_twig_xmldecl
211131µs36µsXML::Twig::::_set_level_handler XML::Twig::_set_level_handler
11129µs29µsXML::Twig::::BEGIN@3842 XML::Twig::BEGIN@3842
211129µs32µsXML::Twig::::_set_regexp_handler XML::Twig::_set_regexp_handler
22122µs6.11msXML::Twig::::_set_handlers XML::Twig::_set_handlers
71122µs24µsXML::Twig::::set_root XML::Twig::set_root
71121µs25µsXML::Twig::Elt::::set_output_filter XML::Twig::Elt::set_output_filter
344120µs20µsXML::Twig::::root XML::Twig::root
61118µs26µsXML::Twig::Elt::::is_elt XML::Twig::Elt::is_elt
71118µs20µsXML::Twig::Elt::::set_output_text_filter XML::Twig::Elt::set_output_text_filter
71118µs26µsXML::Twig::::set_keep_encoding XML::Twig::set_keep_encoding
61118µs23µsXML::Twig::::_twig_default XML::Twig::_twig_default
71117µs78µsXML::Twig::::_checked_parse_result XML::Twig::_checked_parse_result
11116µs16µsXML::Twig::Elt::::BEGIN@8119 XML::Twig::Elt::BEGIN@8119
71113µs13µsXML::Twig::Entity_list::::new XML::Twig::Entity_list::new
71113µs13µsXML::Twig::Elt::::_join_defined XML::Twig::Elt::_join_defined
71113µs26µsXML::Twig::Elt::::_and XML::Twig::Elt::_and
71111µs20µsXML::Twig::::set_expand_external_entities XML::Twig::set_expand_external_entities
71111µs11µsXML::Twig::Elt::::set_quote XML::Twig::Elt::set_quote
71111µs17µsXML::Twig::::set_do_not_escape_amp_in_atts XML::Twig::set_do_not_escape_amp_in_atts
71111µs22µsXML::Twig::::set_quote XML::Twig::set_quote
71110µs17µsXML::Twig::::set_keep_atts_order XML::Twig::set_keep_atts_order
51110µs10µsXML::Twig::Elt::::_op XML::Twig::Elt::_op
71110µs10µsXML::Twig::Notation_list::::newXML::Twig::Notation_list::new
7119µs14µsXML::Twig::::set_remove_cdata XML::Twig::set_remove_cdata
7119µs34µsXML::Twig::::set_output_filter XML::Twig::set_output_filter
1119µs10µsXML::Twig::Elt::::BEGIN@8108 XML::Twig::Elt::BEGIN@8108
1119µs9µsXML::Twig::::_check_illegal_twig_roots_handlers XML::Twig::_check_illegal_twig_roots_handlers
7119µs28µsXML::Twig::::set_output_text_filter XML::Twig::set_output_text_filter
7118µs8µsXML::Twig::Elt::::set_expand_external_entities XML::Twig::Elt::set_expand_external_entities
1118µs3.81msXML::Twig::::setTwigHandlers XML::Twig::setTwigHandlers
1118µs10µsSpreadsheet::ParseXLSX::::BEGIN@1 Spreadsheet::ParseXLSX::BEGIN@1
1118µs10µsXML::Twig::::BEGIN@2455 XML::Twig::BEGIN@2455
7118µs8µsXML::Twig::Elt::::set_keep_encoding XML::Twig::Elt::set_keep_encoding
1118µs10µsXML::Twig::::BEGIN@4636 XML::Twig::BEGIN@4636
1118µs12µsXML::Twig::::BEGIN@1327 XML::Twig::BEGIN@1327
1118µs12µsXML::Twig::::BEGIN@3229 XML::Twig::BEGIN@3229
7118µs8µsXML::Twig::::_set_fh_to_selected_fh XML::Twig::_set_fh_to_selected_fh
1117µs20µsXML::Twig::::BEGIN@439 XML::Twig::BEGIN@439
1117µs31µsXML::Twig::Elt::::BEGIN@5082 XML::Twig::Elt::BEGIN@5082
1117µs9µsXML::Twig::Elt::::BEGIN@7919 XML::Twig::Elt::BEGIN@7919
1117µs8µsXML::Twig::::BEGIN@30 XML::Twig::BEGIN@30
7117µs7µsXML::Twig::Elt::::set_keep_atts_order XML::Twig::Elt::set_keep_atts_order
1117µs7µsXML::Twig::Elt::::BEGIN@8404 XML::Twig::Elt::BEGIN@8404
1117µs11µsXML::Twig::::BEGIN@3587 XML::Twig::BEGIN@3587
7117µs7µsXML::Twig::Elt::::set_do_not_escape_amp_in_atts XML::Twig::Elt::set_do_not_escape_amp_in_atts
1116µs10µsXML::Twig::::BEGIN@4159 XML::Twig::BEGIN@4159
7116µs6µsXML::Twig::::_set_fh_to_twig_output_fh XML::Twig::_set_fh_to_twig_output_fh
1116µs6µsXML::Twig::Elt::::BEGIN@8906 XML::Twig::Elt::BEGIN@8906
1116µs10µsXML::Twig::::BEGIN@3852 XML::Twig::BEGIN@3852
2216µs6µsXML::Twig::::_reset_handlers XML::Twig::_reset_handlers
1116µs6µsXML::Twig::Elt::::BEGIN@6961 XML::Twig::Elt::BEGIN@6961
1116µs9µsXML::Twig::::BEGIN@3619 XML::Twig::BEGIN@3619
1116µs9µsXML::Twig::::BEGIN@3648 XML::Twig::BEGIN@3648
1115µs18µsXML::Twig::::BEGIN@812 XML::Twig::BEGIN@812
1115µs6µsXML::Twig::::BEGIN@4649 XML::Twig::BEGIN@4649
1115µs8µsXML::Twig::::BEGIN@4211 XML::Twig::BEGIN@4211
1115µs8µsXML::Twig::::BEGIN@4246 XML::Twig::BEGIN@4246
7115µs5µsXML::Twig::Elt::::set_remove_cdata XML::Twig::Elt::set_remove_cdata
1115µs24µsXML::Twig::::BEGIN@29 XML::Twig::BEGIN@29
1115µs8µsXML::Twig::::BEGIN@4175 XML::Twig::BEGIN@4175
1114µs14µsXML::Twig::::BEGIN@38 XML::Twig::BEGIN@38
1114µs4µsXML::Twig::Elt::::BEGIN@7340 XML::Twig::Elt::BEGIN@7340
1114µs10µsXML::Twig::::BEGIN@33 XML::Twig::BEGIN@33
1114µs21µsXML::Twig::::BEGIN@31 XML::Twig::BEGIN@31
1114µs28µsXML::Twig::::BEGIN@27 XML::Twig::BEGIN@27
1114µs6µsXML::Twig::::BEGIN@4181 XML::Twig::BEGIN@4181
1114µs18µsSpreadsheet::ParseXLSX::::BEGIN@2 Spreadsheet::ParseXLSX::BEGIN@2
1113µs3µsXML::Twig::Notation::::BEGIN@5023 XML::Twig::Notation::BEGIN@5023
1113µs3µsXML::Twig::Elt::::BEGIN@6232 XML::Twig::Elt::BEGIN@6232
1112µs2µsXML::Twig::::__ANON__[:265] XML::Twig::__ANON__[:265]
1111µs1µsSpreadsheet::ParseXLSX::::BEGIN@7 Spreadsheet::ParseXLSX::BEGIN@7
1111µs1µsXML::Twig::Elt::::set_destroy XML::Twig::Elt::set_destroy
111600ns600nsSpreadsheet::ParseXLSX::::__ANON__ Spreadsheet::ParseXLSX::__ANON__ (xsub)
0000s0sXML::Twig::Elt::::__ANON__[:9636] XML::Twig::Elt::__ANON__[:9636]
0000s0sXML::Twig::Elt::::__ANON__[:9643] XML::Twig::Elt::__ANON__[:9643]
0000s0sXML::Twig::Elt::::__destroy XML::Twig::Elt::__destroy
0000s0sXML::Twig::Elt::::__flush XML::Twig::Elt::__flush
0000s0sXML::Twig::Elt::::_ancestors XML::Twig::Elt::_ancestors
0000s0sXML::Twig::Elt::::_att_xml_string XML::Twig::Elt::_att_xml_string
0000s0sXML::Twig::Elt::::_atts_to_SAX2 XML::Twig::Elt::_atts_to_SAX2
0000s0sXML::Twig::Elt::::_children XML::Twig::Elt::_children
0000s0sXML::Twig::Elt::::_comment_escaped_string XML::Twig::Elt::_comment_escaped_string
0000s0sXML::Twig::Elt::::_croak_and_doublecheck_xpath XML::Twig::Elt::_croak_and_doublecheck_xpath
0000s0sXML::Twig::Elt::::_current_ns_prefix_map XML::Twig::Elt::_current_ns_prefix_map
0000s0sXML::Twig::Elt::::_del_extra_data_before_end_tag XML::Twig::Elt::_del_extra_data_before_end_tag
0000s0sXML::Twig::Elt::::_del_extra_data_in_pcdata XML::Twig::Elt::_del_extra_data_in_pcdata
0000s0sXML::Twig::Elt::::_del_flushed XML::Twig::Elt::_del_flushed
0000s0sXML::Twig::Elt::::_descendants XML::Twig::Elt::_descendants
0000s0sXML::Twig::Elt::::_dump XML::Twig::Elt::_dump
0000s0sXML::Twig::Elt::::_dump_extra_data XML::Twig::Elt::_dump_extra_data
0000s0sXML::Twig::Elt::::_end_prefix_mapping XML::Twig::Elt::_end_prefix_mapping
0000s0sXML::Twig::Elt::::_end_tag_data_SAX1 XML::Twig::Elt::_end_tag_data_SAX1
0000s0sXML::Twig::Elt::::_end_tag_data_SAX2 XML::Twig::Elt::_end_tag_data_SAX2
0000s0sXML::Twig::Elt::::_extra_data_before_end_tag XML::Twig::Elt::_extra_data_before_end_tag
0000s0sXML::Twig::Elt::::_extra_data_in_pcdata XML::Twig::Elt::_extra_data_in_pcdata
0000s0sXML::Twig::Elt::::_first_child XML::Twig::Elt::_first_child
0000s0sXML::Twig::Elt::::_flush XML::Twig::Elt::_flush
0000s0sXML::Twig::Elt::::_flushed XML::Twig::Elt::_flushed
0000s0sXML::Twig::Elt::::_following_elt XML::Twig::Elt::_following_elt
0000s0sXML::Twig::Elt::::_gen_mark XML::Twig::Elt::_gen_mark
0000s0sXML::Twig::Elt::::_inherit_att_through_cut XML::Twig::Elt::_inherit_att_through_cut
0000s0sXML::Twig::Elt::::_install_replace_sub XML::Twig::Elt::_install_replace_sub
0000s0sXML::Twig::Elt::::_is_private XML::Twig::Elt::_is_private
0000s0sXML::Twig::Elt::::_is_private_name XML::Twig::Elt::_is_private_name
0000s0sXML::Twig::Elt::::_is_string XML::Twig::Elt::_is_string
0000s0sXML::Twig::Elt::::_keep_encoding XML::Twig::Elt::_keep_encoding
0000s0sXML::Twig::Elt::::_key_attr XML::Twig::Elt::_key_attr
0000s0sXML::Twig::Elt::::_last_child XML::Twig::Elt::_last_child
0000s0sXML::Twig::Elt::::_last_descendant XML::Twig::Elt::_last_descendant
0000s0sXML::Twig::Elt::::_local_name XML::Twig::Elt::_local_name
0000s0sXML::Twig::Elt::::_match_expr XML::Twig::Elt::_match_expr
0000s0sXML::Twig::Elt::::_match_extra_data XML::Twig::Elt::_match_extra_data
0000s0sXML::Twig::Elt::::_match_extra_data_chars XML::Twig::Elt::_match_extra_data_chars
0000s0sXML::Twig::Elt::::_match_extra_data_words XML::Twig::Elt::_match_extra_data_words
0000s0sXML::Twig::Elt::::_match_tag XML::Twig::Elt::_match_tag
0000s0sXML::Twig::Elt::::_move_extra_data_after_erase XML::Twig::Elt::_move_extra_data_after_erase
0000s0sXML::Twig::Elt::::_new_pcdata XML::Twig::Elt::_new_pcdata
0000s0sXML::Twig::Elt::::_next_sibling XML::Twig::Elt::_next_sibling
0000s0sXML::Twig::Elt::::_next_siblings XML::Twig::Elt::_next_siblings
0000s0sXML::Twig::Elt::::_normalize_space XML::Twig::Elt::_normalize_space
0000s0sXML::Twig::Elt::::_ns_prefix XML::Twig::Elt::_ns_prefix
0000s0sXML::Twig::Elt::::_parent XML::Twig::Elt::_parent
0000s0sXML::Twig::Elt::::_parse_predicate_in_step XML::Twig::Elt::_parse_predicate_in_step
0000s0sXML::Twig::Elt::::_pos_offset XML::Twig::Elt::_pos_offset
0000s0sXML::Twig::Elt::::_preceding_elt XML::Twig::Elt::_preceding_elt
0000s0sXML::Twig::Elt::::_prefix_extra_data_before_end_tag XML::Twig::Elt::_prefix_extra_data_before_end_tag
0000s0sXML::Twig::Elt::::_pretty_print XML::Twig::Elt::_pretty_print
0000s0sXML::Twig::Elt::::_pretty_print_styles XML::Twig::Elt::_pretty_print_styles
0000s0sXML::Twig::Elt::::_prev_sibling XML::Twig::Elt::_prev_sibling
0000s0sXML::Twig::Elt::::_prev_siblings XML::Twig::Elt::_prev_siblings
0000s0sXML::Twig::Elt::::_protect_extra_data XML::Twig::Elt::_protect_extra_data
0000s0sXML::Twig::Elt::::_push_extra_data_in_pcdata XML::Twig::Elt::_push_extra_data_in_pcdata
0000s0sXML::Twig::Elt::::_repl_match XML::Twig::Elt::_repl_match
0000s0sXML::Twig::Elt::::_replace_var XML::Twig::Elt::_replace_var
0000s0sXML::Twig::Elt::::_replace_vars_in_text XML::Twig::Elt::_replace_vars_in_text
0000s0sXML::Twig::Elt::::_restore_original_prefix XML::Twig::Elt::_restore_original_prefix
0000s0sXML::Twig::Elt::::_root_through_cut XML::Twig::Elt::_root_through_cut
0000s0sXML::Twig::Elt::::_self XML::Twig::Elt::_self
0000s0sXML::Twig::Elt::::_set_cdata XML::Twig::Elt::_set_cdata
0000s0sXML::Twig::Elt::::_set_comment XML::Twig::Elt::_set_comment
0000s0sXML::Twig::Elt::::_set_extra_data_before_end_tag XML::Twig::Elt::_set_extra_data_before_end_tag
0000s0sXML::Twig::Elt::::_set_extra_data_in_pcdata XML::Twig::Elt::_set_extra_data_in_pcdata
0000s0sXML::Twig::Elt::::_set_flushed XML::Twig::Elt::_set_flushed
0000s0sXML::Twig::Elt::::_set_id XML::Twig::Elt::_set_id
0000s0sXML::Twig::Elt::::_set_pcdata XML::Twig::Elt::_set_pcdata
0000s0sXML::Twig::Elt::::_set_pi XML::Twig::Elt::_set_pi
0000s0sXML::Twig::Elt::::_short_text XML::Twig::Elt::_short_text
0000s0sXML::Twig::Elt::::_simplify XML::Twig::Elt::_simplify
0000s0sXML::Twig::Elt::::_split XML::Twig::Elt::_split
0000s0sXML::Twig::Elt::::_sprint XML::Twig::Elt::_sprint
0000s0sXML::Twig::Elt::::_start_prefix_mapping XML::Twig::Elt::_start_prefix_mapping
0000s0sXML::Twig::Elt::::_start_tag_data_SAX1 XML::Twig::Elt::_start_tag_data_SAX1
0000s0sXML::Twig::Elt::::_start_tag_data_SAX2 XML::Twig::Elt::_start_tag_data_SAX2
0000s0sXML::Twig::Elt::::_store_var XML::Twig::Elt::_store_var
0000s0sXML::Twig::Elt::::_stringify_struct XML::Twig::Elt::_stringify_struct
0000s0sXML::Twig::Elt::::_text_with_vars XML::Twig::Elt::_text_with_vars
0000s0sXML::Twig::Elt::::_toSAX XML::Twig::Elt::_toSAX
0000s0sXML::Twig::Elt::::_try_moving_extra_data XML::Twig::Elt::_try_moving_extra_data
0000s0sXML::Twig::Elt::::_twig_through_cut XML::Twig::Elt::_twig_through_cut
0000s0sXML::Twig::Elt::::_unprotect_extra_data XML::Twig::Elt::_unprotect_extra_data
0000s0sXML::Twig::Elt::::_unshift_extra_data_in_pcdata XML::Twig::Elt::_unshift_extra_data_in_pcdata
0000s0sXML::Twig::Elt::::_utf8_ify XML::Twig::Elt::_utf8_ify
0000s0sXML::Twig::Elt::::_wrap_range XML::Twig::Elt::_wrap_range
0000s0sXML::Twig::Elt::::_wrap_text XML::Twig::Elt::_wrap_text
0000s0sXML::Twig::Elt::::add_att_to_class XML::Twig::Elt::add_att_to_class
0000s0sXML::Twig::Elt::::add_id XML::Twig::Elt::add_id
0000s0sXML::Twig::Elt::::add_tag_to_class XML::Twig::Elt::add_tag_to_class
0000s0sXML::Twig::Elt::::add_to_class XML::Twig::Elt::add_to_class
0000s0sXML::Twig::Elt::::after XML::Twig::Elt::after
0000s0sXML::Twig::Elt::::all_children_are XML::Twig::Elt::all_children_are
0000s0sXML::Twig::Elt::::ancestors_or_self XML::Twig::Elt::ancestors_or_self
0000s0sXML::Twig::Elt::::append_cdata XML::Twig::Elt::append_cdata
0000s0sXML::Twig::Elt::::append_extra_data XML::Twig::Elt::append_extra_data
0000s0sXML::Twig::Elt::::append_pcdata XML::Twig::Elt::append_pcdata
0000s0sXML::Twig::Elt::::att_exists XML::Twig::Elt::att_exists
0000s0sXML::Twig::Elt::::att_names XML::Twig::Elt::att_names
0000s0sXML::Twig::Elt::::att_nb XML::Twig::Elt::att_nb
0000s0sXML::Twig::Elt::::att_to_class XML::Twig::Elt::att_to_class
0000s0sXML::Twig::Elt::::att_to_field XML::Twig::Elt::att_to_field
0000s0sXML::Twig::Elt::::att_xml_string XML::Twig::Elt::att_xml_string
0000s0sXML::Twig::Elt::::atts XML::Twig::Elt::atts
0000s0sXML::Twig::Elt::::before XML::Twig::Elt::before
0000s0sXML::Twig::Elt::::cdata XML::Twig::Elt::cdata
0000s0sXML::Twig::Elt::::cdata_string XML::Twig::Elt::cdata_string
0000s0sXML::Twig::Elt::::change_att_name XML::Twig::Elt::change_att_name
0000s0sXML::Twig::Elt::::child XML::Twig::Elt::child
0000s0sXML::Twig::Elt::::child_matches XML::Twig::Elt::child_matches
0000s0sXML::Twig::Elt::::child_text XML::Twig::Elt::child_text
0000s0sXML::Twig::Elt::::child_trimmed_text XML::Twig::Elt::child_trimmed_text
0000s0sXML::Twig::Elt::::children_copy XML::Twig::Elt::children_copy
0000s0sXML::Twig::Elt::::children_count XML::Twig::Elt::children_count
0000s0sXML::Twig::Elt::::children_text XML::Twig::Elt::children_text
0000s0sXML::Twig::Elt::::children_trimmed_text XML::Twig::Elt::children_trimmed_text
0000s0sXML::Twig::Elt::::class XML::Twig::Elt::class
0000s0sXML::Twig::Elt::::closed XML::Twig::Elt::closed
0000s0sXML::Twig::Elt::::comment XML::Twig::Elt::comment
0000s0sXML::Twig::Elt::::comment_string XML::Twig::Elt::comment_string
0000s0sXML::Twig::Elt::::contains_a_single XML::Twig::Elt::contains_a_single
0000s0sXML::Twig::Elt::::contains_only XML::Twig::Elt::contains_only
0000s0sXML::Twig::Elt::::contains_only_text XML::Twig::Elt::contains_only_text
0000s0sXML::Twig::Elt::::contains_text XML::Twig::Elt::contains_text
0000s0sXML::Twig::Elt::::copy XML::Twig::Elt::copy
0000s0sXML::Twig::Elt::::current_ns_prefixes XML::Twig::Elt::current_ns_prefixes
0000s0sXML::Twig::Elt::::cut_children XML::Twig::Elt::cut_children
0000s0sXML::Twig::Elt::::cut_descendants XML::Twig::Elt::cut_descendants
0000s0sXML::Twig::Elt::::data XML::Twig::Elt::data
0000s0sXML::Twig::Elt::::declare_missing_ns XML::Twig::Elt::declare_missing_ns
0000s0sXML::Twig::Elt::::del_att XML::Twig::Elt::del_att
0000s0sXML::Twig::Elt::::del_atts XML::Twig::Elt::del_atts
0000s0sXML::Twig::Elt::::del_id XML::Twig::Elt::del_id
0000s0sXML::Twig::Elt::::del_twig_current XML::Twig::Elt::del_twig_current
0000s0sXML::Twig::Elt::::descendants_or_self XML::Twig::Elt::descendants_or_self
0000s0sXML::Twig::Elt::::do_not_escape_gt XML::Twig::Elt::do_not_escape_gt
0000s0sXML::Twig::Elt::::end_tag XML::Twig::Elt::end_tag
0000s0sXML::Twig::Elt::::ent XML::Twig::Elt::ent
0000s0sXML::Twig::Elt::::ent_name XML::Twig::Elt::ent_name
0000s0sXML::Twig::Elt::::ent_string XML::Twig::Elt::ent_string
0000s0sXML::Twig::Elt::::erase XML::Twig::Elt::erase
0000s0sXML::Twig::Elt::::escape_gt XML::Twig::Elt::escape_gt
0000s0sXML::Twig::Elt::::extra_data XML::Twig::Elt::extra_data
0000s0sXML::Twig::Elt::::field_to_att XML::Twig::Elt::field_to_att
0000s0sXML::Twig::Elt::::fields XML::Twig::Elt::fields
0000s0sXML::Twig::Elt::::findvalue XML::Twig::Elt::findvalue
0000s0sXML::Twig::Elt::::findvalues XML::Twig::Elt::findvalues
0000s0sXML::Twig::Elt::::first_child_matches XML::Twig::Elt::first_child_matches
0000s0sXML::Twig::Elt::::first_child_text XML::Twig::Elt::first_child_text
0000s0sXML::Twig::Elt::::first_child_trimmed_text XML::Twig::Elt::first_child_trimmed_text
0000s0sXML::Twig::Elt::::first_descendant XML::Twig::Elt::first_descendant
0000s0sXML::Twig::Elt::::flush XML::Twig::Elt::flush
0000s0sXML::Twig::Elt::::following_elt XML::Twig::Elt::following_elt
0000s0sXML::Twig::Elt::::following_elts XML::Twig::Elt::following_elts
0000s0sXML::Twig::Elt::::former_next_sibling XML::Twig::Elt::former_next_sibling
0000s0sXML::Twig::Elt::::former_parent XML::Twig::Elt::former_parent
0000s0sXML::Twig::Elt::::former_prev_sibling XML::Twig::Elt::former_prev_sibling
0000s0sXML::Twig::Elt::::ge XML::Twig::Elt::ge
0000s0sXML::Twig::Elt::::getChildNodes XML::Twig::Elt::getChildNodes
0000s0sXML::Twig::Elt::::getElementById XML::Twig::Elt::getElementById
0000s0sXML::Twig::Elt::::get_type XML::Twig::Elt::get_type
0000s0sXML::Twig::Elt::::global_state XML::Twig::Elt::global_state
0000s0sXML::Twig::Elt::::gt XML::Twig::Elt::gt
0000s0sXML::Twig::Elt::::has_no_atts XML::Twig::Elt::has_no_atts
0000s0sXML::Twig::Elt::::id XML::Twig::Elt::id
0000s0sXML::Twig::Elt::::ignore XML::Twig::Elt::ignore
0000s0sXML::Twig::Elt::::in_class XML::Twig::Elt::in_class
0000s0sXML::Twig::Elt::::in_context XML::Twig::Elt::in_context
0000s0sXML::Twig::Elt::::inherit_att XML::Twig::Elt::inherit_att
0000s0sXML::Twig::Elt::::init_global_state XML::Twig::Elt::init_global_state
0000s0sXML::Twig::Elt::::insert XML::Twig::Elt::insert
0000s0sXML::Twig::Elt::::insert_new_elt XML::Twig::Elt::insert_new_elt
0000s0sXML::Twig::Elt::::is_asis XML::Twig::Elt::is_asis
0000s0sXML::Twig::Elt::::is_cdata XML::Twig::Elt::is_cdata
0000s0sXML::Twig::Elt::::is_comment XML::Twig::Elt::is_comment
0000s0sXML::Twig::Elt::::is_empty XML::Twig::Elt::is_empty
0000s0sXML::Twig::Elt::::is_ent XML::Twig::Elt::is_ent
0000s0sXML::Twig::Elt::::is_first_child XML::Twig::Elt::is_first_child
0000s0sXML::Twig::Elt::::is_last_child XML::Twig::Elt::is_last_child
0000s0sXML::Twig::Elt::::is_pcdata XML::Twig::Elt::is_pcdata
0000s0sXML::Twig::Elt::::is_pi XML::Twig::Elt::is_pi
0000s0sXML::Twig::Elt::::is_text XML::Twig::Elt::is_text
0000s0sXML::Twig::Elt::::last_child XML::Twig::Elt::last_child
0000s0sXML::Twig::Elt::::last_child_matches XML::Twig::Elt::last_child_matches
0000s0sXML::Twig::Elt::::last_child_text XML::Twig::Elt::last_child_text
0000s0sXML::Twig::Elt::::last_child_trimmed_text XML::Twig::Elt::last_child_trimmed_text
0000s0sXML::Twig::Elt::::last_descendant XML::Twig::Elt::last_descendant
0000s0sXML::Twig::Elt::::latt XML::Twig::Elt::latt
0000s0sXML::Twig::Elt::::lc_attnames XML::Twig::Elt::lc_attnames
0000s0sXML::Twig::Elt::::lclass XML::Twig::Elt::lclass
0000s0sXML::Twig::Elt::::le XML::Twig::Elt::le
0000s0sXML::Twig::Elt::::level XML::Twig::Elt::level
0000s0sXML::Twig::Elt::::local_name XML::Twig::Elt::local_name
0000s0sXML::Twig::Elt::::lt XML::Twig::Elt::lt
0000s0sXML::Twig::Elt::::mark XML::Twig::Elt::mark
0000s0sXML::Twig::Elt::::merge XML::Twig::Elt::merge
0000s0sXML::Twig::Elt::::merge_text XML::Twig::Elt::merge_text
0000s0sXML::Twig::Elt::::move XML::Twig::Elt::move
0000s0sXML::Twig::Elt::::move_att_to_class XML::Twig::Elt::move_att_to_class
0000s0sXML::Twig::Elt::::namespace XML::Twig::Elt::namespace
0000s0sXML::Twig::Elt::::next_elt_matches XML::Twig::Elt::next_elt_matches
0000s0sXML::Twig::Elt::::next_elt_text XML::Twig::Elt::next_elt_text
0000s0sXML::Twig::Elt::::next_elt_trimmed_text XML::Twig::Elt::next_elt_trimmed_text
0000s0sXML::Twig::Elt::::next_n_elt XML::Twig::Elt::next_n_elt
0000s0sXML::Twig::Elt::::next_sibling_matches XML::Twig::Elt::next_sibling_matches
0000s0sXML::Twig::Elt::::next_sibling_text XML::Twig::Elt::next_sibling_text
0000s0sXML::Twig::Elt::::next_sibling_trimmed_text XML::Twig::Elt::next_sibling_trimmed_text
0000s0sXML::Twig::Elt::::next_siblings XML::Twig::Elt::next_siblings
0000s0sXML::Twig::Elt::::normalize XML::Twig::Elt::normalize
0000s0sXML::Twig::Elt::::ns_prefix XML::Twig::Elt::ns_prefix
0000s0sXML::Twig::Elt::::output_filter XML::Twig::Elt::output_filter
0000s0sXML::Twig::Elt::::output_text_filter XML::Twig::Elt::output_text_filter
0000s0sXML::Twig::Elt::::parent XML::Twig::Elt::parent
0000s0sXML::Twig::Elt::::parent_matches XML::Twig::Elt::parent_matches
0000s0sXML::Twig::Elt::::parent_text XML::Twig::Elt::parent_text
0000s0sXML::Twig::Elt::::parent_trimmed_text XML::Twig::Elt::parent_trimmed_text
0000s0sXML::Twig::Elt::::parse XML::Twig::Elt::parse
0000s0sXML::Twig::Elt::::paste XML::Twig::Elt::paste
0000s0sXML::Twig::Elt::::paste_after XML::Twig::Elt::paste_after
0000s0sXML::Twig::Elt::::paste_before XML::Twig::Elt::paste_before
0000s0sXML::Twig::Elt::::paste_first_child XML::Twig::Elt::paste_first_child
0000s0sXML::Twig::Elt::::paste_last_child XML::Twig::Elt::paste_last_child
0000s0sXML::Twig::Elt::::paste_within XML::Twig::Elt::paste_within
0000s0sXML::Twig::Elt::::path XML::Twig::Elt::path
0000s0sXML::Twig::Elt::::pcdata XML::Twig::Elt::pcdata
0000s0sXML::Twig::Elt::::pcdata_xml_string XML::Twig::Elt::pcdata_xml_string
0000s0sXML::Twig::Elt::::pi_string XML::Twig::Elt::pi_string
0000s0sXML::Twig::Elt::::pos XML::Twig::Elt::pos
0000s0sXML::Twig::Elt::::preceding_elt XML::Twig::Elt::preceding_elt
0000s0sXML::Twig::Elt::::preceding_elts XML::Twig::Elt::preceding_elts
0000s0sXML::Twig::Elt::::prefix XML::Twig::Elt::prefix
0000s0sXML::Twig::Elt::::prev_elt XML::Twig::Elt::prev_elt
0000s0sXML::Twig::Elt::::prev_elt_matches XML::Twig::Elt::prev_elt_matches
0000s0sXML::Twig::Elt::::prev_elt_text XML::Twig::Elt::prev_elt_text
0000s0sXML::Twig::Elt::::prev_elt_trimmed_text XML::Twig::Elt::prev_elt_trimmed_text
0000s0sXML::Twig::Elt::::prev_sibling XML::Twig::Elt::prev_sibling
0000s0sXML::Twig::Elt::::prev_sibling_matches XML::Twig::Elt::prev_sibling_matches
0000s0sXML::Twig::Elt::::prev_sibling_text XML::Twig::Elt::prev_sibling_text
0000s0sXML::Twig::Elt::::prev_sibling_trimmed_text XML::Twig::Elt::prev_sibling_trimmed_text
0000s0sXML::Twig::Elt::::prev_siblings XML::Twig::Elt::prev_siblings
0000s0sXML::Twig::Elt::::print XML::Twig::Elt::print
0000s0sXML::Twig::Elt::::print_to_file XML::Twig::Elt::print_to_file
0000s0sXML::Twig::Elt::::purge XML::Twig::Elt::purge
0000s0sXML::Twig::Elt::::remove_cdata XML::Twig::Elt::remove_cdata
0000s0sXML::Twig::Elt::::remove_class XML::Twig::Elt::remove_class
0000s0sXML::Twig::Elt::::replace XML::Twig::Elt::replace
0000s0sXML::Twig::Elt::::replace_with XML::Twig::Elt::replace_with
0000s0sXML::Twig::Elt::::reset_cond_cache XML::Twig::Elt::reset_cond_cache
0000s0sXML::Twig::Elt::::safe_print_to_file XML::Twig::Elt::safe_print_to_file
0000s0sXML::Twig::Elt::::set_asis XML::Twig::Elt::set_asis
0000s0sXML::Twig::Elt::::set_att XML::Twig::Elt::set_att
0000s0sXML::Twig::Elt::::set_cdata XML::Twig::Elt::set_cdata
0000s0sXML::Twig::Elt::::set_class XML::Twig::Elt::set_class
0000s0sXML::Twig::Elt::::set_comment XML::Twig::Elt::set_comment
0000s0sXML::Twig::Elt::::set_content XML::Twig::Elt::set_content
0000s0sXML::Twig::Elt::::set_data XML::Twig::Elt::set_data
0000s0sXML::Twig::Elt::::set_empty XML::Twig::Elt::set_empty
0000s0sXML::Twig::Elt::::set_empty_tag_style XML::Twig::Elt::set_empty_tag_style
0000s0sXML::Twig::Elt::::set_ent XML::Twig::Elt::set_ent
0000s0sXML::Twig::Elt::::set_extra_data XML::Twig::Elt::set_extra_data
0000s0sXML::Twig::Elt::::set_field XML::Twig::Elt::set_field
0000s0sXML::Twig::Elt::::set_first_child XML::Twig::Elt::set_first_child
0000s0sXML::Twig::Elt::::set_global_state XML::Twig::Elt::set_global_state
0000s0sXML::Twig::Elt::::set_id XML::Twig::Elt::set_id
0000s0sXML::Twig::Elt::::set_id_seed XML::Twig::Elt::set_id_seed
0000s0sXML::Twig::Elt::::set_indent XML::Twig::Elt::set_indent
0000s0sXML::Twig::Elt::::set_inner_html XML::Twig::Elt::set_inner_html
0000s0sXML::Twig::Elt::::set_inner_xml XML::Twig::Elt::set_inner_xml
0000s0sXML::Twig::Elt::::set_last_child XML::Twig::Elt::set_last_child
0000s0sXML::Twig::Elt::::set_next_sibling XML::Twig::Elt::set_next_sibling
0000s0sXML::Twig::Elt::::set_not_asis XML::Twig::Elt::set_not_asis
0000s0sXML::Twig::Elt::::set_not_empty XML::Twig::Elt::set_not_empty
0000s0sXML::Twig::Elt::::set_ns_as_default XML::Twig::Elt::set_ns_as_default
0000s0sXML::Twig::Elt::::set_ns_decl XML::Twig::Elt::set_ns_decl
0000s0sXML::Twig::Elt::::set_outer_xml XML::Twig::Elt::set_outer_xml
0000s0sXML::Twig::Elt::::set_parent XML::Twig::Elt::set_parent
0000s0sXML::Twig::Elt::::set_pcdata XML::Twig::Elt::set_pcdata
0000s0sXML::Twig::Elt::::set_pi XML::Twig::Elt::set_pi
0000s0sXML::Twig::Elt::::set_pretty_print XML::Twig::Elt::set_pretty_print
0000s0sXML::Twig::Elt::::set_prev_sibling XML::Twig::Elt::set_prev_sibling
0000s0sXML::Twig::Elt::::set_replaced_ents XML::Twig::Elt::set_replaced_ents
0000s0sXML::Twig::Elt::::set_tag_class XML::Twig::Elt::set_tag_class
0000s0sXML::Twig::Elt::::set_target XML::Twig::Elt::set_target
0000s0sXML::Twig::Elt::::set_text XML::Twig::Elt::set_text
0000s0sXML::Twig::Elt::::set_twig_current XML::Twig::Elt::set_twig_current
0000s0sXML::Twig::Elt::::set_wrap XML::Twig::Elt::set_wrap
0000s0sXML::Twig::Elt::::sibling XML::Twig::Elt::sibling
0000s0sXML::Twig::Elt::::sibling_text XML::Twig::Elt::sibling_text
0000s0sXML::Twig::Elt::::siblings XML::Twig::Elt::siblings
0000s0sXML::Twig::Elt::::simplify XML::Twig::Elt::simplify
0000s0sXML::Twig::Elt::::sort_children XML::Twig::Elt::sort_children
0000s0sXML::Twig::Elt::::sort_children_on_att XML::Twig::Elt::sort_children_on_att
0000s0sXML::Twig::Elt::::sort_children_on_field XML::Twig::Elt::sort_children_on_field
0000s0sXML::Twig::Elt::::sort_children_on_value XML::Twig::Elt::sort_children_on_value
0000s0sXML::Twig::Elt::::split XML::Twig::Elt::split
0000s0sXML::Twig::Elt::::split_at XML::Twig::Elt::split_at
0000s0sXML::Twig::Elt::::sprint XML::Twig::Elt::sprint
0000s0sXML::Twig::Elt::::start_tag XML::Twig::Elt::start_tag
0000s0sXML::Twig::Elt::::strip_att XML::Twig::Elt::strip_att
0000s0sXML::Twig::Elt::::subs_text XML::Twig::Elt::subs_text
0000s0sXML::Twig::Elt::::suffix XML::Twig::Elt::suffix
0000s0sXML::Twig::Elt::::tag_to_class XML::Twig::Elt::tag_to_class
0000s0sXML::Twig::Elt::::tag_to_div XML::Twig::Elt::tag_to_div
0000s0sXML::Twig::Elt::::tag_to_span XML::Twig::Elt::tag_to_span
0000s0sXML::Twig::Elt::::target XML::Twig::Elt::target
0000s0sXML::Twig::Elt::::text_only XML::Twig::Elt::text_only
0000s0sXML::Twig::Elt::::toSAX1 XML::Twig::Elt::toSAX1
0000s0sXML::Twig::Elt::::toSAX2 XML::Twig::Elt::toSAX2
0000s0sXML::Twig::Elt::::trim XML::Twig::Elt::trim
0000s0sXML::Twig::Elt::::trimmed_text XML::Twig::Elt::trimmed_text
0000s0sXML::Twig::Elt::::wrap_children XML::Twig::Elt::wrap_children
0000s0sXML::Twig::Elt::::wrap_in XML::Twig::Elt::wrap_in
0000s0sXML::Twig::Elt::::xml_string XML::Twig::Elt::xml_string
0000s0sXML::Twig::Elt::::xml_text XML::Twig::Elt::xml_text
0000s0sXML::Twig::Elt::::xml_text_only XML::Twig::Elt::xml_text_only
0000s0sXML::Twig::Elt::::xpath XML::Twig::Elt::xpath
0000s0sXML::Twig::Entity::::_dump XML::Twig::Entity::_dump
0000s0sXML::Twig::Entity::::_quoted_val XML::Twig::Entity::_quoted_val
0000s0sXML::Twig::Entity::::name XML::Twig::Entity::name
0000s0sXML::Twig::Entity::::ndata XML::Twig::Entity::ndata
0000s0sXML::Twig::Entity::::new XML::Twig::Entity::new
0000s0sXML::Twig::Entity::::param XML::Twig::Entity::param
0000s0sXML::Twig::Entity::::print XML::Twig::Entity::print
0000s0sXML::Twig::Entity::::pubid XML::Twig::Entity::pubid
0000s0sXML::Twig::Entity::::sprint XML::Twig::Entity::sprint
0000s0sXML::Twig::Entity::::sysid XML::Twig::Entity::sysid
0000s0sXML::Twig::Entity::::text XML::Twig::Entity::text
0000s0sXML::Twig::Entity::::val XML::Twig::Entity::val
0000s0sXML::Twig::Entity_list::::_add_list XML::Twig::Entity_list::_add_list
0000s0sXML::Twig::Entity_list::::add XML::Twig::Entity_list::add
0000s0sXML::Twig::Entity_list::::add_new_ent XML::Twig::Entity_list::add_new_ent
0000s0sXML::Twig::Entity_list::::delete XML::Twig::Entity_list::delete
0000s0sXML::Twig::Entity_list::::ent XML::Twig::Entity_list::ent
0000s0sXML::Twig::Entity_list::::entity_names XML::Twig::Entity_list::entity_names
0000s0sXML::Twig::Entity_list::::list XML::Twig::Entity_list::list
0000s0sXML::Twig::Entity_list::::print XML::Twig::Entity_list::print
0000s0sXML::Twig::Entity_list::::text XML::Twig::Entity_list::text
0000s0sXML::Twig::Notation::::_dump XML::Twig::Notation::_dump
0000s0sXML::Twig::Notation::::_quoted_val XML::Twig::Notation::_quoted_val
0000s0sXML::Twig::Notation::::base XML::Twig::Notation::base
0000s0sXML::Twig::Notation::::name XML::Twig::Notation::name
0000s0sXML::Twig::Notation::::new XML::Twig::Notation::new
0000s0sXML::Twig::Notation::::print XML::Twig::Notation::print
0000s0sXML::Twig::Notation::::pubid XML::Twig::Notation::pubid
0000s0sXML::Twig::Notation::::sysid XML::Twig::Notation::sysid
0000s0sXML::Twig::Notation::::text XML::Twig::Notation::text
0000s0sXML::Twig::Notation_list::::_add_listXML::Twig::Notation_list::_add_list
0000s0sXML::Twig::Notation_list::::addXML::Twig::Notation_list::add
0000s0sXML::Twig::Notation_list::::add_new_notationXML::Twig::Notation_list::add_new_notation
0000s0sXML::Twig::Notation_list::::deleteXML::Twig::Notation_list::delete
0000s0sXML::Twig::Notation_list::::listXML::Twig::Notation_list::list
0000s0sXML::Twig::Notation_list::::notationXML::Twig::Notation_list::notation
0000s0sXML::Twig::Notation_list::::notation_namesXML::Twig::Notation_list::notation_names
0000s0sXML::Twig::Notation_list::::printXML::Twig::Notation_list::print
0000s0sXML::Twig::Notation_list::::textXML::Twig::Notation_list::text
0000s0sXML::Twig::::_DTD_toSAX XML::Twig::_DTD_toSAX
0000s0sXML::Twig::::_XmlUtf8Decode XML::Twig::_XmlUtf8Decode
0000s0sXML::Twig::::__ANON__[:1183] XML::Twig::__ANON__[:1183]
0000s0sXML::Twig::::__ANON__[:1415] XML::Twig::__ANON__[:1415]
0000s0sXML::Twig::::__ANON__[:1591] XML::Twig::__ANON__[:1591]
0000s0sXML::Twig::::__ANON__[:1607] XML::Twig::__ANON__[:1607]
0000s0sXML::Twig::::__ANON__[:2115] XML::Twig::__ANON__[:2115]
0000s0sXML::Twig::::__ANON__[:278] XML::Twig::__ANON__[:278]
0000s0sXML::Twig::::__ANON__[:297] XML::Twig::__ANON__[:297]
0000s0sXML::Twig::::__ANON__[:313] XML::Twig::__ANON__[:313]
0000s0sXML::Twig::::__ANON__[:332] XML::Twig::__ANON__[:332]
0000s0sXML::Twig::::__ANON__[:3599] XML::Twig::__ANON__[:3599]
0000s0sXML::Twig::::__ANON__[:3629] XML::Twig::__ANON__[:3629]
0000s0sXML::Twig::::__ANON__[:3657] XML::Twig::__ANON__[:3657]
0000s0sXML::Twig::::__ANON__[:3856] XML::Twig::__ANON__[:3856]
0000s0sXML::Twig::::__ANON__[:4358] XML::Twig::__ANON__[:4358]
0000s0sXML::Twig::::__ANON__[:4368] XML::Twig::__ANON__[:4368]
0000s0sXML::Twig::::__ANON__[:505] XML::Twig::__ANON__[:505]
0000s0sXML::Twig::::__ANON__[:544] XML::Twig::__ANON__[:544]
0000s0sXML::Twig::::__ANON__[:814] XML::Twig::__ANON__[:814]
0000s0sXML::Twig::::_add_cpi_outside_of_root XML::Twig::_add_cpi_outside_of_root
0000s0sXML::Twig::::_allow_use XML::Twig::_allow_use
0000s0sXML::Twig::::_as_XML XML::Twig::_as_XML
0000s0sXML::Twig::::_based_filename XML::Twig::_based_filename
0000s0sXML::Twig::::_check_xml XML::Twig::_check_xml
0000s0sXML::Twig::::_children XML::Twig::_children
0000s0sXML::Twig::::_comment_elt_handler XML::Twig::_comment_elt_handler
0000s0sXML::Twig::::_comment_text_handler XML::Twig::_comment_text_handler
0000s0sXML::Twig::::_croak XML::Twig::_croak
0000s0sXML::Twig::::_disallow_use XML::Twig::_disallow_use
0000s0sXML::Twig::::_dump XML::Twig::_dump
0000s0sXML::Twig::::_encoding_filter XML::Twig::_encoding_filter
0000s0sXML::Twig::::_encoding_from_meta XML::Twig::_encoding_from_meta
0000s0sXML::Twig::::_fill_default_atts XML::Twig::_fill_default_atts
0000s0sXML::Twig::::_first_n XML::Twig::_first_n
0000s0sXML::Twig::::_fix_xml XML::Twig::_fix_xml
0000s0sXML::Twig::::_flush_toSAX XML::Twig::_flush_toSAX
0000s0sXML::Twig::::_html2xml XML::Twig::_html2xml
0000s0sXML::Twig::::_indent_xhtml XML::Twig::_indent_xhtml
0000s0sXML::Twig::::_is_fh XML::Twig::_is_fh
0000s0sXML::Twig::::_is_well_formed_xml XML::Twig::_is_well_formed_xml
0000s0sXML::Twig::::_leading_cpi XML::Twig::_leading_cpi
0000s0sXML::Twig::::_level_in_stack XML::Twig::_level_in_stack
0000s0sXML::Twig::::_output_ignored XML::Twig::_output_ignored
0000s0sXML::Twig::::_parse_as_xml_or_html XML::Twig::_parse_as_xml_or_html
0000s0sXML::Twig::::_parse_inplace XML::Twig::_parse_inplace
0000s0sXML::Twig::::_parse_predicate_in_handler XML::Twig::_parse_predicate_in_handler
0000s0sXML::Twig::::_parse_start_tag XML::Twig::_parse_start_tag
0000s0sXML::Twig::::_parseurl XML::Twig::_parseurl
0000s0sXML::Twig::::_pass_url_content XML::Twig::_pass_url_content
0000s0sXML::Twig::::_pi_elt_handlers XML::Twig::_pi_elt_handlers
0000s0sXML::Twig::::_pi_text_handler XML::Twig::_pi_text_handler
0000s0sXML::Twig::::_pretty_print_styles XML::Twig::_pretty_print_styles
0000s0sXML::Twig::::_prolog_toSAX XML::Twig::_prolog_toSAX
0000s0sXML::Twig::::_reset_twig XML::Twig::_reset_twig
0000s0sXML::Twig::::_reset_twig_after_error XML::Twig::_reset_twig_after_error
0000s0sXML::Twig::::_return_debug_handler XML::Twig::_return_debug_handler
0000s0sXML::Twig::::_set_debug_handler XML::Twig::_set_debug_handler
0000s0sXML::Twig::::_set_weakrefs XML::Twig::_set_weakrefs
0000s0sXML::Twig::::_slurp XML::Twig::_slurp
0000s0sXML::Twig::::_slurp_fh XML::Twig::_slurp_fh
0000s0sXML::Twig::::_slurp_uri XML::Twig::_slurp_uri
0000s0sXML::Twig::::_space_policy XML::Twig::_space_policy
0000s0sXML::Twig::::_this_perl XML::Twig::_this_perl
0000s0sXML::Twig::::_tidy_html XML::Twig::_tidy_html
0000s0sXML::Twig::::_toSAX XML::Twig::_toSAX
0000s0sXML::Twig::::_to_utf8 XML::Twig::_to_utf8
0000s0sXML::Twig::::_trailing_cpi XML::Twig::_trailing_cpi
0000s0sXML::Twig::::_trailing_cpi_text XML::Twig::_trailing_cpi_text
0000s0sXML::Twig::::_trigger_tdh XML::Twig::_trigger_tdh
0000s0sXML::Twig::::_twig_attlist XML::Twig::_twig_attlist
0000s0sXML::Twig::::_twig_cdataend XML::Twig::_twig_cdataend
0000s0sXML::Twig::::_twig_cdatastart XML::Twig::_twig_cdatastart
0000s0sXML::Twig::::_twig_comment XML::Twig::_twig_comment
0000s0sXML::Twig::::_twig_doctype XML::Twig::_twig_doctype
0000s0sXML::Twig::::_twig_doctype_fin_print XML::Twig::_twig_doctype_fin_print
0000s0sXML::Twig::::_twig_element XML::Twig::_twig_element
0000s0sXML::Twig::::_twig_entity XML::Twig::_twig_entity
0000s0sXML::Twig::::_twig_extern_ent XML::Twig::_twig_extern_ent
0000s0sXML::Twig::::_twig_ignore_end XML::Twig::_twig_ignore_end
0000s0sXML::Twig::::_twig_ignore_start XML::Twig::_twig_ignore_start
0000s0sXML::Twig::::_twig_insert_ent XML::Twig::_twig_insert_ent
0000s0sXML::Twig::::_twig_notation XML::Twig::_twig_notation
0000s0sXML::Twig::::_twig_pi XML::Twig::_twig_pi
0000s0sXML::Twig::::_twig_pi_check_roots XML::Twig::_twig_pi_check_roots
0000s0sXML::Twig::::_twig_pi_comment XML::Twig::_twig_pi_comment
0000s0sXML::Twig::::_twig_print XML::Twig::_twig_print
0000s0sXML::Twig::::_twig_print_check_doctype XML::Twig::_twig_print_check_doctype
0000s0sXML::Twig::::_twig_print_doctype XML::Twig::_twig_print_doctype
0000s0sXML::Twig::::_twig_print_end_original XML::Twig::_twig_print_end_original
0000s0sXML::Twig::::_twig_print_entity XML::Twig::_twig_print_entity
0000s0sXML::Twig::::_twig_print_original XML::Twig::_twig_print_original
0000s0sXML::Twig::::_twig_print_original_check_doctype XML::Twig::_twig_print_original_check_doctype
0000s0sXML::Twig::::_twig_print_original_default XML::Twig::_twig_print_original_default
0000s0sXML::Twig::::_twig_print_original_doctype XML::Twig::_twig_print_original_doctype
0000s0sXML::Twig::::_twig_stop_storing_internal_dtd XML::Twig::_twig_stop_storing_internal_dtd
0000s0sXML::Twig::::_twig_store_internal_dtd XML::Twig::_twig_store_internal_dtd
0000s0sXML::Twig::::_unescape_cdata XML::Twig::_unescape_cdata
0000s0sXML::Twig::::_use_perlio XML::Twig::_use_perlio
0000s0sXML::Twig::::_warn_debug_handler XML::Twig::_warn_debug_handler
0000s0sXML::Twig::::_weakrefs XML::Twig::_weakrefs
0000s0sXML::Twig::::_xml_escape XML::Twig::_xml_escape
0000s0sXML::Twig::::_xml_parser_encodings XML::Twig::_xml_parser_encodings
0000s0sXML::Twig::::_xmldecl_toSAX XML::Twig::_xmldecl_toSAX
0000s0sXML::Twig::::active_twig XML::Twig::active_twig
0000s0sXML::Twig::::add_options XML::Twig::add_options
0000s0sXML::Twig::::add_stylesheet XML::Twig::add_stylesheet
0000s0sXML::Twig::::att_accessors XML::Twig::att_accessors
0000s0sXML::Twig::::change_gi XML::Twig::change_gi
0000s0sXML::Twig::::child XML::Twig::child
0000s0sXML::Twig::::children XML::Twig::children
0000s0sXML::Twig::::dispose XML::Twig::dispose
0000s0sXML::Twig::::do_not_escape_gt XML::Twig::do_not_escape_gt
0000s0sXML::Twig::::doctype XML::Twig::doctype
0000s0sXML::Twig::::doctype_name XML::Twig::doctype_name
0000s0sXML::Twig::::dtd XML::Twig::dtd
0000s0sXML::Twig::::dtd_print XML::Twig::dtd_print
0000s0sXML::Twig::::dtd_text XML::Twig::dtd_text
0000s0sXML::Twig::::elt_accessors XML::Twig::elt_accessors
0000s0sXML::Twig::::elt_id XML::Twig::elt_id
0000s0sXML::Twig::::encode_convert XML::Twig::encode_convert
0000s0sXML::Twig::::encoding XML::Twig::encoding
0000s0sXML::Twig::::entity XML::Twig::entity
0000s0sXML::Twig::::entity_list XML::Twig::entity_list
0000s0sXML::Twig::::entity_names XML::Twig::entity_names
0000s0sXML::Twig::::escape_gt XML::Twig::escape_gt
0000s0sXML::Twig::::field_accessors XML::Twig::field_accessors
0000s0sXML::Twig::::findvalue XML::Twig::findvalue
0000s0sXML::Twig::::findvalues XML::Twig::findvalues
0000s0sXML::Twig::::finish XML::Twig::finish
0000s0sXML::Twig::::finish_now XML::Twig::finish_now
0000s0sXML::Twig::::finish_print XML::Twig::finish_print
0000s0sXML::Twig::::first_elt XML::Twig::first_elt
0000s0sXML::Twig::::flush XML::Twig::flush
0000s0sXML::Twig::::flush_toSAX1 XML::Twig::flush_toSAX1
0000s0sXML::Twig::::flush_toSAX2 XML::Twig::flush_toSAX2
0000s0sXML::Twig::::flush_up_to XML::Twig::flush_up_to
0000s0sXML::Twig::::getChildNodes XML::Twig::getChildNodes
0000s0sXML::Twig::::getParentNode XML::Twig::getParentNode
0000s0sXML::Twig::::getRootNode XML::Twig::getRootNode
0000s0sXML::Twig::::global_state XML::Twig::global_state
0000s0sXML::Twig::::html_encode XML::Twig::html_encode
0000s0sXML::Twig::::iconv_convert XML::Twig::iconv_convert
0000s0sXML::Twig::::ignore XML::Twig::ignore
0000s0sXML::Twig::::index XML::Twig::index
0000s0sXML::Twig::::internal_subset XML::Twig::internal_subset
0000s0sXML::Twig::::keep_atts_order XML::Twig::keep_atts_order
0000s0sXML::Twig::::last_elt XML::Twig::last_elt
0000s0sXML::Twig::::latin1 XML::Twig::latin1
0000s0sXML::Twig::::model XML::Twig::model
0000s0sXML::Twig::::next_n_elt XML::Twig::next_n_elt
0000s0sXML::Twig::::normalize XML::Twig::normalize
0000s0sXML::Twig::::notation XML::Twig::notation
0000s0sXML::Twig::::notation_list XML::Twig::notation_list
0000s0sXML::Twig::::notation_names XML::Twig::notation_names
0000s0sXML::Twig::::nparse XML::Twig::nparse
0000s0sXML::Twig::::nparse_e XML::Twig::nparse_e
0000s0sXML::Twig::::nparse_pp XML::Twig::nparse_pp
0000s0sXML::Twig::::nparse_ppe XML::Twig::nparse_ppe
0000s0sXML::Twig::::original_uri XML::Twig::original_uri
0000s0sXML::Twig::::output_encoding XML::Twig::output_encoding
0000s0sXML::Twig::::output_filter XML::Twig::output_filter
0000s0sXML::Twig::::output_text_filter XML::Twig::output_text_filter
0000s0sXML::Twig::::parse_html XML::Twig::parse_html
0000s0sXML::Twig::::parsefile XML::Twig::parsefile
0000s0sXML::Twig::::parsefile_html XML::Twig::parsefile_html
0000s0sXML::Twig::::parsefile_html_inplace XML::Twig::parsefile_html_inplace
0000s0sXML::Twig::::parsefile_inplace XML::Twig::parsefile_inplace
0000s0sXML::Twig::::parseurl XML::Twig::parseurl
0000s0sXML::Twig::::parseurl_html XML::Twig::parseurl_html
0000s0sXML::Twig::::path XML::Twig::path
0000s0sXML::Twig::::print XML::Twig::print
0000s0sXML::Twig::::print_prolog XML::Twig::print_prolog
0000s0sXML::Twig::::print_to_file XML::Twig::print_to_file
0000s0sXML::Twig::::prolog XML::Twig::prolog
0000s0sXML::Twig::::public_id XML::Twig::public_id
0000s0sXML::Twig::::purge_up_to XML::Twig::purge_up_to
0000s0sXML::Twig::::regexp2latin1 XML::Twig::regexp2latin1
0000s0sXML::Twig::::restore_global_state XML::Twig::restore_global_state
0000s0sXML::Twig::::safe_encode XML::Twig::safe_encode
0000s0sXML::Twig::::safe_encode_hex XML::Twig::safe_encode_hex
0000s0sXML::Twig::::safe_parse XML::Twig::safe_parse
0000s0sXML::Twig::::safe_parse_html XML::Twig::safe_parse_html
0000s0sXML::Twig::::safe_parsefile XML::Twig::safe_parsefile
0000s0sXML::Twig::::safe_parsefile_html XML::Twig::safe_parsefile_html
0000s0sXML::Twig::::safe_parseurl XML::Twig::safe_parseurl
0000s0sXML::Twig::::safe_parseurl_html XML::Twig::safe_parseurl_html
0000s0sXML::Twig::::safe_print_to_file XML::Twig::safe_print_to_file
0000s0sXML::Twig::::save_global_state XML::Twig::save_global_state
0000s0sXML::Twig::::setCharHandler XML::Twig::setCharHandler
0000s0sXML::Twig::::setEndTagHandler XML::Twig::setEndTagHandler
0000s0sXML::Twig::::setEndTagHandlers XML::Twig::setEndTagHandlers
0000s0sXML::Twig::::setIgnoreEltsHandler XML::Twig::setIgnoreEltsHandler
0000s0sXML::Twig::::setIgnoreEltsHandlers XML::Twig::setIgnoreEltsHandlers
0000s0sXML::Twig::::setStartTagHandler XML::Twig::setStartTagHandler
0000s0sXML::Twig::::setStartTagHandlers XML::Twig::setStartTagHandlers
0000s0sXML::Twig::::setTwigHandler XML::Twig::setTwigHandler
0000s0sXML::Twig::::set_doctype XML::Twig::set_doctype
0000s0sXML::Twig::::set_empty_tag_style XML::Twig::set_empty_tag_style
0000s0sXML::Twig::::set_encoding XML::Twig::set_encoding
0000s0sXML::Twig::::set_global_state XML::Twig::set_global_state
0000s0sXML::Twig::::set_id_seed XML::Twig::set_id_seed
0000s0sXML::Twig::::set_indent XML::Twig::set_indent
0000s0sXML::Twig::::set_input_filter XML::Twig::set_input_filter
0000s0sXML::Twig::::set_output_encoding XML::Twig::set_output_encoding
0000s0sXML::Twig::::set_pretty_print XML::Twig::set_pretty_print
0000s0sXML::Twig::::set_standalone XML::Twig::set_standalone
0000s0sXML::Twig::::set_xml_version XML::Twig::set_xml_version
0000s0sXML::Twig::::simplify XML::Twig::simplify
0000s0sXML::Twig::::sprint XML::Twig::sprint
0000s0sXML::Twig::::standalone XML::Twig::standalone
0000s0sXML::Twig::::subs_text XML::Twig::subs_text
0000s0sXML::Twig::::system_id XML::Twig::system_id
0000s0sXML::Twig::::toSAX1 XML::Twig::toSAX1
0000s0sXML::Twig::::toSAX2 XML::Twig::toSAX2
0000s0sXML::Twig::::trim XML::Twig::trim
0000s0sXML::Twig::::unicode_convert XML::Twig::unicode_convert
0000s0sXML::Twig::::xml_version XML::Twig::xml_version
0000s0sXML::Twig::::xmldecl XML::Twig::xmldecl
0000s0sXML::Twig::::xparse XML::Twig::xparse
0000s0smain::::CDATA main::CDATA
0000s0smain::::PCDATA main::PCDATA
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1217µs211µs
# spent 10µs (8+2) within Spreadsheet::ParseXLSX::BEGIN@1 which was called: # once (8µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 1
use strict;
# spent 10µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@1 # spent 2µs making 1 call to strict::import
2229µs232µs
# spent 18µs (4+14) within Spreadsheet::ParseXLSX::BEGIN@2 which was called: # once (4µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 2
use warnings; # > perl 5.5
# spent 18µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@2 # spent 14µs making 1 call to warnings::import
3
4# This is created in the caller's space
5# I realize (now!) that it's not clean, but it's been there for 10+ years...
6BEGIN
7
# spent 1µs within Spreadsheet::ParseXLSX::BEGIN@7 which was called: # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 9
{ sub ::PCDATA { '#PCDATA' } ## no critic (Subroutines::ProhibitNestedSubs);
8 sub ::CDATA { '#CDATA' } ## no critic (Subroutines::ProhibitNestedSubs);
918µs11µs}
# spent 1µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@7
10
112106µs181µs
# spent 81µs within Spreadsheet::ParseXLSX::BEGIN@11.2 which was called: # once (81µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 11
use UNIVERSAL();
# spent 81µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@11.2
12
13## if a sub returns a scalar, it better not bloody disappear in list context
14## no critic (Subroutines::ProhibitExplicitReturnUndef);
15
161300nsmy $perl_version;
17my $parser_version;
18
19######################################################################
20package XML::Twig;
21######################################################################
22
23112µsrequire 5.004;
24
25267µs2171µs
# spent 169µs (141+28) within XML::Twig::BEGIN@25 which was called: # once (141µs+28µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 25
use utf8; # > perl 5.5
# spent 169µs making 1 call to XML::Twig::BEGIN@25 # spent 2µs making 1 call to utf8::import
26
27220µs252µs
# spent 28µs (4+24) within XML::Twig::BEGIN@27 which was called: # once (4µs+24µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 27
use vars qw($VERSION @ISA %valid_option);
# spent 28µs making 1 call to XML::Twig::BEGIN@27 # spent 24µs making 1 call to vars::import
28
29215µs244µs
# spent 24µs (5+19) within XML::Twig::BEGIN@29 which was called: # once (5µs+19µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 29
use Carp;
# spent 24µs making 1 call to XML::Twig::BEGIN@29 # spent 19µs making 1 call to Exporter::import
30214µs28µs
# spent 8µs (7+700ns) within XML::Twig::BEGIN@30 which was called: # once (7µs+700ns) by Spreadsheet::ParseXLSX::BEGIN@15 at line 30
use File::Spec;
# spent 8µs making 1 call to XML::Twig::BEGIN@30 # spent 700ns making 1 call to UNIVERSAL::import
31214µs237µs
# spent 21µs (4+16) within XML::Twig::BEGIN@31 which was called: # once (4µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 31
use File::Basename;
# spent 21µs making 1 call to XML::Twig::BEGIN@31 # spent 16µs making 1 call to Exporter::import
32
33222µs216µs
# spent 10µs (4+6) within XML::Twig::BEGIN@33 which was called: # once (4µs+6µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 33
use Config; # to get perl's path name in case we need to know if perlio is available
# spent 10µs making 1 call to XML::Twig::BEGIN@33 # spent 6µs making 1 call to Config::import
34
3511µs*isa= *UNIVERSAL::isa;
36
37# flag, set to true if the weaken sub is available
382283µs223µs
# spent 14µs (4+9) within XML::Twig::BEGIN@38 which was called: # once (4µs+9µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 38
use vars qw( $weakrefs);
# spent 14µs making 1 call to XML::Twig::BEGIN@38 # spent 9µs making 1 call to vars::import
39
40# flag set to true if the version of expat seems to be 1.95.2, which has annoying bugs
41# wrt doctype handling. This is global for performance reasons.
421200nsmy $expat_1_95_2=0;
43
44# a slight non-xml mod: # is allowed as a first character
451200nsmy $REG_TAG_FIRST_LETTER;
46#$REG_TAG_FIRST_LETTER= q{(?:[^\W\d]|[:#_])}; # < perl 5.6 - does not work for leading non-ascii letters
471300ns$REG_TAG_FIRST_LETTER= q{(?:[[:alpha:]:#_])}; # >= perl 5.6
48
491200nsmy $REG_TAG_LETTER= q{(?:[\w_.-]*)};
50
51# a simple name (no colon)
521500nsmy $REG_NAME_TOKEN= qq{(?:$REG_TAG_FIRST_LETTER$REG_TAG_LETTER*)};
53
54# a tag name, possibly including namespace
551300nsmy $REG_NAME= qq{(?:(?:$REG_NAME_TOKEN:)?$REG_NAME_TOKEN)};
56
57# tag name (leading # allowed)
58# first line is for perl 5.005, second line for modern perl, that accept character classes
591200nsmy $REG_TAG_NAME=$REG_NAME;
60
61# name or wildcard (* or '') (leading # allowed)
621300nsmy $REG_NAME_W = qq{(?:$REG_NAME|[*])};
63
64# class and ids are deliberately permissive
651100nsmy $REG_NTOKEN_FIRST_LETTER;
66#$REG_NTOKEN_FIRST_LETTER= q{(?:[^\W\d]|[:_])}; # < perl 5.6 - does not work for leading non-ascii letters
671100ns$REG_NTOKEN_FIRST_LETTER= q{(?:[[:alpha:]:_])}; # >= perl 5.6
68
691200nsmy $REG_NTOKEN_LETTER= q{(?:[\w_:.-]*)};
70
711200nsmy $REG_NTOKEN= qq{(?:$REG_NTOKEN_FIRST_LETTER$REG_NTOKEN_LETTER*)};
721100nsmy $REG_CLASS = $REG_NTOKEN;
731100nsmy $REG_ID = $REG_NTOKEN;
74
75# allow <tag> #<tag> (private elt) * <tag>.<class> *.<class> <tag>#<id> *#<id>
761400nsmy $REG_TAG_PART= qq{(?:$REG_NAME_W(?:[.]$REG_CLASS|[#]$REG_ID)?|[.]$REG_CLASS)};
77
781200nsmy $REG_REGEXP = q{(?:/(?:[^\\/]|\\.)*/[eimsox]*)}; # regexp
791200nsmy $REG_MATCH = q{[!=]~}; # match (or not)
801100nsmy $REG_STRING = q{(?:"(?:[^\\"]|\\.)*"|'(?:[^\\']|\\.)*')}; # string (simple or double quoted)
811100nsmy $REG_NUMBER = q{(?:\d+(?:\.\d*)?|\.\d+)}; # number
821200nsmy $REG_VALUE = qq{(?:$REG_STRING|$REG_NUMBER)}; # value
831200nsmy $REG_OP = q{==|!=|>|<|>=|<=|eq|ne|lt|gt|le|ge|=}; # op
841100nsmy $REG_FUNCTION = q{(?:string|text)\(\s*\)};
851200nsmy $REG_STRING_ARG = qq{(?:string|text)\\(\\s*$REG_NAME_W\\s*\\)};
861100nsmy $REG_COMP = q{(?:>=|<=|!=|<|>|=)};
87
881200nsmy $REG_TAG_IN_PREDICATE= $REG_NAME_W . q{(?=\s*(?i:and\b|or\b|\]|$))};
89
90# keys in the context stack, chosen not to interfere with att names, even private (#-prefixed) ones
911100nsmy $ST_TAG = '##tag';
921100nsmy $ST_ELT = '##elt';
931100nsmy $ST_NS = '##ns' ;
94
95# used in the handler trigger code
961500nsmy $REG_NAKED_PREDICATE= qq{((?:"[^"]*"|'[^']*'|$REG_STRING_ARG|$REG_FUNCTION|\@$REG_NAME_W|$REG_MATCH\\s*$REG_REGEXP|[\\s\\d><=!()+.-]|(?i:and)|(?i:or)|$REG_TAG_IN_PREDICATE)*)};
971200nsmy $REG_PREDICATE= qq{\\[$REG_NAKED_PREDICATE\\]};
98
99# not all axis, only supported ones (in get_xpath)
10012µsmy @supported_axis= ( 'ancestor', 'ancestor-or-self', 'child', 'descendant', 'descendant-or-self',
101 'following', 'following-sibling', 'parent', 'preceding', 'preceding-sibling', 'self'
102 );
10311µsmy $REG_AXIS = "(?:" . join( '|', @supported_axis) .")";
104
105# only used in the "xpath"engine (for get_xpath/findnodes) for now
1061232µs2226µsmy $REG_PREDICATE_ALT = qr{\[(?:(?:string\(\s*\)|\@$REG_TAG_NAME)\s*$REG_MATCH\s*$REG_REGEXP\s*|[^\]]*)\]};
# spent 224µs making 1 call to CORE::regcomp # spent 2µs making 1 call to CORE::qr
107
108# used to convert XPath tests on strings to the perl equivalent
10912µsmy %PERL_ALPHA_TEST= ( '=' => ' eq ', '!=' => ' ne ', '>' => ' gt ', '>=' => ' ge ', '<' => ' lt ', '<=' => ' le ');
110
1111200nsmy( $FB_HTMLCREF, $FB_XMLCREF);
112
1131400nsmy $NO_WARNINGS= $perl_version >= 5.006 ? 'no warnings' : 'local $^W=0';
114
115# default namespaces, both ways
1161800nsmy %DEFAULT_NS= ( xml => "http://www.w3.org/XML/1998/namespace",
117 xmlns => "http://www.w3.org/2000/xmlns/",
118 );
11913µsmy %DEFAULT_URI2NS= map { $DEFAULT_NS{$_} => $_ } keys %DEFAULT_NS;
120
121# constants
1221100nsmy( $PCDATA, $CDATA, $PI, $COMMENT, $ENT, $ELT, $NOTATION, $TEXT, $ASIS, $EMPTY, $BUFSIZE);
123
124# used when an HTML doc only has a PUBLIC declaration, to generate the SYSTEM one
125# this should really be done by HTML::TreeBuilder, but as of HTML::TreeBuilder 4.2 it isn't
126# the various declarations are taken from http://en.wikipedia.org/wiki/Document_Type_Declaration
12714µsmy %HTML_DECL= ( "-//W3C//DTD HTML 4.0 Transitional//EN" => "http://www.w3.org/TR/REC-html40/loose.dtd",
128 "-//W3C//DTD HTML 4.01//EN" => "http://www.w3.org/TR/html4/strict.dtd",
129 "-//W3C//DTD HTML 4.01 Transitional//EN" => "http://www.w3.org/TR/html4/loose.dtd",
130 "-//W3C//DTD HTML 4.01 Frameset//EN" => "http://www.w3.org/TR/html4/frameset.dtd",
131 "-//W3C//DTD XHTML 1.0 Strict//EN" => "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd",
132 "-//W3C//DTD XHTML 1.0 Transitional//EN" => "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd",
133 "-//W3C//DTD XHTML 1.0 Frameset//EN" => "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd",
134 "-//W3C//DTD XHTML 1.1//EN" => "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd",
135 "-//W3C//DTD XHTML Basic 1.0//EN" => "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd",
136 "-//W3C//DTD XHTML Basic 1.1//EN" => "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd",
137 "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" => "http://www.wapforum.org/DTD/xhtml-mobile10.dtd",
138 "-//WAPFORUM//DTD XHTML Mobile 1.1//EN" => "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd",
139 "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" => "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd",
140 "-//W3C//DTD XHTML+RDFa 1.0//EN" => "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd",
141 );
142
1431100nsmy $DEFAULT_HTML_TYPE= "-//W3C//DTD HTML 4.0 Transitional//EN";
144
14512µs1800nsmy $SEP= qr/\s*(?:$|\|)/;
# spent 800ns making 1 call to CORE::qr
146
147BEGIN
148
# spent 240µs (79+162) within XML::Twig::BEGIN@148 which was called: # once (79µs+162µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 225
{
1491300ns$VERSION = '3.52';
150
1512307µs23.56ms
# spent 3.56ms (1.01+2.55) within XML::Twig::BEGIN@151 which was called: # once (1.01ms+2.55ms) by Spreadsheet::ParseXLSX::BEGIN@15 at line 151
use XML::Parser;
# spent 3.56ms making 1 call to XML::Twig::BEGIN@151 # spent 1µs making 1 call to UNIVERSAL::import
1521200nsmy $needVersion = '2.23';
15317µs1600ns($parser_version= $XML::Parser::VERSION)=~ s{_\d+}{}; # remove _<n> from version so numeric tests do not warn
# spent 600ns making 1 call to CORE::subst
15412µscroak "need at least XML::Parser version $needVersion" unless $parser_version >= $needVersion;
155
15612µs1200ns($perl_version= $])=~ s{_\d+}{};
# spent 200ns making 1 call to CORE::subst
157
1581400nsif( $perl_version >= 5.008)
159125µs { eval "use Encode qw( :all)"; ## no critic ProhibitStringyEval
# spent 11µs executing statements in string eval
# includes 7µs spent executing 1 call to 1 sub defined therein.
1601200ns $FB_XMLCREF = 0x0400; # Encode::FB_XMLCREF;
1611200ns $FB_HTMLCREF = 0x0200; # Encode::FB_HTMLCREF;
162 }
163
164# test whether we can use weak references
165# set local empty signal handler to trap error messages
16622µs{ local $SIG{__DIE__};
167112µs if( eval( 'require Scalar::Util') && defined( \&Scalar::Util::weaken))
# spent 2µs executing statements in string eval
16822µs113µs { import Scalar::Util( 'weaken'); $weakrefs= 1; }
# spent 13µs making 1 call to Exporter::import
169 elsif( eval( 'require WeakRef'))
170 { import WeakRef; $weakrefs= 1; }
171 else
172 { $weakrefs= 0; }
173}
174
17511µs1600nsimport XML::Twig::Elt;
# spent 600ns making 1 call to UNIVERSAL::import
17611µs1100nsimport XML::Twig::Entity;
# spent 100ns making 1 call to UNIVERSAL::import
17711µs1100nsimport XML::Twig::Entity_list;
# spent 100ns making 1 call to UNIVERSAL::import
178
179# used to store the gi's
180# should be set for each twig really, at least when there are several
181# the init ensures that special gi's are always the same
182
183# constants: element types
1841200ns$PCDATA = '#PCDATA';
1851100ns$CDATA = '#CDATA';
18610s$PI = '#PI';
1871100ns$COMMENT = '#COMMENT';
1881100ns$ENT = '#ENT';
18910s$NOTATION = '#NOTATION';
190
191# element classes
1921100ns$ELT = '#ELT';
1931100ns$TEXT = '#TEXT';
194
195# element properties
1961100ns$ASIS = '#ASIS';
1971100ns$EMPTY = '#EMPTY';
198
199# used in parseurl to set the buffer size to the same size as in XML::Parser::Expat
2001100ns$BUFSIZE = 32768;
201
202
203# gi => index
20412µs%XML::Twig::gi2index=( '', 0, $PCDATA => 1, $CDATA => 2, $PI => 3, $COMMENT => 4, $ENT => 5);
205# list of gi's
2061700ns@XML::Twig::index2gi=( '', $PCDATA, $CDATA, $PI, $COMMENT, $ENT);
207
208# gi's under this value are special
2091300ns$XML::Twig::SPECIAL_GI= @XML::Twig::index2gi;
210
21111µs%XML::Twig::base_ent= ( '>' => '&gt;', '<' => '&lt;', '&' => '&amp;', "'" => '&apos;', '"' => '&quot;',);
21243µsforeach my $c ( "\n", "\r", "\t") { $XML::Twig::base_ent{$c}= sprintf( "&#x%02x;", ord( $c)); }
213
214# now set some aliases
2151600ns*find_nodes = *get_xpath; # same as XML::XPath
2161200ns*findnodes = *get_xpath; # same as XML::LibXML
2171100ns*getElementsByTagName = *descendants;
2181100ns*descendants_or_self = *descendants; # valid in XML::Twig, not in XML::Twig::Elt
2191100ns*find_by_tag_name = *descendants;
2201100ns*getElementById = *elt_id;
2211100ns*getEltById = *elt_id;
2221100ns*toString = *sprint;
22312µs*create_accessors = *att_accessors;
224
2251489µs1240µs}
# spent 240µs making 1 call to XML::Twig::BEGIN@148
226
22718µs@ISA = qw(XML::Parser);
228
229# fake gi's used in twig_handlers and start_tag_handlers
2301200nsmy $ALL = '_all_'; # the associated function is always called
2311200nsmy $DEFAULT= '_default_'; # the function is called if no other handler has been
232
233# some defaults
2341100nsmy $COMMENTS_DEFAULT= 'keep';
2351200nsmy $PI_DEFAULT = 'keep';
236
237
238# handlers used in regular mode
23914µsmy %twig_handlers=( Start => \&_twig_start,
240 End => \&_twig_end,
241 Char => \&_twig_char,
242 Entity => \&_twig_entity,
243 Notation => \&_twig_notation,
244 XMLDecl => \&_twig_xmldecl,
245 Doctype => \&_twig_doctype,
246 Element => \&_twig_element,
247 Attlist => \&_twig_attlist,
248 CdataStart => \&_twig_cdatastart,
249 CdataEnd => \&_twig_cdataend,
250 Proc => \&_twig_pi,
251 Comment => \&_twig_comment,
252 Default => \&_twig_default,
253 ExternEnt => \&_twig_extern_ent,
254 );
255
256# handlers used when twig_roots is used and we are outside of the roots
257my %twig_handlers_roots=
258 ( Start => \&_twig_start_check_roots,
259 End => \&_twig_end_check_roots,
260 Doctype => \&_twig_doctype,
261 Char => undef, Entity => undef, XMLDecl => \&_twig_xmldecl,
262 Element => undef, Attlist => undef, CdataStart => undef,
263 CdataEnd => undef, Proc => undef, Comment => undef,
264 Proc => \&_twig_pi_check_roots,
26513µs
# spent 2µs within XML::Twig::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:265] which was called: # once (2µs+0s) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm
Default => sub {}, # hack needed for XML::Parser 2.27
26614µs ExternEnt => \&_twig_extern_ent,
267 );
268
269# handlers used when twig_roots and print_outside_roots are used and we are
270# outside of the roots
271my %twig_handlers_roots_print_2_30=
272 ( Start => \&_twig_start_check_roots,
273 End => \&_twig_end_check_roots,
274 Char => \&_twig_print,
275 Entity => \&_twig_print_entity,
276 ExternEnt => \&_twig_print_entity,
277 DoctypeFin => \&_twig_doctype_fin_print,
278 XMLDecl => sub { _twig_xmldecl( @_); _twig_print( @_); },
27914µs Doctype => \&_twig_print_doctype, # because recognized_string is broken here
280 # Element => \&_twig_print, Attlist => \&_twig_print,
281 CdataStart => \&_twig_print, CdataEnd => \&_twig_print,
282 Proc => \&_twig_pi_check_roots, Comment => \&_twig_print,
283 Default => \&_twig_print_check_doctype,
284 ExternEnt => \&_twig_extern_ent,
285 );
286
287# handlers used when twig_roots, print_outside_roots and keep_encoding are used
288# and we are outside of the roots
289my %twig_handlers_roots_print_original_2_30=
290 ( Start => \&_twig_start_check_roots,
291 End => \&_twig_end_check_roots,
292 Char => \&_twig_print_original,
293 # I have no idea why I should not be using this handler!
294 Entity => \&_twig_print_entity,
295 ExternEnt => \&_twig_print_entity,
296 DoctypeFin => \&_twig_doctype_fin_print,
297 XMLDecl => sub { _twig_xmldecl( @_); _twig_print_original( @_) },
29813µs Doctype => \&_twig_print_original_doctype, # because original_string is broken here
299 Element => \&_twig_print_original, Attlist => \&_twig_print_original,
300 CdataStart => \&_twig_print_original, CdataEnd => \&_twig_print_original,
301 Proc => \&_twig_pi_check_roots, Comment => \&_twig_print_original,
302 Default => \&_twig_print_original_check_doctype,
303 );
304
305# handlers used when twig_roots and print_outside_roots are used and we are
306# outside of the roots
307my %twig_handlers_roots_print_2_27=
308 ( Start => \&_twig_start_check_roots,
309 End => \&_twig_end_check_roots,
310 Char => \&_twig_print,
311 # if the Entity handler is set then it prints the entity declaration
312 # before the entire internal subset (including the declaration!) is output
313 Entity => sub {},
31412µs XMLDecl => \&_twig_print, Doctype => \&_twig_print,
315 CdataStart => \&_twig_print, CdataEnd => \&_twig_print,
316 Proc => \&_twig_pi_check_roots, Comment => \&_twig_print,
317 Default => \&_twig_print,
318 ExternEnt => \&_twig_extern_ent,
319 );
320
321# handlers used when twig_roots, print_outside_roots and keep_encoding are used
322# and we are outside of the roots
323my %twig_handlers_roots_print_original_2_27=
324 ( Start => \&_twig_start_check_roots,
325 End => \&_twig_end_check_roots,
326 Char => \&_twig_print_original,
327 # for some reason original_string is wrong here
328 # this can be a problem if the doctype includes non ascii characters
329 XMLDecl => \&_twig_print, Doctype => \&_twig_print,
330 # if the Entity handler is set then it prints the entity declaration
331 # before the entire internal subset (including the declaration!) is output
332 Entity => sub {},
333 #Element => undef, Attlist => undef,
33412µs CdataStart => \&_twig_print_original, CdataEnd => \&_twig_print_original,
335 Proc => \&_twig_pi_check_roots, Comment => \&_twig_print_original,
336 Default => \&_twig_print, # _twig_print_original does not work
337 ExternEnt => \&_twig_extern_ent,
338 );
339
340
34112µsmy %twig_handlers_roots_print= $parser_version > 2.27
342 ? %twig_handlers_roots_print_2_30
343 : %twig_handlers_roots_print_2_27;
34412µsmy %twig_handlers_roots_print_original= $parser_version > 2.27
345 ? %twig_handlers_roots_print_original_2_30
346 : %twig_handlers_roots_print_original_2_27;
347
348
349# handlers used when the finish_print method has been called
35012µsmy %twig_handlers_finish_print=
351 ( Start => \&_twig_print,
352 End => \&_twig_print, Char => \&_twig_print,
353 Entity => \&_twig_print, XMLDecl => \&_twig_print,
354 Doctype => \&_twig_print, Element => \&_twig_print,
355 Attlist => \&_twig_print, CdataStart => \&_twig_print,
356 CdataEnd => \&_twig_print, Proc => \&_twig_print,
357 Comment => \&_twig_print, Default => \&_twig_print,
358 ExternEnt => \&_twig_extern_ent,
359 );
360
361# handlers used when the finish_print method has been called and the keep_encoding
362# option is used
36311µsmy %twig_handlers_finish_print_original=
364 ( Start => \&_twig_print_original, End => \&_twig_print_end_original,
365 Char => \&_twig_print_original, Entity => \&_twig_print_original,
366 XMLDecl => \&_twig_print_original, Doctype => \&_twig_print_original,
367 Element => \&_twig_print_original, Attlist => \&_twig_print_original,
368 CdataStart => \&_twig_print_original, CdataEnd => \&_twig_print_original,
369 Proc => \&_twig_print_original, Comment => \&_twig_print_original,
370 Default => \&_twig_print_original,
371 );
372
373# handlers used within ignored elements
37411µsmy %twig_handlers_ignore=
375 ( Start => \&_twig_ignore_start,
376 End => \&_twig_ignore_end,
377 Char => undef, Entity => undef, XMLDecl => undef,
378 Doctype => undef, Element => undef, Attlist => undef,
379 CdataStart => undef, CdataEnd => undef, Proc => undef,
380 Comment => undef, Default => undef,
381 ExternEnt => undef,
382 );
383
384
385# those handlers are only used if the entities are NOT to be expanded
3861400nsmy %twig_noexpand_handlers= ( ExternEnt => undef, Default => \&_twig_default );
387
3881100nsmy @saved_default_handler;
389
3901100nsmy $ID= 'id'; # default value, set by the Id argument
3911200nsmy $css_sel=0; # set through the css_sel option to allow .class selectors in triggers
392
393# all allowed options
394121µs%valid_option=
395 ( # XML::Twig options
396 TwigHandlers => 1, Id => 1,
397 TwigRoots => 1, TwigPrintOutsideRoots => 1,
398 StartTagHandlers => 1, EndTagHandlers => 1,
399 ForceEndTagHandlersUsage => 1,
400 DoNotChainHandlers => 1,
401 IgnoreElts => 1,
402 Index => 1,
403 AttAccessors => 1,
404 EltAccessors => 1,
405 FieldAccessors => 1,
406 CharHandler => 1,
407 TopDownHandlers => 1,
408 KeepEncoding => 1, DoNotEscapeAmpInAtts => 1,
409 ParseStartTag => 1, KeepAttsOrder => 1,
410 LoadDTD => 1, DTDHandler => 1, DTDBase => 1, NoXxe => 1,
411 DoNotOutputDTD => 1, NoProlog => 1,
412 ExpandExternalEnts => 1,
413 DiscardSpaces => 1, KeepSpaces => 1, DiscardAllSpaces => 1,
414 DiscardSpacesIn => 1, KeepSpacesIn => 1,
415 PrettyPrint => 1, EmptyTags => 1,
416 EscapeGt => 1,
417 Quote => 1,
418 Comments => 1, Pi => 1,
419 OutputFilter => 1, InputFilter => 1,
420 OutputTextFilter => 1,
421 OutputEncoding => 1,
422 RemoveCdata => 1,
423 EltClass => 1,
424 MapXmlns => 1, KeepOriginalPrefix => 1,
425 SkipMissingEnts => 1,
426 # XML::Parser options
427 ErrorContext => 1, ProtocolEncoding => 1,
428 Namespaces => 1, NoExpand => 1,
429 Stream_Delimiter => 1, ParseParamEnt => 1,
430 NoLWP => 1, Non_Expat_Options => 1,
431 Xmlns => 1, CssSel => 1,
432 UseTidy => 1, TidyOptions => 1,
433 OutputHtmlDoctype => 1,
434 );
435
4361100nsmy $active_twig; # last active twig,for XML::Twig::s
437
438# predefined input and output filters
43921.47ms234µs
# spent 20µs (7+13) within XML::Twig::BEGIN@439 which was called: # once (7µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 439
use vars qw( %filter);
# spent 20µs making 1 call to XML::Twig::BEGIN@439 # spent 13µs making 1 call to vars::import
4401900ns%filter= ( html => \&html_encode,
441 safe => \&safe_encode,
442 safe_hex => \&safe_encode_hex,
443 );
444
445
446# trigger types (used to sort them)
4471600nsmy ($LEVEL_TRIGGER, $REGEXP_TRIGGER, $XPATH_TRIGGER)=(1..3);
448
449sub new
45078µs
# spent 12.0ms (392µs+11.6) within XML::Twig::new which was called 7 times, avg 1.71ms/call: # 7 times (392µs+11.6ms) by Spreadsheet::ParseXLSX::_new_twig at line 1177 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 1.71ms/call
{ my ($class, %args) = @_;
4517800ns my $handlers;
452
453 # change all nice_perlish_names into nicePerlishNames
454714µs763µs %args= _normalize_args( %args);
# spent 63µs making 7 calls to XML::Twig::_normalize_args, avg 9µs/call
455
456 # check options
45777µs unless( $args{MoreOptions})
458 { foreach my $arg (keys %args)
459238µs { carp "invalid option $arg" unless $valid_option{$arg}; }
460 }
461
462 # a twig is really an XML::Parser
463 # my $self= XML::Parser->new(%args);
4647600ns my $self;
465713µs782µs $self= XML::Parser->new(%args);
# spent 82µs making 7 calls to XML::Parser::new, avg 12µs/call
466
46772µs bless $self, $class;
468
46973µs $self->{_twig_context_stack}= [];
470
471 # allow tag.class selectors in handler triggers
47272µs $css_sel= $args{CssSel} || 0;
473
474
47572µs if( exists $args{TwigHandlers})
4761400ns { $handlers= $args{TwigHandlers};
47712µs13.81ms $self->setTwigHandlers( $handlers);
# spent 3.81ms making 1 call to XML::Twig::setTwigHandlers
4781500ns delete $args{TwigHandlers};
479 }
480
481 # take care of twig-specific arguments
48271µs if( exists $args{StartTagHandlers})
483 { $self->setStartTagHandlers( $args{StartTagHandlers});
484 delete $args{StartTagHandlers};
485 }
486
48771µs if( exists $args{DoNotChainHandlers})
488 { $self->{twig_do_not_chain_handlers}= $args{DoNotChainHandlers}; }
489
49071µs if( exists $args{IgnoreElts})
491 { # change array to hash so you can write ignore_elts => [ qw(foo bar baz)]
492 if( isa( $args{IgnoreElts}, 'ARRAY')) { $args{IgnoreElts}= { map { $_ => 1 } @{$args{IgnoreElts}} }; }
493 $self->setIgnoreEltsHandlers( $args{IgnoreElts});
494 delete $args{IgnoreElts};
495 }
496
49771µs if( exists $args{Index})
498 { my $index= $args{Index};
499 # we really want a hash name => path, we turn an array into a hash if necessary
500 if( ref( $index) eq 'ARRAY')
501 { my %index= map { $_ => $_ } @$index;
502 $index= \%index;
503 }
504 while( my( $name, $exp)= each %$index)
505 { $self->setTwigHandler( $exp, sub { push @{$_[0]->{_twig_index}->{$name}}, $_; 1; }); }
506 }
507
50875µs $self->{twig_elt_class}= $args{EltClass} || 'XML::Twig::Elt';
50971µs if( defined( $args{EltClass}) && $args{EltClass} ne 'XML::Twig::Elt') { $self->{twig_alt_elt_class}=1; }
51071µs if( exists( $args{EltClass})) { delete $args{EltClass}; }
511
51272µs if( exists( $args{MapXmlns}))
51373µs { $self->{twig_map_xmlns}= $args{MapXmlns};
51472µs $self->{Namespaces}=1;
51572µs delete $args{MapXmlns};
516 }
517
51871µs if( exists( $args{KeepOriginalPrefix}))
51972µs { $self->{twig_keep_original_prefix}= $args{KeepOriginalPrefix};
5207800ns delete $args{KeepOriginalPrefix};
521 }
522
52372µs $self->{twig_dtd_handler}= $args{DTDHandler};
52471µs delete $args{DTDHandler};
525
52672µs if( $args{ExpandExternalEnts})
527 { $self->set_expand_external_entities( 1);
528 $self->{twig_expand_external_ents}= $args{ExpandExternalEnts};
529 $self->{twig_read_external_dtd}= 1; # implied by ExpandExternalEnts
530 if( $args{ExpandExternalEnts} == -1)
531 { $self->{twig_extern_ent_nofail}= 1;
532 $self->setHandlers( ExternEnt => \&_twig_extern_ent_nofail);
533 }
534 delete $args{LoadDTD};
535 delete $args{ExpandExternalEnts};
536 }
537 else
53877µs720µs { $self->set_expand_external_entities( 0); }
# spent 20µs making 7 calls to XML::Twig::set_expand_external_entities, avg 3µs/call
539
54079µs72.49ms if( !$args{NoLWP} && ! _use( 'URI') && ! _use( 'URI::File') && ! _use( 'LWP'))
# spent 2.49ms making 7 calls to XML::Twig::_use, avg 356µs/call
541 { $self->{twig_ext_ent_handler}= \&XML::Parser::initial_ext_ent_handler }
542 elsif( $args{NoXxe})
543 { $self->{twig_ext_ent_handler}=
544711µs sub { my($xp, $base, $path) = @_; $xp->{ErrorMessage}.= "cannot use entities in document when the no_xxe option is on"; return undef; };
545 }
546 else
547 { $self->{twig_ext_ent_handler}= \&XML::Parser::file_ext_ent_handler }
548
54972µs if( $args{DoNotEscapeAmpInAtts})
550 { $self->set_do_not_escape_amp_in_atts( 1);
551 $self->{twig_do_not_escape_amp_in_atts}=1;
552 }
553 else
55475µs717µs { $self->set_do_not_escape_amp_in_atts( 0);
# spent 17µs making 7 calls to XML::Twig::set_do_not_escape_amp_in_atts, avg 2µs/call
55575µs $self->{twig_do_not_escape_amp_in_atts}=0;
556 }
557
558 # deal with TwigRoots argument, a hash of elements for which
559 # subtrees will be built (and associated handlers)
560
56172µs if( $args{TwigRoots})
56212µs14.78ms { $self->setTwigRoots( $args{TwigRoots});
# spent 4.78ms making 1 call to XML::Twig::setTwigRoots
5631500ns delete $args{TwigRoots};
564 }
565
56671µs if( $args{EndTagHandlers})
567 { unless ($self->{twig_roots} || $args{ForceEndTagHandlersUsage})
568 { croak "you should not use EndTagHandlers without TwigRoots\n",
569 "if you want to use it anyway, normally because you have ",
570 "a start_tag_handlers that calls 'ignore' and you want to ",
571 "call an ent_tag_handlers at the end of the element, then ",
572 "pass 'force_end_tag_handlers_usage => 1' as an argument ",
573 "to new";
574 }
575
576 $self->setEndTagHandlers( $args{EndTagHandlers});
577 delete $args{EndTagHandlers};
578 }
579
58071µs if( $args{TwigPrintOutsideRoots})
581 { croak "cannot use twig_print_outside_roots without twig_roots"
582 unless( $self->{twig_roots});
583 # if the arg is a filehandle then store it
584 if( _is_fh( $args{TwigPrintOutsideRoots}) )
585 { $self->{twig_output_fh}= $args{TwigPrintOutsideRoots}; }
586 $self->{twig_default_print}= $args{TwigPrintOutsideRoots};
587 }
588
589 # space policy
59071µs if( $args{KeepSpaces})
591 { croak "cannot use both keep_spaces and discard_spaces" if( $args{DiscardSpaces});
592 croak "cannot use both keep_spaces and discard_all_spaces" if( $args{DiscardAllSpaces});
593 croak "cannot use both keep_spaces and keep_spaces_in" if( $args{KeepSpacesIn});
594 $self->{twig_keep_spaces}=1;
595 delete $args{KeepSpaces};
596 }
59771µs if( $args{DiscardSpaces})
598 {
599 croak "cannot use both discard_spaces and keep_spaces_in" if( $args{KeepSpacesIn});
600 croak "cannot use both discard_spaces and discard_all_spaces" if( $args{DiscardAllSpaces});
601 croak "cannot use both discard_spaces and discard_spaces_in" if( $args{DiscardSpacesIn});
602 $self->{twig_discard_spaces}=1;
603 delete $args{DiscardSpaces};
604 }
60571µs if( $args{KeepSpacesIn})
606 { croak "cannot use both keep_spaces_in and discard_spaces_in" if( $args{DiscardSpacesIn});
607 croak "cannot use both keep_spaces_in and discard_all_spaces" if( $args{DiscardAllSpaces});
608 $self->{twig_discard_spaces}=1;
609 $self->{twig_keep_spaces_in}={};
610 my @tags= @{$args{KeepSpacesIn}};
611 foreach my $tag (@tags) { $self->{twig_keep_spaces_in}->{$tag}=1; }
612 delete $args{KeepSpacesIn};
613 }
614
61571µs if( $args{DiscardAllSpaces})
616 {
617 croak "cannot use both discard_all_spaces and discard_spaces_in" if( $args{DiscardSpacesIn});
618 $self->{twig_discard_all_spaces}=1;
619 delete $args{DiscardAllSpaces};
620 }
621
62271µs if( $args{DiscardSpacesIn})
623 { $self->{twig_keep_spaces}=1;
624 $self->{twig_discard_spaces_in}={};
625 my @tags= @{$args{DiscardSpacesIn}};
626 foreach my $tag (@tags) { $self->{twig_discard_spaces_in}->{$tag}=1; }
627 delete $args{DiscardSpacesIn};
628 }
629 # discard spaces by default
63076µs $self->{twig_discard_spaces}= 1 unless( $self->{twig_keep_spaces});
631
63273µs $args{Comments}||= $COMMENTS_DEFAULT;
63377µs if( $args{Comments} eq 'drop') { $self->{twig_keep_comments}= 0; }
634 elsif( $args{Comments} eq 'keep') { $self->{twig_keep_comments}= 1; }
635 elsif( $args{Comments} eq 'process') { $self->{twig_process_comments}= 1; }
636 else { croak "wrong value for comments argument: '$args{Comments}' (should be 'drop', 'keep' or 'process')"; }
63772µs delete $args{Comments};
638
63973µs $args{Pi}||= $PI_DEFAULT;
64074µs if( $args{Pi} eq 'drop') { $self->{twig_keep_pi}= 0; }
641 elsif( $args{Pi} eq 'keep') { $self->{twig_keep_pi}= 1; }
642 elsif( $args{Pi} eq 'process') { $self->{twig_process_pi}= 1; }
643 else { croak "wrong value for pi argument: '$args{Pi}' (should be 'drop', 'keep' or 'process')"; }
64471µs delete $args{Pi};
645
64672µs if( $args{KeepEncoding})
647 {
648 # set it in XML::Twig::Elt so print functions know what to do
649 $self->set_keep_encoding( 1);
650 $self->{parse_start_tag}= $args{ParseStartTag} || \&_parse_start_tag;
651 delete $args{ParseStartTag} if defined( $args{ParseStartTag}) ;
652 delete $args{KeepEncoding};
653 }
654 else
65575µs726µs { $self->set_keep_encoding( 0);
# spent 26µs making 7 calls to XML::Twig::set_keep_encoding, avg 4µs/call
65672µs if( $args{ParseStartTag})
657 { $self->{parse_start_tag}= $args{ParseStartTag}; }
658 else
65971µs { delete $self->{parse_start_tag}; }
66071µs delete $args{ParseStartTag};
661 }
662
66372µs if( $args{OutputFilter})
664 { $self->set_output_filter( $args{OutputFilter});
665 delete $args{OutputFilter};
666 }
667 else
66875µs734µs { $self->set_output_filter( 0); }
# spent 34µs making 7 calls to XML::Twig::set_output_filter, avg 5µs/call
669
67071µs if( $args{RemoveCdata})
671 { $self->set_remove_cdata( $args{RemoveCdata});
672 delete $args{RemoveCdata};
673 }
674 else
67574µs714µs { $self->set_remove_cdata( 0); }
# spent 14µs making 7 calls to XML::Twig::set_remove_cdata, avg 2µs/call
676
67771µs if( $args{OutputTextFilter})
678 { $self->set_output_text_filter( $args{OutputTextFilter});
679 delete $args{OutputTextFilter};
680 }
681 else
68275µs728µs { $self->set_output_text_filter( 0); }
# spent 28µs making 7 calls to XML::Twig::set_output_text_filter, avg 4µs/call
683
68471µs if( $args{KeepAttsOrder})
685 { $self->{keep_atts_order}= $args{KeepAttsOrder};
686 if( _use( 'Tie::IxHash'))
687 { $self->set_keep_atts_order( $self->{keep_atts_order}); }
688 else
689 { croak "Tie::IxHash not available, option keep_atts_order not allowed"; }
690 }
691 else
69275µs717µs { $self->set_keep_atts_order( 0); }
# spent 17µs making 7 calls to XML::Twig::set_keep_atts_order, avg 2µs/call
693
694
69571µs if( $args{PrettyPrint}) { $self->set_pretty_print( $args{PrettyPrint}); }
6967900ns if( $args{EscapeGt}) { $self->escape_gt( $args{EscapeGt}); }
69771µs if( $args{EmptyTags}) { $self->set_empty_tag_style( $args{EmptyTags}) }
698
69971µs if( exists $args{Id}) { $ID= $args{Id}; delete $args{ID}; }
70071µs if( $args{NoProlog}) { $self->{no_prolog}= 1; delete $args{NoProlog}; }
7017700ns if( $args{DoNotOutputDTD}) { $self->{no_dtd_output}= 1; delete $args{DoNotOutputDTD}; }
7027900ns if( $args{LoadDTD}) { $self->{twig_read_external_dtd}= 1; delete $args{LoadDTD}; }
7037900ns if( $args{CharHandler}) { $self->setCharHandler( $args{CharHandler}); delete $args{CharHandler}; }
704
70571µs if( $args{InputFilter}) { $self->set_input_filter( $args{InputFilter}); delete $args{InputFilter}; }
7067800ns if( $args{NoExpand}) { $self->setHandlers( %twig_noexpand_handlers); $self->{twig_no_expand}=1; }
70772µs if( my $output_encoding= $args{OutputEncoding}) { $self->set_output_encoding( $output_encoding); delete $args{OutputFilter}; }
708
70971µs if( my $tdh= $args{TopDownHandlers}) { $self->{twig_tdh}=1; delete $args{TopDownHandlers}; }
710
71171µs if( my $acc_a= $args{AttAccessors}) { $self->att_accessors( @$acc_a); }
7127900ns if( my $acc_e= $args{EltAccessors}) { $self->elt_accessors( isa( $acc_e, 'ARRAY') ? @$acc_e : $acc_e); }
7137800ns if( my $acc_f= $args{FieldAccessors}) { $self->field_accessors( isa( $acc_f, 'ARRAY') ? @$acc_f : $acc_f); }
714
7157800ns if( $args{UseTidy}) { $self->{use_tidy}= 1; }
71673µs $self->{tidy_options}= $args{TidyOptions} || {};
717
7187800ns if( $args{OutputHtmlDoctype}) { $self->{html_doctype}= 1; }
719
72076µs722µs $self->set_quote( $args{Quote} || 'double');
# spent 22µs making 7 calls to XML::Twig::set_quote, avg 3µs/call
721
722 # set handlers
72374µs if( $self->{twig_roots})
724 { if( $self->{twig_default_print})
725 { if( $self->{twig_keep_encoding})
726 { $self->setHandlers( %twig_handlers_roots_print_original); }
727 else
728 { $self->setHandlers( %twig_handlers_roots_print); }
729 }
730 else
73112µs116µs { $self->setHandlers( %twig_handlers_roots); }
# spent 16µs making 1 call to XML::Parser::setHandlers
732 }
733 else
734611µs6104µs { $self->setHandlers( %twig_handlers); }
# spent 104µs making 6 calls to XML::Parser::setHandlers, avg 17µs/call
735
736 # XML::Parser::Expat does not like these handler to be set. So in order to
737 # use the various sets of handlers on XML::Parser or XML::Parser::Expat
738 # objects when needed, these ones have to be set only once, here, at
739 # XML::Parser level
74077µs722µs $self->setHandlers( Init => \&_twig_init, Final => \&_twig_final);
# spent 22µs making 7 calls to XML::Parser::setHandlers, avg 3µs/call
741
742720µs713µs $self->{twig_entity_list}= XML::Twig::Entity_list->new;
# spent 13µs making 7 calls to XML::Twig::Entity_list::new, avg 2µs/call
743713µs710µs $self->{twig_notation_list}= XML::Twig::Notation_list->new;
# spent 10µs making 7 calls to XML::Twig::Notation_list::new, avg 1µs/call
744
74572µs $self->{twig_id}= $ID;
74672µs $self->{twig_stored_spaces}='';
747
74872µs $self->{twig_autoflush}= 1; # auto flush by default
749
75072µs $self->{twig}= $self;
751713µs74µs if( $weakrefs) { weaken( $self->{twig}); }
# spent 4µs making 7 calls to Scalar::Util::weaken, avg 629ns/call
752
753723µs return $self;
754 }
755
756sub parse
757
# spent 70.4s (48µs+70.4) within XML::Twig::parse which was called 7 times, avg 10.1s/call: # 5 times (34µs+46.3ms) by Spreadsheet::ParseXLSX::_parse_xml at line 1033 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 9.28ms/call # once (8µs+70.4s) by Spreadsheet::ParseXLSX::_parse_sheet at line 447 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (6µs+7.19ms) by Spreadsheet::ParseXLSX::_parse_shared_strings at line 658 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
{
75871µs my $t= shift;
759 # if called as a class method, calls nparse, which creates the twig then parses it
760714µs74µs if( !ref( $t) || !isa( $t, 'XML::Twig')) { return $t->nparse( @_); }
# spent 4µs making 7 calls to UNIVERSAL::isa, avg 643ns/call
761
762 # requires 5.006 at least (or the ${^UNICODE} causes a problem) # > perl 5.5
763 # trap underlying bug in IO::Handle (see RT #17500) # > perl 5.5
764 # croak if perl 5.8+, -CD (or PERL_UNICODE set to D) and parsing a pipe # > perl 5.5
76575µs if( $perl_version>=5.008 && ${^UNICODE} && (${^UNICODE} & 24) && isa( $_[0], 'GLOB') && -p $_[0] ) # > perl 5.5
766 { croak "cannot parse the output of a pipe when perl is set to use the UTF8 perlIO layer\n" # > perl 5.5
767 . "set the environment variable PERL_UNICODE or use the -C option (see perldoc perlrun)\n" # > perl 5.5
768 . "not to include 'D'"; # > perl 5.5
769 } # > perl 5.5
7701413µs770.4s $t= eval { $t->SUPER::parse( @_); };
# spent 70.4s making 7 calls to XML::Parser::parse, avg 10.1s/call
771
77273µs if( !$t
773 && $@=~m{(syntax error at line 1, column 0, byte 0|not well-formed \(invalid token\) at line 1, column 1, byte 1)}
774 && -f $_[0]
775 && ( ! ref( $_[0]) || ref( $_[0])) ne 'GLOB' # -f works on a filehandle, so this make sure $_[0] is a real file
776 )
777 { croak "you seem to have used the parse method on a filename ($_[0]), you probably want parsefile instead"; }
778718µs778µs return _checked_parse_result( $t, $@);
# spent 78µs making 7 calls to XML::Twig::_checked_parse_result, avg 11µs/call
779 }
780
781sub parsefile
782 { my $t= shift;
783 if( -f $_[0] && ! -s $_[0]) { return _checked_parse_result( undef, "empty file '$_[0]'"); }
784 $t= eval { $t->SUPER::parsefile( @_); };
785 return _checked_parse_result( $t, $@);
786 }
787
788sub _checked_parse_result
78972µs
# spent 78µs (17+61) within XML::Twig::_checked_parse_result which was called 7 times, avg 11µs/call: # 7 times (17µs+61µs) by XML::Twig::parse at line 778, avg 11µs/call
{ my( $t, $returned)= @_;
79071µs if( !$t)
791 { if( isa( $returned, 'XML::Twig') && $returned->{twig_finish_now})
792 { $t= $returned;
793 delete $t->{twig_finish_now};
794 return $t->_twig_final;
795 }
796 else
797 { _croak( $returned, 0); }
798 }
799
80074µs $active_twig= $t;
80177µs161µs return $t;
# spent 61µs making 1 call to XML::Twig::DESTROY
802 }
803
804sub active_twig { return $active_twig; }
805
806sub finish_now
807 { my $t= shift;
808 $t->{twig_finish_now}=1;
809 # XML::Parser 2.43 changed xpcroak in a way that caused test failures for XML::Twig
810 # the change was reverted in 2.44, but this is here to ensure that tests pass with 2.43
811 if( $XML::Parser::VERSION == 2.43)
81221.82ms230µs
# spent 18µs (5+13) within XML::Twig::BEGIN@812 which was called: # once (5µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 812
{ no warnings;
# spent 18µs making 1 call to XML::Twig::BEGIN@812 # spent 12µs making 1 call to warnings::unimport
813 $t->parser->{twig_error}= $t;
814 *XML::Parser::Expat::xpcroak= sub { die $_[0]->{twig_error}; };
815 die $t;
816 }
817 else
818 { die $t; }
819 }
820
821
822sub parsefile_inplace { shift->_parse_inplace( parsefile => @_); }
823sub parsefile_html_inplace { shift->_parse_inplace( parsefile_html => @_); }
824
825sub _parse_inplace
826 { my( $t, $method, $file, $suffix)= @_;
827 _use( 'File::Temp') || croak "need File::Temp to use inplace methods\n";
828 _use( 'File::Basename');
829
830
831 my $tmpdir= dirname( $file);
832 my( $tmpfh, $tmpfile)= File::Temp::tempfile( DIR => $tmpdir);
833 my $original_fh= select $tmpfh;
834
835 # we can only use binmode :utf8 if perl was compiled with useperlio
836 # might be a problem if keep_encoding used but the file is already in utf8
837 if( $perl_version > 5.006 && !$t->{twig_keep_encoding} && _use_perlio()) { binmode( $tmpfh, ":utf8" ); }
838
839 $t->$method( $file);
840
841 select $original_fh;
842 close $tmpfh;
843 my $mode= (stat( $file))[2] & oct(7777);
844 chmod $mode, $tmpfile or croak "cannot change temp file mode to $mode: $!";
845
846 if( $suffix)
847 { my $backup;
848 if( $suffix=~ m{\*}) { ($backup = $suffix) =~ s/\*/$file/g; }
849 else { $backup= $file . $suffix; }
850
851 rename( $file, $backup) or croak "cannot backup initial file ($file) to $backup: $!";
852 }
853 rename( $tmpfile, $file) or croak "cannot rename temp file ($tmpfile) to initial file ($file): $!";
854
855 return $t;
856 }
857
858
859sub parseurl
860 { my $t= shift;
861 $t->_parseurl( 0, @_);
862 }
863
864sub safe_parseurl
865 { my $t= shift;
866 $t->_parseurl( 1, @_);
867 }
868
869sub safe_parsefile_html
870 { my $t= shift;
871 eval { $t->parsefile_html( @_); };
872 return $@ ? $t->_reset_twig_after_error : $t;
873 }
874
875sub safe_parseurl_html
876 { my $t= shift;
877 _use( 'LWP::Simple') or croak "missing LWP::Simple";
878 eval { $t->parse_html( LWP::Simple::get( shift()), @_); } ;
879 return $@ ? $t->_reset_twig_after_error : $t;
880 }
881
882sub parseurl_html
883 { my $t= shift;
884 _use( 'LWP::Simple') or croak "missing LWP::Simple";
885 $t->parse_html( LWP::Simple::get( shift()), @_);
886 }
887
888
889# uses eval to catch the parser's death
890sub safe_parse_html
891 { my $t= shift;
892 eval { $t->parse_html( @_); } ;
893 return $@ ? $t->_reset_twig_after_error : $t;
894 }
895
896sub parsefile_html
897 { my $t= shift;
898 my $file= shift;
899 my $indent= $t->{ErrorContext} ? 1 : 0;
900 $t->set_empty_tag_style( 'html');
901 my $html2xml= $t->{use_tidy} ? \&_tidy_html : \&_html2xml;
902 my $options= $t->{use_tidy} ? $t->{tidy_options} || {} : { indent => $indent, html_doctype => $t->{html_doctype} };
903 $t->parse( $html2xml->( _slurp( $file), $options), @_);
904 return $t;
905 }
906
907sub parse_html
908 { my $t= shift;
909 my $options= ref $_[0] && ref $_[0] eq 'HASH' ? shift() : {};
910 my $use_tidy= exists $options->{use_tidy} ? $options->{use_tidy} : $t->{use_tidy};
911 my $content= shift;
912 my $indent= $t->{ErrorContext} ? 1 : 0;
913 $t->set_empty_tag_style( 'html');
914 my $html2xml= $use_tidy ? \&_tidy_html : \&_html2xml;
915 my $conv_options= $use_tidy ? $t->{tidy_options} || {} : { indent => $indent, html_doctype => $t->{html_doctype} };
916 $t->parse( $html2xml->( isa( $content, 'GLOB') ? _slurp_fh( $content) : $content, $conv_options), @_);
917 return $t;
918 }
919
920sub xparse
921 { my $t= shift;
922 my $to_parse= $_[0];
923 if( isa( $to_parse, 'GLOB')) { $t->parse( @_); }
924 elsif( $to_parse=~ m{^\s*<}) { $to_parse=~ m{<html}i ? $t->_parse_as_xml_or_html( @_)
925 : $t->parse( @_);
926 }
927 elsif( $to_parse=~ m{^\w+://.*\.html?$}) { _use( 'LWP::Simple') or croak "missing LWP::Simple";
928 $t->_parse_as_xml_or_html( LWP::Simple::get( shift()), @_);
929 }
930 elsif( $to_parse=~ m{^\w+://}) { _use( 'LWP::Simple') or croak "missing LWP::Simple";
931 my $doc= LWP::Simple::get( shift);
932 if( ! defined $doc) { $doc=''; }
933 my $xml_parse_ok= $t->safe_parse( $doc, @_);
934 if( $xml_parse_ok)
935 { return $xml_parse_ok; }
936 else
937 { my $diag= $@;
938 if( $doc=~ m{<html}i)
939 { $t->parse_html( $doc, @_); }
940 else
941 { croak $diag; }
942 }
943 }
944 elsif( $to_parse=~ m{\.html?$}) { my $content= _slurp( shift);
945 $t->_parse_as_xml_or_html( $content, @_);
946 }
947 else { $t->parsefile( @_); }
948 }
949
950sub _parse_as_xml_or_html
951 { my $t= shift;
952 if( _is_well_formed_xml( $_[0]))
953 { $t->parse( @_) }
954 else
955 { my $html2xml= $t->{use_tidy} ? \&_tidy_html : \&_html2xml;
956 my $options= $t->{use_tidy} ? $t->{tidy_options} || {} : { indent => 0, html_doctype => $t->{html_doctype} };
957 my $html= $html2xml->( $_[0], $options, @_);
958 if( _is_well_formed_xml( $html))
959 { $t->parse( $html); }
960 else
961 { croak $@; } # can't really test this because HTML::Parser or HTML::Tidy may change how they deal with bas HTML between versions
962 }
963 }
964
9651200ns{ my $parser;
966 sub _is_well_formed_xml
967 { $parser ||= XML::Parser->new;
968 eval { $parser->parse( $_[0]); };
969 return $@ ? 0 : 1;
970 }
971}
972
973sub nparse
9741300ns { my $class= shift;
975 my $to_parse= pop;
976 $class->new( @_)->xparse( $to_parse);
977 }
978
979sub nparse_pp { shift()->nparse( pretty_print => 'indented', @_); }
980sub nparse_e { shift()->nparse( error_context => 1, @_); }
981sub nparse_ppe { shift()->nparse( pretty_print => 'indented', error_context => 1, @_); }
982
983
984sub _html2xml
985 { my( $html, $options)= @_;
986 _use( 'HTML::TreeBuilder', '3.13') or croak "cannot parse HTML: missing HTML::TreeBuilder v >= 3.13\n";
987 my $tree= HTML::TreeBuilder->new;
988 $tree->ignore_ignorable_whitespace( 0);
989 $tree->ignore_unknown( 0);
990 $tree->no_space_compacting( 1);
991 $tree->store_comments( 1);
992 $tree->store_pis(1);
993 $tree->parse( $html);
994 $tree->eof;
995
996 my $xml='';
997 if( $options->{html_doctype} && exists $tree->{_decl} )
998 { my $decl= $tree->{_decl}->as_XML;
999
1000 # first try to fix declarations that are missing the SYSTEM part
1001 $decl =~ s{^\s*<!DOCTYPE \s+ ((?i)html) \s+ PUBLIC \s+ "([^"]*)" \s* >}
1002 { my $system= $HTML_DECL{$2} || $HTML_DECL{$DEFAULT_HTML_TYPE};
1003 qq{<!DOCTYPE $1 PUBLIC "$2" "$system">}
1004
1005 }xe;
1006
1007 # then check that the declaration looks OK (so it parses), if not remove it,
1008 # better to parse without the declaration than to die stupidly
1009 if( $decl =~ m{<!DOCTYPE \s+ (?i:HTML) (\s+ PUBLIC \s+ "[^"]*" \s+ (SYSTEM \s+)? "[^"]*")? \s*>}x # PUBLIC then SYSTEM
1010 || $decl =~ m{<!DOCTYPE \s+ (?i:HTML) \s+ SYSTEM \s+ "[^"]*" \s*>}x # just SYSTEM
1011 )
1012 { $xml= $decl; }
1013 }
1014
1015 $xml.= _as_XML( $tree);
1016
1017
1018 _fix_xml( $tree, \$xml);
1019
1020 if( $options->{indent}) { _indent_xhtml( \$xml); }
1021 $tree->delete;
1022 $xml=~ s{\s+$}{}s; # trim end
1023 return $xml;
1024 }
1025
1026sub _tidy_html
1027 { my( $html, $options)= @_;
1028 _use( 'HTML::Tidy') or croak "cannot cleanup HTML using HTML::Tidy (required by the use_tidy option): $@\n"; ;
1029 my $TIDY_DEFAULTS= { output_xhtml => 1, # duh!
1030 tidy_mark => 0, # do not add the "generated by tidy" comment
1031 numeric_entities => 1,
1032 char_encoding => 'utf8',
1033 bare => 1,
1034 clean => 1,
1035 doctype => 'transitional',
1036 fix_backslash => 1,
1037 merge_divs => 0,
1038 merge_spans => 0,
1039 sort_attributes => 'alpha',
1040 indent => 0,
1041 wrap => 0,
1042 break_before_br => 0,
1043 };
1044 $options ||= {};
1045 my $tidy_options= { %$TIDY_DEFAULTS, %$options};
1046 my $tidy = HTML::Tidy->new( $tidy_options);
1047 $tidy->ignore( type => 1, type => 2 ); # 1 is TIDY_WARNING, 2 is TIDY_ERROR, not clean
1048 my $xml= $tidy->clean( $html );
1049 return $xml;
1050 }
1051
1052
10531200ns{ my %xml_parser_encoding;
1054 sub _fix_xml
1055 { my( $tree, $xml)= @_; # $xml is a ref to the xml string
1056
1057 my $max_tries=5;
1058 my $add_decl;
1059
1060 while( ! _check_xml( $xml) && $max_tries--)
1061 {
1062 # a couple of fixes for weird HTML::TreeBuilder errors
1063 if( $@=~ m{^\s*xml (or text )?declaration not at start of (external )?entity}i)
1064 { $$xml=~ s{<\?xml.*?\?>}{}g;
1065 #warn " fixed xml declaration in the wrong place\n";
1066 }
1067 elsif( $@=~ m{undefined entity})
1068 { $$xml=~ s{&(amp;)?Amp;}{&amp;}g if $HTML::TreeBuilder::VERSION < 4.00;
1069 if( _use( 'HTML::Entities::Numbered')) { $$xml=name2hex_xml( $$xml); }
1070 $$xml=~ s{&(\w+);}{ my $ent= $1; if( $ent !~ m{^(amp|lt|gt|apos|quote)$}) { "&amp;$ent;" } }eg;
1071 }
1072 elsif( $@=~ m{&Amp; used in html})
1073 # if $Amp; is used instead of &amp; then HTML::TreeBuilder's as_xml is tripped (old version)
1074 { $$xml=~ s{&(amp;)?Amp;}{&amp;}g if $HTML::TreeBuilder::VERSION < 4.00;
1075 }
1076 elsif( $@=~ m{^\s*not well-formed \(invalid token\)})
1077 { if( $HTML::TreeBuilder::VERSION < 4.00)
1078 { $$xml=~ s{&(amp;)?Amp;}{&amp;}g;
1079 $$xml=~ s{(<[^>]* )(\d+=)"}{$1a$2"}g; # <table 1> comes out as <table 1="1">, "fix the attribute
1080 }
1081 my $q= '<img "="&#34;" '; # extracted so vim doesn't get confused
1082 if( _use( 'HTML::Entities::Numbered')) { $$xml=name2hex_xml( $$xml); }
1083 if( $$xml=~ m{$q})
1084 { $$xml=~ s{$q}{<img }g; # happens with <img src="foo.png"" ...
1085 }
1086 else
1087 { my $encoding= _encoding_from_meta( $tree);
1088 unless( keys %xml_parser_encoding) { %xml_parser_encoding= _xml_parser_encodings(); }
1089
1090 if( ! $add_decl)
1091 { if( $xml_parser_encoding{$encoding})
1092 { $add_decl=1; }
1093 elsif( $encoding eq 'euc-jp' && $xml_parser_encoding{'x-euc-jp-jisx0221'})
1094 { $encoding="x-euc-jp-jisx0221"; $add_decl=1;}
1095 elsif( $encoding eq 'shift-jis' && $xml_parser_encoding{'x-sjis-jisx0221'})
1096 { $encoding="x-sjis-jisx0221"; $add_decl=1;}
1097
1098 if( $add_decl)
1099 { $$xml=~ s{^(<\?xml.*?\?>)?}{<?xml version="1.0" encoding="$encoding"?>}s;
1100 #warn " added decl (encoding $encoding)\n";
1101 }
1102 else
1103 { $$xml=~ s{^(<\?xml.*?\?>)?}{}s;
1104 #warn " converting to utf8 from $encoding\n";
1105 $$xml= _to_utf8( $encoding, $$xml);
1106 }
1107 }
1108 else
1109 { $$xml=~ s{^(<\?xml.*?\?>)?}{}s;
1110 #warn " converting to utf8 from $encoding\n";
1111 $$xml= _to_utf8( $encoding, $$xml);
1112 }
1113 }
1114 }
1115 }
1116
1117 # some versions of HTML::TreeBuilder escape CDATA sections
1118 $$xml=~ s{(&lt;!\[CDATA\[.*?\]\]&gt;)}{_unescape_cdata( $1)}eg;
1119
1120 }
1121
1122 sub _xml_parser_encodings
1123 { my @encodings=( 'iso-8859-1'); # this one is included by default, there is no map for it in @INC
1124 foreach my $inc (@INC)
112521.27ms1480µs
# spent 480µs (307+173) within XML::Twig::BEGIN@1125 which was called: # once (307µs+173µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 1125
{ push @encodings, map { basename( $_, '.enc') } glob( File::Spec->catdir( $inc => XML => Parser => Encodings => '*.enc')); }
# spent 480µs making 1 call to XML::Twig::BEGIN@1125
1126 return map { $_ => 1 } @encodings;
1127 }
1128}
1129
1130
1131sub _unescape_cdata
11321100ns { my( $cdata)= @_;
1133 $cdata=~s{&lt;}{<}g;
1134 $cdata=~s{&gt;}{>}g;
1135 $cdata=~s{&amp;}{&}g;
1136 return $cdata;
1137 }
1138
1139sub _as_XML {
1140
1141 # fork of HTML::Element::as_XML, which is a little too buggy and inconsistent between versions for my liking
1142 my ($elt) = @_;
1143 my $xml= '';
1144 my $empty_element_map = $elt->_empty_element_map;
1145
1146 my ( $tag, $node, $start ); # per-iteration scratch
1147 $elt->traverse(
1148 sub {
1149 ( $node, $start ) = @_;
1150 if ( ref $node )
1151 { # it's an element
1152 $tag = $node->{'_tag'};
1153 if ($start)
1154 { # on the way in
1155 foreach my $att ( grep { ! m{^(_|/$)} } keys %$node )
1156 { # fix attribute names instead of dying
1157 my $new_att= $att;
1158 if( $att=~ m{^\d}) { $new_att= "a$att"; }
1159 $new_att=~ s{[^\w\d:_-]}{}g;
1160 $new_att ||= 'a';
1161 if( $new_att ne $att) { $node->{$new_att}= delete $node->{$att}; }
1162 }
1163
1164 if ( $empty_element_map->{$tag} && (!@{ $node->{'_content'} || []}) )
1165 { $xml.= $node->starttag_XML( undef, 1 ); }
1166 else
1167 { $xml.= $node->starttag_XML(undef); }
1168 }
1169 else
1170 { # on the way out
1171 unless ( $empty_element_map->{$tag} and !@{ $node->{'_content'} || [] } )
1172 { $xml.= $node->endtag_XML();
1173 } # otherwise it will have been an <... /> tag.
1174 }
1175 }
1176 elsif( $node=~ /<!\[CDATA\[/) # the content includes CDATA
1177 { foreach my $chunk (split /(<!\[CDATA\[.*?\]\]>)/s, $node) # chunks are CDATA sections or normal text
1178 { $xml.= $chunk =~ m{<!\[CDATA\[} ? $chunk : _xml_escape( $chunk); }
1179 }
1180 else # it's just text
1181 { $xml .= _xml_escape($node); }
1182 1; # keep traversing
1183 }
1184 );
1185 return $xml;
1186}
1187
1188sub _xml_escape
1189 { my( $html)= @_;
1190 $html =~ s{&(?! # An ampersand that isn't followed by...
1191 {&amp;}gx if 0; # Needs to be escaped to amp
1192 \#x[0-9a-fA-F]+; | # A hash mark, "x", hex digits and semicolon, or
1193 [\w]+; # A valid unicode entity name and semicolon
1194 )
1195 )
1196 }
1197
1198
1199 $html=~ s{&}{&amp;}g;
1200
1201 # in old versions of HTML::TreeBuilder &amp; can come out as &Amp;
1202 if( $HTML::TreeBuilder::VERSION && $HTML::TreeBuilder::VERSION <= 3.23) { $html=~ s{&Amp;}{&amp;}g; }
1203
1204 # simple character escapes
1205 $html =~ s/</&lt;/g;
1206 $html =~ s/>/&gt;/g;
1207 $html =~ s/"/&quot;/g;
1208 $html =~ s/'/&apos;/g;
1209
1210 return $html;
1211 }
1212
- -
1216sub _check_xml
1217 { my( $xml)= @_; # $xml is a ref to the xml string
1218 my $ok= eval { XML::Parser->new->parse( $$xml); };
1219 #if( $ok) { warn " parse OK\n"; }
1220 return $ok;
1221 }
1222
1223sub _encoding_from_meta
1224 { my( $tree)= @_;
1225 my $enc="iso-8859-1";
1226 my @meta= $tree->find( 'meta');
1227 foreach my $meta (@meta)
1228 { if( $meta->{'http-equiv'} && ($meta->{'http-equiv'} =~ m{^\s*content-type\s*}i)
1229 && $meta->{content} && ($meta->{content} =~ m{^\s*text/html\s*;\s*charset\s*=\s*(\S*)\s*}i)
1230 )
1231 { $enc= lc $1;
1232 #warn " encoding from meta tag is '$enc'\n";
1233 last;
1234 }
1235 }
1236 return $enc;
1237 }
1238
1239{ sub _to_utf8
1240 { my( $encoding, $string)= @_;
1241 local $SIG{__DIE__};
1242 if( _use( 'Encode'))
1243 { Encode::from_to( $string, $encoding => 'utf8', 0x0400); } # 0x0400 is Encode::FB_XMLCREF
1244 elsif( _use( 'Text::Iconv'))
1245 { my $converter = eval { Text::Iconv->new( $encoding => "utf8") };
1246 if( $converter) { $string= $converter->convert( $string); }
1247 }
1248 elsif( _use( 'Unicode::Map8') && _use( 'Unicode::String'))
1249 { my $map= Unicode::Map8->new( $encoding);
1250 $string= $map->tou( $string)->utf8;
1251 }
1252 $string=~ s{[\x00-\x08\x0B\x0C\x0E-\x1F]}{}g; # get rid of control chars, portable in 5.6
1253 return $string;
1254 }
1255}
1256
1257
1258sub _indent_xhtml
12591200ns { my( $xhtml)= @_; # $xhtml is a ref
1260 my %block_tag= map { $_ => 1 } qw( html
1261 head
1262 meta title link script base
1263 body
1264 h1 h2 h3 h4 h5 h6
1265 p br address blockquote pre
1266 ol ul li dd dl dt
1267 table tr td th tbody tfoot thead col colgroup caption
1268 div frame frameset hr
1269 );
1270
1271 my $level=0;
1272 $$xhtml=~ s{( (?:<!(?:--.*?-->|[CDATA[.*?]]>)) # ignore comments and CDATA sections
1273 { if( $2 && $block_tag{$2}) { my $indent= " " x $level;
1274 "\n$indent<$2$3";
1275 }
1276 elsif( $4 && $block_tag{$4}) { my $indent= " " x $level;
1277 $level++ unless( $4=~ m{/>});
1278 my $nl= $4 eq 'html' ? '' : "\n";
1279 "$nl$indent<$4";
1280 }
1281 elsif( $5 && $block_tag{$5}) { $level--; "</$5"; }
1282 else { $1; }
1283 }xesg;
1284
- -
1289 }
1290
1291
1292sub add_stylesheet
1293 { my( $t, $type, $href)= @_;
1294 my %text_type= map { $_ => 1 } qw( xsl css);
1295 my $ss= $t->{twig_elt_class}->new( $PI);
1296 if( $text_type{$type})
1297 { $ss->_set_pi( 'xml-stylesheet', qq{type="text/$type" href="$href"}); }
1298 else
1299 { croak "unsupported style sheet type '$type'"; }
1300
1301 $t->_add_cpi_outside_of_root( leading_cpi => $ss);
1302 return $t;
1303 }
1304
13051100ns{ my %used; # module => 1 if require ok, 0 otherwise
13061100ns my %disallowed; # for testing, refuses to _use modules in this hash
1307
1308 sub _disallow_use ## no critic (Subroutines::ProhibitNestedSubs);
1309 { my( @modules)= @_;
1310 $disallowed{$_}= 1 foreach (@modules);
1311 }
1312
1313 sub _allow_use ## no critic (Subroutines::ProhibitNestedSubs);
1314 { my( @modules)= @_;
1315 $disallowed{$_}= 0 foreach (@modules);
1316 }
1317
1318 sub _use ## no critic (Subroutines::ProhibitNestedSubs);
131972µs
# spent 2.49ms (1.59+902µs) within XML::Twig::_use which was called 7 times, avg 356µs/call: # 7 times (1.59ms+902µs) by XML::Twig::new at line 540, avg 356µs/call
{ my( $module, $version)= @_;
132072µs $version ||= 0;
132172µs if( $disallowed{$module}) { return 0; }
132279µs if( $used{$module}) { return 1; }
1323326µs12µs if( eval "require $module") { import $module; $used{$module}= 1; # no critic ProhibitStringyEval
# spent 2µs making 1 call to UNIVERSAL::import
# spent 66µs executing statements in string eval
13241300ns if( $version)
1325 {
1326 ## no critic (TestingAndDebugging::ProhibitNoStrict);
132725.26ms217µs
# spent 12µs (8+5) within XML::Twig::BEGIN@1327 which was called: # once (8µs+5µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 1327
no strict 'refs';
# spent 12µs making 1 call to XML::Twig::BEGIN@1327 # spent 4µs making 1 call to strict::unimport
1328 if( ${"${module}::VERSION"} >= $version ) { return 1; }
1329 else { return 0; }
1330 }
1331 else
133213µs { return 1; }
1333 }
1334 else { $used{$module}= 0; return 0; }
1335 }
1336}
1337
1338# used to solve the [n] predicates while avoiding getting the entire list
1339# needs a prototype to accept passing bare blocks
13401100nssub _first_n(&$@) ## no critic (Subroutines::ProhibitSubroutinePrototypes);
1341 { my $coderef= shift;
1342 my $n= shift;
1343 my $i=0;
1344 if( $n > 0)
1345 { foreach (@_) { if( &$coderef) { $i++; return $_ if( $i == $n); } } }
1346 elsif( $n < 0)
1347 { foreach (reverse @_) { if( &$coderef) { $i--; return $_ if( $i == $n); } } }
1348 else
1349 { croak "illegal position number 0"; }
1350 return undef;
1351 }
1352
1353sub _slurp_uri
1354 { my( $uri, $base)= @_;
1355 if( $uri=~ m{^\w+://}) { _use( 'LWP::Simple'); return LWP::Simple::get( $uri); }
1356 else { return _slurp( _based_filename( $uri, $base)); }
1357 }
1358
1359sub _based_filename
1360 { my( $filename, $base)= @_;
1361 # cf. XML/Parser.pm's file_ext_ent_handler
1362 if (defined($base) and not ($filename =~ m{^(?:[\\/]|\w+:)}))
1363 { my $newpath = $base;
1364 $newpath =~ s{[^\\/:]*$}{$filename};
1365 $filename = $newpath;
1366 }
1367 return $filename;
1368 }
1369
1370sub _slurp
1371 { my( $filename)= @_;
1372 my $to_slurp;
1373 open( $to_slurp, "<$filename") or croak "cannot open '$filename': $!";
1374 local $/= undef;
1375 my $content= <$to_slurp>;
1376 close $to_slurp;
1377 return $content;
1378 }
1379
1380sub _slurp_fh
1381 { my( $fh)= @_;
1382 local $/= undef;
1383 my $content= <$fh>;
1384 return $content;
1385 }
1386
1387# I should really add extra options to allow better configuration of the
1388# LWP::UserAgent object
1389# this method forks (except on VMS!)
1390# - the child gets the data and copies it to the pipe,
1391# - the parent reads the stream and sends it to XML::Parser
1392# the data is cut it chunks the size of the XML::Parser::Expat buffer
1393# the method returns the twig and the status
1394sub _parseurl
1395 { my( $t, $safe, $url, $agent)= @_;
1396 _use( 'LWP') || croak "LWP not available, needed to use parseurl methods";
1397 if( $^O ne 'VMS')
1398 { pipe( README, WRITEME) or croak "cannot create connected pipes: $!";
1399 if( my $pid= fork)
1400 { # parent code: parse the incoming file
1401 close WRITEME; # no need to write
1402 my $result= $safe ? $t->safe_parse( \*README) : $t->parse( \*README);
1403 close README;
1404 return $@ ? 0 : $t;
1405 }
1406 else
1407 { # child
1408 close README; # no need to read
1409 local $|=1;
1410 $agent ||= LWP::UserAgent->new;
1411 my $request = HTTP::Request->new( GET => $url);
1412 # _pass_url_content is called with chunks of data the same size as
1413 # the XML::Parser buffer
1414 my $response = $agent->request( $request,
1415 sub { _pass_url_content( \*WRITEME, @_); }, $BUFSIZE);
1416 $response->is_success or croak "$url ", $response->message;
1417 close WRITEME;
1418 CORE::exit(); # CORE is there for mod_perl (which redefines exit)
1419 }
1420 }
1421 else
1422 { # VMS branch (hard to test!)
1423 local $|=1;
1424 $agent ||= LWP::UserAgent->new;
1425 my $request = HTTP::Request->new( GET => $url);
1426 my $response = $agent->request( $request);
1427 $response->is_success or croak "$url ", $response->message;
1428 my $result= $safe ? $t->safe_parse($response->content) : $t->parse($response->content);
1429 return $@ ? 0 : $t;
1430 }
1431
1432 }
1433
1434# get the (hopefully!) XML data from the URL and
1435sub _pass_url_content
1436 { my( $fh, $data, $response, $protocol)= @_;
1437 print {$fh} $data;
1438 }
1439
1440sub add_options
1441 { my %args= map { $_, 1 } @_;
1442 %args= _normalize_args( %args);
1443 foreach (keys %args) { $valid_option{$_}++; }
1444 }
1445
1446sub _pretty_print_styles { return XML::Twig::Elt::_pretty_print_styles(); }
1447
1448sub _twig_store_internal_dtd
1449 {
1450 # warn " in _twig_store_internal_dtd...\n"; # DEBUG handler
1451 my( $p, $string)= @_;
1452 my $t= $p->{twig};
1453 if( $t->{twig_keep_encoding}) { $string= $p->original_string(); }
1454 $t->{twig_doctype}->{internal} .= $string;
1455 return;
1456 }
1457
1458sub _twig_stop_storing_internal_dtd
1459 { # warn " in _twig_stop_storing_internal_dtd...\n"; # DEBUG handler
1460 my $p= shift;
1461 if( @saved_default_handler && defined $saved_default_handler[1])
1462 { $p->setHandlers( @saved_default_handler); }
1463 else
1464 {
1465 $p->setHandlers( Default => undef);
1466 }
1467 $p->{twig}->{twig_doctype}->{internal}=~ s{^\s*\[}{};
1468 $p->{twig}->{twig_doctype}->{internal}=~ s{\]\s*$}{};
1469 return;
1470 }
1471
1472sub _twig_doctype_fin_print
1473 { # warn " in _twig_doctype_fin_print...\n"; # DEBUG handler
1474 my( $p)= shift;
1475 if( $p->{twig}->{twig_doctype}->{has_internal} && !$expat_1_95_2) { print ' ]>'; }
1476 return;
1477 }
1478
1479
1480sub _normalize_args
14817900ns
# spent 63µs within XML::Twig::_normalize_args which was called 7 times, avg 9µs/call: # 7 times (63µs+0s) by XML::Twig::new at line 454, avg 9µs/call
{ my %normalized_args;
148279µs while( my $key= shift )
14832335µs { $key= join '', map { ucfirst } split /_/, $key;
1484 #$key= "Twig".$key unless( substr( $key, 0, 4) eq 'Twig');
1485238µs $normalized_args{$key}= shift ;
1486 }
1487714µs return %normalized_args;
1488 }
1489
1490sub _is_fh { return unless $_[0]; return $_[0] if( isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar')); }
1491
1492sub _set_handler
1493217µs
# spent 8.48ms (382µs+8.10) within XML::Twig::_set_handler which was called 21 times, avg 404µs/call: # 11 times (212µs+5.88ms) by XML::Twig::_set_handlers at line 1863, avg 553µs/call # 10 times (170µs+2.22ms) by XML::Twig::setTwigRoots at line 1937, avg 239µs/call
{ my( $handlers, $whole_path, $handler)= @_;
1494
149521106µs4264µs my $H_SPECIAL = qr{($ALL|$DEFAULT|$COMMENT|$TEXT)};
# spent 51µs making 21 calls to CORE::regcomp, avg 2µs/call # spent 13µs making 21 calls to CORE::qr, avg 638ns/call
14962174µs4244µs my $H_PI = qr{(\?|$PI)\s*(([^\s]*)\s*)};
# spent 39µs making 21 calls to CORE::regcomp, avg 2µs/call # spent 4µs making 21 calls to CORE::qr, avg 214ns/call
14972118µs215µs my $H_LEVEL = qr{level \s* \( \s* ([0-9]+) \s* \)}x;
# spent 5µs making 21 calls to CORE::qr, avg 229ns/call
14982118µs214µs my $H_REGEXP = qr{\(\?([\^xism]*)(-[\^xism]*)?:(.*)\)}x;
# spent 4µs making 21 calls to CORE::qr, avg 214ns/call
149921729µs42697µs my $H_XPATH = qr{(/?/?$REG_TAG_PART? \s* ($REG_PREDICATE\s*)?)+}x;
# spent 692µs making 21 calls to CORE::regcomp, avg 33µs/call # spent 5µs making 21 calls to CORE::qr, avg 229ns/call
1500
1501212µs my $prev_handler;
1502
1503214µs my $cpath= $whole_path;
1504 #warn "\$cpath: '$cpath\n";
150521963µs42914µs while( $cpath && $cpath=~ s{^\s*($H_SPECIAL|$H_PI|$H_LEVEL|$H_REGEXP|$H_XPATH)\s*($|\|)}{})
# spent 792µs making 21 calls to CORE::regcomp, avg 38µs/call # spent 122µs making 21 calls to CORE::subst, avg 6µs/call
15062115µs { my $path= $1;
1507 #warn "\$cpath: '$cpath' - $path: '$path'\n";
15082113µs $prev_handler ||= $handlers->{handlers}->{string}->{$path} || undef; # $prev_handler gets the first found handler
1509
15102164µs1056.37ms _set_special_handler ( $handlers, $path, $handler, $prev_handler)
# spent 6.12ms making 21 calls to XML::Twig::_set_xpath_handler, avg 292µs/call # spent 92µs making 21 calls to XML::Twig::_set_pi_handler, avg 4µs/call # spent 88µs making 21 calls to XML::Twig::_set_special_handler, avg 4µs/call # spent 36µs making 21 calls to XML::Twig::_set_level_handler, avg 2µs/call # spent 32µs making 21 calls to XML::Twig::_set_regexp_handler, avg 2µs/call
1511 || _set_pi_handler ( $handlers, $path, $handler, $prev_handler)
1512 || _set_level_handler ( $handlers, $path, $handler, $prev_handler)
1513 || _set_regexp_handler ( $handlers, $path, $handler, $prev_handler)
1514 || _set_xpath_handler ( $handlers, $path, $handler, $prev_handler)
1515 || croak "unrecognized expression in handler: '$whole_path'";
1516
1517 # this both takes care of the simple (gi) handlers and store
1518 # the handler code reference for other handlers
15192121µs $handlers->{handlers}->{string}->{$path}= $handler;
1520 }
1521
1522212µs if( $cpath) { croak "unrecognized expression in handler: '$whole_path'"; }
1523
15242149µs return $prev_handler;
1525 }
1526
1527
1528sub _set_special_handler
1529217µs
# spent 88µs (48+40) within XML::Twig::_set_special_handler which was called 21 times, avg 4µs/call: # 21 times (48µs+40µs) by XML::Twig::_set_handler at line 1510, avg 4µs/call
{ my( $handlers, $path, $handler, $prev_handler)= @_;
15302164µs2240µs if( $path =~ m{^\s*($ALL|$DEFAULT|$COMMENT|$TEXT)\s*$}io )
# spent 24µs making 1 call to CORE::regcomp # spent 16µs making 21 calls to CORE::match, avg 786ns/call
1531 { $handlers->{handlers}->{$1}= $handler;
1532 return 1;
1533 }
1534 else
15352124µs { return 0; }
1536 }
1537
1538sub _set_xpath_handler
1539214µs
# spent 6.12ms (94µs+6.03) within XML::Twig::_set_xpath_handler which was called 21 times, avg 292µs/call: # 21 times (94µs+6.03ms) by XML::Twig::_set_handler at line 1510, avg 292µs/call
{ my( $handlers, $path, $handler, $prev_handler)= @_;
15402114µs215.96ms if( my $handler_data= _parse_xpath_handler( $path, $handler))
# spent 5.96ms making 21 calls to XML::Twig::_parse_xpath_handler, avg 284µs/call
15412120µs2172µs { _add_handler( $handlers, $handler_data, $path, $prev_handler);
# spent 72µs making 21 calls to XML::Twig::_add_handler, avg 3µs/call
15422128µs return 1;
1543 }
1544 else
1545 { return 0; }
1546 }
1547
1548sub _add_handler
15492110µs
# spent 72µs within XML::Twig::_add_handler which was called 21 times, avg 3µs/call: # 21 times (72µs+0s) by XML::Twig::_set_xpath_handler at line 1541, avg 3µs/call
{ my( $handlers, $handler_data, $path, $prev_handler)= @_;
1550
1551217µs my $tag= $handler_data->{tag};
15522111µs my @handlers= $handlers->{xpath_handler}->{$tag} ? @{$handlers->{xpath_handler}->{$tag}} : ();
1553
1554212µs if( $prev_handler) { @handlers= grep { $_->{path} ne $path } @handlers; }
1555
15562110µs push @handlers, $handler_data if( $handler_data->{handler});
1557
1558217µs if( @handlers > 1)
1559 { @handlers= sort { (($b->{score}->{type} || 0) <=> ($a->{score}->{type} || 0))
1560 || (($b->{score}->{anchored} || 0) <=> ($a->{score}->{anchored} || 0))
1561 || (($b->{score}->{steps} || 0) <=> ($a->{score}->{steps} || 0))
1562 || (($b->{score}->{predicates} || 0) <=> ($a->{score}->{predicates} || 0))
1563 || (($b->{score}->{tests} || 0) <=> ($a->{score}->{tests} || 0))
1564 || ($a->{path} cmp $b->{path})
1565 } @handlers;
1566 }
1567
15682131µs $handlers->{xpath_handler}->{$tag}= \@handlers;
1569 }
1570
1571sub _set_pi_handler
1572214µs
# spent 92µs (48+44) within XML::Twig::_set_pi_handler which was called 21 times, avg 4µs/call: # 21 times (48µs+44µs) by XML::Twig::_set_handler at line 1510, avg 4µs/call
{ my( $handlers, $path, $handler, $prev_handler)= @_;
1573 # PI conditions ( '?target' => \&handler or '?' => \&handler
1574 # or '#PItarget' => \&handler or '#PI' => \&handler)
15752174µs4244µs if( $path=~ /^\s*(?:\?|$PI)\s*(?:([^\s]*)\s*)$/)
# spent 36µs making 21 calls to CORE::regcomp, avg 2µs/call # spent 8µs making 21 calls to CORE::match, avg 381ns/call
1576 { my $target= $1 || '';
1577 # update the path_handlers count, knowing that
1578 # either the previous or the new handler can be undef
1579 $handlers->{pi_handlers}->{$1}= $handler;
1580 return 1;
1581 }
1582 else
15832120µs { return 0;
1584 }
1585 }
1586
1587sub _set_level_handler
1588214µs
# spent 36µs (31+4) within XML::Twig::_set_level_handler which was called 21 times, avg 2µs/call: # 21 times (31µs+4µs) by XML::Twig::_set_handler at line 1510, avg 2µs/call
{ my( $handlers, $path, $handler, $prev_handler)= @_;
15892120µs214µs if( $path =~ m{^ \s* level \s* \( \s* ([0-9]+) \s* \) \s* $}ox )
# spent 4µs making 21 calls to CORE::match, avg 210ns/call
1590 { my $level= $1;
1591 my $sub= sub { my( $stack)= @_; return( ($stack->[-1]->{$ST_TAG} !~ m{^#}) && (scalar @$stack == $level + 1) ) };
1592 my $handler_data= { tag=> '*', score => { type => $LEVEL_TRIGGER}, trigger => $sub,
1593 path => $path, handler => $handler, test_on_text => 0
1594 };
1595 _add_handler( $handlers, $handler_data, $path, $prev_handler);
1596 return 1;
1597 }
1598 else
15992118µs { return 0; }
1600 }
1601
1602sub _set_regexp_handler
1603214µs
# spent 32µs (29+3) within XML::Twig::_set_regexp_handler which was called 21 times, avg 2µs/call: # 21 times (29µs+3µs) by XML::Twig::_set_handler at line 1510, avg 2µs/call
{ my( $handlers, $path, $handler, $prev_handler)= @_;
1604 # if the expression was a regexp it is now a string (it was stringified when it became a hash key)
16052117µs213µs if( $path=~ m{^\(\?([\^xism]*)(?:-[\^xism]*)?:(.*)\)$})
# spent 3µs making 21 calls to CORE::match, avg 133ns/call
1606 { my $regexp= qr/(?$1:$2)/; # convert it back into a regexp
1607 my $sub= sub { my( $stack)= @_; return( $stack->[-1]->{$ST_TAG} =~ $regexp ) };
1608 my $handler_data= { tag=> '*', score => { type => $REGEXP_TRIGGER} , trigger => $sub,
1609 path => $path, handler => $handler, test_on_text => 0
1610 };
1611 _add_handler( $handlers, $handler_data, $path, $prev_handler);
1612 return 1;
1613 }
1614 else
16152116µs { return 0; }
1616 }
1617
16181100nsmy $DEBUG_HANDLER= 0; # 0 or 1 (output the handler checking code) or 2 (super verbose)
16191100nsmy $handler_string; # store the handler itself
1620sub _set_debug_handler { $DEBUG_HANDLER= shift; }
1621sub _warn_debug_handler { if( $DEBUG_HANDLER < 3) { warn @_; } else { $handler_string .= join( '', @_); } }
1622sub _return_debug_handler { my $string= $handler_string; $handler_string=''; return $string; }
1623
1624sub _parse_xpath_handler
1625215µs
# spent 5.96ms (3.22+2.74) within XML::Twig::_parse_xpath_handler which was called 21 times, avg 284µs/call: # 21 times (3.22ms+2.74ms) by XML::Twig::_set_xpath_handler at line 1540, avg 284µs/call
{ my( $xpath, $handler)= @_;
1626214µs my $xpath_original= $xpath;
1627
1628
1629213µs if( $DEBUG_HANDLER >=1) { _warn_debug_handler( "\n\nparsing path '$xpath'\n"); }
1630
1631213µs my $path_to_check= $xpath;
163221814µs42777µs $path_to_check=~ s{/?/?$REG_TAG_PART?\s*(?:$REG_PREDICATE\s*)?}{}g;
# spent 689µs making 21 calls to CORE::regcomp, avg 33µs/call # spent 87µs making 21 calls to CORE::subst, avg 4µs/call
1633213µs if( $DEBUG_HANDLER && $path_to_check=~ /\S/) { _warn_debug_handler( "left: $path_to_check\n"); }
16342121µs212µs return if( $path_to_check=~ /\S/);
# spent 2µs making 21 calls to CORE::match, avg 105ns/call
1635
16362125µs219µs (my $xpath_to_display= $xpath)=~ s{(["{}'\[\]\@\$])}{\\$1}g;
# spent 9µs making 21 calls to CORE::subst, avg 410ns/call
1637
1638213µs my @xpath_steps;
1639 my $last_token_is_sep;
1640
1641211.06ms421.02ms while( $xpath=~ s{^\s*
# spent 989µs making 21 calls to CORE::regcomp, avg 47µs/call # spent 32µs making 21 calls to CORE::subst, avg 2µs/call
1642 {}x
1643 | (?:$REG_TAG_PART\s*(?:$REG_PREDICATE\s*)?) # tag name and optional predicate
1644 | (?:$REG_PREDICATE) # just a predicate
1645 )
1646 }
1647
1648 )
1649 { # check that we have alternating separators and steps
16503311µs if( $2) # found a separator
16516700ns { if( $last_token_is_sep) { return 0; } # 2 separators in a row
16526700ns $last_token_is_sep= 1;
1653 }
1654 else
1655276µs { if( defined( $last_token_is_sep) && !$last_token_is_sep) { return 0; } # 2 steps in a row
1656274µs $last_token_is_sep= 0;
1657 }
1658
165933119µs6646µs push @xpath_steps, $1;
# spent 31µs making 33 calls to CORE::regcomp, avg 948ns/call # spent 14µs making 33 calls to CORE::subst, avg 439ns/call
1660 }
1661212µs if( $last_token_is_sep) { return 0; } # expression cannot end with a separator
1662
1663213µs my $i=-1;
1664
16652129µs2129µs my $perlfunc= _join_n( $NO_WARNINGS . ';',
# spent 29µs making 21 calls to XML::Twig::_join_n, avg 1µs/call
1666 q|my( $stack)= @_; |,
1667 q|my @current_elts= (scalar @$stack); |,
1668 q|my @new_current_elts; |,
1669 q|my $elt; |,
1670 ($DEBUG_HANDLER >= 1) && (qq#warn q{checking path '$xpath_to_display'\n};#),
1671 );
1672
1673
1674213µs my $last_tag='';
16752126µs218µs my $anchored= $xpath_original=~ m{^\s*/(?!/)} ? 1 : 0;
# spent 8µs making 21 calls to CORE::match, avg 400ns/call
16762118µs my $score={ type => $XPATH_TRIGGER, anchored => $anchored };
1677219µs my $flag= { test_on_text => 0 };
1678213µs my $sep='/'; # '/' or '//'
16792121µs while( my $xpath_step= pop @xpath_steps)
168027381µs54331µs { my( $tag, $predicate)= $xpath_step =~ m{^($REG_TAG_PART)?(?:\[(.*)\])?\s*$};
# spent 292µs making 27 calls to CORE::regcomp, avg 11µs/call # spent 39µs making 27 calls to CORE::match, avg 1µs/call
16812710µs $score->{steps}++;
1682273µs $tag||='*';
1683
1684276µs my $warn_empty_stack= $DEBUG_HANDLER >= 2 ? qq{warn "return with empty stack\\n";} : '';
1685
1686273µs if( $predicate)
1687 { if( $DEBUG_HANDLER >= 2) { _warn_debug_handler( "predicate is: '$predicate'\n"); }
1688 # changes $predicate (from an XPath expression to a Perl one)
1689 if( $predicate=~ m{^\s*$REG_NUMBER\s*$}) { croak "position selector [$predicate] not supported on twig_handlers"; }
1690 _parse_predicate_in_handler( $predicate, $flag, $score);
1691 if( $DEBUG_HANDLER >= 2) { _warn_debug_handler( "predicate becomes: '$predicate'\n"); }
1692 }
1693
16942717µs27120µs my $tag_cond= _tag_cond( $tag);
# spent 120µs making 27 calls to XML::Twig::_tag_cond, avg 4µs/call
16952713µs my $cond= join( " && ", grep { $_ } $tag_cond, $predicate) || 1;
1696
1697273µs if( $css_sel && $tag=~ m{\.}) { $tag=~s{\.[^.]*$}{}; $tag ||='*'; }
16982724µs275µs $tag=~ s{(.)#.+$}{$1};
# spent 5µs making 27 calls to CORE::subst, avg 196ns/call
1699
1700275µs $last_tag ||= $tag;
1701
17022746µs2718µs if( $sep eq '/')
# spent 18µs making 27 calls to XML::Twig::_join_n, avg 667ns/call
1703 {
1704 $perlfunc .= sprintf( _join_n( q#foreach my $current_elt (@current_elts) #,
1705 q# { next if( !$current_elt); #,
1706 q# $current_elt--; #,
1707 q# $elt= $stack->[$current_elt]; #,
1708 q# if( %s) { push @new_current_elts, $current_elt;} #,
1709 q# } #,
1710 ),
1711 $cond
1712 );
1713 }
1714 elsif( $sep eq '//')
1715 {
1716 $perlfunc .= sprintf( _join_n( q#foreach my $current_elt (@current_elts) #,
1717 q# { next if( !$current_elt); #,
1718 q# $current_elt--; #,
1719 q# my $candidate= $current_elt; #,
1720 q# while( $candidate >=0) #,
1721 q# { $elt= $stack->[$candidate]; #,
1722 q# if( %s) { push @new_current_elts, $candidate;} #,
1723 q# $candidate--; #,
1724 q# } #,
1725 q# } #,
1726 ),
1727 $cond
1728 );
1729 }
1730275µs my $warn= $DEBUG_HANDLER >= 2 ? _join_n( qq#warn qq%fail at cond '$cond'%;#) : '';
17312722µs2713µs $perlfunc .= sprintf( _join_n( q#unless( @new_current_elts) { %s return 0; } #,
# spent 13µs making 27 calls to XML::Twig::_join_n, avg 474ns/call
1732 q#@current_elts= @new_current_elts; #,
1733 q#@new_current_elts=(); #,
1734 ),
1735 $warn
1736 );
1737
17382718µs $sep= pop @xpath_steps;
1739 }
1740
1741212µs if( $anchored) # there should be a better way, but this works
1742 {
1743 my $warn= $DEBUG_HANDLER >= 2 ? _join_n( qq#warn qq{fail, stack not empty};#) : '';
1744 $perlfunc .= sprintf( _join_n( q#if( ! grep { $_ == 0 } @current_elts) { %s return 0;}#), $warn);
1745 }
1746
1747213µs $perlfunc.= qq{warn "handler for '$xpath_to_display' triggered\\n";\n} if( $DEBUG_HANDLER >=2);
1748215µs $perlfunc.= qq{return q{$xpath_original};\n};
1749212µs _warn_debug_handler( "\nperlfunc:\n$perlfunc\n") if( $DEBUG_HANDLER>=1);
175021654µs my $s= eval "sub { $perlfunc }";
# spent 269ms executing statements in 2 string evals (merged)
# includes 149ms spent executing 31218 calls to 3 subs defined therein. # spent 246ms executing statements in 2 string evals (merged)
# includes 136ms spent executing 36362 calls to 3 subs defined therein. # spent 374µs executing statements in 4 string evals (merged)
# includes 46µs spent executing 8 calls to 5 subs defined therein. # spent 221µs executing statements in 2 string evals (merged)
# includes 11µs spent executing 2 calls to 3 subs defined therein. # spent 189µs executing statements in 2 string evals (merged)
# includes 24µs spent executing 4 calls to 3 subs defined therein. # spent 186µs executing statements in 2 string evals (merged)
# includes 24µs spent executing 4 calls to 3 subs defined therein. # spent 169µs executing statements in 2 string evals (merged)
# includes 12µs spent executing 2 calls to 3 subs defined therein. # spent 169µs executing statements in 2 string evals (merged)
# includes 13µs spent executing 2 calls to 3 subs defined therein. # spent 166µs executing statements in 2 string evals (merged)
# includes 12µs spent executing 2 calls to 3 subs defined therein. # spent 146µs executing statements in string eval
# includes 47µs spent executing 16 calls to 2 subs defined therein.
1751213µs if( $@)
1752 { croak "wrong handler condition '$xpath' ($@);" }
1753
1754214µs _warn_debug_handler( "last tag: '$last_tag', test_on_text: '$flag->{test_on_text}'\n") if( $DEBUG_HANDLER >=1);
1755212µs _warn_debug_handler( "score: ", join( ' ', map { "$_: $score->{$_}" } sort keys %$score), "\n") if( $DEBUG_HANDLER >=1);
175621111µs return { tag=> $last_tag, score => $score, trigger => $s, path => $xpath_original, handler => $handler, test_on_text => $flag->{test_on_text} };
1757 }
1758
17597586µs
# spent 60µs within XML::Twig::_join_n which was called 75 times, avg 796ns/call: # 27 times (18µs+0s) by XML::Twig::_parse_xpath_handler at line 1702, avg 667ns/call # 27 times (13µs+0s) by XML::Twig::_parse_xpath_handler at line 1731, avg 474ns/call # 21 times (29µs+0s) by XML::Twig::_parse_xpath_handler at line 1665, avg 1µs/call
sub _join_n { return join( "\n", @_, ''); }
1760
1761# the "tag" part can be <tag>, <tag>.<class> or <tag>#<id> (where tag can be *, or start with # for hidden tags)
1762sub _tag_cond
1763275µs
# spent 120µs (117+3) within XML::Twig::_tag_cond which was called 27 times, avg 4µs/call: # 27 times (117µs+3µs) by XML::Twig::_parse_xpath_handler at line 1694, avg 4µs/call
{ my( $full_tag)= @_;
1764
1765273µs my( $tag, $class, $id);
17662727µs273µs if( $full_tag=~ m{^(.+)#(.+)$})
# spent 3µs making 27 calls to CORE::match, avg 115ns/call
1767 { ($tag, $id)= ($1, $2); } # <tag>#<id>
1768 else
1769278µs { ( $tag, $class)= $css_sel ? $full_tag=~ m{^(.*?)(?:\.([^.]*))?$} : ($full_tag, undef); }
1770
17712715µs my $tag_cond = $tag && $tag ne '*' ? qq#(\$elt->{'$ST_TAG'} eq "$tag")# : '';
1772275µs my $id_cond = defined $id ? qq#(\$elt->{id} eq "$id")# : '';
1773274µs my $class_cond = defined $class ? qq#(\$elt->{class}=~ m{(^| )$class( |\$)})# : '';
1774
17752734µs my $full_cond= join( ' && ', grep { $_ } ( $tag_cond, $class_cond, $id_cond));
1776
17772729µs return $full_cond;
1778 }
1779
1780# input: the predicate ($_[0]) which will be changed in place
1781# flags, a hashref with various flags (like test_on_text)
1782# the score
1783sub _parse_predicate_in_handler
1784 { my( $flag, $score)= @_[1..2];
1785 $_[0]=~ s{( ($REG_STRING) # strings
1786 { my( $token, $str, $att_re_name, $att_re_regexp, $att, $bare_att, $num_test, $alpha_test, $func, $str_regexp, $str_test_alpha, $str_test_num, $and_or, $tag)
1787 = ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14);
1788
1789 $score->{predicates}++;
1790
1791 # store tests on text (they are not always allowed)
1792 if( $func || $str_regexp || $str_test_num || $str_test_alpha ) { $flag->{test_on_text}= 1; }
1793
1794 if( defined $str) { $token }
1795 elsif( $tag) { qq{(\$elt->{'$ST_ELT'} && \$elt->{'$ST_ELT'}->has_child( '$tag'))} }
1796 elsif( $att) { $att=~ m{^#} ? qq{ (\$elt->{'$ST_ELT'} && \$elt->{'$ST_ELT'}->{att}->{'$att'})}
1797 : qq{\$elt->{'$att'}}
1798 }
1799 elsif( $att_re_name) { $att_re_name=~ m{^#} ? qq{ (\$elt->{'$ST_ELT'} && \$elt->{'$ST_ELT'}->{att}->{'$att_re_name'}$att_re_regexp)}
1800 : qq{\$elt->{'$att_re_name'}$att_re_regexp}
1801 }
1802 # for some reason Devel::Cover flags the following lines as not tested. They are though.
1803 elsif( $bare_att) { $bare_att=~ m{^#} ? qq{(\$elt->{'$ST_ELT'} && defined(\$elt->{'$ST_ELT'}->{att}->{'$bare_att'}))}
1804 : qq{defined( \$elt->{'$bare_att'})}
1805 }
1806 elsif( $num_test && ($num_test eq '=') ) { "==" } # others tests are unchanged
1807 elsif( $alpha_test) { $PERL_ALPHA_TEST{$alpha_test} }
1808 elsif( $func && $func=~ m{^string})
1809 { "\$elt->{'$ST_ELT'}->text"; }
1810 elsif( $str_regexp && $str_regexp =~ m{string\(\s*($REG_TAG_NAME)\s*\)\s*($REG_MATCH)\s*($REG_REGEXP)})
1811 { "defined( _first_n { \$_->text $2 $3 } 1, \$elt->{'$ST_ELT'}->_children( '$1'))"; }
1812 elsif( $str_test_alpha && $str_test_alpha =~ m{string\(\s*($REG_TAG_NAME)\s*\)\s*($REG_COMP)\s*($REG_STRING)})
1813 { my( $tag, $op, $str)= ($1, $2, $3);
1814 $str=~ s{(?<=.)'(?=.)}{\\'}g; # escape a quote within the string
1815 $str=~ s{^"}{'};
1816 $str=~ s{"$}{'};
1817 "defined( _first_n { \$_->text $PERL_ALPHA_TEST{$op} $str } 1, \$elt->{'$ST_ELT'}->children( '$tag'))"; }
1818 elsif( $str_test_num && $str_test_num =~ m{string\(\s*($REG_TAG_NAME)\s*\)\s*($REG_COMP)\s*($REG_NUMBER)})
1819 { my $test= ($2 eq '=') ? '==' : $2;
1820 "defined( _first_n { \$_->text $test $3 } 1, \$elt->{'$ST_ELT'}->children( '$1'))";
1821 }
1822 elsif( $and_or) { $score->{tests}++; $and_or eq 'and' ? '&&' : '||' ; }
1823 else { $token; }
1824 }gexs;
1825
- -
1841 }
1842
1843
1844sub setCharHandler
1845 { my( $t, $handler)= @_;
1846 $t->{twig_char_handler}= $handler;
1847 }
1848
1849
1850sub _reset_handlers
185122µs
# spent 6µs within XML::Twig::_reset_handlers which was called 2 times, avg 3µs/call: # once (4µs+0s) by XML::Twig::setTwigHandlers at line 1878 # once (2µs+0s) by XML::Twig::setTwigRoots at line 1929
{ my $handlers= shift;
18522700ns delete $handlers->{handlers};
18532300ns delete $handlers->{path_handlers};
18542500ns delete $handlers->{subpath_handlers};
18552500ns $handlers->{attcond_handlers_exp}=[] if( $handlers->{attcond_handlers});
185624µs delete $handlers->{attcond_handlers};
1857 }
1858
1859sub _set_handlers
18602600ns
# spent 6.11ms (22µs+6.09) within XML::Twig::_set_handlers which was called 2 times, avg 3.05ms/call: # once (6µs+3.79ms) by XML::Twig::setTwigHandlers at line 1879 # once (16µs+2.29ms) by XML::Twig::setTwigRoots at line 1930
{ my $handlers= shift || return;
18612300ns my $set_handlers= {};
186222µs foreach my $path (keys %{$handlers})
18631111µs116.09ms { _set_handler( $set_handlers, $path, $handlers->{$path}); }
# spent 6.09ms making 11 calls to XML::Twig::_set_handler, avg 553µs/call
1864
186523µs return $set_handlers;
1866 }
1867
1868
1869sub setTwigHandler
1870 { my( $t, $path, $handler)= @_;
1871 $t->{twig_handlers} ||={};
1872 return _set_handler( $t->{twig_handlers}, $path, $handler);
1873 }
1874
1875sub setTwigHandlers
18761300ns
# spent 3.81ms (8µs+3.80) within XML::Twig::setTwigHandlers which was called: # once (8µs+3.80ms) by XML::Twig::new at line 477
{ my( $t, $handlers)= @_;
18771600ns my $previous_handlers= $t->{twig_handlers} || undef;
187812µs14µs _reset_handlers( $t->{twig_handlers});
# spent 4µs making 1 call to XML::Twig::_reset_handlers
187914µs13.80ms $t->{twig_handlers}= _set_handlers( $handlers);
# spent 3.80ms making 1 call to XML::Twig::_set_handlers
188012µs return $previous_handlers;
1881 }
1882
1883sub setStartTagHandler
1884 { my( $t, $path, $handler)= @_;
1885 $t->{twig_starttag_handlers}||={};
1886 return _set_handler( $t->{twig_starttag_handlers}, $path, $handler);
1887 }
1888
1889sub setStartTagHandlers
1890 { my( $t, $handlers)= @_;
1891 my $previous_handlers= $t->{twig_starttag_handlers} || undef;
1892 _reset_handlers( $t->{twig_starttag_handlers});
1893 $t->{twig_starttag_handlers}= _set_handlers( $handlers);
1894 return $previous_handlers;
1895 }
1896
1897sub setIgnoreEltsHandler
1898 { my( $t, $path, $action)= @_;
1899 $t->{twig_ignore_elts_handlers}||={};
1900 return _set_handler( $t->{twig_ignore_elts_handlers}, $path, $action );
1901 }
1902
1903sub setIgnoreEltsHandlers
1904 { my( $t, $handlers)= @_;
1905 my $previous_handlers= $t->{twig_ignore_elts_handlers};
1906 _reset_handlers( $t->{twig_ignore_elts_handlers});
1907 $t->{twig_ignore_elts_handlers}= _set_handlers( $handlers);
1908 return $previous_handlers;
1909 }
1910
1911sub setEndTagHandler
1912 { my( $t, $path, $handler)= @_;
1913 $t->{twig_endtag_handlers}||={};
1914 return _set_handler( $t->{twig_endtag_handlers}, $path,$handler);
1915 }
1916
1917sub setEndTagHandlers
1918 { my( $t, $handlers)= @_;
1919 my $previous_handlers= $t->{twig_endtag_handlers};
1920 _reset_handlers( $t->{twig_endtag_handlers});
1921 $t->{twig_endtag_handlers}= _set_handlers( $handlers);
1922 return $previous_handlers;
1923 }
1924
1925# a little more complex: set the twig_handlers only if a code ref is given
1926sub setTwigRoots
19271300ns
# spent 4.78ms (61µs+4.72) within XML::Twig::setTwigRoots which was called: # once (61µs+4.72ms) by XML::Twig::new at line 562
{ my( $t, $handlers)= @_;
19281400ns my $previous_roots= $t->{twig_roots};
192912µs12µs _reset_handlers($t->{twig_roots});
# spent 2µs making 1 call to XML::Twig::_reset_handlers
193014µs12.31ms $t->{twig_roots}= _set_handlers( $handlers);
# spent 2.31ms making 1 call to XML::Twig::_set_handlers
1931
193212µs19µs _check_illegal_twig_roots_handlers( $t->{twig_roots});
# spent 9µs making 1 call to XML::Twig::_check_illegal_twig_roots_handlers
1933
193411µs foreach my $path (keys %{$handlers})
19351018µs { $t->{twig_handlers}||= {};
1936 _set_handler( $t->{twig_handlers}, $path, $handlers->{$path})
19371031µs202.40ms if( ref($handlers->{$path}) && isa( $handlers->{$path}, 'CODE'));
# spent 2.39ms making 10 calls to XML::Twig::_set_handler, avg 239µs/call # spent 6µs making 10 calls to UNIVERSAL::isa, avg 600ns/call
1938 }
193912µs return $previous_roots;
1940 }
1941
1942sub _check_illegal_twig_roots_handlers
19431300ns
# spent 9µs within XML::Twig::_check_illegal_twig_roots_handlers which was called: # once (9µs+0s) by XML::Twig::setTwigRoots at line 1932
{ my( $handlers)= @_;
194412µs foreach my $tag_handlers (values %{$handlers->{xpath_handler}})
1945102µs { foreach my $handler_data (@$tag_handlers)
1946103µs { if( my $type= $handler_data->{test_on_text})
1947 { croak "string() condition not supported on twig_roots option"; }
1948 }
1949 }
195012µs return;
1951 }
1952
1953
1954# just store the reference to the expat object in the twig
1955sub _twig_init
1956
# spent 44µs (33+10) within XML::Twig::_twig_init which was called 7 times, avg 6µs/call: # 7 times (33µs+10µs) by XML::Parser::parse at line 182 of XML/Parser.pm, avg 6µs/call
{ # warn " in _twig_init...\n"; # DEBUG handler
1957
195871µs my $p= shift;
195972µs my $t=$p->{twig};
1960
196172µs if( $t->{twig_parsing} ) { croak "cannot reuse a twig that is already parsing"; }
196272µs $t->{twig_parsing}=1;
1963
196472µs $t->{twig_parser}= $p;
1965712µs74µs if( $weakrefs) { weaken( $t->{twig_parser}); }
# spent 4µs making 7 calls to Scalar::Util::weaken, avg 557ns/call
1966
1967 # in case they had been created by a previous parse
196871µs delete $t->{twig_dtd};
196971µs delete $t->{twig_doctype};
19707900ns delete $t->{twig_xmldecl};
19717600ns delete $t->{twig_root};
1972
1973 # if needed set the output filehandle
197476µs76µs $t->_set_fh_to_twig_output_fh();
# spent 6µs making 7 calls to XML::Twig::_set_fh_to_twig_output_fh, avg 929ns/call
197579µs return;
1976 }
1977
1978# uses eval to catch the parser's death
1979sub safe_parse
1980 { my $t= shift;
1981 eval { $t->parse( @_); } ;
1982 return $@ ? $t->_reset_twig_after_error : $t;
1983 }
1984
1985sub safe_parsefile
1986 { my $t= shift;
1987 eval { $t->parsefile( @_); } ;
1988 return $@ ? $t->_reset_twig_after_error : $t;
1989 }
1990
1991# restore a twig in a proper state so it can be reused for a new parse
1992sub _reset_twig
1993 { my $t= shift;
1994 $t->{twig_parsing}= 0;
1995 delete $t->{twig_current};
1996 delete $t->{extra_data};
1997 delete $t->{twig_dtd};
1998 delete $t->{twig_in_pcdata};
1999 delete $t->{twig_in_cdata};
2000 delete $t->{twig_stored_space};
2001 delete $t->{twig_entity_list};
2002 $t->root->delete if( $t->root);
2003 delete $t->{twig_root};
2004 return $t;
2005 }
2006
2007sub _reset_twig_after_error
2008 { my $t= shift;
2009 $t->_reset_twig;
2010 return undef;
2011 }
2012
2013
2014sub _add_or_discard_stored_spaces
201572873886.7ms
# spent 599ms within XML::Twig::_add_or_discard_stored_spaces which was called 728738 times, avg 822ns/call: # 364369 times (309ms+0s) by XML::Twig::_twig_end at line 2307, avg 849ns/call # 364369 times (290ms+0s) by XML::Twig::_twig_start at line 2047, avg 795ns/call
{ my $t= shift;
2016
2017728738119ms $t->{twig_right_after_root}=0; #XX
2018
2019728738118ms my $current= $t->{twig_current} or return; # ugly hack, with ignore on, twig_current can disappear
20207287311.71s return unless length $t->{twig_stored_spaces};
2021 my $current_gi= $XML::Twig::index2gi[$current->{'gi'}];
2022
2023 if( ! $t->{twig_discard_all_spaces})
2024 { if( ! defined( $t->{twig_space_policy}->{$current_gi}))
2025 { $t->{twig_space_policy}->{$current_gi}= _space_policy( $t, $current_gi); }
2026 if( $t->{twig_space_policy}->{$current_gi} || ($t->{twig_stored_spaces}!~ m{\n}) || $t->{twig_preserve_space})
2027 { _insert_pcdata( $t, $t->{twig_stored_spaces} ); }
2028 }
2029
2030 $t->{twig_stored_spaces}='';
2031
2032 return;
2033 }
2034
2035# the default twig handlers, which build the tree
2036sub _twig_start
2037
# spent 35.2s (9.97+25.2) within XML::Twig::_twig_start which was called 364369 times, avg 97µs/call: # 330576 times (9.05s+23.3s) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm, avg 98µs/call # 33792 times (916ms+1.90s) by XML::Twig::_twig_start_check_roots at line 4147, avg 83µs/call # once (33µs+203µs) by XML::Twig::_twig_start_check_roots at line 4162
{ # warn " in _twig_start...\n"; # DEBUG handler
2038
2039 #foreach my $s (@_) { next if ref $s; warn "$s: ", is_utf8( $s) ? "has flag" : "FLAG NOT SET"; } # YYY
2040
2041364369193ms my ($p, $gi, @att)= @_;
204236436963.7ms my $t=$p->{twig};
2043
2044 # empty the stored pcdata (space stored in case they are really part of
2045 # a pcdata element) or stored it if the space policy dictates so
2046 # create a pcdata element with the spaces if need be
2047364369159ms364369290ms _add_or_discard_stored_spaces( $t);
# spent 290ms making 364369 calls to XML::Twig::_add_or_discard_stored_spaces, avg 795ns/call
204836436940.8ms my $parent= $t->{twig_current};
2049
2050 # if we were parsing PCDATA then we exit the pcdata
205136436954.3ms if( $t->{twig_in_pcdata})
2052 { $t->{twig_in_pcdata}= 0;
2053 delete $parent->{'twig_current'};
2054 $parent= $parent->{parent};
2055 }
2056
2057 # if we choose to keep the encoding then we need to parse the tag
205836436997.0ms if( my $func = $t->{parse_start_tag})
2059 { ($gi, @att)= &$func($p->original_string); }
2060 elsif( $t->{twig_entities_in_attribute})
2061 {
2062 ($gi,@att)= _parse_start_tag( $p->recognized_string);
2063 $t->{twig_entities_in_attribute}=0;
2064 }
2065
2066 # if we are using an external DTD, we need to fill the default attributes
206736436948.0ms if( $t->{twig_read_external_dtd}) { _fill_default_atts( $t, $gi, \@att); }
2068
2069 # filter the input data if need be
207036436972.0ms if( my $filter= $t->{twig_input_filter})
2071 { $gi= $filter->( $gi);
2072 foreach my $att (@att) { $att= $filter->($att); }
2073 }
2074
207536436928.0ms my $ns_decl;
2076364369272ms36436919.6s if( $t->{twig_map_xmlns})
# spent 19.6s making 364369 calls to XML::Twig::_replace_ns, avg 54µs/call
2077 { $ns_decl= _replace_ns( $t, \$gi, \@att); }
2078
2079364369340ms3643691.82s my $elt= $t->{twig_elt_class}->new( $gi);
# spent 1.82s making 364369 calls to XML::Twig::Elt::new, avg 5µs/call
2080364369229ms3643691.69s $elt->set_atts( @att);
# spent 1.69s making 364369 calls to XML::Twig::Elt::set_atts, avg 5µs/call
2081
2082 # now we can store the tag and atts
2083364369360ms my $context= { $ST_TAG => $gi, $ST_ELT => $elt, @att};
208436436935.4ms $context->{$ST_NS}= $ns_decl if $ns_decl;
2085364369813ms364369122ms if( $weakrefs) { weaken( $context->{$ST_ELT}); }
# spent 122ms making 364369 calls to Scalar::Util::weaken, avg 334ns/call
2086364369108ms push @{$t->{_twig_context_stack}}, $context;
2087
208836436992.5ms delete $parent->{'twig_current'} if( $parent);
208936436965.4ms $t->{twig_current}= $elt;
209036436978.5ms $elt->{'twig_current'}=1;
2091
209236436971.1ms if( $parent)
209336436261.4ms { my $prev_sibling= $parent->{last_child};
209436436245.9ms if( $prev_sibling)
209518752940.1ms { $prev_sibling->{next_sibling}= $elt;
2096375058355ms18752923.1ms $elt->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
# spent 23.1ms making 187529 calls to Scalar::Util::weaken, avg 123ns/call
2097 }
2098
2099728724868ms36436263.4ms $elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
# spent 63.4ms making 364362 calls to Scalar::Util::weaken, avg 174ns/call
210036436289.6ms unless( $parent->{first_child}) { $parent->{first_child}= $elt; }
21011093086820ms36436276.1ms delete $parent->{empty}; $parent->{last_child}=$elt; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ;
# spent 76.1ms making 364362 calls to Scalar::Util::weaken, avg 209ns/call
2102 }
2103 else
2104 { # processing root
210577µs724µs $t->set_root( $elt);
# spent 24µs making 7 calls to XML::Twig::set_root, avg 3µs/call
2106 # call dtd handler if need be
2107 $t->{twig_dtd_handler}->($t, $t->{twig_dtd})
210872µs if( defined $t->{twig_dtd_handler});
2109
2110 # set this so we can catch external entities
2111 # (the handler was modified during DTD processing)
211276µs19µs if( $t->{twig_default_print})
# spent 9µs making 1 call to XML::Parser::Expat::setHandlers
2113 { $p->setHandlers( Default => \&_twig_print); }
2114 elsif( $t->{twig_roots})
2115 { $p->setHandlers( Default => sub { return }); }
2116 else
211765µs630µs { $p->setHandlers( Default => \&_twig_default); }
# spent 30µs making 6 calls to XML::Parser::Expat::setHandlers, avg 5µs/call
2118 }
2119
21203643691.08s7287381.53s $elt->{empty}= $p->recognized_string=~ m{/\s*>$}s ? 1 : 0;
# spent 1.31s making 364369 calls to XML::Parser::Expat::recognized_string, avg 4µs/call # spent 216ms making 364369 calls to CORE::match, avg 593ns/call
2121
212236436959.7ms $elt->{extra_data}= $t->{extra_data} if( $t->{extra_data});
212336436977.8ms $t->{extra_data}='';
2124
2125 # if the element is ID-ed then store that info
212636436966.5ms my $id= $elt->{'att'}->{$ID};
212736436950.2ms if( defined $id)
2128 { $t->{twig_id_list}->{$id}= $elt;
2129 if( $weakrefs) { weaken( $t->{twig_id_list}->{$id}); }
2130 }
2131
2132 # call user handler if need be
213336436954.6ms if( $t->{twig_starttag_handlers})
2134 { # call all appropriate handlers
2135 my @handlers= _handler( $t, $t->{twig_starttag_handlers}, $gi);
2136
2137 local $_= $elt;
2138
2139 foreach my $handler ( @handlers)
2140 { $handler->($t, $elt) || last; }
2141 # call _all_ handler if needed
2142 if( my $all= $t->{twig_starttag_handlers}->{handlers}->{$ALL})
2143 { $all->($t, $elt); }
2144 }
2145
2146 # check if the tag is in the list of tags to be ignored
214736436951.6ms if( $t->{twig_ignore_elts_handlers})
2148 { my @handlers= _handler( $t, $t->{twig_ignore_elts_handlers}, $gi);
2149 # only the first handler counts, it contains the action (discard/print/string)
2150 if( @handlers) { my $action= shift @handlers; $t->ignore( $elt, $action); }
2151 }
2152
215336436952.7ms if( $elt->{'att'}->{'xml:space'} && ( $elt->{'att'}->{'xml:space'} eq 'preserve')) { $t->{twig_preserve_space}++; }
2154
2155
2156364369847ms return;
2157 }
2158
2159sub _replace_ns
216039816771.4ms
# spent 22.1s (5.90+16.2) within XML::Twig::_replace_ns which was called 398167 times, avg 55µs/call: # 364369 times (5.31s+14.3s) by XML::Twig::_twig_start at line 2076, avg 54µs/call # 33798 times (587ms+1.91s) by XML::Twig::_twig_start_check_roots at line 4134, avg 74µs/call
{ my( $t, $gi, $atts)= @_;
216139816728.6ms my $decls;
2162398167474ms796334396ms foreach my $new_prefix ( $t->parser->new_ns_prefixes)
# spent 243ms making 398167 calls to XML::Parser::Expat::new_ns_prefixes, avg 611ns/call # spent 153ms making 398167 calls to XML::Twig::parser, avg 383ns/call
21632824µs5640µs { my $uri= $t->parser->expand_ns_prefix( $new_prefix);
# spent 33µs making 28 calls to XML::Parser::Expat::expand_ns_prefix, avg 1µs/call # spent 7µs making 28 calls to XML::Twig::parser, avg 243ns/call
2164 # replace the prefix if it is mapped
21652811µs $decls->{$new_prefix}= $uri;
2166285µs if( !$t->{twig_keep_original_prefix} && (my $mapped_prefix= $t->{twig_map_xmlns}->{$uri}))
2167 { $new_prefix= $mapped_prefix; }
2168 # now put the namespace declaration back in the element
21692816µs if( $new_prefix eq '#default')
2170 { push @$atts, "xmlns" => $uri; }
2171 else
21722211µs { push @$atts, "xmlns:$new_prefix" => $uri; }
2173 }
2174
217539816792.8ms if( $t->{twig_keep_original_prefix})
2176 { # things become more complex: we need to find the original prefix
2177 # and store both prefixes
2178398167251ms39816711.3s my $ns_info= $t->_ns_info( $$gi);
# spent 11.3s making 398167 calls to XML::Twig::_ns_info, avg 28µs/call
217939816728.1ms my $map_att;
2180398167104ms if( $ns_info->{mapped_prefix})
2181364375151ms { $$gi= "$ns_info->{mapped_prefix}:$$gi";
2182364375170ms $map_att->{$ns_info->{mapped_prefix}}= $ns_info->{prefix};
2183 }
218439816746.5ms my $att_name=1;
2185398167148ms foreach( @$atts)
21861395024399ms { if( $att_name)
2187 {
2188697512272ms6975124.50s my $ns_info= $t->_ns_info( $_);
# spent 4.50s making 697512 calls to XML::Twig::_ns_info, avg 6µs/call
218969751276.6ms if( $ns_info->{mapped_prefix})
2190156208.03ms { $_= "$ns_info->{mapped_prefix}:$_";
2191156209.58ms $map_att->{$ns_info->{mapped_prefix}}= $ns_info->{prefix};
2192 }
2193697512168ms $att_name=0;
2194 }
2195 else
219669751250.5ms { $att_name=1; }
2197 }
2198398167227ms push @$atts, '#original_gi', $map_att if( $map_att);
2199 }
2200 else
2201 { $$gi= $t->_replace_prefix( $$gi);
2202 my $att_name=1;
2203 foreach( @$atts)
2204 { if( $att_name) { $_= $t->_replace_prefix( $_); $att_name=0; }
2205 else { $att_name=1; }
2206 }
2207 }
2208398167785ms return $decls;
2209 }
2210
2211
2212# extract prefix, local_name, uri, mapped_prefix from a name
2213# will only work if called from a start or end tag handler
2214sub _ns_info
22151095679164ms
# spent 15.8s (6.34+9.44) within XML::Twig::_ns_info which was called 1095679 times, avg 14µs/call: # 697512 times (3.26s+1.24s) by XML::Twig::_replace_ns at line 2188, avg 6µs/call # 398167 times (3.09s+8.20s) by XML::Twig::_replace_ns at line 2178, avg 28µs/call
{ my( $t, $name)= @_;
2216109567987.4ms my $ns_info={};
22171095679414ms1095679254ms my $p= $t->parser;
# spent 254ms making 1095679 calls to XML::Twig::parser, avg 231ns/call
22181095679631ms10956791.29s $ns_info->{uri}= $p->namespace( $name);
# spent 1.29s making 1095679 calls to XML::Parser::Expat::namespace, avg 1µs/call
221910956791.40s return $ns_info unless( $ns_info->{uri});
2220
2221379995331ms3799957.90s $ns_info->{prefix}= _a_proper_ns_prefix( $p, $ns_info->{uri});
# spent 7.90s making 379995 calls to XML::Twig::_a_proper_ns_prefix, avg 21µs/call
2222379995234ms $ns_info->{mapped_prefix}= $t->{twig_map_xmlns}->{$ns_info->{uri}} || $ns_info->{prefix};
2223
2224379995688ms return $ns_info;
2225 }
2226
2227sub _a_proper_ns_prefix
222838000167.4ms
# spent 7.90s (5.08+2.82) within XML::Twig::_a_proper_ns_prefix which was called 380001 times, avg 21µs/call: # 379995 times (5.08s+2.82s) by XML::Twig::_ns_info at line 2221, avg 21µs/call # 6 times (37µs+48µs) by XML::Twig::_replace_prefix at line 2434, avg 14µs/call
{ my( $p, $uri)= @_;
2229380001226ms3800011.51s foreach my $prefix ($p->current_ns_prefixes)
# spent 1.51s making 380001 calls to XML::Parser::Expat::current_ns_prefixes, avg 4µs/call
223015206611.66s15206611.31s { if( $p->expand_ns_prefix( $prefix) eq $uri)
# spent 1.31s making 1520661 calls to XML::Parser::Expat::expand_ns_prefix, avg 864ns/call
2231 { return $prefix; }
2232 }
2233 return;
2234 }
2235
2236# returns the uri bound to a prefix in the original document
2237# only works in a handler
2238# can be used to deal with xsi:type attributes
2239sub original_uri
2240 { my( $t, $prefix)= @_;
2241 my $ST_NS = '##ns' ;
2242 foreach my $ns (map { $_->{$ST_NS} if $_->{$ST_NS} } reverse @{$t->{_twig_context_stack}})
2243 { return $ns->{$prefix} || next; }
2244 return;
2245 }
2246
2247
2248sub _fill_default_atts
2249 { my( $t, $gi, $atts)= @_;
2250 my $dtd= $t->{twig_dtd};
2251 my $attlist= $dtd->{att}->{$gi};
2252 my %value= @$atts;
2253 foreach my $att (keys %$attlist)
2254 { if( !exists( $value{$att})
2255 && exists( $attlist->{$att}->{default})
2256 && ( $attlist->{$att}->{default} ne '#IMPLIED')
2257 )
2258 { # the quotes are included in the default, so we need to remove them
2259 my $default_value= substr( $attlist->{$att}->{default}, 1, -1);
2260 push @$atts, $att, $default_value;
2261 }
2262 }
2263 return;
2264 }
2265
2266
2267# the default function to parse a start tag (in keep_encoding mode)
2268# can be overridden with the parse_start_tag method
2269# only works for 1-byte character sets
2270sub _parse_start_tag
2271 { my $string= shift;
2272 my( $gi, @atts);
2273
2274 # get the gi (between < and the first space, / or > character)
2275 #if( $string=~ s{^<\s*([^\s>/]*)[\s>/]*}{}s)
2276 if( $string=~ s{^<\s*($REG_TAG_NAME)\s*[\s>/]}{}s)
2277 { $gi= $1; }
2278 else
2279 { croak "error parsing tag '$string'"; }
2280 while( $string=~ s{^([^\s=]*)\s*=\s*(["'])(.*?)\2\s*}{}s)
2281 { push @atts, $1, $3; }
2282 return $gi, @atts;
2283 }
2284
2285sub set_root
228672µs
# spent 24µs (22+2) within XML::Twig::set_root which was called 7 times, avg 3µs/call: # 7 times (22µs+2µs) by XML::Twig::_twig_start at line 2105, avg 3µs/call
{ my( $t, $elt)= @_;
228773µs $t->{twig_root}= $elt;
228872µs if( $elt)
228973µs { $elt->{twig}= $t;
2290711µs72µs if( $weakrefs) { weaken( $elt->{twig}); }
# spent 2µs making 7 calls to Scalar::Util::weaken, avg 329ns/call
2291 }
229279µs return $t;
2293 }
2294
2295sub _twig_end
2296
# spent 25.4s (5.66+19.7) within XML::Twig::_twig_end which was called 364369 times, avg 70µs/call: # 364368 times (5.66s+19.7s) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm, avg 70µs/call # once (11µs+10µs) by XML::Twig::_twig_end_check_roots at line 4216
{ # warn " in _twig_end...\n"; # DEBUG handler
229736436959.5ms my ($p, $gi) = @_;
2298
229936436962.8ms my $t=$p->{twig};
2300
230136436990.0ms if( $t->{twig_in_pcdata} && (my $text_handler= $t->{TwigHandlers}->{$TEXT}) )
2302 { local $_= $t->{twig_current}; $text_handler->( $t, $_) if $_;
2303 }
2304
2305364369233ms3643692.69s if( $t->{twig_map_xmlns}) { $gi= $t->_replace_prefix( $gi); }
# spent 2.69s making 364369 calls to XML::Twig::_replace_prefix, avg 7µs/call
2306
2307364369156ms364369309ms _add_or_discard_stored_spaces( $t);
# spent 309ms making 364369 calls to XML::Twig::_add_or_discard_stored_spaces, avg 849ns/call
2308
2309 # the new twig_current is the parent
231036436945.4ms my $elt= $t->{twig_current};
231136436952.8ms delete $elt->{'twig_current'};
2312
2313 # if we were parsing PCDATA then we exit the pcdata too
231436436971.4ms if( $t->{twig_in_pcdata})
2315 {
231612729219.8ms $t->{twig_in_pcdata}= 0;
231712729231.3ms $elt= $elt->{parent} if($elt->{parent});
231812729218.4ms delete $elt->{'twig_current'};
2319 }
2320
2321 # parent is the new current element
232236436948.0ms my $parent= $elt->{parent};
232336436945.0ms $t->{twig_current}= $parent;
2324
232536436962.2ms if( $parent)
232636436272.2ms { $parent->{'twig_current'}=1;
2327 # twig_to_be_normalized
232836436259.3ms if( $parent->{twig_to_be_normalized}) { $parent->normalize; $parent->{twig_to_be_normalized}=0; }
2329 }
2330
233136436947.4ms if( $t->{extra_data})
2332 { $elt->_set_extra_data_before_end_tag( $t->{extra_data});
2333 $t->{extra_data}='';
2334 }
2335
233636436982.5ms if( $t->{twig_handlers})
2337 { # look for handlers
2338364007205ms3640071.05s my @handlers= _handler( $t, $t->{twig_handlers}, $gi);
# spent 1.05s making 364007 calls to XML::Twig::_handler, avg 3µs/call
2339
2340364007117ms if( $t->{twig_tdh})
2341 { if( @handlers) { push @{$t->{twig_handlers_to_trigger}}, [ $elt, \@handlers ]; }
2342 if( my $all= $t->{twig_handlers}->{handlers}->{$ALL})
2343 { push @{$t->{twig_handlers_to_trigger}}, [ $elt, [$all] ]; }
2344 }
2345 else
2346 {
234736400746.9ms local $_= $elt; # so we can use $_ in the handlers
2348
234936400794.6ms foreach my $handler ( @handlers)
23503380731.1ms3380713.8s { $handler->($t, $elt) || last; }
2351 # call _all_ handler if needed
235236400788.1ms my $all= $t->{twig_handlers}->{handlers}->{$ALL};
235336400732.0ms if( $all)
2354 { $all->($t, $elt); }
235536400775.5ms if( @handlers || $all) { $t->{twig_right_after_root}=0; }
2356 }
2357 }
2358
2359 # if twig_roots is set for the element then set appropriate handler
2360364369269ms363976180ms if( $t->{twig_root_depth} and ($p->depth == $t->{twig_root_depth}) )
# spent 180ms making 363976 calls to XML::Parser::Expat::depth, avg 494ns/call
2361337928.14ms { if( $t->{twig_default_print})
2362 { # select the proper fh (and store the currently selected one)
2363 $t->_set_fh_to_twig_output_fh();
2364 if( !$p->depth==1) { $t->{twig_right_after_root}=1; } #XX
2365 if( $t->{twig_keep_encoding})
2366 { $p->setHandlers( %twig_handlers_roots_print_original); }
2367 else
2368 { $p->setHandlers( %twig_handlers_roots_print); }
2369 }
2370 else
23713379250.0ms337921.66s { $p->setHandlers( %twig_handlers_roots); }
# spent 1.66s making 33792 calls to XML::Parser::Expat::setHandlers, avg 49µs/call
2372 }
2373
237436436962.4ms if( $elt->{'att'}->{'xml:space'} && ( $elt->{'att'}->{'xml:space'} eq 'preserve')) { $t->{twig_preserve_space}--; }
2375
2376364369271ms pop @{$t->{_twig_context_stack}};
2377364369995ms return;
2378 }
2379
2380sub _trigger_tdh
2381 { my( $t)= @_;
2382
2383 if( @{$t->{twig_handlers_to_trigger}})
2384 { my @handlers_to_trigger_now= sort { $a->[0]->cmp( $b->[0]) } @{$t->{twig_handlers_to_trigger}};
2385 foreach my $elt_handlers (@handlers_to_trigger_now)
2386 { my( $handled_elt, $handlers_to_trigger)= @$elt_handlers;
2387 foreach my $handler ( @$handlers_to_trigger)
2388 { local $_= $handled_elt; $handler->($t, $handled_elt) || last; }
2389 }
2390 }
2391 return;
2392 }
2393
2394# return the list of handler that can be activated for an element
2395# (either of CODE ref's or 1's for twig_roots)
2396
2397sub _handler
239839780678.9ms
# spent 1.46s (1.18+285ms) within XML::Twig::_handler which was called 397806 times, avg 4µs/call: # 364007 times (908ms+145ms) by XML::Twig::_twig_end at line 2338, avg 3µs/call # 33799 times (269ms+139ms) by XML::Twig::_twig_start_check_roots at line 4143, avg 12µs/call
{ my( $t, $handlers, $gi)= @_;
2399
240039780663.4ms my @found_handlers=();
240139780627.9ms my $found_handler;
2402
2403397806353ms foreach my $handler ( map { @$_ } grep { $_ } $handlers->{xpath_handler}->{$gi}, $handlers->{xpath_handler}->{'*'})
24046759915.3ms { my $trigger= $handler->{trigger};
24056759975.2ms67599285ms if( my $found_path= $trigger->( $t->{_twig_context_stack}))
# spent 149ms making 31216 calls to XML::Twig::__ANON__[(eval 114)[XML/Twig.pm:1750]:26], avg 5µs/call # spent 136ms making 36360 calls to XML::Twig::__ANON__[(eval 109)[XML/Twig.pm:1750]:26], avg 4µs/call # spent 41µs making 15 calls to XML::Twig::__ANON__[(eval 102)[XML/Twig.pm:1750]:17], avg 3µs/call # spent 22µs making 4 calls to XML::Twig::__ANON__[(eval 106)[XML/Twig.pm:1750]:17], avg 6µs/call # spent 12µs making 2 calls to XML::Twig::__ANON__[(eval 111)[XML/Twig.pm:1750]:17], avg 6µs/call # spent 12µs making 2 calls to XML::Twig::__ANON__[(eval 110)[XML/Twig.pm:1750]:17], avg 6µs/call
24066759910.7ms { my $found_handler= $handler->{handler};
24076759912.7ms push @found_handlers, $found_handler;
2408 }
2409 }
2410
2411 # if no handler found call default handler if defined
2412397806115ms if( !@found_handlers && defined $handlers->{handlers}->{$DEFAULT})
2413 { push @found_handlers, $handlers->{handlers}->{$DEFAULT}; }
2414
241539780642.0ms if( @found_handlers and $t->{twig_do_not_chain_handlers})
2416 { @found_handlers= ($found_handlers[0]); }
2417
2418397806706ms return @found_handlers; # empty if no handler found
2419
2420 }
2421
2422
2423sub _replace_prefix
242436436954.4ms
# spent 2.69s (2.12+567ms) within XML::Twig::_replace_prefix which was called 364369 times, avg 7µs/call: # 364369 times (2.12s+567ms) by XML::Twig::_twig_end at line 2305, avg 7µs/call
{ my( $t, $name)= @_;
2425364369196ms364369118ms my $p= $t->parser;
# spent 118ms making 364369 calls to XML::Twig::parser, avg 325ns/call
2426364369185ms364369448ms my $uri= $p->namespace( $name);
# spent 448ms making 364369 calls to XML::Parser::Expat::namespace, avg 1µs/call
2427 # try to get the namespace from default if none is found (for attributes)
2428 # this should probably be an option
242936436947.1ms if( !$uri and( $name!~/^xml/)) { $uri= $p->expand_ns_prefix( '#default'); }
243036436943.6ms if( $uri)
24313643691.02s { if (my $mapped_prefix= $t->{twig_map_xmlns}->{$uri} || $DEFAULT_URI2NS{$uri})
2432 { return "$mapped_prefix:$name"; }
2433 else
243465µs684µs { my $prefix= _a_proper_ns_prefix( $p, $uri);
# spent 84µs making 6 calls to XML::Twig::_a_proper_ns_prefix, avg 14µs/call
243561µs if( $prefix eq '#default') { $prefix=''; }
2436610µs return $prefix ? "$prefix:$name" : $name;
2437 }
2438 }
2439 else
2440 { return $name; }
2441 }
2442
2443
2444sub _twig_char
2445
# spent 1.91s (829ms+1.09) within XML::Twig::_twig_char which was called 127292 times, avg 15µs/call: # 127292 times (829ms+1.09s) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm, avg 15µs/call
{ # warn " in _twig_char...\n"; # DEBUG handler
2446
244712729221.3ms my ($p, $string)= @_;
244812729223.7ms my $t=$p->{twig};
2449
245012729223.8ms if( $t->{twig_keep_encoding})
2451 { if( !$t->{twig_in_cdata})
2452 { $string= $p->original_string(); }
2453 else
2454 {
245523.66ms212µs
# spent 10µs (8+2) within XML::Twig::BEGIN@2455 which was called: # once (8µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 2455
use bytes; # > perl 5.5
# spent 10µs making 1 call to XML::Twig::BEGIN@2455 # spent 2µs making 1 call to bytes::import
2456 if( length( $string) < 1024)
2457 { $string= $p->original_string(); }
2458 else
2459 { #warn "dodgy case";
2460 # TODO original_string does not hold the entire string, but $string is wrong
2461 # I believe due to a bug in XML::Parser
2462 # for now, we use the original string, even if it means that it's been converted to utf8
2463 }
2464 }
2465 }
2466
246712729222.3ms if( $t->{twig_input_filter}) { $string= $t->{twig_input_filter}->( $string); }
246812729219.5ms if( $t->{twig_char_handler}) { $string= $t->{twig_char_handler}->( $string); }
2469
247012729217.9ms my $elt= $t->{twig_current};
2471
247212729239.7ms if( $t->{twig_in_cdata})
2473 { # text is the continuation of a previously created cdata
2474 $elt->{cdata}.= $t->{twig_stored_spaces} . $string;
2475 }
2476 elsif( $t->{twig_in_pcdata})
2477 { # text is the continuation of a previously created pcdata
2478 if( $t->{extra_data})
2479 { $elt->_push_extra_data_in_pcdata( $t->{extra_data}, length( $elt->{pcdata}));
2480 $t->{extra_data}='';
2481 }
2482 $elt->{pcdata}.= $string;
2483 }
2484 else
2485 {
2486 # text is just space, which might be discarded later
2487127292298ms12729280.4ms if( $string=~/\A\s*\Z/s)
# spent 80.4ms making 127292 calls to CORE::match, avg 632ns/call
2488 {
2489 if( $t->{extra_data})
2490 { # we got extra data (comment, pi), lets add the spaces to it
2491 $t->{extra_data} .= $string;
2492 }
2493 else
2494 { # no extra data, just store the spaces
2495 $t->{twig_stored_spaces}.= $string;
2496 }
2497 }
2498 else
2499127292123ms1272921.00s { my $new_elt= _insert_pcdata( $t, $t->{twig_stored_spaces}.$string);
# spent 1.00s making 127292 calls to XML::Twig::_insert_pcdata, avg 8µs/call
250012729216.4ms delete $elt->{'twig_current'};
250112729222.4ms $new_elt->{'twig_current'}=1;
250212729218.4ms $t->{twig_current}= $new_elt;
250312729220.3ms $t->{twig_in_pcdata}=1;
250412729228.9ms if( $t->{extra_data})
2505 { $new_elt->_push_extra_data_in_pcdata( $t->{extra_data}, 0);
2506 $t->{extra_data}='';
2507 }
2508 }
2509 }
2510127292243ms return;
2511 }
2512
2513sub _twig_cdatastart
2514 { # warn " in _twig_cdatastart...\n"; # DEBUG handler
2515
2516 my $p= shift;
2517 my $t=$p->{twig};
2518
2519 $t->{twig_in_cdata}=1;
2520 my $cdata= $t->{twig_elt_class}->new( $CDATA);
2521 my $twig_current= $t->{twig_current};
2522
2523 if( $t->{twig_in_pcdata})
2524 { # create the node as a sibling of the PCDATA
2525 $cdata->{prev_sibling}=$twig_current; if( $XML::Twig::weakrefs) { weaken( $cdata->{prev_sibling});} ;
2526 $twig_current->{next_sibling}= $cdata;
2527 my $parent= $twig_current->{parent};
2528 $cdata->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $cdata->{parent});} ;
2529 delete $parent->{empty}; $parent->{last_child}=$cdata; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ;
2530 $t->{twig_in_pcdata}=0;
2531 }
2532 else
2533 { # we have to create a PCDATA element if we need to store spaces
2534 if( $t->_space_policy($XML::Twig::index2gi[$twig_current->{'gi'}]) && $t->{twig_stored_spaces})
2535 { _insert_pcdata( $t, $t->{twig_stored_spaces}); }
2536 $t->{twig_stored_spaces}='';
2537
2538 # create the node as a child of the current element
2539 $cdata->{parent}=$twig_current; if( $XML::Twig::weakrefs) { weaken( $cdata->{parent});} ;
2540 if( my $prev_sibling= $twig_current->{last_child})
2541 { $cdata->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $cdata->{prev_sibling});} ;
2542 $prev_sibling->{next_sibling}= $cdata;
2543 }
2544 else
2545 { $twig_current->{first_child}= $cdata; }
2546 delete $twig_current->{empty}; $twig_current->{last_child}=$cdata; if( $XML::Twig::weakrefs) { weaken( $twig_current->{last_child});} ;
2547
2548 }
2549
2550 delete $twig_current->{'twig_current'};
2551 $t->{twig_current}= $cdata;
2552 $cdata->{'twig_current'}=1;
2553 if( $t->{extra_data}) { $cdata->set_extra_data( $t->{extra_data}); $t->{extra_data}='' };
2554 return;
2555 }
2556
2557sub _twig_cdataend
2558 { # warn " in _twig_cdataend...\n"; # DEBUG handler
2559
2560 my $p= shift;
2561 my $t=$p->{twig};
2562
2563 $t->{twig_in_cdata}=0;
2564
2565 my $elt= $t->{twig_current};
2566 delete $elt->{'twig_current'};
2567 my $cdata= $elt->{cdata};
2568 $elt->{cdata}= $cdata;
2569
2570 push @{$t->{_twig_context_stack}}, { $ST_TAG => $CDATA };
2571
2572 if( $t->{twig_handlers})
2573 { # look for handlers
2574 my @handlers= _handler( $t, $t->{twig_handlers}, $CDATA);
2575 local $_= $elt; # so we can use $_ in the handlers
2576 foreach my $handler ( @handlers) { $handler->($t, $elt) || last; }
2577 }
2578
2579 pop @{$t->{_twig_context_stack}};
2580
2581 $elt= $elt->{parent};
2582 $t->{twig_current}= $elt;
2583 $elt->{'twig_current'}=1;
2584
2585 $t->{twig_long_cdata}=0;
2586 return;
2587 }
2588
2589sub _pi_elt_handlers
2590 { my( $t, $pi)= @_;
2591 my $pi_handlers= $t->{twig_handlers}->{pi_handlers} || return;
2592 foreach my $handler ( $pi_handlers->{$pi->{target}}, $pi_handlers->{''})
2593 { if( $handler) { local $_= $pi; $handler->( $t, $pi) || last; } }
2594 }
2595
2596sub _pi_text_handler
2597 { my( $t, $target, $data)= @_;
2598 if( my $handler= $t->{twig_handlers}->{pi_handlers}->{$target})
2599 { return $handler->( $t, $target, $data); }
2600 if( my $handler= $t->{twig_handlers}->{pi_handlers}->{''})
2601 { return $handler->( $t, $target, $data); }
2602 return defined( $data) && $data ne '' ? "<?$target $data?>" : "<?$target?>" ;
2603 }
2604
2605sub _comment_elt_handler
2606 { my( $t, $comment)= @_;
2607 if( my $handler= $t->{twig_handlers}->{handlers}->{$COMMENT})
2608 { local $_= $comment; $handler->($t, $comment); }
2609 }
2610
2611sub _comment_text_handler
2612 { my( $t, $comment)= @_;
2613 if( my $handler= $t->{twig_handlers}->{handlers}->{$COMMENT})
2614 { $comment= $handler->($t, $comment);
2615 if( !defined $comment || $comment eq '') { return ''; }
2616 }
2617 return "<!--$comment-->";
2618 }
2619
- -
2622sub _twig_comment
2623 { # warn " in _twig_comment...\n"; # DEBUG handler
2624
2625 my( $p, $comment_text)= @_;
2626 my $t=$p->{twig};
2627
2628 if( $t->{twig_keep_encoding}) { $comment_text= substr( $p->original_string(), 4, -3); }
2629
2630 $t->_twig_pi_comment( $p, $COMMENT, $t->{twig_keep_comments}, $t->{twig_process_comments},
2631 '_set_comment', '_comment_elt_handler', '_comment_text_handler', $comment_text
2632 );
2633 return;
2634 }
2635
2636sub _twig_pi
2637 { # warn " in _twig_pi...\n"; # DEBUG handler
2638
2639 my( $p, $target, $data)= @_;
2640 my $t=$p->{twig};
2641
2642 if( $t->{twig_keep_encoding})
2643 { my $pi_text= substr( $p->original_string(), 2, -2);
2644 ($target, $data)= split( /\s+/, $pi_text, 2);
2645 }
2646
2647 $t->_twig_pi_comment( $p, $PI, $t->{twig_keep_pi}, $t->{twig_process_pi},
2648 '_set_pi', '_pi_elt_handlers', '_pi_text_handler', $target, $data
2649 );
2650 return;
2651 }
2652
2653sub _twig_pi_comment
2654 { my( $t, $p, $type, $keep, $process, $set, $elt_handler, $text_handler, @parser_args)= @_;
2655
2656 if( $t->{twig_input_filter})
2657 { foreach my $arg (@parser_args) { $arg= $t->{twig_input_filter}->( $arg); } }
2658
2659 # if pi/comments are to be kept then we piggyback them to the current element
2660 if( $keep)
2661 { # first add spaces
2662 if( $t->{twig_stored_spaces})
2663 { $t->{extra_data}.= $t->{twig_stored_spaces};
2664 $t->{twig_stored_spaces}= '';
2665 }
2666
2667 my $extra_data= $t->$text_handler( @parser_args);
2668 $t->{extra_data}.= $extra_data;
2669
2670 }
2671 elsif( $process)
2672 {
2673 my $twig_current= $t->{twig_current}; # defined unless we are outside of the root
2674
2675 my $elt= $t->{twig_elt_class}->new( $type);
2676 $elt->$set( @parser_args);
2677 if( $t->{extra_data})
2678 { $elt->set_extra_data( $t->{extra_data});
2679 $t->{extra_data}='';
2680 }
2681
2682 unless( $t->root)
2683 { $t->_add_cpi_outside_of_root( leading_cpi => $elt);
2684 }
2685 elsif( $t->{twig_in_pcdata})
2686 { # create the node as a sibling of the PCDATA
2687 $elt->paste_after( $twig_current);
2688 $t->{twig_in_pcdata}=0;
2689 }
2690 elsif( $twig_current)
2691 { # we have to create a PCDATA element if we need to store spaces
2692 if( $t->_space_policy($XML::Twig::index2gi[$twig_current->{'gi'}]) && $t->{twig_stored_spaces})
2693 { _insert_pcdata( $t, $t->{twig_stored_spaces}); }
2694 $t->{twig_stored_spaces}='';
2695 # create the node as a child of the current element
2696 $elt->paste_last_child( $twig_current);
2697 }
2698 else
2699 { $t->_add_cpi_outside_of_root( trailing_cpi => $elt); }
2700
2701 if( $twig_current)
2702 { delete $twig_current->{'twig_current'};
2703 my $parent= $elt->{parent};
2704 $t->{twig_current}= $parent;
2705 $parent->{'twig_current'}=1;
2706 }
2707
2708 $t->$elt_handler( $elt);
2709 }
2710
2711 }
2712
2713
2714# add a comment or pi before the first element
2715sub _add_cpi_outside_of_root
2716 { my($t, $type, $elt)= @_; # $type is 'leading_cpi' or 'trailing_cpi'
2717 $t->{$type} ||= $t->{twig_elt_class}->new( '#CPI');
2718 # create the node as a child of the current element
2719 $elt->paste_last_child( $t->{$type});
2720 return $t;
2721 }
2722
2723sub _twig_final
2724
# spent 88µs (65+23) within XML::Twig::_twig_final which was called 7 times, avg 13µs/call: # 7 times (65µs+23µs) by XML::Parser::parse at line 199 of XML/Parser.pm, avg 13µs/call
{ # warn " in _twig_final...\n"; # DEBUG handler
2725
272671µs my $p= shift;
2727725µs712µs my $t= $p->isa( 'XML::Twig') ? $p : $p->{twig};
# spent 12µs making 7 calls to UNIVERSAL::isa, avg 2µs/call
2728
2729 # store trailing data
273072µs if( $t->{extra_data}) { $t->{trailing_cpi_text} = $t->{extra_data}; $t->{extra_data}=''; }
273175µs $t->{trailing_spaces}= $t->{twig_stored_spaces} || '';
27321413µs73µs my $s= $t->{twig_stored_spaces}; $s=~s{\n}{\\n}g;
# spent 3µs making 7 calls to CORE::subst, avg 386ns/call
273372µs if( $t->{twig_stored_spaces}) { my $s= $t->{twig_stored_spaces}; }
2734
2735 # restore the selected filehandle if needed
273677µs78µs $t->_set_fh_to_selected_fh();
# spent 8µs making 7 calls to XML::Twig::_set_fh_to_selected_fh, avg 1µs/call
2737
273871µs $t->_trigger_tdh if( $t->{twig_tdh});
2739
274071µs select $t->{twig_original_selected_fh} if($t->{twig_original_selected_fh}); # probably dodgy
2741
274272µs if( exists $t->{twig_autoflush_data})
2743 { my @args;
2744 push @args, $t->{twig_autoflush_data}->{fh} if( $t->{twig_autoflush_data}->{fh});
2745 push @args, @{$t->{twig_autoflush_data}->{args}} if( $t->{twig_autoflush_data}->{args});
2746 $t->flush( @args);
2747 delete $t->{twig_autoflush_data};
2748 $t->root->delete if $t->root;
2749 }
2750
2751 # tries to clean-up (probably not very well at the moment)
2752 #undef $p->{twig};
275373µs undef $t->{twig_parser};
275472µs delete $t->{twig_parsing};
275577µs @{$t}{ qw( twig_parser twig_parsing _twig_context_stack twig_current) }=();
2756
2757712µs return $t;
2758 }
2759
2760sub _insert_pcdata
276112729222.5ms
# spent 1.00s (968ms+36.8ms) within XML::Twig::_insert_pcdata which was called 127292 times, avg 8µs/call: # 127292 times (968ms+36.8ms) by XML::Twig::_twig_char at line 2499, avg 8µs/call
{ my( $t, $string)= @_;
2762 # create a new PCDATA element
276312729218.8ms my $parent= $t->{twig_current}; # always defined
27641272929.94ms my $elt;
276512729232.0ms if( exists $t->{twig_alt_elt_class})
2766 { $elt= $t->{twig_elt_class}->new( $PCDATA);
2767 $elt->{pcdata}= $string;
2768 }
2769 else
2770127292126ms { $elt= bless( { gi => $XML::Twig::gi2index{$PCDATA}, pcdata => $string }, 'XML::Twig::Elt'); }
2771
277212729216.3ms my $prev_sibling= $parent->{last_child};
277312729232.0ms if( $prev_sibling)
2774 { $prev_sibling->{next_sibling}= $elt;
2775 $elt->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
2776 }
2777 else
277812729226.4ms { $parent->{first_child}= $elt; }
2779
2780254584306ms12729222.7ms $elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
# spent 22.7ms making 127292 calls to Scalar::Util::weaken, avg 178ns/call
2781381876311ms12729214.1ms delete $parent->{empty}; $parent->{last_child}=$elt; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ;
# spent 14.1ms making 127292 calls to Scalar::Util::weaken, avg 111ns/call
278212729222.3ms $t->{twig_stored_spaces}='';
2783127292234ms return $elt;
2784 }
2785
2786sub _space_policy
2787 { my( $t, $gi)= @_;
2788 my $policy;
2789 $policy=0 if( $t->{twig_discard_spaces});
2790 $policy=1 if( $t->{twig_keep_spaces});
2791 $policy=1 if( $t->{twig_keep_spaces_in}
2792 && $t->{twig_keep_spaces_in}->{$gi});
2793 $policy=0 if( $t->{twig_discard_spaces_in}
2794 && $t->{twig_discard_spaces_in}->{$gi});
2795 return $policy;
2796 }
2797
2798
2799sub _twig_entity
2800 { # warn " in _twig_entity...\n"; # DEBUG handler
2801 my( $p, $name, $val, $sysid, $pubid, $ndata, $param)= @_;
2802 my $t=$p->{twig};
2803
2804 #{ no warnings; my $base= $p->base; warn "_twig_entity called: expand: '$t->{twig_expand_external_ents}', base: '$base', name: '$name', val: '$val', sysid: '$sysid', pubid: '$pubid', ndata: '$ndata', param: '$param'\n";}
2805
2806 my $missing_entity=0;
2807
2808 if( $sysid)
2809 { if($ndata)
2810 { if( ! -f _based_filename( $sysid, $p->base)) { $missing_entity= 1; }
2811 }
2812 else
2813 { if( $t->{twig_expand_external_ents})
2814 { $val= eval { _slurp_uri( $sysid, $p->base) };
2815 if( ! defined $val)
2816 { if( $t->{twig_extern_ent_nofail})
2817 { $missing_entity= 1; }
2818 else
2819 { _croak( "cannot load SYSTEM entity '$name' from '$sysid': $@", 3); }
2820 }
2821 }
2822 }
2823 }
2824
2825 my $ent=XML::Twig::Entity->new( $name, $val, $sysid, $pubid, $ndata, $param);
2826 if( $missing_entity) { $t->{twig_missing_system_entities}->{$name}= $ent; }
2827
2828 my $entity_list= $t->entity_list;
2829 if( $entity_list) { $entity_list->add( $ent); }
2830
2831 if( $parser_version > 2.27)
2832 { # this is really ugly, but with some versions of XML::Parser the value
2833 # of the entity is not properly returned by the default handler
2834 my $ent_decl= $ent->text;
2835 if( $t->{twig_keep_encoding})
2836 { if( defined $ent->{val} && ($ent_decl !~ /["']/))
2837 { my $val= $ent->{val};
2838 $ent_decl .= $val =~ /"/ ? qq{'$val' } : qq{"$val" };
2839 }
2840 # for my solaris box (perl 5.6.1, XML::Parser 2.31, expat?)
2841 $t->{twig_doctype}->{internal}=~ s{<!ENTITY\s+$name\s+$}{substr( $ent_decl, 0, -1)}e;
2842 }
2843 $t->{twig_doctype}->{internal} .= $ent_decl
2844 unless( $t->{twig_doctype}->{internal}=~ m{<!ENTITY\s+$name\s+});
2845 }
2846
2847 return;
2848 }
2849
2850sub _twig_notation
2851 { my( $p, $name, $base, $sysid, $pubid ) = @_;
2852 my $t = $p->{twig};
2853
2854 my $notation = XML::Twig::Notation->new( $name, $base, $sysid, $pubid );
2855 my $notation_list = $t->notation_list();
2856 if( $notation_list ) { $notation_list->add( $notation ); }
2857
2858 # internal should get the recognized_string, but XML::Parser does not provide it
2859 # so we need to re-create it ( $notation->text) and stick it there.
2860 $t->{twig_doctype}->{internal} .= $notation->text;
2861
2862 return;
2863 }
2864
2865
2866sub _twig_extern_ent
2867 { # warn " in _twig_extern_ent...I (", $_[0]->original_string, ")\n"; # DEBUG handler
2868 my( $p, $base, $sysid, $pubid)= @_;
2869 my $t= $p->{twig};
2870 if( $t->{twig_no_expand})
2871 { my $ent_name= $t->{twig_keep_encoding} ? $p->original_string : $p->recognized_string;
2872 _twig_insert_ent( $t, $ent_name);
2873 return '';
2874 }
2875 my $ent_content= eval { $t->{twig_ext_ent_handler}->( $p, $base, $sysid) };
2876 if( ! defined $ent_content)
2877 {
2878 my $ent_name = $p->recognized_string;
2879 my $file = _based_filename( $sysid, $base);
2880 my $error_message= "cannot expand $ent_name - cannot load '$file'";
2881 if( $t->{twig_extern_ent_nofail}) { return "<!-- $error_message -->"; }
2882 else { _croak( $error_message); }
2883 }
2884 return $ent_content;
2885 }
2886
2887# I use this so I can change the $Carp::CarpLevel (which determines how many call frames to skip when reporting an error)
2888sub _croak
2889 { my( $message, $level)= @_;
2890 $Carp::CarpLevel= $level || 0;
2891 croak $message;
2892 }
2893
2894sub _twig_xmldecl
2895
# spent 32µs within XML::Twig::_twig_xmldecl which was called 7 times, avg 5µs/call: # 7 times (32µs+0s) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm, avg 5µs/call
{ # warn " in _twig_xmldecl...\n"; # DEBUG handler
2896
289772µs my $p= shift;
289873µs my $t=$p->{twig};
289974µs $t->{twig_xmldecl}||={}; # could have been set by set_output_encoding
290076µs $t->{twig_xmldecl}->{version}= shift;
290174µs $t->{twig_xmldecl}->{encoding}= shift;
290273µs $t->{twig_xmldecl}->{standalone}= shift;
2903714µs return;
2904 }
2905
2906sub _twig_doctype
2907 { # warn " in _twig_doctype...\n"; # DEBUG handler
2908 my( $p, $name, $sysid, $pub, $internal)= @_;
2909 my $t=$p->{twig};
2910 $t->{twig_doctype}||= {}; # create
2911 $t->{twig_doctype}->{name}= $name; # always there
2912 $t->{twig_doctype}->{sysid}= $sysid; #
2913 $t->{twig_doctype}->{pub}= $pub; #
2914
2915 # now let's try to cope with XML::Parser 2.28 and above
2916 if( $parser_version > 2.27)
2917 { @saved_default_handler= $p->setHandlers( Default => \&_twig_store_internal_dtd,
2918 Entity => \&_twig_entity,
2919 );
2920 $p->setHandlers( DoctypeFin => \&_twig_stop_storing_internal_dtd);
2921 $t->{twig_doctype}->{internal}='';
2922 }
2923 else
2924 { $internal||='';
2925
2926 $internal=~ s{^\s*\[}{};
2927 $internal=~ s{]\s*$}{};
2928 $t->{twig_doctype}->{internal}=$internal;
2929 }
2930
2931 # now check if we want to get the DTD info
2932 if( $t->{twig_read_external_dtd} && $sysid)
2933 { # let's build a fake document with an internal DTD
2934 if( $t->{DTDBase})
2935 { _use( 'File::Spec');
2936 $sysid=File::Spec->catfile($t->{DTDBase}, $sysid);
2937 }
2938 my $dtd= _slurp_uri( $sysid);
2939 # if the DTD includes an XML declaration, it needs to be moved before the DOCTYPE bit
2940 if( $dtd=~ s{^(\s*<\?xml(\s+\w+\s*=\s*("[^"]*"|'[^']*'))*\s*\?>)}{})
2941 { $dtd= "$1<!DOCTYPE $name [$dtd]><$name/>"; }
2942 else
2943 { $dtd= "<!DOCTYPE $name [$dtd]><$name/>"; }
2944
2945 $t->save_global_state(); # save the globals (they will be reset by the following new)
2946 my $t_dtd= XML::Twig->new( load_DTD => 1, ParseParamEnt => 1, error_context => $t->{ErrorContext} || 0); # create a temp twig
2947 $t_dtd->parse( $dtd); # parse it
2948 $t->{twig_dtd}= $t_dtd->{twig_dtd}; # grab the dtd info
2949 #$t->{twig_dtd_is_external}=1;
2950 $t->entity_list->_add_list( $t_dtd->entity_list) if( $t_dtd->entity_list); # grab the entity info
2951 $t->notation_list->_add_list( $t_dtd->notation_list) if( $t_dtd->notation_list); # grab the notation info
2952 $t->restore_global_state();
2953 }
2954 return;
2955 }
2956
2957sub _twig_element
2958 { # warn " in _twig_element...\n"; # DEBUG handler
2959
2960 my( $p, $name, $model)= @_;
2961 my $t=$p->{twig};
2962 $t->{twig_dtd}||= {}; # may create the dtd
2963 $t->{twig_dtd}->{model}||= {}; # may create the model hash
2964 $t->{twig_dtd}->{elt_list}||= []; # ordered list of elements
2965 push @{$t->{twig_dtd}->{elt_list}}, $name; # store the elt
2966 $t->{twig_dtd}->{model}->{$name}= $model; # store the model
2967 if( ($parser_version > 2.27) && ($t->{twig_doctype}->{internal}=~ m{(^|>)\s*$}) )
2968 { my $text= $XML::Twig::Elt::keep_encoding ? $p->original_string : $p->recognized_string;
2969 unless( $text)
2970 { # this version of XML::Parser does not return the text in the *_string method
2971 # we need to rebuild it
2972 $text= "<!ELEMENT $name $model>";
2973 }
2974 $t->{twig_doctype}->{internal} .= $text;
2975 }
2976 return;
2977 }
2978
2979sub _twig_attlist
2980 { # warn " in _twig_attlist...\n"; # DEBUG handler
2981
2982 my( $p, $gi, $att, $type, $default, $fixed)= @_;
2983 #warn "in attlist: gi: '$gi', att: '$att', type: '$type', default: '$default', fixed: '$fixed'\n";
2984 my $t=$p->{twig};
2985 $t->{twig_dtd}||= {}; # create dtd if need be
2986 $t->{twig_dtd}->{$gi}||= {}; # create elt if need be
2987 #$t->{twig_dtd}->{$gi}->{att}||= {}; # create att if need be
2988 if( ($parser_version > 2.27) && ($t->{twig_doctype}->{internal}=~ m{(^|>)\s*$}) )
2989 { my $text= $XML::Twig::Elt::keep_encoding ? $p->original_string : $p->recognized_string;
2990 unless( $text)
2991 { # this version of XML::Parser does not return the text in the *_string method
2992 # we need to rebuild it
2993 my $att_decl="$att $type";
2994 $att_decl .= " #FIXED" if( $fixed);
2995 $att_decl .= " $default" if( defined $default);
2996 # 2 cases: there is already an attlist on that element or not
2997 if( $t->{twig_dtd}->{att}->{$gi})
2998 { # there is already an attlist, add to it
2999 $t->{twig_doctype}->{internal}=~ s{(<!ATTLIST\s*$gi )(.*?)\n?>}
3000 { "$1$2\n" . ' ' x length( $1) . "$att_decl\n>"}es;
3001 }
3002 else
3003 { # create the attlist
3004 $t->{twig_doctype}->{internal}.= "<!ATTLIST $gi $att_decl>"
3005 }
3006 }
3007 }
3008 $t->{twig_dtd}->{att}->{$gi}->{$att}= {} ;
3009 $t->{twig_dtd}->{att}->{$gi}->{$att}->{type}= $type;
3010 $t->{twig_dtd}->{att}->{$gi}->{$att}->{default}= $default if( defined $default);
3011 $t->{twig_dtd}->{att}->{$gi}->{$att}->{fixed}= $fixed;
3012 return;
3013 }
3014
3015sub _twig_default
3016
# spent 23µs (18+5) within XML::Twig::_twig_default which was called 6 times, avg 4µs/call: # 6 times (18µs+5µs) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm, avg 4µs/call
{ # warn " in _twig_default...\n"; # DEBUG handler
3017
301862µs my( $p, $string)= @_;
3019
302061µs my $t= $p->{twig};
3021
3022 # we need to process the data in 2 cases: entity, or spaces after the closing tag
3023
3024 # after the closing tag (no twig_current and root has been created)
302563µs if( ! $t->{twig_current} && $t->{twig_root} && $string=~ m{^\s+$}m) { $t->{twig_stored_spaces} .= $string; }
3026
3027 # process only if we have an entity
3028619µs65µs if( $string=~ m{^&([^;]*);$})
# spent 5µs making 6 calls to CORE::match, avg 867ns/call
3029 { # the entity has to be pure pcdata, or we have a problem
3030 if( ($p->original_string=~ m{^<}) && ($p->original_string=~ m{>$}) )
3031 { # string is a tag, entity is in an attribute
3032 $t->{twig_entities_in_attribute}=1 if( $t->{twig_do_not_escape_amp_in_atts});
3033 }
3034 else
3035 { my $ent;
3036 if( $t->{twig_keep_encoding})
3037 { _twig_char( $p, $string);
3038 $ent= substr( $string, 1, -1);
3039 }
3040 else
3041 { $ent= _twig_insert_ent( $t, $string);
3042 }
3043
3044 return $ent;
3045 }
3046 }
3047 }
3048
3049sub _twig_insert_ent
3050 {
3051 my( $t, $string)=@_;
3052
3053 my $twig_current= $t->{twig_current};
3054
3055 my $ent= $t->{twig_elt_class}->new( $ENT);
3056 $ent->{ent}= $string;
3057
3058 _add_or_discard_stored_spaces( $t);
3059
3060 if( $t->{twig_in_pcdata})
3061 { # create the node as a sibling of the #PCDATA
3062
3063 $ent->{prev_sibling}=$twig_current; if( $XML::Twig::weakrefs) { weaken( $ent->{prev_sibling});} ;
3064 $twig_current->{next_sibling}= $ent;
3065 my $parent= $twig_current->{parent};
3066 $ent->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $ent->{parent});} ;
3067 delete $parent->{empty}; $parent->{last_child}=$ent; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ;
3068 # the twig_current is now the parent
3069 delete $twig_current->{'twig_current'};
3070 $t->{twig_current}= $parent;
3071 # we left pcdata
3072 $t->{twig_in_pcdata}=0;
3073 }
3074 else
3075 { # create the node as a child of the current element
3076 $ent->{parent}=$twig_current; if( $XML::Twig::weakrefs) { weaken( $ent->{parent});} ;
3077 if( my $prev_sibling= $twig_current->{last_child})
3078 { $ent->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $ent->{prev_sibling});} ;
3079 $prev_sibling->{next_sibling}= $ent;
3080 }
3081 else
3082 { if( $twig_current) { $twig_current->{first_child}= $ent; } }
3083 if( $twig_current) { delete $twig_current->{empty}; $twig_current->{last_child}=$ent; if( $XML::Twig::weakrefs) { weaken( $twig_current->{last_child});} ; }
3084 }
3085
3086 # meant to trigger entity handler, does not seem to be activated at this time
3087 #if( my $handler= $t->{twig_handlers}->{gi}->{$ENT})
3088 # { local $_= $ent; $handler->( $t, $ent); }
3089
3090 return $ent;
3091 }
3092
3093sub parser
309418582433.08s
# spent 524ms within XML::Twig::parser which was called 1858243 times, avg 282ns/call: # 1095679 times (254ms+0s) by XML::Twig::_ns_info at line 2217, avg 231ns/call # 398167 times (153ms+0s) by XML::Twig::_replace_ns at line 2162, avg 383ns/call # 364369 times (118ms+0s) by XML::Twig::_replace_prefix at line 2425, avg 325ns/call # 28 times (7µs+0s) by XML::Twig::_replace_ns at line 2163, avg 243ns/call
{ return $_[0]->{twig_parser}; }
3095
3096# returns the declaration text (or a default one)
3097sub xmldecl
3098 { my $t= shift;
3099 return '' unless( $t->{twig_xmldecl} || $t->{output_encoding});
3100 my $decl_string;
3101 my $decl= $t->{twig_xmldecl};
3102 if( $decl)
3103 { my $version= $decl->{version};
3104 $decl_string= q{<?xml};
3105 $decl_string .= qq{ version="$version"};
3106
3107 # encoding can either have been set (in $decl->{output_encoding})
3108 # or come from the document (in $decl->{encoding})
3109 if( $t->{output_encoding})
3110 { my $encoding= $t->{output_encoding};
3111 $decl_string .= qq{ encoding="$encoding"};
3112 }
3113 elsif( $decl->{encoding})
3114 { my $encoding= $decl->{encoding};
3115 $decl_string .= qq{ encoding="$encoding"};
3116 }
3117
3118 if( defined( $decl->{standalone}))
3119 { $decl_string .= q{ standalone="};
3120 $decl_string .= $decl->{standalone} ? "yes" : "no";
3121 $decl_string .= q{"};
3122 }
3123
3124 $decl_string .= "?>\n";
3125 }
3126 else
3127 { my $encoding= $t->{output_encoding};
3128 $decl_string= qq{<?xml version="1.0" encoding="$encoding"?>};
3129 }
3130
3131 my $output_filter= XML::Twig::Elt::output_filter();
3132 return $output_filter ? $output_filter->( $decl_string) : $decl_string;
3133 }
3134
3135sub set_doctype
3136 { my( $t, $name, $system, $public, $internal)= @_;
3137 $t->{twig_doctype}= {} unless defined $t->{twig_doctype};
3138 my $doctype= $t->{twig_doctype};
3139 $doctype->{name} = $name if( defined $name);
3140 $doctype->{sysid} = $system if( defined $system);
3141 $doctype->{pub} = $public if( defined $public);
3142 $doctype->{internal} = $internal if( defined $internal);
3143 }
3144
3145sub doctype_name
3146 { my $t= shift;
3147 my $doctype= $t->{twig_doctype} or return '';
3148 return $doctype->{name} || '';
3149 }
3150
3151sub system_id
3152 { my $t= shift;
3153 my $doctype= $t->{twig_doctype} or return '';
3154 return $doctype->{sysid} || '';
3155 }
3156
3157sub public_id
3158 { my $t= shift;
3159 my $doctype= $t->{twig_doctype} or return '';
3160 return $doctype->{pub} || '';
3161 }
3162
3163sub internal_subset
3164 { my $t= shift;
3165 my $doctype= $t->{twig_doctype} or return '';
3166 return $doctype->{internal} || '';
3167 }
3168
3169# return the dtd object
3170sub dtd
3171 { my $t= shift;
3172 return $t->{twig_dtd};
3173 }
3174
3175# return an element model, or the list of element models
3176sub model
3177 { my $t= shift;
3178 my $elt= shift;
3179 return $t->dtd->{model}->{$elt} if( $elt);
3180 return (sort keys %{$t->dtd->{model}});
3181 }
3182
3183
3184# return the entity_list object
3185sub entity_list
3186 { my $t= shift;
3187 return $t->{twig_entity_list};
3188 }
3189
3190# return the list of entity names
3191sub entity_names
3192 { my $t= shift;
3193 return $t->entity_list->entity_names;
3194 }
3195
3196# return the entity object
3197sub entity
3198 { my $t= shift;
3199 my $entity_name= shift;
3200 return $t->entity_list->ent( $entity_name);
3201 }
3202
3203# return the notation_list object
3204sub notation_list
3205 { my $t= shift;
3206 return $t->{twig_notation_list};
3207 }
3208
3209# return the list of notation names
3210sub notation_names
3211 { my $t= shift;
3212 return $t->notation_list->notation_names;
3213 }
3214
3215# return the notation object
3216sub notation
3217 { my $t= shift;
3218 my $notation_name= shift;
3219 return $t->notation_list->notation( $notation_name);
3220 }
3221
- -
3225sub print_prolog
3226 { my $t= shift;
3227 my $fh= isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar') ? shift : $t->{twig_output_fh} || select() || \*STDOUT;
3228 ## no critic (TestingAndDebugging::ProhibitNoStrict);
322921.38ms216µs
# spent 12µs (8+4) within XML::Twig::BEGIN@3229 which was called: # once (8µs+4µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 3229
no strict 'refs';
# spent 12µs making 1 call to XML::Twig::BEGIN@3229 # spent 4µs making 1 call to strict::unimport
3230 print {$fh} $t->prolog( @_);
3231 }
3232
3233sub prolog
3234 { my $t= shift;
3235 if( $t->{no_prolog}){ return ''; }
3236
3237 return $t->{no_prolog} ? ''
3238 : defined $t->{no_dtd_output} ? $t->xmldecl
3239 : $t->xmldecl . $t->doctype( @_);
3240 }
3241
3242sub doctype
3243 { my $t= shift;
3244 my %args= _normalize_args( @_);
3245 my $update_dtd = $args{UpdateDTD} || '';
3246 my $doctype_text='';
3247
3248 my $doctype= $t->{twig_doctype};
3249
3250 if( $doctype)
3251 { $doctype_text .= qq{<!DOCTYPE $doctype->{name}} if( $doctype->{name});
3252 $doctype_text .= qq{ PUBLIC "$doctype->{pub}"} if( $doctype->{pub});
3253 $doctype_text .= qq{ SYSTEM} if( $doctype->{sysid} && !$doctype->{pub});
3254 $doctype_text .= qq{ "$doctype->{sysid}"} if( $doctype->{sysid});
3255 }
3256
3257 if( $update_dtd)
3258 { if( $doctype)
3259 { my $internal=$doctype->{internal};
3260 # awful hack, but at least it works a little better that what was there before
3261 if( $internal)
3262 { # remove entity and notation declarations (they will be re-generated from the updated entity list)
3263 $internal=~ s{<! \s* ENTITY \s+ $REG_TAG_NAME \s+ ( ("[^"]*"|'[^']*') \s* | SYSTEM [^>]*) >\s*}{}xg;
3264 $internal=~ s{<! \s* NOTATION .*? >\s*}{}sxg;
3265 $internal=~ s{^\n}{};
3266 }
3267 $internal .= $t->entity_list->text ||'' if( $t->entity_list);
3268 $internal .= $t->notation_list->text ||'' if( $t->notation_list);
3269 if( $internal) { $doctype_text .= "[\n$internal]>\n"; }
3270 }
3271 elsif( !$t->{'twig_dtd'} && ( keys %{$t->entity_list} || keys %{$t->notation_list} ) )
3272 { $doctype_text .= "<!DOCTYPE " . $t->root->gi . " [\n" . $t->entity_list->text . $t->notation_list->text . "\n]>";}
3273 else
3274 { $doctype_text= $t->{twig_dtd};
3275 $doctype_text .= $t->dtd_text;
3276 }
3277 }
3278 elsif( $doctype)
3279 { if( my $internal= $doctype->{internal})
3280 { # add opening and closing brackets if not already there
3281 # plus some spaces and newlines for a nice formating
3282 # I test it here because I can't remember which version of
3283 # XML::Parser need it or not, nor guess which one will in the
3284 # future, so this about the best I can do
3285 $internal=~ s{^\s*(\[\s*)?}{ [\n};
3286 $internal=~ s{\s*(\]\s*(>\s*)?)?\s*$}{\n]>\n};
3287
3288 # XML::Parser does not include the NOTATION declarations in the DTD
3289 # at least in the current version. So put them back
3290 #if( $t->notation_list && $internal !~ m{<!\s*NOTATION})
3291 # { $internal=~ s{(\n]>\n)$}{ "\n" . $t->notation_list->text . $1}es; }
3292
3293 $doctype_text .= $internal;
3294 }
3295 }
3296
3297 if( $doctype_text)
3298 {
3299 # terrible hack, as I can't figure out in which case the darn prolog
3300 # should get an extra > (depends on XML::Parser and expat versions)
3301 $doctype_text=~ s/(>\s*)*$/>\n/; # if($doctype_text);
3302
3303 my $output_filter= XML::Twig::Elt::output_filter();
3304 return $output_filter ? $output_filter->( $doctype_text) : $doctype_text;
3305 }
3306 else
3307 { return $doctype_text; }
3308 }
3309
3310sub _leading_cpi
3311 { my $t= shift;
3312 my $leading_cpi= $t->{leading_cpi} || return '';
3313 return $leading_cpi->sprint( 1);
3314 }
3315
3316sub _trailing_cpi
3317 { my $t= shift;
3318 my $trailing_cpi= $t->{trailing_cpi} || return '';
3319 return $trailing_cpi->sprint( 1);
3320 }
3321
3322sub _trailing_cpi_text
3323 { my $t= shift;
3324 return $t->{trailing_cpi_text} || '';
3325 }
3326
3327sub print_to_file
3328 { my( $t, $filename)= (shift, shift);
3329 my $out_fh;
3330# open( $out_fh, ">$filename") or _croak( "cannot create file $filename: $!"); # < perl 5.8
3331 my $mode= $t->{twig_keep_encoding} && ! _use_perlio() ? '>' : '>:utf8'; # >= perl 5.8
3332 open( $out_fh, $mode, $filename) or _croak( "cannot create file $filename: $!"); # >= perl 5.8
3333 $t->print( $out_fh, @_);
3334 close $out_fh;
3335 return $t;
3336 }
3337
3338# probably only works on *nix (at least the chmod bit)
3339# first print to a temporary file, then rename that file to the desired file name, then change permissions
3340# to the original file permissions (or to the current umask)
3341sub safe_print_to_file
3342 { my( $t, $filename)= (shift, shift);
3343 my $perm= -f $filename ? (stat $filename)[2] & 07777 : ~umask() ;
3344 XML::Twig::_use( 'File::Temp') || croak "need File::Temp to use safe_print_to_file\n";
3345 my $tmpdir= dirname( $filename);
3346 my( $fh, $tmpfilename) = File::Temp::tempfile( DIR => $tmpdir);
3347 $t->print_to_file( $tmpfilename, @_);
3348 rename( $tmpfilename, $filename) or unlink $tmpfilename && _croak( "cannot move temporary file to $filename: $!");
3349 chmod $perm, $filename;
3350 return $t;
3351 }
3352
3353
3354sub print
3355 { my $t= shift;
3356 my $fh= isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar') ? shift : undef;
3357 my %args= _normalize_args( @_);
3358
3359 my $old_select = defined $fh ? select $fh : undef;
3360 my $old_pretty = defined ($args{PrettyPrint}) ? $t->set_pretty_print( $args{PrettyPrint}) : undef;
3361 my $old_empty_tag = defined ($args{EmptyTags}) ? $t->set_empty_tag_style( $args{EmptyTags}) : undef;
3362
3363 #if( !$t->{encoding} || lc( $t->{encoding}) eq 'utf-8') { my $out= $fh || \*STDOUT; binmode $out, ':utf8'; }
3364
3365 if( $perl_version > 5.006 && ! $t->{twig_keep_encoding} && _use_perlio() ) { binmode( $fh || \*STDOUT, ":utf8" ); }
3366
3367 print $t->prolog( %args) . $t->_leading_cpi( %args);
3368 $t->{twig_root}->print;
3369 print $t->_trailing_cpi # trailing comments and pi's (elements, in 'process' mode)
3370 . $t->_trailing_cpi_text # trailing comments and pi's (in 'keep' mode)
3371 . ( ($t->{twig_keep_spaces}||'') && ($t->{trailing_spaces} || ''))
3372 ;
3373
3374
3375 $t->set_pretty_print( $old_pretty) if( defined $old_pretty);
3376 $t->set_empty_tag_style( $old_empty_tag) if( defined $old_empty_tag);
3377 if( $fh) { select $old_select; }
3378
3379 return $t;
3380 }
3381
3382
3383sub flush
3384 { my $t= shift;
3385
3386 $t->_trigger_tdh if $t->{twig_tdh};
3387
3388 return if( $t->{twig_completely_flushed});
3389
3390 my $fh= isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar') ? shift : undef;
3391 my $old_select= defined $fh ? select $fh : undef;
3392 my $up_to= ref $_[0] ? shift : undef;
3393 my %args= _normalize_args( @_);
3394
3395 my $old_pretty;
3396 if( defined $args{PrettyPrint})
3397 { $old_pretty= $t->set_pretty_print( $args{PrettyPrint});
3398 delete $args{PrettyPrint};
3399 }
3400
3401 my $old_empty_tag_style;
3402 if( $args{EmptyTags})
3403 { $old_empty_tag_style= $t->set_empty_tag_style( $args{EmptyTags});
3404 delete $args{EmptyTags};
3405 }
3406
3407
3408 # the "real" last element processed, as _twig_end has closed it
3409 my $last_elt;
3410 my $flush_trailing_data=0;
3411 if( $up_to)
3412 { $last_elt= $up_to; }
3413 elsif( $t->{twig_current})
3414 { $last_elt= $t->{twig_current}->{last_child}; }
3415 else
3416 { $last_elt= $t->{twig_root};
3417 $flush_trailing_data=1;
3418 $t->{twig_completely_flushed}=1;
3419 }
3420
3421 # flush the DTD unless it has ready flushed (ie root has been flushed)
3422 my $elt= $t->{twig_root};
3423 unless( $elt->{'flushed'})
3424 { # store flush info so we can auto-flush later
3425 if( $t->{twig_autoflush})
3426 { $t->{twig_autoflush_data}={};
3427 $t->{twig_autoflush_data}->{fh} = $fh if( $fh);
3428 $t->{twig_autoflush_data}->{args} = \@_ if( @_);
3429 }
3430 $t->print_prolog( %args);
3431 print $t->_leading_cpi;
3432 }
3433
3434 while( $elt)
3435 { my $next_elt;
3436 if( $last_elt && $last_elt->in( $elt))
3437 {
3438 unless( $elt->{'flushed'})
3439 { # just output the front tag
3440 print $elt->start_tag();
3441 $elt->{'flushed'}=1;
3442 }
3443 $next_elt= $elt->{first_child};
3444 }
3445 else
3446 { # an element before the last one or the last one,
3447 $next_elt= $elt->{next_sibling};
3448 $elt->_flush();
3449 $elt->delete;
3450 last if( $last_elt && ($elt == $last_elt));
3451 }
3452 $elt= $next_elt;
3453 }
3454
3455 if( $flush_trailing_data)
3456 { print $t->_trailing_cpi # trailing comments and pi's (elements, in 'process' mode)
3457 , $t->_trailing_cpi_text # trailing comments and pi's (in 'keep' mode)
3458 }
3459
3460 select $old_select if( defined $old_select);
3461 $t->set_pretty_print( $old_pretty) if( defined $old_pretty);
3462 $t->set_empty_tag_style( $old_empty_tag_style) if( defined $old_empty_tag_style);
3463
3464 if( my $ids= $t->{twig_id_list})
3465 { while( my ($id, $elt)= each %$ids)
3466 { if( ! defined $elt)
3467 { delete $t->{twig_id_list}->{$id} }
3468 }
3469 }
3470
3471 return $t;
3472 }
3473
3474
3475# flushes up to an element
3476# this method just reorders the arguments and calls flush
3477sub flush_up_to
3478 { my $t= shift;
3479 my $up_to= shift;
3480 if( isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar'))
3481 { my $fh= shift;
3482 $t->flush( $fh, $up_to, @_);
3483 }
3484 else
3485 { $t->flush( $up_to, @_); }
3486
3487 return $t;
3488 }
3489
3490
3491# same as print except the entire document text is returned as a string
3492sub sprint
3493 { my $t= shift;
3494 my %args= _normalize_args( @_);
3495
3496 my $old_pretty;
3497 if( defined $args{PrettyPrint})
3498 { $old_pretty= $t->set_pretty_print( $args{PrettyPrint});
3499 delete $args{PrettyPrint};
3500 }
3501
3502 my $old_empty_tag_style;
3503 if( defined $args{EmptyTags})
3504 { $old_empty_tag_style= $t->set_empty_tag_style( $args{EmptyTags});
3505 delete $args{EmptyTags};
3506 }
3507
3508 my $string= $t->prolog( %args) # xml declaration and doctype
3509 . $t->_leading_cpi( %args) # leading comments and pi's in 'process' mode
3510 . ( ($t->{twig_root} && $t->{twig_root}->sprint) || '')
3511 . $t->_trailing_cpi # trailing comments and pi's (elements, in 'process' mode)
3512 . $t->_trailing_cpi_text # trailing comments and pi's (in 'keep' mode)
3513 ;
3514 if( $t->{twig_keep_spaces} && $t->{trailing_spaces}) { $string .= $t->{trailing_spaces}; }
3515
3516 $t->set_pretty_print( $old_pretty) if( defined $old_pretty);
3517 $t->set_empty_tag_style( $old_empty_tag_style) if( defined $old_empty_tag_style);
3518
3519 return $string;
3520 }
3521
3522
3523# this method discards useless elements in a tree
3524# it does the same thing as a flush except it does not print it
3525# the second argument is an element, the last purged element
3526# (this argument is usually set through the purge_up_to method)
3527sub purge
3528338075.05ms
# spent 1.17s (317ms+856ms) within XML::Twig::purge which was called 33807 times, avg 35µs/call: # 18180 times (155ms+413ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] at line 301 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 31µs/call # 15608 times (162ms+442ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 441 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 39µs/call # 15 times (98µs+269µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655] at line 654 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 24µs/call # once (11µs+24µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246] at line 245 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (7µs+18µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338] at line 337 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (6µs+17µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268] at line 267 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (6µs+16µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313] at line 312 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
{ my $t= shift;
3529338074.81ms my $up_to= shift;
3530
3531338075.61ms $t->_trigger_tdh if $t->{twig_tdh};
3532
3533 # the "real" last element processed, as _twig_end has closed it
3534338072.60ms my $last_elt;
35353380712.8ms if( $up_to)
3536 { $last_elt= $up_to; }
3537 elsif( $t->{twig_current})
3538 { $last_elt= $t->{twig_current}->{last_child}; }
3539 else
3540 { $last_elt= $t->{twig_root}; }
3541
3542338077.10ms my $elt= $t->{twig_root};
3543
3544338074.96ms while( $elt)
3545676144.31ms { my $next_elt;
35466761440.3ms67614203ms if( $last_elt && $last_elt->in( $elt))
# spent 203ms making 67614 calls to XML::Twig::Elt::in, avg 3µs/call
3547338076.99ms { $elt->{'flushed'}=1;
3548338075.93ms $next_elt= $elt->{first_child};
3549 }
3550 else
3551 { # an element before the last one or the last one,
3552338075.80ms $next_elt= $elt->{next_sibling};
35533380719.3ms33807653ms $elt->delete;
# spent 653ms making 33807 calls to XML::Twig::Elt::delete, avg 19µs/call
35543380721.4ms last if( $last_elt && ($elt == $last_elt) );
3555 }
3556338079.37ms $elt= $next_elt;
3557 }
3558
3559338077.80ms if( my $ids= $t->{twig_id_list})
3560 { while( my ($id, $elt)= each %$ids) { if( ! defined $elt) { delete $t->{twig_id_list}->{$id} } } }
3561
35623380767.6ms return $t;
3563 }
3564
3565# flushes up to an element. This method just calls purge
3566sub purge_up_to
3567 { my $t= shift;
3568 return $t->purge( @_);
3569 }
3570
3571sub root
35723439µs
# spent 20µs within XML::Twig::root which was called 34 times, avg 582ns/call: # 16 times (10µs+0s) by XML::Twig::get_xpath at line 3691, avg 625ns/call # 16 times (8µs+0s) by XML::Twig::descendants at line 3758, avg 494ns/call # once (1µs+0s) by XML::Twig::_twig_end_check_roots at line 4217 # once (700ns+0s) by XML::Twig::_twig_start_check_roots at line 4163
{ return $_[0]->{twig_root}; }
3573
3574sub normalize
3575 { return $_[0]->root->normalize; }
3576
3577
3578# create accessor methods on attribute names
357910s{ my %accessor; # memorize accessor names so re-creating them won't trigger an error
3580sub att_accessors
3581 {
3582 my $twig_or_class= shift;
3583 my $elt_class= ref $twig_or_class ? $twig_or_class->{twig_elt_class}
3584 : 'XML::Twig::Elt'
3585 ;
3586 ## no critic (TestingAndDebugging::ProhibitNoStrict);
35872169µs215µs
# spent 11µs (7+4) within XML::Twig::BEGIN@3587 which was called: # once (7µs+4µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 3587
no strict 'refs';
# spent 11µs making 1 call to XML::Twig::BEGIN@3587 # spent 4µs making 1 call to strict::unimport
3588 foreach my $att (@_)
3589 { _croak( "attempt to redefine existing method $att using att_accessors")
3590 if( $elt_class->can( $att) && !$accessor{$att});
3591
3592 if( !$accessor{$att})
3593 { *{"$elt_class\::$att"}=
3594 sub
3595 :lvalue # > perl 5.5
3596 { my $elt= shift;
3597 if( @_) { $elt->{att}->{$att}= $_[0]; }
3598 $elt->{att}->{$att};
3599 };
3600 $accessor{$att}=1;
3601 }
3602 }
3603 return $twig_or_class;
3604 }
3605}
3606
36072300ns{ my %accessor; # memorize accessor names so re-creating them won't trigger an error
3608sub elt_accessors
3609 {
3610 my $twig_or_class= shift;
3611 my $elt_class= ref $twig_or_class ? $twig_or_class->{twig_elt_class}
3612 : 'XML::Twig::Elt'
3613 ;
3614
3615 # if arg is a hash ref, it's exp => name, otherwise it's a list of tags
3616 my %exp_to_alias= ref( $_[0]) && isa( $_[0], 'HASH') ? %{$_[0]}
3617 : map { $_ => $_ } @_;
3618 ## no critic (TestingAndDebugging::ProhibitNoStrict);
36192159µs212µs
# spent 9µs (6+4) within XML::Twig::BEGIN@3619 which was called: # once (6µs+4µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 3619
no strict 'refs';
# spent 9µs making 1 call to XML::Twig::BEGIN@3619 # spent 4µs making 1 call to strict::unimport
3620 while( my( $alias, $exp)= each %exp_to_alias )
3621 { if( $elt_class->can( $alias) && !$accessor{$alias})
3622 { _croak( "attempt to redefine existing method $alias using elt_accessors"); }
3623
3624 if( !$accessor{$alias})
3625 { *{"$elt_class\::$alias"}=
3626 sub
3627 { my $elt= shift;
3628 return wantarray ? $elt->children( $exp) : $elt->first_child( $exp);
3629 };
3630 $accessor{$alias}=1;
3631 }
3632 }
3633 return $twig_or_class;
3634 }
3635}
3636
36372300ns{ my %accessor; # memorize accessor names so re-creating them won't trigger an error
3638sub field_accessors
3639 {
3640 my $twig_or_class= shift;
3641 my $elt_class= ref $twig_or_class ? $twig_or_class->{twig_elt_class}
3642 : 'XML::Twig::Elt'
3643 ;
3644 my %exp_to_alias= ref( $_[0]) && isa( $_[0], 'HASH') ? %{$_[0]}
3645 : map { $_ => $_ } @_;
3646
3647 ## no critic (TestingAndDebugging::ProhibitNoStrict);
36482944µs212µs
# spent 9µs (6+3) within XML::Twig::BEGIN@3648 which was called: # once (6µs+3µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 3648
no strict 'refs';
# spent 9µs making 1 call to XML::Twig::BEGIN@3648 # spent 3µs making 1 call to strict::unimport
3649 while( my( $alias, $exp)= each %exp_to_alias )
3650 { if( $elt_class->can( $alias) && !$accessor{$alias})
3651 { _croak( "attempt to redefine existing method $exp using field_accessors"); }
3652 if( !$accessor{$alias})
3653 { *{"$elt_class\::$alias"}=
3654 sub
3655 { my $elt= shift;
3656 $elt->field( $exp)
3657 };
3658 $accessor{$alias}=1;
3659 }
3660 }
3661 return $twig_or_class;
3662 }
3663}
3664
3665sub first_elt
36661100ns { my( $t, $cond)= @_;
3667 my $root= $t->root || return undef;
3668 return $root if( $root->passes( $cond));
3669 return $root->next_elt( $cond);
3670 }
3671
3672sub last_elt
3673 { my( $t, $cond)= @_;
3674 my $root= $t->root || return undef;
3675 return $root->last_descendant( $cond);
3676 }
3677
3678sub next_n_elt
3679 { my( $t, $offset, $cond)= @_;
3680 $offset -- if( $t->root->matches( $cond) );
3681 return $t->root->next_n_elt( $offset, $cond);
3682 }
3683
3684sub get_xpath
3685162µs
# spent 12.4ms (82µs+12.3) within XML::Twig::get_xpath which was called 16 times, avg 775µs/call: # once (4µs+4.71ms) by Spreadsheet::ParseXLSX::_parse_styles at line 821 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (8µs+1.71ms) by Spreadsheet::ParseXLSX::_extract_files at line 963 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+1.06ms) by Spreadsheet::ParseXLSX::_parse_themes at line 672 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+1.01ms) by Spreadsheet::ParseXLSX::_parse_styles at line 910 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+531µs) by Spreadsheet::ParseXLSX::_parse_styles at line 853 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+510µs) by Spreadsheet::ParseXLSX::_parse_styles at line 856 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (12µs+451µs) by Spreadsheet::ParseXLSX::_parse_workbook at line 204 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+450µs) by Spreadsheet::ParseXLSX::_parse_styles at line 826 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+372µs) by Spreadsheet::ParseXLSX::_parse_workbook at line 199 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+287µs) by Spreadsheet::ParseXLSX::_parse_workbook at line 136 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+256µs) by Spreadsheet::ParseXLSX::_extract_files at line 985 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+249µs) by Spreadsheet::ParseXLSX::_extract_files at line 1010 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+241µs) by Spreadsheet::ParseXLSX::_parse_workbook at line 137 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (5µs+228µs) by Spreadsheet::ParseXLSX::_extract_files at line 981 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (4µs+213µs) by Spreadsheet::ParseXLSX::_extract_files at line 983 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (7µs+44µs) by Spreadsheet::ParseXLSX::_extract_files at line 991 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
{ my $twig= shift;
36861650µs1626µs if( isa( $_[0], 'ARRAY'))
# spent 26µs making 16 calls to UNIVERSAL::isa, avg 2µs/call
3687 { my $elt_array= shift;
3688 return _unique_elts( map { $_->get_xpath( @_) } @$elt_array);
3689 }
3690 else
36911654µs3212.3ms { return $twig->root->get_xpath( @_); }
# spent 12.3ms making 16 calls to XML::Twig::Elt::get_xpath, avg 768µs/call # spent 10µs making 16 calls to XML::Twig::root, avg 625ns/call
3692 }
3693
3694# get a list of elts and return a sorted list of unique elts
3695sub _unique_elts
36969373µs932.91ms
# spent 1.56ms (60µs+1.50) within XML::Twig::_unique_elts which was called 16 times, avg 97µs/call: # 2 times (6µs+700ns) by XML::Twig::Elt::__ANON__[(eval 62)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 62)[XML/Twig.pm:7113], avg 3µs/call # once (6µs+543µs) by XML::Twig::Elt::__ANON__[(eval 68)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 68)[XML/Twig.pm:7113] # once (7µs+529µs) by XML::Twig::Elt::__ANON__[(eval 97)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 97)[XML/Twig.pm:7113] # once (6µs+366µs) by XML::Twig::Elt::__ANON__[(eval 70)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 70)[XML/Twig.pm:7113] # once (3µs+54µs) by XML::Twig::Elt::__ANON__[(eval 87)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 87)[XML/Twig.pm:7113] # once (5µs+700ns) by XML::Twig::Elt::__ANON__[(eval 58)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 58)[XML/Twig.pm:7113] # once (4µs+700ns) by XML::Twig::Elt::__ANON__[(eval 129)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 129)[XML/Twig.pm:7113] # once (4µs+500ns) by XML::Twig::Elt::__ANON__[(eval 60)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 60)[XML/Twig.pm:7113] # once (3µs+300ns) by XML::Twig::Elt::__ANON__[(eval 64)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 64)[XML/Twig.pm:7113] # once (3µs+300ns) by XML::Twig::Elt::__ANON__[(eval 61)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 61)[XML/Twig.pm:7113] # once (3µs+300ns) by XML::Twig::Elt::__ANON__[(eval 66)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 66)[XML/Twig.pm:7113] # once (3µs+300ns) by XML::Twig::Elt::__ANON__[(eval 103)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 103)[XML/Twig.pm:7113] # once (3µs+300ns) by XML::Twig::Elt::__ANON__[(eval 63)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 63)[XML/Twig.pm:7113] # once (2µs+300ns) by XML::Twig::Elt::__ANON__[(eval 76)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 76)[XML/Twig.pm:7113] # once (2µs+300ns) by XML::Twig::Elt::__ANON__[(eval 85)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 85)[XML/Twig.pm:7113]
{ my @sorted= sort { $a ->cmp( $b) } @_;
# spent 1.50ms making 16 calls to CORE::sort, avg 94µs/call # spent 1.42ms making 77 calls to XML::Twig::Elt::cmp, avg 18µs/call
3697162µs my @unique;
36981623µs while( my $current= shift @sorted)
3699 { push @unique, $current unless( @unique && ($unique[-1] == $current)); }
37001621µs return @unique;
3701 }
3702
3703sub findvalue
3704 { my $twig= shift;
3705 if( isa( $_[0], 'ARRAY'))
3706 { my $elt_array= shift;
3707 return join( '', map { $_->findvalue( @_) } @$elt_array);
3708 }
3709 else
3710 { return $twig->root->findvalue( @_); }
3711 }
3712
3713sub findvalues
3714 { my $twig= shift;
3715 if( isa( $_[0], 'ARRAY'))
3716 { my $elt_array= shift;
3717 return map { $_->findvalues( @_) } @$elt_array;
3718 }
3719 else
3720 { return $twig->root->findvalues( @_); }
3721 }
3722
3723sub set_id_seed
3724 { my $t= shift;
3725 XML::Twig::Elt->set_id_seed( @_);
3726 return $t;
3727 }
3728
3729# return an array ref to an index, or undef
3730sub index
3731 { my( $twig, $name, $index)= @_;
3732 return defined( $index) ? $twig->{_twig_index}->{$name}->[$index] : $twig->{_twig_index}->{$name};
3733 }
3734
3735# return a list with just the root
3736# if a condition is given then return an empty list unless the root matches
3737sub children
3738 { my( $t, $cond)= @_;
3739 my $root= $t->root;
3740 unless( $cond && !($root->passes( $cond)) )
3741 { return ($root); }
3742 else
3743 { return (); }
3744 }
3745
3746sub _children { return ($_[0]->root); }
3747
3748# weird, but here for completude
3749# used to solve (non-sensical) /doc[1] XPath queries
3750sub child
3751 { my $t= shift;
3752 my $nb= shift;
3753 return ($t->children( @_))[$nb];
3754 }
3755
3756sub descendants
3757166µs
# spent 6.13ms (84µs+6.05) within XML::Twig::descendants which was called 16 times, avg 383µs/call: # 2 times (10µs+34µs) by XML::Twig::Elt::__ANON__[(eval 62)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 62)[XML/Twig.pm:7113], avg 22µs/call # once (5µs+3.87ms) by XML::Twig::Elt::__ANON__[(eval 70)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 70)[XML/Twig.pm:7113] # once (8µs+468µs) by XML::Twig::Elt::__ANON__[(eval 58)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 58)[XML/Twig.pm:7113] # once (4µs+371µs) by XML::Twig::Elt::__ANON__[(eval 85)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 85)[XML/Twig.pm:7113] # once (5µs+268µs) by XML::Twig::Elt::__ANON__[(eval 68)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 68)[XML/Twig.pm:7113] # once (5µs+179µs) by XML::Twig::Elt::__ANON__[(eval 87)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 87)[XML/Twig.pm:7113] # once (9µs+163µs) by XML::Twig::Elt::__ANON__[(eval 129)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 129)[XML/Twig.pm:7113] # once (5µs+164µs) by XML::Twig::Elt::__ANON__[(eval 76)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 76)[XML/Twig.pm:7113] # once (4µs+163µs) by XML::Twig::Elt::__ANON__[(eval 97)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 97)[XML/Twig.pm:7113] # once (5µs+124µs) by XML::Twig::Elt::__ANON__[(eval 64)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 64)[XML/Twig.pm:7113] # once (4µs+109µs) by XML::Twig::Elt::__ANON__[(eval 103)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 103)[XML/Twig.pm:7113] # once (4µs+102µs) by XML::Twig::Elt::__ANON__[(eval 66)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 66)[XML/Twig.pm:7113] # once (6µs+12µs) by XML::Twig::Elt::__ANON__[(eval 60)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 60)[XML/Twig.pm:7113] # once (4µs+11µs) by XML::Twig::Elt::__ANON__[(eval 61)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 61)[XML/Twig.pm:7113] # once (4µs+11µs) by XML::Twig::Elt::__ANON__[(eval 63)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 63)[XML/Twig.pm:7113]
{ my( $t, $cond)= @_;
37581610µs168µs my $root= $t->root;
# spent 8µs making 16 calls to XML::Twig::root, avg 494ns/call
37591616µs165.17ms if( $root->passes( $cond) )
# spent 5.17ms making 16 calls to XML::Twig::Elt::passes, avg 323µs/call
3760 { return ($root, $root->descendants( $cond)); }
3761 else
37621642µs16870µs { return ( $root->descendants( $cond)); }
# spent 870µs making 16 calls to XML::Twig::Elt::descendants, avg 54µs/call
3763 }
3764
3765sub simplify { my $t= shift; $t->root->simplify( @_); }
3766sub subs_text { my $t= shift; $t->root->subs_text( @_); }
3767sub trim { my $t= shift; $t->root->trim( @_); }
3768
3769
3770sub set_keep_encoding
377172µs
# spent 26µs (18+8) within XML::Twig::set_keep_encoding which was called 7 times, avg 4µs/call: # 7 times (18µs+8µs) by XML::Twig::new at line 655, avg 4µs/call
{ my( $t, $keep)= @_;
377272µs $t->{twig_keep_encoding}= $keep;
377372µs $t->{NoExpand}= $keep;
3774711µs78µs return XML::Twig::Elt::set_keep_encoding( $keep);
# spent 8µs making 7 calls to XML::Twig::Elt::set_keep_encoding, avg 1µs/call
3775 }
3776
3777sub set_expand_external_entities
3778711µs78µs
# spent 20µs (11+8) within XML::Twig::set_expand_external_entities which was called 7 times, avg 3µs/call: # 7 times (11µs+8µs) by XML::Twig::new at line 538, avg 3µs/call
{ return XML::Twig::Elt::set_expand_external_entities( @_); }
# spent 8µs making 7 calls to XML::Twig::Elt::set_expand_external_entities, avg 1µs/call
3779
3780sub escape_gt
3781 { my $t= shift; $t->{twig_escape_gt}= 1; return XML::Twig::Elt::escape_gt( @_); }
3782
3783sub do_not_escape_gt
3784 { my $t= shift; $t->{twig_escape_gt}= 0; return XML::Twig::Elt::do_not_escape_gt( @_); }
3785
3786sub elt_id
3787 { return $_[0]->{twig_id_list}->{$_[1]}; }
3788
3789# change it in ALL twigs at the moment
3790sub change_gi
3791 { my( $twig, $old_gi, $new_gi)= @_;
3792 my $index;
3793 return unless($index= $XML::Twig::gi2index{$old_gi});
3794 $XML::Twig::index2gi[$index]= $new_gi;
3795 delete $XML::Twig::gi2index{$old_gi};
3796 $XML::Twig::gi2index{$new_gi}= $index;
3797 return $twig;
3798 }
3799
3800
3801# builds the DTD from the stored (possibly updated) data
3802sub dtd_text
3803 { my $t= shift;
3804 my $dtd= $t->{twig_dtd};
3805 my $doctype= $t->{twig_doctype} or return '';
3806 my $string= "<!DOCTYPE ".$doctype->{name};
3807
3808 $string .= " [\n";
3809
3810 foreach my $gi (@{$dtd->{elt_list}})
3811 { $string.= "<!ELEMENT $gi ".$dtd->{model}->{$gi}.">\n" ;
3812 if( $dtd->{att}->{$gi})
3813 { my $attlist= $dtd->{att}->{$gi};
3814 $string.= "<!ATTLIST $gi\n";
3815 foreach my $att ( sort keys %{$attlist})
3816 {
3817 if( $attlist->{$att}->{fixed})
3818 { $string.= " $att $attlist->{$att}->{type} #FIXED $attlist->{$att}->{default}"; }
3819 else
3820 { $string.= " $att $attlist->{$att}->{type} $attlist->{$att}->{default}"; }
3821 $string.= "\n";
3822 }
3823 $string.= ">\n";
3824 }
3825 }
3826 $string.= $t->entity_list->text if( $t->entity_list);
3827 $string.= "\n]>\n";
3828 return $string;
3829 }
3830
3831# prints the DTD from the stored (possibly updated) data
3832sub dtd_print
3833 { my $t= shift;
3834 my $fh= isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar') ? shift : undef;
3835 if( $fh) { print $fh $t->dtd_text; }
3836 else { print $t->dtd_text; }
3837 return $t;
3838 }
3839
3840# build the subs that call directly expat
3841BEGIN
384211µs
# spent 29µs within XML::Twig::BEGIN@3842 which was called: # once (29µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 3858
{ my @expat_methods= qw( depth in_element within_element context
3843 current_line current_column current_byte
3844 recognized_string original_string
3845 xpcroak xpcarp
3846 base current_element element_index
3847 xml_escape
3848 position_in_context);
384913µs foreach my $method (@expat_methods)
3850 {
3851 ## no critic (TestingAndDebugging::ProhibitNoStrict);
3852270µs214µs
# spent 10µs (6+4) within XML::Twig::BEGIN@3852 which was called: # once (6µs+4µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 3852
no strict 'refs';
# spent 10µs making 1 call to XML::Twig::BEGIN@3852 # spent 4µs making 1 call to strict::unimport
3853 *{$method}= sub { my $t= shift;
3854 _croak( "calling $method after parsing is finished") unless( $t->{twig_parsing});
3855 return $t->{twig_parser}->$method(@_);
38561625µs };
3857 }
385811.21ms129µs }
# spent 29µs making 1 call to XML::Twig::BEGIN@3842
3859
3860sub path
3861 { my( $t, $gi)= @_;
3862 if( $t->{twig_map_xmlns})
3863 { return "/" . join( "/", map { $t->_replace_prefix( $_)} ($t->{twig_parser}->context, $gi)); }
3864 else
3865 { return "/" . join( "/", ($t->{twig_parser}->context, $gi)); }
3866 }
3867
3868sub finish
3869 { my $t= shift;
3870 return $t->{twig_parser}->finish;
3871 }
3872
3873# just finish the parse by printing the rest of the document
3874sub finish_print
3875 { my( $t, $fh)= @_;
3876 my $old_fh;
3877 unless( defined $fh)
3878 { $t->_set_fh_to_twig_output_fh(); }
3879 elsif( defined $fh)
3880 { $old_fh= select $fh;
3881 $t->{twig_original_selected_fh}= $old_fh if( $old_fh);
3882 }
3883
3884 my $p=$t->{twig_parser};
3885 if( $t->{twig_keep_encoding})
3886 { $p->setHandlers( %twig_handlers_finish_print); }
3887 else
3888 { $p->setHandlers( %twig_handlers_finish_print_original); }
3889 return $t;
3890 }
3891
3892710µs75µs
# spent 14µs (9+5) within XML::Twig::set_remove_cdata which was called 7 times, avg 2µs/call: # 7 times (9µs+5µs) by XML::Twig::new at line 675, avg 2µs/call
sub set_remove_cdata { return XML::Twig::Elt::set_remove_cdata( @_); }
# spent 5µs making 7 calls to XML::Twig::Elt::set_remove_cdata, avg 729ns/call
3893
3894sub output_filter { return XML::Twig::Elt::output_filter( @_); }
3895710µs725µs
# spent 34µs (9+25) within XML::Twig::set_output_filter which was called 7 times, avg 5µs/call: # 7 times (9µs+25µs) by XML::Twig::new at line 668, avg 5µs/call
sub set_output_filter { return XML::Twig::Elt::set_output_filter( @_); }
# spent 25µs making 7 calls to XML::Twig::Elt::set_output_filter, avg 4µs/call
3896
3897sub output_text_filter { return XML::Twig::Elt::output_text_filter( @_); }
389879µs720µs
# spent 28µs (9+20) within XML::Twig::set_output_text_filter which was called 7 times, avg 4µs/call: # 7 times (9µs+20µs) by XML::Twig::new at line 682, avg 4µs/call
sub set_output_text_filter { return XML::Twig::Elt::set_output_text_filter( @_); }
# spent 20µs making 7 calls to XML::Twig::Elt::set_output_text_filter, avg 3µs/call
3899
3900sub set_input_filter
3901 { my( $t, $input_filter)= @_;
3902 my $old_filter= $t->{twig_input_filter};
3903 if( !$input_filter || isa( $input_filter, 'CODE') )
3904 { $t->{twig_input_filter}= $input_filter; }
3905 elsif( $input_filter eq 'latin1')
3906 { $t->{twig_input_filter}= latin1(); }
3907 elsif( $filter{$input_filter})
3908 { $t->{twig_input_filter}= $filter{$input_filter}; }
3909 else
3910 { _croak( "invalid input filter: $input_filter"); }
3911
3912 return $old_filter;
3913 }
3914
3915sub set_empty_tag_style
3916 { return XML::Twig::Elt::set_empty_tag_style( @_); }
3917
3918sub set_pretty_print
3919 { return XML::Twig::Elt::set_pretty_print( @_); }
3920
3921sub set_quote
392278µs711µs
# spent 22µs (11+11) within XML::Twig::set_quote which was called 7 times, avg 3µs/call: # 7 times (11µs+11µs) by XML::Twig::new at line 720, avg 3µs/call
{ return XML::Twig::Elt::set_quote( @_); }
# spent 11µs making 7 calls to XML::Twig::Elt::set_quote, avg 2µs/call
3923
3924sub set_indent
3925 { return XML::Twig::Elt::set_indent( @_); }
3926
3927sub set_keep_atts_order
39281410µs77µs
# spent 17µs (10+7) within XML::Twig::set_keep_atts_order which was called 7 times, avg 2µs/call: # 7 times (10µs+7µs) by XML::Twig::new at line 692, avg 2µs/call
{ shift; return XML::Twig::Elt::set_keep_atts_order( @_); }
# spent 7µs making 7 calls to XML::Twig::Elt::set_keep_atts_order, avg 971ns/call
3929
3930sub keep_atts_order
3931 { return XML::Twig::Elt::keep_atts_order( @_); }
3932
3933sub set_do_not_escape_amp_in_atts
3934724µs77µs
# spent 17µs (11+7) within XML::Twig::set_do_not_escape_amp_in_atts which was called 7 times, avg 2µs/call: # 7 times (11µs+7µs) by XML::Twig::new at line 554, avg 2µs/call
{ return XML::Twig::Elt::set_do_not_escape_amp_in_atts( @_); }
# spent 7µs making 7 calls to XML::Twig::Elt::set_do_not_escape_amp_in_atts, avg 943ns/call
3935
3936# save and restore package globals (the ones in XML::Twig::Elt)
3937# should probably return the XML::Twig object itself, but instead
3938# returns the state (as a hashref) for backward compatibility
3939sub save_global_state
3940 { my $t= shift;
3941 return $t->{twig_saved_state}= XML::Twig::Elt::global_state();
3942 }
3943
3944sub restore_global_state
3945 { my $t= shift;
3946 XML::Twig::Elt::set_global_state( $t->{twig_saved_state});
3947 }
3948
3949sub global_state
3950 { return XML::Twig::Elt::global_state(); }
3951
3952sub set_global_state
3953 { return XML::Twig::Elt::set_global_state( $_[1]); }
3954
3955sub dispose
3956 { my $t= shift;
3957 $t->DESTROY;
3958 return;
3959 }
3960
3961sub DESTROY
396261µs
# spent 584µs (125+459) within XML::Twig::DESTROY which was called 6 times, avg 97µs/call: # 3 times (49µs+305µs) by Spreadsheet::ParseXLSX::_parse_workbook at line 208 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 118µs/call # 2 times (32µs+137µs) by Spreadsheet::ParseXLSX::_extract_files at line 1013 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 85µs/call # once (44µs+18µs) by XML::Twig::_checked_parse_result at line 801
{ my $t= shift;
3963623µs12460µs if( $t->{twig_root} && isa( $t->{twig_root}, 'XML::Twig::Elt'))
# spent 456µs making 6 calls to XML::Twig::Elt::delete, avg 76µs/call # spent 4µs making 6 calls to UNIVERSAL::isa, avg 600ns/call
3964 { $t->{twig_root}->delete }
3965
3966 # added to break circular references
396763µs undef $t->{twig};
396862µs undef $t->{twig_root}->{twig} if( $t->{twig_root});
396962µs undef $t->{twig_parser};
3970
3971688µs undef %$t;# prevents memory leaks (especially when using mod_perl)
3972611µs undef $t;
3973 }
3974
3975# return true if perl was compiled using perlio
3976# if perl is not available return true, these days perlio should be used
3977sub _use_perlio
3978 { my $perl= _this_perl();
3979 return $perl ? grep /useperlio=define/, `$perl -V` : 1;
3980 }
3981
3982# returns the parth to the perl executable (if available)
3983sub _this_perl
3984 { # straight from perlvar
3985 my $secure_perl_path= $Config{perlpath};
3986 if ($^O ne 'VMS')
3987 { $secure_perl_path .= $Config{_exe} unless $secure_perl_path =~ m/$Config{_exe}$/i; }
3988 if( ! -f $secure_perl_path) { $secure_perl_path= ''; } # when perl is not available (PDK)
3989 return $secure_perl_path;
3990 }
3991
3992#
3993# non standard handlers
3994#
3995
3996# kludge: expat 1.95.2 calls both Default AND Doctype handlers
3997# so if the default handler finds '<!DOCTYPE' then it must
3998# unset itself (_twig_print_doctype will reset it)
3999sub _twig_print_check_doctype
4000 { # warn " in _twig_print_check_doctype...\n"; # DEBUG handler
4001
4002 my $p= shift;
4003 my $string= $p->recognized_string();
4004 if( $string eq '<!DOCTYPE')
4005 {
4006 $p->setHandlers( Default => undef);
4007 $p->setHandlers( Entity => undef);
4008 $expat_1_95_2=1;
4009 }
4010 else
4011 { print $string; }
4012
4013 return;
4014 }
4015
4016
4017sub _twig_print
4018 { # warn " in _twig_print...\n"; # DEBUG handler
4019 my $p= shift;
4020 if( $expat_1_95_2 && ($p->recognized_string eq '[') && !$p->{twig}->{expat_1_95_2_seen_bracket})
4021 { # otherwise the opening square bracket of the doctype gets printed twice
4022 $p->{twig}->{expat_1_95_2_seen_bracket}=1;
4023 }
4024 else
4025 { if( $p->{twig}->{twig_right_after_root})
4026 { my $s= $p->recognized_string(); print $s if $s=~ m{\S}; }
4027 else
4028 { print $p->recognized_string(); }
4029 }
4030 return;
4031 }
4032# recognized_string does not seem to work for entities, go figure!
4033# so this handler is used to print them anyway
4034sub _twig_print_entity
4035 { # warn " in _twig_print_entity...\n"; # DEBUG handler
4036 my $p= shift;
4037 XML::Twig::Entity->new( @_)->print;
4038 }
4039
4040# kludge: expat 1.95.2 calls both Default AND Doctype handlers
4041# so if the default handler finds '<!DOCTYPE' then it must
4042# unset itself (_twig_print_doctype will reset it)
4043sub _twig_print_original_check_doctype
4044 { # warn " in _twig_print_original_check_doctype...\n"; # DEBUG handler
4045
4046 my $p= shift;
4047 my $string= $p->original_string();
4048 if( $string eq '<!DOCTYPE')
4049 { $p->setHandlers( Default => undef);
4050 $p->setHandlers( Entity => undef);
4051 $expat_1_95_2=1;
4052 }
4053 else
4054 { print $string; }
4055
4056 return;
4057 }
4058
4059sub _twig_print_original
4060 { # warn " in _twig_print_original...\n"; # DEBUG handler
4061 my $p= shift;
4062 print $p->original_string();
4063 return;
4064 }
4065
4066
4067sub _twig_print_original_doctype
4068 { # warn " in _twig_print_original_doctype...\n"; # DEBUG handler
4069
4070 my( $p, $name, $sysid, $pubid, $internal)= @_;
4071 if( $name)
4072 { # with recent versions of XML::Parser original_string does not work,
4073 # hence we need to rebuild the doctype declaration
4074 my $doctype='';
4075 $doctype .= qq{<!DOCTYPE $name} if( $name);
4076 $doctype .= qq{ PUBLIC "$pubid"} if( $pubid);
4077 $doctype .= qq{ SYSTEM} if( $sysid && !$pubid);
4078 $doctype .= qq{ "$sysid"} if( $sysid);
4079 $doctype .= ' [' if( $internal && !$expat_1_95_2) ;
4080 $doctype .= qq{>} unless( $internal || $expat_1_95_2);
4081 $p->{twig}->{twig_doctype}->{has_internal}=$internal;
4082 print $doctype;
4083 }
4084 $p->setHandlers( Default => \&_twig_print_original);
4085 return;
4086 }
4087
4088sub _twig_print_doctype
4089 { # warn " in _twig_print_doctype...\n"; # DEBUG handler
4090 my( $p, $name, $sysid, $pubid, $internal)= @_;
4091 if( $name)
4092 { # with recent versions of XML::Parser original_string does not work,
4093 # hence we need to rebuild the doctype declaration
4094 my $doctype='';
4095 $doctype .= qq{<!DOCTYPE $name} if( $name);
4096 $doctype .= qq{ PUBLIC "$pubid"} if( $pubid);
4097 $doctype .= qq{ SYSTEM} if( $sysid && !$pubid);
4098 $doctype .= qq{ "$sysid"} if( $sysid);
4099 $doctype .= ' [' if( $internal) ;
4100 $doctype .= qq{>} unless( $internal || $expat_1_95_2);
4101 $p->{twig}->{twig_doctype}->{has_internal}=$internal;
4102 print $doctype;
4103 }
4104 $p->setHandlers( Default => \&_twig_print);
4105 return;
4106 }
4107
4108
4109sub _twig_print_original_default
4110 { # warn " in _twig_print_original_default...\n"; # DEBUG handler
4111 my $p= shift;
4112 print $p->original_string();
4113 return;
4114 }
4115
4116# account for the case where the element is empty
4117sub _twig_print_end_original
4118 { # warn " in _twig_print_end_original...\n"; # DEBUG handler
4119 my $p= shift;
4120 print $p->original_string();
4121 return;
4122 }
4123
4124sub _twig_start_check_roots
4125
# spent 8.21s (720ms+7.49) within XML::Twig::_twig_start_check_roots which was called 33799 times, avg 243µs/call: # 33799 times (720ms+7.49s) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm, avg 243µs/call
{ # warn " in _twig_start_check_roots...\n"; # DEBUG handler
4126337994.60ms my $p= shift;
4127337998.37ms my $gi= shift;
4128
4129337997.52ms my $t= $p->{twig};
4130
41313379985.8ms3379928.9ms my $fh= $t->{twig_output_fh} || select() || \*STDOUT;
# spent 28.9ms making 33799 calls to CORE::select, avg 856ns/call
4132
4133337993.31ms my $ns_decl;
41343379958.4ms675972.51s unless( $p->depth == 0)
# spent 2.49s making 33798 calls to XML::Twig::_replace_ns, avg 74µs/call # spent 21.4ms making 33799 calls to XML::Parser::Expat::depth, avg 633ns/call
4135 { if( $t->{twig_map_xmlns}) { $ns_decl= _replace_ns( $t, \$gi, \@_); }
4136 }
4137
41383379946.1ms my $context= { $ST_TAG => $gi, @_};
4139337993.39ms $context->{$ST_NS}= $ns_decl if $ns_decl;
41403379910.8ms push @{$t->{_twig_context_stack}}, $context;
41413379924.1ms my %att= @_;
4142
41433379924.8ms33799409ms if( _handler( $t, $t->{twig_roots}, $gi))
# spent 409ms making 33799 calls to XML::Twig::_handler, avg 12µs/call
41443379255.3ms337921.70s { $p->setHandlers( %twig_handlers); # restore regular handlers
# spent 1.70s making 33792 calls to XML::Parser::Expat::setHandlers, avg 50µs/call
41453379224.7ms3379220.3ms $t->{twig_root_depth}= $p->depth;
# spent 20.3ms making 33792 calls to XML::Parser::Expat::depth, avg 600ns/call
4146337929.42ms pop @{$t->{_twig_context_stack}}; # will be pushed back in _twig_start
41473379222.5ms337922.81s _twig_start( $p, $gi, @_);
# spent 2.81s making 33792 calls to XML::Twig::_twig_start, avg 83µs/call
414833792119ms return;
4149 }
4150
4151 # $tag will always be true if it needs to be printed (the tag string is never empty)
415273µs my $tag= $t->{twig_default_print} ? $t->{twig_keep_encoding} ? $p->original_string
4153 : $p->recognized_string
4154 : '';
4155
415676µs73µs if( $p->depth == 0)
# spent 3µs making 7 calls to XML::Parser::Expat::depth, avg 471ns/call
4157 {
4158 ## no critic (TestingAndDebugging::ProhibitNoStrict);
41592107µs214µs
# spent 10µs (6+4) within XML::Twig::BEGIN@4159 which was called: # once (6µs+4µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 4159
no strict 'refs';
# spent 10µs making 1 call to XML::Twig::BEGIN@4159 # spent 4µs making 1 call to strict::unimport
41601300ns print {$fh} $tag if( $tag);
41611500ns pop @{$t->{_twig_context_stack}}; # will be pushed back in _twig_start
416212µs1236µs _twig_start( $p, $gi, @_);
# spent 236µs making 1 call to XML::Twig::_twig_start
416312µs1700ns $t->root->{'flushed'}=1; # or the root start tag gets output the first time we flush
# spent 700ns making 1 call to XML::Twig::root
4164 }
4165 elsif( $t->{twig_starttag_handlers})
4166 { # look for start tag handlers
4167
4168 my @handlers= _handler( $t, $t->{twig_starttag_handlers}, $gi);
4169 my $last_handler_res;
4170 foreach my $handler ( @handlers)
4171 { $last_handler_res= $handler->($t, $gi, %att);
4172 last unless $last_handler_res;
4173 }
4174 ## no critic (TestingAndDebugging::ProhibitNoStrict);
4175232µs211µs
# spent 8µs (5+3) within XML::Twig::BEGIN@4175 which was called: # once (5µs+3µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 4175
no strict 'refs';
# spent 8µs making 1 call to XML::Twig::BEGIN@4175 # spent 3µs making 1 call to strict::unimport
4176 print {$fh} $tag if( $tag && (!@handlers || $last_handler_res));
4177 }
4178 else
4179 {
4180 ## no critic (TestingAndDebugging::ProhibitNoStrict);
41812140µs28µs
# spent 6µs (4+2) within XML::Twig::BEGIN@4181 which was called: # once (4µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 4181
no strict 'refs';
# spent 6µs making 1 call to XML::Twig::BEGIN@4181 # spent 2µs making 1 call to strict::unimport
41826700ns print {$fh} $tag if( $tag);
4183 }
4184711µs return;
4185 }
4186
4187sub _twig_end_check_roots
4188
# spent 80µs (50+30) within XML::Twig::_twig_end_check_roots which was called 7 times, avg 11µs/call: # 7 times (50µs+30µs) by XML::Parser::Expat::ParseString at line 486 of XML/Parser/Expat.pm, avg 11µs/call
{ # warn " in _twig_end_check_roots...\n"; # DEBUG handler
4189
419073µs my( $p, $gi, %att)= @_;
419172µs my $t= $p->{twig};
4192 # $tag can be empty (<elt/>), hence the undef and the tests for defined
419373µs my $tag= $t->{twig_default_print} ? $t->{twig_keep_encoding} ? $p->original_string
4194 : $p->recognized_string
4195 : undef;
4196715µs75µs my $fh= $t->{twig_output_fh} || select() || \*STDOUT;
# spent 5µs making 7 calls to CORE::select, avg 657ns/call
4197
419872µs if( $t->{twig_endtag_handlers})
4199 { # look for end tag handlers
4200 my @handlers= _handler( $t, $t->{twig_endtag_handlers}, $gi);
4201 my $last_handler_res=1;
4202 foreach my $handler ( @handlers)
4203 { $last_handler_res= $handler->($t, $gi) || last; }
4204 #if( ! $last_handler_res)
4205 # { pop @{$t->{_twig_context_stack}}; warn "tested";
4206 # return;
4207 # }
4208 }
4209 {
4210 ## no critic (TestingAndDebugging::ProhibitNoStrict);
42119166µs211µs
# spent 8µs (5+3) within XML::Twig::BEGIN@4211 which was called: # once (5µs+3µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 4211
no strict 'refs';
# spent 8µs making 1 call to XML::Twig::BEGIN@4211 # spent 3µs making 1 call to strict::unimport
421271µs print {$fh} $tag if( defined $tag);
4213 }
421476µs73µs if( $p->depth == 0)
# spent 3µs making 7 calls to XML::Parser::Expat::depth, avg 457ns/call
4215 {
42161700ns121µs _twig_end( $p, $gi);
# spent 21µs making 1 call to XML::Twig::_twig_end
421712µs11µs $t->root->{end_tag_flushed}=1;
# spent 1µs making 1 call to XML::Twig::root
4218 }
4219
422076µs pop @{$t->{_twig_context_stack}};
422179µs return;
4222 }
4223
4224sub _twig_pi_check_roots
4225 { # warn " in _twig_pi_check_roots...\n"; # DEBUG handler
4226 my( $p, $target, $data)= @_;
4227 my $t= $p->{twig};
4228 my $pi= $t->{twig_default_print} ? $t->{twig_keep_encoding} ? $p->original_string
4229 : $p->recognized_string
4230 : undef;
4231 my $fh= $t->{twig_output_fh} || select() || \*STDOUT;
4232
4233 if( my $handler= $t->{twig_handlers}->{pi_handlers}->{$target}
4234 || $t->{twig_handlers}->{pi_handlers}->{''}
4235 )
4236 { # if handler is called on pi, then it needs to be processed as a regular node
4237 my @flags= qw( twig_process_pi twig_keep_pi);
4238 my @save= @{$t}{@flags}; # save pi related flags
4239 @{$t}{@flags}= (1, 0); # override them, pi needs to be processed
4240 _twig_pi( @_); # call handler on the pi
4241 @{$t}{@flags}= @save;; # restore flag
4242 }
4243 else
4244 {
4245 ## no critic (TestingAndDebugging::ProhibitNoStrict);
424621.52ms211µs
# spent 8µs (5+3) within XML::Twig::BEGIN@4246 which was called: # once (5µs+3µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 4246
no strict 'refs';
# spent 8µs making 1 call to XML::Twig::BEGIN@4246 # spent 3µs making 1 call to strict::unimport
4247 print {$fh} $pi if( defined( $pi));
4248 }
4249 return;
4250 }
4251
4252
4253sub _output_ignored
4254 { my( $t, $p)= @_;
4255 my $action= $t->{twig_ignore_action};
4256
4257 my $get_string= $t->{twig_keep_encoding} ? 'original_string' : 'recognized_string';
4258
4259 if( $action eq 'print' ) { print $p->$get_string; }
4260 else
4261 { my $string_ref;
4262 if( $action eq 'string')
4263 { $string_ref= \$t->{twig_buffered_string}; }
4264 elsif( ref( $action) && ref( $action) eq 'SCALAR')
4265 { $string_ref= $action; }
4266 else
4267 { _croak( "wrong ignore action: $action"); }
4268
4269 $$string_ref .= $p->$get_string;
4270 }
4271 }
4272
4273
4274
4275sub _twig_ignore_start
4276 { # warn " in _twig_ignore_start...\n"; # DEBUG handler
4277
4278 my( $p, $gi)= @_;
4279 my $t= $p->{twig};
4280 $t->{twig_ignore_level}++;
4281 my $action= $t->{twig_ignore_action};
4282
4283 $t->_output_ignored( $p) unless $action eq 'discard';
4284 return;
4285 }
4286
4287sub _twig_ignore_end
4288 { # warn " in _twig_ignore_end...\n"; # DEBUG handler
4289
4290 my( $p, $gi)= @_;
4291 my $t= $p->{twig};
4292
4293 my $action= $t->{twig_ignore_action};
4294 $t->_output_ignored( $p) unless $action eq 'discard';
4295
4296 $t->{twig_ignore_level}--;
4297
4298 if( ! $t->{twig_ignore_level})
4299 {
4300 $t->{twig_current} = $t->{twig_ignore_elt};
4301 $t->{twig_current}->{'twig_current'}=1;
4302
4303 $t->{twig_ignore_elt}->cut; # there could possibly be a memory leak here (delete would avoid it,
4304 # but could also delete elements that should not be deleted)
4305
4306 # restore the saved stack to the current level
4307 splice( @{$t->{_twig_context_stack}}, $p->depth+ 1 );
4308 #warn "stack: ", _dump_stack( $t->{_twig_context_stack}), "\n";
4309
4310 $p->setHandlers( @{$t->{twig_saved_handlers}});
4311 # test for handlers
4312 if( $t->{twig_endtag_handlers})
4313 { # look for end tag handlers
4314 my @handlers= _handler( $t, $t->{twig_endtag_handlers}, $gi);
4315 my $last_handler_res=1;
4316 foreach my $handler ( @handlers)
4317 { $last_handler_res= $handler->($t, $gi) || last; }
4318 }
4319 pop @{$t->{_twig_context_stack}};
4320 };
4321 return;
4322 }
4323
4324#sub _dump_stack { my( $stack)= @_; return join( ":", map { $_->{$ST_TAG} } @$stack); }
4325
4326sub ignore
4327 { my( $t, $elt, $action)= @_;
4328 my $current= $t->{twig_current};
4329
4330 if( ! ($elt && ref( $elt) && isa( $elt, 'XML::Twig::Elt'))) { $elt= $current; }
4331
4332 #warn "ignore: current = ", $current->tag, ", elt = ", $elt->tag, ")\n";
4333
4334 # we need the ($elt == $current->{last_child}) test because the current element is set to the
4335 # parent _before_ handlers are called (and I can't figure out how to fix this)
4336 unless( ($elt == $current) || ($current->{last_child} && ($elt == $current->{last_child})) || $current->in( $elt))
4337 { _croak( "element to be ignored must be ancestor of current element"); }
4338
4339 $t->{twig_ignore_level}= $current == $elt ? 1 : $t->_level_in_stack( $current) - $t->_level_in_stack($elt) + 1;
4340 #warn "twig_ignore_level: $t->{twig_ignore_level} (current: ", $current->tag, ", elt: ", $elt->tag, ")\n";
4341 $t->{twig_ignore_elt} = $elt; # save it, so we can delete it later
4342
4343 $action ||= 'discard';
4344 if( !($action eq 'print' || $action eq 'string' || ( ref( $action) && ref( $action) eq 'SCALAR')))
4345 { $action= 'discard'; }
4346
4347 $t->{twig_ignore_action}= $action;
4348
4349 my $p= $t->{twig_parser};
4350 my @saved_handlers= $p->setHandlers( %twig_handlers_ignore); # set handlers
4351
4352 my $get_string= $t->{twig_keep_encoding} ? 'original_string' : 'recognized_string';
4353
4354 my $default_handler;
4355
4356 if( $action ne 'discard')
4357 { if( $action eq 'print')
4358 { $p->setHandlers( Default => sub { print $_[0]->$get_string; }); }
4359 else
4360 { my $string_ref;
4361 if( $action eq 'string')
4362 { if( ! exists $t->{twig_buffered_string}) { $t->{twig_buffered_string}=''; }
4363 $string_ref= \$t->{twig_buffered_string};
4364 }
4365 elsif( ref( $action) && ref( $action) eq 'SCALAR')
4366 { $string_ref= $action; }
4367
4368 $p->setHandlers( Default => sub { $$string_ref .= $_[0]->$get_string; });
4369 }
4370 $t->_output_ignored( $p, $action);
4371 }
4372
4373
4374 $t->{twig_saved_handlers}= \@saved_handlers; # save current handlers
4375 }
4376
4377sub _level_in_stack
4378 { my( $t, $elt)= @_;
4379 my $level=1;
4380 foreach my $elt_in_stack ( @{$t->{_twig_context_stack}} )
4381 { if( $elt_in_stack->{$ST_ELT} && ($elt == $elt_in_stack->{$ST_ELT})) { return $level }
4382 $level++;
4383 }
4384 }
4385
- -
4388# select $t->{twig_output_fh} and store the current selected fh
4389sub _set_fh_to_twig_output_fh
439071µs
# spent 6µs within XML::Twig::_set_fh_to_twig_output_fh which was called 7 times, avg 929ns/call: # 7 times (6µs+0s) by XML::Twig::_twig_init at line 1974, avg 929ns/call
{ my $t= shift;
439171µs my $output_fh= $t->{twig_output_fh};
439276µs if( $output_fh && !$t->{twig_output_fh_selected})
4393 { # there is an output fh
4394 $t->{twig_selected_fh}= select(); # store the currently selected fh
4395 $t->{twig_output_fh_selected}=1;
4396 select $output_fh; # select the output fh for the twig
4397 }
4398 }
4399
4400# select the fh that was stored in $t->{twig_selected_fh}
4401# (before $t->{twig_output_fh} was selected)
4402sub _set_fh_to_selected_fh
440371µs
# spent 8µs within XML::Twig::_set_fh_to_selected_fh which was called 7 times, avg 1µs/call: # 7 times (8µs+0s) by XML::Twig::_twig_final at line 2736, avg 1µs/call
{ my $t= shift;
440479µs return unless( $t->{twig_output_fh});
4405 my $selected_fh= $t->{twig_selected_fh};
4406 $t->{twig_output_fh_selected}=0;
4407 select $selected_fh;
4408 return;
4409 }
4410
4411
4412sub encoding
4413 { return $_[0]->{twig_xmldecl}->{encoding} if( $_[0]->{twig_xmldecl}); }
4414
4415sub set_encoding
4416 { my( $t, $encoding)= @_;
4417 $t->{twig_xmldecl} ||={};
4418 $t->set_xml_version( "1.0") unless( $t->xml_version);
4419 $t->{twig_xmldecl}->{encoding}= $encoding;
4420 return $t;
4421 }
4422
4423sub output_encoding
4424 { return $_[0]->{output_encoding}; }
4425
4426sub set_output_encoding
4427 { my( $t, $encoding)= @_;
4428 my $output_filter= $t->output_filter || '';
4429
4430 if( ($encoding && $encoding !~ m{^utf-?8$}i) || $t->{twig_keep_encoding} || $output_filter)
4431 { $t->set_output_filter( _encoding_filter( $encoding || '')); }
4432
4433 $t->{output_encoding}= $encoding;
4434 return $t;
4435 }
4436
4437sub xml_version
4438 { return $_[0]->{twig_xmldecl}->{version} if( $_[0]->{twig_xmldecl}); }
4439
4440sub set_xml_version
4441 { my( $t, $version)= @_;
4442 $t->{twig_xmldecl} ||={};
4443 $t->{twig_xmldecl}->{version}= $version;
4444 return $t;
4445 }
4446
4447sub standalone
4448 { return $_[0]->{twig_xmldecl}->{standalone} if( $_[0]->{twig_xmldecl}); }
4449
4450sub set_standalone
4451 { my( $t, $standalone)= @_;
4452 $t->{twig_xmldecl} ||={};
4453 $t->set_xml_version( "1.0") unless( $t->xml_version);
4454 $t->{twig_xmldecl}->{standalone}= $standalone;
4455 return $t;
4456 }
4457
4458
4459# SAX methods
4460
4461sub toSAX1
4462 { _croak( "cannot use toSAX1 while parsing (use flush_toSAX1)") if (defined $_[0]->{twig_parser});
4463 shift(@_)->_toSAX(@_, \&XML::Twig::Elt::_start_tag_data_SAX1,
4464 \&XML::Twig::Elt::_end_tag_data_SAX1
4465 );
4466 }
4467
4468sub toSAX2
4469 { _croak( "cannot use toSAX2 while parsing (use flush_toSAX2)") if (defined $_[0]->{twig_parser});
4470 shift(@_)->_toSAX(@_, \&XML::Twig::Elt::_start_tag_data_SAX2,
4471 \&XML::Twig::Elt::_end_tag_data_SAX2
4472 );
4473 }
4474
4475
4476sub _toSAX
4477 { my( $t, $handler, $start_tag_data, $end_tag_data) = @_;
4478
4479 if( my $start_document = $handler->can( 'start_document'))
4480 { $start_document->( $handler); }
4481
4482 $t->_prolog_toSAX( $handler);
4483
4484 if( $t->root) { $t->root->_toSAX( $handler, $start_tag_data, $end_tag_data) ; }
4485 if( my $end_document = $handler->can( 'end_document'))
4486 { $end_document->( $handler); }
4487 }
4488
4489
4490sub flush_toSAX1
4491 { shift(@_)->_flush_toSAX(@_, \&XML::Twig::Elt::_start_tag_data_SAX1,
4492 \&XML::Twig::Elt::_end_tag_data_SAX1
4493 );
4494 }
4495
4496sub flush_toSAX2
4497 { shift(@_)->_flush_toSAX(@_, \&XML::Twig::Elt::_start_tag_data_SAX2,
4498 \&XML::Twig::Elt::_end_tag_data_SAX2
4499 );
4500 }
4501
4502sub _flush_toSAX
4503 { my( $t, $handler, $start_tag_data, $end_tag_data)= @_;
4504
4505 # the "real" last element processed, as _twig_end has closed it
4506 my $last_elt;
4507 if( $t->{twig_current})
4508 { $last_elt= $t->{twig_current}->{last_child}; }
4509 else
4510 { $last_elt= $t->{twig_root}; }
4511
4512 my $elt= $t->{twig_root};
4513 unless( $elt->{'flushed'})
4514 { # init unless already done (ie root has been flushed)
4515 if( my $start_document = $handler->can( 'start_document'))
4516 { $start_document->( $handler); }
4517 # flush the DTD
4518 $t->_prolog_toSAX( $handler)
4519 }
4520
4521 while( $elt)
4522 { my $next_elt;
4523 if( $last_elt && $last_elt->in( $elt))
4524 {
4525 unless( $elt->{'flushed'})
4526 { # just output the front tag
4527 if( my $start_element = $handler->can( 'start_element'))
4528 { if( my $tag_data= $start_tag_data->( $elt))
4529 { $start_element->( $handler, $tag_data); }
4530 }
4531 $elt->{'flushed'}=1;
4532 }
4533 $next_elt= $elt->{first_child};
4534 }
4535 else
4536 { # an element before the last one or the last one,
4537 $next_elt= $elt->{next_sibling};
4538 $elt->_toSAX( $handler, $start_tag_data, $end_tag_data);
4539 $elt->delete;
4540 last if( $last_elt && ($elt == $last_elt));
4541 }
4542 $elt= $next_elt;
4543 }
4544 if( !$t->{twig_parsing})
4545 { if( my $end_document = $handler->can( 'end_document'))
4546 { $end_document->( $handler); }
4547 }
4548 }
4549
4550
4551sub _prolog_toSAX
4552 { my( $t, $handler)= @_;
4553 $t->_xmldecl_toSAX( $handler);
4554 $t->_DTD_toSAX( $handler);
4555 }
4556
4557sub _xmldecl_toSAX
4558 { my( $t, $handler)= @_;
4559 my $decl= $t->{twig_xmldecl};
4560 my $data= { Version => $decl->{version},
4561 Encoding => $decl->{encoding},
4562 Standalone => $decl->{standalone},
4563 };
4564 if( my $xml_decl= $handler->can( 'xml_decl'))
4565 { $xml_decl->( $handler, $data); }
4566 }
4567
4568sub _DTD_toSAX
4569 { my( $t, $handler)= @_;
4570 my $doctype= $t->{twig_doctype};
4571 return unless( $doctype);
4572 my $data= { Name => $doctype->{name},
4573 PublicId => $doctype->{pub},
4574 SystemId => $doctype->{sysid},
4575 };
4576
4577 if( my $start_dtd= $handler->can( 'start_dtd'))
4578 { $start_dtd->( $handler, $data); }
4579
4580 # I should call code to export the internal subset here
4581
4582 if( my $end_dtd= $handler->can( 'end_dtd'))
4583 { $end_dtd->( $handler); }
4584 }
4585
4586# input/output filters
4587
4588sub latin1
4589 { local $SIG{__DIE__};
4590 if( _use( 'Encode'))
4591 { return encode_convert( 'ISO-8859-15'); }
4592 elsif( _use( 'Text::Iconv'))
4593 { return iconv_convert( 'ISO-8859-15'); }
4594 elsif( _use( 'Unicode::Map8') && _use( 'Unicode::String'))
4595 { return unicode_convert( 'ISO-8859-15'); }
4596 else
4597 { return \&regexp2latin1; }
4598 }
4599
4600sub _encoding_filter
4601 {
4602 { local $SIG{__DIE__};
4603 my $encoding= $_[1] || $_[0];
4604 if( _use( 'Encode'))
4605 { my $sub= encode_convert( $encoding);
4606 return $sub;
4607 }
4608 elsif( _use( 'Text::Iconv'))
4609 { return iconv_convert( $encoding); }
4610 elsif( _use( 'Unicode::Map8') && _use( 'Unicode::String'))
4611 { return unicode_convert( $encoding); }
4612 }
4613 _croak( "Encode, Text::Iconv or Unicode::Map8 and Unicode::String need to be installed in order to use encoding options");
4614 }
4615
4616# shamelessly lifted from XML::TyePYX (works only with XML::Parse 2.27)
4617sub regexp2latin1
4618 { my $text=shift;
4619 $text=~s{([\xc0-\xc3])(.)}{ my $hi = ord($1);
4620 my $lo = ord($2);
4621 chr((($hi & 0x03) <<6) | ($lo & 0x3F))
4622 }ge;
4623 return $text;
4624 }
4625
4626
4627sub html_encode
4628 { _use( 'HTML::Entities') or croak "cannot use html_encode: missing HTML::Entities";
4629 return HTML::Entities::encode_entities($_[0] );
4630 }
4631
4632sub safe_encode
4633 { my $str= shift;
4634 if( $perl_version < 5.008)
4635 { # the no utf8 makes the regexp work in 5.6
4636291µs212µs
# spent 10µs (8+2) within XML::Twig::BEGIN@4636 which was called: # once (8µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 4636
no utf8; # = perl 5.6
# spent 10µs making 1 call to XML::Twig::BEGIN@4636 # spent 2µs making 1 call to utf8::unimport
4637 $str =~ s{([\xC0-\xDF].|[\xE0-\xEF]..|[\xF0-\xFF]...)}
4638 {_XmlUtf8Decode($1)}egs;
4639 }
4640 else
4641 { $str= encode( ascii => $str, $FB_HTMLCREF); }
4642 return $str;
4643 }
4644
4645sub safe_encode_hex
4646 { my $str= shift;
4647 if( $perl_version < 5.008)
4648 { # the no utf8 makes the regexp work in 5.6
464921.73ms27µs
# spent 6µs (5+1) within XML::Twig::BEGIN@4649 which was called: # once (5µs+1µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 4649
no utf8; # = perl 5.6
# spent 6µs making 1 call to XML::Twig::BEGIN@4649 # spent 1µs making 1 call to utf8::unimport
4650 $str =~ s{([\xC0-\xDF].|[\xE0-\xEF]..|[\xF0-\xFF]...)}
4651 {_XmlUtf8Decode($1, 1)}egs;
4652 }
4653 else
4654 { $str= encode( ascii => $str, $FB_XMLCREF); }
4655 return $str;
4656 }
4657
4658# this one shamelessly lifted from XML::DOM
4659# does NOT work on 5.8.0
4660sub _XmlUtf8Decode
4661 { my ($str, $hex) = @_;
4662 my $len = length ($str);
4663 my $n;
4664
4665 if ($len == 2)
4666 { my @n = unpack "C2", $str;
4667 $n = (($n[0] & 0x3f) << 6) + ($n[1] & 0x3f);
4668 }
4669 elsif ($len == 3)
4670 { my @n = unpack "C3", $str;
4671 $n = (($n[0] & 0x1f) << 12) + (($n[1] & 0x3f) << 6) + ($n[2] & 0x3f);
4672 }
4673 elsif ($len == 4)
4674 { my @n = unpack "C4", $str;
4675 $n = (($n[0] & 0x0f) << 18) + (($n[1] & 0x3f) << 12)
4676 + (($n[2] & 0x3f) << 6) + ($n[3] & 0x3f);
4677 }
4678 elsif ($len == 1) # just to be complete...
4679 { $n = ord ($str); }
4680 else
4681 { croak "bad value [$str] for _XmlUtf8Decode"; }
4682
4683 my $char= $hex ? sprintf ("&#x%x;", $n) : "&#$n;";
4684 return $char;
4685 }
4686
4687
4688sub unicode_convert
4689 { my $enc= $_[1] ? $_[1] : $_[0]; # so the method can be called on the twig or directly
4690 _use( 'Unicode::Map8') or croak "Unicode::Map8 not available, needed for encoding filter: $!";
4691 _use( 'Unicode::String') or croak "Unicode::String not available, needed for encoding filter: $!";
4692 import Unicode::String qw(utf8);
4693 my $sub= eval qq{ { $NO_WARNINGS;
4694 my \$cnv;
4695 BEGIN { \$cnv= Unicode::Map8->new(\$enc)
4696 or croak "Can't create converter to \$enc";
4697 }
4698 sub { return \$cnv->to8 (utf8(\$_[0])->ucs2); }
4699 }
4700 };
4701 unless( $sub) { croak $@; }
4702 return $sub;
4703 }
4704
4705sub iconv_convert
4706 { my $enc= $_[1] ? $_[1] : $_[0]; # so the method can be called on the twig or directly
4707 _use( 'Text::Iconv') or croak "Text::Iconv not available, needed for encoding filter: $!";
4708 my $sub= eval qq{ { $NO_WARNINGS;
4709 my \$cnv;
4710 BEGIN { \$cnv = Text::Iconv->new( 'utf8', \$enc)
4711 or croak "Can't create iconv converter to \$enc";
4712 }
4713 sub { return \$cnv->convert( \$_[0]); }
4714 }
4715 };
4716 unless( $sub)
4717 { if( $@=~ m{^Unsupported conversion: Invalid argument})
4718 { croak "Unsupported encoding: $enc"; }
4719 else
4720 { croak $@; }
4721 }
4722
4723 return $sub;
4724 }
4725
4726sub encode_convert
4727 { my $enc= $_[1] ? $_[1] : $_[0]; # so the method can be called on the twig or directly
4728 my $sub= eval qq{sub { $NO_WARNINGS; return encode( "$enc", \$_[0]); } };
4729 croak "can't create Encode-based filter: $@" unless( $sub);
4730 return $sub;
4731 }
4732
4733
4734# XML::XPath compatibility
4735sub getRootNode { return $_[0]; }
4736sub getParentNode { return undef; }
4737sub getChildNodes { my @children= ($_[0]->root); return wantarray ? @children : \@children; }
4738
4739sub _weakrefs { return $weakrefs; }
4740sub _set_weakrefs { $weakrefs=shift() || 0; XML::Twig::Elt::set_destroy()if ! $weakrefs; } # for testing purposes
4741
4742sub _dump
4743 { my $t= shift;
4744 my $dump='';
4745
4746 $dump="document\n"; # should dump twig level data here
4747 if( $t->root) { $dump .= $t->root->_dump( @_); }
4748
4749 return $dump;
4750
4751 }
4752
4753
47541;
4755
4756######################################################################
4757package XML::Twig::Entity_list;
4758######################################################################
4759
47601800ns*isa= *UNIVERSAL::isa;
4761
4762sub new
476371µs
# spent 13µs within XML::Twig::Entity_list::new which was called 7 times, avg 2µs/call: # 7 times (13µs+0s) by XML::Twig::new at line 742, avg 2µs/call
{ my $class = shift;
476476µs my $self={ entities => {}, updated => 0};
4765
476672µs bless $self, $class;
476777µs return $self;
4768
4769 }
4770
4771sub add_new_ent
4772 { my $ent_list= shift;
4773 my $ent= XML::Twig::Entity->new( @_);
4774 $ent_list->add( $ent);
4775 return $ent_list;
4776 }
4777
4778sub _add_list
4779 { my( $ent_list, $to_add)= @_;
4780 my $ents_to_add= $to_add->{entities};
4781 return $ent_list unless( $ents_to_add && %$ents_to_add);
4782 @{$ent_list->{entities}}{keys %$ents_to_add}= values %$ents_to_add;
4783 $ent_list->{updated}=1;
4784 return $ent_list;
4785 }
4786
4787sub add
4788 { my( $ent_list, $ent)= @_;
4789 $ent_list->{entities}->{$ent->{name}}= $ent;
4790 $ent_list->{updated}=1;
4791 return $ent_list;
4792 }
4793
4794sub ent
4795 { my( $ent_list, $ent_name)= @_;
4796 return $ent_list->{entities}->{$ent_name};
4797 }
4798
4799# can be called with an entity or with an entity name
4800sub delete
4801 { my $ent_list= shift;
4802 if( isa( ref $_[0], 'XML::Twig::Entity'))
4803 { # the second arg is an entity
4804 my $ent= shift;
4805 delete $ent_list->{entities}->{$ent->{name}};
4806 }
4807 else
4808 { # the second arg was not entity, must be a string then
4809 my $name= shift;
4810 delete $ent_list->{entities}->{$name};
4811 }
4812 $ent_list->{updated}=1;
4813 return $ent_list;
4814 }
4815
4816sub print
4817 { my ($ent_list, $fh)= @_;
4818 my $old_select= defined $fh ? select $fh : undef;
4819
4820 foreach my $ent_name ( sort keys %{$ent_list->{entities}})
4821 { my $ent= $ent_list->{entities}->{$ent_name};
4822 # we have to test what the entity is or un-defined entities can creep in
4823 if( isa( $ent, 'XML::Twig::Entity')) { $ent->print(); }
4824 }
4825 select $old_select if( defined $old_select);
4826 return $ent_list;
4827 }
4828
4829sub text
4830 { my ($ent_list)= @_;
4831 return join "\n", map { $ent_list->{entities}->{$_}->text} sort keys %{$ent_list->{entities}};
4832 }
4833
4834# return the list of entity names
4835sub entity_names
4836 { my $ent_list= shift;
4837 return (sort keys %{$ent_list->{entities}}) ;
4838 }
4839
4840
4841sub list
4842 { my ($ent_list)= @_;
4843 return map { $ent_list->{entities}->{$_} } sort keys %{$ent_list->{entities}};
4844 }
4845
48461;
4847
4848######################################################################
4849package XML::Twig::Entity;
4850######################################################################
4851
4852#*isa= *UNIVERSAL::isa;
4853
4854sub new
4855 { my( $class, $name, $val, $sysid, $pubid, $ndata, $param)= @_;
4856 $class= ref( $class) || $class;
4857
4858 my $self={};
4859
4860 $self->{name} = $name;
4861 $self->{val} = $val if( defined $val );
4862 $self->{sysid} = $sysid if( defined $sysid);
4863 $self->{pubid} = $pubid if( defined $pubid);
4864 $self->{ndata} = $ndata if( defined $ndata);
4865 $self->{param} = $param if( defined $param);
4866
4867 bless $self, $class;
4868 return $self;
4869 }
4870
4871
4872sub name { return $_[0]->{name}; }
4873sub val { return $_[0]->{val}; }
4874sub sysid { return defined( $_[0]->{sysid}) ? $_[0]->{sysid} : ''; }
4875sub pubid { return defined( $_[0]->{pubid}) ? $_[0]->{pubid} : ''; }
4876sub ndata { return defined( $_[0]->{ndata}) ? $_[0]->{ndata} : ''; }
4877sub param { return defined( $_[0]->{param}) ? $_[0]->{param} : ''; }
4878
4879
4880sub print
4881 { my ($ent, $fh)= @_;
4882 my $text= $ent->text;
4883 if( $fh) { print $fh $text . "\n"; }
4884 else { print $text . "\n"; }
4885 }
4886
4887sub sprint
4888 { my ($ent)= @_;
4889 return $ent->text;
4890 }
4891
4892sub text
4893 { my ($ent)= @_;
4894 #warn "text called: '", $ent->_dump, "'\n";
4895 return '' if( !$ent->{name});
4896 my @tokens;
4897 push @tokens, '<!ENTITY';
4898
4899 push @tokens, '%' if( $ent->{param});
4900 push @tokens, $ent->{name};
4901
4902 if( defined $ent->{val} && !defined( $ent->{sysid}) && !defined($ent->{pubid}) )
4903 { push @tokens, _quoted_val( $ent->{val});
4904 }
4905 elsif( defined $ent->{sysid})
4906 { push @tokens, 'PUBLIC', _quoted_val( $ent->{pubid}) if( $ent->{pubid});
4907 push @tokens, 'SYSTEM' unless( $ent->{pubid});
4908 push @tokens, _quoted_val( $ent->{sysid});
4909 push @tokens, 'NDATA', $ent->{ndata} if( $ent->{ndata});
4910 }
4911 return join( ' ', @tokens) . '>';
4912 }
4913
4914sub _quoted_val
4915 { my $q= $_[0]=~ m{"} ? q{'} : q{"};
4916 return qq{$q$_[0]$q};
4917 }
4918
4919sub _dump
4920 { my( $ent)= @_; return join( " - ", map { "$_ => '$ent->{$_}'" } grep { defined $ent->{$_} } sort keys %$ent); }
4921
49221;
4923
4924######################################################################
4925package XML::Twig::Notation_list;
4926######################################################################
4927
49281200ns*isa= *UNIVERSAL::isa;
4929
4930sub new
493171µs
# spent 10µs within XML::Twig::Notation_list::new which was called 7 times, avg 1µs/call: # 7 times (10µs+0s) by XML::Twig::new at line 743, avg 1µs/call
{ my $class = shift;
493274µs my $self={ notations => {}, updated => 0};
4933
493471µs bless $self, $class;
493576µs return $self;
4936
4937 }
4938
4939sub add_new_notation
4940 { my $notation_list= shift;
4941 my $notation= XML::Twig::Notation->new( @_);
4942 $notation_list->add( $notation);
4943 return $notation_list;
4944 }
4945
4946sub _add_list
4947 { my( $notation_list, $to_add)= @_;
4948 my $notations_to_add= $to_add->{notations};
4949 return $notation_list unless( $notations_to_add && %$notations_to_add);
4950 @{$notation_list->{notations}}{keys %$notations_to_add}= values %$notations_to_add;
4951 $notation_list->{updated}=1;
4952 return $notation_list;
4953 }
4954
4955sub add
4956 { my( $notation_list, $notation)= @_;
4957 $notation_list->{notations}->{$notation->{name}}= $notation;
4958 $notation_list->{updated}=1;
4959 return $notation_list;
4960 }
4961
4962sub notation
4963 { my( $notation_list, $notation_name)= @_;
4964 return $notation_list->{notations}->{$notation_name};
4965 }
4966
4967# can be called with an notation or with an notation name
4968sub delete
4969 { my $notation_list= shift;
4970 if( isa( ref $_[0], 'XML::Twig::Notation'))
4971 { # the second arg is an notation
4972 my $notation= shift;
4973 delete $notation_list->{notations}->{$notation->{name}};
4974 }
4975 else
4976 { # the second arg was not notation, must be a string then
4977 my $name= shift;
4978 delete $notation_list->{notations}->{$name};
4979 }
4980 $notation_list->{updated}=1;
4981 return $notation_list;
4982 }
4983
4984sub print
4985 { my ($notation_list, $fh)= @_;
4986 my $old_select= defined $fh ? select $fh : undef;
4987
4988 foreach my $notation_name ( sort keys %{$notation_list->{notations}})
4989 { my $notation= $notation_list->{notations}->{$notation_name};
4990 # we have to test what the notation is or un-defined notations can creep in
4991 if( isa( $notation, 'XML::Twig::Notation')) { $notation->print(); }
4992 }
4993 select $old_select if( defined $old_select);
4994 return $notation_list;
4995 }
4996
4997sub text
4998 { my ($notation_list)= @_;
4999 return join "\n", map { $notation_list->{notations}->{$_}->text} sort keys %{$notation_list->{notations}};
5000 }
5001
5002# return the list of notation names
5003sub notation_names
5004 { my $notation_list= shift;
5005 return (sort keys %{$notation_list->{notations}}) ;
5006 }
5007
5008
5009sub list
5010 { my ($notation_list)= @_;
5011 return map { $notation_list->{notations}->{$_} } sort keys %{$notation_list->{notations}};
5012 }
5013
50141;
5015
5016######################################################################
5017package XML::Twig::Notation;
5018######################################################################
5019
5020#*isa= *UNIVERSAL::isa;
5021
5022BEGIN
502314µs
# spent 3µs within XML::Twig::Notation::BEGIN@5023 which was called: # once (3µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 5024
{ *sprint= *text;
50241313µs13µs }
# spent 3µs making 1 call to XML::Twig::Notation::BEGIN@5023
5025
5026sub new
5027 { my( $class, $name, $base, $sysid, $pubid)= @_;
5028 $class= ref( $class) || $class;
5029
5030 my $self={};
5031
5032 $self->{name} = $name;
5033 $self->{base} = $base if( defined $base );
5034 $self->{sysid} = $sysid if( defined $sysid);
5035 $self->{pubid} = $pubid if( defined $pubid);
5036
5037 bless $self, $class;
5038 return $self;
5039 }
5040
5041
5042sub name { return $_[0]->{name}; }
5043sub base { return $_[0]->{base}; }
5044sub sysid { return $_[0]->{sysid}; }
5045sub pubid { return $_[0]->{pubid}; }
5046
5047
5048sub print
5049 { my ($notation, $fh)= @_;
5050 my $text= $notation->text;
5051 if( $fh) { print $fh $text . "\n"; }
5052 else { print $text . "\n"; }
5053 }
5054
5055sub text
5056 { my ($notation)= @_;
5057 return '' if( !$notation->{name});
5058 my @tokens;
5059 push @tokens, '<!NOTATION';
5060 push @tokens, $notation->{name};
5061 push @tokens, ( 'PUBLIC', _quoted_val( $notation->{pubid} ) ) if $notation->{pubid};
5062 push @tokens, ( 'SYSTEM') if ! $notation->{pubid} && $notation->{sysid};
5063 push @tokens, (_quoted_val( $notation->{sysid}) ) if $notation->{sysid};
5064
5065 return join( ' ', @tokens) . '>';
5066 }
5067
5068sub _quoted_val
5069 { my $q= $_[0]=~ m{"} ? q{'} : q{"};
5070 return qq{$q$_[0]$q};
5071 }
5072
5073sub _dump
5074 { my( $notation)= @_; return join( " - ", map { "$_ => '$notation->{$_}'" } grep { defined $notation->{$_} } sort keys %$notation); }
5075
50761;
5077
5078######################################################################
5079package XML::Twig::Elt;
5080######################################################################
5081
50822253µs254µs
# spent 31µs (7+24) within XML::Twig::Elt::BEGIN@5082 which was called: # once (7µs+24µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 5082
use Carp;
# spent 31µs making 1 call to XML::Twig::Elt::BEGIN@5082 # spent 24µs making 1 call to Exporter::import
50831200ns*isa= *UNIVERSAL::isa;
5084
50851200nsmy $CDATA_START = "<![CDATA[";
50861100nsmy $CDATA_END = "]]>";
50871100nsmy $PI_START = "<?";
50881100nsmy $PI_END = "?>";
50891100nsmy $COMMENT_START = "<!--";
50901100nsmy $COMMENT_END = "-->";
5091
50921100nsmy $XMLNS_URI = 'http://www.w3.org/2000/xmlns/';
5093
5094
5095BEGIN
5096
# spent 49µs (33+16) within XML::Twig::Elt::BEGIN@5096 which was called: # once (33µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 5162
{ # set some aliases for methods
50971700ns *tag = *gi;
50981200ns *name = *gi;
50991100ns *set_tag = *set_gi;
51001100ns *set_name = *set_gi;
51011100ns *find_nodes = *get_xpath; # as in XML::DOM
51021100ns *findnodes = *get_xpath; # as in XML::LibXML
51031100ns *field = *first_child_text;
51041200ns *trimmed_field = *first_child_trimmed_text;
51051100ns *is_field = *contains_only_text;
51061100ns *is = *passes;
51071100ns *matches = *passes;
51081100ns *has_child = *first_child;
51091100ns *has_children = *first_child;
51101100ns *all_children_pass = *all_children_are;
51111100ns *all_children_match= *all_children_are;
51121200ns *getElementsByTagName= *descendants;
51131100ns *find_by_tag_name= *descendants_or_self;
51141100ns *unwrap = *erase;
51151200ns *inner_xml = *xml_string;
51161100ns *outer_xml = *sprint;
51171100ns *add_class = *add_to_class;
5118
51191200ns *first_child_is = *first_child_matches;
51201100ns *last_child_is = *last_child_matches;
51211100ns *next_sibling_is = *next_sibling_matches;
51221200ns *prev_sibling_is = *prev_sibling_matches;
51231100ns *next_elt_is = *next_elt_matches;
51241100ns *prev_elt_is = *prev_elt_matches;
51251100ns *parent_is = *parent_matches;
51261100ns *child_is = *child_matches;
51271100ns *inherited_att = *inherit_att;
5128
51291100ns *sort_children_by_value= *sort_children_on_value;
5130
51311200ns *has_atts= *att_nb;
5132
5133 # imports from XML::Twig
51341400ns *_is_fh= *XML::Twig::_is_fh;
5135
5136 # XML::XPath compatibility
51371100ns *string_value = *text;
51381100ns *toString = *sprint;
51391100ns *getName = *gi;
51401100ns *getRootNode = *twig;
51411200ns *getNextSibling = *_next_sibling;
51421100ns *getPreviousSibling = *_prev_sibling;
51431100ns *isElementNode = *is_elt;
51441100ns *isTextNode = *is_text;
51451100ns *isPI = *is_pi;
51461100ns *isPINode = *is_pi;
51471100ns *isProcessingInstructionNode= *is_pi;
51481100ns *isComment = *is_comment;
51491100ns *isCommentNode = *is_comment;
51501100ns *getTarget = *target;
51511200ns *getFirstChild = *_first_child;
51521100ns *getLastChild = *_last_child;
5153
5154 # try using weak references
5155 # test whether we can use weak references
515623µs { local $SIG{__DIE__};
5157119µs116µs if( eval 'require Scalar::Util' && defined( &Scalar::Util::weaken) )
# spent 16µs making 1 call to Exporter::import
# spent 2µs executing statements in string eval
5158 { import Scalar::Util qw(weaken); }
5159 elsif( eval 'require WeakRef')
5160 { import WeakRef; }
5161 }
516215.55ms149µs}
# spent 49µs making 1 call to XML::Twig::Elt::BEGIN@5096
5163
5164
5165# can be called as XML::Twig::Elt->new( [[$gi, $atts, [@content]])
5166# - gi is an optional gi given to the element
5167# - $atts is a hashref to attributes for the element
5168# - @content is an optional list of text and elements that will
5169# be inserted under the element
5170sub new
517136436955.7ms
# spent 1.82s (1.71+110ms) within XML::Twig::Elt::new which was called 364369 times, avg 5µs/call: # 364369 times (1.71s+110ms) by XML::Twig::_twig_start at line 2079, avg 5µs/call
{ my $class= shift;
517236436970.5ms $class= ref $class || $class;
517336436928.0ms my $elt = {};
517436436969.0ms bless ($elt, $class);
5175
517636436945.0ms return $elt unless @_;
5177
5178364369657ms364369110ms if( @_ == 1 && $_[0]=~ m{^\s*<}) { return $class->parse( @_); }
# spent 110ms making 364369 calls to CORE::match, avg 301ns/call
5179
5180 # if a gi is passed then use it
518136436957.1ms my $gi= shift;
5182364369170ms117242µs $elt->{gi}=$XML::Twig::gi2index{$gi} or $elt->set_gi( $gi);
# spent 242µs making 117 calls to XML::Twig::Elt::set_gi, avg 2µs/call
5183
5184
518536436992.5ms my $atts= ref $_[0] eq 'HASH' ? shift : undef;
5186
518736436942.6ms if( $atts && defined $atts->{$CDATA})
5188 { delete $atts->{$CDATA};
5189
5190 my $cdata= $class->new( $CDATA => @_);
5191 return $class->new( $gi, $atts, $cdata);
5192 }
5193
5194364369183ms if( $gi eq $PCDATA)
5195 { if( grep { ref $_ } @_) { croak "element $PCDATA can only be created from text"; }
5196 $elt->{pcdata}= join '', @_;
5197 }
5198 elsif( $gi eq $ENT)
5199 { $elt->{ent}= shift; }
5200 elsif( $gi eq $CDATA)
5201 { if( grep { ref $_ } @_) { croak "element $CDATA can only be created from text"; }
5202 $elt->{cdata}= join '', @_;
5203 }
5204 elsif( $gi eq $COMMENT)
5205 { if( grep { ref $_ } @_) { croak "element $COMMENT can only be created from text"; }
5206 $elt->{comment}= join '', @_;
5207 }
5208 elsif( $gi eq $PI)
5209 { if( grep { ref $_ } @_) { croak "element $PI can only be created from text"; }
5210 $elt->_set_pi( shift, join '', @_);
5211 }
5212 else
5213 { # the rest of the arguments are the content of the element
521436436973.9ms if( @_)
5215 { $elt->set_content( @_); }
5216 else
521736436979.0ms { $elt->{empty}= 1; }
5218 }
5219
522036436931.5ms if( $atts)
5221 { # the attribute hash can be used to pass the asis status
5222 if( defined $atts->{$ASIS}) { $elt->set_asis( $atts->{$ASIS} ); delete $atts->{$ASIS}; }
5223 if( defined $atts->{$EMPTY}) { $elt->{empty}= $atts->{$EMPTY}; delete $atts->{$EMPTY}; }
5224 if( keys %$atts) { $elt->set_atts( $atts); }
5225 $elt->_set_id( $atts->{$ID}) if( $atts->{$ID});
5226 }
5227
5228364369679ms return $elt;
5229 }
5230
5231# optimized version of $elt->new( PCDATA, $text);
5232sub _new_pcdata
5233 { my $class= $_[0];
5234 $class= ref $class || $class;
5235 my $elt = {};
5236 bless $elt, $class;
5237 $elt->{gi}=$XML::Twig::gi2index{$PCDATA} or $elt->set_gi( $PCDATA);
5238 $elt->{pcdata}= $_[1];
5239 return $elt;
5240 }
5241
5242# this function creates an XM:::Twig::Elt from a string
5243# it is quite clumsy at the moment, as it just creates a
5244# new twig then returns its root
5245# there might also be memory leaks there
5246# additional arguments are passed to new XML::Twig
5247sub parse
5248 { my $class= shift;
5249 if( ref( $class)) { $class= ref( $class); }
5250 my $string= shift;
5251 my %args= @_;
5252 my $t= XML::Twig->new(%args);
5253 $t->parse( $string);
5254 my $elt= $t->root;
5255 # clean-up the node
5256 delete $elt->{twig}; # get rid of the twig data
5257 delete $elt->{twig_current}; # better get rid of this too
5258 if( $t->{twig_id_list}) { $elt->{twig_id_list}= $t->{twig_id_list}; }
5259 $elt->cut;
5260 undef $t->{twig_root};
5261 return $elt;
5262 }
5263
5264sub set_inner_xml
5265 { my( $elt, $xml, @args)= @_;
5266 my $new_elt= $elt->parse( "<dummy>$xml</dummy>", @args);
5267 $elt->cut_children;
5268 $new_elt->paste_first_child( $elt);
5269 $new_elt->erase;
5270 return $elt;
5271 }
5272
5273sub set_outer_xml
5274 { my( $elt, $xml, @args)= @_;
5275 my $new_elt= $elt->parse( "<dummy>$xml</dummy>", @args);
5276 $elt->cut_children;
5277 $new_elt->replace( $elt);
5278 $new_elt->erase;
5279 return $new_elt;
5280 }
5281
5282
5283sub set_inner_html
5284 { my( $elt, $html)= @_;
5285 my $t= XML::Twig->new->parse_html( "<html>$html</html>");
5286 my $new_elt= $t->root;
5287 if( $elt->tag eq 'head')
5288 { $new_elt->first_child( 'head')->unwrap;
5289 $new_elt->first_child( 'body')->cut;
5290 }
5291 elsif( $elt->tag ne 'html')
5292 { $new_elt->first_child( 'head')->cut;
5293 $new_elt->first_child( 'body')->unwrap;
5294 }
5295 $new_elt->cut;
5296 $elt->cut_children;
5297 $new_elt->paste_first_child( $elt);
5298 $new_elt->erase;
5299 return $elt;
5300 }
5301
5302sub set_gi
530311722µs
# spent 242µs within XML::Twig::Elt::set_gi which was called 117 times, avg 2µs/call: # 117 times (242µs+0s) by XML::Twig::Elt::new at line 5182, avg 2µs/call
{ my ($elt, $gi)= @_;
530411738µs unless( defined $XML::Twig::gi2index{$gi})
5305 { # new gi, create entries in %gi2index and @index2gi
530611739µs push @XML::Twig::index2gi, $gi;
530711772µs $XML::Twig::gi2index{$gi}= $#XML::Twig::index2gi;
5308 }
530911729µs $elt->{gi}= $XML::Twig::gi2index{$gi};
531011791µs return $elt;
5311 }
5312
5313127487249ms
# spent 64.6ms within XML::Twig::Elt::gi which was called 127487 times, avg 507ns/call: # 127276 times (64.5ms+0s) by XML::Twig::Elt::__ANON__[(eval 128)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] at line 1 of (eval 128)[XML/Twig.pm:5871], avg 507ns/call # 103 times (30µs+0s) by XML::Twig::Elt::__ANON__[(eval 86)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] at line 1 of (eval 86)[XML/Twig.pm:5871], avg 286ns/call # 28 times (8µs+0s) by XML::Twig::Elt::__ANON__[(eval 91)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] at line 1 of (eval 91)[XML/Twig.pm:5871], avg 268ns/call # 15 times (10µs+0s) by Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell at line 583 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 660ns/call # 14 times (5µs+0s) by XML::Twig::Elt::__ANON__[(eval 90)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] at line 1 of (eval 90)[XML/Twig.pm:5871], avg 336ns/call # 14 times (5µs+0s) by XML::Twig::Elt::__ANON__[(eval 95)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] at line 1 of (eval 95)[XML/Twig.pm:5871], avg 336ns/call # 14 times (4µs+0s) by XML::Twig::Elt::__ANON__[(eval 96)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] at line 1 of (eval 96)[XML/Twig.pm:5871], avg 271ns/call # 12 times (4µs+0s) by Spreadsheet::ParseXLSX::_parse_themes at line 672 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 292ns/call # 6 times (8µs+0s) by XML::Twig::Elt::is_elt at line 5418, avg 1µs/call # 5 times (2µs+0s) by XML::Twig::Elt::__ANON__[(eval 101)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] at line 1 of (eval 101)[XML/Twig.pm:5871], avg 440ns/call
sub gi { return $XML::Twig::index2gi[$_[0]->{gi}]; }
5314
5315sub local_name
5316 { my $elt= shift;
5317 return _local_name( $XML::Twig::index2gi[$elt->{'gi'}]);
5318 }
5319
5320sub ns_prefix
5321 { my $elt= shift;
5322 return _ns_prefix( $XML::Twig::index2gi[$elt->{'gi'}]);
5323 }
5324
5325# namespace prefix for any qname (can be used for elements or attributes)
5326sub _ns_prefix
5327 { my $qname= shift;
5328 if( $qname=~ m{^([^:]*):})
5329 { return $1; }
5330 else
5331 { return( ''); } # should it be '' ?
5332 }
5333
5334# local name for any qname (can be used for elements or attributes)
5335sub _local_name
5336 { my $qname= shift;
5337 (my $local= $qname)=~ s{^[^:]*:}{};
5338 return $local;
5339 }
5340
5341#sub get_namespace
5342sub namespace ## no critic (Subroutines::ProhibitNestedSubs);
5343 { my $elt= shift;
5344 my $prefix= defined $_[0] ? shift() : $elt->ns_prefix;
5345 my $ns_att= $prefix ? "xmlns:$prefix" : "xmlns";
5346 my $expanded= $DEFAULT_NS{$prefix} || $elt->_inherit_att_through_cut( $ns_att) || '';
5347 return $expanded;
5348 }
5349
5350sub declare_missing_ns ## no critic (Subroutines::ProhibitNestedSubs);
5351 { my $root= shift;
5352 my %missing_prefix;
5353 my $map= $root->_current_ns_prefix_map;
5354
5355 foreach my $prefix (keys %$map)
5356 { my $prefix_att= $prefix eq '#default' ? 'xmlns' : "xmlns:$prefix";
5357 if( ! $root->{'att'}->{$prefix_att})
5358 { $root->set_att( $prefix_att => $map->{$prefix}); }
5359 }
5360 return $root;
5361 }
5362
5363sub _current_ns_prefix_map
5364 { my( $elt)= shift;
5365 my $map;
5366 while( $elt)
5367 { foreach my $att ($elt->att_names)
5368 { my $prefix= $att eq 'xmlns' ? '#default'
5369 : $att=~ m{^xmlns:(.*)$} ? $1
5370 : next
5371 ;
5372 if( ! exists $map->{$prefix}) { $map->{$prefix}= $elt->{'att'}->{$att}; }
5373 }
5374 $elt= $elt->{parent} || ($elt->{former} && $elt->{former}->{parent});
5375 }
5376 return $map;
5377 }
5378
5379sub set_ns_decl
5380 { my( $elt, $uri, $prefix)= @_;
5381 my $ns_att= $prefix ? "xmlns:$prefix" : 'xmlns';
5382 $elt->set_att( $ns_att => $uri);
5383 return $elt;
5384 }
5385
5386sub set_ns_as_default
5387 { my( $root, $uri)= @_;
5388 my @ns_decl_to_remove;
5389 foreach my $elt ($root->descendants_or_self)
5390 { if( $elt->_ns_prefix && $elt->namespace eq $uri)
5391 { $elt->set_tag( $elt->local_name); }
5392 # store any namespace declaration for that uri
5393 foreach my $ns_decl (grep { $_=~ m{xmlns(:|$)} && $elt->{'att'}->{$_} eq $uri } $elt->att_names)
5394 { push @ns_decl_to_remove, [$elt, $ns_decl]; }
5395 }
5396 $root->set_ns_decl( $uri);
5397 # now remove the ns declarations (if done earlier then descendants of an element with the ns declaration
5398 # are not considered being in the namespace
5399 foreach my $ns_decl_to_remove ( @ns_decl_to_remove)
5400 { my( $elt, $ns_decl)= @$ns_decl_to_remove;
5401 $elt->del_att( $ns_decl);
5402 }
5403
5404 return $root;
5405 }
5406
5407
5408
5409# return #ELT for an element and #PCDATA... for others
5410sub get_type
5411 { my $gi_nb= $_[0]->{gi}; # the number, not the string
5412 return $ELT if( $gi_nb >= $XML::Twig::SPECIAL_GI);
5413 return $_[0]->gi;
5414 }
5415
5416# return the gi if it's a "real" element, 0 otherwise
5417sub is_elt
5418616µs68µs
# spent 26µs (18+8) within XML::Twig::Elt::is_elt which was called 6 times, avg 4µs/call: # 6 times (18µs+8µs) by XML::Twig::Elt::cut at line 7171, avg 4µs/call
{ if( $_[0]->{gi} >= $XML::Twig::SPECIAL_GI)
# spent 8µs making 6 calls to XML::Twig::Elt::gi, avg 1µs/call
5419 { return $_[0]->gi; }
5420 else
5421 { return 0; }
5422 }
5423
5424
5425sub is_pcdata
5426 { my $elt= shift;
5427 return (exists $elt->{'pcdata'});
5428 }
5429
5430sub is_cdata
5431 { my $elt= shift;
5432 return (exists $elt->{'cdata'});
5433 }
5434
5435sub is_pi
5436 { my $elt= shift;
5437 return (exists $elt->{'target'});
5438 }
5439
5440sub is_comment
5441 { my $elt= shift;
5442 return (exists $elt->{'comment'});
5443 }
5444
5445sub is_ent
5446 { my $elt= shift;
5447 return (exists $elt->{ent} || $elt->{ent_name});
5448 }
5449
5450
5451sub is_text
5452 { my $elt= shift;
5453 return (exists( $elt->{'pcdata'}) || (exists $elt->{'cdata'}));
5454 }
5455
5456sub is_empty
5457 { return $_[0]->{empty} || 0; }
5458
5459sub set_empty
5460 { $_[0]->{empty}= defined( $_[1]) ? $_[1] : 1; return $_[0]; }
5461
5462sub set_not_empty
5463 { delete $_[0]->{empty} if( $_[0]->{'empty'}); return $_[0]; }
5464
5465
5466sub set_asis
5467 { my $elt=shift;
5468
5469 foreach my $descendant ($elt, $elt->_descendants )
5470 { $descendant->{asis}= 1;
5471 if( (exists $descendant->{'cdata'}))
5472 { $descendant->{gi}=$XML::Twig::gi2index{$PCDATA} or $descendant->set_gi( $PCDATA);
5473 $descendant->{pcdata}= $descendant->{cdata};
5474 }
5475
5476 }
5477 return $elt;
5478 }
5479
5480sub set_not_asis
5481 { my $elt=shift;
5482 foreach my $descendant ($elt, $elt->descendants)
5483 { delete $descendant->{asis} if $descendant->{asis};}
5484 return $elt;
5485 }
5486
5487sub is_asis
5488 { return $_[0]->{asis}; }
5489
5490sub closed
5491 { my $elt= shift;
5492 my $t= $elt->twig || return;
5493 my $curr_elt= $t->{twig_current};
5494 return 1 unless( $curr_elt);
5495 return $curr_elt->in( $elt);
5496 }
5497
5498sub set_pcdata
5499 { my( $elt, $pcdata)= @_;
5500
5501 if( $elt->{extra_data_in_pcdata})
5502 { _try_moving_extra_data( $elt, $pcdata);
5503 }
5504 $elt->{pcdata}= $pcdata;
5505 return $elt;
5506 }
5507
5508sub _extra_data_in_pcdata { return $_[0]->{extra_data_in_pcdata}; }
5509sub _set_extra_data_in_pcdata { $_[0]->{extra_data_in_pcdata}= $_[1]; return $_[0]; }
5510sub _del_extra_data_in_pcdata { delete $_[0]->{extra_data_in_pcdata}; return $_[0]; }
5511sub _unshift_extra_data_in_pcdata
5512 { my $e= shift;
5513 $e->{extra_data_in_pcdata}||=[];
5514 unshift @{$e->{extra_data_in_pcdata}}, { text => shift(), offset => shift() };
5515 }
5516sub _push_extra_data_in_pcdata
5517 { my $e= shift;
5518 $e->{extra_data_in_pcdata}||=[];
5519 push @{$e->{extra_data_in_pcdata}}, { text => shift(), offset => shift() };
5520 }
5521
5522sub _extra_data_before_end_tag { return $_[0]->{extra_data_before_end_tag} || ''; }
5523sub _set_extra_data_before_end_tag { $_[0]->{extra_data_before_end_tag}= $_[1]; return $_[0]}
5524sub _del_extra_data_before_end_tag { delete $_[0]->{extra_data_before_end_tag}; return $_[0]}
5525sub _prefix_extra_data_before_end_tag
5526 { my( $elt, $data)= @_;
5527 if($elt->{extra_data_before_end_tag})
5528 { $elt->{extra_data_before_end_tag}= $data . $elt->{extra_data_before_end_tag}; }
5529 else
5530 { $elt->{extra_data_before_end_tag}= $data; }
5531 return $elt;
5532 }
5533
5534# internal, in cases where we know there is no extra_data (inlined anyway!)
5535sub _set_pcdata { $_[0]->{pcdata}= $_[1]; }
5536
5537# try to figure out if we can keep the extra_data around
5538sub _try_moving_extra_data
5539 { my( $elt, $modified)=@_;
5540 my $initial= $elt->{pcdata};
5541 my $cpis= $elt->{extra_data_in_pcdata};
5542
5543 if( (my $offset= index( $modified, $initial)) != -1)
5544 { # text has been added
5545 foreach (@$cpis) { $_->{offset}+= $offset; }
5546 }
5547 elsif( ($offset= index( $initial, $modified)) != -1)
5548 { # text has been cut
5549 my $len= length( $modified);
5550 foreach my $cpi (@$cpis) { $cpi->{offset} -= $offset; }
5551 $elt->_set_extra_data_in_pcdata( [ grep { $_->{offset} >= 0 && $_->{offset} < $len } @$cpis ]);
5552 }
5553 else
5554 { _match_extra_data_words( $elt, $initial, $modified)
5555 || _match_extra_data_chars( $elt, $initial, $modified)
5556 || $elt->_del_extra_data_in_pcdata;
5557 }
5558 }
5559
5560sub _match_extra_data_words
5561 { my( $elt, $initial, $modified)= @_;
5562 my @initial= split /\b/, $initial;
5563 my @modified= split /\b/, $modified;
5564
5565 return _match_extra_data( $elt, length( $initial), \@initial, \@modified);
5566 }
5567
5568sub _match_extra_data_chars
5569 { my( $elt, $initial, $modified)= @_;
5570 my @initial= split //, $initial;
5571 my @modified= split //, $modified;
5572
5573 return _match_extra_data( $elt, length( $initial), \@initial, \@modified);
5574 }
5575
5576sub _match_extra_data
5577 { my( $elt, $length, $initial, $modified)= @_;
5578
5579 my $cpis= $elt->{extra_data_in_pcdata};
5580
5581 if( @$initial <= @$modified)
5582 {
5583 my( $ok, $positions, $offsets)= _pos_offset( $initial, $modified);
5584 if( $ok)
5585 { my $offset=0;
5586 my $pos= shift @$positions;
5587 foreach my $cpi (@$cpis)
5588 { while( $cpi->{offset} >= $pos)
5589 { $offset= shift @$offsets;
5590 $pos= shift @$positions || $length +1;
5591 }
5592 $cpi->{offset} += $offset;
5593 }
5594 return 1;
5595 }
5596 }
5597 else
5598 { my( $ok, $positions, $offsets)= _pos_offset( $modified, $initial);
5599 if( $ok)
5600 { #print STDERR "pos: ", join( ':', @$positions), "\n",
5601 # "offset: ", join( ':', @$offsets), "\n";
5602 my $offset=0;
5603 my $pos= shift @$positions;
5604 my $prev_pos= 0;
5605
5606 foreach my $cpi (@$cpis)
5607 { while( $cpi->{offset} >= $pos)
5608 { $offset= shift @$offsets;
5609 $prev_pos= $pos;
5610 $pos= shift @$positions || $length +1;
5611 }
5612 $cpi->{offset} -= $offset;
5613 if( $cpi->{offset} < $prev_pos) { delete $cpi->{text}; }
5614 }
5615 $elt->_set_extra_data_in_pcdata( [ grep { exists $_->{text} } @$cpis ]);
5616 return 1;
5617 }
5618 }
5619 return 0;
5620 }
5621
5622
5623sub _pos_offset
5624 { my( $short, $long)= @_;
5625 my( @pos, @offset);
5626 my( $s_length, $l_length)=(0,0);
5627 while (@$short)
5628 { my $s_word= shift @$short;
5629 my $l_word= shift @$long;
5630 if( $s_word ne $l_word)
5631 { while( @$long && $s_word ne $l_word)
5632 { $l_length += length( $l_word);
5633 $l_word= shift @$long;
5634 }
5635 if( !@$long && $s_word ne $l_word) { return 0; }
5636 push @pos, $s_length;
5637 push @offset, $l_length - $s_length;
5638 }
5639 my $length= length( $s_word);
5640 $s_length += $length;
5641 $l_length += $length;
5642 }
5643 return( 1, \@pos, \@offset);
5644 }
5645
5646sub append_pcdata
5647 { $_[0]->{'pcdata'}.= $_[1];
5648 return $_[0];
5649 }
5650
5651sub pcdata { return $_[0]->{pcdata}; }
5652
5653
5654sub append_extra_data
5655 { $_[0]->{extra_data}.= $_[1];
5656 return $_[0];
5657 }
5658
5659sub set_extra_data
5660 { $_[0]->{extra_data}= $_[1];
5661 return $_[0];
5662 }
5663sub extra_data { return $_[0]->{extra_data} || ''; }
5664
5665sub set_target
5666 { my( $elt, $target)= @_;
5667 $elt->{target}= $target;
5668 return $elt;
5669 }
5670sub target { return $_[0]->{target}; }
5671
5672sub set_data
5673 { $_[0]->{'data'}= $_[1];
5674 return $_[0];
5675 }
5676sub data { return $_[0]->{data}; }
5677
5678sub set_pi
5679 { my $elt= shift;
5680 unless( $elt->{gi} == $XML::Twig::gi2index{$PI})
5681 { $elt->cut_children;
5682 $elt->{gi}=$XML::Twig::gi2index{$PI} or $elt->set_gi( $PI);
5683 }
5684 return $elt->_set_pi( @_);
5685 }
5686
5687sub _set_pi
5688 { $_[0]->set_target( $_[1]);
5689 $_[0]->{data}= $_[2];
5690 return $_[0];
5691 }
5692
5693sub pi_string { my $string= $PI_START . $_[0]->{target};
5694 my $data= $_[0]->{data};
5695 if( defined( $data) && $data ne '') { $string .= " $data"; }
5696 $string .= $PI_END ;
5697 return $string;
5698 }
5699
5700sub set_comment
5701 { my $elt= shift;
5702 unless( $elt->{gi} == $XML::Twig::gi2index{$COMMENT})
5703 { $elt->cut_children;
5704 $elt->{gi}=$XML::Twig::gi2index{$COMMENT} or $elt->set_gi( $COMMENT);
5705 }
5706 $elt->{comment}= $_[0];
5707 return $elt;
5708 }
5709
5710sub _set_comment { $_[0]->{comment}= $_[1]; return $_[0]; }
5711sub comment { return $_[0]->{comment}; }
5712sub comment_string { return $COMMENT_START . _comment_escaped_string( $_[0]->{comment}) . $COMMENT_END; }
5713# comments cannot start or end with
5714sub _comment_escaped_string
5715 { my( $c)= @_;
5716 $c=~ s{^-}{ -};
5717 $c=~ s{-$}{- };
5718 $c=~ s{--}{- -}g;
5719 return $c;
5720 }
5721
5722sub set_ent { $_[0]->{ent}= $_[1]; return $_[0]; }
5723sub ent { return $_[0]->{ent}; }
5724sub ent_name { return substr( $_[0]->{ent}, 1, -1);}
5725
5726sub set_cdata
5727 { my $elt= shift;
5728 unless( $elt->{gi} == $XML::Twig::gi2index{$CDATA})
5729 { $elt->cut_children;
5730 $elt->insert_new_elt( first_child => $CDATA, @_);
5731 return $elt;
5732 }
5733 $elt->{cdata}= $_[0];
5734 return $_[0];
5735 }
5736
5737sub _set_cdata
5738 { $_[0]->{cdata}= $_[1];
5739 return $_[0];
5740 }
5741
5742sub append_cdata
5743 { $_[0]->{cdata}.= $_[1];
5744 return $_[0];
5745 }
5746sub cdata { return $_[0]->{cdata}; }
5747
5748
5749sub contains_only_text
5750 { my $elt= shift;
5751 return 0 unless $elt->is_elt;
5752 foreach my $child ($elt->_children)
5753 { return 0 if $child->is_elt; }
5754 return $elt;
5755 }
5756
5757sub contains_only
5758 { my( $elt, $exp)= @_;
5759 my @children= do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; };
5760 foreach my $child (@children)
5761 { return 0 unless $child->is( $exp); }
5762 return @children || 1;
5763 }
5764
5765sub contains_a_single
5766 { my( $elt, $exp)= @_;
5767 my $child= $elt->{first_child} or return 0;
5768 return 0 unless $child->passes( $exp);
5769 return 0 if( $child->{next_sibling});
5770 return $child;
5771 }
5772
5773
5774sub root
5775162µs
# spent 40µs within XML::Twig::Elt::root which was called 16 times, avg 3µs/call: # 16 times (40µs+0s) by XML::Twig::Elt::twig at line 5788, avg 3µs/call
{ my $elt= shift;
57761631µs while( $elt->{parent}) { $elt= $elt->{parent}; }
57771616µs return $elt;
5778 }
5779
5780sub _root_through_cut
5781 { my $elt= shift;
5782 while( $elt->{parent} || ($elt->{former} && $elt->{former}->{parent})) { $elt= $elt->{parent} || ($elt->{former} && $elt->{former}->{parent}); }
5783 return $elt;
5784 }
5785
5786sub twig
5787162µs
# spent 78µs (38+40) within XML::Twig::Elt::twig which was called 16 times, avg 5µs/call: # 2 times (5µs+4µs) by XML::Twig::Elt::__ANON__[(eval 62)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 62)[XML/Twig.pm:7113], avg 4µs/call # once (4µs+5µs) by XML::Twig::Elt::__ANON__[(eval 129)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 129)[XML/Twig.pm:7113] # once (4µs+3µs) by XML::Twig::Elt::__ANON__[(eval 58)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 58)[XML/Twig.pm:7113] # once (3µs+3µs) by XML::Twig::Elt::__ANON__[(eval 60)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 60)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 64)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 64)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 103)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 103)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 61)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 61)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 97)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 97)[XML/Twig.pm:7113] # once (2µs+3µs) by XML::Twig::Elt::__ANON__[(eval 63)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 63)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 70)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 70)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 76)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 76)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 85)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 85)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 68)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 68)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 87)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 87)[XML/Twig.pm:7113] # once (2µs+2µs) by XML::Twig::Elt::__ANON__[(eval 66)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 66)[XML/Twig.pm:7113]
{ my $elt= shift;
57881613µs1640µs my $root= $elt->root;
# spent 40µs making 16 calls to XML::Twig::Elt::root, avg 3µs/call
57891630µs return $root->{twig};
5790 }
5791
5792sub _twig_through_cut
5793 { my $elt= shift;
5794 my $root= $elt->_root_through_cut;
5795 return $root->{twig};
5796 }
5797
5798
5799# used for navigation
5800# returns undef or the element, depending on whether $elt passes $cond
5801# $cond can be
5802# - empty: the element passes the condition
5803# - ELT ('#ELT'): the element passes the condition if it is a "real" element
5804# - TEXT ('#TEXT'): the element passes if it is a CDATA or PCDATA element
5805# - a string with an XPath condition (only a subset of XPath is actually
5806# supported).
5807# - a regexp: the element passes if its gi matches the regexp
5808# - a code ref: the element passes if the code, applied on the element,
5809# returns true
5810
58111100nsmy %cond_cache; # expression => coderef
5812
5813sub reset_cond_cache { %cond_cache=(); }
5814
5815{
5816 sub _install_cond
5817377µs
# spent 7.38ms (6.09+1.29) within XML::Twig::Elt::_install_cond which was called 37 times, avg 199µs/call: # 26 times (1.65ms+654µs) by XML::Twig::Elt::first_child at line 5999, avg 89µs/call # 11 times (4.43ms+637µs) by XML::Twig::Elt::passes at line 5974, avg 461µs/call
{ my $cond= shift;
5818373µs my $test;
5819376µs my $init='';
5820
5821376µs my $original_cond= $cond;
5822
58233762µs3720µs my $not= ($cond=~ s{^\s*!}{}) ? '!' : '';
# spent 20µs making 37 calls to CORE::subst, avg 543ns/call
5824
58253711µs if( ref $cond eq 'CODE') { return $cond; }
5826
58273711µs if( ref $cond eq 'Regexp')
5828 { $test = qq{(\$_[0]->gi=~ /$cond/)}; }
5829 else
5830374µs { my @tests;
5831379µs while( $cond)
5832 {
5833 # the condition is a string
583437696µs222513µs if( $cond=~ s{$ELT$SEP}{})
# spent 406µs making 111 calls to CORE::regcomp, avg 4µs/call # spent 107µs making 111 calls to CORE::subst, avg 966ns/call
5835 { push @tests, qq{\$_[0]->is_elt}; }
5836 elsif( $cond=~ s{$TEXT$SEP}{})
5837 { push @tests, qq{\$_[0]->is_text}; }
5838 elsif( $cond=~ s{^\s*($REG_TAG_PART)$SEP}{})
58393733µs37153µs { push @tests, _gi_test( $1); }
# spent 153µs making 37 calls to XML::Twig::Elt::_gi_test, avg 4µs/call
5840 elsif( $cond=~ s{^\s*($REG_REGEXP)$SEP}{})
5841 { # /regexp/
5842 push @tests, qq{ \$_[0]->gi=~ $1 };
5843 }
5844 elsif( $cond=~ s{^\s*($REG_TAG_PART)?\s* # $1
5845 \[\s*(-?)\s*(\d+)\s*\] # [$2]
5846 $SEP}{}xo
5847 )
5848 { my( $gi, $neg, $index)= ($1, $2, $3);
5849 my $siblings= $neg ? q{$_[0]->_next_siblings} : q{$_[0]->_prev_siblings};
5850 if( $gi && ($gi ne '*'))
5851 #{ $test= qq{((\$_[0]->gi eq "$gi") && (scalar( grep { \$_->gi eq "$gi" } $siblings) + 1 == $index))}; }
5852 { push @tests, _and( _gi_test( $gi), qq{ (scalar( grep { \$_->gi eq "$gi" } $siblings) + 1 == $index)}); }
5853 else
5854 { push @tests, qq{(scalar( $siblings) + 1 == $index)}; }
5855 }
5856 elsif( $cond=~ s{^\s*($REG_TAG_PART?)\s*($REG_PREDICATE)$SEP}{})
5857 { my( $gi, $predicate)= ( $1, $2);
5858 push @tests, _and( _gi_test( $gi), _parse_predicate_in_step( $predicate));
5859 }
5860 elsif( $cond=~ s{^\s*($REG_NAKED_PREDICATE)$SEP}{})
5861 { push @tests, _parse_predicate_in_step( $1); }
5862 else
5863 { croak "wrong navigation condition '$original_cond' ($@)"; }
5864 }
58653718µs $test= @tests > 1 ? '(' . join( '||', map { "($_)" } @tests) . ')' : $tests[0];
5866 }
5867
5868 #warn "init: '$init' - test: '$test'\n";
5869
58703715µs my $sub= qq{sub { $NO_WARNINGS; $init; return $not($test) ? \$_[0] : undef; } };
587137984µs my $s= eval $sub;
# spent 818ms executing statements in string eval
# includes 54.5ms spent executing 202908 calls to 2 subs defined therein. # spent 627ms executing statements in string eval
# includes 299ms spent executing 127277 calls to 2 subs defined therein. # spent 574ms executing statements in string eval
# includes 49.6ms spent executing 127277 calls to 2 subs defined therein. # spent 156µs executing statements in 4 string evals (merged)
# includes 42µs spent executing 50 calls to 5 subs defined therein. # spent 137µs executing statements in 4 string evals (merged)
# includes 31µs spent executing 17 calls to 5 subs defined therein. # spent 125µs executing statements in 3 string evals (merged)
# includes 28µs spent executing 16 calls to 4 subs defined therein. # spent 120µs executing statements in string eval
# includes 96µs spent executing 104 calls to 2 subs defined therein. # spent 109µs executing statements in 3 string evals (merged)
# includes 33µs spent executing 22 calls to 4 subs defined therein. # spent 109µs executing statements in 3 string evals (merged)
# includes 24µs spent executing 26 calls to 4 subs defined therein. # spent 82µs executing statements in 2 string evals (merged)
# includes 15µs spent executing 8 calls to 3 subs defined therein. # spent 70µs executing statements in 2 string evals (merged)
# includes 18µs spent executing 9 calls to 3 subs defined therein. # spent 56µs executing statements in string eval
# includes 32µs spent executing 29 calls to 2 subs defined therein. # spent 47µs executing statements in string eval
# includes 20µs spent executing 15 calls to 2 subs defined therein. # spent 45µs executing statements in string eval
# includes 19µs spent executing 15 calls to 2 subs defined therein. # spent 45µs executing statements in string eval
# includes 8µs spent executing 2 calls to 2 subs defined therein. # spent 45µs executing statements in string eval
# includes 13µs spent executing 7 calls to 2 subs defined therein. # spent 43µs executing statements in string eval
# includes 19µs spent executing 15 calls to 2 subs defined therein. # spent 40µs executing statements in string eval
# includes 15µs spent executing 6 calls to 2 subs defined therein. # spent 38µs executing statements in string eval
# includes 8µs spent executing 2 calls to 2 subs defined therein. # spent 36µs executing statements in string eval
# includes 10µs spent executing 11 calls to 2 subs defined therein. # spent 35µs executing statements in string eval
# includes 7µs spent executing 2 calls to 2 subs defined therein. # spent 33µs executing statements in string eval
# includes 8µs spent executing 5 calls to 2 subs defined therein. # spent 32µs executing statements in string eval
# includes 7µs spent executing 3 calls to 2 subs defined therein.
5872 #warn "cond: $cond\n$sub\n";
5873377µs if( $@)
5874 { croak "wrong navigation condition '$original_cond' ($@);" }
58753768µs return $s;
5876 }
5877
5878 sub _gi_test
58793725µs
# spent 153µs (112+41) within XML::Twig::Elt::_gi_test which was called 37 times, avg 4µs/call: # 37 times (112µs+41µs) by XML::Twig::Elt::_install_cond at line 5839, avg 4µs/call
{ my( $full_gi)= @_;
5880
5881 # optimize if the gi exists, including the case where the gi includes a dot
58823714µs my $index= $XML::Twig::gi2index{$full_gi};
5883373.72ms if( $index) { return qq{\$_[0]->{gi} == $index}; }
5884
5885725µs715µs my( $gi, $class, $id)= $full_gi=~ m{^(.*?)(?:[.]([^.]*)|[#](.*))?$};
# spent 15µs making 7 calls to CORE::match, avg 2µs/call
5886
588771µs my $gi_test='';
588873µs if( $gi && $gi ne '*' )
5889 { # 2 options, depending on whether the gi exists in gi2index
5890 # start optimization
589172µs my $index= $XML::Twig::gi2index{$gi};
589272µs if( $index)
5893 { # the gi exists, use its index as a faster shortcut
5894 $gi_test = qq{\$_[0]->{gi} == $index};
5895 }
5896 else
5897 { # it does not exist (but might be created later), compare the strings
5898
589973µs $gi_test = qq{ \$_[0]->gi eq "$gi"};
5900 }
5901 }
5902 else
5903 { $gi_test= 1; }
5904
590571µs my $class_test='';
5906 #warn "class: '$class'";
590771µs if( $class)
5908 { $class_test = qq{ defined( \$_[0]->{att}->{class}) && \$_[0]->{att}->{class}=~ m{\\b$class\\b} }; }
5909
591071µs my $id_test='';
5911 #warn "id: '$id'";
59127600ns if( $id)
5913 { $id_test = qq{ defined( \$_[0]->{att}->{$ID}) && \$_[0]->{att}->{$ID} eq '$id' }; }
5914
5915
5916 #warn "gi_test: '$gi_test' - class_test: '$class_test' returning ", _and( $gi_test, $class_test);
5917713µs726µs return _and( $gi_test, $class_test, $id_test);
# spent 26µs making 7 calls to XML::Twig::Elt::_and, avg 4µs/call
5918 }
5919
5920
5921 # input: the original predicate
5922 sub _parse_predicate_in_step
5923 { my $cond= shift;
5924 my %PERL_ALPHA_TEST= ( '=' => ' eq ', '!=' => ' ne ', '>' => ' gt ', '>=' => ' ge ', '<' => ' lt ', '<=' => ' le ');
5925
5926 $cond=~ s{^\s*\[\s*}{};
5927 $cond=~ s{\s*\]\s*$}{};
5928 $cond=~ s{( ($REG_STRING|$REG_REGEXP) # strings or regexps
5929 { my( $token, $string, $att, $bare_att, $num_test, $alpha_test, $func, $string_regexp, $string_eq, $string_test, $and_or)
5930 = ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);
5931
5932 if( defined $string) { $token }
5933 elsif( $att) { "( \$_[0]->{att} && exists( \$_[0]->{att}->{'$att'}) && \$_[0]->{att}->{'$att'})"; }
5934 elsif( $bare_att) { "(\$_[0]->{att} && defined( \$_[0]->{att}->{'$bare_att'}))"; }
5935 elsif( $num_test && ($num_test eq '=') ) { "==" } # others tests are unchanged
5936 elsif( $alpha_test) { $PERL_ALPHA_TEST{$alpha_test} }
5937 elsif( $func && $func=~ m{^(?:string|text)})
5938 { "\$_[0]->text"; }
5939 elsif( $string_regexp && $string_regexp =~ m{(?:string|text)\(\s*($REG_TAG_NAME)\s*\)\s*($REG_MATCH)\s*($REG_REGEXP)})
5940 { "(XML::Twig::_first_n { (\$_->gi eq '$1') && (\$_->text $2 $3) } 1, \$_[0]->_children)"; }
5941 elsif( $string_eq && $string_eq =~ m{(?:string|text)\(\s*($REG_TAG_NAME)\s*\)\s*(!?=)\s*($REG_VALUE)})
5942 {"(XML::Twig::_first_n { (\$_->gi eq '$1') && (\$_->text $PERL_ALPHA_TEST{$2} $3) } 1, \$_[0]->_children)"; }
5943 elsif( $string_test && $string_test =~ m{(?:string|text)\(\s*($REG_TAG_NAME)\s*\)\s*([<>]=?)\s*($REG_VALUE)})
5944 { "(XML::Twig::_first_n { (\$_->gi eq '$1') && (\$_->text $2 $3) } 1, \$_[0]->_children)"; }
5945 elsif( $and_or) { $and_or eq 'and' ? '&&' : '||' ; }
5946 else { $token; }
5947 }gexs;
5948
- -
5960 return "($cond)";
5961 }
5962
5963
5964 sub _op
596552µs
# spent 10µs within XML::Twig::Elt::_op which was called 5 times, avg 2µs/call: # 5 times (10µs+0s) by XML::Twig::Elt::_install_xpath at line 7079, avg 2µs/call
{ my $op= shift;
596653µs if( $op eq '=') { $op= 'eq'; }
5967 elsif( $op eq '!=') { $op= 'ne'; }
596857µs return $op;
5969 }
5970
5971 sub passes
597245841µs
# spent 5.29ms (190µs+5.10) within XML::Twig::Elt::passes which was called 458 times, avg 12µs/call: # 442 times (122µs+0s) by XML::Twig::Elt::ancestors at line 6341, avg 275ns/call # 16 times (68µs+5.10ms) by XML::Twig::descendants at line 3759, avg 323µs/call
{ my( $elt, $cond)= @_;
5973458258µs return $elt unless $cond;
59741616µs115.07ms my $sub= ($cond_cache{$cond} ||= _install_cond( $cond));
# spent 5.07ms making 11 calls to XML::Twig::Elt::_install_cond, avg 461µs/call
59751630µs1632µs return $sub->( $elt);
5976 }
5977}
5978
5979sub set_parent
59801200ns { $_[0]->{parent}= $_[1];
5981 if( $XML::Twig::weakrefs) { weaken( $_[0]->{parent}); }
5982 }
5983
5984sub parent
5985 { my $elt= shift;
5986 my $cond= shift || return $elt->{parent};
5987 do { $elt= $elt->{parent} || return; } until ( $elt->passes( $cond));
5988 return $elt;
5989 }
5990
5991sub set_first_child
5992 { $_[0]->{'first_child'}= $_[1];
5993 }
5994
5995sub first_child
599642156035.3ms
# spent 2.08s (1.66+427ms) within XML::Twig::Elt::first_child which was called 421560 times, avg 5µs/call: # 202907 times (775ms+364ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 423 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 6µs/call # 202907 times (775ms+49.7ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 375 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 4µs/call # 15651 times (105ms+11.9ms) by XML::Twig::Elt::children at line 6271, avg 7µs/call # 20 times (53µs+180µs) by Spreadsheet::ParseXLSX::_parse_styles at line 822 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 12µs/call # 18 times (79µs+324µs) by Spreadsheet::ParseXLSX::_parse_styles at line 872 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 22µs/call # 15 times (20µs+111µs) by Spreadsheet::ParseXLSX::_parse_styles at line 912 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 9µs/call # 15 times (22µs+105µs) by Spreadsheet::ParseXLSX::_parse_styles at line 911 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 9µs/call # 5 times (40µs+404µs) by Spreadsheet::ParseXLSX::_parse_styles at line 829 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 89µs/call # 5 times (20µs+75µs) by Spreadsheet::ParseXLSX::_parse_styles at line 834 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 19µs/call # 5 times (20µs+4µs) by Spreadsheet::ParseXLSX::_parse_styles at line 833 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 5µs/call # 3 times (20µs+118µs) by Spreadsheet::ParseXLSX::_parse_styles at line 856 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 46µs/call # 3 times (19µs+109µs) by Spreadsheet::ParseXLSX::_parse_styles at line 857 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 43µs/call # 3 times (10µs+85µs) by Spreadsheet::ParseXLSX::_parse_styles at line 858 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 32µs/call # 3 times (14µs+81µs) by Spreadsheet::ParseXLSX::_parse_styles at line 861 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 32µs/call
{ my $elt= shift;
599742156048.4ms my $cond= shift || return $elt->{first_child};
599842153254.3ms my $child= $elt->{first_child};
599942153279.2ms262.31ms my $test_cond= ($cond_cache{$cond} ||= _install_cond( $cond));
# spent 2.31ms making 26 calls to XML::Twig::Elt::_install_cond, avg 89µs/call
6000421532192ms270241425ms while( $child && !$test_cond->( $child))
# spent 364ms making 127276 calls to XML::Twig::Elt::__ANON__[(eval 128)[XML/Twig.pm:5871]:1], avg 3µs/call # spent 49.6ms making 127276 calls to XML::Twig::Elt::__ANON__[(eval 127)[XML/Twig.pm:5871]:1], avg 390ns/call # spent 11.2ms making 15608 calls to XML::Twig::Elt::__ANON__[(eval 126)[XML/Twig.pm:5871]:1], avg 717ns/call # spent 12µs making 5 calls to XML::Twig::Elt::__ANON__[(eval 101)[XML/Twig.pm:5871]:1], avg 2µs/call # spent 10µs making 6 calls to XML::Twig::Elt::__ANON__[(eval 91)[XML/Twig.pm:5871]:1], avg 2µs/call # spent 7µs making 3 calls to XML::Twig::Elt::__ANON__[(eval 95)[XML/Twig.pm:5871]:1], avg 2µs/call # spent 6µs making 3 calls to XML::Twig::Elt::__ANON__[(eval 90)[XML/Twig.pm:5871]:1], avg 2µs/call # spent 6µs making 3 calls to XML::Twig::Elt::__ANON__[(eval 96)[XML/Twig.pm:5871]:1], avg 2µs/call # spent 5µs making 15 calls to XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1], avg 347ns/call # spent 5µs making 13 calls to XML::Twig::Elt::__ANON__[(eval 73)[XML/Twig.pm:5871]:1], avg 400ns/call # spent 4µs making 11 calls to XML::Twig::Elt::__ANON__[(eval 130)[XML/Twig.pm:5871]:1], avg 409ns/call # spent 3µs making 6 calls to XML::Twig::Elt::__ANON__[(eval 100)[XML/Twig.pm:5871]:1], avg 567ns/call # spent 3µs making 4 calls to XML::Twig::Elt::__ANON__[(eval 105)[XML/Twig.pm:5871]:1], avg 650ns/call # spent 2µs making 3 calls to XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1], avg 767ns/call # spent 2µs making 2 calls to XML::Twig::Elt::__ANON__[(eval 80)[XML/Twig.pm:5871]:1], avg 850ns/call # spent 2µs making 2 calls to XML::Twig::Elt::__ANON__[(eval 79)[XML/Twig.pm:5871]:1], avg 750ns/call # spent 2µs making 3 calls to XML::Twig::Elt::__ANON__[(eval 94)[XML/Twig.pm:5871]:1], avg 500ns/call # spent 1µs making 2 calls to XML::Twig::Elt::__ANON__[(eval 71)[XML/Twig.pm:5871]:1], avg 650ns/call
600112740432.1ms10672µs { $child= $child->{next_sibling}; }
# spent 24µs making 22 calls to XML::Twig::Elt::__ANON__[(eval 91)[XML/Twig.pm:5871]:1], avg 1µs/call # spent 13µs making 11 calls to XML::Twig::Elt::__ANON__[(eval 90)[XML/Twig.pm:5871]:1], avg 1µs/call # spent 12µs making 11 calls to XML::Twig::Elt::__ANON__[(eval 95)[XML/Twig.pm:5871]:1], avg 1µs/call # spent 12µs making 11 calls to XML::Twig::Elt::__ANON__[(eval 96)[XML/Twig.pm:5871]:1], avg 1µs/call # spent 3µs making 16 calls to XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1], avg 206ns/call # spent 2µs making 7 calls to XML::Twig::Elt::__ANON__[(eval 105)[XML/Twig.pm:5871]:1], avg 243ns/call # spent 2µs making 8 calls to XML::Twig::Elt::__ANON__[(eval 73)[XML/Twig.pm:5871]:1], avg 212ns/call # spent 2µs making 7 calls to XML::Twig::Elt::__ANON__[(eval 94)[XML/Twig.pm:5871]:1], avg 214ns/call # spent 1µs making 6 calls to XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1], avg 233ns/call # spent 1µs making 4 calls to XML::Twig::Elt::__ANON__[(eval 71)[XML/Twig.pm:5871]:1], avg 250ns/call # spent 700ns making 2 calls to XML::Twig::Elt::__ANON__[(eval 80)[XML/Twig.pm:5871]:1], avg 350ns/call # spent 300ns making 1 call to XML::Twig::Elt::__ANON__[(eval 130)[XML/Twig.pm:5871]:1]
6002421532849ms return $child;
6003 }
6004
6005sub _first_child { return $_[0]->{first_child}; }
6006sub _last_child { return $_[0]->{last_child}; }
6007sub _next_sibling { return $_[0]->{next_sibling}; }
6008sub _prev_sibling { return $_[0]->{prev_sibling}; }
6009sub _parent { return $_[0]->{parent}; }
6010sub _next_siblings { my $elt= shift; my @siblings; while( $elt= $elt->{next_sibling}) { push @siblings, $elt; } return @siblings; }
6011sub _prev_siblings { my $elt= shift; my @siblings; while( $elt= $elt->{prev_sibling}) { push @siblings, $elt; } return @siblings; }
6012
6013# sets a field
6014# arguments $record, $cond, @content
6015sub set_field
6016 { my $record = shift;
6017 my $cond = shift;
6018 my $child= $record->first_child( $cond);
6019 if( $child)
6020 { $child->set_content( @_); }
6021 else
6022 { if( $cond=~ m{^\s*($REG_TAG_NAME)})
6023 { my $gi= $1;
6024 $child= $record->insert_new_elt( last_child => $gi, @_);
6025 }
6026 else
6027 { croak "can't create a field name from $cond"; }
6028 }
6029 return $child;
6030 }
6031
6032sub set_last_child
6033 { $_[0]->{'last_child'}= $_[1];
6034 delete $_->[0]->{empty};
6035 if( $XML::Twig::weakrefs) { weaken( $_[0]->{'last_child'}); }
6036 }
6037
6038sub last_child
6039 { my $elt= shift;
6040 my $cond= shift || return $elt->{last_child};
6041 my $test_cond= ($cond_cache{$cond} ||= _install_cond( $cond));
6042 my $child= $elt->{last_child};
6043 while( $child && !$test_cond->( $child) )
6044 { $child= $child->{prev_sibling}; }
6045 return $child
6046 }
6047
6048
6049sub set_prev_sibling
6050 { $_[0]->{'prev_sibling'}= $_[1];
6051 if( $XML::Twig::weakrefs) { weaken( $_[0]->{'prev_sibling'}); }
6052 }
6053
6054sub prev_sibling
6055 { my $elt= shift;
6056 my $cond= shift || return $elt->{prev_sibling};
6057 my $test_cond= ($cond_cache{$cond} ||= _install_cond( $cond));
6058 my $sibling= $elt->{prev_sibling};
6059 while( $sibling && !$test_cond->( $sibling) )
6060 { $sibling= $sibling->{prev_sibling}; }
6061 return $sibling;
6062 }
6063
6064sub set_next_sibling { $_[0]->{'next_sibling'}= $_[1]; }
6065
6066sub next_sibling
606720298617.2ms
# spent 958ms (915+43.3) within XML::Twig::Elt::next_sibling which was called 202986 times, avg 5µs/call: # 202986 times (915ms+43.3ms) by XML::Twig::Elt::children at line 6274, avg 5µs/call
{ my $elt= shift;
606820298617.8ms my $cond= shift || return $elt->{next_sibling};
606920294728.9ms my $test_cond= ($cond_cache{$cond} ||= _install_cond( $cond));
607020294730.7ms my $sibling= $elt->{next_sibling};
607120294782.0ms18732443.3ms while( $sibling && !$test_cond->( $sibling) )
# spent 43.3ms making 187299 calls to XML::Twig::Elt::__ANON__[(eval 126)[XML/Twig.pm:5871]:1], avg 231ns/call # spent 3µs making 14 calls to XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1], avg 229ns/call # spent 2µs making 9 calls to XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1], avg 233ns/call # spent 500ns making 2 calls to XML::Twig::Elt::__ANON__[(eval 73)[XML/Twig.pm:5871]:1], avg 250ns/call
6072 { $sibling= $sibling->{next_sibling}; }
6073202947359ms return $sibling;
6074 }
6075
6076# methods dealing with the class attribute, convenient if you work with xhtml
6077sub class { $_[0]->{att}->{class}; }
6078# lvalue version of class. separate from class to avoid problem like RT#
6079sub lclass
6080 :lvalue # > perl 5.5
6081 { $_[0]->{att}->{class}; }
6082
6083sub set_class { my( $elt, $class)= @_; $elt->set_att( class => $class); }
6084
6085# adds a class to an element
6086sub add_to_class
6087 { my( $elt, $new_class)= @_;
6088 return $elt unless $new_class;
6089 my $class= $elt->class;
6090 my %class= $class ? map { $_ => 1 } split /\s+/, $class : ();
6091 $class{$new_class}= 1;
6092 $elt->set_class( join( ' ', sort keys %class));
6093 }
6094
6095sub remove_class
6096 { my( $elt, $class_to_remove)= @_;
6097 return $elt unless $class_to_remove;
6098 my $class= $elt->class;
6099 my %class= $class ? map { $_ => 1 } split /\s+/, $class : ();
6100 delete $class{$class_to_remove};
6101 $elt->set_class( join( ' ', sort keys %class));
6102 }
6103
6104sub att_to_class { my( $elt, $att)= @_; $elt->set_class( $elt->{'att'}->{$att}); }
6105sub add_att_to_class { my( $elt, $att)= @_; $elt->add_to_class( $elt->{'att'}->{$att}); }
6106sub move_att_to_class { my( $elt, $att)= @_; $elt->add_to_class( $elt->{'att'}->{$att});
6107 $elt->del_att( $att);
6108 }
6109sub tag_to_class { my( $elt)= @_; $elt->set_class( $elt->tag); }
6110sub add_tag_to_class { my( $elt)= @_; $elt->add_to_class( $elt->tag); }
6111sub set_tag_class { my( $elt, $new_tag)= @_; $elt->add_tag_to_class; $elt->set_tag( $new_tag); }
6112
6113sub tag_to_span
6114 { my( $elt)= @_;
6115 $elt->set_class( $elt->tag) unless( $elt->tag eq 'span' && $elt->class); # set class to span unless it would mean replacing it with span
6116 $elt->set_tag( 'span');
6117 }
6118
6119sub tag_to_div
6120 { my( $elt)= @_;
6121 $elt->set_class( $elt->tag) unless( $elt->tag eq 'div' && $elt->class); # set class to div unless it would mean replacing it with div
6122 $elt->set_tag( 'div');
6123 }
6124
6125sub in_class
6126 { my( $elt, $class)= @_;
6127 my $elt_class= $elt->class;
6128 return unless( defined $elt_class);
6129 return $elt->class=~ m{(?:^|\s)\Q$class\E(?:\s|$)} ? $elt : 0;
6130 }
6131
6132
6133# get or set all attributes
6134# argument can be a hash or a hashref
6135sub set_atts
613636436943.3ms
# spent 1.69s (1.56+128ms) within XML::Twig::Elt::set_atts which was called 364369 times, avg 5µs/call: # 364369 times (1.56s+128ms) by XML::Twig::_twig_start at line 2080, avg 5µs/call
{ my $elt= shift;
613736436941.3ms my %atts;
6138364369181ms364369128ms tie %atts, 'Tie::IxHash' if( keep_atts_order());
# spent 128ms making 364369 calls to XML::Twig::Elt::keep_atts_order, avg 352ns/call
6139364369318ms %atts= @_ == 1 ? %{$_[0]} : @_;
6140364369106ms $elt->{att}= \%atts;
614136436962.8ms if( exists $atts{$ID}) { $elt->_set_id( $atts{$ID}); }
6142364369793ms return $elt;
6143 }
6144
6145sub atts { return $_[0]->{att}; }
6146sub att_names { return (sort keys %{$_[0]->{att}}); }
6147sub del_atts { $_[0]->{att}={}; return $_[0]; }
6148
6149# get or set a single attribute (set works for several atts)
6150sub set_att
6151 { my $elt= shift;
6152
6153 if( $_[0] && ref( $_[0]) && !$_[1])
6154 { croak "improper call to set_att, usage is \$elt->set_att( att1 => 'val1', att2 => 'val2',...)"; }
6155
6156 unless( $elt->{att})
6157 { $elt->{att}={};
6158 tie %{$elt->{att}}, 'Tie::IxHash' if( keep_atts_order());
6159 }
6160
6161 while(@_)
6162 { my( $att, $val)= (shift, shift);
6163 $elt->{att}->{$att}= $val;
6164 if( $att eq $ID) { $elt->_set_id( $val); }
6165 }
6166 return $elt;
6167 }
6168
61696740811.19s
# spent 278ms within XML::Twig::Elt::att which was called 674081 times, avg 412ns/call: # 202907 times (100ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 358 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 493ns/call # 202907 times (73.0ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 407 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 360ns/call # 202907 times (68.3ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 373 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 336ns/call # 18180 times (12.4ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] at line 292 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 684ns/call # 15608 times (12.8ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 350 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 820ns/call # 15608 times (5.77ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 353 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 369ns/call # 15608 times (5.46ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 354 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 350ns/call # 90 times (35µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 913 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 389ns/call # 49 times (15µs+0s) by Spreadsheet::ParseXLSX::_color at line 1132 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 314ns/call # 19 times (6µs+0s) by Spreadsheet::ParseXLSX::_color at line 1131 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 289ns/call # 15 times (5µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 916 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 353ns/call # 15 times (5µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 917 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 347ns/call # 15 times (5µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 920 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 320ns/call # 15 times (5µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 922 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 313ns/call # 15 times (4µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 919 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 293ns/call # 15 times (4µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 921 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 260ns/call # 12 times (7µs+0s) by Spreadsheet::ParseXLSX::_parse_themes at line 672 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 600ns/call # 12 times (4µs+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268] at line 264 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 367ns/call # 11 times (3µs+0s) by Spreadsheet::ParseXLSX::_color at line 1150 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 245ns/call # 10 times (7µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 821 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 720ns/call # 5 times (3µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 830 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 600ns/call # 5 times (2µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 927 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 320ns/call # 5 times (1µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 926 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 260ns/call # 5 times (1µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 928 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 260ns/call # 5 times (1µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 925 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 240ns/call # 5 times (1µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 929 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 240ns/call # 5 times (1µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 930 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 240ns/call # 3 times (2µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 860 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 767ns/call # 3 times (2µs+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 139 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 700ns/call # 3 times (2µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 862 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 533ns/call # 2 times (2µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 985 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 750ns/call # 2 times (2µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 1010 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 750ns/call # 2 times (1µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 827 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 600ns/call # 2 times (900ns+0s) by Spreadsheet::ParseXLSX::_color at line 1142 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 450ns/call # once (2µs+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 205 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246] at line 238 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 966 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 981 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 993 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 177 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (800ns+0s) by Spreadsheet::ParseXLSX::_extract_files at line 983 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (800ns+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338] at line 330 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (600ns+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 184 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (500ns+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 179 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (400ns+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 148 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub att { $_[0]->{att}->{$_[1]}; }
6170# lvalue version of att. separate from class to avoid problem like RT#
6171sub latt
6172 :lvalue # > perl 5.5
6173 { $_[0]->{att}->{$_[1]}; }
6174
6175sub del_att
6176 { my $elt= shift;
6177 while( @_) { delete $elt->{'att'}->{shift()}; }
6178 return $elt;
6179 }
6180
6181sub att_exists { return exists $_[0]->{att}->{$_[1]}; }
6182
6183# delete an attribute from all descendants of an element
6184sub strip_att
6185 { my( $elt, $att)= @_;
6186 $_->del_att( $att) foreach ($elt->descendants_or_self( qq{*[\@$att]}));
6187 return $elt;
6188 }
6189
6190sub change_att_name
6191 { my( $elt, $old_name, $new_name)= @_;
6192 my $value= $elt->{'att'}->{$old_name};
6193 return $elt unless( defined $value);
6194 $elt->del_att( $old_name)
6195 ->set_att( $new_name => $value);
6196 return $elt;
6197 }
6198
6199sub lc_attnames
6200 { my $elt= shift;
6201 foreach my $att ($elt->att_names)
6202 { if( $att ne lc $att) { $elt->change_att_name( $att, lc $att); } }
6203 return $elt;
6204 }
6205
6206sub set_twig_current { $_[0]->{twig_current}=1; }
6207sub del_twig_current { delete $_[0]->{twig_current}; }
6208
6209
6210# get or set the id attribute
6211sub set_id
6212 { my( $elt, $id)= @_;
6213 $elt->del_id() if( exists $elt->{att}->{$ID});
6214 $elt->set_att($ID, $id);
6215 $elt->_set_id( $id);
6216 return $elt;
6217 }
6218
6219# only set id, does not update the attribute value
6220sub _set_id
6221 { my( $elt, $id)= @_;
6222 my $t= $elt->twig || $elt;
6223 $t->{twig_id_list}->{$id}= $elt;
6224 if( $XML::Twig::weakrefs) { weaken( $t->{twig_id_list}->{$id}); }
6225 return $elt;
6226 }
6227
6228sub id { return $_[0]->{att}->{$ID}; }
6229
6230# methods used to add ids to elements that don't have one
6231BEGIN
62321300ns
# spent 3µs within XML::Twig::Elt::BEGIN@6232 which was called: # once (3µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 6248
{ my $id_nb = "0001";
623314µs my $id_seed = "twig_id_";
6234
6235 sub set_id_seed ## no critic (Subroutines::ProhibitNestedSubs);
6236 { $id_seed= $_[1]; $id_nb=1; }
6237
6238 sub add_id ## no critic (Subroutines::ProhibitNestedSubs);
6239 { my $elt= shift;
6240 if( defined $elt->{'att'}->{$ID})
6241 { return $elt->{'att'}->{$ID}; }
6242 else
6243 { my $id= $_[0] && ref( $_[0]) && isa( $_[0], 'CODE') ? $_[0]->( $elt) : $id_seed . $id_nb++;
6244 $elt->set_id( $id);
6245 return $id;
6246 }
6247 }
624812.61ms13µs}
# spent 3µs making 1 call to XML::Twig::Elt::BEGIN@6232
6249
- -
6252# delete the id attribute and remove the element from the id list
6253sub del_id
6254 { my $elt= shift;
6255 if( ! exists $elt->{att}->{$ID}) { return $elt };
6256 my $id= $elt->{att}->{$ID};
6257
6258 delete $elt->{att}->{$ID};
6259
6260 my $t= shift || $elt->twig;
6261 unless( $t) { return $elt; }
6262 if( exists $t->{twig_id_list}->{$id}) { delete $t->{twig_id_list}->{$id}; }
6263
6264 return $elt;
6265 }
6266
6267# return the list of children
6268sub children
6269156511.60ms
# spent 1.57s (500ms+1.07) within XML::Twig::Elt::children which was called 15651 times, avg 101µs/call: # 15608 times (500ms+1.07s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 357 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 101µs/call # 15 times (47µs+18µs) by Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell at line 582 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 4µs/call # 13 times (44µs+15µs) by XML::Twig::Elt::__ANON__[(eval 68)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 68)[XML/Twig.pm:7113], avg 4µs/call # 11 times (34µs+238µs) by XML::Twig::Elt::__ANON__[(eval 70)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 70)[XML/Twig.pm:7113], avg 25µs/call # once (16µs+116µs) by XML::Twig::Elt::__ANON__[(eval 97)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 97)[XML/Twig.pm:7113] # once (4µs+104µs) by XML::Twig::Elt::__ANON__[(eval 76)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 76)[XML/Twig.pm:7113] # once (6µs+100µs) by XML::Twig::Elt::__ANON__[(eval 87)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 87)[XML/Twig.pm:7113] # once (4µs+88µs) by XML::Twig::Elt::__ANON__[(eval 103)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] at line 1 of (eval 103)[XML/Twig.pm:7113]
{ my $elt= shift;
6270156511.67ms my @children;
62711565111.9ms15651116ms my $child= $elt->first_child( @_);
# spent 116ms making 15651 calls to XML::Twig::Elt::first_child, avg 7µs/call
62721565111.2ms while( $child)
627320298617.0ms { push @children, $child;
6274202986104ms202986958ms $child= $child->next_sibling( @_);
# spent 958ms making 202986 calls to XML::Twig::Elt::next_sibling, avg 5µs/call
6275 }
62761565132.0ms return @children;
6277 }
6278
6279sub _children
6280 { my $elt= shift;
6281 my @children=();
6282 my $child= $elt->{first_child};
6283 while( $child)
6284 { push @children, $child;
6285 $child= $child->{next_sibling};
6286 }
6287 return @children;
6288 }
6289
6290sub children_copy
6291 { my $elt= shift;
6292 my @children;
6293 my $child= $elt->first_child( @_);
6294 while( $child)
6295 { push @children, $child->copy;
6296 $child= $child->next_sibling( @_);
6297 }
6298 return @children;
6299 }
6300
6301
6302sub children_count
6303 { my $elt= shift;
6304 my $cond= shift;
6305 my $count=0;
6306 my $child= $elt->{first_child};
6307 while( $child)
6308 { $count++ if( $child->passes( $cond));
6309 $child= $child->{next_sibling};
6310 }
6311 return $count;
6312 }
6313
6314sub children_text
6315 { my $elt= shift;
6316 return wantarray() ? map { $_->text} $elt->children( @_)
6317 : join( '', map { $_->text} $elt->children( @_) )
6318 ;
6319 }
6320
6321sub children_trimmed_text
6322 { my $elt= shift;
6323 return wantarray() ? map { $_->trimmed_text} $elt->children( @_)
6324 : join( '', map { $_->trimmed_text} $elt->children( @_) )
6325 ;
6326 }
6327
6328sub all_children_are
6329 { my( $parent, $cond)= @_;
6330 foreach my $child ($parent->_children)
6331 { return 0 unless( $child->passes( $cond)); }
6332 return $parent;
6333 }
6334
6335
6336sub ancestors
633715418µs
# spent 649µs (527+121) within XML::Twig::Elt::ancestors which was called 154 times, avg 4µs/call: # 77 times (265µs+60µs) by XML::Twig::Elt::cmp at line 9725, avg 4µs/call # 77 times (262µs+62µs) by XML::Twig::Elt::cmp at line 9726, avg 4µs/call
{ my( $elt, $cond)= @_;
63381548µs my @ancestors;
633915425µs while( $elt->{parent})
634044239µs { $elt= $elt->{parent};
6341442228µs442122µs push @ancestors, $elt if( $elt->passes( $cond));
# spent 122µs making 442 calls to XML::Twig::Elt::passes, avg 275ns/call
6342 }
634315496µs return @ancestors;
6344 }
6345
6346sub ancestors_or_self
6347 { my( $elt, $cond)= @_;
6348 my @ancestors;
6349 while( $elt)
6350 { push @ancestors, $elt if( $elt->passes( $cond));
6351 $elt= $elt->{parent};
6352 }
6353 return @ancestors;
6354 }
6355
6356
6357sub _ancestors
6358 { my( $elt, $include_self)= @_;
6359 my @ancestors= $include_self ? ($elt) : ();
6360 while( $elt= $elt->{parent}) { push @ancestors, $elt; }
6361 return @ancestors;
6362 }
6363
6364
6365sub inherit_att
6366 { my $elt= shift;
6367 my $att= shift;
6368 my %tags= map { ($_, 1) } @_;
6369
6370 do
6371 { if( (defined $elt->{'att'}->{$att})
6372 && ( !%tags || $tags{$XML::Twig::index2gi[$elt->{'gi'}]})
6373 )
6374 { return $elt->{'att'}->{$att}; }
6375 } while( $elt= $elt->{parent});
6376 return undef;
6377 }
6378
6379sub _inherit_att_through_cut
6380 { my $elt= shift;
6381 my $att= shift;
6382 my %tags= map { ($_, 1) } @_;
6383
6384 do
6385 { if( (defined $elt->{'att'}->{$att})
6386 && ( !%tags || $tags{$XML::Twig::index2gi[$elt->{'gi'}]})
6387 )
6388 { return $elt->{'att'}->{$att}; }
6389 } while( $elt= $elt->{parent} || ($elt->{former} && $elt->{former}->{parent}));
6390 return undef;
6391 }
6392
6393
6394sub current_ns_prefixes
6395 { my $elt= shift;
6396 my %prefix;
6397 $prefix{''}=1 if( $elt->namespace( ''));
6398 while( $elt)
6399 { my @ns= grep { !m{^xml} } map { m{^([^:]+):} } ($XML::Twig::index2gi[$elt->{'gi'}], $elt->att_names);
6400 $prefix{$_}=1 foreach (@ns);
6401 $elt= $elt->{parent};
6402 }
6403
6404 return (sort keys %prefix);
6405 }
6406
6407# kinda counter-intuitive actually:
6408# the next element is found by looking for the next open tag after from the
6409# current one, which is the first child, if it exists, or the next sibling
6410# or the first next sibling of an ancestor
6411# optional arguments are:
6412# - $subtree_root: a reference to an element, when the next element is not
6413# within $subtree_root anymore then next_elt returns undef
6414# - $cond: a condition, next_elt returns the next element matching the condition
6415
6416sub next_elt
64171300ns
# spent 252µs (136+117) within XML::Twig::Elt::next_elt which was called: # once (136µs+117µs) by XML::Twig::Elt::descendants at line 6875
{ my $elt= shift;
64181300ns my $subtree_root= 0;
641914µs1800ns $subtree_root= shift if( ref( $_[0]) && isa( $_[0], 'XML::Twig::Elt'));
# spent 800ns making 1 call to UNIVERSAL::isa
64201200ns my $cond= shift;
64211300ns my $next_elt;
6422
6423 my $ind; # optimization
6424 my $test_cond;
642511µs if( $cond) # optimization
6426 { unless( defined( $ind= $XML::Twig::gi2index{$cond}) ) # optimization
6427 { $test_cond= ($cond_cache{$cond} ||= _install_cond( $cond)); } # optimization
6428 } # optimization
6429
6430 do
643110319µs { if( $next_elt= $elt->{first_child})
6432 { # simplest case: the elt has a child
6433 }
6434 elsif( $next_elt= $elt->{next_sibling})
6435 { # no child but a next sibling (just check we stay within the subtree)
6436
6437 # case where elt is subtree_root, is empty and has a sibling
6438 return undef if( $subtree_root && ($elt == $subtree_root));
6439
6440 }
6441 else
6442 { # case where the element has no child and no next sibling:
6443 # get the first next sibling of an ancestor, checking subtree_root
6444
6445 # case where elt is subtree_root, is empty and has no sibling
6446243µs return undef if( $subtree_root && ($elt == $subtree_root));
6447
6448243µs $next_elt= $elt->{parent} || return undef;
6449
6450244µs until( $next_elt->{next_sibling})
6451164µs { return undef if( $subtree_root && ($subtree_root == $next_elt));
6452153µs $next_elt= $next_elt->{parent} || return undef;
6453 }
6454233µs return undef if( $subtree_root && ($subtree_root == $next_elt));
6455233µs $next_elt= $next_elt->{next_sibling};
6456 }
64571026µs $elt= $next_elt; # just in case we need to loop
6458 } until( ! defined $elt
6459 || ! defined $cond
6460143µs102116µs || (defined $ind && ($elt->{gi} eq $ind)) # optimization
# spent 116µs making 102 calls to XML::Twig::Elt::__ANON__[(eval 86)[XML/Twig.pm:5871]:1], avg 1µs/call
6461 || (defined $test_cond && ($test_cond->( $elt)))
6462 );
6463
6464 return $elt;
6465 }
6466
6467# return the next_elt within the element
6468# just call next_elt with the element as first and second argument
6469sub first_descendant { return $_[0]->next_elt( @_); }
6470
6471# get the last descendant, # then return the element found or call prev_elt with the condition
6472sub last_descendant
6473 { my( $elt, $cond)= @_;
6474 my $last_descendant= $elt->_last_descendant;
6475 if( !$cond || $last_descendant->matches( $cond))
6476 { return $last_descendant; }
6477 else
6478 { return $last_descendant->prev_elt( $elt, $cond); }
6479 }
6480
6481# no argument allowed here, just go down the last_child recursively
6482sub _last_descendant
6483 { my $elt= shift;
6484 while( my $child= $elt->{last_child}) { $elt= $child; }
6485 return $elt;
6486 }
6487
6488# counter-intuitive too:
6489# the previous element is found by looking
6490# for the first open tag backwards from the current one
6491# it's the last descendant of the previous sibling
6492# if it exists, otherwise it's simply the parent
6493sub prev_elt
6494 { my $elt= shift;
6495 my $subtree_root= 0;
6496 if( defined $_[0] and (ref( $_[0]) && isa( $_[0], 'XML::Twig::Elt')))
6497 { $subtree_root= shift ;
6498 return undef if( $elt == $subtree_root);
6499 }
6500 my $cond= shift;
6501 # get prev elt
6502 my $prev_elt;
6503 do
6504 { return undef if( $elt == $subtree_root);
6505 if( $prev_elt= $elt->{prev_sibling})
6506 { while( $prev_elt->{last_child})
6507 { $prev_elt= $prev_elt->{last_child}; }
6508 }
6509 else
6510 { $prev_elt= $elt->{parent} || return undef; }
6511 $elt= $prev_elt; # in case we need to loop
6512 } until( $elt->passes( $cond));
6513
6514 return $elt;
6515 }
6516
6517sub _following_elt
6518 { my( $elt)= @_;
6519 while( $elt && !$elt->{next_sibling})
6520 { $elt= $elt->{parent}; }
6521 return $elt ? $elt->{next_sibling} : undef;
6522 }
6523
6524sub following_elt
6525 { my( $elt, $cond)= @_;
6526 $elt= $elt->_following_elt || return undef;
6527 return $elt if( !$cond || $elt->matches( $cond));
6528 return $elt->next_elt( $cond);
6529 }
6530
6531sub following_elts
6532 { my( $elt, $cond)= @_;
6533 if( !$cond) { undef $cond; }
6534 my $following= $elt->following_elt( $cond);
6535 if( $following)
6536 { my @followings= $following;
6537 while( $following= $following->next_elt( $cond))
6538 { push @followings, $following; }
6539 return( @followings);
6540 }
6541 else
6542 { return (); }
6543 }
6544
6545sub _preceding_elt
6546 { my( $elt)= @_;
6547 while( $elt && !$elt->{prev_sibling})
6548 { $elt= $elt->{parent}; }
6549 return $elt ? $elt->{prev_sibling}->_last_descendant : undef;
6550 }
6551
6552sub preceding_elt
6553 { my( $elt, $cond)= @_;
6554 $elt= $elt->_preceding_elt || return undef;
6555 return $elt if( !$cond || $elt->matches( $cond));
6556 return $elt->prev_elt( $cond);
6557 }
6558
6559sub preceding_elts
6560 { my( $elt, $cond)= @_;
6561 if( !$cond) { undef $cond; }
6562 my $preceding= $elt->preceding_elt( $cond);
6563 if( $preceding)
6564 { my @precedings= $preceding;
6565 while( $preceding= $preceding->prev_elt( $cond))
6566 { push @precedings, $preceding; }
6567 return( @precedings);
6568 }
6569 else
6570 { return (); }
6571 }
6572
6573# used in get_xpath
6574sub _self
6575 { my( $elt, $cond)= @_;
6576 return $cond ? $elt->matches( $cond) : $elt;
6577 }
6578
6579sub next_n_elt
6580 { my $elt= shift;
6581 my $offset= shift || return undef;
6582 foreach (1..$offset)
6583 { $elt= $elt->next_elt( @_) || return undef; }
6584 return $elt;
6585 }
6586
6587# checks whether $elt is included in $ancestor, returns 1 in that case
6588sub in
6589677689.70ms
# spent 203ms (177+26.7) within XML::Twig::Elt::in which was called 67768 times, avg 3µs/call: # 67614 times (176ms+26.7ms) by XML::Twig::purge at line 3546, avg 3µs/call # 77 times (148µs+14µs) by XML::Twig::Elt::cmp at line 9721, avg 2µs/call # 77 times (119µs+8µs) by XML::Twig::Elt::cmp at line 9722, avg 2µs/call
{ my ($elt, $ancestor)= @_;
659067768144ms6776826.7ms if( ref( $ancestor) && isa( $ancestor, 'XML::Twig::Elt'))
# spent 26.7ms making 67768 calls to UNIVERSAL::isa, avg 395ns/call
6591 { # element
65926805678.0ms while( $elt= $elt->{parent}) { return $elt if( $elt == $ancestor); }
6593 }
6594 else
6595 { # condition
6596 while( $elt= $elt->{parent}) { return $elt if( $elt->matches( $ancestor)); }
6597 }
65983396159.9ms return 0;
6599 }
6600
6601sub first_child_text
6602 { my $elt= shift;
6603 my $dest=$elt->first_child(@_) or return '';
6604 return $dest->text;
6605 }
6606
6607sub fields
6608 { my $elt= shift;
6609 return map { $elt->field( $_) } @_;
6610 }
6611
6612sub first_child_trimmed_text
6613 { my $elt= shift;
6614 my $dest=$elt->first_child(@_) or return '';
6615 return $dest->trimmed_text;
6616 }
6617
6618sub first_child_matches
6619 { my $elt= shift;
6620 my $dest= $elt->{first_child} or return undef;
6621 return $dest->passes( @_);
6622 }
6623
6624sub last_child_text
6625 { my $elt= shift;
6626 my $dest=$elt->last_child(@_) or return '';
6627 return $dest->text;
6628 }
6629
6630sub last_child_trimmed_text
6631 { my $elt= shift;
6632 my $dest=$elt->last_child(@_) or return '';
6633 return $dest->trimmed_text;
6634 }
6635
6636sub last_child_matches
6637 { my $elt= shift;
6638 my $dest= $elt->{last_child} or return undef;
6639 return $dest->passes( @_);
6640 }
6641
6642sub child_text
6643 { my $elt= shift;
6644 my $dest=$elt->child(@_) or return '';
6645 return $dest->text;
6646 }
6647
6648sub child_trimmed_text
6649 { my $elt= shift;
6650 my $dest=$elt->child(@_) or return '';
6651 return $dest->trimmed_text;
6652 }
6653
6654sub child_matches
6655 { my $elt= shift;
6656 my $nb= shift;
6657 my $dest= $elt->child( $nb) or return undef;
6658 return $dest->passes( @_);
6659 }
6660
6661sub prev_sibling_text
6662 { my $elt= shift;
6663 my $dest= $elt->_prev_sibling(@_) or return '';
6664 return $dest->text;
6665 }
6666
6667sub prev_sibling_trimmed_text
6668 { my $elt= shift;
6669 my $dest= $elt->_prev_sibling(@_) or return '';
6670 return $dest->trimmed_text;
6671 }
6672
6673sub prev_sibling_matches
6674 { my $elt= shift;
6675 my $dest= $elt->{prev_sibling} or return undef;
6676 return $dest->passes( @_);
6677 }
6678
6679sub next_sibling_text
6680 { my $elt= shift;
6681 my $dest= $elt->next_sibling(@_) or return '';
6682 return $dest->text;
6683 }
6684
6685sub next_sibling_trimmed_text
6686 { my $elt= shift;
6687 my $dest= $elt->next_sibling(@_) or return '';
6688 return $dest->trimmed_text;
6689 }
6690
6691sub next_sibling_matches
6692 { my $elt= shift;
6693 my $dest= $elt->{next_sibling} or return undef;
6694 return $dest->passes( @_);
6695 }
6696
6697sub prev_elt_text
6698 { my $elt= shift;
6699 my $dest= $elt->prev_elt(@_) or return '';
6700 return $dest->text;
6701 }
6702
6703sub prev_elt_trimmed_text
6704 { my $elt= shift;
6705 my $dest= $elt->prev_elt(@_) or return '';
6706 return $dest->trimmed_text;
6707 }
6708
6709sub prev_elt_matches
6710 { my $elt= shift;
6711 my $dest= $elt->prev_elt or return undef;
6712 return $dest->passes( @_);
6713 }
6714
6715sub next_elt_text
6716 { my $elt= shift;
6717 my $dest= $elt->next_elt(@_) or return '';
6718 return $dest->text;
6719 }
6720
6721sub next_elt_trimmed_text
6722 { my $elt= shift;
6723 my $dest= $elt->next_elt(@_) or return '';
6724 return $dest->trimmed_text;
6725 }
6726
6727sub next_elt_matches
6728 { my $elt= shift;
6729 my $dest= $elt->next_elt or return undef;
6730 return $dest->passes( @_);
6731 }
6732
6733sub parent_text
6734 { my $elt= shift;
6735 my $dest= $elt->parent(@_) or return '';
6736 return $dest->text;
6737 }
6738
6739sub parent_trimmed_text
6740 { my $elt= shift;
6741 my $dest= $elt->parent(@_) or return '';
6742 return $dest->trimmed_text;
6743 }
6744
6745sub parent_matches
6746 { my $elt= shift;
6747 my $dest= $elt->{parent} or return undef;
6748 return $dest->passes( @_);
6749 }
6750
6751sub is_first_child
6752 { my $elt= shift;
6753 my $parent= $elt->{parent} or return 0;
6754 my $first_child= $parent->first_child( @_) or return 0;
6755 return ($first_child == $elt) ? $elt : 0;
6756 }
6757
6758sub is_last_child
6759 { my $elt= shift;
6760 my $parent= $elt->{parent} or return 0;
6761 my $last_child= $parent->last_child( @_) or return 0;
6762 return ($last_child == $elt) ? $elt : 0;
6763 }
6764
6765# returns the depth level of the element
6766# if 2 parameter are used then counts the 2cd element name in the
6767# ancestors list
6768sub level
6769 { my( $elt, $cond)= @_;
6770 my $level=0;
6771 my $name=shift || '';
6772 while( $elt= $elt->{parent}) { $level++ if( !$cond || $elt->matches( $cond)); }
6773 return $level;
6774 }
6775
6776# checks whether $elt has an ancestor that satisfies $cond, returns the ancestor
6777sub in_context
6778 { my ($elt, $cond, $level)= @_;
6779 $level= -1 unless( $level) ; # $level-- will never hit 0
6780
6781 while( $level)
6782 { $elt= $elt->{parent} or return 0;
6783 if( $elt->matches( $cond)) { return $elt; }
6784 $level--;
6785 }
6786 return 0;
6787 }
6788
6789sub _descendants
6790 { my( $subtree_root, $include_self)= @_;
6791 my @descendants= $include_self ? ($subtree_root) : ();
6792
6793 my $elt= $subtree_root;
6794 my $next_elt;
6795
6796 MAIN: while( 1)
6797 { if( $next_elt= $elt->{first_child})
6798 { # simplest case: the elt has a child
6799 }
6800 elsif( $next_elt= $elt->{next_sibling})
6801 { # no child but a next sibling (just check we stay within the subtree)
6802
6803 # case where elt is subtree_root, is empty and has a sibling
6804 last MAIN if( $elt == $subtree_root);
6805 }
6806 else
6807 { # case where the element has no child and no next sibling:
6808 # get the first next sibling of an ancestor, checking subtree_root
6809
6810 # case where elt is subtree_root, is empty and has no sibling
6811 last MAIN if( $elt == $subtree_root);
6812
6813 # backtrack until we find a parent with a next sibling
6814 $next_elt= $elt->{parent} || last;
6815 until( $next_elt->{next_sibling})
6816 { last MAIN if( $subtree_root == $next_elt);
6817 $next_elt= $next_elt->{parent} || last MAIN;
6818 }
6819 last MAIN if( $subtree_root == $next_elt);
6820 $next_elt= $next_elt->{next_sibling};
6821 }
6822 $elt= $next_elt || last MAIN;
6823 push @descendants, $elt;
6824 }
6825 return @descendants;
6826 }
6827
6828
6829sub descendants
6830165µs
# spent 870µs (618+252) within XML::Twig::Elt::descendants which was called 16 times, avg 54µs/call: # 16 times (618µs+252µs) by XML::Twig::descendants at line 3762, avg 54µs/call
{ my( $subtree_root, $cond)= @_;
6831165µs my @descendants=();
6832162µs my $elt= $subtree_root;
6833
6834 # this branch is pure optimization for speed: if $cond is a gi replace it
6835 # by the index of the gi and loop here
6836 # start optimization
6837162µs my $ind;
68381611µs if( !$cond || ( defined ( $ind= $XML::Twig::gi2index{$cond})) )
6839 {
684015900ns my $next_elt;
6841
6842152µs while( 1)
6843737153µs { if( $next_elt= $elt->{first_child})
6844 { # simplest case: the elt has a child
6845 }
6846 elsif( $next_elt= $elt->{next_sibling})
6847 { # no child but a next sibling (just check we stay within the subtree)
6848
6849 # case where elt is subtree_root, is empty and has a sibling
685030135µs last if( $subtree_root && ($elt == $subtree_root));
6851 }
6852 else
6853 { # case where the element has no child and no next sibling:
6854 # get the first next sibling of an ancestor, checking subtree_root
6855
6856 # case where elt is subtree_root, is empty and has no sibling
685716625µs last if( $subtree_root && ($elt == $subtree_root));
6858
6859 # backtrack until we find a parent with a next sibling
686016621µs $next_elt= $elt->{parent} || last undef;
686116627µs until( $next_elt->{next_sibling})
686211915µs { last if( $subtree_root && ($subtree_root == $next_elt));
686310424µs $next_elt= $next_elt->{parent} || last;
6864 }
686516620µs last if( $subtree_root && ($subtree_root == $next_elt));
686615116µs $next_elt= $next_elt->{next_sibling};
6867 }
686872246µs $elt= $next_elt || last;
6869722191µs push @descendants, $elt if( !$cond || ($elt->{gi} eq $ind));
6870 }
6871 }
6872 else
6873 { # branch for a complex condition: use the regular (slow but simple) way
6874
687512µs1252µs while( $elt= $elt->next_elt( $subtree_root, $cond))
# spent 252µs making 1 call to XML::Twig::Elt::next_elt
6876 { push @descendants, $elt; }
6877 }
68781622µs return @descendants;
6879 }
6880
6881
6882sub descendants_or_self
6883 { my( $elt, $cond)= @_;
6884 my @descendants= $elt->passes( $cond) ? ($elt) : ();
6885 push @descendants, $elt->descendants( $cond);
6886 return @descendants;
6887 }
6888
6889sub sibling
6890 { my $elt= shift;
6891 my $nb= shift;
6892 if( $nb > 0)
6893 { foreach( 1..$nb)
6894 { $elt= $elt->next_sibling( @_) or return undef; }
6895 }
6896 elsif( $nb < 0)
6897 { foreach( 1..(-$nb))
6898 { $elt= $elt->prev_sibling( @_) or return undef; }
6899 }
6900 else # $nb == 0
6901 { return $elt->passes( $_[0]); }
6902 return $elt;
6903 }
6904
6905sub sibling_text
6906 { my $elt= sibling( @_);
6907 return $elt ? $elt->text : undef;
6908 }
6909
6910
6911sub child
6912 { my $elt= shift;
6913 my $nb= shift;
6914 if( $nb >= 0)
6915 { $elt= $elt->first_child( @_) or return undef;
6916 foreach( 1..$nb)
6917 { $elt= $elt->next_sibling( @_) or return undef; }
6918 }
6919 else
6920 { $elt= $elt->last_child( @_) or return undef;
6921 foreach( 2..(-$nb))
6922 { $elt= $elt->prev_sibling( @_) or return undef; }
6923 }
6924 return $elt;
6925 }
6926
6927sub prev_siblings
6928 { my $elt= shift;
6929 my @siblings=();
6930 while( $elt= $elt->prev_sibling( @_))
6931 { unshift @siblings, $elt; }
6932 return @siblings;
6933 }
6934
6935sub siblings
6936 { my $elt= shift;
6937 return grep { $_ ne $elt } $elt->{parent}->children( @_);
6938 }
6939
6940sub pos
6941 { my $elt= shift;
6942 return 0 if ($_[0] && !$elt->matches( @_));
6943 my $pos=1;
6944 $pos++ while( $elt= $elt->prev_sibling( @_));
6945 return $pos;
6946 }
6947
6948
6949sub next_siblings
6950 { my $elt= shift;
6951 my @siblings=();
6952 while( $elt= $elt->next_sibling( @_))
6953 { push @siblings, $elt; }
6954 return @siblings;
6955 }
6956
6957
6958# used by get_xpath: parses the xpath expression and generates a sub that performs the
6959# search
69601100ns{ my %axis2method;
696119µs
# spent 6µs within XML::Twig::Elt::BEGIN@6961 which was called: # once (6µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 6973
BEGIN { %axis2method= ( child => 'children',
6962 descendant => 'descendants',
6963 'descendant-or-self' => 'descendants_or_self',
6964 parent => 'parent_is',
6965 ancestor => 'ancestors',
6966 'ancestor-or-self' => 'ancestors_or_self',
6967 'following-sibling' => 'next_siblings',
6968 'preceding-sibling' => 'prev_siblings',
6969 following => 'following_elts',
6970 preceding => 'preceding_elts',
6971 self => '_self',
6972 );
697312.60ms16µs }
# spent 6µs making 1 call to XML::Twig::Elt::BEGIN@6961
6974
6975 sub _install_xpath
6976154µs
# spent 3.48ms (1.98+1.50) within XML::Twig::Elt::_install_xpath which was called 15 times, avg 232µs/call: # 15 times (1.98ms+1.50ms) by XML::Twig::Elt::get_xpath at line 7140, avg 232µs/call
{ my( $xpath_exp, $type)= @_;
6977153µs my $original_exp= $xpath_exp;
6978153µs my $sub= 'my $elt= shift; my @results;';
6979
6980 # grab the root if expression starts with a /
69811541µs1520µs if( $xpath_exp=~ s{^/}{})
# spent 20µs making 15 calls to CORE::subst, avg 1µs/call
6982 { $sub .= '@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";'; }
6983 elsif( $xpath_exp=~ s{^\./}{})
6984 { $sub .= '@results= ($elt);'; }
6985 else
6986 { $sub .= '@results= ($elt);'; }
6987
6988
6989 #warn "xpath_exp= '$xpath_exp'\n";
6990
699115660µs16633µs while( $xpath_exp &&
# spent 509µs making 1 call to CORE::regcomp # spent 124µs making 15 calls to CORE::subst, avg 8µs/call
6992 $xpath_exp=~s{^\s*(/?)
6993 # the xxx=~/regexp/ is a pain as it includes /
6994 (\s*(?:(?:($REG_AXIS)::)?(\*|$REG_TAG_PART|\.\.|\.)\s*)?($REG_PREDICATE_ALT*)
6995 )
6996 (/|$)}{}xo)
6997
69982435µs { my( $wildcard, $sub_exp, $axis, $gi, $predicates)= ($1, $2, $3, $4, $5);
6999243µs if( $axis && ! $gi)
7000 { _croak_and_doublecheck_xpath( $original_exp, "error in xpath expression $original_exp"); }
7001
7002 # grab a parent
70032465µs3325µs if( $sub_exp eq '..')
# spent 18µs making 9 calls to CORE::subst, avg 2µs/call # spent 7µs making 24 calls to CORE::match, avg 279ns/call
7004 { _croak_and_doublecheck_xpath( $original_exp, "error in xpath expression $original_exp") if( $wildcard);
7005 $sub .= '@results= map { $_->{parent}} @results;';
7006 }
7007 # test the element itself
7008 elsif( $sub_exp=~ m{^\.(.*)$}s)
7009 { $sub .= "\@results= grep { \$_->matches( q{$1}) } \@results;" }
7010 # grab children
7011 else
7012 {
7013247µs if( !$axis)
7014 { $axis= $wildcard ? 'descendant' : 'child'; }
7015246µs if( !$gi or $gi eq '*') { $gi=''; }
7016242µs my $function;
7017
7018 # "special" predicates, that return just one element
70192424µs109µs if( $predicates && ($predicates =~ m{^\s*\[\s*((-\s*)?\d+)\s*\]\s*$}))
# spent 9µs making 10 calls to CORE::match, avg 890ns/call
7020 { # [<nb>]
7021 my $offset= $1;
7022 $offset-- if( $offset > 0);
7023 $function= $axis eq 'descendant' ? "next_n_elt( $offset, '$gi')"
7024 : $axis eq 'child' ? "child( $offset, '$gi')"
7025 : _croak_and_doublecheck_xpath( $original_exp, "error [$1] not supported along axis '$axis'")
7026 ;
7027 $sub .= "\@results= grep { \$_ } map { \$_->$function } \@results;"
7028 }
7029 elsif( $predicates && ($predicates =~ m{^\s*\[\s*last\s*\(\s*\)\s*\]\s*$}) )
7030 { # last()
7031 _croak_and_doublecheck_xpath( $original_exp, "error in xpath expression $original_exp, usage of // and last() not supported") if( $wildcard);
7032 $sub .= "\@results= map { \$_->last_child( '$gi') } \@results;";
7033 }
7034 else
7035 { # follow the axis
7036 #warn "axis: '$axis' - method: '$axis2method{$axis}' - gi: '$gi'\n";
7037
70382413µs my $follow_axis= " \$_->$axis2method{$axis}( '$gi')";
7039243µs my $step= $follow_axis;
7040
7041 # now filter using the predicate
704224212µs25186µs while( $predicates=~ s{^\s*($REG_PREDICATE_ALT)\s*}{}o)
# spent 165µs making 1 call to CORE::regcomp # spent 21µs making 24 calls to CORE::subst, avg 871ns/call
704353µs { my $pred= $1;
704458µs54µs $pred=~ s{^\s*\[\s*}{};
# spent 4µs making 5 calls to CORE::subst, avg 840ns/call
7045515µs511µs $pred=~ s{\s*\]\s*$}{};
# spent 11µs making 5 calls to CORE::subst, avg 2µs/call
704651µs my $test="";
70475500ns my $pos;
7048514µs104µs if( $pred=~ m{^(-?\s*\d+)$})
# spent 3µs making 5 calls to CORE::match, avg 660ns/call # spent 600ns making 5 calls to CORE::subst, avg 120ns/call
7049 { my $pos= $1;
7050 if( $step=~ m{^\s*grep(.*) (\$_->\w+\(\s*'[^']*'\s*\))})
7051 { $step= "XML::Twig::_first_n $1 $pos, $2"; }
7052 else
7053 { if( $pos > 0) { $pos--; }
7054 $step= "($step)[$pos]";
7055 }
7056 #warn "number predicate '$pos' - generated step '$step'\n";
7057 }
7058 else
705951µs { my $syntax_error=0;
7060 do
70611068µs1252µs { if( $pred =~ s{^string\(\s*\)\s*=\s*($REG_STRING)\s*}{}o) # string()="string" pred
# spent 50µs making 2 calls to CORE::regcomp, avg 25µs/call # spent 1µs making 10 calls to CORE::subst, avg 140ns/call
7062 { $test .= "\$_->text eq $1"; }
7063 elsif( $pred =~ s{^string\(\s*\)\s*!=\s*($REG_STRING)\s*}{}o) # string()!="string" pred
7064 { $test .= "\$_->text ne $1"; }
70655288µs35261µs if( $pred =~ s{^string\(\s*\)\s*=\s*($REG_NUMBER)\s*}{}o) # string()=<number> pred
# spent 236µs making 5 calls to CORE::regcomp, avg 47µs/call # spent 25µs making 30 calls to CORE::subst, avg 820ns/call
7066 { $test .= "\$_->text eq $1"; }
7067 elsif( $pred =~ s{^string\(\s*\)\s*!=\s*($REG_NUMBER)\s*}{}o) # string()!=<number> pred
7068 { $test .= "\$_->text ne $1"; }
7069 elsif( $pred =~ s{^string\(\s*\)\s*(>|<|>=|<=)\s*($REG_NUMBER)\s*}{}o) # string()!=<number> pred
7070 { $test .= "\$_->text $1 $2"; }
7071
7072 elsif( $pred =~ s{^string\(\s*\)\s*($REG_MATCH)\s*($REG_REGEXP)\s*}{}o) # string()=~/regex/ pred
7073 { my( $match, $regexp)= ($1, $2);
7074 $test .= "\$_->text $match $regexp";
7075 }
7076 elsif( $pred =~ s{^string\(\s*\)\s*}{}o) # string() pred
7077 { $test .= "\$_->text"; }
7078 elsif( $pred=~ s{^@($REG_TAG_NAME)\s*($REG_OP)\s*($REG_STRING|$REG_NUMBER)}{}o) # @att="val" pred
707959µs510µs { my( $att, $oper, $val)= ($1, _op( $2), $3);
# spent 10µs making 5 calls to XML::Twig::Elt::_op, avg 2µs/call
708054µs $test .= qq{((defined \$_->{'att'}->{"$att"}) && (\$_->{'att'}->{"$att"} $oper $val))};
7081 }
7082 elsif( $pred =~ s{^@($REG_TAG_NAME)\s*($REG_MATCH)\s*($REG_REGEXP)\s*}{}o) # @att=~/regex/ pred XXX
7083 { my( $att, $match, $regexp)= ($1, $2, $3);
7084 $test .= qq{((defined \$_->{'att'}->{"$att"}) && (\$_->{'att'}->{"$att"} $match $regexp))};;
7085 }
7086 elsif( $pred=~ s{^@($REG_TAG_NAME)\s*}{}o) # @att pred
7087 { $test .= qq{(defined \$_->{'att'}->{"$1"})}; }
7088 elsif( $pred=~ s{^\s*(?:not|!)\s*@($REG_TAG_NAME)\s*}{}o) # not @att pred
7089 { $test .= qq{((\$_->is_elt) && (not defined \$_->{'att'}->{"$1"}))}; }
7090 elsif( $pred=~ s{^\s*([()])}{}) # ( or ) (just add to the test)
7091 { $test .= qq{$1}; }
7092 elsif( $pred=~ s{^\s*(and|or)\s*}{})
7093 { $test .= lc " $1 "; }
7094 else
7095 { $syntax_error=1; }
7096
7097 } while( !$syntax_error && $pred);
70985600ns _croak_and_doublecheck_xpath( $original_exp, "error in xpath expression $original_exp at $pred") if( $pred);
709952µs $step= " grep { $test } $step ";
7100 }
7101 }
7102 #warn "step: '$step'";
7103246µs $sub .= "\@results= grep defined, map { $step } \@results;";
7104 }
7105 }
7106 }
7107
7108152µs if( $xpath_exp)
7109 { _croak_and_doublecheck_xpath( $original_exp, "error in xpath expression $original_exp around $xpath_exp"); }
7110
7111152µs $sub .= q{return XML::Twig::_unique_elts( @results); };
7112 #warn "generated: '$sub'\n";
711315467µs my $s= eval "sub { $NO_WARNINGS; $sub }";
# spent 118µs executing statements in string eval
# includes 20µs spent executing 2 calls to 2 subs defined therein. # spent 109µs executing statements in string eval
# includes 28µs spent executing 3 calls to 2 subs defined therein. # spent 109µs executing statements in string eval
# includes 31µs spent executing 2 calls to 2 subs defined therein. # spent 103µs executing statements in string eval
# includes 18µs spent executing 2 calls to 2 subs defined therein. # spent 102µs executing statements in string eval
# includes 18µs spent executing 2 calls to 2 subs defined therein. # spent 99µs executing statements in string eval
# includes 30µs spent executing 2 calls to 2 subs defined therein. # spent 96µs executing statements in string eval
# includes 16µs spent executing 2 calls to 2 subs defined therein. # spent 92µs executing statements in string eval
# includes 16µs spent executing 2 calls to 2 subs defined therein. # spent 92µs executing statements in string eval
# includes 16µs spent executing 2 calls to 2 subs defined therein. # spent 92µs executing statements in string eval
# includes 21µs spent executing 2 calls to 2 subs defined therein. # spent 90µs executing statements in string eval
# includes 17µs spent executing 2 calls to 2 subs defined therein. # spent 85µs executing statements in string eval
# includes 17µs spent executing 2 calls to 2 subs defined therein. # spent 82µs executing statements in string eval
# includes 12µs spent executing 2 calls to 2 subs defined therein. # spent 76µs executing statements in string eval
# includes 15µs spent executing 2 calls to 2 subs defined therein. # spent 67µs executing statements in string eval
# includes 13µs spent executing 2 calls to 2 subs defined therein.
7114153µs if( $@)
7115 { _croak_and_doublecheck_xpath( $original_exp, "error in xpath expression $original_exp ($@);") }
71161534µs return( $s);
7117 }
7118}
7119
7120sub _croak_and_doublecheck_xpath
712110s { my $xpath_expression= shift;
7122 my $mess= join( "\n", @_);
7123 if( $XML::Twig::XPath::VERSION || 0)
7124 { my $check_twig= XML::Twig::XPath->new;
7125 if( eval { $check_twig->{twig_xp}->_parse( $xpath_expression) })
7126 { $mess .= "\nthe expression is a valid XPath statement, and you are using XML::Twig::XPath, but"
7127 . "\nyou are using either 'find_nodes' or 'get_xpath' where the method you likely wanted"
7128 . "\nto use is 'findnodes', which is the only one that uses the full XPath engine\n";
7129 }
7130 }
7131 croak $mess;
7132 }
7133
7134
7135
7136{ # extremely elaborate caching mechanism
71371100ns my %xpath; # xpath_expression => subroutine_code;
7138 sub get_xpath
7139166µs
# spent 12.3ms (86µs+12.2) within XML::Twig::Elt::get_xpath which was called 16 times, avg 768µs/call: # 16 times (86µs+12.2ms) by XML::Twig::get_xpath at line 3691, avg 768µs/call
{ my( $elt, $xpath_exp, $offset)= @_;
71401622µs153.48ms my $sub= ($xpath{$xpath_exp} ||= _install_xpath( $xpath_exp));
# spent 3.48ms making 15 calls to XML::Twig::Elt::_install_xpath, avg 232µs/call
71411637µs168.72ms return $sub->( $elt) unless( defined $offset);
7142 my @res= $sub->( $elt);
7143 return $res[$offset];
7144 }
7145}
7146
7147
7148sub findvalues
714910s { my $elt= shift;
7150 return map { $_->text } $elt->get_xpath( @_);
7151 }
7152
7153sub findvalue
7154 { my $elt= shift;
7155 return join '', map { $_->text } $elt->get_xpath( @_);
7156 }
7157
7158
7159# XML::XPath compatibility
7160sub getElementById { return $_[0]->twig->elt_id( $_[1]); }
7161sub getChildNodes { my @children= do { my $elt= $_[0]; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; }; return wantarray ? @children : \@children; }
7162
7163sub _flushed { return $_[0]->{flushed}; }
7164sub _set_flushed { $_[0]->{flushed}=1; }
7165sub _del_flushed { delete $_[0]->{flushed}; }
7166
7167sub cut
7168338133.92ms
# spent 579ms (545+33.7) within XML::Twig::Elt::cut which was called 33813 times, avg 17µs/call: # 33813 times (545ms+33.7ms) by XML::Twig::Elt::delete at line 8087, avg 17µs/call
{ my $elt= shift;
7169338134.01ms my( $parent, $prev_sibling, $next_sibling);
7170338135.57ms $parent= $elt->{parent};
7171338136.20ms626µs if( ! $parent && $elt->is_elt)
# spent 26µs making 6 calls to XML::Twig::Elt::is_elt, avg 4µs/call
7172 { # are we cutting the root?
717362µs my $t= $elt->{twig};
717464µs if( $t && ! $t->{twig_parsing})
717562µs { delete $t->{twig_root};
717662µs delete $elt->{twig};
71776109µs return $elt;
7178 } # cutt`ing the root
7179 else
7180 { return; } # cutting an orphan, returning $elt would break backward compatibility
7181 }
7182
7183 # save the old links, that'll make it easier for some loops
71843380710.1ms foreach my $link ( qw(parent prev_sibling next_sibling) )
718510142153.5ms { $elt->{former}->{$link}= $elt->{$link};
7186101421180ms10142123.0ms if( $XML::Twig::weakrefs) { weaken( $elt->{former}->{$link}); }
# spent 23.0ms making 101421 calls to Scalar::Util::weaken, avg 227ns/call
7187 }
7188
7189 # if we cut the current element then its parent becomes the current elt
7190338075.38ms if( $elt->{twig_current})
7191 { my $twig_current= $elt->{parent};
7192 $elt->twig->{twig_current}= $twig_current;
7193 $twig_current->{'twig_current'}=1;
7194 delete $elt->{'twig_current'};
7195 }
7196
71973380714.3ms if( $parent->{first_child} && $parent->{first_child} == $elt)
7198338077.78ms { $parent->{first_child}= $elt->{next_sibling};
7199 # cutting can make the parent empty
72003380711.3ms if( ! $parent->{first_child}) { $parent->{empty}= 1; }
7201 }
7202
72033380711.5ms if( $parent->{last_child} && $parent->{last_child} == $elt)
720410142189.4ms338073.60ms { delete $parent->{empty}; $parent->{last_child}=$elt->{prev_sibling}; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ;
# spent 3.60ms making 33807 calls to Scalar::Util::weaken, avg 106ns/call
7205 }
7206
7207338076.42ms if( $prev_sibling= $elt->{prev_sibling})
7208 { $prev_sibling->{next_sibling}= $elt->{next_sibling}; }
7209338074.49ms if( $next_sibling= $elt->{next_sibling})
7210 { $next_sibling->{prev_sibling}=$elt->{prev_sibling}; if( $XML::Twig::weakrefs) { weaken( $next_sibling->{prev_sibling});} ; }
7211
7212
72136761469.7ms338073.58ms $elt->{parent}=undef; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
# spent 3.58ms making 33807 calls to Scalar::Util::weaken, avg 106ns/call
72146761469.7ms338073.52ms $elt->{prev_sibling}=undef; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
# spent 3.52ms making 33807 calls to Scalar::Util::weaken, avg 104ns/call
7215338075.88ms $elt->{next_sibling}= undef;
7216
7217 # merge 2 (now) consecutive text nodes if they are of the same type
7218 # (type can be PCDATA or CDATA)
7219338073.82ms if( $prev_sibling && $next_sibling && $prev_sibling->is_text && ( $XML::Twig::index2gi[$prev_sibling->{'gi'}] eq $XML::Twig::index2gi[$next_sibling->{'gi'}]))
7220 { $prev_sibling->merge_text( $next_sibling); }
7221
72223380749.1ms return $elt;
7223 }
7224
7225
7226sub former_next_sibling { return $_[0]->{former}->{next_sibling}; }
7227sub former_prev_sibling { return $_[0]->{former}->{prev_sibling}; }
7228sub former_parent { return $_[0]->{former}->{parent}; }
7229
7230sub cut_children
7231 { my( $elt, $exp)= @_;
7232 my @children= $elt->children( $exp);
7233 foreach (@children) { $_->cut; }
7234 if( ! $elt->has_children) { $elt->{empty}= 1; }
7235 return @children;
7236 }
7237
7238sub cut_descendants
7239 { my( $elt, $exp)= @_;
7240 my @descendants= $elt->descendants( $exp);
7241 foreach ($elt->descendants( $exp)) { $_->cut; }
7242 if( ! $elt->has_children) { $elt->{empty}= 1; }
7243 return @descendants;
7244 }
7245
7246
7247sub erase
7248 { my $elt= shift;
7249 #you cannot erase the current element
7250 if( $elt->{twig_current})
7251 { croak "trying to erase an element before it has been completely parsed"; }
7252 if( my $parent= $elt->{parent})
7253 { # normal case
7254 $elt->_move_extra_data_after_erase;
7255 my @children= do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; };
7256 if( @children)
7257 {
7258 # elt has children, move them up
7259
7260 # the first child may need to be merged with a previous text
7261 my $first_child= shift @children;
7262 $first_child->move( before => $elt);
7263 my $prev= $first_child->{prev_sibling};
7264 if( $prev && $prev->is_text && ($XML::Twig::index2gi[$first_child->{'gi'}] eq $XML::Twig::index2gi[$prev->{'gi'}]) )
7265 { $prev->merge_text( $first_child); }
7266
7267 # move the rest of the children
7268 foreach my $child (@children)
7269 { $child->move( before => $elt); }
7270
7271 # now the elt had no child, delete it
7272 $elt->delete;
7273
7274 # now see if we need to merge the last child with the next element
7275 my $last_child= $children[-1] || $first_child; # if no last child, then it's also the first child
7276 my $next= $last_child->{next_sibling};
7277 if( $next && $next->is_text && ($XML::Twig::index2gi[$last_child->{'gi'}] eq $XML::Twig::index2gi[$next->{'gi'}]) )
7278 { $last_child->merge_text( $next); }
7279
7280 # if parsing and have now a PCDATA text, mark so we can normalize later on if need be
7281 if( $parent->{twig_current} && $last_child->is_text) { $parent->{twig_to_be_normalized}=1; }
7282 }
7283 else
7284 { # no children, just cut the elt
7285 $elt->delete;
7286 }
7287 }
7288 else
7289 { # trying to erase the root (of a twig or of a cut/new element)
7290 my @children= do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; };
7291 unless( @children == 1)
7292 { croak "can only erase an element with no parent if it has a single child"; }
7293 $elt->_move_extra_data_after_erase;
7294 my $child= shift @children;
7295 $child->{parent}=undef; if( $XML::Twig::weakrefs) { weaken( $child->{parent});} ;
7296 my $twig= $elt->twig;
7297 $twig->set_root( $child);
7298 }
7299
7300 return $elt;
7301
7302 }
7303
7304sub _move_extra_data_after_erase
7305 { my( $elt)= @_;
7306 # extra_data
7307 if( my $extra_data= $elt->{extra_data})
7308 { my $target= $elt->{first_child} || $elt->{next_sibling};
7309 if( $target)
7310 {
7311 if( $target->is( $ELT))
7312 { $target->set_extra_data( $extra_data . ($target->extra_data || '')); }
7313 elsif( $target->is( $TEXT))
7314 { $target->_unshift_extra_data_in_pcdata( $extra_data, 0); } # TO CHECK
7315 }
7316 else
7317 { my $parent= $elt->{parent}; # always exists or the erase cannot be performed
7318 $parent->_prefix_extra_data_before_end_tag( $extra_data);
7319 }
7320 }
7321
7322 # extra_data_before_end_tag
7323 if( my $extra_data= $elt->{extra_data_before_end_tag})
7324 { if( my $target= $elt->{next_sibling})
7325 { if( $target->is( $ELT))
7326 { $target->set_extra_data( $extra_data . ($target->extra_data || '')); }
7327 elsif( $target->is( $TEXT))
7328 {
7329 $target->_unshift_extra_data_in_pcdata( $extra_data, 0);
7330 }
7331 }
7332 elsif( my $parent= $elt->{parent})
7333 { $parent->_prefix_extra_data_before_end_tag( $extra_data); }
7334 }
7335
7336 return $elt;
7337
7338 }
7339BEGIN
734016µs
# spent 4µs within XML::Twig::Elt::BEGIN@7340 which was called: # once (4µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 7498
{ my %method= ( before => \&paste_before,
7341 after => \&paste_after,
7342 first_child => \&paste_first_child,
7343 last_child => \&paste_last_child,
7344 within => \&paste_within,
7345 );
7346
7347 # paste elt somewhere around ref
7348 # pos can be first_child (default), last_child, before, after or within
7349 sub paste ## no critic (Subroutines::ProhibitNestedSubs);
7350 { my $elt= shift;
7351 if( $elt->{parent})
7352 { croak "cannot paste an element that belongs to a tree"; }
7353 my $pos;
7354 my $ref;
7355 if( ref $_[0])
7356 { $pos= 'first_child';
7357 croak "wrong argument order in paste, should be $_[1] first" if($_[1]);
7358 }
7359 else
7360 { $pos= shift; }
7361
7362 if( my $method= $method{$pos})
7363 {
7364 unless( ref( $_[0]) && isa( $_[0], 'XML::Twig::Elt'))
7365 { if( ! defined( $_[0]))
7366 { croak "missing target in paste"; }
7367 elsif( ! ref( $_[0]))
7368 { croak "wrong target type in paste (not a reference), should be XML::Twig::Elt or a subclass"; }
7369 else
7370 { my $ref= ref $_[0];
7371 croak "wrong target type in paste: '$ref', should be XML::Twig::Elt or a subclass";
7372 }
7373 }
7374 $ref= $_[0];
7375 # check here so error message lists the caller file/line
7376 if( !$ref->{parent} && ($pos=~ m{^(before|after)$}) && !(exists $elt->{'target'}) && !(exists $elt->{'comment'}))
7377 { croak "cannot paste $1 root"; }
7378 $elt->$method( @_);
7379 }
7380 else
7381 { croak "tried to paste in wrong position '$pos', allowed positions " .
7382 " are 'first_child', 'last_child', 'before', 'after' and " .
7383 "'within'";
7384 }
7385 if( (my $ids= $elt->{twig_id_list}) && (my $t= $ref->twig) )
7386 { $t->{twig_id_list}||={};
7387 foreach my $id (keys %$ids)
7388 { $t->{twig_id_list}->{$id}= $ids->{$id};
7389 if( $XML::Twig::weakrefs) { weaken( $t->{twig_id_list}->{$id}); }
7390 }
7391 }
7392 return $elt;
7393 }
7394
7395
7396 sub paste_before
7397 { my( $elt, $ref)= @_;
7398 my( $parent, $prev_sibling, $next_sibling );
7399
7400 # trying to paste before an orphan (root or detached wlt)
7401 unless( $ref->{parent})
7402 { if( my $t= $ref->twig)
7403 { if( (exists $elt->{'comment'}) || (exists $elt->{'target'})) # we can still do this
7404 { $t->_add_cpi_outside_of_root( leading_cpi => $elt); return; }
7405 else
7406 { croak "cannot paste before root"; }
7407 }
7408 else
7409 { croak "cannot paste before an orphan element"; }
7410 }
7411 $parent= $ref->{parent};
7412 $prev_sibling= $ref->{prev_sibling};
7413 $next_sibling= $ref;
7414
7415 $elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
7416 if( $parent->{first_child} == $ref) { $parent->{first_child}= $elt; }
7417
7418 if( $prev_sibling) { $prev_sibling->{next_sibling}= $elt; }
7419 $elt->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
7420
7421 $next_sibling->{prev_sibling}=$elt; if( $XML::Twig::weakrefs) { weaken( $next_sibling->{prev_sibling});} ;
7422 $elt->{next_sibling}= $ref;
7423 return $elt;
7424 }
7425
7426 sub paste_after
7427 { my( $elt, $ref)= @_;
7428 my( $parent, $prev_sibling, $next_sibling );
7429
7430 # trying to paste after an orphan (root or detached wlt)
7431 unless( $ref->{parent})
7432 { if( my $t= $ref->twig)
7433 { if( (exists $elt->{'comment'}) || (exists $elt->{'target'})) # we can still do this
7434 { $t->_add_cpi_outside_of_root( trailing_cpi => $elt); return; }
7435 else
7436 { croak "cannot paste after root"; }
7437 }
7438 else
7439 { croak "cannot paste after an orphan element"; }
7440 }
7441 $parent= $ref->{parent};
7442 $prev_sibling= $ref;
7443 $next_sibling= $ref->{next_sibling};
7444
7445 $elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
7446 if( $parent->{last_child}== $ref) { delete $parent->{empty}; $parent->{last_child}=$elt; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ; }
7447
7448 $prev_sibling->{next_sibling}= $elt;
7449 $elt->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
7450
7451 if( $next_sibling) { $next_sibling->{prev_sibling}=$elt; if( $XML::Twig::weakrefs) { weaken( $next_sibling->{prev_sibling});} ; }
7452 $elt->{next_sibling}= $next_sibling;
7453 return $elt;
7454
7455 }
7456
7457 sub paste_first_child
7458 { my( $elt, $ref)= @_;
7459 my( $parent, $prev_sibling, $next_sibling );
7460 $parent= $ref;
7461 $next_sibling= $ref->{first_child};
7462
7463 $elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
7464 $parent->{first_child}= $elt;
7465 unless( $parent->{last_child}) { delete $parent->{empty}; $parent->{last_child}=$elt; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ; }
7466
7467 $elt->{prev_sibling}=undef; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
7468
7469 if( $next_sibling) { $next_sibling->{prev_sibling}=$elt; if( $XML::Twig::weakrefs) { weaken( $next_sibling->{prev_sibling});} ; }
7470 $elt->{next_sibling}= $next_sibling;
7471 return $elt;
7472 }
7473
7474 sub paste_last_child
7475 { my( $elt, $ref)= @_;
7476 my( $parent, $prev_sibling, $next_sibling );
7477 $parent= $ref;
7478 $prev_sibling= $ref->{last_child};
7479
7480 $elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
7481 delete $parent->{empty}; $parent->{last_child}=$elt; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ;
7482 unless( $parent->{first_child}) { $parent->{first_child}= $elt; }
7483
7484 $elt->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
7485 if( $prev_sibling) { $prev_sibling->{next_sibling}= $elt; }
7486
7487 $elt->{next_sibling}= undef;
7488 return $elt;
7489 }
7490
7491 sub paste_within
7492 { my( $elt, $ref, $offset)= @_;
7493 my $text= $ref->is_text ? $ref : $ref->next_elt( $TEXT, $ref);
7494 my $new= $text->split_at( $offset);
7495 $elt->paste_before( $new);
7496 return $elt;
7497 }
749811.74ms14µs }
# spent 4µs making 1 call to XML::Twig::Elt::BEGIN@7340
7499
7500# load an element into a structure similar to XML::Simple's
7501sub simplify
7502 { my $elt= shift;
7503
7504 # normalize option names
7505 my %options= @_;
7506 %options= map { my ($key, $val)= ($_, $options{$_});
7507 $key=~ s{(\w)([A-Z])}{$1_\L$2}g;
7508 $key => $val
7509 } keys %options;
7510
7511 # check options
7512 my @allowed_options= qw( keyattr forcearray noattr content_key
7513 var var_regexp variables var_attr
7514 group_tags forcecontent
7515 normalise_space normalize_space
7516 );
7517 my %allowed_options= map { $_ => 1 } @allowed_options;
7518 foreach my $option (keys %options)
7519 { carp "invalid option $option\n" unless( $allowed_options{$option}); }
7520
7521 $options{normalise_space} ||= $options{normalize_space} || 0;
7522
7523 $options{content_key} ||= 'content';
7524 if( $options{content_key}=~ m{^-})
7525 { # need to remove the - and to activate extra folding
7526 $options{content_key}=~ s{^-}{};
7527 $options{extra_folding}= 1;
7528 }
7529 else
7530 { $options{extra_folding}= 0; }
7531
7532 $options{forcearray} ||=0;
7533 if( isa( $options{forcearray}, 'ARRAY'))
7534 { my %forcearray_tags= map { $_ => 1 } @{$options{forcearray}};
7535 $options{forcearray_tags}= \%forcearray_tags;
7536 $options{forcearray}= 0;
7537 }
7538
7539 $options{keyattr} ||= ['name', 'key', 'id'];
7540 if( ref $options{keyattr} eq 'ARRAY')
7541 { foreach my $keyattr (@{$options{keyattr}})
7542 { my( $prefix, $att)= ($keyattr=~ m{^([+-])?(.*)});
7543 $prefix ||= '';
7544 $options{key_for_all}->{$att}= 1;
7545 $options{remove_key_for_all}->{$att}=1 unless( $prefix eq '+');
7546 $options{prefix_key_for_all}->{$att}=1 if( $prefix eq '-');
7547 }
7548 }
7549 elsif( ref $options{keyattr} eq 'HASH')
7550 { while( my( $elt, $keyattr)= each %{$options{keyattr}})
7551 { my( $prefix, $att)= ($keyattr=~ m{^([+-])?(.*)});
7552 $prefix ||='';
7553 $options{key_for_elt}->{$elt}= $att;
7554 $options{remove_key_for_elt}->{"$elt#$att"}=1 unless( $prefix);
7555 $options{prefix_key_for_elt}->{"$elt#$att"}=1 if( $prefix eq '-');
7556 }
7557 }
7558
7559
7560 $options{var}||= $options{var_attr}; # for compat with XML::Simple
7561 if( $options{var}) { $options{var_values}= {}; }
7562 else { $options{var}=''; }
7563
7564 if( $options{variables})
7565 { $options{var}||= 1;
7566 $options{var_values}= $options{variables};
7567 }
7568
7569 if( $options{var_regexp} and !$options{var})
7570 { warn "var option not used, var_regexp option ignored\n"; }
7571 $options{var_regexp} ||= '\$\{?(\w+)\}?';
7572
7573 $elt->_simplify( \%options);
7574
7575 }
7576
7577sub _simplify
7578 { my( $elt, $options)= @_;
7579
7580 my $data;
7581
7582 my $gi= $XML::Twig::index2gi[$elt->{'gi'}];
7583 my @children= do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; };
7584 my %atts= $options->{noattr} || !$elt->{att} ? () : %{$elt->{att}};
7585 my $nb_atts= keys %atts;
7586 my $nb_children= $elt->children_count + $nb_atts;
7587
7588 my %nb_children;
7589 foreach (@children) { $nb_children{$_->tag}++; }
7590 foreach (keys %atts) { $nb_children{$_}++; }
7591
7592 my $arrays; # tag => array where elements are stored
7593
7594
7595 # store children
7596 foreach my $child (@children)
7597 { if( $child->is_text)
7598 { # generate with a content key
7599 my $text= $elt->_text_with_vars( $options);
7600 if( $options->{normalise_space} >= 2) { $text= _normalize_space( $text); }
7601 if( $options->{force_content}
7602 || $nb_atts
7603 || (scalar @children > 1)
7604 )
7605 { $data->{$options->{content_key}}= $text; }
7606 else
7607 { $data= $text; }
7608 }
7609 else
7610 { # element with sub-elements
7611 my $child_gi= $XML::Twig::index2gi[$child->{'gi'}];
7612
7613 my $child_data= $child->_simplify( $options);
7614
7615 # first see if we need to simplify further the child data
7616 # simplify because of grouped tags
7617 if( my $grouped_tag= $options->{group_tags}->{$child_gi})
7618 { # check that the child data is a hash with a single field
7619 unless( (ref( $child_data) eq 'HASH')
7620 && (keys %$child_data == 1)
7621 && defined ( my $grouped_child_data= $child_data->{$grouped_tag})
7622 )
7623 { croak "error in grouped tag $child_gi"; }
7624 else
7625 { $child_data= $grouped_child_data; }
7626 }
7627 # simplify because of extra folding
7628 if( $options->{extra_folding})
7629 { if( (ref( $child_data) eq 'HASH')
7630 && (keys %$child_data == 1)
7631 && defined( my $content= $child_data->{$options->{content_key}})
7632 )
7633 { $child_data= $content; }
7634 }
7635
7636 if( my $keyatt= $child->_key_attr( $options))
7637 { # simplify element with key
7638 my $key= $child->{'att'}->{$keyatt};
7639 if( $options->{normalise_space} >= 1) { $key= _normalize_space( $key); }
7640 $data->{$child_gi}->{$key}= $child_data;
7641 }
7642 elsif( $options->{forcearray}
7643 || $options->{forcearray_tags}->{$child_gi}
7644 || ( $nb_children{$child_gi} > 1)
7645 )
7646 { # simplify element to store in an array
7647 if( defined $child_data && $child_data ne "" )
7648 { $data->{$child_gi} ||= [];
7649 push @{$data->{$child_gi}}, $child_data;
7650 }
7651 else
7652 { $data->{$child_gi}= [{}]; }
7653 }
7654 else
7655 { # simplify element to store as a hash field
7656 $data->{$child_gi}=$child_data;
7657 $data->{$child_gi}= defined $child_data && $child_data ne "" ? $child_data : {};
7658 }
7659 }
7660 }
7661
7662 # store atts
7663 # TODO: deal with att that already have an element by that name
7664 foreach my $att (keys %atts)
7665 { # do not store if the att is a key that needs to be removed
7666 if( $options->{remove_key_for_all}->{$att}
7667 || $options->{remove_key_for_elt}->{"$gi#$att"}
7668 )
7669 { next; }
7670
7671 my $att_text= $options->{var} ? _replace_vars_in_text( $atts{$att}, $options) : $atts{$att} ;
7672 if( $options->{normalise_space} >= 2) { $att_text= _normalize_space( $att_text); }
7673
7674 if( $options->{prefix_key_for_all}->{$att}
7675 || $options->{prefix_key_for_elt}->{"$gi#$att"}
7676 )
7677 { # prefix the att
7678 $data->{"-$att"}= $att_text;
7679 }
7680 else
7681 { # normal case
7682 $data->{$att}= $att_text;
7683 }
7684 }
7685
7686 return $data;
7687 }
7688
7689sub _key_attr
7690 { my( $elt, $options)=@_;
7691 return if( $options->{noattr});
7692 if( $options->{key_for_all})
7693 { foreach my $att ($elt->att_names)
7694 { if( $options->{key_for_all}->{$att})
7695 { return $att; }
7696 }
7697 }
7698 elsif( $options->{key_for_elt})
7699 { if( my $key_for_elt= $options->{key_for_elt}->{$XML::Twig::index2gi[$elt->{'gi'}]} )
7700 { return $key_for_elt if( defined( $elt->{'att'}->{$key_for_elt})); }
7701 }
7702 return;
7703 }
7704
7705sub _text_with_vars
7706 { my( $elt, $options)= @_;
7707 my $text;
7708 if( $options->{var})
7709 { $text= _replace_vars_in_text( $elt->text, $options);
7710 $elt->_store_var( $options);
7711 }
7712 else
7713 { $text= $elt->text; }
7714 return $text;
7715 }
7716
7717
7718sub _normalize_space
7719 { my $text= shift;
7720 $text=~ s{\s+}{ }sg;
7721 $text=~ s{^\s}{};
7722 $text=~ s{\s$}{};
7723 return $text;
7724 }
7725
7726
7727sub att_nb
7728 { return 0 unless( my $atts= $_[0]->{att});
7729 return scalar keys %$atts;
7730 }
7731
7732sub has_no_atts
7733 { return 1 unless( my $atts= $_[0]->{att});
7734 return scalar keys %$atts ? 0 : 1;
7735 }
7736
7737sub _replace_vars_in_text
7738 { my( $text, $options)= @_;
7739
7740 $text=~ s{($options->{var_regexp})}
7741 { if( defined( my $value= $options->{var_values}->{$2}))
7742 { $value }
7743 else
7744 { warn "unknown variable $2\n";
7745 $1
7746 }
7747 }gex;
7748 return $text;
7749 }
7750
7751sub _store_var
7752 { my( $elt, $options)= @_;
7753 if( defined (my $var_name= $elt->{'att'}->{$options->{var}}))
7754 { $options->{var_values}->{$var_name}= $elt->text;
7755 }
7756 }
7757
7758
7759# split a text element at a given offset
7760sub split_at
7761 { my( $elt, $offset)= @_;
7762 my $text_elt= $elt->is_text ? $elt : $elt->first_child( $TEXT) || return '';
7763 my $string= $text_elt->text;
7764 my $left_string= substr( $string, 0, $offset);
7765 my $right_string= substr( $string, $offset);
7766 $text_elt->{pcdata}= (delete $text_elt->{empty} || 1) && $left_string;
7767 my $new_elt= $elt->new( $XML::Twig::index2gi[$elt->{'gi'}], $right_string);
7768 $new_elt->paste( after => $elt);
7769 return $new_elt;
7770 }
7771
7772
7773# split an element or its text descendants into several, in place
7774# all elements (new and untouched) are returned
7775sub split
7776 { my $elt= shift;
7777 my @text_chunks;
7778 my @result;
7779 if( $elt->is_text) { @text_chunks= ($elt); }
7780 else { @text_chunks= $elt->descendants( $TEXT); }
7781 foreach my $text_chunk (@text_chunks)
7782 { push @result, $text_chunk->_split( 1, @_); }
7783 return @result;
7784 }
7785
7786# split an element or its text descendants into several, in place
7787# created elements (those which match the regexp) are returned
7788sub mark
7789 { my $elt= shift;
7790 my @text_chunks;
7791 my @result;
7792 if( $elt->is_text) { @text_chunks= ($elt); }
7793 else { @text_chunks= $elt->descendants( $TEXT); }
7794 foreach my $text_chunk (@text_chunks)
7795 { push @result, $text_chunk->_split( 0, @_); }
7796 return @result;
7797 }
7798
7799# split a single text element
7800# return_all defines what is returned: if it is true
7801# only returns the elements created by matches in the split regexp
7802# otherwise all elements (new and untouched) are returned
7803
7804
7805{
7806
7807 sub _split
7808 { my $elt= shift;
7809 my $return_all= shift;
7810 my $regexp= shift;
7811 my @tags;
7812
7813 while( @_)
7814 { my $tag= shift();
7815 if( ref $_[0])
7816 { push @tags, { tag => $tag, atts => shift }; }
7817 else
7818 { push @tags, { tag => $tag }; }
7819 }
7820
7821 unless( @tags) { @tags= { tag => $elt->{parent}->gi }; }
7822
7823 my @result; # the returned list of elements
7824 my $text= $elt->text;
7825 my $gi= $XML::Twig::index2gi[$elt->{'gi'}];
7826
7827 # 2 uses: if split matches then the first substring reuses $elt
7828 # once a split has occurred then the last match needs to be put in
7829 # a new element
7830 my $previous_match= 0;
7831
7832 while( my( $pre_match, @matches)= $text=~ /^(.*?)$regexp(.*)$/gcs)
7833 { $text= pop @matches;
7834 if( $previous_match)
7835 { # match, not the first one, create a new text ($gi) element
7836 _utf8_ify( $pre_match) if( $] < 5.010);
7837 $elt= $elt->insert_new_elt( after => $gi, $pre_match);
7838 push @result, $elt if( $return_all);
7839 }
7840 else
7841 { # first match in $elt, re-use $elt for the first sub-string
7842 _utf8_ify( $pre_match) if( $] < 5.010);
7843 $elt->set_text( $pre_match);
7844 $previous_match++; # store the fact that there was a match
7845 push @result, $elt if( $return_all);
7846 }
7847
7848 # now deal with matches captured in the regexp
7849 if( @matches)
7850 { # match, with capture
7851 my $i=0;
7852 foreach my $match (@matches)
7853 { # create new element, text is the match
7854 _utf8_ify( $match) if( $] < 5.010);
7855 my $tag = _repl_match( $tags[$i]->{tag}, @matches) || '#PCDATA';
7856 my $atts = \%{$tags[$i]->{atts}} || {};
7857 my %atts= map { _repl_match( $_, @matches) => _repl_match( $atts->{$_}, @matches) } keys %$atts;
7858 $elt= $elt->insert_new_elt( after => $tag, \%atts, $match);
7859 push @result, $elt;
7860 $i= ($i + 1) % @tags;
7861 }
7862 }
7863 else
7864 { # match, no captures
7865 my $tag = $tags[0]->{tag};
7866 my $atts = \%{$tags[0]->{atts}} || {};
7867 $elt= $elt->insert_new_elt( after => $tag, $atts);
7868 push @result, $elt;
7869 }
7870 }
7871 if( $previous_match && $text)
7872 { # there was at least 1 match, and there is text left after the match
7873 $elt= $elt->insert_new_elt( after => $gi, $text);
7874 }
7875
7876 push @result, $elt if( $return_all);
7877
7878 return @result; # return all elements
7879 }
7880
7881sub _repl_match
7882 { my( $val, @matches)= @_;
7883 $val=~ s{\$(\d+)}{$matches[$1-1]}g;
7884 return $val;
7885 }
7886
7887 # evil hack needed as sometimes
78881200ns my $encode_is_loaded=0; # so we only load Encode once
7889 sub _utf8_ify
7890 {
7891 if( $perl_version >= 5.008 and $perl_version < 5.010 and !_keep_encoding())
7892 { unless( $encode_is_loaded) { require Encode; import Encode; $encode_is_loaded++; }
7893 Encode::_utf8_on( $_[0]); # the flag should be set but is not
7894 }
7895 }
7896
7897
7898}
7899
79002200ns{ my %replace_sub; # cache for complex expressions (expression => sub)
7901
7902 sub subs_text
7903 { my( $elt, $regexp, $replace)= @_;
7904
7905 my $replacement_string;
7906 my $is_string= _is_string( $replace);
7907
7908 my @parents;
7909
7910 foreach my $text_elt ($elt->descendants_or_self( $TEXT))
7911 {
7912 if( $is_string)
7913 { my $text= $text_elt->text;
7914 $text=~ s{$regexp}{ _replace_var( $replace, $1, $2, $3, $4, $5, $6, $7, $8, $9)}egx;
7915 $text_elt->set_text( $text);
7916 }
7917 else
7918 {
79192995µs210µs
# spent 9µs (7+2) within XML::Twig::Elt::BEGIN@7919 which was called: # once (7µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 7919
no utf8; # = perl 5.6
# spent 9µs making 1 call to XML::Twig::Elt::BEGIN@7919 # spent 2µs making 1 call to utf8::unimport
7920 my $replace_sub= ( $replace_sub{$replace} ||= _install_replace_sub( $replace));
7921 my $text= $text_elt->text;
7922 my $pos=0; # used to skip text that was previously matched
7923 my $found_hit;
7924 while( my( $pre_match_string, $match_string, @var)= ($text=~ m{(.*?)($regexp)}sg))
7925 { $found_hit=1;
7926 my $match_start = length( $pre_match_string);
7927 my $match = $match_start ? $text_elt->split_at( $match_start + $pos) : $text_elt;
7928 my $match_length = length( $match_string);
7929 my $post_match = $match->split_at( $match_length);
7930 $replace_sub->( $match, @var);
7931
7932 # go to next
7933 $text_elt= $post_match;
7934 $text= $post_match->text;
7935
7936 if( $found_hit) { push @parents, $text_elt->{parent} unless $parents[-1] && $parents[-1]== $text_elt->{parent}; }
7937
7938 }
7939 }
7940 }
7941
7942 foreach my $parent (@parents) { $parent->normalize; }
7943
7944 return $elt;
7945 }
7946
7947
7948 sub _is_string
7949 { return ($_[0]=~ m{&e[ln]t}) ? 0: 1 }
7950
7951 sub _replace_var
7952 { my( $string, @var)= @_;
7953 unshift @var, undef;
7954 $string=~ s{\$(\d)}{$var[$1]}g;
7955 return $string;
7956 }
7957
7958 sub _install_replace_sub
7959 { my $replace_exp= shift;
7960 my @item= split m{(&e[ln]t\s*\([^)]*\))}, $replace_exp;
7961 my $sub= q{ my( $match, @var)= @_; my $new; my $last_inserted=$match;};
7962 my( $gi, $exp);
7963 foreach my $item (@item)
7964 { next if ! length $item;
7965 if( $item=~ m{^&elt\s*\(([^)]*)\)})
7966 { $exp= $1; }
7967 elsif( $item=~ m{^&ent\s*\(\s*([^\s)]*)\s*\)})
7968 { $exp= " '#ENT' => $1"; }
7969 else
7970 { $exp= qq{ '#PCDATA' => "$item"}; }
7971 $exp=~ s{\$(\d)}{my $i= $1-1; "\$var[$i]"}eg; # replace references to matches
7972 $sub.= qq{ \$new= \$match->new( $exp); };
7973 $sub .= q{ $new->paste( after => $last_inserted); $last_inserted=$new;};
7974 }
7975 $sub .= q{ $match->delete; };
7976 #$sub=~ s/;/;\n/g; warn "subs: $sub";
7977 my $coderef= eval "sub { $NO_WARNINGS; $sub }";
7978 if( $@) { croak( "invalid replacement expression $replace_exp: ",$@); }
7979 return $coderef;
7980 }
7981
7982 }
7983
7984
7985sub merge_text
79861100ns { my( $e1, $e2)= @_;
7987 croak "invalid merge: can only merge 2 elements"
7988 unless( isa( $e2, 'XML::Twig::Elt'));
7989 croak "invalid merge: can only merge 2 text elements"
7990 unless( $e1->is_text && $e2->is_text && ($e1->gi eq $e2->gi));
7991
7992 my $t1_length= length( $e1->text);
7993
7994 $e1->set_text( $e1->text . $e2->text);
7995
7996 if( my $extra_data_in_pcdata= $e2->_extra_data_in_pcdata)
7997 { foreach my $data (@$extra_data_in_pcdata) { $e1->_push_extra_data_in_pcdata( $data->{text}, $data->{offset} + $t1_length); } }
7998
7999 $e2->delete;
8000
8001 return $e1;
8002 }
8003
8004sub merge
8005 { my( $e1, $e2)= @_;
8006 my @e2_children= $e2->_children;
8007 if( $e1->_last_child && $e1->_last_child->is_pcdata
8008 && @e2_children && $e2_children[0]->is_pcdata
8009 )
8010 { my $t1_length= length( $e1->_last_child->{pcdata});
8011 my $child1= $e1->_last_child;
8012 my $child2= shift @e2_children;
8013 $child1->{pcdata} .= $child2->{pcdata};
8014
8015 my $extra_data= $e1->_extra_data_before_end_tag . $e2->extra_data;
8016
8017 if( $extra_data)
8018 { $e1->_del_extra_data_before_end_tag;
8019 $child1->_push_extra_data_in_pcdata( $extra_data, $t1_length);
8020 }
8021
8022 if( my $extra_data_in_pcdata= $child2->_extra_data_in_pcdata)
8023 { foreach my $data (@$extra_data_in_pcdata) { $child1->_push_extra_data_in_pcdata( $data->{text}, $data->{offset} + $t1_length); } }
8024
8025 if( my $extra_data_before_end_tag= $e2->_extra_data_before_end_tag)
8026 { $e1->_set_extra_data_before_end_tag( $extra_data_before_end_tag); }
8027 }
8028
8029 foreach my $e (@e2_children) { $e->move( last_child => $e1); }
8030
8031 $e2->delete;
8032 return $e1;
8033 }
8034
8035
8036# recursively copy an element and returns the copy (can be huge and long)
8037sub copy
8038 { my $elt= shift;
8039 my $copy= $elt->new( $XML::Twig::index2gi[$elt->{'gi'}]);
8040
8041 if( $elt->extra_data) { $copy->set_extra_data( $elt->extra_data); }
8042 if( $elt->{extra_data_before_end_tag}) { $copy->_set_extra_data_before_end_tag( $elt->{extra_data_before_end_tag}); }
8043
8044 if( $elt->is_asis) { $copy->set_asis; }
8045
8046 if( (exists $elt->{'pcdata'}))
8047 { $copy->{pcdata}= (delete $copy->{empty} || 1) && $elt->{pcdata};
8048 if( $elt->{extra_data_in_pcdata}) { $copy->_set_extra_data_in_pcdata( $elt->{extra_data_in_pcdata}); }
8049 }
8050 elsif( (exists $elt->{'cdata'}))
8051 { $copy->{cdata}= $elt->{cdata};
8052 if( $elt->{extra_data_in_pcdata}) { $copy->_set_extra_data_in_pcdata( $elt->{extra_data_in_pcdata}); }
8053 }
8054 elsif( (exists $elt->{'target'}))
8055 { $copy->_set_pi( $elt->{target}, $elt->{data}); }
8056 elsif( (exists $elt->{'comment'}))
8057 { $copy->{comment}= $elt->{comment}; }
8058 elsif( (exists $elt->{'ent'}))
8059 { $copy->{ent}= $elt->{ent}; }
8060 else
8061 { my @children= do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; };
8062 if( my $atts= $elt->{att})
8063 { my %atts;
8064 tie %atts, 'Tie::IxHash' if (keep_atts_order());
8065 %atts= %{$atts}; # we want to do a real copy of the attributes
8066 $copy->set_atts( \%atts);
8067 }
8068 foreach my $child (@children)
8069 { my $child_copy= $child->copy;
8070 $child_copy->paste( 'last_child', $copy);
8071 }
8072 }
8073 # save links to the original location, which can be convenient and is used for namespace resolution
8074 foreach my $link ( qw(parent prev_sibling next_sibling) )
8075 { $copy->{former}->{$link}= $elt->{$link};
8076 if( $XML::Twig::weakrefs) { weaken( $copy->{former}->{$link}); }
8077 }
8078
8079 $copy->{empty}= $elt->{'empty'};
8080
8081 return $copy;
8082 }
8083
8084
8085sub delete
8086338134.26ms
# spent 653ms (74.1+579) within XML::Twig::Elt::delete which was called 33813 times, avg 19µs/call: # 33807 times (73.7ms+579ms) by XML::Twig::purge at line 3553, avg 19µs/call # 6 times (401µs+55µs) by XML::Twig::DESTROY at line 3963, avg 76µs/call
{ my $elt= shift;
80873381318.7ms33813579ms $elt->cut;
# spent 579ms making 33813 calls to XML::Twig::Elt::cut, avg 17µs/call
8088338134.01ms $elt->DESTROY unless $XML::Twig::weakrefs;
80893381362.4ms return undef;
8090 }
8091
8092sub __destroy
8093 { my $elt= shift;
8094 return if( $XML::Twig::weakrefs);
8095 my $t= shift || $elt->twig; # optional argument, passed in recursive calls
8096
8097 foreach( @{[$elt->_children]}) { $_->DESTROY( $t); }
8098
8099 # the id reference needs to be destroyed
8100 # lots of tests to avoid warnings during the cleanup phase
8101 $elt->del_id( $t) if( $ID && $t && defined( $elt->{att}) && exists( $elt->{att}->{$ID}));
8102 if( $elt->{former}) { foreach (keys %{$elt->{former}}) { delete $elt->{former}->{$_}; } delete $elt->{former}; }
8103 foreach (qw( keys %$elt)) { delete $elt->{$_}; }
8104 undef $elt;
8105 }
8106
8107BEGIN
810817µs
# spent 10µs (9+1) within XML::Twig::Elt::BEGIN@8108 which was called: # once (9µs+1µs) by Spreadsheet::ParseXLSX::BEGIN@15 at line 8110 # spent 1µs within XML::Twig::Elt::set_destroy which was called: # once (1µs+0s) by XML::Twig::Elt::BEGIN@8108 at line 8109
{ sub set_destroy { if( $XML::Twig::weakrefs) { undef *DESTROY } else { *DESTROY= *__destroy; } }
810912µs11µs set_destroy();
# spent 1µs making 1 call to XML::Twig::Elt::set_destroy
811011.15ms110µs}
# spent 10µs making 1 call to XML::Twig::Elt::BEGIN@8108
8111
8112# ignores the element
8113sub ignore
8114 { my $elt= shift;
8115 my $t= $elt->twig;
8116 $t->ignore( $elt, @_);
8117 }
8118
8119
# spent 16µs within XML::Twig::Elt::BEGIN@8119 which was called: # once (16µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 9065
BEGIN {
81201200ns my $pretty = 0;
81211200ns my $quote = '"';
81221100ns my $INDENT = ' ';
81231100ns my $empty_tag_style = 0;
812410s my $remove_cdata = 0;
812510s my $keep_encoding = 0;
812610s my $expand_external_entities = 0;
812710s my $keep_atts_order = 0;
812810s my $do_not_escape_amp_in_atts = 0;
81291100ns my $WRAP = '80';
81301100ns my $REPLACED_ENTS = qq{&<};
8131
81321800ns my ($NSGMLS, $NICE, $INDENTED, $INDENTEDCT, $INDENTEDC, $WRAPPED, $RECORD1, $RECORD2, $INDENTEDA)= (1..9);
813313µs my %KEEP_TEXT_TAG_ON_ONE_LINE= map { $_ => 1 } ( $INDENTED, $INDENTEDCT, $INDENTEDC, $INDENTEDA, $WRAPPED);
813411µs my %WRAPPED = map { $_ => 1 } ( $WRAPPED, $INDENTEDA, $INDENTEDC);
8135
813614µs my %pretty_print_style=
8137 ( none => 0, # no added \n
8138 nsgmls => $NSGMLS, # nsgmls-style, \n in tags
8139 # below this line styles are UNSAFE (the generated XML can be well-formed but invalid)
8140 nice => $NICE, # \n after open/close tags except when the
8141 # element starts with text
8142 indented => $INDENTED, # nice plus idented
8143 indented_close_tag => $INDENTEDCT, # nice plus idented
8144 indented_c => $INDENTEDC, # slightly more compact than indented (closing
8145 # tags are on the same line)
8146 wrapped => $WRAPPED, # text is wrapped at column
8147 record_c => $RECORD1, # for record-like data (compact)
8148 record => $RECORD2, # for record-like data (not so compact)
8149 indented_a => $INDENTEDA, # nice, indented, and with attributes on separate
8150 # lines as the nsgmls style, as well as wrapped
8151 # lines - to make the xml friendly to line-oriented tools
8152 cvs => $INDENTEDA, # alias for indented_a
8153 );
8154
81551300ns my ($HTML, $EXPAND)= (1..2);
81561800ns my %empty_tag_style=
8157 ( normal => 0, # <tag/>
8158 html => $HTML, # <tag />
8159 xhtml => $HTML, # <tag />
8160 expand => $EXPAND, # <tag></tag>
8161 );
8162
81631600ns my %quote_style=
8164 ( double => '"',
8165 single => "'",
8166 # smart => "smart",
8167 );
8168
81691100ns my $xml_space_preserve; # set when an element includes xml:space="preserve"
8170
8171 my $output_filter; # filters the entire output (including < and >)
8172 my $output_text_filter; # filters only the text part (tag names, attributes, pcdata)
8173
81741100ns my $replaced_ents= $REPLACED_ENTS;
8175
8176
8177 # returns those pesky "global" variables so you can switch between twigs
8178 sub global_state ## no critic (Subroutines::ProhibitNestedSubs);
8179 { return
8180 { pretty => $pretty,
8181 quote => $quote,
8182 indent => $INDENT,
8183 empty_tag_style => $empty_tag_style,
8184 remove_cdata => $remove_cdata,
8185 keep_encoding => $keep_encoding,
8186 expand_external_entities => $expand_external_entities,
8187 output_filter => $output_filter,
8188 output_text_filter => $output_text_filter,
8189 keep_atts_order => $keep_atts_order,
8190 do_not_escape_amp_in_atts => $do_not_escape_amp_in_atts,
8191 wrap => $WRAP,
8192 replaced_ents => $replaced_ents,
8193 };
8194 }
8195
8196 # restores the global variables
8197 sub set_global_state
8198 { my $state= shift;
8199 $pretty = $state->{pretty};
8200 $quote = $state->{quote};
8201 $INDENT = $state->{indent};
8202 $empty_tag_style = $state->{empty_tag_style};
8203 $remove_cdata = $state->{remove_cdata};
8204 $keep_encoding = $state->{keep_encoding};
8205 $expand_external_entities = $state->{expand_external_entities};
8206 $output_filter = $state->{output_filter};
8207 $output_text_filter = $state->{output_text_filter};
8208 $keep_atts_order = $state->{keep_atts_order};
8209 $do_not_escape_amp_in_atts = $state->{do_not_escape_amp_in_atts};
8210 $WRAP = $state->{wrap};
8211 $replaced_ents = $state->{replaced_ents},
8212 }
8213
8214 # sets global state to defaults
8215 sub init_global_state
8216 { set_global_state(
8217 { pretty => 0,
8218 quote => '"',
8219 indent => $INDENT,
8220 empty_tag_style => 0,
8221 remove_cdata => 0,
8222 keep_encoding => 0,
8223 expand_external_entities => 0,
8224 output_filter => undef,
8225 output_text_filter => undef,
8226 keep_atts_order => undef,
8227 do_not_escape_amp_in_atts => 0,
8228 wrap => $WRAP,
8229 replaced_ents => $REPLACED_ENTS,
8230 });
8231 }
8232
8233
8234 # set the pretty_print style (in $pretty) and returns the old one
8235 # can be called from outside the package with 2 arguments (elt, style)
8236 # or from inside with only one argument (style)
8237 # the style can be either a string (one of the keys of %pretty_print_style
8238 # or a number (presumably an old value saved)
8239 sub set_pretty_print
8240 { my $style= lc( defined $_[1] ? $_[1] : $_[0]); # so we cover both cases
8241 my $old_pretty= $pretty;
8242 if( $style=~ /^\d+$/)
8243 { croak "invalid pretty print style $style" unless( $style < keys %pretty_print_style);
8244 $pretty= $style;
8245 }
8246 else
8247 { croak "invalid pretty print style '$style'" unless( exists $pretty_print_style{$style});
8248 $pretty= $pretty_print_style{$style};
8249 }
8250 if( $WRAPPED{$pretty} )
8251 { XML::Twig::_use( 'Text::Wrap') or croak( "Text::Wrap not available, cannot use style $style"); }
8252 return $old_pretty;
8253 }
8254
8255 sub _pretty_print { return $pretty; }
8256
8257 # set the empty tag style (in $empty_tag_style) and returns the old one
8258 # can be called from outside the package with 2 arguments (elt, style)
8259 # or from inside with only one argument (style)
8260 # the style can be either a string (one of the keys of %empty_tag_style
8261 # or a number (presumably an old value saved)
8262 sub set_empty_tag_style
8263 { my $style= lc( defined $_[1] ? $_[1] : $_[0]); # so we cover both cases
8264 my $old_style= $empty_tag_style;
8265 if( $style=~ /^\d+$/)
8266 { croak "invalid empty tag style $style"
8267 unless( $style < keys %empty_tag_style);
8268 $empty_tag_style= $style;
8269 }
8270 else
8271 { croak "invalid empty tag style '$style'"
8272 unless( exists $empty_tag_style{$style});
8273 $empty_tag_style= $empty_tag_style{$style};
8274 }
8275 return $old_style;
8276 }
8277
8278 sub _pretty_print_styles
8279 { return (sort { $pretty_print_style{$a} <=> $pretty_print_style{$b} || $a cmp $b } keys %pretty_print_style); }
8280
8281 sub set_quote
828272µs
# spent 11µs within XML::Twig::Elt::set_quote which was called 7 times, avg 2µs/call: # 7 times (11µs+0s) by XML::Twig::set_quote at line 3922, avg 2µs/call
{ my $style= $_[1] || $_[0];
828371µs my $old_quote= $quote;
828473µs croak "invalid quote '$style'" unless( exists $quote_style{$style});
828572µs $quote= $quote_style{$style};
828677µs return $old_quote;
8287 }
8288
8289 sub set_remove_cdata
829071µs
# spent 5µs within XML::Twig::Elt::set_remove_cdata which was called 7 times, avg 729ns/call: # 7 times (5µs+0s) by XML::Twig::set_remove_cdata at line 3892, avg 729ns/call
{ my $new_value= defined $_[1] ? $_[1] : $_[0];
82917900ns my $old_value= $remove_cdata;
82927400ns $remove_cdata= $new_value;
829377µs return $old_value;
8294 }
8295
8296
8297 sub set_indent
8298 { my $new_value= defined $_[1] ? $_[1] : $_[0];
8299 my $old_value= $INDENT;
8300 $INDENT= $new_value;
8301 return $old_value;
8302 }
8303
8304 sub set_wrap
8305 { my $new_value= defined $_[1] ? $_[1] : $_[0];
8306 my $old_value= $WRAP;
8307 $WRAP= $new_value;
8308 return $old_value;
8309 }
8310
8311
8312 sub set_keep_encoding
831372µs
# spent 8µs within XML::Twig::Elt::set_keep_encoding which was called 7 times, avg 1µs/call: # 7 times (8µs+0s) by XML::Twig::set_keep_encoding at line 3774, avg 1µs/call
{ my $new_value= defined $_[1] ? $_[1] : $_[0];
831471µs my $old_value= $keep_encoding;
831571µs $keep_encoding= $new_value;
831678µs return $old_value;
8317 }
8318
8319 sub set_replaced_ents
8320 { my $new_value= defined $_[1] ? $_[1] : $_[0];
8321 my $old_value= $replaced_ents;
8322 $replaced_ents= $new_value;
8323 return $old_value;
8324 }
8325
8326 sub do_not_escape_gt
8327 { my $old_value= $replaced_ents;
8328 $replaced_ents= q{&<}; # & needs to be first
8329 return $old_value;
8330 }
8331
8332 sub escape_gt
8333 { my $old_value= $replaced_ents;
8334 $replaced_ents= qq{&<>}; # & needs to be first
8335 return $old_value;
8336 }
8337
8338 sub _keep_encoding { return $keep_encoding; } # so I can use elsewhere in the module
8339
8340 sub set_do_not_escape_amp_in_atts
834172µs
# spent 7µs within XML::Twig::Elt::set_do_not_escape_amp_in_atts which was called 7 times, avg 943ns/call: # 7 times (7µs+0s) by XML::Twig::set_do_not_escape_amp_in_atts at line 3934, avg 943ns/call
{ my $new_value= defined $_[1] ? $_[1] : $_[0];
834271µs my $old_value= $do_not_escape_amp_in_atts;
83437400ns $do_not_escape_amp_in_atts= $new_value;
834477µs return $old_value;
8345 }
8346
8347 sub output_filter { return $output_filter; }
8348 sub output_text_filter { return $output_text_filter; }
8349
8350 sub set_output_filter
835171µs
# spent 25µs (21+4) within XML::Twig::Elt::set_output_filter which was called 7 times, avg 4µs/call: # 7 times (21µs+4µs) by XML::Twig::set_output_filter at line 3895, avg 4µs/call
{ my $new_value= defined $_[1] ? $_[1] : $_[0]; # can be called in object/non-object mode
8352 # if called in object mode with no argument, the filter is undefined
8353717µs144µs if( isa( $new_value, 'XML::Twig::Elt') || isa( $new_value, 'XML::Twig')) { undef $new_value; }
# spent 4µs making 14 calls to UNIVERSAL::isa, avg 271ns/call
835471µs my $old_value= $output_filter;
835572µs if( !$new_value || isa( $new_value, 'CODE') )
8356 { $output_filter= $new_value; }
8357 elsif( $new_value eq 'latin1')
8358 { $output_filter= XML::Twig::latin1();
8359 }
8360 elsif( $XML::Twig::filter{$new_value})
8361 { $output_filter= $XML::Twig::filter{$new_value}; }
8362 else
8363 { croak "invalid output filter '$new_value'"; }
8364
836576µs return $old_value;
8366 }
8367
8368 sub set_output_text_filter
836971µs
# spent 20µs (18+1) within XML::Twig::Elt::set_output_text_filter which was called 7 times, avg 3µs/call: # 7 times (18µs+1µs) by XML::Twig::set_output_text_filter at line 3898, avg 3µs/call
{ my $new_value= defined $_[1] ? $_[1] : $_[0]; # can be called in object/non-object mode
8370 # if called in object mode with no argument, the filter is undefined
8371713µs141µs if( isa( $new_value, 'XML::Twig::Elt') || isa( $new_value, 'XML::Twig')) { undef $new_value; }
# spent 1µs making 14 calls to UNIVERSAL::isa, avg 100ns/call
83727700ns my $old_value= $output_text_filter;
837371µs if( !$new_value || isa( $new_value, 'CODE') )
8374 { $output_text_filter= $new_value; }
8375 elsif( $new_value eq 'latin1')
8376 { $output_text_filter= XML::Twig::latin1();
8377 }
8378 elsif( $XML::Twig::filter{$new_value})
8379 { $output_text_filter= $XML::Twig::filter{$new_value}; }
8380 else
8381 { croak "invalid output text filter '$new_value'"; }
8382
838376µs return $old_value;
8384 }
8385
8386 sub set_expand_external_entities
838772µs
# spent 8µs within XML::Twig::Elt::set_expand_external_entities which was called 7 times, avg 1µs/call: # 7 times (8µs+0s) by XML::Twig::set_expand_external_entities at line 3778, avg 1µs/call
{ my $new_value= defined $_[1] ? $_[1] : $_[0];
838871µs my $old_value= $expand_external_entities;
83897900ns $expand_external_entities= $new_value;
839078µs return $old_value;
8391 }
8392
8393 sub set_keep_atts_order
839472µs
# spent 7µs within XML::Twig::Elt::set_keep_atts_order which was called 7 times, avg 971ns/call: # 7 times (7µs+0s) by XML::Twig::set_keep_atts_order at line 3928, avg 971ns/call
{ my $new_value= defined $_[1] ? $_[1] : $_[0];
839571µs my $old_value= $keep_atts_order;
83967600ns $keep_atts_order= $new_value;
839777µs return $old_value;
8398
8399 }
8400
8401364369792ms
# spent 128ms within XML::Twig::Elt::keep_atts_order which was called 364369 times, avg 352ns/call: # 364369 times (128ms+0s) by XML::Twig::Elt::set_atts at line 6138, avg 352ns/call
sub keep_atts_order { return $keep_atts_order; } # so I can use elsewhere in the module
8402
84031300ns my %html_empty_elt;
840412.45ms17µs
# spent 7µs within XML::Twig::Elt::BEGIN@8404 which was called: # once (7µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 8404
BEGIN { %html_empty_elt= map { $_ => 1} qw( base meta link hr br param img area input col); }
# spent 7µs making 1 call to XML::Twig::Elt::BEGIN@8404
8405
8406 sub start_tag
8407 { my( $elt, $option)= @_;
8408
8409
8410 return if( $elt->{gi} < $XML::Twig::SPECIAL_GI);
8411
8412 my $extra_data= $elt->{extra_data} || '';
8413
8414 my $gi= $XML::Twig::index2gi[$elt->{'gi'}];
8415 my $att= $elt->{att}; # should be $elt->{att}, optimized into a pure hash look-up
8416
8417 my $ns_map= $att ? $att->{'#original_gi'} : '';
8418 if( $ns_map) { $gi= _restore_original_prefix( $ns_map, $gi); }
8419 $gi=~ s{^#default:}{}; # remove default prefix
8420
8421 if( $output_text_filter) { $gi= $output_text_filter->( $gi); }
8422
8423 # get the attribute and their values
8424 my $att_sep = $pretty==$NSGMLS ? "\n"
8425 : $pretty==$INDENTEDA ? "\n" . $INDENT x ($elt->level+1) . ' '
8426 : ' '
8427 ;
8428
8429 my $replace_in_att_value= $replaced_ents . "$quote\t\r\n";
8430 if( $option->{escape_gt} && $replaced_ents !~ m{>}) { $replace_in_att_value.= '>'; }
8431
8432 my $tag;
8433 my @att_names= grep { !( $_=~ m{^#(?!default:)} ) } $keep_atts_order ? keys %{$att} : sort keys %{$att};
8434 if( @att_names)
8435 { my $atts= join $att_sep, map { my $output_att_name= $ns_map ? _restore_original_prefix( $ns_map, $_) : $_;
8436 if( $output_text_filter)
8437 { $output_att_name= $output_text_filter->( $output_att_name); }
8438 $output_att_name . '=' . $quote . _att_xml_string( $att->{$_}, $replace_in_att_value) . $quote
8439
8440 }
8441 @att_names
8442 ;
8443 if( $pretty==$INDENTEDA && @att_names == 1) { $att_sep= ' '; }
8444 $tag= "<$gi$att_sep$atts";
8445 }
8446 else
8447 { $tag= "<$gi"; }
8448
8449 $tag .= "\n" if($pretty==$NSGMLS);
8450
8451
8452 # force empty if suitable HTML tag, otherwise use the value from the input tree
8453 if( ($empty_tag_style eq $HTML) && !$elt->{first_child} && !$elt->{extra_data_before_end_tag} && $html_empty_elt{$gi})
8454 { $elt->{empty}= 1; }
8455 my $empty= defined $elt->{empty} ? $elt->{empty}
8456 : $elt->{first_child} ? 0
8457 : 1;
8458
8459 $tag .= (!$elt->{empty} || $elt->{extra_data_before_end_tag}) ? '>' # element has content
8460 : (($empty_tag_style eq $HTML) && $html_empty_elt{$gi}) ? ' />' # html empty element
8461 # cvs-friendly format
8462 : ( $pretty == $INDENTEDA && @att_names > 1) ? "\n" . $INDENT x $elt->level . "/>"
8463 : ( $pretty == $INDENTEDA && @att_names == 1) ? " />"
8464 : $empty_tag_style ? "></" . $XML::Twig::index2gi[$elt->{'gi'}] . ">" # $empty_tag_style is $HTML or $EXPAND
8465 : '/>'
8466 ;
8467
8468 if( ( (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 1) eq '#') && (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 9) ne '#default:') )) { $tag= ''; }
8469
8470#warn "TRACE: ", $tag,": ", Encode::is_utf8( $tag) ? "has flag" : "FLAG NOT SET";
8471
8472 unless( $pretty) { return defined( $extra_data) ? $extra_data . $tag : $tag; }
8473
8474 my $prefix='';
8475 my $return=''; # '' or \n is to be printed before the tag
8476 my $indent=0; # number of indents before the tag
8477
8478 if( $pretty==$RECORD1)
8479 { my $level= $elt->level;
8480 $return= "\n" if( $level < 2);
8481 $indent= 1 if( $level == 1);
8482 }
8483
8484 elsif( $pretty==$RECORD2)
8485 { $return= "\n";
8486 $indent= $elt->level;
8487 }
8488
8489 elsif( $pretty==$NICE)
8490 { my $parent= $elt->{parent};
8491 unless( !$parent || $parent->{contains_text})
8492 { $return= "\n"; }
8493 $elt->{contains_text}= 1 if( ($parent && $parent->{contains_text})
8494 || $elt->contains_text);
8495 }
8496
8497 elsif( $KEEP_TEXT_TAG_ON_ONE_LINE{$pretty})
8498 { my $parent= $elt->{parent};
8499 unless( !$parent || $parent->{contains_text})
8500 { $return= "\n";
8501 $indent= $elt->level;
8502 }
8503 $elt->{contains_text}= 1 if( ($parent && $parent->{contains_text})
8504 || $elt->contains_text);
8505 }
8506
8507 if( $return || $indent)
8508 { # check for elements in which spaces should be kept
8509 my $t= $elt->twig;
8510 return $extra_data . $tag if( $xml_space_preserve);
8511 if( $t && $t->{twig_keep_spaces_in})
8512 { foreach my $ancestor ($elt->ancestors)
8513 { return $extra_data . $tag if( $t->{twig_keep_spaces_in}->{$XML::Twig::index2gi[$ancestor->{'gi'}]}) }
8514 }
8515
8516 $prefix= $INDENT x $indent;
8517 if( $extra_data)
8518 { $extra_data=~ s{\s+$}{};
8519 $extra_data=~ s{^\s+}{};
8520 $extra_data= $prefix . $extra_data . $return;
8521 }
8522 }
8523
8524
8525 return $return . $extra_data . $prefix . $tag;
8526 }
8527
8528 sub end_tag
8529 { my $elt= shift;
8530 return '' if( ($elt->{gi}<$XML::Twig::SPECIAL_GI)
8531 || ($elt->{'empty'} && !$elt->{extra_data_before_end_tag})
8532 );
8533 my $tag= "<";
8534 my $gi= $XML::Twig::index2gi[$elt->{'gi'}];
8535
8536 if( my $map= $elt->{'att'}->{'#original_gi'}) { $gi= _restore_original_prefix( $map, $gi); }
8537 $gi=~ s{^#default:}{}; # remove default prefix
8538
8539 if( $output_text_filter) { $gi= $output_text_filter->( $XML::Twig::index2gi[$elt->{'gi'}]); }
8540 $tag .= "/$gi>";
8541
8542 $tag = ($elt->{extra_data_before_end_tag} || '') . $tag;
8543
8544 if( ( (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 1) eq '#') && (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 9) ne '#default:') )) { $tag= ''; }
8545
8546 return $tag unless $pretty;
8547
8548 my $prefix='';
8549 my $return=0; # 1 if a \n is to be printed before the tag
8550 my $indent=0; # number of indents before the tag
8551
8552 if( $pretty==$RECORD1)
8553 { $return= 1 if( $elt->level == 0);
8554 }
8555
8556 elsif( $pretty==$RECORD2)
8557 { unless( $elt->contains_text)
8558 { $return= 1 ;
8559 $indent= $elt->level;
8560 }
8561 }
8562
8563 elsif( $pretty==$NICE)
8564 { my $parent= $elt->{parent};
8565 if( ( ($parent && !$parent->{contains_text}) || !$parent )
8566 && ( !$elt->{contains_text}
8567 && ($elt->{has_flushed_child} || $elt->{first_child})
8568 )
8569 )
8570 { $return= 1; }
8571 }
8572
8573 elsif( $KEEP_TEXT_TAG_ON_ONE_LINE{$pretty})
8574 { my $parent= $elt->{parent};
8575 if( ( ($parent && !$parent->{contains_text}) || !$parent )
8576 && ( !$elt->{contains_text}
8577 && ($elt->{has_flushed_child} || $elt->{first_child})
8578 )
8579 )
8580 { $return= 1;
8581 $indent= $elt->level;
8582 }
8583 }
8584
8585 if( $return || $indent)
8586 { # check for elements in which spaces should be kept
8587 my $t= $elt->twig;
8588 return $tag if( $xml_space_preserve);
8589 if( $t && $t->{twig_keep_spaces_in})
8590 { foreach my $ancestor ($elt, $elt->ancestors)
8591 { return $tag if( $t->{twig_keep_spaces_in}->{$XML::Twig::index2gi[$ancestor->{'gi'}]}) }
8592 }
8593
8594 if( $return) { $prefix= ($pretty== $INDENTEDCT) ? "\n$INDENT" : "\n"; }
8595 $prefix.= $INDENT x $indent;
8596 }
8597
8598 # add a \n at the end of the document (after the root element)
8599 $tag .= "\n" unless( $elt->{parent});
8600
8601 return $prefix . $tag;
8602 }
8603
8604 sub _restore_original_prefix
8605 { my( $map, $name)= @_;
8606 my $prefix= _ns_prefix( $name);
8607 if( my $original_prefix= $map->{$prefix})
8608 { if( $original_prefix eq '#default')
8609 { $name=~ s{^$prefix:}{}; }
8610 else
8611 { $name=~ s{^$prefix(?=:)}{$original_prefix}; }
8612 }
8613 return $name;
8614 }
8615
8616 # buffer used to hold the text to print/sprint, to avoid passing it back and forth between methods
8617 my @sprint;
8618
8619 # $elt is an element to print
8620 # $fh is an optional filehandle to print to
8621 # $pretty is an optional value, if true a \n is printed after the < of the
8622 # opening tag
8623 sub print
8624 { my $elt= shift;
8625
8626 my $fh= isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar') ? shift : undef;
8627 my $old_select= defined $fh ? select $fh : undef;
8628 print $elt->sprint( @_);
8629 select $old_select if( defined $old_select);
8630 }
8631
8632
8633# those next 2 methods need to be refactored, they are copies of the same methods in XML::Twig
8634sub print_to_file
8635 { my( $elt, $filename)= (shift, shift);
8636 my $out_fh;
8637# open( $out_fh, ">$filename") or _croak( "cannot create file $filename: $!"); # < perl 5.8
8638 my $mode= $keep_encoding ? '>' : '>:utf8'; # >= perl 5.8
8639 open( $out_fh, $mode, $filename) or _croak( "cannot create file $filename: $!"); # >= perl 5.8
8640 $elt->print( $out_fh, @_);
8641 close $out_fh;
8642 return $elt;
8643 }
8644
8645# probably only works on *nix (at least the chmod bit)
8646# first print to a temporary file, then rename that file to the desired file name, then change permissions
8647# to the original file permissions (or to the current umask)
8648sub safe_print_to_file
8649 { my( $elt, $filename)= (shift, shift);
8650 my $perm= -f $filename ? (stat $filename)[2] & 07777 : ~umask() ;
8651 XML::Twig::_use( 'File::Temp') || croak "need File::Temp to use safe_print_to_file\n";
8652 XML::Twig::_use( 'File::Basename') || croak "need File::Basename to use safe_print_to_file\n";
8653 my $tmpdir= File::Basename::dirname( $filename);
8654 my( $fh, $tmpfilename) = File::Temp::tempfile( DIR => $tmpdir);
8655 $elt->print_to_file( $tmpfilename, @_);
8656 rename( $tmpfilename, $filename) or unlink $tmpfilename && _croak( "cannot move temporary file to $filename: $!");
8657 chmod $perm, $filename;
8658 return $elt;
8659 }
8660
8661
8662 # same as print but does not output the start tag if the element
8663 # is marked as flushed
8664 sub flush
8665 { my $elt= shift;
8666 my $up_to= $_[0] && isa( $_[0], 'XML::Twig::Elt') ? shift : $elt;
8667 $elt->twig->flush_up_to( $up_to, @_);
8668 }
8669 sub purge
8670 { my $elt= shift;
8671 my $up_to= $_[0] && isa( $_[0], 'XML::Twig::Elt') ? shift : $elt;
8672 $elt->twig->purge_up_to( $up_to, @_);
8673 }
8674
8675 sub _flush
8676 { my $elt= shift;
8677
8678 my $pretty;
8679 my $fh= isa( $_[0], 'GLOB') || isa( $_[0], 'IO::Scalar') ? shift : undef;
8680 my $old_select= defined $fh ? select $fh : undef;
8681 my $old_pretty= defined ($pretty= shift) ? set_pretty_print( $pretty) : undef;
8682
8683 $xml_space_preserve= 1 if( ($elt->inherit_att( 'xml:space') || '') eq 'preserve');
8684
8685 $elt->__flush();
8686
8687 $xml_space_preserve= 0;
8688
8689 select $old_select if( defined $old_select);
8690 set_pretty_print( $old_pretty) if( defined $old_pretty);
8691 }
8692
8693 sub __flush
8694 { my $elt= shift;
8695
8696 if( $elt->{gi} >= $XML::Twig::SPECIAL_GI)
8697 { my $preserve= ($elt->{'att'}->{'xml:space'} || '') eq 'preserve';
8698 $xml_space_preserve++ if $preserve;
8699 unless( $elt->{'flushed'})
8700 { print $elt->start_tag();
8701 }
8702
8703 # flush the children
8704 my @children= do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; };
8705 foreach my $child (@children)
8706 { $child->_flush( $pretty);
8707 $child->{'flushed'}=1;
8708 }
8709 if( ! $elt->{end_tag_flushed})
8710 { print $elt->end_tag;
8711 $elt->{end_tag_flushed}=1;
8712 $elt->{'flushed'}=1;
8713 }
8714 $xml_space_preserve-- if $preserve;
8715 # used for pretty printing
8716 if( my $parent= $elt->{parent}) { $parent->{has_flushed_child}= 1; }
8717 }
8718 else # text or special element
8719 { my $text;
8720 if( (exists $elt->{'pcdata'})) { $text= $elt->pcdata_xml_string;
8721 if( my $parent= $elt->{parent})
8722 { $parent->{contains_text}= 1; }
8723 }
8724 elsif( (exists $elt->{'cdata'})) { $text= $elt->cdata_string;
8725 if( my $parent= $elt->{parent})
8726 { $parent->{contains_text}= 1; }
8727 }
8728 elsif( (exists $elt->{'target'})) { $text= $elt->pi_string; }
8729 elsif( (exists $elt->{'comment'})) { $text= $elt->comment_string; }
8730 elsif( (exists $elt->{'ent'})) { $text= $elt->ent_string; }
8731
8732 print $output_filter ? $output_filter->( $text) : $text;
8733 }
8734 }
8735
8736
8737 sub xml_text
8738 { my( $elt, @options)= @_;
8739
8740 if( @options && grep { lc( $_) eq 'no_recurse' } @options) { return $elt->xml_text_only; }
8741
8742 my $string='';
8743
8744 if( ($elt->{gi} >= $XML::Twig::SPECIAL_GI) )
8745 { # sprint the children
8746 my $child= $elt->{first_child} || '';
8747 while( $child)
8748 { $string.= $child->xml_text;
8749 } continue { $child= $child->{next_sibling}; }
8750 }
8751 elsif( (exists $elt->{'pcdata'})) { $string .= $output_filter ? $output_filter->($elt->pcdata_xml_string)
8752 : $elt->pcdata_xml_string;
8753 }
8754 elsif( (exists $elt->{'cdata'})) { $string .= $output_filter ? $output_filter->($elt->cdata_string)
8755 : $elt->cdata_string;
8756 }
8757 elsif( (exists $elt->{'ent'})) { $string .= $elt->ent_string; }
8758
8759 return $string;
8760 }
8761
8762 sub xml_text_only
8763 { return join '', map { $_->xml_text if( $_->is_text || (exists $_->{'ent'})) } $_[0]->_children; }
8764
8765 # same as print but except... it does not print but rather returns the string
8766 # if the second parameter is set then only the content is returned, not the
8767 # start and end tags of the element (but the tags of the included elements are
8768 # returned)
8769
8770 sub sprint
8771 { my $elt= shift;
8772 my( $old_pretty, $old_empty_tag_style);
8773
8774 if( $_[0])
8775 { if( isa( $_[0], 'HASH'))
8776 { # "proper way, using a hashref for options
8777 my %args= XML::Twig::_normalize_args( %{shift()});
8778 if( defined $args{PrettyPrint}) { $old_pretty = set_pretty_print( $args{PrettyPrint}); }
8779 if( defined $args{EmptyTags}) { $old_empty_tag_style = set_empty_tag_style( $args{EmptyTags}); }
8780 }
8781 else
8782 { # "old" way, just using the option name
8783 my @other_opt;
8784 foreach my $opt (@_)
8785 { if( exists $pretty_print_style{$opt}) { $old_pretty = set_pretty_print( $opt); }
8786 elsif( exists $empty_tag_style{$opt}) { $old_empty_tag_style = set_empty_tag_style( $opt); }
8787 else { push @other_opt, $opt; }
8788 }
8789 @_= @other_opt;
8790 }
8791 }
8792
8793 $xml_space_preserve= 1 if( ($elt->inherit_att( 'xml:space') || '') eq 'preserve');
8794
8795 @sprint=();
8796 $elt->_sprint( @_);
8797 my $sprint= join( '', @sprint);
8798 if( $output_filter) { $sprint= $output_filter->( $sprint); }
8799
8800 if( ( ($pretty== $WRAPPED) || ($pretty==$INDENTEDC)) && !$xml_space_preserve)
8801 { $sprint= _wrap_text( $sprint); }
8802 $xml_space_preserve= 0;
8803
8804
8805 if( defined $old_pretty) { set_pretty_print( $old_pretty); }
8806 if( defined $old_empty_tag_style) { set_empty_tag_style( $old_empty_tag_style); }
8807
8808 return $sprint;
8809 }
8810
8811 sub _wrap_text
8812 { my( $string)= @_;
8813 my $wrapped;
8814 foreach my $line (split /\n/, $string)
8815 { my( $initial_indent)= $line=~ m{^(\s*)};
8816 my $wrapped_line= Text::Wrap::wrap( '', $initial_indent . $INDENT, $line) . "\n";
8817
8818 # fix glitch with Text::wrap when the first line is long and does not include spaces
8819 # the first line ends up being too short by 2 chars, but we'll have to live with it!
8820 $wrapped_line=~ s{^ +\n }{}s; # this prefix needs to be removed
8821
8822 $wrapped .= $wrapped_line;
8823 }
8824
8825 return $wrapped;
8826 }
8827
8828
8829 sub _sprint
8830 { my $elt= shift;
8831 my $no_tag= shift || 0;
8832 # in case there's some comments or PI's piggybacking
8833
8834 if( $elt->{gi} >= $XML::Twig::SPECIAL_GI)
8835 {
8836 my $preserve= ($elt->{'att'}->{'xml:space'} || '') eq 'preserve';
8837 $xml_space_preserve++ if $preserve;
8838
8839 push @sprint, $elt->start_tag unless( $no_tag);
8840
8841 # sprint the children
8842 my $child= $elt->{first_child};
8843 while( $child)
8844 { $child->_sprint;
8845 $child= $child->{next_sibling};
8846 }
8847 push @sprint, $elt->end_tag unless( $no_tag);
8848 $xml_space_preserve-- if $preserve;
8849 }
8850 else
8851 { push @sprint, $elt->{extra_data} if( $elt->{extra_data}) ;
8852 if( (exists $elt->{'pcdata'})) { push @sprint, $elt->pcdata_xml_string; }
8853 elsif( (exists $elt->{'cdata'})) { push @sprint, $elt->cdata_string; }
8854 elsif( (exists $elt->{'target'})) { if( ($pretty >= $INDENTED) && !$elt->{parent}->{contains_text}) { push @sprint, "\n" . $INDENT x $elt->level; }
8855 push @sprint, $elt->pi_string;
8856 }
8857 elsif( (exists $elt->{'comment'})) { if( ($pretty >= $INDENTED) && !$elt->{parent}->{contains_text}) { push @sprint, "\n" . $INDENT x $elt->level; }
8858 push @sprint, $elt->comment_string;
8859 }
8860 elsif( (exists $elt->{'ent'})) { push @sprint, $elt->ent_string; }
8861 }
8862
8863 return;
8864 }
8865
8866 # just a shortcut to $elt->sprint( 1)
8867 sub xml_string
8868 { my $elt= shift;
8869 isa( $_[0], 'HASH') ? $elt->sprint( shift(), 1) : $elt->sprint( 1);
8870 }
8871
8872 sub pcdata_xml_string
8873 { my $elt= shift;
8874 if( defined( my $string= $elt->{pcdata}) )
8875 {
8876 if( ! $elt->{extra_data_in_pcdata})
8877 {
8878 $string=~ s/([$replaced_ents])/$XML::Twig::base_ent{$1}/g unless( !$replaced_ents || $keep_encoding || $elt->{asis});
8879 $string=~ s{\Q]]>}{]]&gt;}g;
8880 }
8881 else
8882 { _gen_mark( $string); # used by _(un)?protect_extra_data
8883 foreach my $data (reverse @{$elt->{extra_data_in_pcdata}})
8884 { my $substr= substr( $string, $data->{offset});
8885 if( $keep_encoding || $elt->{asis})
8886 { substr( $string, $data->{offset}, 0, $data->{text}); }
8887 else
8888 { substr( $string, $data->{offset}, 0, _protect_extra_data( $data->{text})); }
8889 }
8890 unless( $keep_encoding || $elt->{asis})
8891 {
8892 $string=~ s{([$replaced_ents])}{$XML::Twig::base_ent{$1}}g ;
8893 $string=~ s{\Q]]>}{]]&gt;}g;
8894 _unprotect_extra_data( $string);
8895 }
8896 }
8897 return $output_text_filter ? $output_text_filter->( $string) : $string;
8898 }
8899 else
8900 { return ''; }
8901 }
8902
89031100ns { my $mark;
89041400ns my( %char2ent, %ent2char);
8905 BEGIN
890611µs
# spent 6µs within XML::Twig::Elt::BEGIN@8906 which was called: # once (6µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 8908
{ %char2ent= ( '<' => 'lt', '&' => 'amp', '>' => 'gt');
890718µs %ent2char= map { $char2ent{$_} => $_ } keys %char2ent;
89081957µs16µs }
# spent 6µs making 1 call to XML::Twig::Elt::BEGIN@8906
8909
8910 # generate a unique mark (a string) not found in the string,
8911 # used to mark < and & in the extra data
8912 sub _gen_mark
8913 { $mark="AAAA";
8914 $mark++ while( index( $_[0], $mark) > -1);
8915 return $mark;
8916 }
8917
8918 sub _protect_extra_data
8919 { my( $extra_data)= @_;
8920 $extra_data=~ s{([<&>])}{:$mark:$char2ent{$1}:}g;
8921 return $extra_data;
8922 }
8923
8924 sub _unprotect_extra_data
8925 { $_[0]=~ s{:$mark:(\w+):}{$ent2char{$1}}g; }
8926
8927 }
8928
8929 sub cdata_string
893016µs { my $cdata= $_[0]->{cdata};
8931 unless( defined $cdata) { return ''; }
8932 if( $remove_cdata)
8933 { $cdata=~ s/([$replaced_ents])/$XML::Twig::base_ent{$1}/g; }
8934 else
8935 { $cdata= $CDATA_START . $cdata . $CDATA_END; }
8936 return $cdata;
8937 }
8938
8939 sub att_xml_string
8940 { my $elt= shift;
8941 my $att= shift;
8942
8943 my $replace= $replaced_ents . "$quote\n\r\t";
8944 if($_[0] && $_[0]->{escape_gt} && ($replace!~ m{>}) ) { $replace .='>'; }
8945
8946 if( defined (my $string= $elt->{att}->{$att}))
8947 { return _att_xml_string( $string, $replace); }
8948 else
8949 { return ''; }
8950 }
8951
8952 # escaped xml string for an attribute value
8953 sub _att_xml_string
8954 { my( $string, $escape)= @_;
8955 if( !defined( $string)) { return ''; }
8956 if( $keep_encoding)
8957 { $string=~ s{$quote}{$XML::Twig::base_ent{$quote}}g;
8958 }
8959 else
8960 {
8961 if( $do_not_escape_amp_in_atts)
8962 { $escape=~ s{^.}{}; # seems like the most backward compatible way to remove & from the list
8963 $string=~ s{([$escape])}{$XML::Twig::base_ent{$1}}g;
8964 $string=~ s{&(?!(\w+|#\d+|[xX][0-9a-fA-F]+);)}{&amp;}g; # dodgy: escape & that do not start an entity
8965 }
8966 else
8967 { $string=~ s{([$escape])}{$XML::Twig::base_ent{$1}}g;
8968 $string=~ s{\Q]]>}{]]&gt;}g;
8969 }
8970 }
8971
8972 return $output_text_filter ? $output_text_filter->( $string) : $string;
8973 }
8974
8975 sub ent_string
8976 { my $ent= shift;
8977 my $ent_text= $ent->{ent};
8978 my( $t, $el, $ent_string);
8979 if( $expand_external_entities
8980 && ($t= $ent->twig)
8981 && ($el= $t->entity_list)
8982 && ($ent_string= $el->{entities}->{$ent->ent_name}->{val})
8983 )
8984 { return $ent_string; }
8985 else
8986 { return $ent_text; }
8987 }
8988
8989 # returns just the text, no tags, for an element
8990 sub text
899125458230.4ms
# spent 678ms (678+0ns) within XML::Twig::Elt::text which was called 254582 times, avg 3µs/call: # 127291 times (145ms+-145ms) by XML::Twig::Elt::text at line 9008, avg 0s/call # 127276 times (533ms+145ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 380 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 5µs/call # 15 times (68µs+33µs) by Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell at line 583 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 7µs/call
{ my( $elt, @options)= @_;
8992
899325458222.8ms if( @options && grep { lc( $_) eq 'no_recurse' } @options) { return $elt->text_only; }
899425458230.6ms my $sep = (@options && grep { lc( $_) eq 'sep' } @options) ? ' ' : '';
8995
899625458217.4ms my $string;
8997
8998254582309ms if( (exists $elt->{'pcdata'})) { return $elt->{pcdata} . $sep; }
8999 elsif( (exists $elt->{'cdata'})) { return $elt->{cdata} . $sep; }
9000 elsif( (exists $elt->{'target'})) { return $elt->pi_string . $sep; }
9001 elsif( (exists $elt->{'comment'})) { return $elt->{comment} . $sep; }
9002 elsif( (exists $elt->{'ent'})) { return $elt->{ent} . $sep ; }
9003
9004
900512729120.3ms my $child= $elt->{first_child} ||'';
900612729160.7ms while( $child)
9007 {
900812729166.0ms1272910s my $child_text= $child->text( @options);
# spent 145ms making 127291 calls to XML::Twig::Elt::text, avg 1µs/call, recursion: max depth 1, sum of overlapping time 145ms
900912729150.6ms $string.= defined( $child_text) ? $sep . $child_text : '';
9010 } continue { $child= $child->{next_sibling}; }
9011
901212729110.7ms unless( defined $string) { $string=''; }
9013
9014127291211ms return $output_text_filter ? $output_text_filter->( $string) : $string;
9015 }
9016
9017 sub text_only
9018 { return join '', map { $_->text if( $_->is_text || (exists $_->{'ent'})) } $_[0]->_children; }
9019
9020 sub trimmed_text
9021 { my $elt= shift;
9022 my $text= $elt->text( @_);
9023 $text=~ s{\s+}{ }sg;
9024 $text=~ s{^\s*}{};
9025 $text=~ s{\s*$}{};
9026 return $text;
9027 }
9028
9029 sub trim
9030 { my( $elt)= @_;
9031 my $pcdata= $elt->first_descendant( $TEXT);
9032 (my $pcdata_text= $pcdata->text)=~ s{^\s+}{}s;
9033 $pcdata->set_text( $pcdata_text);
9034 $pcdata= $elt->last_descendant( $TEXT);
9035 ($pcdata_text= $pcdata->text)=~ s{\s+$}{};
9036 $pcdata->set_text( $pcdata_text);
9037 foreach my $pcdata ($elt->descendants( $TEXT))
9038 { ($pcdata_text= $pcdata->text)=~ s{\s+}{ }g;
9039 $pcdata->set_text( $pcdata_text);
9040 }
9041 return $elt;
9042 }
9043
9044
9045 # remove cdata sections (turns them into regular pcdata) in an element
9046 sub remove_cdata
9047 { my $elt= shift;
9048 foreach my $cdata ($elt->descendants_or_self( $CDATA))
9049 { if( $keep_encoding)
9050 { my $data= $cdata->{cdata};
9051 $data=~ s{([&<"'])}{$XML::Twig::base_ent{$1}}g;
9052 $cdata->{pcdata}= (delete $cdata->{empty} || 1) && $data;
9053 }
9054 else
9055 { $cdata->{pcdata}= (delete $cdata->{empty} || 1) && $cdata->{cdata}; }
9056 $cdata->{gi}=$XML::Twig::gi2index{$PCDATA} or $cdata->set_gi( $PCDATA);
9057 undef $cdata->{cdata};
9058 }
9059 }
9060
9061sub _is_private { return _is_private_name( $_[0]->gi); }
9062sub _is_private_name { return $_[0]=~ m{^#(?!default:)}; }
9063
9064
906513.76ms116µs} # end of block containing package globals ($pretty_print, $quotes, keep_encoding...)
# spent 16µs making 1 call to XML::Twig::Elt::BEGIN@8119
9066
9067# merges consecutive #PCDATAs in am element
9068sub normalize
9069 { my( $elt)= @_;
9070 my @descendants= $elt->descendants( $PCDATA);
9071 while( my $desc= shift @descendants)
9072 { if( ! length $desc->{pcdata}) { $desc->delete; next; }
9073 while( @descendants && $desc->{next_sibling} && $desc->{next_sibling}== $descendants[0])
9074 { my $to_merge= shift @descendants;
9075 $desc->merge_text( $to_merge);
9076 }
9077 }
9078 return $elt;
9079 }
9080
9081# SAX export methods
9082sub toSAX1
9083 { _toSAX(@_, \&_start_tag_data_SAX1, \&_end_tag_data_SAX1); }
9084
9085sub toSAX2
9086 { _toSAX(@_, \&_start_tag_data_SAX2, \&_end_tag_data_SAX2); }
9087
9088sub _toSAX
9089 { my( $elt, $handler, $start_tag_data, $end_tag_data)= @_;
9090 if( $elt->{gi} >= $XML::Twig::SPECIAL_GI)
9091 { my $data= $start_tag_data->( $elt);
9092 _start_prefix_mapping( $elt, $handler, $data);
9093 if( $data && (my $start_element = $handler->can( 'start_element')))
9094 { unless( $elt->{'flushed'}) { $start_element->( $handler, $data); } }
9095
9096 foreach my $child ($elt->_children)
9097 { $child->_toSAX( $handler, $start_tag_data, $end_tag_data); }
9098
9099 if( (my $data= $end_tag_data->( $elt)) && (my $end_element = $handler->can( 'end_element')) )
9100 { $end_element->( $handler, $data); }
9101 _end_prefix_mapping( $elt, $handler);
9102 }
9103 else # text or special element
9104 { if( (exists $elt->{'pcdata'}) && (my $characters= $handler->can( 'characters')))
9105 { $characters->( $handler, { Data => $elt->{pcdata} }); }
9106 elsif( (exists $elt->{'cdata'}))
9107 { if( my $start_cdata= $handler->can( 'start_cdata'))
9108 { $start_cdata->( $handler); }
9109 if( my $characters= $handler->can( 'characters'))
9110 { $characters->( $handler, {Data => $elt->{cdata} }); }
9111 if( my $end_cdata= $handler->can( 'end_cdata'))
9112 { $end_cdata->( $handler); }
9113 }
9114 elsif( ((exists $elt->{'target'})) && (my $pi= $handler->can( 'processing_instruction')))
9115 { $pi->( $handler, { Target =>$elt->{target}, Data => $elt->{data} }); }
9116 elsif( ((exists $elt->{'comment'})) && (my $comment= $handler->can( 'comment')))
9117 { $comment->( $handler, { Data => $elt->{comment} }); }
9118 elsif( ((exists $elt->{'ent'})))
9119 {
9120 if( my $se= $handler->can( 'skipped_entity'))
9121 { $se->( $handler, { Name => $elt->ent_name }); }
9122 elsif( my $characters= $handler->can( 'characters'))
9123 { if( defined $elt->ent_string)
9124 { $characters->( $handler, {Data => $elt->ent_string}); }
9125 else
9126 { $characters->( $handler, {Data => $elt->ent_name}); }
9127 }
9128 }
9129
9130 }
9131 }
9132
9133sub _start_tag_data_SAX1
9134 { my( $elt)= @_;
9135 my $name= $XML::Twig::index2gi[$elt->{'gi'}];
9136 return if( ( (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 1) eq '#') && (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 9) ne '#default:') ));
9137 my $attributes={};
9138 my $atts= $elt->{att};
9139 while( my( $att, $value)= each %$atts)
9140 { $attributes->{$att}= $value unless( ( $att=~ m{^#(?!default:)} )); }
9141 my $data= { Name => $name, Attributes => $attributes};
9142 return $data;
9143 }
9144
9145sub _end_tag_data_SAX1
9146 { my( $elt)= @_;
9147 return if( ( (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 1) eq '#') && (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 9) ne '#default:') ));
9148 return { Name => $XML::Twig::index2gi[$elt->{'gi'}] };
9149 }
9150
9151sub _start_tag_data_SAX2
9152 { my( $elt)= @_;
9153 my $data={};
9154
9155 my $name= $XML::Twig::index2gi[$elt->{'gi'}];
9156 return if( ( (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 1) eq '#') && (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 9) ne '#default:') ));
9157 $data->{Name} = $name;
9158 $data->{Prefix} = $elt->ns_prefix;
9159 $data->{LocalName} = $elt->local_name;
9160 $data->{NamespaceURI} = $elt->namespace;
9161
9162 # save a copy of the data so we can re-use it for the end tag
9163 my %sax2_data= %$data;
9164 $elt->{twig_elt_SAX2_data}= \%sax2_data;
9165
9166 # add the attributes
9167 $data->{Attributes}= $elt->_atts_to_SAX2;
9168
9169 return $data;
9170 }
9171
9172sub _atts_to_SAX2
9173 { my $elt= shift;
9174 my $SAX2_atts= {};
9175 foreach my $att (keys %{$elt->{att}})
9176 {
9177 next if( ( $att=~ m{^#(?!default:)} ));
9178 my $SAX2_att={};
9179 $SAX2_att->{Name} = $att;
9180 $SAX2_att->{Prefix} = _ns_prefix( $att);
9181 $SAX2_att->{LocalName} = _local_name( $att);
9182 $SAX2_att->{NamespaceURI} = $elt->namespace( $SAX2_att->{Prefix});
9183 $SAX2_att->{Value} = $elt->{'att'}->{$att};
9184 my $SAX2_att_name= "{$SAX2_att->{NamespaceURI}}$SAX2_att->{LocalName}";
9185
9186 $SAX2_atts->{$SAX2_att_name}= $SAX2_att;
9187 }
9188 return $SAX2_atts;
9189 }
9190
9191sub _start_prefix_mapping
9192 { my( $elt, $handler, $data)= @_;
9193 if( my $start_prefix_mapping= $handler->can( 'start_prefix_mapping')
9194 and my @new_prefix_mappings= grep { /^\{[^}]*\}xmlns/ || /^\{$XMLNS_URI\}/ } keys %{$data->{Attributes}}
9195 )
9196 { foreach my $prefix (@new_prefix_mappings)
9197 { my $prefix_string= $data->{Attributes}->{$prefix}->{LocalName};
9198 if( $prefix_string eq 'xmlns') { $prefix_string=''; }
9199 my $prefix_data=
9200 { Prefix => $prefix_string,
9201 NamespaceURI => $data->{Attributes}->{$prefix}->{Value}
9202 };
9203 $start_prefix_mapping->( $handler, $prefix_data);
9204 $elt->{twig_end_prefix_mapping} ||= [];
9205 push @{$elt->{twig_end_prefix_mapping}}, $prefix_string;
9206 }
9207 }
9208 }
9209
9210sub _end_prefix_mapping
9211 { my( $elt, $handler)= @_;
9212 if( my $end_prefix_mapping= $handler->can( 'end_prefix_mapping'))
9213 { foreach my $prefix (@{$elt->{twig_end_prefix_mapping}})
9214 { $end_prefix_mapping->( $handler, { Prefix => $prefix} ); }
9215 }
9216 }
9217
9218sub _end_tag_data_SAX2
9219 { my( $elt)= @_;
9220 return if( ( (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 1) eq '#') && (substr( $XML::Twig::index2gi[$elt->{'gi'}], 0, 9) ne '#default:') ));
9221 return $elt->{twig_elt_SAX2_data};
9222 }
9223
9224sub contains_text
9225 { my $elt= shift;
9226 my $child= $elt->{first_child};
9227 while ($child)
9228 { return 1 if( $child->is_text || (exists $child->{'ent'}));
9229 $child= $child->{next_sibling};
9230 }
9231 return 0;
9232 }
9233
9234# creates a single pcdata element containing the text as child of the element
9235# options:
9236# - force_pcdata: when set to a true value forces the text to be in a #PCDATA
9237# even if the original element was a #CDATA
9238sub set_text
9239 { my( $elt, $string, %option)= @_;
9240
9241 if( $XML::Twig::index2gi[$elt->{'gi'}] eq $PCDATA)
9242 { return $elt->{pcdata}= (delete $elt->{empty} || 1) && $string; }
9243 elsif( $XML::Twig::index2gi[$elt->{'gi'}] eq $CDATA)
9244 { if( $option{force_pcdata})
9245 { $elt->{gi}=$XML::Twig::gi2index{$PCDATA} or $elt->set_gi( $PCDATA);
9246 $elt->{cdata}= '';
9247 return $elt->{pcdata}= (delete $elt->{empty} || 1) && $string;
9248 }
9249 else
9250 { $elt->{cdata}= $string;
9251 return $string;
9252 }
9253 }
9254 elsif( $elt->contains_a_single( $PCDATA) )
9255 { # optimized so we have a slight chance of not losing embedded comments and pi's
9256 $elt->{first_child}->set_pcdata( $string);
9257 return $elt;
9258 }
9259
9260 foreach my $child (@{[$elt->_children]})
9261 { $child->delete; }
9262
9263 my $pcdata= $elt->_new_pcdata( $string);
9264 $pcdata->paste( $elt);
9265
9266 delete $elt->{empty};
9267
9268 return $elt;
9269 }
9270
9271# set the content of an element from a list of strings and elements
9272sub set_content
9273 { my $elt= shift;
9274
9275 return $elt unless defined $_[0];
9276
9277 # attributes can be given as a hash (passed by ref)
9278 if( ref $_[0] eq 'HASH')
9279 { my $atts= shift;
9280 $elt->del_atts; # usually useless but better safe than sorry
9281 $elt->set_atts( $atts);
9282 return $elt unless defined $_[0];
9283 }
9284
9285 # check next argument for #EMPTY
9286 if( !(ref $_[0]) && ($_[0] eq $EMPTY) )
9287 { $elt->{empty}= 1; return $elt; }
9288
9289 # case where we really want to do a set_text, the element is '#PCDATA'
9290 # or contains a single PCDATA and we only want to add text in it
9291 if( ($XML::Twig::index2gi[$elt->{'gi'}] eq $PCDATA || $elt->contains_a_single( $PCDATA))
9292 && (@_ == 1) && !( ref $_[0]))
9293 { $elt->set_text( $_[0]);
9294 return $elt;
9295 }
9296 elsif( ($XML::Twig::index2gi[$elt->{'gi'}] eq $CDATA) && (@_ == 1) && !( ref $_[0]))
9297 { $elt->{cdata}= $_[0];
9298 return $elt;
9299 }
9300
9301 # delete the children
9302 foreach my $child (@{[$elt->_children]})
9303 { $child->delete; }
9304
9305 if( @_) { delete $elt->{empty}; }
9306
9307 foreach my $child (@_)
9308 { if( ref( $child) && isa( $child, 'XML::Twig::Elt'))
9309 { # argument is an element
9310 $child->paste( 'last_child', $elt);
9311 }
9312 else
9313 { # argument is a string
9314 if( (my $pcdata= $elt->{last_child}) && $elt->{last_child}->is_pcdata)
9315 { # previous child is also pcdata: just concatenate
9316 $pcdata->{pcdata}= (delete $pcdata->{empty} || 1) && $pcdata->{pcdata} . $child
9317 }
9318 else
9319 { # previous child is not a string: create a new pcdata element
9320 $pcdata= $elt->_new_pcdata( $child);
9321 $pcdata->paste( 'last_child', $elt);
9322 }
9323 }
9324 }
9325
9326
9327 return $elt;
9328 }
9329
9330# inserts an element (whose gi is given) as child of the element
9331# all children of the element are now children of the new element
9332# returns the new element
9333sub insert
9334 { my ($elt, @args)= @_;
9335 # first cut the children
9336 my @children= do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; };
9337 foreach my $child (@children)
9338 { $child->cut; }
9339 # insert elements
9340 while( my $gi= shift @args)
9341 { my $new_elt= $elt->new( $gi);
9342 # add attributes if needed
9343 if( defined( $args[0]) && ( isa( $args[0], 'HASH')) )
9344 { $new_elt->set_atts( shift @args); }
9345 # paste the element
9346 $new_elt->paste( $elt);
9347 delete $elt->{empty};
9348 $elt= $new_elt;
9349 }
9350 # paste back the children
9351 foreach my $child (@children)
9352 { $child->paste( 'last_child', $elt); }
9353 return $elt;
9354 }
9355
9356# insert a new element
9357# $elt->insert_new_element( $opt_position, $gi, $opt_atts_hash, @opt_content);
9358# the element is created with the same syntax as new
9359# position is the same as in paste, first_child by default
9360sub insert_new_elt
9361 { my $elt= shift;
9362 my $position= $_[0];
9363 if( ($position eq 'before') || ($position eq 'after')
9364 || ($position eq 'first_child') || ($position eq 'last_child'))
9365 { shift; }
9366 else
9367 { $position= 'first_child'; }
9368
9369 my $new_elt= $elt->new( @_);
9370 $new_elt->paste( $position, $elt);
9371
9372 #if( defined $new_elt->{'att'}->{$ID}) { $new_elt->set_id( $new_elt->{'att'}->{$ID}); }
9373
9374 return $new_elt;
9375 }
9376
9377# wraps an element in elements which gi's are given as arguments
9378# $elt->wrap_in( 'td', 'tr', 'table') wraps the element as a single
9379# cell in a table for example
9380# returns the new element
9381sub wrap_in
9382 { my $elt= shift;
9383 while( my $gi = shift @_)
9384 { my $new_elt = $elt->new( $gi);
9385 if( $elt->{twig_current})
9386 { my $t= $elt->twig;
9387 $t->{twig_current}= $new_elt;
9388 delete $elt->{'twig_current'};
9389 $new_elt->{'twig_current'}=1;
9390 }
9391
9392 if( my $parent= $elt->{parent})
9393 { $new_elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $new_elt->{parent});} ;
9394 if( $parent->{first_child} == $elt) { $parent->{first_child}= $new_elt; }
9395 if( $parent->{last_child} == $elt) { delete $parent->{empty}; $parent->{last_child}=$new_elt; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ; }
9396 }
9397 else
9398 { # wrapping the root
9399 my $twig= $elt->twig;
9400 if( $twig && $twig->root && ($twig->root eq $elt) )
9401 { $twig->set_root( $new_elt);
9402 }
9403 }
9404
9405 if( my $prev_sibling= $elt->{prev_sibling})
9406 { $new_elt->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $new_elt->{prev_sibling});} ;
9407 $prev_sibling->{next_sibling}= $new_elt;
9408 }
9409
9410 if( my $next_sibling= $elt->{next_sibling})
9411 { $new_elt->{next_sibling}= $next_sibling;
9412 $next_sibling->{prev_sibling}=$new_elt; if( $XML::Twig::weakrefs) { weaken( $next_sibling->{prev_sibling});} ;
9413 }
9414 $new_elt->{first_child}= $elt;
9415 delete $new_elt->{empty}; $new_elt->{last_child}=$elt; if( $XML::Twig::weakrefs) { weaken( $new_elt->{last_child});} ;
9416
9417 $elt->{parent}=$new_elt; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
9418 $elt->{prev_sibling}=undef; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
9419 $elt->{next_sibling}= undef;
9420
9421 # add the attributes if the next argument is a hash ref
9422 if( defined( $_[0]) && (isa( $_[0], 'HASH')) )
9423 { $new_elt->set_atts( shift @_); }
9424
9425 $elt= $new_elt;
9426 }
9427
9428 return $elt;
9429 }
9430
9431sub replace
9432 { my( $elt, $ref)= @_;
9433
9434 if( $elt->{parent}) { $elt->cut; }
9435
9436 if( my $parent= $ref->{parent})
9437 { $elt->{parent}=$parent; if( $XML::Twig::weakrefs) { weaken( $elt->{parent});} ;
9438 if( $parent->{first_child} == $ref) { $parent->{first_child}= $elt; }
9439 if( $parent->{last_child} == $ref) { delete $parent->{empty}; $parent->{last_child}=$elt; if( $XML::Twig::weakrefs) { weaken( $parent->{last_child});} ; }
9440 }
9441 elsif( $ref->twig && $ref == $ref->twig->root)
9442 { $ref->twig->set_root( $elt); }
9443
9444 if( my $prev_sibling= $ref->{prev_sibling})
9445 { $elt->{prev_sibling}=$prev_sibling; if( $XML::Twig::weakrefs) { weaken( $elt->{prev_sibling});} ;
9446 $prev_sibling->{next_sibling}= $elt;
9447 }
9448 if( my $next_sibling= $ref->{next_sibling})
9449 { $elt->{next_sibling}= $next_sibling;
9450 $next_sibling->{prev_sibling}=$elt; if( $XML::Twig::weakrefs) { weaken( $next_sibling->{prev_sibling});} ;
9451 }
9452
9453 $ref->{parent}=undef; if( $XML::Twig::weakrefs) { weaken( $ref->{parent});} ;
9454 $ref->{prev_sibling}=undef; if( $XML::Twig::weakrefs) { weaken( $ref->{prev_sibling});} ;
9455 $ref->{next_sibling}= undef;
9456 return $ref;
9457 }
9458
9459sub replace_with
9460 { my $ref= shift;
9461 my $elt= shift;
9462 $elt->replace( $ref);
9463 foreach my $new_elt (reverse @_)
9464 { $new_elt->paste( after => $elt); }
9465 return $elt;
9466 }
9467
9468
9469# move an element, same syntax as paste, except the element is first cut
9470sub move
9471 { my $elt= shift;
9472 $elt->cut;
9473 $elt->paste( @_);
9474 return $elt;
9475 }
9476
9477
9478# adds a prefix to an element, creating a pcdata child if needed
9479sub prefix
9480 { my ($elt, $prefix, $option)= @_;
9481 my $asis= ($option && ($option eq 'asis')) ? 1 : 0;
9482 if( (exists $elt->{'pcdata'})
9483 && (($asis && $elt->{asis}) || (!$asis && ! $elt->{asis}))
9484 )
9485 { $elt->{pcdata}= (delete $elt->{empty} || 1) && $prefix . $elt->{pcdata}; }
9486 elsif( $elt->{first_child} && $elt->{first_child}->is_pcdata
9487 && ( ($asis && $elt->{first_child}->{asis})
9488 || (!$asis && ! $elt->{first_child}->{asis}))
9489 )
9490 {
9491 $elt->{first_child}->set_pcdata( $prefix . $elt->{first_child}->pcdata);
9492 }
9493 else
9494 { my $new_elt= $elt->_new_pcdata( $prefix);
9495 my $pos= (exists $elt->{'pcdata'}) ? 'before' : 'first_child';
9496 $new_elt->paste( $pos => $elt);
9497 if( $asis) { $new_elt->set_asis; }
9498 }
9499 return $elt;
9500 }
9501
9502# adds a suffix to an element, creating a pcdata child if needed
9503sub suffix
9504 { my ($elt, $suffix, $option)= @_;
9505 my $asis= ($option && ($option eq 'asis')) ? 1 : 0;
9506 if( (exists $elt->{'pcdata'})
9507 && (($asis && $elt->{asis}) || (!$asis && ! $elt->{asis}))
9508 )
9509 { $elt->{pcdata}= (delete $elt->{empty} || 1) && $elt->{pcdata} . $suffix; }
9510 elsif( $elt->{last_child} && $elt->{last_child}->is_pcdata
9511 && ( ($asis && $elt->{last_child}->{asis})
9512 || (!$asis && ! $elt->{last_child}->{asis}))
9513 )
9514 { $elt->{last_child}->set_pcdata( $elt->{last_child}->pcdata . $suffix); }
9515 else
9516 { my $new_elt= $elt->_new_pcdata( $suffix);
9517 my $pos= (exists $elt->{'pcdata'}) ? 'after' : 'last_child';
9518 $new_elt->paste( $pos => $elt);
9519 if( $asis) { $new_elt->set_asis; }
9520 }
9521 return $elt;
9522 }
9523
9524# create a path to an element ('/root/.../gi)
9525sub path
9526 { my $elt= shift;
9527 my @context= ( $elt, $elt->ancestors);
9528 return "/" . join( "/", reverse map {$_->gi} @context);
9529 }
9530
9531sub xpath
9532 { my $elt= shift;
9533 my $xpath;
9534 foreach my $ancestor (reverse $elt->ancestors_or_self)
9535 { my $gi= $XML::Twig::index2gi[$ancestor->{'gi'}];
9536 $xpath.= "/$gi";
9537 my $index= $ancestor->prev_siblings( $gi) + 1;
9538 unless( ($index == 1) && !$ancestor->next_sibling( $gi))
9539 { $xpath.= "[$index]"; }
9540 }
9541 return $xpath;
9542 }
9543
9544# methods used mainly by wrap_children
9545
9546# return a string with the
9547# for an element <foo><elt att="val">...</elt><elt2/><elt>...</elt></foo>
9548# returns '<elt att="val"><elt2><elt>'
9549sub _stringify_struct
9550 { my( $elt, %opt)= @_;
9551 my $string='';
9552 my $pretty_print= set_pretty_print( 'none');
9553 foreach my $child ($elt->_children)
9554 { $child->add_id; $string .= $child->start_tag( { escape_gt => 1 }) ||''; }
9555 set_pretty_print( $pretty_print);
9556 return $string;
9557 }
9558
9559# wrap a series of elements in a new one
9560sub _wrap_range
9561 { my $elt= shift;
9562 my $gi= shift;
9563 my $atts= isa( $_[0], 'HASH') ? shift : undef;
9564 my $range= shift; # the string with the tags to wrap
9565
9566 my $t= $elt->twig;
9567
9568 # get the tags to wrap
9569 my @to_wrap;
9570 while( $range=~ m{<\w+\s+[^>]*id=("[^"]*"|'[^']*')[^>]*>}g)
9571 { push @to_wrap, $t->elt_id( substr( $1, 1, -1)); }
9572
9573 return '' unless @to_wrap;
9574
9575 my $to_wrap= shift @to_wrap;
9576 my %atts= %$atts;
9577 my $new_elt= $to_wrap->wrap_in( $gi, \%atts);
9578 $_->move( last_child => $new_elt) foreach (@to_wrap);
9579
9580 return '';
9581 }
9582
9583# wrap children matching a regexp in a new element
9584sub wrap_children
9585 { my( $elt, $regexp, $gi, $atts)= @_;
9586
9587 $atts ||={};
9588
9589 my $elt_as_string= $elt->_stringify_struct; # stringify the elt structure
9590 $regexp=~ s{(<[^>]*>)}{_match_expr( $1)}eg; # in the regexp, replace gi's by the proper regexp
9591 $elt_as_string=~ s{($regexp)}{$elt->_wrap_range( $gi, $atts, $1)}eg; # then do the actual replace
9592
9593 return $elt;
9594 }
9595
9596sub _match_expr
9597 { my $tag= shift;
9598 my( $gi, %atts)= XML::Twig::_parse_start_tag( $tag);
9599 return _match_tag( $gi, %atts);
9600 }
9601
9602
9603sub _match_tag
9604 { my( $elt, %atts)= @_;
9605 my $string= "<$elt\\b";
9606 foreach my $key (sort keys %atts)
9607 { my $val= qq{\Q$atts{$key}\E};
9608 $string.= qq{[^>]*$key=(?:"$val"|'$val')};
9609 }
9610 $string.= qq{[^>]*>};
9611 return "(?:$string)";
9612 }
9613
9614sub field_to_att
9615 { my( $elt, $cond, $att)= @_;
9616 $att ||= $cond;
9617 my $child= $elt->first_child( $cond) or return undef;
9618 $elt->set_att( $att => $child->text);
9619 $child->cut;
9620 return $elt;
9621 }
9622
9623sub att_to_field
9624 { my( $elt, $att, $tag)= @_;
9625 $tag ||= $att;
9626 my $child= $elt->insert_new_elt( first_child => $tag, $elt->{'att'}->{$att});
9627 $elt->del_att( $att);
9628 return $elt;
9629 }
9630
9631# sort children methods
9632
9633sub sort_children_on_field
9634 { my $elt = shift;
9635 my $field = shift;
9636 my $get_key= sub { return $_[0]->field( $field) };
9637 return $elt->sort_children( $get_key, @_);
9638 }
9639
9640sub sort_children_on_att
9641 { my $elt = shift;
9642 my $att = shift;
9643 my $get_key= sub { return $_[0]->{'att'}->{$att} };
9644 return $elt->sort_children( $get_key, @_);
9645 }
9646
9647sub sort_children_on_value
9648 { my $elt = shift;
9649 #my $get_key= eval qq{ sub { $NO_WARNINGS; return \$_[0]->text } };
9650 my $get_key= \&text;
9651 return $elt->sort_children( $get_key, @_);
9652 }
9653
9654sub sort_children
9655 { my( $elt, $get_key, %opt)=@_;
9656 $opt{order} ||= 'normal';
9657 $opt{type} ||= 'alpha';
9658 my( $par_a, $par_b)= ($opt{order} eq 'reverse') ? qw( b a) : qw ( a b) ;
9659 my $op= ($opt{type} eq 'numeric') ? '<=>' : 'cmp' ;
9660 my @children= $elt->cut_children;
9661 if( $opt{type} eq 'numeric')
9662 { @children= map { $_->[1] }
9663 sort { $a->[0] <=> $b->[0] }
9664 map { [ $get_key->( $_), $_] } @children;
9665 }
9666 elsif( $opt{type} eq 'alpha')
9667 { @children= map { $_->[1] }
9668 sort { $a->[0] cmp $b->[0] }
9669 map { [ $get_key->( $_), $_] } @children;
9670 }
9671 else
9672 { croak "wrong sort type '$opt{type}', should be either 'alpha' or 'numeric'"; }
9673
9674 @children= reverse @children if( $opt{order} eq 'reverse');
9675 $elt->set_content( @children);
9676 }
9677
9678
9679# comparison methods
9680
9681sub before
9682 { my( $a, $b)=@_;
9683 if( $a->cmp( $b) == -1) { return 1; } else { return 0; }
9684 }
9685
9686sub after
9687 { my( $a, $b)=@_;
9688 if( $a->cmp( $b) == 1) { return 1; } else { return 0; }
9689 }
9690
9691sub lt
9692 { my( $a, $b)=@_;
9693 return 1 if( $a->cmp( $b) == -1);
9694 return 0;
9695 }
9696
9697sub le
9698 { my( $a, $b)=@_;
9699 return 1 unless( $a->cmp( $b) == 1);
9700 return 0;
9701 }
9702
9703sub gt
9704 { my( $a, $b)=@_;
9705 return 1 if( $a->cmp( $b) == 1);
9706 return 0;
9707 }
9708
9709sub ge
9710 { my( $a, $b)=@_;
9711 return 1 unless( $a->cmp( $b) == -1);
9712 return 0;
9713 }
9714
9715
9716sub cmp
97177710µs
# spent 1.42ms (479µs+937µs) within XML::Twig::Elt::cmp which was called 77 times, avg 18µs/call: # 77 times (479µs+937µs) by CORE::sort at line 3696, avg 18µs/call
{ my( $a, $b)=@_;
9718
9719 # easy cases
97207710µs return 0 if( $a == $b);
97217728µs77161µs return 1 if( $a->in($b)); # a in b => a starts after b
# spent 161µs making 77 calls to XML::Twig::Elt::in, avg 2µs/call
97227725µs77127µs return -1 if( $b->in($a)); # b in a => a starts before b
# spent 127µs making 77 calls to XML::Twig::Elt::in, avg 2µs/call
9723
9724 # ancestors does not include the element itself
97257734µs77325µs my @a_pile= ($a, $a->ancestors);
# spent 325µs making 77 calls to XML::Twig::Elt::ancestors, avg 4µs/call
97267729µs77324µs my @b_pile= ($b, $b->ancestors);
# spent 324µs making 77 calls to XML::Twig::Elt::ancestors, avg 4µs/call
9727
9728 # the 2 elements are not in the same twig
97297712µs return undef unless( $a_pile[-1] == $b_pile[-1]);
9730
9731 # find the first non common ancestors (they are siblings)
9732778µs my $a_anc= pop @a_pile;
9733776µs my $b_anc= pop @b_pile;
9734
97357716µs while( $a_anc == $b_anc)
973617815µs { $a_anc= pop @a_pile;
973717834µs $b_anc= pop @b_pile;
9738 }
9739
9740 # from there move left and right and figure out the order
97417713µs my( $a_prev, $a_next, $b_prev, $b_next)= ($a_anc, $a_anc, $b_anc, $b_anc);
9742774µs while()
97439725µs { $a_prev= $a_prev->{prev_sibling} || return( -1);
97448333µs return 1 if( $a_prev == $b_next);
9745576µs $a_next= $a_next->{next_sibling} || return( 1);
97465720µs return -1 if( $a_next == $b_prev);
97474219µs $b_prev= $b_prev->{prev_sibling} || return( 1);
97483811µs return -1 if( $b_prev == $a_next);
9749313µs $b_next= $b_next->{next_sibling} || return( -1);
97503114µs return 1 if( $b_next == $a_prev);
9751 }
9752 }
9753
9754sub _dump
9755 { my( $elt, $option)= @_;
9756
9757 my $atts = defined $option->{atts} ? $option->{atts} : 1;
9758 my $extra = defined $option->{extra} ? $option->{extra} : 0;
9759 my $short_text = defined $option->{short_text} ? $option->{short_text} : 40;
9760
9761 my $sp= '| ';
9762 my $indent= $sp x $elt->level;
9763 my $indent_sp= ' ' x $elt->level;
9764
9765 my $dump='';
9766 if( $elt->is_elt)
9767 {
9768 $dump .= $indent . '|-' . $XML::Twig::index2gi[$elt->{'gi'}];
9769
9770 if( $atts && (my @atts= $elt->att_names) )
9771 { $dump .= ' ' . join( ' ', map { qq{$_="} . $elt->{'att'}->{$_} . qq{"} } @atts); }
9772
9773 $dump .= "\n";
9774 if( $extra) { $dump .= $elt->_dump_extra_data( $indent, $indent_sp, $short_text); }
9775 $dump .= join( "", map { $_->_dump( $option) } do { my $elt= $elt; my @children=(); my $child= $elt->{first_child}; while( $child) { push @children, $child; $child= $child->{next_sibling}; } @children; });
9776 }
9777 else
9778 {
9779 if( (exists $elt->{'pcdata'}))
9780 { $dump .= "$indent|-PCDATA: '" . _short_text( $elt->{pcdata}, $short_text) . "'\n" }
9781 elsif( (exists $elt->{'ent'}))
9782 { $dump .= "$indent|-ENTITY: '" . _short_text( $elt->{ent}, $short_text) . "'\n" }
9783 elsif( (exists $elt->{'cdata'}))
9784 { $dump .= "$indent|-CDATA: '" . _short_text( $elt->{cdata}, $short_text) . "'\n" }
9785 elsif( (exists $elt->{'comment'}))
9786 { $dump .= "$indent|-COMMENT: '" . _short_text( $elt->comment_string, $short_text) . "'\n" }
9787 elsif( (exists $elt->{'target'}))
9788 { $dump .= "$indent|-PI: '" . $elt->{target} . "' - '" . _short_text( $elt->{data}, $short_text) . "'\n" }
9789 if( $extra) { $dump .= $elt->_dump_extra_data( $indent, $indent_sp, $short_text); }
9790 }
9791 return $dump;
9792 }
9793
9794sub _dump_extra_data
9795 { my( $elt, $indent, $indent_sp, $short_text)= @_;
9796 my $dump='';
9797 if( $elt->extra_data)
9798 { my $extra_data = $indent . "|-- (cpi before) '" . _short_text( $elt->extra_data, $short_text) . "'";
9799 $extra_data=~ s{\n}{$indent_sp}g;
9800 $dump .= $extra_data . "\n";
9801 }
9802 if( $elt->{extra_data_in_pcdata})
9803 { foreach my $data ( @{$elt->{extra_data_in_pcdata}})
9804 { my $extra_data = $indent . "|-- (cpi offset $data->{offset}) '" . _short_text( $data->{text}, $short_text) . "'";
9805 $extra_data=~ s{\n}{$indent_sp}g;
9806 $dump .= $extra_data . "\n";
9807 }
9808 }
9809 if( $elt->{extra_data_before_end_tag})
9810 { my $extra_data = $indent . "|-- (cpi end) '" . _short_text( $elt->{extra_data_before_end_tag}, $short_text) . "'";
9811 $extra_data=~ s{\n}{$indent_sp}g;
9812 $dump .= $extra_data . "\n";
9813 }
9814 return $dump;
9815 }
9816
9817
9818sub _short_text
9819 { my( $string, $length)= @_;
9820 if( !$length || (length( $string) < $length) ) { return $string; }
9821 my $l1= (length( $string) -5) /2;
9822 my $l2= length( $string) - ($l1 + 5);
9823 return substr( $string, 0, $l1) . ' ... ' . substr( $string, -$l2);
9824 }
9825
9826
9827712µs713µs
# spent 26µs (13+13) within XML::Twig::Elt::_and which was called 7 times, avg 4µs/call: # 7 times (13µs+13µs) by XML::Twig::Elt::_gi_test at line 5917, avg 4µs/call
sub _and { return _join_defined( ' && ', @_); }
# spent 13µs making 7 calls to XML::Twig::Elt::_join_defined, avg 2µs/call
9828715µs
# spent 13µs within XML::Twig::Elt::_join_defined which was called 7 times, avg 2µs/call: # 7 times (13µs+0s) by XML::Twig::Elt::_and at line 9827, avg 2µs/call
sub _join_defined { return join( shift(), grep { $_ } @_); }
9829
9830161µs1;
9831__END__
 
# spent 600ns within Spreadsheet::ParseXLSX::__ANON__ which was called: # once (600ns+0s) by Spreadsheet::ParseXLSX::BEGIN@14 at line 14 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub Spreadsheet::ParseXLSX::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Scalar-Util-pm-6-line.html0000644000175000017500000006545214576335353022666 0ustar michamicha Profile of Scalar/Util.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:22 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Scalar/Util.pm
StatementsExecuted 12 statements in 304µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1738074153355ms355msScalar::Util::::weakenScalar::Util::weaken (xsub)
11114µs15µsScalar::Util::::BEGIN@9Scalar::Util::BEGIN@9
6425µs5µsScalar::Util::::reftypeScalar::Util::reftype (xsub)
1115µs19µsScalar::Util::::BEGIN@10Scalar::Util::BEGIN@10
2211µs1µsScalar::Util::::openhandleScalar::Util::openhandle (xsub)
0000s0sScalar::Util::::export_failScalar::Util::export_fail
0000s0sScalar::Util::::set_prototypeScalar::Util::set_prototype
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# Copyright (c) 1997-2007 Graham Barr <gbarr@pobox.com>. All rights reserved.
2# This program is free software; you can redistribute it and/or
3# modify it under the same terms as Perl itself.
4#
5# Maintained since 2013 by Paul Evans <leonerd@leonerd.org.uk>
6
7package Scalar::Util;
8
9224µs217µs
# spent 15µs (14+2) within Scalar::Util::BEGIN@9 which was called: # once (14µs+2µs) by Test::Builder::BEGIN@15 at line 9
use strict;
# spent 15µs making 1 call to Scalar::Util::BEGIN@9 # spent 2µs making 1 call to strict::import
102132µs233µs
# spent 19µs (5+14) within Scalar::Util::BEGIN@10 which was called: # once (5µs+14µs) by Test::Builder::BEGIN@15 at line 10
use warnings;
# spent 19µs making 1 call to Scalar::Util::BEGIN@10 # spent 14µs making 1 call to warnings::import
11165µsrequire Exporter;
12
1316µsour @ISA = qw(Exporter);
1411µsour @EXPORT_OK = qw(
15 blessed refaddr reftype weaken unweaken isweak
16
17 dualvar isdual isvstring looks_like_number openhandle readonly set_prototype
18 tainted
19);
201200nsour $VERSION = "1.63";
2111µs$VERSION =~ tr/_//d;
22
23162µsrequire List::Util; # List::Util loads the XS
2419µs14µsList::Util->VERSION( $VERSION ); # Ensure we got the right XS version (RT#100863)
# spent 4µs making 1 call to UNIVERSAL::VERSION
25
26# populating @EXPORT_FAIL is done in the XS code
27sub export_fail {
28 if (grep { /^isvstring$/ } @_ ) {
29 require Carp;
30 Carp::croak("Vstrings are not implemented in this version of perl");
31 }
32
33 @_;
34}
35
36# set_prototype has been moved to Sub::Util with a different interface
37sub set_prototype(&$)
38{
39 my ( $code, $proto ) = @_;
40 return Sub::Util::set_prototype( $proto, $code );
41}
42
4314µs1;
44
45__END__
 
# spent 1µs within Scalar::Util::openhandle which was called 2 times, avg 700ns/call: # once (1µs+0s) by Spreadsheet::ParseXLSX::_check_signature at line 115 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (400ns+0s) by Spreadsheet::ParseXLSX::parse at line 83 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub Scalar::Util::openhandle; # xsub
# spent 5µs within Scalar::Util::reftype which was called 6 times, avg 917ns/call: # 3 times (2µs+0s) by Test2::Event::V2::facet_data at line 65 of Test2/Event/V2.pm, avg 600ns/call # once (3µs+0s) by Test2::API::Instance::add_post_load_callback at line 285 of Test2/API/Instance.pm # once (300ns+0s) by Test2::API::Instance::add_context_acquire_callback at line 249 of Test2/API/Instance.pm # once (200ns+0s) by Test2::API::Instance::add_exit_callback at line 330 of Test2/API/Instance.pm
sub Scalar::Util::reftype; # xsub
# spent 355ms within Scalar::Util::weaken which was called 1738074 times, avg 204ns/call: # 364369 times (122ms+0s) by XML::Twig::_twig_start at line 2085 of XML/Twig.pm, avg 334ns/call # 364362 times (76.1ms+0s) by XML::Twig::_twig_start at line 2101 of XML/Twig.pm, avg 209ns/call # 364362 times (63.4ms+0s) by XML::Twig::_twig_start at line 2099 of XML/Twig.pm, avg 174ns/call # 187529 times (23.1ms+0s) by XML::Twig::_twig_start at line 2096 of XML/Twig.pm, avg 123ns/call # 127292 times (22.7ms+0s) by XML::Twig::_insert_pcdata at line 2780 of XML/Twig.pm, avg 178ns/call # 127292 times (14.1ms+0s) by XML::Twig::_insert_pcdata at line 2781 of XML/Twig.pm, avg 111ns/call # 101421 times (23.0ms+0s) by XML::Twig::Elt::cut at line 7186 of XML/Twig.pm, avg 227ns/call # 33807 times (3.60ms+0s) by XML::Twig::Elt::cut at line 7204 of XML/Twig.pm, avg 106ns/call # 33807 times (3.58ms+0s) by XML::Twig::Elt::cut at line 7213 of XML/Twig.pm, avg 106ns/call # 33807 times (3.52ms+0s) by XML::Twig::Elt::cut at line 7214 of XML/Twig.pm, avg 104ns/call # 7 times (4µs+0s) by XML::Twig::new at line 751 of XML/Twig.pm, avg 629ns/call # 7 times (4µs+0s) by XML::Twig::_twig_init at line 1965 of XML/Twig.pm, avg 557ns/call # 7 times (2µs+0s) by XML::Twig::set_root at line 2290 of XML/Twig.pm, avg 329ns/call # 4 times (5µs+0s) by Test2::API::context at line 511 of Test2/API.pm, avg 1µs/call # once (700ns+0s) by Spreadsheet::ParseExcel::Worksheet::new at line 35 of Spreadsheet/ParseExcel/Worksheet.pm
sub Scalar::Util::weaken; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Digest-Perl-MD5-pm-121-line.html0000644000175000017500000023533614576335353023406 0ustar michamicha Profile of Digest/Perl/MD5.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Digest/Perl/MD5.pm
StatementsExecuted 725 statements in 2.65ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.39ms1.74msDigest::Perl::MD5::::gen_codeDigest::Perl::MD5::gen_code
1118µs10µsDigest::Perl::MD5::::BEGIN@2Digest::Perl::MD5::BEGIN@2
1113µs4µsDigest::Perl::MD5::::BEGIN@3Digest::Perl::MD5::BEGIN@3
1113µs11µsDigest::Perl::MD5::::BEGIN@4Digest::Perl::MD5::BEGIN@4
1113µs32µsDigest::Perl::MD5::::BEGIN@5Digest::Perl::MD5::BEGIN@5
0000s0sDigest::Perl::MD5::::_encode_base64Digest::Perl::MD5::_encode_base64
0000s0sDigest::Perl::MD5::::_encode_hexDigest::Perl::MD5::_encode_hex
0000s0sDigest::Perl::MD5::::addDigest::Perl::MD5::add
0000s0sDigest::Perl::MD5::::add_bitsDigest::Perl::MD5::add_bits
0000s0sDigest::Perl::MD5::::addfileDigest::Perl::MD5::addfile
0000s0sDigest::Perl::MD5::::b64digestDigest::Perl::MD5::b64digest
0000s0sDigest::Perl::MD5::::cloneDigest::Perl::MD5::clone
0000s0sDigest::Perl::MD5::::digestDigest::Perl::MD5::digest
0000s0sDigest::Perl::MD5::::finalizeDigest::Perl::MD5::finalize
0000s0sDigest::Perl::MD5::::hexdigestDigest::Perl::MD5::hexdigest
0000s0sDigest::Perl::MD5::::md5Digest::Perl::MD5::md5
0000s0sDigest::Perl::MD5::::md5_base64Digest::Perl::MD5::md5_base64
0000s0sDigest::Perl::MD5::::md5_hexDigest::Perl::MD5::md5_hex
0000s0sDigest::Perl::MD5::::newDigest::Perl::MD5::new
0000s0sDigest::Perl::MD5::::paddingDigest::Perl::MD5::padding
0000s0sDigest::Perl::MD5::::resetDigest::Perl::MD5::reset
0000s0sDigest::Perl::MD5::::rotate_leftDigest::Perl::MD5::rotate_left
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Digest::Perl::MD5;
2216µs212µs
# spent 10µs (8+2) within Digest::Perl::MD5::BEGIN@2 which was called: # once (8µs+2µs) by Spreadsheet::ParseExcel::BEGIN@27 at line 2
use strict;
# spent 10µs making 1 call to Digest::Perl::MD5::BEGIN@2 # spent 2µs making 1 call to strict::import
3210µs25µs
# spent 4µs (3+700ns) within Digest::Perl::MD5::BEGIN@3 which was called: # once (3µs+700ns) by Spreadsheet::ParseExcel::BEGIN@27 at line 3
use integer;
# spent 4µs making 1 call to Digest::Perl::MD5::BEGIN@3 # spent 700ns making 1 call to integer::import
4214µs220µs
# spent 11µs (3+8) within Digest::Perl::MD5::BEGIN@4 which was called: # once (3µs+8µs) by Spreadsheet::ParseExcel::BEGIN@27 at line 4
use Exporter;
# spent 11µs making 1 call to Digest::Perl::MD5::BEGIN@4 # spent 8µs making 1 call to Exporter::import
52864µs261µs
# spent 32µs (3+29) within Digest::Perl::MD5::BEGIN@5 which was called: # once (3µs+29µs) by Spreadsheet::ParseExcel::BEGIN@27 at line 5
use vars qw($VERSION @ISA @EXPORTER @EXPORT_OK);
# spent 32µs making 1 call to Digest::Perl::MD5::BEGIN@5 # spent 29µs making 1 call to vars::import
6
71900ns@EXPORT_OK = qw(md5 md5_hex md5_base64);
8
915µs@ISA = 'Exporter';
101100ns$VERSION = '1.9';
11
12# I-Vektor
13sub A() { 0x67_45_23_01 }
14sub B() { 0xef_cd_ab_89 }
15sub C() { 0x98_ba_dc_fe }
16sub D() { 0x10_32_54_76 }
17
18# for internal use
19sub MAX() { 0xFFFFFFFF }
20
21# pad a message to a multiple of 64
22sub padding {
23 my $l = length (my $msg = shift() . chr(128));
24 $msg .= "\0" x (($l%64<=56?56:120)-$l%64);
25 $l = ($l-1)*8;
26 $msg .= pack 'VV', $l & MAX , ($l >> 16 >> 16);
27}
28
29
30sub rotate_left($$) {
31 #$_[0] << $_[1] | $_[0] >> (32 - $_[1]);
32 #my $right = $_[0] >> (32 - $_[1]);
33 #my $rmask = (1 << $_[1]) - 1;
34 ($_[0] << $_[1]) | (( $_[0] >> (32 - $_[1]) ) & ((1 << $_[1]) - 1));
35 #$_[0] << $_[1] | (($_[0]>> (32 - $_[1])) & (1 << (32 - $_[1])) - 1);
36}
37
38
# spent 1.74ms (1.39+347µs) within Digest::Perl::MD5::gen_code which was called: # once (1.39ms+347µs) by Spreadsheet::ParseExcel::BEGIN@27 at line 92
sub gen_code {
39 # Discard upper 32 bits on 64 bit archs.
401300ns my $MSK = ((1 << 16) << 16) ? ' & ' . MAX : '';
41# FF => "X0=rotate_left(((X1&X2)|(~X1&X3))+X0+X4+X6$MSK,X5)+X1$MSK;",
42# GG => "X0=rotate_left(((X1&X3)|(X2&(~X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
4312µs my %f = (
44 FF => "X0=rotate_left((X3^(X1&(X2^X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
45 GG => "X0=rotate_left((X2^(X3&(X1^X2)))+X0+X4+X6$MSK,X5)+X1$MSK;",
46 HH => "X0=rotate_left((X1^X2^X3)+X0+X4+X6$MSK,X5)+X1$MSK;",
47 II => "X0=rotate_left((X2^(X1|(~X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
48 );
49 #unless ( (1 << 16) << 16) { %f = %{$CODES{'32bit'}} }
50 #else { %f = %{$CODES{'64bit'}} }
51
5213µs my %s = ( # shift lengths
53 S11 => 7, S12 => 12, S13 => 17, S14 => 22, S21 => 5, S22 => 9, S23 => 14,
54 S24 => 20, S31 => 4, S32 => 11, S33 => 16, S34 => 23, S41 => 6, S42 => 10,
55 S43 => 15, S44 => 21
56 );
57
581100ns my $insert = "\n";
59170µs6516µs while(defined( my $data = <DATA> )) {
# spent 16µs making 65 calls to CORE::readline, avg 254ns/call
60646µs chomp $data;
616452µs6415µs next unless $data =~ /^[FGHI]/;
# spent 15µs making 64 calls to CORE::match, avg 228ns/call
626437µs my ($func,@x) = split /,/, $data;
63649µs my $c = $f{$func};
6464662µs736220µs $c =~ s/X(\d)/$x[$1]/g;
# spent 199µs making 672 calls to CORE::substcont, avg 296ns/call # spent 21µs making 64 calls to CORE::subst, avg 333ns/call
656442µs647µs $c =~ s/(S\d{2})/$s{$1}/;
# spent 7µs making 64 calls to CORE::subst, avg 103ns/call
6664126µs6486µs $c =~ s/^(.*)=rotate_left\((.*),(.*)\)\+(.*)$//;
# spent 86µs making 64 calls to CORE::subst, avg 1µs/call
67
686413µs my $su = 32 - $3;
696411µs my $sh = (1 << $3) - 1;
70
716477µs $c = "$1=(((\$r=$2)<<$3)|((\$r>>$su)&$sh))+$4";
72
73 #my $rotate = "(($2 << $3) || (($2 >> (32 - $3)) & (1 << $2) - 1)))";
74 # $c = "\$r = $2;
75 # $1 = ((\$r << $3) | ((\$r >> (32 - $3)) & ((1 << $3) - 1))) + $4";
766453µs $insert .= "\t$c\n";
77 }
7816µs13µs close DATA;
# spent 3µs making 1 call to CORE::close
79
8012µs my $dump = '
81 sub round {
82 my ($a,$b,$c,$d) = @_[0 .. 3];
83 my $r;' . $insert . '
84 $_[0]+$a' . $MSK . ', $_[1]+$b ' . $MSK .
85 ', $_[2]+$c' . $MSK . ', $_[3]+$d' . $MSK . ';
86 }';
871569µs eval $dump;
88 # print "$dump\n";
89 # exit 0;
90}
91
9211µs11.74msgen_code();
# spent 1.74ms making 1 call to Digest::Perl::MD5::gen_code
93
94#########################################
95# Private output converter functions:
96sub _encode_hex { unpack 'H*', $_[0] }
97sub _encode_base64 {
98 my $res;
99 while ($_[0] =~ /(.{1,45})/gs) {
100 $res .= substr pack('u', $1), 1;
101 chop $res;
102 }
103 $res =~ tr|` -_|AA-Za-z0-9+/|;#`
104 chop $res; chop $res;
105 $res
106}
107
108#########################################
109# OOP interface:
110sub new {
111 my $proto = shift;
112 my $class = ref $proto || $proto;
113 my $self = {};
114 bless $self, $class;
115 $self->reset();
116 $self
117}
118
119sub reset {
120 my $self = shift;
121 delete $self->{_data};
122 $self->{_state} = [A,B,C,D];
123 $self->{_length} = 0;
124 $self
125}
126
127sub add {
128 my $self = shift;
129 $self->{_data} .= join '', @_ if @_;
130 my ($i,$c);
131 for $i (0 .. (length $self->{_data})/64-1) {
132 my @X = unpack 'V16', substr $self->{_data}, $i*64, 64;
133 @{$self->{_state}} = round(@{$self->{_state}},@X);
134 ++$c;
135 }
136 if ($c) {
137 substr ($self->{_data}, 0, $c*64) = '';
138 $self->{_length} += $c*64;
139 }
140 $self
141}
142
143sub finalize {
144 my $self = shift;
145 $self->{_data} .= chr(128);
146 my $l = $self->{_length} + length $self->{_data};
147 $self->{_data} .= "\0" x (($l%64<=56?56:120)-$l%64);
148 $l = ($l-1)*8;
149 $self->{_data} .= pack 'VV', $l & MAX , ($l >> 16 >> 16);
150 $self->add();
151 $self
152}
153
154sub addfile {
155 my ($self,$fh) = @_;
156 if (!ref($fh) && ref(\$fh) ne "GLOB") {
157 require Symbol;
158 $fh = Symbol::qualify($fh, scalar caller);
159 }
160 # $self->{_data} .= do{local$/;<$fh>};
161 my $read = 0;
162 my $buffer = '';
163 $self->add($buffer) while $read = read $fh, $buffer, 8192;
164 die __PACKAGE__, " read failed: $!" unless defined $read;
165 $self
166}
167
168sub add_bits {
169 my $self = shift;
170 return $self->add( pack 'B*', shift ) if @_ == 1;
171 my ($b,$n) = @_;
172 die __PACKAGE__, " Invalid number of bits\n" if $n%8;
173 $self->add( substr $b, 0, $n/8 )
174}
175
176sub digest {
177 my $self = shift;
178 $self->finalize();
179 my $res = pack 'V4', @{$self->{_state}};
180 $self->reset();
181 $res
182}
183
184sub hexdigest {
185 _encode_hex($_[0]->digest)
186}
187
188sub b64digest {
189 _encode_base64($_[0]->digest)
190}
191
192sub clone {
193 my $self = shift;
194 my $clone = {
195 _state => [@{$self->{_state}}],
196 _length => $self->{_length},
197 _data => $self->{_data}
198 };
199 bless $clone, ref $self || $self;
200}
201
202#########################################
203# Procedural interface:
204sub md5 {
205 my $message = padding(join'',@_);
206 my ($a,$b,$c,$d) = (A,B,C,D);
207 my $i;
208 for $i (0 .. (length $message)/64-1) {
209 my @X = unpack 'V16', substr $message,$i*64,64;
210 ($a,$b,$c,$d) = round($a,$b,$c,$d,@X);
211 }
212 pack 'V4',$a,$b,$c,$d;
213}
214sub md5_hex { _encode_hex &md5 }
215sub md5_base64 { _encode_base64 &md5 }
216
217
21813µs1;
219
220=head1 NAME
221
222Digest::MD5::Perl - Perl implementation of Ron Rivests MD5 Algorithm
223
224=head1 DISCLAIMER
225
226This is B<not> an interface (like C<Digest::MD5>) but a Perl implementation of MD5.
227It is written in perl only and because of this it is slow but it works without C-Code.
228You should use C<Digest::MD5> instead of this module if it is available.
229This module is only useful for
230
231=over 4
232
233=item
234
235computers where you cannot install C<Digest::MD5> (e.g. lack of a C-Compiler)
236
237=item
238
239encrypting only small amounts of data (less than one million bytes). I use it to
240hash passwords.
241
242=item
243
244educational purposes
245
246=back
247
248=head1 SYNOPSIS
249
250 # Functional style
251 use Digest::MD5 qw(md5 md5_hex md5_base64);
252
253 $hash = md5 $data;
254 $hash = md5_hex $data;
255 $hash = md5_base64 $data;
256
257
258 # OO style
259 use Digest::MD5;
260
261 $ctx = Digest::MD5->new;
262
263 $ctx->add($data);
264 $ctx->addfile(*FILE);
265
266 $digest = $ctx->digest;
267 $digest = $ctx->hexdigest;
268 $digest = $ctx->b64digest;
269
270=head1 DESCRIPTION
271
272This modules has the same interface as the much faster C<Digest::MD5>. So you can
273easily exchange them, e.g.
274
275 BEGIN {
276 eval {
277 require Digest::MD5;
278 import Digest::MD5 'md5_hex'
279 };
280 if ($@) { # ups, no Digest::MD5
281 require Digest::Perl::MD5;
282 import Digest::Perl::MD5 'md5_hex'
283 }
284 }
285
286If the C<Digest::MD5> module is available it is used and if not you take
287C<Digest::Perl::MD5>.
288
289You can also install the Perl part of Digest::MD5 together with Digest::Perl::MD5
290and use Digest::MD5 as normal, it falls back to Digest::Perl::MD5 if it
291cannot load its object files.
292
293For a detailed Documentation see the C<Digest::MD5> module.
294
295=head1 EXAMPLES
296
297The simplest way to use this library is to import the md5_hex()
298function (or one of its cousins):
299
300 use Digest::Perl::MD5 'md5_hex';
301 print 'Digest is ', md5_hex('foobarbaz'), "\n";
302
303The above example would print out the message
304
305 Digest is 6df23dc03f9b54cc38a0fc1483df6e21
306
307provided that the implementation is working correctly. The same
308checksum can also be calculated in OO style:
309
310 use Digest::MD5;
311
312 $md5 = Digest::MD5->new;
313 $md5->add('foo', 'bar');
314 $md5->add('baz');
315 $digest = $md5->hexdigest;
316
317 print "Digest is $digest\n";
318
319The digest methods are destructive. That means you can only call them
320once and the $md5 objects is reset after use. You can make a copy with clone:
321
322 $md5->clone->hexdigest
323
324=head1 LIMITATIONS
325
326This implementation of the MD5 algorithm has some limitations:
327
328=over 4
329
330=item
331
332It's slow, very slow. I've done my very best but Digest::MD5 is still about 100 times faster.
333You can only encrypt Data up to one million bytes in an acceptable time. But it's very useful
334for encrypting small amounts of data like passwords.
335
336=item
337
338You can only encrypt up to 2^32 bits = 512 MB on 32bit archs. But You should
339use C<Digest::MD5> for those amounts of data anyway.
340
341=back
342
343=head1 SEE ALSO
344
345L<Digest::MD5>
346
347L<md5(1)>
348
349RFC 1321
350
351tools/md5: a small BSD compatible md5 tool written in pure perl.
352
353=head1 COPYRIGHT
354
355This library is free software; you can redistribute it and/or
356modify it under the same terms as Perl itself.
357
358 Copyright 2000 Christian Lackas, Imperia Software Solutions
359 Copyright 1998-1999 Gisle Aas.
360 Copyright 1995-1996 Neil Winton.
361 Copyright 1991-1992 RSA Data Security, Inc.
362
363The MD5 algorithm is defined in RFC 1321. The basic C code
364implementing the algorithm is derived from that in the RFC and is
365covered by the following copyright:
366
367=over 4
368
369=item
370
371Copyright (C) 1991-1992, RSA Data Security, Inc. Created 1991. All
372rights reserved.
373
374License to copy and use this software is granted provided that it
375is identified as the "RSA Data Security, Inc. MD5 Message-Digest
376Algorithm" in all material mentioning or referencing this software
377or this function.
378
379License is also granted to make and use derivative works provided
380that such works are identified as "derived from the RSA Data
381Security, Inc. MD5 Message-Digest Algorithm" in all material
382mentioning or referencing the derived work.
383
384RSA Data Security, Inc. makes no representations concerning either
385the merchantability of this software or the suitability of this
386software for any particular purpose. It is provided "as is"
387without express or implied warranty of any kind.
388
389These notices must be retained in any copies of any part of this
390documentation and/or software.
391
392=back
393
394This copyright does not prohibit distribution of any version of Perl
395containing this extension under the terms of the GNU or Artistic
396licenses.
397
398=head1 AUTHORS
399
400The original MD5 interface was written by Neil Winton
401(<N.Winton (at) axion.bt.co.uk>).
402
403C<Digest::MD5> was made by Gisle Aas <gisle (at) aas.no> (I took his Interface
404and part of the documentation).
405
406Thanks to Guido Flohr for his 'use integer'-hint.
407
408This release was made by Christian Lackas <delta (at) lackas.net>.
409
410=cut
411
412__DATA__










Spreadsheet-ParseXLSX-0.35/nytprof/warnings-register-pm-19-line.html0000644000175000017500000004425514576335353024302 0ustar michamicha Profile of warnings/register.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/warnings/register.pm
StatementsExecuted 27 statements in 25µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
55517µs78µswarnings::register::::importwarnings::register::import
0000s0swarnings::register::::mkMaskwarnings::register::mkMask
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package warnings::register 1.05;
2
31400nsrequire warnings;
4
5# left here as cruft in case other users were using this undocumented routine
6# -- rjbs, 2010-09-08
7sub mkMask
8{
9 my ($bit) = @_;
10 my $mask = "";
11
12 vec($mask, $bit, 1) = 1;
13 return $mask;
14}
15
16sub import
17
# spent 78µs (17+61) within warnings::register::import which was called 5 times, avg 16µs/call: # once (4µs+16µs) by Tie::Hash::BEGIN@191 at line 191 of Tie/Hash.pm # once (4µs+12µs) by constant::BEGIN@4 at line 4 of constant.pm # once (3µs+12µs) by vars::BEGIN@7 at line 7 of vars.pm # once (3µs+11µs) by overload::BEGIN@143 at line 143 of overload.pm # once (3µs+10µs) by File::Find::BEGIN@5 at line 5 of File/Find.pm
{
185700ns shift;
1951µs my @categories = @_;
20
2153µs my $package = caller;
2254µs561µs warnings::register_categories($package);
# spent 61µs making 5 calls to warnings::register_categories, avg 12µs/call
23
24513µs warnings::register_categories($package . "::$_") for @categories;
25}
2612µs1;
27__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Hub-Interceptor-pm-38-line.html0000644000175000017500000010175614576335353024642 0ustar michamicha Profile of Test2/Hub/Interceptor.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Hub/Interceptor.pm
StatementsExecuted 14 statements in 464µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11195µs124µsTest2::Hub::Interceptor::::BEGIN@8Test2::Hub::Interceptor::BEGIN@8
11112µs12µsTest2::Hub::Interceptor::::BEGIN@10Test2::Hub::Interceptor::BEGIN@10
11110µs11µsTest2::Hub::Interceptor::::BEGIN@2Test2::Hub::Interceptor::BEGIN@2
1115µs18µsTest2::Hub::Interceptor::::BEGIN@93Test2::Hub::Interceptor::BEGIN@93
1114µs45µsTest2::Hub::Interceptor::::BEGIN@11Test2::Hub::Interceptor::BEGIN@11
1113µs20µsTest2::Hub::Interceptor::::BEGIN@3Test2::Hub::Interceptor::BEGIN@3
0000s0sTest2::Hub::Interceptor::::clean_inheritedTest2::Hub::Interceptor::clean_inherited
0000s0sTest2::Hub::Interceptor::::inheritTest2::Hub::Interceptor::inherit
0000s0sTest2::Hub::Interceptor::::initTest2::Hub::Interceptor::init
0000s0sTest2::Hub::Interceptor::::restore_inheritedTest2::Hub::Interceptor::restore_inherited
0000s0sTest2::Hub::Interceptor::::terminateTest2::Hub::Interceptor::terminate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Hub::Interceptor;
2219µs213µs
# spent 11µs (10+2) within Test2::Hub::Interceptor::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@89 at line 2
use strict;
# spent 11µs making 1 call to Test2::Hub::Interceptor::BEGIN@2 # spent 2µs making 1 call to strict::import
3227µs236µs
# spent 20µs (3+16) within Test2::Hub::Interceptor::BEGIN@3 which was called: # once (3µs+16µs) by Test2::API::BEGIN@89 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Hub::Interceptor::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8279µs1124µs
# spent 124µs (95+30) within Test2::Hub::Interceptor::BEGIN@8 which was called: # once (95µs+30µs) by Test2::API::BEGIN@89 at line 8
use Test2::Hub::Interceptor::Terminator();
# spent 124µs making 1 call to Test2::Hub::Interceptor::BEGIN@8
9
10226µs112µs
# spent 12µs within Test2::Hub::Interceptor::BEGIN@10 which was called: # once (12µs+0s) by Test2::API::BEGIN@89 at line 10
BEGIN { require Test2::Hub; our @ISA = qw(Test2::Hub) }
# spent 12µs making 1 call to Test2::Hub::Interceptor::BEGIN@10
112265µs286µs
# spent 45µs (4+41) within Test2::Hub::Interceptor::BEGIN@11 which was called: # once (4µs+41µs) by Test2::API::BEGIN@89 at line 11
use Test2::Util::HashBase;
# spent 45µs making 1 call to Test2::Hub::Interceptor::BEGIN@11 # spent 41µs making 1 call to Test2::Util::HashBase::import
12
13sub init {
14 my $self = shift;
15 $self->SUPER::init();
16 $self->{+NESTED} = 0;
17}
18
19sub inherit {
20 my $self = shift;
21 my ($from, %params) = @_;
22
23 $self->{+NESTED} = 0;
24
25 if ($from->{+IPC} && !$self->{+IPC} && !exists($params{ipc})) {
26 my $ipc = $from->{+IPC};
27 $self->{+IPC} = $ipc;
28 $ipc->add_hub($self->{+HID});
29 }
30
31 if (my $ls = $from->{+_LISTENERS}) {
32 push @{$self->{+_LISTENERS}} => grep { $_->{intercept_inherit} } @$ls;
33 }
34
35 if (my $pfs = $from->{+_PRE_FILTERS}) {
36 push @{$self->{+_PRE_FILTERS}} => grep { $_->{intercept_inherit} } @$pfs;
37 }
38
39 if (my $fs = $from->{+_FILTERS}) {
40 push @{$self->{+_FILTERS}} => grep { $_->{intercept_inherit} } @$fs;
41 }
42}
43
44sub clean_inherited {
45 my $self = shift;
46 my %params = @_;
47
48 my @sets = (
49 $self->{+_LISTENERS},
50 $self->{+_PRE_FILTERS},
51 $self->{+_FILTERS},
52 );
53
54 for my $set (@sets) {
55 next unless $set;
56
57 for my $i (@$set) {
58 my $cbs = $i->{intercept_inherit} or next;
59 next unless ref($cbs) eq 'HASH';
60 my $cb = $cbs->{clean} or next;
61 $cb->(%params);
62 }
63 }
64}
65
66sub restore_inherited {
67 my $self = shift;
68 my %params = @_;
69
70 my @sets = (
71 $self->{+_FILTERS},
72 $self->{+_PRE_FILTERS},
73 $self->{+_LISTENERS},
74 );
75
76 for my $set (@sets) {
77 next unless $set;
78
79 for my $i (@$set) {
80 my $cbs = $i->{intercept_inherit} or next;
81 next unless ref($cbs) eq 'HASH';
82 my $cb = $cbs->{restore} or next;
83 $cb->(%params);
84 }
85 }
86}
87
88sub terminate {
89 my $self = shift;
90 my ($code) = @_;
91
92 eval {
93246µs232µs
# spent 18µs (5+14) within Test2::Hub::Interceptor::BEGIN@93 which was called: # once (5µs+14µs) by Test2::API::BEGIN@89 at line 93
no warnings 'exiting';
# spent 18µs making 1 call to Test2::Hub::Interceptor::BEGIN@93 # spent 14µs making 1 call to warnings::unimport
94 last T2_SUBTEST_WRAPPER;
95 };
96 my $err = $@;
97
98 # Fallback
99 die bless(\$err, 'Test2::Hub::Interceptor::Terminator');
100}
101
10212µs1;
103
104__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 112)[XML-Twig-pm-1750]-229-line.html0000644000175000017500000004471714576335353024425 0ustar michamicha Profile of (eval 112)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 112)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 6 statements in 166µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116µs16µsXML::Twig::::BEGIN@1.66XML::Twig::BEGIN@1.66
1116µs16µsXML::Twig::::BEGIN@1.56XML::Twig::BEGIN@1.56
0000s0sXML::Twig::::__ANON__[:17]XML::Twig::__ANON__[:17] (merge of 2 subs)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14160µs453µs
# spent 16µs (6+10) within XML::Twig::BEGIN@1.56 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 16µs (6+10) within XML::Twig::BEGIN@1.66 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1
sub { no warnings;
# spent 20µs making 2 calls to warnings::unimport, avg 10µs/call # spent 16µs making 1 call to XML::Twig::BEGIN@1.66 # spent 16µs making 1 call to XML::Twig::BEGIN@1.56
2my( $stack)= @_;
3my @current_elts= (scalar @$stack);
4my @new_current_elts;
5my $elt;
6
7foreach my $current_elt (@current_elts)
8 { next if( !$current_elt);
9 $current_elt--;
10 $elt= $stack->[$current_elt];
11 if( ($elt->{'##tag'} eq "s:col")) { push @new_current_elts, $current_elt;}
12 }
13unless( @new_current_elts) { return 0; }
14@current_elts= @new_current_elts;
15@new_current_elts=();
16return q{s:col};
1726µs }
18;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-API-Context-pm-61-line.html0000644000175000017500000030674114576335353023660 0ustar michamicha Profile of Test2/API/Context.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Context.pm
StatementsExecuted 172 statements in 1.92ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
86234µs34µsTest2::API::Context::::releaseTest2::API::Context::release
11130µs32µsTest2::API::Context::::BEGIN@2Test2::API::Context::BEGIN@2
21120µs20µsTest2::API::Context::::initTest2::API::Context::init
1010316µs16µsTest2::API::Context::::DESTROYTest2::API::Context::DESTROY
11115µs116µsTest2::API::Context::::send_ev2Test2::API::Context::send_ev2
1115µs133µsTest2::API::Context::::BEGIN@26Test2::API::Context::BEGIN@26
1115µs18µsTest2::API::Context::::BEGIN@72Test2::API::Context::BEGIN@72
1115µs26µsTest2::API::Context::::BEGIN@8Test2::API::Context::BEGIN@8
1115µs25µsTest2::API::Context::::BEGIN@25Test2::API::Context::BEGIN@25
1114µs21µsTest2::API::Context::::BEGIN@10Test2::API::Context::BEGIN@10
1114µs19µsTest2::API::Context::::BEGIN@9Test2::API::Context::BEGIN@9
1114µs21µsTest2::API::Context::::BEGIN@3Test2::API::Context::BEGIN@3
1112µs2µsTest2::API::Context::::BEGIN@12Test2::API::Context::BEGIN@12
1111µs1µsTest2::API::Context::::BEGIN@13Test2::API::Context::BEGIN@13
0000s0sTest2::API::Context::::__ANON__[:175]Test2::API::Context::__ANON__[:175]
0000s0sTest2::API::Context::::__ANON__[:470]Test2::API::Context::__ANON__[:470]
0000s0sTest2::API::Context::::_parse_eventTest2::API::Context::_parse_event
0000s0sTest2::API::Context::::alertTest2::API::Context::alert
0000s0sTest2::API::Context::::bailTest2::API::Context::bail
0000s0sTest2::API::Context::::build_ev2Test2::API::Context::build_ev2
0000s0sTest2::API::Context::::build_eventTest2::API::Context::build_event
0000s0sTest2::API::Context::::diagTest2::API::Context::diag
0000s0sTest2::API::Context::::do_in_contextTest2::API::Context::do_in_context
0000s0sTest2::API::Context::::done_testingTest2::API::Context::done_testing
0000s0sTest2::API::Context::::failTest2::API::Context::fail
0000s0sTest2::API::Context::::fail_and_releaseTest2::API::Context::fail_and_release
0000s0sTest2::API::Context::::failure_diagTest2::API::Context::failure_diag
0000s0sTest2::API::Context::::noteTest2::API::Context::note
0000s0sTest2::API::Context::::okTest2::API::Context::ok
0000s0sTest2::API::Context::::passTest2::API::Context::pass
0000s0sTest2::API::Context::::pass_and_releaseTest2::API::Context::pass_and_release
0000s0sTest2::API::Context::::planTest2::API::Context::plan
0000s0sTest2::API::Context::::restore_error_varsTest2::API::Context::restore_error_vars
0000s0sTest2::API::Context::::send_ev2_and_releaseTest2::API::Context::send_ev2_and_release
0000s0sTest2::API::Context::::send_eventTest2::API::Context::send_event
0000s0sTest2::API::Context::::send_event_and_releaseTest2::API::Context::send_event_and_release
0000s0sTest2::API::Context::::skipTest2::API::Context::skip
0000s0sTest2::API::Context::::snapshotTest2::API::Context::snapshot
0000s0sTest2::API::Context::::throwTest2::API::Context::throw
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::API::Context;
2225µs234µs
# spent 32µs (30+2) within Test2::API::Context::BEGIN@2 which was called: # once (30µs+2µs) by Test::Builder::BEGIN@18 at line 2
use strict;
# spent 32µs making 1 call to Test2::API::Context::BEGIN@2 # spent 2µs making 1 call to strict::import
3227µs239µs
# spent 21µs (4+17) within Test2::API::Context::BEGIN@3 which was called: # once (4µs+17µs) by Test::Builder::BEGIN@18 at line 3
use warnings;
# spent 21µs making 1 call to Test2::API::Context::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8218µs246µs
# spent 26µs (5+21) within Test2::API::Context::BEGIN@8 which was called: # once (5µs+21µs) by Test::Builder::BEGIN@18 at line 8
use Carp qw/confess croak/;
# spent 26µs making 1 call to Test2::API::Context::BEGIN@8 # spent 21µs making 1 call to Exporter::import
9222µs234µs
# spent 19µs (4+15) within Test2::API::Context::BEGIN@9 which was called: # once (4µs+15µs) by Test::Builder::BEGIN@18 at line 9
use Scalar::Util qw/weaken blessed/;
# spent 19µs making 1 call to Test2::API::Context::BEGIN@9 # spent 15µs making 1 call to Exporter::import
10215µs238µs
# spent 21µs (4+17) within Test2::API::Context::BEGIN@10 which was called: # once (4µs+17µs) by Test::Builder::BEGIN@18 at line 10
use Test2::Util qw/get_tid try pkg_to_file get_tid/;
# spent 21µs making 1 call to Test2::API::Context::BEGIN@10 # spent 17µs making 1 call to Exporter::import
11
1229µs12µs
# spent 2µs within Test2::API::Context::BEGIN@12 which was called: # once (2µs+0s) by Test::Builder::BEGIN@18 at line 12
use Test2::EventFacet::Trace();
# spent 2µs making 1 call to Test2::API::Context::BEGIN@12
13266µs11µs
# spent 1µs within Test2::API::Context::BEGIN@13 which was called: # once (1µs+0s) by Test::Builder::BEGIN@18 at line 13
use Test2::API();
# spent 1µs making 1 call to Test2::API::Context::BEGIN@13
14
15# Preload some key event types
16my %LOADED = (
17 map {
181310µs my $pkg = "Test2::Event::$_";
19122µs my $file = "Test2/Event/$_.pm";
2012174µs require $file unless $INC{$file};
21125µs ( $pkg => $pkg, $_ => $pkg )
22 } qw/Ok Diag Note Plan Bail Exception Waiting Skip Subtest Pass Fail V2/
23);
24
25221µs245µs
# spent 25µs (5+20) within Test2::API::Context::BEGIN@25 which was called: # once (5µs+20µs) by Test::Builder::BEGIN@18 at line 25
use Test2::Util::ExternalMeta qw/meta get_meta set_meta delete_meta/;
# spent 25µs making 1 call to Test2::API::Context::BEGIN@25 # spent 20µs making 1 call to Exporter::import
2613µs1128µs
# spent 133µs (5+128) within Test2::API::Context::BEGIN@26 which was called: # once (5µs+128µs) by Test::Builder::BEGIN@18 at line 29
use Test2::Util::HashBase qw{
# spent 128µs making 1 call to Test2::Util::HashBase::import
27 stack hub trace _on_release _depth _is_canon _is_spawn _aborted
28 errno eval_error child_error thrown
291188µs1133µs};
# spent 133µs making 1 call to Test2::API::Context::BEGIN@26
30
31# Private, not package vars
32# It is safe to cache these.
3311µs16µsmy $ON_RELEASE = Test2::API::_context_release_callbacks_ref();
# spent 6µs making 1 call to Test2::API::_context_release_callbacks_ref
341500ns13µsmy $CONTEXTS = Test2::API::_contexts_ref();
# spent 3µs making 1 call to Test2::API::_contexts_ref
35
36
# spent 20µs within Test2::API::Context::init which was called 2 times, avg 10µs/call: # 2 times (20µs+0s) by Test2::Util::HashBase::_new at line 155 of Test2/Util/HashBase.pm, avg 10µs/call
sub init {
372300ns my $self = shift;
38
39 confess "The 'trace' attribute is required"
402600ns unless $self->{+TRACE};
41
42 confess "The 'hub' attribute is required"
432600ns unless $self->{+HUB};
44
4521µs $self->{+_DEPTH} = 0 unless defined $self->{+_DEPTH};
46
47213µs $self->{+ERRNO} = $! unless exists $self->{+ERRNO};
4821µs $self->{+EVAL_ERROR} = $@ unless exists $self->{+EVAL_ERROR};
4924µs $self->{+CHILD_ERROR} = $? unless exists $self->{+CHILD_ERROR};
50}
51
52sub snapshot { bless {%{$_[0]}, _is_canon => undef, _is_spawn => undef, _aborted => undef}, __PACKAGE__ }
53
54sub restore_error_vars {
55 my $self = shift;
56 ($!, $@, $?) = @$self{+ERRNO, +EVAL_ERROR, +CHILD_ERROR};
57}
58
59
# spent 16µs within Test2::API::Context::DESTROY which was called 10 times, avg 2µs/call: # once (9µs+0s) by Test::Builder::reset_outputs at line 1415 of Test/Builder.pm # once (2µs+0s) by Test::Builder::ok at line 734 of Test/Builder.pm # once (700ns+0s) by Test2::API::test2_set_is_end at line 48 of Test2/API.pm # once (700ns+0s) by Test::Builder::done_testing at line 620 of Test/Builder.pm # once (700ns+0s) by Test::Builder::current_test at line 1464 of Test/Builder.pm # once (700ns+0s) by Test::Builder::reset at line 453 of Test/Builder.pm # once (600ns+0s) by Test::Builder::use_numbers at line 1229 of Test/Builder.pm # once (600ns+0s) by Test2::API::Instance::set_exit at line 551 of Test2/API/Instance.pm # once (500ns+0s) by Test::Builder::reset at line 483 of Test/Builder.pm # once (400ns+0s) by Test::Builder::expected_tests at line 556 of Test/Builder.pm
sub DESTROY {
601040µs return unless $_[0]->{+_IS_CANON} || $_[0]->{+_IS_SPAWN};
61 return if $_[0]->{+_ABORTED} && ${$_[0]->{+_ABORTED}};
62 my ($self) = @_;
63
64 my $hub = $self->{+HUB};
65 my $hid = $hub->{hid};
66
67 # Do not show the warning if it looks like an exception has been thrown, or
68 # if the context is not local to this process or thread.
69 {
70 # Sometimes $@ is uninitialized, not a problem in this case so do not
71 # show the warning about using eq.
7221.21ms231µs
# spent 18µs (5+13) within Test2::API::Context::BEGIN@72 which was called: # once (5µs+13µs) by Test::Builder::BEGIN@18 at line 72
no warnings 'uninitialized';
# spent 18µs making 1 call to Test2::API::Context::BEGIN@72 # spent 13µs making 1 call to warnings::unimport
73 if($self->{+EVAL_ERROR} eq $@ && $hub->is_local) {
74 require Carp;
75 my $mess = Carp::longmess("Context destroyed");
76 my $frame = $self->{+_IS_SPAWN} || $self->{+TRACE}->frame;
77 warn <<" EOT";
78A context appears to have been destroyed without first calling release().
79Based on \$@ it does not look like an exception was thrown (this is not always
80a reliable test)
81
82This is a problem because the global error variables (\$!, \$@, and \$?) will
83not be restored. In addition some release callbacks will not work properly from
84inside a DESTROY method.
85
86Here are the context creation details, just in case a tool forgot to call
87release():
88 File: $frame->[1]
89 Line: $frame->[2]
90 Tool: $frame->[3]
91
92Here is a trace to the code that caused the context to be destroyed, this could
93be an exit(), a goto, or simply the end of a scope:
94$mess
95
96Cleaning up the CONTEXT stack...
97 EOT
98 }
99 }
100
101 return if $self->{+_IS_SPAWN};
102
103 # Remove the key itself to avoid a slow memory leak
104 delete $CONTEXTS->{$hid};
105 $self->{+_IS_CANON} = undef;
106
107 if (my $cbk = $self->{+_ON_RELEASE}) {
108 $_->($self) for reverse @$cbk;
109 }
110 if (my $hcbk = $hub->{_context_release}) {
111 $_->($self) for reverse @$hcbk;
112 }
113 $_->($self) for reverse @$ON_RELEASE;
114}
115
116# release exists to implement behaviors like die-on-fail. In die-on-fail you
117# want to die after a failure, but only after diagnostics have been reported.
118# The ideal time for the die to happen is when the context is released.
119# Unfortunately die does not work in a DESTROY block.
120
# spent 34µs within Test2::API::Context::release which was called 8 times, avg 4µs/call: # 3 times (10µs+0s) by Test2::API::release at line 570 of Test2/API.pm, avg 3µs/call # once (9µs+0s) by Test::Builder::ok at line 733 of Test/Builder.pm # once (6µs+0s) by Test::Builder::reset at line 447 of Test/Builder.pm # once (5µs+0s) by Test::Builder::reset at line 481 of Test/Builder.pm # once (2µs+0s) by Test::Builder::expected_tests at line 553 of Test/Builder.pm # once (2µs+0s) by Test::Builder::reset_outputs at line 1411 of Test/Builder.pm
sub release {
12182µs my ($self) = @_;
122
12381µs ($!, $@, $?) = @$self{+ERRNO, +EVAL_ERROR, +CHILD_ERROR} and return if $self->{+THROWN};
124
125 ($!, $@, $?) = @$self{+ERRNO, +EVAL_ERROR, +CHILD_ERROR} and return $self->{+_IS_SPAWN} = undef
126812µs if $self->{+_IS_SPAWN};
127
128 croak "release() should not be called on context that is neither canon nor a child"
1294700ns unless $self->{+_IS_CANON};
130
1314700ns my $hub = $self->{+HUB};
13241µs my $hid = $hub->{hid};
133
134 croak "context thinks it is canon, but it is not"
13543µs unless $CONTEXTS->{$hid} && $CONTEXTS->{$hid} == $self;
136
137 # Remove the key itself to avoid a slow memory leak
13842µs $self->{+_IS_CANON} = undef;
13942µs delete $CONTEXTS->{$hid};
140
14141µs if (my $cbk = $self->{+_ON_RELEASE}) {
142 $_->($self) for reverse @$cbk;
143 }
14441µs if (my $hcbk = $hub->{_context_release}) {
145 $_->($self) for reverse @$hcbk;
146 }
14742µs $_->($self) for reverse @$ON_RELEASE;
148
149 # Do this last so that nothing else changes them.
150 # If one of the hooks dies then these do not get restored, this is
151 # intentional
15246µs ($!, $@, $?) = @$self{+ERRNO, +EVAL_ERROR, +CHILD_ERROR};
153
15446µs return;
155}
156
157sub do_in_context {
158 my $self = shift;
159 my ($sub, @args) = @_;
160
161 # We need to update the pid/tid and error vars.
162 my $clone = $self->snapshot;
163 @$clone{+ERRNO, +EVAL_ERROR, +CHILD_ERROR} = ($!, $@, $?);
164 $clone->{+TRACE} = $clone->{+TRACE}->snapshot(pid => $$, tid => get_tid());
165
166 my $hub = $clone->{+HUB};
167 my $hid = $hub->hid;
168
169 my $old = $CONTEXTS->{$hid};
170
171 $clone->{+_IS_CANON} = 1;
172 $CONTEXTS->{$hid} = $clone;
173 weaken($CONTEXTS->{$hid});
174 my ($ok, $err) = &try($sub, @args);
175 my ($rok, $rerr) = try { $clone->release };
176 delete $clone->{+_IS_CANON};
177
178 if ($old) {
179 $CONTEXTS->{$hid} = $old;
180 weaken($CONTEXTS->{$hid});
181 }
182 else {
183 delete $CONTEXTS->{$hid};
184 }
185
186 die $err unless $ok;
187 die $rerr unless $rok;
188}
189
190sub done_testing {
191 my $self = shift;
192 $self->hub->finalize($self->trace, 1);
193 return;
194}
195
196sub throw {
197 my ($self, $msg) = @_;
198 $self->{+THROWN} = 1;
199 ${$self->{+_ABORTED}}++ if $self->{+_ABORTED};
200 $self->release if $self->{+_IS_CANON} || $self->{+_IS_SPAWN};
201 $self->trace->throw($msg);
202}
203
204sub alert {
205 my ($self, $msg) = @_;
206 $self->trace->alert($msg);
207}
208
209sub send_ev2_and_release {
210 my $self = shift;
211 my $out = $self->send_ev2(@_);
212 $self->release;
213 return $out;
214}
215
216
# spent 116µs (15+101) within Test2::API::Context::send_ev2 which was called: # once (15µs+101µs) by Test2::API::test2_set_is_end at line 46 of Test2/API.pm
sub send_ev2 {
2171200ns my $self = shift;
218
2191500ns my $e;
220 {
22121µs local $Carp::CarpLevel = $Carp::CarpLevel + 1;
222 $e = Test2::Event::V2->new(
22316µs219µs trace => $self->{+TRACE}->snapshot,
# spent 16µs making 1 call to Test2::Util::HashBase::_new # spent 3µs making 1 call to Test2::EventFacet::Trace::snapshot
224 @_,
225 );
226 }
227
2281400ns if ($self->{+_ABORTED}) {
229 my $f = $e->facet_data;
230 ${$self->{+_ABORTED}}++ if $f->{control}->{halt} || defined($f->{control}->{terminate}) || defined($e->terminate);
231 }
23215µs182µs $self->{+HUB}->send($e);
# spent 82µs making 1 call to Test2::Hub::send
233}
234
235sub build_ev2 {
236 my $self = shift;
237
238 local $Carp::CarpLevel = $Carp::CarpLevel + 1;
239 Test2::Event::V2->new(
240 trace => $self->{+TRACE}->snapshot,
241 @_,
242 );
243}
244
245sub send_event_and_release {
246 my $self = shift;
247 my $out = $self->send_event(@_);
248 $self->release;
249 return $out;
250}
251
252sub send_event {
253 my $self = shift;
254 my $event = shift;
255 my %args = @_;
256
257 my $pkg = $LOADED{$event} || $self->_parse_event($event);
258
259 my $e;
260 {
261 local $Carp::CarpLevel = $Carp::CarpLevel + 1;
262 $e = $pkg->new(
263 trace => $self->{+TRACE}->snapshot,
264 %args,
265 );
266 }
267
268 if ($self->{+_ABORTED}) {
269 my $f = $e->facet_data;
270 ${$self->{+_ABORTED}}++ if $f->{control}->{halt} || defined($f->{control}->{terminate}) || defined($e->terminate);
271 }
272 $self->{+HUB}->send($e);
273}
274
275sub build_event {
276 my $self = shift;
277 my $event = shift;
278 my %args = @_;
279
280 my $pkg = $LOADED{$event} || $self->_parse_event($event);
281
282 local $Carp::CarpLevel = $Carp::CarpLevel + 1;
283 $pkg->new(
284 trace => $self->{+TRACE}->snapshot,
285 %args,
286 );
287}
288
289sub pass {
290 my $self = shift;
291 my ($name) = @_;
292
293 my $e = bless(
294 {
295 trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
296 name => $name,
297 },
298 "Test2::Event::Pass"
299 );
300
301 $self->{+HUB}->send($e);
302 return $e;
303}
304
305sub pass_and_release {
306 my $self = shift;
307 my ($name) = @_;
308
309 my $e = bless(
310 {
311 trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
312 name => $name,
313 },
314 "Test2::Event::Pass"
315 );
316
317 $self->{+HUB}->send($e);
318 $self->release;
319 return 1;
320}
321
322sub fail {
323 my $self = shift;
324 my ($name, @diag) = @_;
325
326 my $e = bless(
327 {
328 trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
329 name => $name,
330 },
331 "Test2::Event::Fail"
332 );
333
334 for my $msg (@diag) {
335 if (ref($msg) eq 'Test2::EventFacet::Info::Table') {
336 $e->add_info({tag => 'DIAG', debug => 1, $msg->info_args});
337 }
338 else {
339 $e->add_info({tag => 'DIAG', debug => 1, details => $msg});
340 }
341 }
342
343 $self->{+HUB}->send($e);
344 return $e;
345}
346
347sub fail_and_release {
348 my $self = shift;
349 my ($name, @diag) = @_;
350
351 my $e = bless(
352 {
353 trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
354 name => $name,
355 },
356 "Test2::Event::Fail"
357 );
358
359 for my $msg (@diag) {
360 if (ref($msg) eq 'Test2::EventFacet::Info::Table') {
361 $e->add_info({tag => 'DIAG', debug => 1, $msg->info_args});
362 }
363 else {
364 $e->add_info({tag => 'DIAG', debug => 1, details => $msg});
365 }
366 }
367
368 $self->{+HUB}->send($e);
369 $self->release;
370 return 0;
371}
372
373sub ok {
374 my $self = shift;
375 my ($pass, $name, $on_fail) = @_;
376
377 my $hub = $self->{+HUB};
378
379 my $e = bless {
380 trace => bless( {%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
381 pass => $pass,
382 name => $name,
383 }, 'Test2::Event::Ok';
384 $e->init;
385
386 $hub->send($e);
387 return $e if $pass;
388
389 $self->failure_diag($e);
390
391 if ($on_fail && @$on_fail) {
392 $self->diag($_) for @$on_fail;
393 }
394
395 return $e;
396}
397
398sub failure_diag {
399 my $self = shift;
400 my ($e) = @_;
401
402 # Figure out the debug info, this is typically the file name and line
403 # number, but can also be a custom message. If no trace object is provided
404 # then we have nothing useful to display.
405 my $name = $e->name;
406 my $trace = $e->trace;
407 my $debug = $trace ? $trace->debug : "[No trace info available]";
408
409 # Create the initial diagnostics. If the test has a name we put the debug
410 # info on a second line, this behavior is inherited from Test::Builder.
411 my $msg = defined($name)
412 ? qq[Failed test '$name'\n$debug.\n]
413 : qq[Failed test $debug.\n];
414
415 $self->diag($msg);
416}
417
418sub skip {
419 my $self = shift;
420 my ($name, $reason, @extra) = @_;
421 $self->send_event(
422 'Skip',
423 name => $name,
424 reason => $reason,
425 pass => 1,
426 @extra,
427 );
428}
429
430sub note {
431 my $self = shift;
432 my ($message) = @_;
433 $self->send_event('Note', message => $message);
434}
435
436sub diag {
437 my $self = shift;
438 my ($message) = @_;
439 my $hub = $self->{+HUB};
440 $self->send_event(
441 'Diag',
442 message => $message,
443 );
444}
445
446sub plan {
447 my ($self, $max, $directive, $reason) = @_;
448 $self->send_event('Plan', max => $max, directive => $directive, reason => $reason);
449}
450
451sub bail {
452 my ($self, $reason) = @_;
453 $self->send_event('Bail', reason => $reason);
454}
455
456sub _parse_event {
457 my $self = shift;
458 my $event = shift;
459
460 my $pkg;
461 if ($event =~ m/^\+(.*)/) {
462 $pkg = $1;
463 }
464 else {
465 $pkg = "Test2::Event::$event";
466 }
467
468 unless ($LOADED{$pkg}) {
469 my $file = pkg_to_file($pkg);
470 my ($ok, $err) = try { require $file };
471 $self->throw("Could not load event module '$pkg': $err")
472 unless $ok;
473
474 $LOADED{$pkg} = $pkg;
475 }
476
477 confess "'$pkg' is not a subclass of 'Test2::Event'"
478 unless $pkg->isa('Test2::Event');
479
480 $LOADED{$event} = $pkg;
481
482 return $pkg;
483}
484
48515µs1;
486
487__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-Worksheet-pm-123-line.html0000644000175000017500000033563314576335353027160 0ustar michamicha Profile of Spreadsheet/ParseExcel/Worksheet.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel/Worksheet.pm
StatementsExecuted 21 statements in 773µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@19Spreadsheet::ParseExcel::Worksheet::BEGIN@19
1117µs8µsSpreadsheet::ParseExcel::Worksheet::::newSpreadsheet::ParseExcel::Worksheet::new
1116µs18µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@625Spreadsheet::ParseExcel::Worksheet::BEGIN@625
1114µs19µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@21Spreadsheet::ParseExcel::Worksheet::BEGIN@21
1113µs18µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@20Spreadsheet::ParseExcel::Worksheet::BEGIN@20
0000s0sSpreadsheet::ParseExcel::Worksheet::::_get_col_propertiesSpreadsheet::ParseExcel::Worksheet::_get_col_properties
0000s0sSpreadsheet::ParseExcel::Worksheet::::_get_row_propertiesSpreadsheet::ParseExcel::Worksheet::_get_row_properties
0000s0sSpreadsheet::ParseExcel::Worksheet::::col_rangeSpreadsheet::ParseExcel::Worksheet::col_range
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_cellSpreadsheet::ParseExcel::Worksheet::get_cell
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_col_widthsSpreadsheet::ParseExcel::Worksheet::get_col_widths
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_default_col_widthSpreadsheet::ParseExcel::Worksheet::get_default_col_width
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_default_row_heightSpreadsheet::ParseExcel::Worksheet::get_default_row_height
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_fit_to_pagesSpreadsheet::ParseExcel::Worksheet::get_fit_to_pages
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_footerSpreadsheet::ParseExcel::Worksheet::get_footer
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_h_pagebreaksSpreadsheet::ParseExcel::Worksheet::get_h_pagebreaks
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_headerSpreadsheet::ParseExcel::Worksheet::get_header
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_margin_bottomSpreadsheet::ParseExcel::Worksheet::get_margin_bottom
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_margin_footerSpreadsheet::ParseExcel::Worksheet::get_margin_footer
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_margin_headerSpreadsheet::ParseExcel::Worksheet::get_margin_header
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_margin_leftSpreadsheet::ParseExcel::Worksheet::get_margin_left
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_margin_rightSpreadsheet::ParseExcel::Worksheet::get_margin_right
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_margin_topSpreadsheet::ParseExcel::Worksheet::get_margin_top
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_merged_areasSpreadsheet::ParseExcel::Worksheet::get_merged_areas
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_nameSpreadsheet::ParseExcel::Worksheet::get_name
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_paperSpreadsheet::ParseExcel::Worksheet::get_paper
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_print_orderSpreadsheet::ParseExcel::Worksheet::get_print_order
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_print_scaleSpreadsheet::ParseExcel::Worksheet::get_print_scale
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_row_heightsSpreadsheet::ParseExcel::Worksheet::get_row_heights
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_start_pageSpreadsheet::ParseExcel::Worksheet::get_start_page
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_tab_colorSpreadsheet::ParseExcel::Worksheet::get_tab_color
0000s0sSpreadsheet::ParseExcel::Worksheet::::get_v_pagebreaksSpreadsheet::ParseExcel::Worksheet::get_v_pagebreaks
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_centered_horizontallySpreadsheet::ParseExcel::Worksheet::is_centered_horizontally
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_centered_verticallySpreadsheet::ParseExcel::Worksheet::is_centered_vertically
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_col_hiddenSpreadsheet::ParseExcel::Worksheet::is_col_hidden
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_portraitSpreadsheet::ParseExcel::Worksheet::is_portrait
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_print_black_and_whiteSpreadsheet::ParseExcel::Worksheet::is_print_black_and_white
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_print_commentsSpreadsheet::ParseExcel::Worksheet::is_print_comments
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_print_draftSpreadsheet::ParseExcel::Worksheet::is_print_draft
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_print_gridlinesSpreadsheet::ParseExcel::Worksheet::is_print_gridlines
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_print_row_col_headersSpreadsheet::ParseExcel::Worksheet::is_print_row_col_headers
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_row_hiddenSpreadsheet::ParseExcel::Worksheet::is_row_hidden
0000s0sSpreadsheet::ParseExcel::Worksheet::::is_sheet_hiddenSpreadsheet::ParseExcel::Worksheet::is_sheet_hidden
0000s0sSpreadsheet::ParseExcel::Worksheet::::row_rangeSpreadsheet::ParseExcel::Worksheet::row_range
0000s0sSpreadsheet::ParseExcel::Worksheet::::sheet_numSpreadsheet::ParseExcel::Worksheet::sheet_num
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel::Worksheet;
2
3###############################################################################
4#
5# Spreadsheet::ParseExcel::Worksheet - A class for Worksheets.
6#
7# Used in conjunction with Spreadsheet::ParseExcel.
8#
9# Copyright (c) 2014 Douglas Wilson
10# Copyright (c) 2009-2013 John McNamara
11# Copyright (c) 2006-2008 Gabor Szabo
12# Copyright (c) 2000-2006 Kawai Takanori
13#
14# perltidy with standard settings.
15#
16# Documentation after __END__
17#
18
19217µs212µs
# spent 11µs (9+1) within Spreadsheet::ParseExcel::Worksheet::BEGIN@19 which was called: # once (9µs+1µs) by Spreadsheet::ParseExcel::BEGIN@32 at line 19
use strict;
# spent 11µs making 1 call to Spreadsheet::ParseExcel::Worksheet::BEGIN@19 # spent 2µs making 1 call to strict::import
20215µs232µs
# spent 18µs (3+15) within Spreadsheet::ParseExcel::Worksheet::BEGIN@20 which was called: # once (3µs+15µs) by Spreadsheet::ParseExcel::BEGIN@32 at line 20
use warnings;
# spent 18µs making 1 call to Spreadsheet::ParseExcel::Worksheet::BEGIN@20 # spent 15µs making 1 call to warnings::import
212697µs234µs
# spent 19µs (4+15) within Spreadsheet::ParseExcel::Worksheet::BEGIN@21 which was called: # once (4µs+15µs) by Spreadsheet::ParseExcel::BEGIN@32 at line 21
use Scalar::Util qw(weaken);
# spent 19µs making 1 call to Spreadsheet::ParseExcel::Worksheet::BEGIN@21 # spent 15µs making 1 call to Exporter::import
22
231300nsour $VERSION = '0.66';
24
25###############################################################################
26#
27# new()
28#
29
# spent 8µs (7+700ns) within Spreadsheet::ParseExcel::Worksheet::new which was called: # once (7µs+700ns) by Spreadsheet::ParseXLSX::_parse_workbook at line 179 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub new {
30
3112µs my ( $class, %properties ) = @_;
32
331400ns my $self = \%properties;
34
3513µs1700ns weaken $self->{_Book};
# spent 700ns making 1 call to Scalar::Util::weaken
36
371600ns $self->{Cells} = undef;
381700ns $self->{DefColWidth} = 8.43;
39
4012µs return bless $self, $class;
41}
42
43###############################################################################
44#
45# get_cell( $row, $col )
46#
47# Returns the Cell object at row $row and column $col, if defined.
48#
49sub get_cell {
50
51 my ( $self, $row, $col ) = @_;
52
53 if ( !defined $row
54 || !defined $col
55 || !defined $self->{MaxRow}
56 || !defined $self->{MaxCol} )
57 {
58
59 # Return undef if no arguments are given or if no cells are defined.
60 return undef;
61 }
62 elsif ($row < $self->{MinRow}
63 || $row > $self->{MaxRow}
64 || $col < $self->{MinCol}
65 || $col > $self->{MaxCol} )
66 {
67
68 # Return undef if outside allowable row/col range.
69 return undef;
70 }
71 else {
72
73 # Return the Cell object.
74 return $self->{Cells}->[$row]->[$col];
75 }
76}
77
78###############################################################################
79#
80# row_range()
81#
82# Returns a two-element list ($min, $max) containing the minimum and maximum
83# defined rows in the worksheet.
84#
85# If there is no row defined $max is smaller than $min.
86#
87sub row_range {
88
89 my $self = shift;
90
91 my $min = $self->{MinRow} || 0;
92 my $max = defined( $self->{MaxRow} ) ? $self->{MaxRow} : ( $min - 1 );
93
94 return ( $min, $max );
95}
96
97###############################################################################
98#
99# col_range()
100#
101# Returns a two-element list ($min, $max) containing the minimum and maximum
102# defined cols in the worksheet.
103#
104# If there is no column defined $max is smaller than $min.
105#
106sub col_range {
107
108 my $self = shift;
109
110 my $min = $self->{MinCol} || 0;
111 my $max = defined( $self->{MaxCol} ) ? $self->{MaxCol} : ( $min - 1 );
112
113 return ( $min, $max );
114}
115
116###############################################################################
117#
118# get_name()
119#
120# Returns the name of the worksheet.
121#
122sub get_name {
123
124 my $self = shift;
125
126 return $self->{Name};
127}
128
129###############################################################################
130#
131# sheet_num()
132#
133sub sheet_num {
134
135 my $self = shift;
136
137 return $self->{_SheetNo};
138}
139
140###############################################################################
141#
142# get_h_pagebreaks()
143#
144# Returns an array ref of row numbers where a horizontal page break occurs.
145#
146sub get_h_pagebreaks {
147
148 my $self = shift;
149
150 return $self->{HPageBreak};
151}
152
153###############################################################################
154#
155# get_v_pagebreaks()
156#
157# Returns an array ref of column numbers where a vertical page break occurs.
158#
159sub get_v_pagebreaks {
160
161 my $self = shift;
162
163 return $self->{VPageBreak};
164}
165
166###############################################################################
167#
168# get_merged_areas()
169#
170# Returns an array ref of cells that are merged.
171#
172sub get_merged_areas {
173
174 my $self = shift;
175
176 return $self->{MergedArea};
177}
178
179###############################################################################
180#
181# get_row_heights()
182#
183# Returns an array of row heights.
184#
185sub get_row_heights {
186
187 my $self = shift;
188
189 if ( wantarray() ) {
190 return unless $self->{RowHeight};
191 return @{ $self->{RowHeight} };
192 }
193 return $self->{RowHeight};
194}
195
196###############################################################################
197#
198# get_col_widths()
199#
200# Returns an array of column widths.
201#
202sub get_col_widths {
203
204 my $self = shift;
205
206 if ( wantarray() ) {
207 return unless $self->{ColWidth};
208 return @{ $self->{ColWidth} };
209 }
210 return $self->{ColWidth};
211}
212
213###############################################################################
214#
215# get_default_row_height()
216#
217# Returns the default row height for the worksheet. Generally 12.75.
218#
219sub get_default_row_height {
220
221 my $self = shift;
222
223 return $self->{DefRowHeight};
224}
225
226###############################################################################
227#
228# get_default_col_width()
229#
230# Returns the default column width for the worksheet. Generally 8.43.
231#
232sub get_default_col_width {
233
234 my $self = shift;
235
236 return $self->{DefColWidth};
237}
238
239###############################################################################
240#
241# _get_row_properties()
242#
243# Returns an array_ref of row properties.
244# TODO. This is a placeholder for a future method.
245#
246sub _get_row_properties {
247
248 my $self = shift;
249
250 return $self->{RowProperties};
251}
252
253###############################################################################
254#
255# _get_col_properties()
256#
257# Returns an array_ref of column properties.
258# TODO. This is a placeholder for a future method.
259#
260sub _get_col_properties {
261
262 my $self = shift;
263
264 return $self->{ColProperties};
265}
266
267###############################################################################
268#
269# get_header()
270#
271# Returns the worksheet header string.
272#
273sub get_header {
274
275 my $self = shift;
276
277 return $self->{Header};
278}
279
280###############################################################################
281#
282# get_footer()
283#
284# Returns the worksheet footer string.
285#
286sub get_footer {
287
288 my $self = shift;
289
290 return $self->{Footer};
291}
292
293###############################################################################
294#
295# get_margin_left()
296#
297# Returns the left margin of the worksheet in inches.
298#
299sub get_margin_left {
300
301 my $self = shift;
302
303 return $self->{LeftMargin};
304}
305
306###############################################################################
307#
308# get_margin_right()
309#
310# Returns the right margin of the worksheet in inches.
311#
312sub get_margin_right {
313
314 my $self = shift;
315
316 return $self->{RightMargin};
317}
318
319###############################################################################
320#
321# get_margin_top()
322#
323# Returns the top margin of the worksheet in inches.
324#
325sub get_margin_top {
326
327 my $self = shift;
328
329 return $self->{TopMargin};
330}
331
332###############################################################################
333#
334# get_margin_bottom()
335#
336# Returns the bottom margin of the worksheet in inches.
337#
338sub get_margin_bottom {
339
340 my $self = shift;
341
342 return $self->{BottomMargin};
343}
344
345###############################################################################
346#
347# get_margin_header()
348#
349# Returns the header margin of the worksheet in inches.
350#
351sub get_margin_header {
352
353 my $self = shift;
354
355 return $self->{HeaderMargin};
356}
357
358###############################################################################
359#
360# get_margin_footer()
361#
362# Returns the footer margin of the worksheet in inches.
363#
364sub get_margin_footer {
365
366 my $self = shift;
367
368 return $self->{FooterMargin};
369}
370
371###############################################################################
372#
373# get_paper()
374#
375# Returns the printer paper size.
376#
377sub get_paper {
378
379 my $self = shift;
380
381 return $self->{PaperSize};
382}
383
384###############################################################################
385#
386# get_start_page()
387#
388# Returns the page number that printing will start from.
389#
390sub get_start_page {
391
392 my $self = shift;
393
394 # Only return the page number if the "First page number" option is set.
395 if ( $self->{UsePage} ) {
396 return $self->{PageStart};
397 }
398 else {
399 return 0;
400 }
401}
402
403###############################################################################
404#
405# get_print_order()
406#
407# Returns the Worksheet page printing order.
408#
409sub get_print_order {
410
411 my $self = shift;
412
413 return $self->{LeftToRight};
414}
415
416###############################################################################
417#
418# get_print_scale()
419#
420# Returns the workbook scale for printing.
421#
422sub get_print_scale {
423
424 my $self = shift;
425
426 return $self->{Scale};
427}
428
429###############################################################################
430#
431# get_fit_to_pages()
432#
433# Returns the number of pages wide and high that the printed worksheet page
434# will fit to.
435#
436sub get_fit_to_pages {
437
438 my $self = shift;
439
440 if ( !$self->{PageFit} ) {
441 return ( 0, 0 );
442 }
443 else {
444 return ( $self->{FitWidth}, $self->{FitHeight} );
445 }
446}
447
448###############################################################################
449#
450# is_portrait()
451#
452# Returns true if the worksheet has been set for printing in portrait mode.
453#
454sub is_portrait {
455
456 my $self = shift;
457
458 return $self->{Landscape};
459}
460
461###############################################################################
462#
463# is_centered_horizontally()
464#
465# Returns true if the worksheet has been centered horizontally for printing.
466#
467sub is_centered_horizontally {
468
469 my $self = shift;
470
471 return $self->{HCenter};
472}
473
474###############################################################################
475#
476# is_centered_vertically()
477#
478# Returns true if the worksheet has been centered vertically for printing.
479#
480sub is_centered_vertically {
481
482 my $self = shift;
483
484 return $self->{HCenter};
485}
486
487###############################################################################
488#
489# is_print_gridlines()
490#
491# Returns true if the worksheet print "gridlines" option is turned on.
492#
493sub is_print_gridlines {
494
495 my $self = shift;
496
497 return $self->{PrintGrid};
498}
499
500###############################################################################
501#
502# is_print_row_col_headers()
503#
504# Returns true if the worksheet print "row and column headings" option is on.
505#
506sub is_print_row_col_headers {
507
508 my $self = shift;
509
510 return $self->{PrintHeaders};
511}
512
513###############################################################################
514#
515# is_print_black_and_white()
516#
517# Returns true if the worksheet print "black and white" option is turned on.
518#
519sub is_print_black_and_white {
520
521 my $self = shift;
522
523 return $self->{NoColor};
524}
525
526###############################################################################
527#
528# is_print_draft()
529#
530# Returns true if the worksheet print "draft" option is turned on.
531#
532sub is_print_draft {
533
534 my $self = shift;
535
536 return $self->{Draft};
537}
538
539###############################################################################
540#
541# is_print_comments()
542#
543# Returns true if the worksheet print "comments" option is turned on.
544#
545sub is_print_comments {
546
547 my $self = shift;
548
549 return $self->{Notes};
550}
551
552=head2 get_tab_color()
553
554Return color index of tab, or undef if not set.
555
556=cut
557
558sub get_tab_color {
559 my $worksheet = shift;
560
561 return $worksheet->{TabColor};
562}
563
564=head2 is_sheet_hidden()
565
566Return true if sheet is hidden
567
568=cut
569
570sub is_sheet_hidden {
571 my $worksheet = shift;
572
573 return $worksheet->{SheetHidden};
574}
575
576=head2 is_row_hidden($row)
577
578In scalar context, return true if $row is hidden
579In array context, return an array whose elements are true
580if the corresponding row is hidden.
581
582=cut
583
584sub is_row_hidden {
585 my $worksheet = shift;
586
587 my ($row) = @_;
588
589 unless ( $worksheet->{RowHidden} ) {
590 return () if (wantarray);
591 return 0;
592 }
593
594 return @{ $worksheet->{RowHidden} } if (wantarray);
595 return $worksheet->{RowHidden}[$row];
596}
597
598=head2 is_col_hidden($col)
599
600In scalar context, return true if $col is hidden
601In array context, return an array whose elements are true
602if the corresponding column is hidden.
603
604=cut
605
606sub is_col_hidden {
607 my $worksheet = shift;
608
609 my ($col) = @_;
610
611 unless ( $worksheet->{ColHidden} ) {
612 return () if (wantarray);
613 return 0;
614 }
615
616 return @{ $worksheet->{ColHidden} } if (wantarray);
617 return $worksheet->{ColHidden}[$col];
618}
619
620###############################################################################
621#
622# Mapping between legacy method names and new names.
623#
624{
625332µs231µs
# spent 18µs (6+13) within Spreadsheet::ParseExcel::Worksheet::BEGIN@625 which was called: # once (6µs+13µs) by Spreadsheet::ParseExcel::BEGIN@32 at line 625
no warnings; # Ignore warnings about variables used only once.
# spent 18µs making 1 call to Spreadsheet::ParseExcel::Worksheet::BEGIN@625 # spent 13µs making 1 call to warnings::unimport
6261800ns *sheetNo = *sheet_num;
6271100ns *Cell = *get_cell;
6281200ns *RowRange = *row_range;
6291200ns *ColRange = *col_range;
630}
631
63213µs1;
633
634__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 14)[XML-Twig-pm-159]-134-line.html0000644000175000017500000003434214576335353024254 0ustar michamicha Profile of (eval 14)[XML/Twig.pm:159]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 14)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:159]
StatementsExecuted 2 statements in 11µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 159
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs147µsXML::Twig::::BEGIN@1XML::Twig::BEGIN@1
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1211µs2287µs
# spent 147µs (7+140) within XML::Twig::BEGIN@1 which was called: # once (7µs+140µs) by XML::Twig::BEGIN@148 at line 1
use Encode qw( :all)
# spent 147µs making 1 call to XML::Twig::BEGIN@1 # spent 140µs making 1 call to Exporter::import
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Util-HashBase-pm-31-line.html0000644000175000017500000017031514576335353024207 0ustar michamicha Profile of Test2/Util/HashBase.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm
StatementsExecuted 2336 statements in 3.26ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3131312.14ms2.22msTest2::Util::HashBase::::importTest2::Util::HashBase::import
111208µs355µsTest2::Util::HashBase::::BEGIN@33Test2::Util::HashBase::BEGIN@33
1010756µs226µsTest2::Util::HashBase::::_newTest2::Util::HashBase::_new (recurses: max depth 1, inclusive time 4µs)
4942538µs38µsTest2::Util::HashBase::::__ANON__[:84]Test2::Util::HashBase::__ANON__[:84]
1119µs11µsTest2::Util::HashBase::::BEGIN@2Test2::Util::HashBase::BEGIN@2
1117µs12µsTest2::Util::HashBase::::BEGIN@94Test2::Util::HashBase::BEGIN@94
1115µs9µsTest2::Util::HashBase::::BEGIN@37Test2::Util::HashBase::BEGIN@37
1114µs15µsTest2::Util::HashBase::::BEGIN@18Test2::Util::HashBase::BEGIN@18
1114µs14µsTest2::Util::HashBase::::BEGIN@29Test2::Util::HashBase::BEGIN@29
1113µs18µsTest2::Util::HashBase::::BEGIN@3Test2::Util::HashBase::BEGIN@3
2212µs2µsTest2::Util::HashBase::::__ANON__[:85]Test2::Util::HashBase::__ANON__[:85]
0000s0sTest2::Util::HashBase::::__ANON__[:44]Test2::Util::HashBase::__ANON__[:44]
0000s0sTest2::Util::HashBase::::__ANON__[:81]Test2::Util::HashBase::__ANON__[:81]
0000s0sTest2::Util::HashBase::::__ANON__[:86]Test2::Util::HashBase::__ANON__[:86]
0000s0sTest2::Util::HashBase::::__ANON__[:87]Test2::Util::HashBase::__ANON__[:87]
0000s0sTest2::Util::HashBase::::attr_listTest2::Util::HashBase::attr_list
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Util::HashBase;
2217µs212µs
# spent 11µs (9+1) within Test2::Util::HashBase::BEGIN@2 which was called: # once (9µs+1µs) by Test2::EventFacet::BEGIN@7 at line 2
use strict;
# spent 11µs making 1 call to Test2::Util::HashBase::BEGIN@2 # spent 2µs making 1 call to strict::import
3230µs233µs
# spent 18µs (3+15) within Test2::Util::HashBase::BEGIN@3 which was called: # once (3µs+15µs) by Test2::EventFacet::BEGIN@7 at line 3
use warnings;
# spent 18µs making 1 call to Test2::Util::HashBase::BEGIN@3 # spent 15µs making 1 call to warnings::import
4
51400nsour $VERSION = '1.302198';
6
7#################################################################
8# #
9# This is a generated file! Do not modify this file directly! #
10# Use hashbase_inc.pl script to regenerate this file. #
11# The script is part of the Object::HashBase distribution. #
12# Note: You can modify the version number above this comment #
13# if needed, that is fine. #
14# #
15#################################################################
16
17{
18352µs225µs
# spent 15µs (4+11) within Test2::Util::HashBase::BEGIN@18 which was called: # once (4µs+11µs) by Test2::EventFacet::BEGIN@7 at line 18
no warnings 'once';
# spent 15µs making 1 call to Test2::Util::HashBase::BEGIN@18 # spent 11µs making 1 call to warnings::unimport
191100ns $Test2::Util::HashBase::HB_VERSION = '0.009';
2011µs *Test2::Util::HashBase::ATTR_SUBS = \%Object::HashBase::ATTR_SUBS;
211100ns *Test2::Util::HashBase::ATTR_LIST = \%Object::HashBase::ATTR_LIST;
221200ns *Test2::Util::HashBase::VERSION = \%Object::HashBase::VERSION;
231300ns *Test2::Util::HashBase::CAN_CACHE = \%Object::HashBase::CAN_CACHE;
24}
25
26
271400nsrequire Carp;
28{
29342µs224µs
# spent 14µs (4+10) within Test2::Util::HashBase::BEGIN@29 which was called: # once (4µs+10µs) by Test2::EventFacet::BEGIN@7 at line 29
no warnings 'once';
# spent 14µs making 1 call to Test2::Util::HashBase::BEGIN@29 # spent 10µs making 1 call to warnings::unimport
301500ns $Carp::Internal{+__PACKAGE__} = 1;
31}
32
33
# spent 355µs (208+146) within Test2::Util::HashBase::BEGIN@33 which was called: # once (208µs+146µs) by Test2::EventFacet::BEGIN@7 at line 45
BEGIN {
34 # these are not strictly equivalent, but for out use we don't care
35 # about order
36 *_isa = ($] >= 5.010 && require mro) ? \&mro::get_linear_isa : sub {
37269µs213µs
# spent 9µs (5+4) within Test2::Util::HashBase::BEGIN@37 which was called: # once (5µs+4µs) by Test2::EventFacet::BEGIN@7 at line 37
no strict 'refs';
# spent 9µs making 1 call to Test2::Util::HashBase::BEGIN@37 # spent 4µs making 1 call to strict::unimport
38 my @packages = ($_[0]);
39 my %seen;
40 for my $package (@packages) {
41 push @packages, grep !$seen{$_}++, @{"$package\::ISA"};
42 }
43 return \@packages;
44 }
451336µs1355µs}
# spent 355µs making 1 call to Test2::Util::HashBase::BEGIN@33
46
4714µsmy %SPEC = (
48 '^' => {reader => 1, writer => 0, dep_writer => 1, read_only => 0, strip => 1},
49 '-' => {reader => 1, writer => 0, dep_writer => 0, read_only => 1, strip => 1},
50 '>' => {reader => 0, writer => 1, dep_writer => 0, read_only => 0, strip => 1},
51 '<' => {reader => 1, writer => 0, dep_writer => 0, read_only => 0, strip => 1},
52 '+' => {reader => 0, writer => 0, dep_writer => 0, read_only => 0, strip => 1},
53);
54
55
# spent 2.22ms (2.14+78µs) within Test2::Util::HashBase::import which was called 31 times, avg 71µs/call: # once (291µs+4µs) by Test2::Hub::BEGIN@15 at line 15 of Test2/Hub.pm # once (222µs+3µs) by Test2::API::Instance::BEGIN@16 at line 16 of Test2/API/Instance.pm # once (125µs+3µs) by Test2::API::Context::BEGIN@26 at line 26 of Test2/API/Context.pm # once (110µs+2µs) by Test2::EventFacet::Trace::BEGIN@13 at line 13 of Test2/EventFacet/Trace.pm # once (89µs+2µs) by Test2::EventFacet::Hub::BEGIN@11 at line 11 of Test2/EventFacet/Hub.pm # once (89µs+2µs) by Test2::Event::Subtest::BEGIN@8 at line 8 of Test2/Event/Subtest.pm # once (70µs+2µs) by Test2::Hub::Subtest::BEGIN@8 at line 8 of Test2/Hub/Subtest.pm # once (69µs+3µs) by Test2::Formatter::TAP::BEGIN@9 at line 9 of Test2/Formatter/TAP.pm # once (69µs+2µs) by Test2::EventFacet::Parent::BEGIN@10 at line 10 of Test2/EventFacet/Parent.pm # once (68µs+2µs) by Test2::EventFacet::Control::BEGIN@8 at line 8 of Test2/EventFacet/Control.pm # once (64µs+3µs) by Test2::Event::BEGIN@10 at line 10 of Test2/Event.pm # once (62µs+2µs) by Test2::EventFacet::Plan::BEGIN@8 at line 8 of Test2/EventFacet/Plan.pm # once (56µs+3µs) by Test2::Event::Ok::BEGIN@9 at line 9 of Test2/Event/Ok.pm # once (54µs+2µs) by Test2::EventFacet::Info::BEGIN@10 at line 10 of Test2/EventFacet/Info.pm # once (50µs+4µs) by Test2::Event::Exception::BEGIN@9 at line 9 of Test2/Event/Exception.pm # once (51µs+2µs) by Test2::Event::Fail::BEGIN@15 at line 15 of Test2/Event/Fail.pm # once (51µs+2µs) by Test2::EventFacet::About::BEGIN@8 at line 8 of Test2/EventFacet/About.pm # once (51µs+2µs) by Test2::Event::Pass::BEGIN@15 at line 15 of Test2/Event/Pass.pm # once (47µs+2µs) by Test2::Event::Plan::BEGIN@9 at line 9 of Test2/Event/Plan.pm # once (46µs+2µs) by Test2::Event::Bail::BEGIN@9 at line 9 of Test2/Event/Bail.pm # once (43µs+3µs) by Test::Builder::Formatter::BEGIN@9 at line 9 of Test/Builder/Formatter.pm # once (44µs+2µs) by Test2::EventFacet::Error::BEGIN@11 at line 11 of Test2/EventFacet/Error.pm # once (43µs+2µs) by Test2::EventFacet::Assert::BEGIN@8 at line 8 of Test2/EventFacet/Assert.pm # once (40µs+2µs) by Test2::Event::Skip::BEGIN@9 at line 9 of Test2/Event/Skip.pm # once (39µs+2µs) by Test2::Hub::Interceptor::BEGIN@11 at line 11 of Test2/Hub/Interceptor.pm # once (35µs+5µs) by Test2::EventFacet::BEGIN@7 at line 7 of Test2/EventFacet.pm # once (38µs+2µs) by Test2::Event::Diag::BEGIN@9 at line 9 of Test2/Event/Diag.pm # once (37µs+2µs) by Test2::EventFacet::Amnesty::BEGIN@10 at line 10 of Test2/EventFacet/Amnesty.pm # once (35µs+2µs) by Test2::Event::Note::BEGIN@9 at line 9 of Test2/Event/Note.pm # once (32µs+3µs) by Test2::Event::V2::BEGIN@17 at line 17 of Test2/Event/V2.pm # once (19µs+2µs) by Test2::Event::Waiting::BEGIN@9 at line 9 of Test2/Event/Waiting.pm
sub import {
56319µs my $class = shift;
573112µs my $into = caller;
58
59 # Make sure we list the OLDEST version used to create this class.
60318µs my $ver = $Test2::Util::HashBase::HB_VERSION || $Test2::Util::HashBase::VERSION;
613128µs $Test2::Util::HashBase::VERSION{$into} = $ver if !$Test2::Util::HashBase::VERSION{$into} || $Test2::Util::HashBase::VERSION{$into} > $ver;
62
633193µs3134µs my $isa = _isa($into);
# spent 34µs making 31 calls to mro::get_linear_isa, avg 1µs/call
643115µs my $attr_list = $Test2::Util::HashBase::ATTR_LIST{$into} ||= [];
653111µs my $attr_subs = $Test2::Util::HashBase::ATTR_SUBS{$into} ||= {};
66
67 my %subs = (
68 ($into->can('new') ? () : (new => \&_new)),
69 (map %{$Test2::Util::HashBase::ATTR_SUBS{$_} || {}}, @{$isa}[1 .. $#$isa]),
70 (
71 map {
72178347µs3144µs my $p = substr($_, 0, 1);
# spent 44µs making 31 calls to UNIVERSAL::can, avg 1µs/call
7314715µs my $x = $_;
74
7514755µs my $spec = $SPEC{$p} || {reader => 1, writer => 1};
76
7714729µs substr($x, 0, 1) = '' if $spec->{strip};
7814742µs push @$attr_list => $x;
7914751µs my ($sub, $attr) = (uc $x, $x);
80
81147289µs $attr_subs->{$sub} = sub() { $attr };
8214750µs my %out = ($sub => $attr_subs->{$sub});
83
84196203µs
# spent 38µs within Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] which was called 49 times, avg 773ns/call: # 4 times (4µs+0s) by Test2::API::test2_in_preload at line 207 of Test2/API.pm, avg 1µs/call # 2 times (1µs+0s) by Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60] at line 59 of Test2/API/Instance.pm, avg 700ns/call # 2 times (1µs+0s) by Test::Builder::done_testing at line 598 of Test/Builder.pm, avg 550ns/call # 2 times (900ns+0s) by Test::Builder::_ending at line 1656 of Test/Builder.pm, avg 450ns/call # 2 times (600ns+0s) by Test::Builder::done_testing at line 618 of Test/Builder.pm, avg 300ns/call # once (2µs+0s) by Test::Builder::reset at line 446 of Test/Builder.pm # once (2µs+0s) by Test::Builder::done_testing at line 586 of Test/Builder.pm # once (2µs+0s) by Test::Builder::BEGIN@18 at line 181 of Test2/API.pm # once (1µs+0s) by Test2::API::_context_release_callbacks_ref at line 321 of Test2/API.pm # once (1µs+0s) by Test::Builder::done_testing at line 595 of Test/Builder.pm # once (1µs+0s) by Test2::Hub::finalize at line 446 of Test2/Hub.pm # once (1µs+0s) by Test2::API::test2_set_is_end at line 30 of Test2/API.pm # once (1µs+0s) by Test2::API::test2_init_done at line 201 of Test2/API.pm # once (1µs+0s) by Test2::API::test2_stack at line 211 of Test2/API.pm # once (1µs+0s) by Test2::API::Instance::set_exit at line 551 of Test2/API/Instance.pm # once (1µs+0s) by Test::Builder::_ending at line 1664 of Test/Builder.pm # once (1µs+0s) by Test2::API::Instance::set_exit at line 553 of Test2/API/Instance.pm # once (800ns+0s) by Test::Builder::reset at line 455 of Test/Builder.pm # once (800ns+0s) by Test2::Event::common_facet_data at line 137 of Test2/Event.pm # once (800ns+0s) by Test2::Event::common_facet_data at line 131 of Test2/Event.pm # once (700ns+0s) by Test2::API::test2_load_done at line 202 of Test2/API.pm # once (700ns+0s) by Test2::Event::common_facet_data at line 141 of Test2/Event.pm # once (600ns+0s) by Test::Builder::_ending at line 1668 of Test/Builder.pm # once (600ns+0s) by Test::Builder::reset at line 470 of Test/Builder.pm # once (500ns+0s) by Test::Builder::BEGIN@18 at line 183 of Test2/API.pm # once (500ns+0s) by Test2::API::_contexts_ref at line 318 of Test2/API.pm # once (500ns+0s) by Test::Builder::BEGIN@18 at line 182 of Test2/API.pm # once (500ns+0s) by Test2::API::test2_set_is_end at line 33 of Test2/API.pm # once (500ns+0s) by Test::Builder::use_numbers at line 1221 of Test/Builder.pm # once (500ns+0s) by Test::Builder::_ending at line 1667 of Test/Builder.pm # once (500ns+0s) by Test::Builder::current_test at line 1438 of Test/Builder.pm # once (500ns+0s) by Test::Builder::reset_outputs at line 1410 of Test/Builder.pm # once (400ns+0s) by Test::Builder::BEGIN@18 at line 184 of Test2/API.pm # once (400ns+0s) by Test::Builder::expected_tests at line 551 of Test/Builder.pm # once (400ns+0s) by Test::Builder::use_numbers at line 1229 of Test/Builder.pm # once (400ns+0s) by Test::Builder::done_testing at line 597 of Test/Builder.pm # once (400ns+0s) by Test::Builder::reset at line 468 of Test/Builder.pm # once (300ns+0s) by Test2::API::Instance::set_exit at line 555 of Test2/API/Instance.pm # once (300ns+0s) by Test::Builder::_ending at line 1657 of Test/Builder.pm # once (300ns+0s) by Test::Builder::_ending at line 1663 of Test/Builder.pm # once (300ns+0s) by Test::Builder::current_test at line 1464 of Test/Builder.pm # once (300ns+0s) by Test::Builder::done_testing at line 616 of Test/Builder.pm
$out{$attr} = sub { $_[0]->{$attr} } if $spec->{reader};
85149192µs
# spent 2µs within Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:85] which was called 2 times, avg 950ns/call: # once (1µs+0s) by Test::Builder::use_numbers at line 1227 of Test/Builder.pm # once (900ns+0s) by Test::Builder::reset_outputs at line 1413 of Test/Builder.pm
$out{"set_$attr"} = sub { $_[0]->{$attr} = $_[1] } if $spec->{writer};
8614783µs $out{"set_$attr"} = sub { Carp::croak("'$attr' is read-only") } if $spec->{read_only};
8714717µs $out{"set_$attr"} = sub { Carp::carp("set_$attr() is deprecated"); $_[0]->{$attr} = $_[1] } if $spec->{dep_writer};
88
89147138µs %out;
90 } @_
91 ),
92 );
93
942281µs216µs
# spent 12µs (7+4) within Test2::Util::HashBase::BEGIN@94 which was called: # once (7µs+4µs) by Test2::EventFacet::BEGIN@7 at line 94
no strict 'refs';
# spent 12µs making 1 call to Test2::Util::HashBase::BEGIN@94 # spent 4µs making 1 call to strict::unimport
9531670µs *{"$into\::$_"} = $subs{$_} for keys %subs;
96}
97
98sub attr_list {
99 my $class = shift;
100
101 my $isa = _isa($class);
102
103 my %seen;
104 my @list = grep { !$seen{$_}++ } map {
105 my @out;
106
107 if (0.004 > ($Test2::Util::HashBase::VERSION{$_} || 0)) {
108 Carp::carp("$_ uses an inlined version of Test2::Util::HashBase too old to support attr_list()");
109 }
110 else {
111 my $list = $Test2::Util::HashBase::ATTR_LIST{$_};
112 @out = $list ? @$list : ()
113 }
114
115 @out;
116 } reverse @$isa;
117
118 return @list;
119}
120
121
# spent 226µs (56+170) within Test2::Util::HashBase::_new which was called 10 times, avg 23µs/call: # once (4µs+86µs) by Test2::Formatter::new_root at line 19 of Test2/Formatter.pm # once (10µs+20µs) by Test2::Hub::finalize at line 435 of Test2/Hub.pm # once (9µs+14µs) by Test2::API::Instance::import at line 74 of Test2/API/Instance.pm # once (5µs+15µs) by Test2::API::test2_set_is_end at line 41 of Test2/API.pm # once (6µs+14µs) by Test2::API::Stack::new_hub at line 23 of Test2/API/Stack.pm # once (4µs+12µs) by Test2::API::Context::send_ev2 at line 223 of Test2/API/Context.pm # once (6µs+6µs) by Test2::API::test2_set_is_end at line 38 of Test2/API.pm # once (3µs+5µs) by Test2::API::Instance::set_exit at line 541 of Test2/API/Instance.pm # once (4µs+3µs) by Test2::API::Instance::set_exit at line 537 of Test2/API/Instance.pm # once (4µs+-4µs) by Test2::Event::V2::init at line 42 of Test2/Event/V2.pm
sub _new {
122102µs my $class = shift;
123
124101µs my $self;
125
126104µs if (@_ == 1) {
127 my $arg = shift;
128 my $type = ref($arg);
129
130 if ($type eq 'HASH') {
131 $self = bless({%$arg}, $class)
132 }
133 else {
134 Carp::croak("Not sure what to do with '$type' in $class constructor")
135 unless $type eq 'ARRAY';
136
137 my %proto;
138 my @attributes = attr_list($class);
139 while (@$arg) {
140 my $val = shift @$arg;
141 my $key = shift @attributes or Carp::croak("Too many arguments for $class constructor");
142 $proto{$key} = $val;
143 }
144
145 $self = bless(\%proto, $class);
146 }
147 }
148 else {
149107µs $self = bless({@_}, $class);
150 }
151
152 $Test2::Util::HashBase::CAN_CACHE{$class} = $self->can('init')
1531024µs75µs unless exists $Test2::Util::HashBase::CAN_CACHE{$class};
# spent 5µs making 7 calls to UNIVERSAL::can, avg 671ns/call
154
155109µs10170µs $self->init if $Test2::Util::HashBase::CAN_CACHE{$class};
# spent 86µs making 1 call to Test::Builder::Formatter::init # spent 20µs making 2 calls to Test2::API::Context::init, avg 10µs/call # spent 19µs making 1 call to Test2::Event::Plan::init # spent 13µs making 1 call to Test2::API::Instance::init # spent 13µs making 1 call to Test2::Hub::init # spent 11µs making 1 call to Test2::Event::V2::init # spent 9µs making 3 calls to Test2::EventFacet::Trace::init, avg 3µs/call
156
1571013µs $self;
158}
159
16016µs1;
161
162__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 18)[JSON-pm-308]-144-line.html0000644000175000017500000003431514576335353023456 0ustar michamicha Profile of (eval 18)[JSON.pm:308]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 18)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/JSON.pm:308]
StatementsExecuted 3 statements in 84µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/JSON.pm line 308
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115.24ms7.33msJSON::::BEGIN@1JSON::BEGIN@1
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1384µs27.34ms
# spent 7.33ms (5.24+2.10) within JSON::BEGIN@1 which was called: # once (5.24ms+2.10ms) by JSON::__load_pp at line 1
use JSON::PP 2.27203 ()
# spent 7.33ms making 1 call to JSON::BEGIN@1 # spent 6µs making 1 call to UNIVERSAL::VERSION
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 5)[Carp-pm-577]-18-line.html0000644000175000017500000003007114576335353023431 0ustar michamicha Profile of (eval 5)[Carp.pm:577]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 5)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm:577]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm line 577
Line State
ments
Time
on line
Calls Time
in subs
Code
112µs\${^LAST_FH}
2;










Spreadsheet-ParseXLSX-0.35/nytprof/XML-Parser-Expat-pm-133-line.html0000644000175000017500000046674314576335353023670 0ustar michamicha Profile of XML/Parser/Expat.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/XML/Parser/Expat.pm
StatementsExecuted 21950262 statements in 19.7s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
67598523.07s3.36sXML::Parser::Expat::::setHandlers XML::Parser::Expat::setHandlers
7112.57s70.4sXML::Parser::Expat::::ParseString XML::Parser::Expat::ParseString (xsub)
1460048211.73s1.73sXML::Parser::Expat::::namespace XML::Parser::Expat::namespace
380001111.51s1.51sXML::Parser::Expat::::current_ns_prefixes XML::Parser::Expat::current_ns_prefixes
1520689211.31s1.31sXML::Parser::Expat::::expand_ns_prefix XML::Parser::Expat::expand_ns_prefix
364369111.09s1.31sXML::Parser::Expat::::recognized_string XML::Parser::Expat::recognized_string
39816711243ms243msXML::Parser::Expat::::new_ns_prefixes XML::Parser::Expat::new_ns_prefixes
36436911223ms223msXML::Parser::Expat::::RecognizedString XML::Parser::Expat::RecognizedString (xsub)
43158151221ms221msXML::Parser::Expat::::depth XML::Parser::Expat::depth
675911126.8ms26.8msXML::Parser::Expat::::SetXMLDeclHandler XML::Parser::Expat::SetXMLDeclHandler (xsub)
675911122.2ms22.2msXML::Parser::Expat::::SetEndElementHandler XML::Parser::Expat::SetEndElementHandler (xsub)
675911121.1ms21.1msXML::Parser::Expat::::SetEntityDeclHandler XML::Parser::Expat::SetEntityDeclHandler (xsub)
675911120.8ms20.8msXML::Parser::Expat::::SetAttListDeclHandler XML::Parser::Expat::SetAttListDeclHandler (xsub)
675911120.5ms20.5msXML::Parser::Expat::::SetCommentHandler XML::Parser::Expat::SetCommentHandler (xsub)
675911120.4ms20.4msXML::Parser::Expat::::SetCharacterDataHandler XML::Parser::Expat::SetCharacterDataHandler (xsub)
675911120.2ms20.2msXML::Parser::Expat::::SetEndCdataHandler XML::Parser::Expat::SetEndCdataHandler (xsub)
675911120.1ms20.1msXML::Parser::Expat::::SetExternalEntityRefHandler XML::Parser::Expat::SetExternalEntityRefHandler (xsub)
675911119.4ms19.4msXML::Parser::Expat::::SetElementDeclHandler XML::Parser::Expat::SetElementDeclHandler (xsub)
675911118.9ms18.9msXML::Parser::Expat::::SetStartCdataHandler XML::Parser::Expat::SetStartCdataHandler (xsub)
675911117.8ms17.8msXML::Parser::Expat::::SetDoctypeHandler XML::Parser::Expat::SetDoctypeHandler (xsub)
675911117.8ms17.8msXML::Parser::Expat::::SetProcessingInstructionHandler XML::Parser::Expat::SetProcessingInstructionHandler (xsub)
675981117.4ms17.4msXML::Parser::Expat::::SetDefaultHandler XML::Parser::Expat::SetDefaultHandler (xsub)
675911115.7ms15.7msXML::Parser::Expat::::SetStartElementHandler XML::Parser::Expat::SetStartElementHandler (xsub)
71112.0ms70.4sXML::Parser::Expat::::parse XML::Parser::Expat::parse
337981110.5ms10.5msXML::Parser::Expat::::SetNotationDeclHandler XML::Parser::Expat::SetNotationDeclHandler (xsub)
711616µs616µsXML::Parser::Expat::::ParserFree XML::Parser::Expat::ParserFree (xsub)
71179µs126µsXML::Parser::Expat::::new XML::Parser::Expat::new
281166µs66µsXML::Parser::Expat::::NamespaceStart XML::Parser::Expat::NamespaceStart
71147µs47µsXML::Parser::Expat::::ParserCreate XML::Parser::Expat::ParserCreate (xsub)
281141µs41µsXML::Parser::Expat::::NamespaceEnd XML::Parser::Expat::NamespaceEnd
71115µs632µsXML::Parser::Expat::::DESTROY XML::Parser::Expat::DESTROY
71115µs18µsXML::Parser::Expat::::release XML::Parser::Expat::release
11110µs25µsXML::Parser::ContentModel::::BEGIN@512XML::Parser::ContentModel::BEGIN@512
1118µs10µsXML::Parser::Expat::::BEGIN@3 XML::Parser::Expat::BEGIN@3
1118µs9µsXML::Parser::Expat::::BEGIN@7 XML::Parser::Expat::BEGIN@7
1117µs14µsXML::Parser::Expat::::BEGIN@460 XML::Parser::Expat::BEGIN@460
1115µs27µsXML::Parser::ExpatNB::::BEGIN@600 XML::Parser::ExpatNB::BEGIN@600
7113µs3µsXML::Parser::Expat::::ParserRelease XML::Parser::Expat::ParserRelease (xsub)
1113µs21µsXML::Parser::Expat::::BEGIN@8 XML::Parser::Expat::BEGIN@8
1112µs2µsXML::Parser::Expat::::BEGIN@14 XML::Parser::Expat::BEGIN@14
0000s0sXML::Parser::ContentModel::::asStringXML::Parser::ContentModel::asString
0000s0sXML::Parser::ContentModel::::childrenXML::Parser::ContentModel::children
0000s0sXML::Parser::ContentModel::::isanyXML::Parser::ContentModel::isany
0000s0sXML::Parser::ContentModel::::ischoiceXML::Parser::ContentModel::ischoice
0000s0sXML::Parser::ContentModel::::isemptyXML::Parser::ContentModel::isempty
0000s0sXML::Parser::ContentModel::::ismixedXML::Parser::ContentModel::ismixed
0000s0sXML::Parser::ContentModel::::isnameXML::Parser::ContentModel::isname
0000s0sXML::Parser::ContentModel::::isseqXML::Parser::ContentModel::isseq
0000s0sXML::Parser::ContentModel::::nameXML::Parser::ContentModel::name
0000s0sXML::Parser::ContentModel::::quantXML::Parser::ContentModel::quant
0000s0sXML::Parser::ContentModel::::thiseqXML::Parser::ContentModel::thiseq
0000s0sXML::Parser::Encinfo::::DESTROY XML::Parser::Encinfo::DESTROY
0000s0sXML::Parser::Expat::::base XML::Parser::Expat::base
0000s0sXML::Parser::Expat::::context XML::Parser::Expat::context
0000s0sXML::Parser::Expat::::current_byte XML::Parser::Expat::current_byte
0000s0sXML::Parser::Expat::::current_column XML::Parser::Expat::current_column
0000s0sXML::Parser::Expat::::current_element XML::Parser::Expat::current_element
0000s0sXML::Parser::Expat::::current_line XML::Parser::Expat::current_line
0000s0sXML::Parser::Expat::::default_current XML::Parser::Expat::default_current
0000s0sXML::Parser::Expat::::element_index XML::Parser::Expat::element_index
0000s0sXML::Parser::Expat::::eq_name XML::Parser::Expat::eq_name
0000s0sXML::Parser::Expat::::finish XML::Parser::Expat::finish
0000s0sXML::Parser::Expat::::generate_ns_name XML::Parser::Expat::generate_ns_name
0000s0sXML::Parser::Expat::::in_element XML::Parser::Expat::in_element
0000s0sXML::Parser::Expat::::load_encoding XML::Parser::Expat::load_encoding
0000s0sXML::Parser::Expat::::original_string XML::Parser::Expat::original_string
0000s0sXML::Parser::Expat::::parsefile XML::Parser::Expat::parsefile
0000s0sXML::Parser::Expat::::parsestring XML::Parser::Expat::parsestring
0000s0sXML::Parser::Expat::::position_in_context XML::Parser::Expat::position_in_context
0000s0sXML::Parser::Expat::::skip_until XML::Parser::Expat::skip_until
0000s0sXML::Parser::Expat::::specified_attr XML::Parser::Expat::specified_attr
0000s0sXML::Parser::Expat::::within_element XML::Parser::Expat::within_element
0000s0sXML::Parser::Expat::::xml_escape XML::Parser::Expat::xml_escape
0000s0sXML::Parser::Expat::::xpcarp XML::Parser::Expat::xpcarp
0000s0sXML::Parser::Expat::::xpcroak XML::Parser::Expat::xpcroak
0000s0sXML::Parser::ExpatNB::::parse XML::Parser::ExpatNB::parse
0000s0sXML::Parser::ExpatNB::::parse_done XML::Parser::ExpatNB::parse_done
0000s0sXML::Parser::ExpatNB::::parse_more XML::Parser::ExpatNB::parse_more
0000s0sXML::Parser::ExpatNB::::parsefile XML::Parser::ExpatNB::parsefile
0000s0sXML::Parser::ExpatNB::::parsestring XML::Parser::ExpatNB::parsestring
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package XML::Parser::Expat;
2
3217µs211µs
# spent 10µs (8+1) within XML::Parser::Expat::BEGIN@3 which was called: # once (8µs+1µs) by XML::Parser::BEGIN@17 at line 3
use strict;
# spent 10µs making 1 call to XML::Parser::Expat::BEGIN@3 # spent 1µs making 1 call to strict::import
4
5#use warnings; No warnings numeric??
6
7213µs29µs
# spent 9µs (8+700ns) within XML::Parser::Expat::BEGIN@7 which was called: # once (8µs+700ns) by XML::Parser::BEGIN@17 at line 7
use XSLoader;
# spent 9µs making 1 call to XML::Parser::Expat::BEGIN@7 # spent 700ns making 1 call to UNIVERSAL::import
8234µs239µs
# spent 21µs (3+18) within XML::Parser::Expat::BEGIN@8 which was called: # once (3µs+18µs) by XML::Parser::BEGIN@17 at line 8
use Carp;
# spent 21µs making 1 call to XML::Parser::Expat::BEGIN@8 # spent 18µs making 1 call to Exporter::import
9
101300nsour $VERSION = '2.47';
11
12our ( %Encoding_Table, @Encoding_Path, $have_File_Spec );
13
1421.37ms12µs
# spent 2µs within XML::Parser::Expat::BEGIN@14 which was called: # once (2µs+0s) by XML::Parser::BEGIN@17 at line 14
use File::Spec ();
# spent 2µs making 1 call to XML::Parser::Expat::BEGIN@14
15
161300ns%Encoding_Table = ();
171500nsif ($have_File_Spec) {
18 @Encoding_Path = (
19 grep( -d $_,
20 map( File::Spec->catdir( $_, qw(XML Parser Encodings) ),
21 @INC ) ),
22 File::Spec->curdir
23 );
24}
25else {
26124µs512µs @Encoding_Path = ( grep( -d $_, map( $_ . '/XML/Parser/Encodings', @INC ) ), '.' );
# spent 12µs making 5 calls to CORE::ftdir, avg 2µs/call
27}
28
291208µs1202µsXSLoader::load( 'XML::Parser::Expat', $VERSION );
# spent 202µs making 1 call to XSLoader::load
30
3114µsour %Handler_Setters = (
32 Start => \&SetStartElementHandler,
33 End => \&SetEndElementHandler,
34 Char => \&SetCharacterDataHandler,
35 Proc => \&SetProcessingInstructionHandler,
36 Comment => \&SetCommentHandler,
37 CdataStart => \&SetStartCdataHandler,
38 CdataEnd => \&SetEndCdataHandler,
39 Default => \&SetDefaultHandler,
40 Unparsed => \&SetUnparsedEntityDeclHandler,
41 Notation => \&SetNotationDeclHandler,
42 ExternEnt => \&SetExternalEntityRefHandler,
43 ExternEntFin => \&SetExtEntFinishHandler,
44 Entity => \&SetEntityDeclHandler,
45 Element => \&SetElementDeclHandler,
46 Attlist => \&SetAttListDeclHandler,
47 Doctype => \&SetDoctypeHandler,
48 DoctypeFin => \&SetEndDoctypeHandler,
49 XMLDecl => \&SetXMLDeclHandler
50);
51
52
# spent 126µs (79+47) within XML::Parser::Expat::new which was called 7 times, avg 18µs/call: # 7 times (79µs+47µs) by XML::Parser::parse at line 171 of XML/Parser.pm, avg 18µs/call
sub new {
53725µs my ( $class, %args ) = @_;
5474µs my $self = bless \%args, $_[0];
5572µs $args{_State_} = 0;
5673µs $args{Context} = [];
5772µs $args{Namespaces} ||= 0;
5872µs $args{ErrorMessage} ||= '';
5973µs if ( $args{Namespaces} ) {
6072µs $args{Namespace_Table} = {};
6173µs $args{Namespace_List} = [undef];
6273µs $args{Prefix_Table} = {};
6372µs $args{New_Prefixes} = [];
64 }
6572µs $args{_Setters} = \%Handler_Setters;
66 $args{Parser} = ParserCreate(
67 $self, $args{ProtocolEncoding},
68 $args{Namespaces}
69766µs747µs );
# spent 47µs making 7 calls to XML::Parser::Expat::ParserCreate, avg 7µs/call
7078µs $self;
71}
72
73sub load_encoding {
74 my ($file) = @_;
75
76 $file =~ s!([^/]+)$!\L$1\E!;
77 $file .= '.enc' unless $file =~ /\.enc$/;
78 unless ( $file =~ m!^/! ) {
79 foreach (@Encoding_Path) {
80 my $tmp = (
81 $have_File_Spec
82 ? File::Spec->catfile( $_, $file )
83 : "$_/$file"
84 );
85 if ( -e $tmp ) {
86 $file = $tmp;
87 last;
88 }
89 }
90 }
91
92 open( my $fh, '<', $file ) or croak("Couldn't open encmap $file:\n$!\n");
93 binmode($fh);
94 my $data;
95 my $br = sysread( $fh, $data, -s $file );
96 croak("Trouble reading $file:\n$!\n")
97 unless defined($br);
98 close($fh);
99
100 my $name = LoadEncoding( $data, $br );
101 croak("$file isn't an encmap file")
102 unless defined($name);
103
104 $name;
105} # End load_encoding
106
107
# spent 3.36s (3.07+290ms) within XML::Parser::Expat::setHandlers which was called 67598 times, avg 50µs/call: # 33792 times (1.56s+140ms) by XML::Twig::_twig_start_check_roots at line 4144 of XML/Twig.pm, avg 50µs/call # 33792 times (1.51s+150ms) by XML::Twig::_twig_end at line 2371 of XML/Twig.pm, avg 49µs/call # 7 times (218µs+44µs) by XML::Parser::parse at line 176 of XML/Parser.pm, avg 38µs/call # 6 times (26µs+4µs) by XML::Twig::_twig_start at line 2117 of XML/Twig.pm, avg 5µs/call # once (8µs+900ns) by XML::Twig::_twig_start at line 2112 of XML/Twig.pm
sub setHandlers {
1086759890.9ms my ( $self, @handler_pairs ) = @_;
109
1106759819.7ms croak("Uneven number of arguments to setHandlers method")
111 if ( int(@handler_pairs) & 1 );
112
113675986.83ms my @ret;
114
1156759814.7ms while (@handler_pairs) {
116980079107ms my $type = shift @handler_pairs;
11798007984.3ms my $handler = shift @handler_pairs;
118980079141ms croak 'Handler for $type not a Code ref'
119 unless ( !defined($handler) or !$handler or ref($handler) eq 'CODE' );
120
121980079152ms my $hndl = $self->{_Setters}->{$type};
122
12398007964.9ms unless ( defined($hndl) ) {
124 my @types = sort keys %{ $self->{_Setters} };
125 croak("Unknown Expat handler type: $type\n Valid types: @types");
126 }
127
1289800792.30s980079290ms my $old = &$hndl( $self->{Parser}, $handler );
# spent 26.8ms making 67591 calls to XML::Parser::Expat::SetXMLDeclHandler, avg 396ns/call # spent 22.2ms making 67591 calls to XML::Parser::Expat::SetEndElementHandler, avg 329ns/call # spent 21.1ms making 67591 calls to XML::Parser::Expat::SetEntityDeclHandler, avg 312ns/call # spent 20.8ms making 67591 calls to XML::Parser::Expat::SetAttListDeclHandler, avg 308ns/call # spent 20.5ms making 67591 calls to XML::Parser::Expat::SetCommentHandler, avg 303ns/call # spent 20.4ms making 67591 calls to XML::Parser::Expat::SetCharacterDataHandler, avg 301ns/call # spent 20.2ms making 67591 calls to XML::Parser::Expat::SetEndCdataHandler, avg 299ns/call # spent 20.1ms making 67591 calls to XML::Parser::Expat::SetExternalEntityRefHandler, avg 298ns/call # spent 19.4ms making 67591 calls to XML::Parser::Expat::SetElementDeclHandler, avg 287ns/call # spent 18.9ms making 67591 calls to XML::Parser::Expat::SetStartCdataHandler, avg 279ns/call # spent 17.8ms making 67591 calls to XML::Parser::Expat::SetDoctypeHandler, avg 264ns/call # spent 17.8ms making 67591 calls to XML::Parser::Expat::SetProcessingInstructionHandler, avg 263ns/call # spent 17.4ms making 67598 calls to XML::Parser::Expat::SetDefaultHandler, avg 258ns/call # spent 15.7ms making 67591 calls to XML::Parser::Expat::SetStartElementHandler, avg 232ns/call # spent 10.5ms making 33798 calls to XML::Parser::Expat::SetNotationDeclHandler, avg 310ns/call
129980079313ms push( @ret, $type, $old );
130 }
131
13267598173ms return @ret;
133}
134
135sub xpcroak {
136 my ( $self, $message ) = @_;
137
138 my $eclines = $self->{ErrorContext};
139 my $line = GetCurrentLineNumber( $_[0]->{Parser} );
140 $message .= " at line $line";
141 $message .= ":\n" . $self->position_in_context($eclines)
142 if defined($eclines);
143 croak $message;
144}
145
146sub xpcarp {
147 my ( $self, $message ) = @_;
148
149 my $eclines = $self->{ErrorContext};
150 my $line = GetCurrentLineNumber( $_[0]->{Parser} );
151 $message .= ' at line $line';
152 $message .= ":\n" . $self->position_in_context($eclines)
153 if defined($eclines);
154 carp $message;
155}
156
157sub default_current {
158 my $self = shift;
159 if ( $self->{_State_} == 1 ) {
160 return DefaultCurrent( $self->{Parser} );
161 }
162}
163
164
# spent 1.31s (1.09+223ms) within XML::Parser::Expat::recognized_string which was called 364369 times, avg 4µs/call: # 364369 times (1.09s+223ms) by XML::Twig::_twig_start at line 2120 of XML/Twig.pm, avg 4µs/call
sub recognized_string {
16536436938.6ms my $self = shift;
1663643691.98s364369223ms if ( $self->{_State_} == 1 ) {
# spent 223ms making 364369 calls to XML::Parser::Expat::RecognizedString, avg 613ns/call
167 return RecognizedString( $self->{Parser} );
168 }
169}
170
171sub original_string {
172 my $self = shift;
173 if ( $self->{_State_} == 1 ) {
174 return OriginalString( $self->{Parser} );
175 }
176}
177
178sub current_line {
179 my $self = shift;
180 if ( $self->{_State_} == 1 ) {
181 return GetCurrentLineNumber( $self->{Parser} );
182 }
183}
184
185sub current_column {
186 my $self = shift;
187 if ( $self->{_State_} == 1 ) {
188 return GetCurrentColumnNumber( $self->{Parser} );
189 }
190}
191
192sub current_byte {
193 my $self = shift;
194 if ( $self->{_State_} == 1 ) {
195 return GetCurrentByteIndex( $self->{Parser} );
196 }
197}
198
199sub base {
200 my ( $self, $newbase ) = @_;
201 my $p = $self->{Parser};
202 my $oldbase = GetBase($p);
203 SetBase( $p, $newbase ) if @_ > 1;
204 return $oldbase;
205}
206
207sub context {
208 my $ctx = $_[0]->{Context};
209 @$ctx;
210}
211
212sub current_element {
213 my ($self) = @_;
214 @{ $self->{Context} } ? $self->{Context}->[-1] : undef;
215}
216
217sub in_element {
218 my ( $self, $element ) = @_;
219 @{ $self->{Context} }
220 ? $self->eq_name( $self->{Context}->[-1], $element )
221 : undef;
222}
223
224sub within_element {
225 my ( $self, $element ) = @_;
226 my $cnt = 0;
227 foreach ( @{ $self->{Context} } ) {
228 $cnt++ if $self->eq_name( $_, $element );
229 }
230 return $cnt;
231}
232
233
# spent 221ms within XML::Parser::Expat::depth which was called 431581 times, avg 513ns/call: # 363976 times (180ms+0s) by XML::Twig::_twig_end at line 2360 of XML/Twig.pm, avg 494ns/call # 33799 times (21.4ms+0s) by XML::Twig::_twig_start_check_roots at line 4134 of XML/Twig.pm, avg 633ns/call # 33792 times (20.3ms+0s) by XML::Twig::_twig_start_check_roots at line 4145 of XML/Twig.pm, avg 600ns/call # 7 times (3µs+0s) by XML::Twig::_twig_start_check_roots at line 4156 of XML/Twig.pm, avg 471ns/call # 7 times (3µs+0s) by XML::Twig::_twig_end_check_roots at line 4214 of XML/Twig.pm, avg 457ns/call
sub depth {
23443158145.7ms my ($self) = @_;
235431581868ms int( @{ $self->{Context} } );
236}
237
238sub element_index {
239 my ($self) = @_;
240
241 if ( $self->{_State_} == 1 ) {
242 return ElementIndex( $self->{Parser} );
243 }
244}
245
246################
247# Namespace methods
248
249
# spent 1.73s within XML::Parser::Expat::namespace which was called 1460048 times, avg 1µs/call: # 1095679 times (1.29s+0s) by XML::Twig::_ns_info at line 2218 of XML/Twig.pm, avg 1µs/call # 364369 times (448ms+0s) by XML::Twig::_replace_prefix at line 2426 of XML/Twig.pm, avg 1µs/call
sub namespace {
2501460048178ms my ( $self, $name ) = @_;
2511460048659ms local ($^W) = 0;
25214600483.46s $self->{Namespace_List}->[ int($name) ];
253}
254
255sub eq_name {
256 my ( $self, $nm1, $nm2 ) = @_;
257 local ($^W) = 0;
258
259 int($nm1) == int($nm2) and $nm1 eq $nm2;
260}
261
262sub generate_ns_name {
263 my ( $self, $name, $namespace ) = @_;
264
265 $namespace
266 ? GenerateNSName(
267 $name, $namespace, $self->{Namespace_Table},
268 $self->{Namespace_List}
269 )
270 : $name;
271}
272
273
# spent 243ms within XML::Parser::Expat::new_ns_prefixes which was called 398167 times, avg 611ns/call: # 398167 times (243ms+0s) by XML::Twig::_replace_ns at line 2162 of XML/Twig.pm, avg 611ns/call
sub new_ns_prefixes {
27439816739.4ms my ($self) = @_;
275398167974ms if ( $self->{Namespaces} ) {
276 return @{ $self->{New_Prefixes} };
277 }
278 return ();
279}
280
281
# spent 1.31s within XML::Parser::Expat::expand_ns_prefix which was called 1520689 times, avg 864ns/call: # 1520661 times (1.31s+0s) by XML::Twig::_a_proper_ns_prefix at line 2230 of XML/Twig.pm, avg 864ns/call # 28 times (33µs+0s) by XML::Twig::_replace_ns at line 2163 of XML/Twig.pm, avg 1µs/call
sub expand_ns_prefix {
2821520689214ms my ( $self, $prefix ) = @_;
283
2841520689158ms if ( $self->{Namespaces} ) {
2851520689365ms my $stack = $self->{Prefix_Table}->{$prefix};
28615206893.57s return ( defined($stack) and @$stack ) ? $stack->[-1] : undef;
287 }
288
289 return undef;
290}
291
292
# spent 1.51s within XML::Parser::Expat::current_ns_prefixes which was called 380001 times, avg 4µs/call: # 380001 times (1.51s+0s) by XML::Twig::_a_proper_ns_prefix at line 2229 of XML/Twig.pm, avg 4µs/call
sub current_ns_prefixes {
29338000142.5ms my ($self) = @_;
294
29538000161.6ms if ( $self->{Namespaces} ) {
296380001828ms my %set = %{ $self->{Prefix_Table} };
297
298380001112ms if ( exists $set{'#default'} and not defined( $set{'#default'}->[-1] ) ) {
299 delete $set{'#default'};
300 }
301
3023800011.24s return keys %set;
303 }
304
305 return ();
306}
307
308################################################################
309# Namespace declaration handlers
310#
311
312
# spent 66µs within XML::Parser::Expat::NamespaceStart which was called 28 times, avg 2µs/call: # 28 times (66µs+0s) by XML::Parser::Expat::ParseString at line 486, avg 2µs/call
sub NamespaceStart {
313287µs my ( $self, $prefix, $uri ) = @_;
314
315286µs $prefix = '#default' unless defined $prefix;
3162810µs my $stack = $self->{Prefix_Table}->{$prefix};
317
318286µs if ( defined $stack ) {
319 push( @$stack, $uri );
320 }
321 else {
3222717µs $self->{Prefix_Table}->{$prefix} = [$uri];
323 }
324
325 # The New_Prefixes list gets emptied at end of startElement function
326 # in Expat.xs
327
3282831µs push( @{ $self->{New_Prefixes} }, $prefix );
329}
330
331
# spent 41µs within XML::Parser::Expat::NamespaceEnd which was called 28 times, avg 1µs/call: # 28 times (41µs+0s) by XML::Parser::Expat::ParseString at line 486, avg 1µs/call
sub NamespaceEnd {
332285µs my ( $self, $prefix ) = @_;
333
334285µs $prefix = '#default' unless defined $prefix;
335
336288µs my $stack = $self->{Prefix_Table}->{$prefix};
3372826µs if ( @$stack > 1 ) {
338 pop(@$stack);
339 }
340 else {
341279µs delete $self->{Prefix_Table}->{$prefix};
342 }
343}
344
345################
346
347sub specified_attr {
348 my $self = shift;
349
350 if ( $self->{_State_} == 1 ) {
351 return GetSpecifiedAttributeCount( $self->{Parser} );
352 }
353}
354
355sub finish {
356 my ($self) = @_;
357 if ( $self->{_State_} == 1 ) {
358 my $parser = $self->{Parser};
359 UnsetAllHandlers($parser);
360 }
361}
362
363sub position_in_context {
364 my ( $self, $lines ) = @_;
365 if ( $self->{_State_} == 1 ) {
366 my $parser = $self->{Parser};
367 my ( $string, $linepos ) = PositionContext( $parser, $lines );
368
369 return '' unless defined($string);
370
371 my $col = GetCurrentColumnNumber($parser);
372 my $ptr = ( '=' x ( $col - 1 ) ) . '^' . "\n";
373 my $ret;
374 my $dosplit = $linepos < length($string);
375
376 $string .= "\n" unless $string =~ /\n$/;
377
378 if ($dosplit) {
379 $ret = substr( $string, 0, $linepos ) . $ptr . substr( $string, $linepos );
380 }
381 else {
382 $ret = $string . $ptr;
383 }
384
385 return $ret;
386 }
387}
388
389sub xml_escape {
390 my $self = shift;
391 my $text = shift;
392
393 study $text;
394 $text =~ s/\&/\&amp;/g;
395 $text =~ s/</\&lt;/g;
396 foreach (@_) {
397 croak "xml_escape: '$_' isn't a single character" if length($_) > 1;
398
399 if ( $_ eq '>' ) {
400 $text =~ s/>/\&gt;/g;
401 }
402 elsif ( $_ eq '"' ) {
403 $text =~ s/\"/\&quot;/;
404 }
405 elsif ( $_ eq "'" ) {
406 $text =~ s/\'/\&apos;/;
407 }
408 else {
409 my $rep = '&#' . sprintf( 'x%X', ord($_) ) . ';';
410 if (/\W/) {
411 my $ptrn = "\\$_";
412 $text =~ s/$ptrn/$rep/g;
413 }
414 else {
415 $text =~ s/$_/$rep/g;
416 }
417 }
418 }
419 $text;
420}
421
422sub skip_until {
423 my $self = shift;
424 if ( $self->{_State_} <= 1 ) {
425 SkipUntil( $self->{Parser}, $_[0] );
426 }
427}
428
429
# spent 18µs (15+3) within XML::Parser::Expat::release which was called 7 times, avg 3µs/call: # 7 times (15µs+3µs) by XML::Parser::parse at line 203 of XML/Parser.pm, avg 3µs/call
sub release {
43071µs my $self = shift;
431718µs73µs ParserRelease( $self->{Parser} );
# spent 3µs making 7 calls to XML::Parser::Expat::ParserRelease, avg 486ns/call
432}
433
434
# spent 632µs (15+616) within XML::Parser::Expat::DESTROY which was called 7 times, avg 90µs/call: # 7 times (15µs+616µs) by XML::Parser::parse at line 206 of XML/Parser.pm, avg 90µs/call
sub DESTROY {
43571µs my $self = shift;
4367634µs7616µs ParserFree( $self->{Parser} );
# spent 616µs making 7 calls to XML::Parser::Expat::ParserFree, avg 88µs/call
437}
438
439
# spent 70.4s (12.0ms+70.4) within XML::Parser::Expat::parse which was called 7 times, avg 10.1s/call: # 7 times (12.0ms+70.4s) by XML::Parser::parse at line 187 of XML/Parser.pm, avg 10.1s/call
sub parse {
44071µs my $self = shift;
44171µs my $arg = shift;
44272µs croak 'Parse already in progress (Expat)' if $self->{_State_};
44373µs $self->{_State_} = 1;
44472µs my $parser = $self->{Parser};
4457500ns my $ioref;
4467400ns my $result = 0;
447
44872µs if ( defined $arg ) {
44975µs local *@;
45076µs if ( ref($arg) and UNIVERSAL::isa( $arg, 'IO::Handle' ) ) {
451 $ioref = $arg;
452 }
453 elsif ( $] < 5.008 and defined tied($arg) ) {
454 require IO::Handle;
455 $ioref = $arg;
456 }
457 else {
45873µs require IO::Handle;
45972µs eval {
4602203µs220µs
# spent 14µs (7+6) within XML::Parser::Expat::BEGIN@460 which was called: # once (7µs+6µs) by XML::Parser::BEGIN@17 at line 460
no strict 'refs';
# spent 14µs making 1 call to XML::Parser::Expat::BEGIN@460 # spent 6µs making 1 call to strict::unimport
461711.9ms $ioref = *{$arg}{IO} if defined *{$arg};
462 };
46372µs if ( ref($ioref) eq 'FileHandle' ) {
464
465 #for perl 5.10.x and possibly earlier, see t/file_open_scalar.t
466 require FileHandle;
467 }
468 }
469 }
470
47173µs if ( defined($ioref) ) {
472 my $delim = $self->{Stream_Delimiter};
473 my $prev_rs;
474 my $ioclass = ref $ioref;
475 $ioclass = 'IO::Handle' if !length $ioclass;
476
477 $prev_rs = $ioclass->input_record_separator("\n$delim\n")
478 if defined($delim);
479
480 $result = ParseStream( $parser, $ioref, $delim );
481
482 $ioclass->input_record_separator($prev_rs)
483 if defined($delim);
484 }
485 else {
48671.34s856119138s $result = ParseString( $parser, $arg );
# spent 70.4s making 7 calls to XML::Parser::Expat::ParseString, avg 10.1s/call # spent 32.4s making 330576 calls to XML::Twig::_twig_start, avg 98µs/call # spent 25.4s making 364368 calls to XML::Twig::_twig_end, avg 70µs/call # spent 8.21s making 33799 calls to XML::Twig::_twig_start_check_roots, avg 243µs/call # spent 1.91s making 127292 calls to XML::Twig::_twig_char, avg 15µs/call # spent 80µs making 7 calls to XML::Twig::_twig_end_check_roots, avg 11µs/call # spent 66µs making 28 calls to XML::Parser::Expat::NamespaceStart, avg 2µs/call # spent 41µs making 28 calls to XML::Parser::Expat::NamespaceEnd, avg 1µs/call # spent 32µs making 7 calls to XML::Twig::_twig_xmldecl, avg 5µs/call # spent 23µs making 6 calls to XML::Twig::_twig_default, avg 4µs/call # spent 2µs making 1 call to XML::Twig::__ANON__[XML/Twig.pm:265]
487 }
488
48972µs $self->{_State_} = 2;
490710µs $result or croak $self->{ErrorMessage};
491}
492
493sub parsestring {
494 my $self = shift;
495 $self->parse(@_);
496}
497
498sub parsefile {
499 my $self = shift;
500 croak 'Parser has already been used' if $self->{_State_};
501
502 open( my $fh, '<', $_[0] ) or croak "Couldn't open $_[0]:\n$!";
503 binmode($fh);
504 my $ret = $self->parse($fh);
505 close($fh);
506 $ret;
507}
508
509################################################################
510package #hide from PAUSE
511 XML::Parser::ContentModel;
5122277µs240µs
# spent 25µs (10+15) within XML::Parser::ContentModel::BEGIN@512 which was called: # once (10µs+15µs) by XML::Parser::BEGIN@17 at line 512
use overload '""' => \&asString, 'eq' => \&thiseq;
# spent 25µs making 1 call to XML::Parser::ContentModel::BEGIN@512 # spent 15µs making 1 call to overload::import
513
514sub EMPTY () { 1 }
515sub ANY () { 2 }
516sub MIXED () { 3 }
517sub NAME () { 4 }
518sub CHOICE () { 5 }
519sub SEQ () { 6 }
520
521sub isempty {
522 return $_[0]->{Type} == EMPTY;
523}
524
525sub isany {
526 return $_[0]->{Type} == ANY;
527}
528
529sub ismixed {
530 return $_[0]->{Type} == MIXED;
531}
532
533sub isname {
534 return $_[0]->{Type} == NAME;
535}
536
537sub name {
538 return $_[0]->{Tag};
539}
540
541sub ischoice {
542 return $_[0]->{Type} == CHOICE;
543}
544
545sub isseq {
546 return $_[0]->{Type} == SEQ;
547}
548
549sub quant {
550 return $_[0]->{Quant};
551}
552
553sub children {
554 my $children = $_[0]->{Children};
555 if ( defined $children ) {
556 return @$children;
557 }
558 return undef;
559}
560
561sub asString {
562 my ($self) = @_;
563 my $ret;
564
565 if ( $self->{Type} == NAME ) {
566 $ret = $self->{Tag};
567 }
568 elsif ( $self->{Type} == EMPTY ) {
569 return 'EMPTY';
570 }
571 elsif ( $self->{Type} == ANY ) {
572 return 'ANY';
573 }
574 elsif ( $self->{Type} == MIXED ) {
575 $ret = '(#PCDATA';
576 foreach ( @{ $self->{Children} } ) {
577 $ret .= '|' . $_;
578 }
579 $ret .= ')';
580 }
581 else {
582 my $sep = $self->{Type} == CHOICE ? '|' : ',';
583 $ret = '(' . join( $sep, map { $_->asString } @{ $self->{Children} } ) . ')';
584 }
585
586 $ret .= $self->{Quant} if $self->{Quant};
587 return $ret;
588}
589
590sub thiseq {
591 my $self = shift;
592
593 return $self->asString eq $_[0];
594}
595
596################################################################
597package #hide from PAUSE
598 XML::Parser::ExpatNB;
599
6002223µs249µs
# spent 27µs (5+22) within XML::Parser::ExpatNB::BEGIN@600 which was called: # once (5µs+22µs) by XML::Parser::BEGIN@17 at line 600
use Carp;
# spent 27µs making 1 call to XML::Parser::ExpatNB::BEGIN@600 # spent 22µs making 1 call to Exporter::import
601
60215µsour @ISA = qw(XML::Parser::Expat);
603
604sub parse {
605 my $self = shift;
606 my $class = ref($self);
607 croak "parse method not supported in $class";
608}
609
610sub parsestring {
611 my $self = shift;
612 my $class = ref($self);
613 croak "parsestring method not supported in $class";
614}
615
616sub parsefile {
617 my $self = shift;
618 my $class = ref($self);
619 croak "parsefile method not supported in $class";
620}
621
622sub parse_more {
623 my ( $self, $data ) = @_;
624
625 $self->{_State_} = 1;
626 my $ret = XML::Parser::Expat::ParsePartial( $self->{Parser}, $data );
627
628 croak $self->{ErrorMessage} unless $ret;
629}
630
631sub parse_done {
632 my $self = shift;
633
634 my $ret = XML::Parser::Expat::ParseDone( $self->{Parser} );
635 unless ($ret) {
636 my $msg = $self->{ErrorMessage};
637 $self->release;
638 croak $msg;
639 }
640
641 $self->{_State_} = 2;
642
643 my $result = $ret;
644 my @result = ();
645 my $final = $self->{FinalHandler};
646 if ( defined $final ) {
647 if (wantarray) {
648 @result = &$final($self);
649 }
650 else {
651 $result = &$final($self);
652 }
653 }
654
655 $self->release;
656
657 return unless defined wantarray;
658 return wantarray ? @result : $result;
659}
660
661################################################################
662
663package #hide from PAUSE
664 XML::Parser::Encinfo;
665
666sub DESTROY {
667 my $self = shift;
668 XML::Parser::Expat::FreeEncoding($self);
669}
670
67119µs1;
672
673__END__
 
# spent 70.4s (2.57+67.9) within XML::Parser::Expat::ParseString which was called 7 times, avg 10.1s/call: # 7 times (2.57s+67.9s) by XML::Parser::Expat::parse at line 486, avg 10.1s/call
sub XML::Parser::Expat::ParseString; # xsub
# spent 47µs within XML::Parser::Expat::ParserCreate which was called 7 times, avg 7µs/call: # 7 times (47µs+0s) by XML::Parser::Expat::new at line 69, avg 7µs/call
sub XML::Parser::Expat::ParserCreate; # xsub
# spent 616µs within XML::Parser::Expat::ParserFree which was called 7 times, avg 88µs/call: # 7 times (616µs+0s) by XML::Parser::Expat::DESTROY at line 436, avg 88µs/call
sub XML::Parser::Expat::ParserFree; # xsub
# spent 3µs within XML::Parser::Expat::ParserRelease which was called 7 times, avg 486ns/call: # 7 times (3µs+0s) by XML::Parser::Expat::release at line 431, avg 486ns/call
sub XML::Parser::Expat::ParserRelease; # xsub
# spent 223ms within XML::Parser::Expat::RecognizedString which was called 364369 times, avg 613ns/call: # 364369 times (223ms+0s) by XML::Parser::Expat::recognized_string at line 166, avg 613ns/call
sub XML::Parser::Expat::RecognizedString; # xsub
# spent 20.8ms within XML::Parser::Expat::SetAttListDeclHandler which was called 67591 times, avg 308ns/call: # 67591 times (20.8ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 308ns/call
sub XML::Parser::Expat::SetAttListDeclHandler; # xsub
# spent 20.4ms within XML::Parser::Expat::SetCharacterDataHandler which was called 67591 times, avg 301ns/call: # 67591 times (20.4ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 301ns/call
sub XML::Parser::Expat::SetCharacterDataHandler; # xsub
# spent 20.5ms within XML::Parser::Expat::SetCommentHandler which was called 67591 times, avg 303ns/call: # 67591 times (20.5ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 303ns/call
sub XML::Parser::Expat::SetCommentHandler; # xsub
# spent 17.4ms within XML::Parser::Expat::SetDefaultHandler which was called 67598 times, avg 258ns/call: # 67598 times (17.4ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 258ns/call
sub XML::Parser::Expat::SetDefaultHandler; # xsub
# spent 17.8ms within XML::Parser::Expat::SetDoctypeHandler which was called 67591 times, avg 264ns/call: # 67591 times (17.8ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 264ns/call
sub XML::Parser::Expat::SetDoctypeHandler; # xsub
# spent 19.4ms within XML::Parser::Expat::SetElementDeclHandler which was called 67591 times, avg 287ns/call: # 67591 times (19.4ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 287ns/call
sub XML::Parser::Expat::SetElementDeclHandler; # xsub
# spent 20.2ms within XML::Parser::Expat::SetEndCdataHandler which was called 67591 times, avg 299ns/call: # 67591 times (20.2ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 299ns/call
sub XML::Parser::Expat::SetEndCdataHandler; # xsub
# spent 22.2ms within XML::Parser::Expat::SetEndElementHandler which was called 67591 times, avg 329ns/call: # 67591 times (22.2ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 329ns/call
sub XML::Parser::Expat::SetEndElementHandler; # xsub
# spent 21.1ms within XML::Parser::Expat::SetEntityDeclHandler which was called 67591 times, avg 312ns/call: # 67591 times (21.1ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 312ns/call
sub XML::Parser::Expat::SetEntityDeclHandler; # xsub
# spent 20.1ms within XML::Parser::Expat::SetExternalEntityRefHandler which was called 67591 times, avg 298ns/call: # 67591 times (20.1ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 298ns/call
sub XML::Parser::Expat::SetExternalEntityRefHandler; # xsub
# spent 10.5ms within XML::Parser::Expat::SetNotationDeclHandler which was called 33798 times, avg 310ns/call: # 33798 times (10.5ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 310ns/call
sub XML::Parser::Expat::SetNotationDeclHandler; # xsub
# spent 17.8ms within XML::Parser::Expat::SetProcessingInstructionHandler which was called 67591 times, avg 263ns/call: # 67591 times (17.8ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 263ns/call
sub XML::Parser::Expat::SetProcessingInstructionHandler; # xsub
# spent 18.9ms within XML::Parser::Expat::SetStartCdataHandler which was called 67591 times, avg 279ns/call: # 67591 times (18.9ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 279ns/call
sub XML::Parser::Expat::SetStartCdataHandler; # xsub
# spent 15.7ms within XML::Parser::Expat::SetStartElementHandler which was called 67591 times, avg 232ns/call: # 67591 times (15.7ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 232ns/call
sub XML::Parser::Expat::SetStartElementHandler; # xsub
# spent 26.8ms within XML::Parser::Expat::SetXMLDeclHandler which was called 67591 times, avg 396ns/call: # 67591 times (26.8ms+0s) by XML::Parser::Expat::setHandlers at line 128, avg 396ns/call
sub XML::Parser::Expat::SetXMLDeclHandler; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 66)[XML-Twig-pm-7113]-183-line.html0000644000175000017500000004054414576335353024345 0ustar michamicha Profile of (eval 66)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 66)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 9 statements in 67µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs120µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs16µsXML::Twig::Elt::::BEGIN@1.10XML::Twig::Elt::BEGIN@1.10
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1967µs5139µs
# spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.10 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_xpath at line 1 # spent 120µs (7+114) within XML::Twig::Elt::__ANON__[(eval 66)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (7µs+114µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:workbookPr') } @results;return XML::Twig::_unique_elts( @results); }
# spent 106µs making 1 call to XML::Twig::descendants # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.10 # spent 10µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig # spent 3µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 8)[Compress-Raw-Zlib-pm-15]-84-line.html0000644000175000017500000003022014576335353025671 0ustar michamicha Profile of (eval 8)[Compress/Raw/Zlib.pm:15]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 8)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:15]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm line 15
Line State
ments
Time
on line
Calls Time
in subs
Code
112µs2.209
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Plan-pm-55-line.html0000644000175000017500000010074414576335353023574 0ustar michamicha Profile of Test2/Event/Plan.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Plan.pm
StatementsExecuted 25 statements in 416µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs34µsTest2::Event::Plan::::facet_dataTest2::Event::Plan::facet_data
11110µs11µsTest2::Event::Plan::::BEGIN@2Test2::Event::Plan::BEGIN@2
1119µs25µsTest2::Event::Plan::::BEGIN@3Test2::Event::Plan::BEGIN@3
1117µs7µsTest2::Event::Plan::::BEGIN@8Test2::Event::Plan::BEGIN@8
1116µs19µsTest2::Event::Plan::::initTest2::Event::Plan::init
1114µs21µsTest2::Event::Plan::::BEGIN@11Test2::Event::Plan::BEGIN@11
1114µs53µsTest2::Event::Plan::::BEGIN@9Test2::Event::Plan::BEGIN@9
0000s0sTest2::Event::Plan::::sets_planTest2::Event::Plan::sets_plan
0000s0sTest2::Event::Plan::::summaryTest2::Event::Plan::summary
0000s0sTest2::Event::Plan::::terminateTest2::Event::Plan::terminate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Plan;
2218µs213µs
# spent 11µs (10+2) within Test2::Event::Plan::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@95 at line 2
use strict;
# spent 11µs making 1 call to Test2::Event::Plan::BEGIN@2 # spent 2µs making 1 call to strict::import
3234µs240µs
# spent 25µs (9+16) within Test2::Event::Plan::BEGIN@3 which was called: # once (9µs+16µs) by Test2::API::BEGIN@95 at line 3
use warnings;
# spent 25µs making 1 call to Test2::Event::Plan::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51400nsour $VERSION = '1.302198';
6
7
8221µs17µs
# spent 7µs within Test2::Event::Plan::BEGIN@8 which was called: # once (7µs+0s) by Test2::API::BEGIN@95 at line 8
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 7µs making 1 call to Test2::Event::Plan::BEGIN@8
9218µs2102µs
# spent 53µs (4+49) within Test2::Event::Plan::BEGIN@9 which was called: # once (4µs+49µs) by Test2::API::BEGIN@95 at line 9
use Test2::Util::HashBase qw{max directive reason};
# spent 53µs making 1 call to Test2::Event::Plan::BEGIN@9 # spent 49µs making 1 call to Test2::Util::HashBase::import
10
112292µs237µs
# spent 21µs (4+16) within Test2::Event::Plan::BEGIN@11 which was called: # once (4µs+16µs) by Test2::API::BEGIN@95 at line 11
use Carp qw/confess/;
# spent 21µs making 1 call to Test2::Event::Plan::BEGIN@11 # spent 16µs making 1 call to Exporter::import
12
1311µsmy %ALLOWED = (
14 'SKIP' => 1,
15 'NO PLAN' => 1,
16);
17
18
# spent 19µs (6+13) within Test2::Event::Plan::init which was called: # once (6µs+13µs) by Test2::Util::HashBase::_new at line 155 of Test2/Util/HashBase.pm
sub init {
1913µs if ($_[0]->{+DIRECTIVE}) {
20 $_[0]->{+DIRECTIVE} = 'SKIP' if $_[0]->{+DIRECTIVE} eq 'skip_all';
21 $_[0]->{+DIRECTIVE} = 'NO PLAN' if $_[0]->{+DIRECTIVE} eq 'no_plan';
22
23 confess "'" . $_[0]->{+DIRECTIVE} . "' is not a valid plan directive"
24 unless $ALLOWED{$_[0]->{+DIRECTIVE}};
25 }
26 else {
27 confess "Cannot have a reason without a directive!"
281500ns if defined $_[0]->{+REASON};
29
30 confess "No number of tests specified"
311500ns unless defined $_[0]->{+MAX};
32
33 confess "Plan test count '" . $_[0]->{+MAX} . "' does not appear to be a valid positive integer"
34115µs113µs unless $_[0]->{+MAX} =~ m/^\d+$/;
# spent 13µs making 1 call to CORE::match
35
3611µs $_[0]->{+DIRECTIVE} = '';
37 }
38}
39
40sub sets_plan {
41 my $self = shift;
42 return (
43 $self->{+MAX},
44 $self->{+DIRECTIVE},
45 $self->{+REASON},
46 );
47}
48
49sub terminate {
50 my $self = shift;
51 # On skip_all we want to terminate the hub
52 return 0 if $self->{+DIRECTIVE} && $self->{+DIRECTIVE} eq 'SKIP';
53 return undef;
54}
55
56sub summary {
57 my $self = shift;
58 my $max = $self->{+MAX};
59 my $directive = $self->{+DIRECTIVE};
60 my $reason = $self->{+REASON};
61
62 return "Plan is $max assertions"
63 if $max || !$directive;
64
65 return "Plan is '$directive', $reason"
66 if $reason;
67
68 return "Plan is '$directive'";
69}
70
71
# spent 34µs (10+24) within Test2::Event::Plan::facet_data which was called: # once (10µs+24µs) by Test2::Hub::process at line 343 of Test2/Hub.pm
sub facet_data {
721300ns my $self = shift;
73
7413µs124µs my $out = $self->common_facet_data;
# spent 24µs making 1 call to Test2::Event::common_facet_data
75
76 $out->{control}->{terminate} = $self->{+DIRECTIVE} eq 'SKIP' ? 0 : undef
7712µs unless defined $out->{control}->{terminate};
78
7911µs $out->{plan} = {count => $self->{+MAX}};
801500ns $out->{plan}->{details} = $self->{+REASON} if defined $self->{+REASON};
81
821700ns if (my $dir = $self->{+DIRECTIVE}) {
83 $out->{plan}->{skip} = 1 if $dir eq 'SKIP';
84 $out->{plan}->{none} = 1 if $dir eq 'NO PLAN';
85 }
86
8712µs return $out;
88}
89
90
9113µs1;
92
93__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Carp-Heavy-pm-96-line.html0000644000175000017500000004162114576335353022566 0ustar michamicha Profile of Carp/Heavy.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp/Heavy.pm
StatementsExecuted 6 statements in 85µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs7µsCarp::Heavy::::BEGIN@3Carp::Heavy::BEGIN@3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Carp::Heavy;
2
3269µs17µs
# spent 7µs within Carp::Heavy::BEGIN@3 which was called: # once (7µs+0s) by Archive::Zip::BEGIN@11 at line 3
use Carp ();
# spent 7µs making 1 call to Carp::Heavy::BEGIN@3
4
51300nsour $VERSION = '1.54';
61600ns$VERSION =~ tr/_//d;
7
8# Carp::Heavy was merged into Carp in version 1.12. Any mismatched versions
9# after this point are not significant and can be ignored.
1012µsif(($Carp::VERSION || 0) < 1.12) {
11 my $cv = defined($Carp::VERSION) ? $Carp::VERSION : "undef";
12 die "Version mismatch between Carp $cv ($INC{q(Carp.pm)}) and Carp::Heavy $VERSION ($INC{q(Carp/Heavy.pm)}). Did you alter \@INC after Carp was loaded?\n";
13}
14
15114µs1;
16
17# Most of the machinery of Carp used to be here.
18# It has been moved in Carp.pm now, but this placeholder remains for
19# the benefit of modules that like to preload Carp::Heavy directly.
20# This must load Carp, because some modules rely on the historical
21# behaviour of Carp::Heavy loading Carp.










Spreadsheet-ParseXLSX-0.35/nytprof/XML-Parser-pm-132-line.html0000644000175000017500000020161214576335353022566 0ustar michamicha Profile of XML/Parser.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/XML/Parser.pm
StatementsExecuted 1157 statements in 1.52ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.19ms2.51msXML::Parser::::BEGIN@17XML::Parser::BEGIN@17
711292µs70.4sXML::Parser::::parseXML::Parser::parse
1431141µs141µsXML::Parser::::setHandlersXML::Parser::setHandlers
71182µs82µsXML::Parser::::newXML::Parser::new
11110µs11µsXML::Parser::::BEGIN@11XML::Parser::BEGIN@11
1114µs24µsXML::Parser::::BEGIN@15XML::Parser::BEGIN@15
0000s0sXML::Parser::::file_ext_ent_cleanupXML::Parser::file_ext_ent_cleanup
0000s0sXML::Parser::::file_ext_ent_handlerXML::Parser::file_ext_ent_handler
0000s0sXML::Parser::::initial_ext_ent_handlerXML::Parser::initial_ext_ent_handler
0000s0sXML::Parser::::parse_startXML::Parser::parse_start
0000s0sXML::Parser::::parsefileXML::Parser::parsefile
0000s0sXML::Parser::::parsestringXML::Parser::parsestring
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# XML::Parser
2#
3# Copyright (c) 1998-2000 Larry Wall and Clark Cooper
4# All rights reserved.
5#
6# This program is free software; you can redistribute it and/or
7# modify it under the same terms as Perl itself.
8
9package XML::Parser;
10
11231µs213µs
# spent 11µs (10+2) within XML::Parser::BEGIN@11 which was called: # once (10µs+2µs) by XML::Twig::BEGIN@151 at line 11
use strict;
# spent 11µs making 1 call to XML::Parser::BEGIN@11 # spent 2µs making 1 call to strict::import
12
13our ( $VERSION, $LWP_load_failed );
14
15231µs245µs
# spent 24µs (4+21) within XML::Parser::BEGIN@15 which was called: # once (4µs+21µs) by XML::Twig::BEGIN@151 at line 15
use Carp;
# spent 24µs making 1 call to XML::Parser::BEGIN@15 # spent 21µs making 1 call to Exporter::import
16
17
# spent 2.51ms (2.19+321µs) within XML::Parser::BEGIN@17 which was called: # once (2.19ms+321µs) by XML::Twig::BEGIN@151 at line 22
BEGIN {
18154µs require XML::Parser::Expat;
191200ns $VERSION = '2.47';
2012µs die "Parser.pm and Expat.pm versions don't match"
21 unless $VERSION eq $XML::Parser::Expat::VERSION;
221888µs12.51ms}
# spent 2.51ms making 1 call to XML::Parser::BEGIN@17
23
241200ns$LWP_load_failed = 0;
25
26
# spent 82µs within XML::Parser::new which was called 7 times, avg 12µs/call: # 7 times (82µs+0s) by XML::Twig::new at line 465 of XML/Twig.pm, avg 12µs/call
sub new {
2774µs my ( $class, %args ) = @_;
2872µs my $style = $args{Style};
29
3074µs my $nonexopt = $args{Non_Expat_Options} ||= {};
31
3273µs $nonexopt->{Style} = 1;
3372µs $nonexopt->{Non_Expat_Options} = 1;
3472µs $nonexopt->{Handlers} = 1;
3572µs $nonexopt->{_HNDL_TYPES} = 1;
3672µs $nonexopt->{NoLWP} = 1;
37
38722µs $args{_HNDL_TYPES} = {%XML::Parser::Expat::Handler_Setters};
3973µs $args{_HNDL_TYPES}->{Init} = 1;
4072µs $args{_HNDL_TYPES}->{Final} = 1;
41
4274µs $args{Handlers} ||= {};
4371µs my $handlers = $args{Handlers};
44
4571µs if ( defined($style) ) {
46 my $stylepkg = $style;
47
48 if ( $stylepkg !~ /::/ ) {
49 $stylepkg = "\u$style";
50
51 eval {
52 my $fullpkg = "XML::Parser::Style::$stylepkg";
53 my $stylefile = $fullpkg;
54 $stylefile =~ s/::/\//g;
55 require "$stylefile.pm";
56 $stylepkg = $fullpkg;
57 };
58 if ($@) {
59
60 # fallback to old behaviour
61 $stylepkg = "XML::Parser::$stylepkg";
62 }
63 }
64
65 foreach my $htype ( keys %{ $args{_HNDL_TYPES} } ) {
66
67 # Handlers explicitly given override
68 # handlers from the Style package
69 unless ( defined( $handlers->{$htype} ) ) {
70
71 # A handler in the style package must either have
72 # exactly the right case as the type name or a
73 # completely lower case version of it.
74
75 my $hname = "${stylepkg}::$htype";
76 if ( defined(&$hname) ) {
77 $handlers->{$htype} = \&$hname;
78 next;
79 }
80
81 $hname = "${stylepkg}::\L$htype";
82 if ( defined(&$hname) ) {
83 $handlers->{$htype} = \&$hname;
84 next;
85 }
86 }
87 }
88 }
89
9074µs unless ( defined( $handlers->{ExternEnt} )
91 or defined( $handlers->{ExternEntFin} ) ) {
92
9373µs if ( $args{NoLWP} or $LWP_load_failed ) {
94 $handlers->{ExternEnt} = \&file_ext_ent_handler;
95 $handlers->{ExternEntFin} = \&file_ext_ent_cleanup;
96 }
97 else {
98 # The following just bootstraps the real LWP external entity
99 # handler
100
10176µs $handlers->{ExternEnt} = \&initial_ext_ent_handler;
102
103 # No cleanup function available until LWPExternEnt.pl loaded
104 }
105 }
106
10775µs $args{Pkg} ||= caller;
108711µs bless \%args, $class;
109} # End of new
110
111
# spent 141µs within XML::Parser::setHandlers which was called 14 times, avg 10µs/call: # 7 times (22µs+0s) by XML::Twig::new at line 740 of XML/Twig.pm, avg 3µs/call # 6 times (104µs+0s) by XML::Twig::new at line 734 of XML/Twig.pm, avg 17µs/call # once (16µs+0s) by XML::Twig::new at line 731 of XML/Twig.pm
sub setHandlers {
1121415µs my ( $self, @handler_pairs ) = @_;
113
114145µs croak('Uneven number of arguments to setHandlers method')
115 if ( int(@handler_pairs) & 1 );
116
117141µs my @ret;
118143µs while (@handler_pairs) {
11911815µs my $type = shift @handler_pairs;
12011810µs my $handler = shift @handler_pairs;
12111818µs unless ( defined( $self->{_HNDL_TYPES}->{$type} ) ) {
122 my @types = sort keys %{ $self->{_HNDL_TYPES} };
123
124 croak("Unknown Parser handler type: $type\n Valid types: @types");
125 }
12611826µs push( @ret, $type, $self->{Handlers}->{$type} );
12711838µs $self->{Handlers}->{$type} = $handler;
128 }
129
1301418µs return @ret;
131}
132
133sub parse_start {
134 my $self = shift;
135 my @expat_options = ();
136
137 my ( $key, $val );
138 while ( ( $key, $val ) = each %{$self} ) {
139 push( @expat_options, $key, $val )
140 unless exists $self->{Non_Expat_Options}->{$key};
141 }
142
143 my %handlers = %{ $self->{Handlers} };
144 my $init = delete $handlers{Init};
145 my $final = delete $handlers{Final};
146
147 my $expatnb = XML::Parser::ExpatNB->new( @expat_options, @_ );
148 $expatnb->setHandlers(%handlers);
149
150 &$init($expatnb)
151 if defined($init);
152
153 $expatnb->{_State_} = 1;
154
155 $expatnb->{FinalHandler} = $final
156 if defined($final);
157
158 return $expatnb;
159}
160
161
# spent 70.4s (292µs+70.4) within XML::Parser::parse which was called 7 times, avg 10.1s/call: # 7 times (292µs+70.4s) by XML::Twig::parse at line 770 of XML/Twig.pm, avg 10.1s/call
sub parse {
16271µs my $self = shift;
16371µs my $arg = shift;
16472µs my @expat_options = ();
16571µs my ( $key, $val );
16677µs while ( ( $key, $val ) = each %{$self} ) {
167 push( @expat_options, $key, $val )
16819491µs unless exists $self->{Non_Expat_Options}->{$key};
169 }
170
171716µs7126µs my $expat = XML::Parser::Expat->new( @expat_options, @_ );
# spent 126µs making 7 calls to XML::Parser::Expat::new, avg 18µs/call
172721µs my %handlers = %{ $self->{Handlers} };
17373µs my $init = delete $handlers{Init};
17472µs my $final = delete $handlers{Final};
175
176712µs7263µs $expat->setHandlers(%handlers);
# spent 263µs making 7 calls to XML::Parser::Expat::setHandlers, avg 38µs/call
177
17872µs if ( $self->{Base} ) {
179 $expat->base( $self->{Base} );
180 }
181
18276µs744µs &$init($expat)
# spent 44µs making 7 calls to XML::Twig::_twig_init, avg 6µs/call
183 if defined($init);
184
18572µs my @result = ();
1867700ns my $result;
1871425µs770.4s eval { $result = $expat->parse($arg); };
# spent 70.4s making 7 calls to XML::Parser::Expat::parse, avg 10.1s/call
18872µs my $err = $@;
18971µs if ($err) {
190 $expat->release;
191 die $err;
192 }
193
19474µs if ( $result and defined($final) ) {
195 if (wantarray) {
196 @result = &$final($expat);
197 }
198 else {
19977µs788µs $result = &$final($expat);
# spent 88µs making 7 calls to XML::Twig::_twig_final, avg 13µs/call
200 }
201 }
202
20377µs718µs $expat->release;
# spent 18µs making 7 calls to XML::Parser::Expat::release, avg 3µs/call
204
20572µs return unless defined wantarray;
206758µs7632µs return wantarray ? @result : $result;
# spent 632µs making 7 calls to XML::Parser::Expat::DESTROY, avg 90µs/call
207}
208
209sub parsestring {
210 my $self = shift;
211 $self->parse(@_);
212}
213
214sub parsefile {
215 my $self = shift;
216 my $file = shift;
217
218 open( my $fh, '<', $file ) or croak "Couldn't open $file:\n$!";
219 binmode($fh);
220 my @ret;
221 my $ret;
222
223 $self->{Base} = $file;
224
225 if (wantarray) {
226 eval { @ret = $self->parse( $fh, @_ ); };
227 }
228 else {
229 eval { $ret = $self->parse( $fh, @_ ); };
230 }
231 my $err = $@;
232 close($fh);
233 die $err if $err;
234
235 return unless defined wantarray;
236 return wantarray ? @ret : $ret;
237}
238
239sub initial_ext_ent_handler {
240
241 # This just bootstraps in the real lwp_ext_ent_handler which
242 # also loads the URI and LWP modules.
243
244 unless ($LWP_load_failed) {
245 local ($^W) = 0;
246
247 my $stat = eval { require('XML/Parser/LWPExternEnt.pl'); };
248
249 if ($stat) {
250 $_[0]->setHandlers(
251 ExternEnt => \&lwp_ext_ent_handler,
252 ExternEntFin => \&lwp_ext_ent_cleanup
253 );
254
255 goto &lwp_ext_ent_handler;
256 }
257
258 # Failed to load lwp handler, act as if NoLWP
259
260 $LWP_load_failed = 1;
261
262 my $cmsg = "Couldn't load LWP based external entity handler\n" . "Switching to file-based external entity handler\n" . " (To avoid this message, use NoLWP option to XML::Parser)\n";
263 warn($cmsg);
264 }
265
266 $_[0]->setHandlers(
267 ExternEnt => \&file_ext_ent_handler,
268 ExternEntFin => \&file_ext_ent_cleanup
269 );
270 goto &file_ext_ent_handler;
271
272}
273
274sub file_ext_ent_handler {
275 my ( $xp, $base, $path ) = @_;
276
277 # Prepend base only for relative paths
278
279 if ( defined($base)
280 and not( $path =~ m!^(?:[\\/]|\w+:)! ) ) {
281 my $newpath = $base;
282 $newpath =~ s![^\\/:]*$!$path!;
283 $path = $newpath;
284 }
285
286 if ( $path =~ /^\s*[|>+]/
287 or $path =~ /\|\s*$/ ) {
288 $xp->{ErrorMessage} .= "System ID ($path) contains Perl IO control characters";
289 return undef;
290 }
291
292 require IO::File;
293 my $fh = IO::File->new($path);
294 unless ( defined $fh ) {
295 $xp->{ErrorMessage} .= "Failed to open $path:\n$!";
296 return undef;
297 }
298
299 $xp->{_BaseStack} ||= [];
300 $xp->{_FhStack} ||= [];
301
302 push( @{ $xp->{_BaseStack} }, $base );
303 push( @{ $xp->{_FhStack} }, $fh );
304
305 $xp->base($path);
306
307 return $fh;
308}
309
310sub file_ext_ent_cleanup {
311 my ($xp) = @_;
312
313 my $fh = pop( @{ $xp->{_FhStack} } );
314 $fh->close;
315
316 my $base = pop( @{ $xp->{_BaseStack} } );
317 $xp->base($base);
318}
319
32012µs1;
321
322__END__










Spreadsheet-ParseXLSX-0.35/nytprof/UNIVERSAL-pm-130-line.html0000644000175000017500000006270514576335353022252 0ustar michamicha Profile of UNIVERSAL.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/UNIVERSAL.pm
StatementsExecuted 21 statements in 57µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
6785313426.8ms26.8msUNIVERSAL::::isaUNIVERSAL::isa (xsub)
6710673µs73µsUNIVERSAL::::canUNIVERSAL::can (xsub)
1212861µs61µsUNIVERSAL::::VERSIONUNIVERSAL::VERSION (xsub)
1919918µs18µsUNIVERSAL::::importUNIVERSAL::import
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package UNIVERSAL;
2
31300nsour $VERSION = '1.15';
4
5# UNIVERSAL should not contain any extra subs/methods beyond those
6# that it exists to define. The existence of import() below is a historical
7# accident that can't be fixed without breaking code.
8
9# Make sure that even though the import method is called, it doesn't do
10# anything unless called on UNIVERSAL.
11
# spent 18µs within UNIVERSAL::import which was called 19 times, avg 937ns/call: # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 15 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (2µs+0s) by XML::Twig::_use at line 1323 of XML/Twig.pm # once (1µs+0s) by XML::Twig::BEGIN@151 at line 151 of XML/Twig.pm # once (1µs+0s) by main::BEGIN@7 at line 7 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t # once (1µs+0s) by Crypt::Cipher::BEGIN@9 at line 9 of Crypt/Cipher.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@17 at line 17 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 at line 19 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 at line 18 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm # once (1µs+0s) by Crypt::Mode::CBC::BEGIN@9 at line 9 of Crypt/Mode/CBC.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@18 at line 18 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (900ns+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 at line 11 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm # once (800ns+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 at line 10 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm # once (700ns+0s) by XML::Twig::BEGIN@30 at line 30 of XML/Twig.pm # once (700ns+0s) by JSON::PP::BEGIN@12 at line 12 of JSON/PP.pm # once (700ns+0s) by XML::Parser::Expat::BEGIN@7 at line 7 of XML/Parser/Expat.pm # once (600ns+0s) by XML::Twig::BEGIN@148 at line 175 of XML/Twig.pm # once (600ns+0s) by Crypt::Mode::ECB::BEGIN@9 at line 9 of Crypt/Mode/ECB.pm # once (100ns+0s) by XML::Twig::BEGIN@148 at line 177 of XML/Twig.pm # once (100ns+0s) by XML::Twig::BEGIN@148 at line 176 of XML/Twig.pm
sub import {
121955µs return unless $_[0] eq __PACKAGE__;
13 return unless @_ > 1;
14 require Carp;
15 Carp::croak("UNIVERSAL does not export anything");
16}
17
1812µs1;
19__END__
 
# spent 61µs within UNIVERSAL::VERSION which was called 12 times, avg 5µs/call: # once (7µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 11 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (7µs+0s) by Test2::Util::BEGIN@11 at line 13 of Test2/Util.pm # once (6µs+0s) by File::Temp::BEGIN@149 at line 149 of File/Temp.pm # once (6µs+0s) by File::Temp::BEGIN@167 at line 167 of File/Temp.pm # once (6µs+0s) by URI::Escape::BEGIN@147 at line 147 of URI/Escape.pm # once (6µs+0s) by JSON::BEGIN@1 at line 1 of (eval 18)[JSON.pm:308] # once (5µs+0s) by File::Temp::BEGIN@176 at line 176 of File/Temp.pm # once (5µs+0s) by Encode::BEGIN@15 at line 15 of Encode.pm # once (5µs+0s) by File::Temp::BEGIN@147 at line 147 of File/Temp.pm # once (4µs+0s) by File::Temp::BEGIN@150 at line 150 of File/Temp.pm # once (4µs+0s) by Test::Builder::BEGIN@15 at line 24 of Scalar/Util.pm # once (2µs+0s) by JSON::Backend::PP::init at line 354 of JSON.pm
sub UNIVERSAL::VERSION; # xsub
# spent 73µs within UNIVERSAL::can which was called 67 times, avg 1µs/call: # 31 times (44µs+0s) by Test2::Util::HashBase::import at line 72 of Test2/Util/HashBase.pm, avg 1µs/call # 8 times (6µs+0s) by Archive::Zip::_CAN at line 335 of Archive/Zip.pm, avg 775ns/call # 7 times (5µs+0s) by Archive::Zip::Member::rewindData at line 1201 of Archive/Zip/Member.pm, avg 771ns/call # 7 times (5µs+0s) by Archive::Zip::Member::rewindData at line 1232 of Archive/Zip/Member.pm, avg 743ns/call # 7 times (5µs+0s) by Test2::Util::HashBase::_new at line 153 of Test2/Util/HashBase.pm, avg 671ns/call # 2 times (2µs+0s) by Test::Builder::use_numbers at line 1222 of Test/Builder.pm, avg 1µs/call # 2 times (2µs+0s) by Test2::API::Instance::BEGIN@53 at line 55 of Test2/API/Instance.pm, avg 1µs/call # once (2µs+0s) by Test2::API::Instance::_finalize at line 193 of Test2/API/Instance.pm # once (900ns+0s) by Test::Builder::Formatter::BEGIN@11 at line 12 of Test/Builder/Formatter.pm # once (500ns+0s) by Test::Builder::Formatter::BEGIN@11 at line 13 of Test/Builder/Formatter.pm
sub UNIVERSAL::can; # xsub
# spent 26.8ms within UNIVERSAL::isa which was called 67853 times, avg 395ns/call: # 67768 times (26.7ms+0s) by XML::Twig::Elt::in at line 6590 of XML/Twig.pm, avg 395ns/call # 16 times (26µs+0s) by XML::Twig::get_xpath at line 3686 of XML/Twig.pm, avg 2µs/call # 14 times (4µs+0s) by XML::Twig::Elt::set_output_filter at line 8353 of XML/Twig.pm, avg 271ns/call # 14 times (1µs+0s) by XML::Twig::Elt::set_output_text_filter at line 8371 of XML/Twig.pm, avg 100ns/call # 10 times (6µs+0s) by XML::Twig::setTwigRoots at line 1937 of XML/Twig.pm, avg 600ns/call # 7 times (12µs+0s) by XML::Twig::_twig_final at line 2727 of XML/Twig.pm, avg 2µs/call # 7 times (4µs+0s) by XML::Twig::parse at line 760 of XML/Twig.pm, avg 643ns/call # 6 times (4µs+0s) by XML::Twig::DESTROY at line 3963 of XML/Twig.pm, avg 600ns/call # 4 times (6µs+0s) by base::import at line 96 of base.pm, avg 2µs/call # 4 times (3µs+0s) by Archive::Zip::_ISA at line 330 of Archive/Zip.pm, avg 750ns/call # once (800ns+0s) by XML::Twig::Elt::next_elt at line 6419 of XML/Twig.pm # once (600ns+0s) by Test::Builder::reset at line 470 of Test/Builder.pm # once (400ns+0s) by Test::Builder::reset_outputs at line 1412 of Test/Builder.pm
sub UNIVERSAL::isa; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-Font-pm-124-line.html0000644000175000017500000004777714576335353026125 0ustar michamicha Profile of Spreadsheet/ParseExcel/Font.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel/Font.pm
StatementsExecuted 15 statements in 70µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
31110µs10µsSpreadsheet::ParseExcel::Font::::newSpreadsheet::ParseExcel::Font::new
1119µs10µsSpreadsheet::ParseExcel::Font::::BEGIN@19Spreadsheet::ParseExcel::Font::BEGIN@19
1113µs18µsSpreadsheet::ParseExcel::Font::::BEGIN@20Spreadsheet::ParseExcel::Font::BEGIN@20
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel::Font;
2
3###############################################################################
4#
5# Spreadsheet::ParseExcel::Font - A class for Cell fonts.
6#
7# Used in conjunction with Spreadsheet::ParseExcel.
8#
9# Copyright (c) 2014 Douglas Wilson
10# Copyright (c) 2009-2013 John McNamara
11# Copyright (c) 2006-2008 Gabor Szabo
12# Copyright (c) 2000-2006 Kawai Takanori
13#
14# perltidy with standard settings.
15#
16# Documentation after __END__
17#
18
19216µs212µs
# spent 10µs (9+2) within Spreadsheet::ParseExcel::Font::BEGIN@19 which was called: # once (9µs+2µs) by Spreadsheet::ParseExcel::BEGIN@33 at line 19
use strict;
# spent 10µs making 1 call to Spreadsheet::ParseExcel::Font::BEGIN@19 # spent 2µs making 1 call to strict::import
20240µs233µs
# spent 18µs (3+15) within Spreadsheet::ParseExcel::Font::BEGIN@20 which was called: # once (3µs+15µs) by Spreadsheet::ParseExcel::BEGIN@33 at line 20
use warnings;
# spent 18µs making 1 call to Spreadsheet::ParseExcel::Font::BEGIN@20 # spent 15µs making 1 call to warnings::import
21
221300nsour $VERSION = '0.66';
23
24
# spent 10µs within Spreadsheet::ParseExcel::Font::new which was called 3 times, avg 3µs/call: # 3 times (10µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 872 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 3µs/call
sub new {
2537µs my ( $class, %rhIni ) = @_;
263700ns my $self = \%rhIni;
27
2834µs bless $self, $class;
29}
30
3112µs1;
32
33__END__










Spreadsheet-ParseXLSX-0.35/nytprof/IO-pm-80-line.html0000644000175000017500000005023514576335353021130 0ustar michamicha Profile of IO.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/IO.pm
StatementsExecuted 11 statements in 320µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116µs6µsIO::::BEGIN@5IO::BEGIN@5
1113µs23µsIO::::BEGIN@6IO::BEGIN@6
1113µs4µsIO::::BEGIN@7IO::BEGIN@7
1112µs18µsIO::::BEGIN@8IO::BEGIN@8
0000s0sIO::::importIO::import
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2
3package IO;
4
5216µs16µs
# spent 6µs within IO::BEGIN@5 which was called: # once (6µs+0s) by IO::Handle::BEGIN@276 at line 5
use XSLoader ();
# spent 6µs making 1 call to IO::BEGIN@5
6212µs243µs
# spent 23µs (3+20) within IO::BEGIN@6 which was called: # once (3µs+20µs) by IO::Handle::BEGIN@276 at line 6
use Carp;
# spent 23µs making 1 call to IO::BEGIN@6 # spent 20µs making 1 call to Exporter::import
7211µs26µs
# spent 4µs (3+1) within IO::BEGIN@7 which was called: # once (3µs+1µs) by IO::Handle::BEGIN@276 at line 7
use strict;
# spent 4µs making 1 call to IO::BEGIN@7 # spent 1µs making 1 call to strict::import
82136µs233µs
# spent 18µs (2+15) within IO::BEGIN@8 which was called: # once (2µs+15µs) by IO::Handle::BEGIN@276 at line 8
use warnings;
# spent 18µs making 1 call to IO::BEGIN@8 # spent 15µs making 1 call to warnings::import
9
101300nsour $VERSION = "1.55";
111141µs1135µsXSLoader::load 'IO', $VERSION;
# spent 135µs making 1 call to XSLoader::load
12
13sub import {
14 shift;
15
16 warnings::warnif('deprecated', qq{Parameterless "use IO" deprecated})
17 if @_ == 0 ;
18
19 my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir);
20
21 local @INC = @INC;
22 pop @INC if $INC[-1] eq '.';
23 eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l)
24 or croak $@;
25}
26
2713µs1;
28
29__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 57)[XML-Twig-pm-1323]-172-line.html0000644000175000017500000003014614576335353024335 0ustar michamicha Profile of (eval 57)[XML/Twig.pm:1323]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 57)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1323]
StatementsExecuted 1 statements in 66µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1323
Line State
ments
Time
on line
Calls Time
in subs
Code
1166µsrequire URI
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 2)[Carp-pm-21]-14-line.html0000644000175000017500000003005514576335353023324 0ustar michamicha Profile of (eval 2)[Carp.pm:21]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 2)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm:21]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm line 21
Line State
ments
Time
on line
Calls Time
in subs
Code
112µs1.65
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 85)[XML-Twig-pm-7113]-202-line.html0000644000175000017500000004065014576335353024334 0ustar michamicha Profile of (eval 85)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 85)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 10 statements in 82µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs389µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1115µs15µsXML::Twig::Elt::::BEGIN@1.29XML::Twig::Elt::BEGIN@1.29
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11082µs5406µs
# spent 389µs (7+382) within XML::Twig::Elt::__ANON__[(eval 85)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (7µs+382µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 15µs (5+9) within XML::Twig::Elt::BEGIN@1.29 which was called: # once (5µs+9µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:numFmts') } @results;@results= grep defined, map { $_->children( 's:numFmt') } @results;return XML::Twig::_unique_elts( @results); }
# spent 375µs making 1 call to XML::Twig::descendants # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.29 # spent 9µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig # spent 2µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Skip-pm-59-line.html0000644000175000017500000006047214576335353023617 0ustar michamicha Profile of Test2/Event/Skip.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Skip.pm
StatementsExecuted 10 statements in 189µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsTest2::Event::Skip::::BEGIN@2Test2::Event::Skip::BEGIN@2
1117µs7µsTest2::Event::Skip::::BEGIN@8Test2::Event::Skip::BEGIN@8
1113µs45µsTest2::Event::Skip::::BEGIN@9Test2::Event::Skip::BEGIN@9
1113µs20µsTest2::Event::Skip::::BEGIN@3Test2::Event::Skip::BEGIN@3
0000s0sTest2::Event::Skip::::causes_failTest2::Event::Skip::causes_fail
0000s0sTest2::Event::Skip::::extra_amnestyTest2::Event::Skip::extra_amnesty
0000s0sTest2::Event::Skip::::initTest2::Event::Skip::init
0000s0sTest2::Event::Skip::::summaryTest2::Event::Skip::summary
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Skip;
2217µs213µs
# spent 11µs (10+2) within Test2::Event::Skip::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@99 at line 2
use strict;
# spent 11µs making 1 call to Test2::Event::Skip::BEGIN@2 # spent 2µs making 1 call to strict::import
3233µs236µs
# spent 20µs (3+16) within Test2::Event::Skip::BEGIN@3 which was called: # once (3µs+16µs) by Test2::API::BEGIN@99 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Event::Skip::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7
8221µs17µs
# spent 7µs within Test2::Event::Skip::BEGIN@8 which was called: # once (7µs+0s) by Test2::API::BEGIN@99 at line 8
BEGIN { require Test2::Event::Ok; our @ISA = qw(Test2::Event::Ok) }
# spent 7µs making 1 call to Test2::Event::Skip::BEGIN@8
92116µs287µs
# spent 45µs (3+42) within Test2::Event::Skip::BEGIN@9 which was called: # once (3µs+42µs) by Test2::API::BEGIN@99 at line 9
use Test2::Util::HashBase qw{reason};
# spent 45µs making 1 call to Test2::Event::Skip::BEGIN@9 # spent 42µs making 1 call to Test2::Util::HashBase::import
10
11sub init {
12 my $self = shift;
13 $self->SUPER::init;
14 $self->{+EFFECTIVE_PASS} = 1;
15}
16
17sub causes_fail { 0 }
18
19sub summary {
20 my $self = shift;
21 my $out = $self->SUPER::summary(@_);
22
23 if (my $reason = $self->reason) {
24 $out .= " (SKIP: $reason)";
25 }
26 else {
27 $out .= " (SKIP)";
28 }
29
30 return $out;
31}
32
33sub extra_amnesty {
34 my $self = shift;
35
36 my @out;
37
38 push @out => {
39 tag => 'TODO',
40 details => $self->{+TODO},
41 } if defined $self->{+TODO};
42
43 push @out => {
44 tag => 'skip',
45 details => $self->{+REASON},
46 inherited => 0,
47 };
48
49 return @out;
50}
51
5212µs1;
53
54__END__










Spreadsheet-ParseXLSX-0.35/nytprof/bytes-pm-82-line.html0000644000175000017500000005060714576335353021754 0ustar michamicha Profile of bytes.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/bytes.pm
StatementsExecuted 12 statements in 164µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11114µs28µsbytes::::BEGIN@4bytes::BEGIN@4
1119µs10µsbytes::::BEGIN@3bytes::BEGIN@3
5548µs8µsbytes::::importbytes::import
0000s0sbytes::::AUTOLOADbytes::AUTOLOAD
0000s0sbytes::::unimportbytes::unimport
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package bytes;
2
3231µs212µs
# spent 10µs (9+1) within bytes::BEGIN@3 which was called: # once (9µs+1µs) by Compress::Raw::Zlib::BEGIN@10 at line 3
use strict;
# spent 10µs making 1 call to bytes::BEGIN@3 # spent 1µs making 1 call to strict::import
42106µs242µs
# spent 28µs (14+14) within bytes::BEGIN@4 which was called: # once (14µs+14µs) by Compress::Raw::Zlib::BEGIN@10 at line 4
use warnings;
# spent 28µs making 1 call to bytes::BEGIN@4 # spent 14µs making 1 call to warnings::import
5
61200nsour $VERSION = '1.08';
7
81100ns$bytes::hint_bits = 0x00000008;
9
10
# spent 8µs within bytes::import which was called 5 times, avg 2µs/call: # once (2µs+0s) by JSON::PP::BEGIN@790 at line 790 of JSON/PP.pm # once (2µs+0s) by XML::Twig::BEGIN@2455 at line 2455 of XML/Twig.pm # once (2µs+0s) by Compress::Raw::Zlib::BEGIN@10 at line 10 of Compress/Raw/Zlib.pm # once (1µs+0s) by Encode::utf8::BEGIN@229 at line 229 of Encode.pm # once (1µs+0s) by JSON::PP::IncrParser::BEGIN@1547 at line 1547 of JSON/PP.pm
sub import {
11525µs $^H |= $bytes::hint_bits;
12}
13
14sub unimport {
15 $^H &= ~$bytes::hint_bits;
16}
17
18our $AUTOLOAD;
19sub AUTOLOAD {
20 require "bytes_heavy.pl";
21 goto &$AUTOLOAD if defined &$AUTOLOAD;
22 require Carp;
23 Carp::croak("Undefined subroutine $AUTOLOAD called");
24}
25
26sub length (_);
27sub chr (_);
28sub ord (_);
29sub substr ($$;$$);
30sub index ($$;$);
31sub rindex ($$;$);
32
3312µs1;
34__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 73)[XML-Twig-pm-5871]-190-line.html0000644000175000017500000004450614576335353024354 0ustar michamicha Profile of (eval 73)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 73)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 32 statements in 109µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

NOTE!
The data used to generate this report page was merged from 3 of the 37 executions
of the string eval on line 5871 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
23317µs7µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1] (merge of 3 subs)
1116µs16µsXML::Twig::Elt::::BEGIN@1.33XML::Twig::Elt::BEGIN@1.33
1115µs15µsXML::Twig::Elt::::BEGIN@1.17XML::Twig::Elt::BEGIN@1.17
1115µs14µsXML::Twig::Elt::::BEGIN@1.27XML::Twig::Elt::BEGIN@1.27
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
132109µs673µs
# spent 15µs (5+10) within XML::Twig::Elt::BEGIN@1.17 which was called: # once (5µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.33 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 7µs within XML::Twig::Elt::__ANON__[(eval 73)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 23 times, avg 322ns/call: # (data for this subroutine includes 2 others that were merged with it) # 13 times (5µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 400ns/call # 8 times (2µs+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 212ns/call # 2 times (500ns+0s) by XML::Twig::Elt::next_sibling at line 6071 of XML/Twig.pm, avg 250ns/call # spent 14µs (5+9) within XML::Twig::Elt::BEGIN@1.27 which was called: # once (5µs+9µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 33) ? $_[0] : undef; }
# spent 28µs making 3 calls to warnings::unimport, avg 9µs/call # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.33 # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.17 # spent 14µs making 1 call to XML::Twig::Elt::BEGIN@1.27
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-Cell-pm-126-line.html0000644000175000017500000012246014576335353026057 0ustar michamicha Profile of Spreadsheet/ParseExcel/Cell.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel/Cell.pm
StatementsExecuted 608731 statements in 733ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
20290711362ms362msSpreadsheet::ParseExcel::Cell::::newSpreadsheet::ParseExcel::Cell::new
1118µs10µsSpreadsheet::ParseExcel::Cell::::BEGIN@19Spreadsheet::ParseExcel::Cell::BEGIN@19
1118µs20µsSpreadsheet::ParseExcel::Cell::::BEGIN@169Spreadsheet::ParseExcel::Cell::BEGIN@169
1116µs20µsSpreadsheet::ParseExcel::Cell::::BEGIN@20Spreadsheet::ParseExcel::Cell::BEGIN@20
0000s0sSpreadsheet::ParseExcel::Cell::::encodingSpreadsheet::ParseExcel::Cell::encoding
0000s0sSpreadsheet::ParseExcel::Cell::::get_formatSpreadsheet::ParseExcel::Cell::get_format
0000s0sSpreadsheet::ParseExcel::Cell::::get_hyperlinkSpreadsheet::ParseExcel::Cell::get_hyperlink
0000s0sSpreadsheet::ParseExcel::Cell::::get_rich_textSpreadsheet::ParseExcel::Cell::get_rich_text
0000s0sSpreadsheet::ParseExcel::Cell::::is_mergedSpreadsheet::ParseExcel::Cell::is_merged
0000s0sSpreadsheet::ParseExcel::Cell::::typeSpreadsheet::ParseExcel::Cell::type
0000s0sSpreadsheet::ParseExcel::Cell::::unformattedSpreadsheet::ParseExcel::Cell::unformatted
0000s0sSpreadsheet::ParseExcel::Cell::::valueSpreadsheet::ParseExcel::Cell::value
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel::Cell;
2
3###############################################################################
4#
5# Spreadsheet::ParseExcel::Cell - A class for Cell data and formatting.
6#
7# Used in conjunction with Spreadsheet::ParseExcel.
8#
9# Copyright (c) 2014 Douglas Wilson
10# Copyright (c) 2009-2013 John McNamara
11# Copyright (c) 2006-2008 Gabor Szabo
12# Copyright (c) 2000-2006 Kawai Takanori
13#
14# perltidy with standard settings.
15#
16# Documentation after __END__
17#
18
19215µs211µs
# spent 10µs (8+1) within Spreadsheet::ParseExcel::Cell::BEGIN@19 which was called: # once (8µs+1µs) by Spreadsheet::ParseExcel::BEGIN@35 at line 19
use strict;
# spent 10µs making 1 call to Spreadsheet::ParseExcel::Cell::BEGIN@19 # spent 1µs making 1 call to strict::import
202221µs234µs
# spent 20µs (6+14) within Spreadsheet::ParseExcel::Cell::BEGIN@20 which was called: # once (6µs+14µs) by Spreadsheet::ParseExcel::BEGIN@35 at line 20
use warnings;
# spent 20µs making 1 call to Spreadsheet::ParseExcel::Cell::BEGIN@20 # spent 14µs making 1 call to warnings::import
21
221200nsour $VERSION = '0.66';
23
24###############################################################################
25#
26# new()
27#
28# Constructor.
29#
30
# spent 362ms within Spreadsheet::ParseExcel::Cell::new which was called 202907 times, avg 2µs/call: # 202907 times (362ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 424 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 2µs/call
sub new {
31202907229ms my ( $package, %properties ) = @_;
3220290729.5ms my $self = \%properties;
33
34202907474ms bless $self, $package;
35}
36
37###############################################################################
38#
39# value()
40#
41# Returns the formatted value of the cell.
42#
43sub value {
44
45 my $self = shift;
46
47 return $self->{_Value};
48}
49
50###############################################################################
51#
52# unformatted()
53#
54# Returns the unformatted value of the cell.
55#
56sub unformatted {
57
58 my $self = shift;
59
60 return $self->{Val};
61}
62
63###############################################################################
64#
65# get_format()
66#
67# Returns the Format object for the cell.
68#
69sub get_format {
70
71 my $self = shift;
72
73 return $self->{Format};
74}
75
76###############################################################################
77#
78# type()
79#
80# Returns the type of cell such as Text, Numeric or Date.
81#
82sub type {
83
84 my $self = shift;
85
86 return $self->{Type};
87}
88
89###############################################################################
90#
91# encoding()
92#
93# Returns the character encoding of the cell.
94#
95sub encoding {
96
97 my $self = shift;
98
99 if ( !defined $self->{Code} ) {
100 return 1;
101 }
102 elsif ( $self->{Code} eq 'ucs2' ) {
103 return 2;
104 }
105 elsif ( $self->{Code} eq '_native_' ) {
106 return 3;
107 }
108 else {
109 return 0;
110 }
111
112 return $self->{Code};
113}
114
115###############################################################################
116#
117# is_merged()
118#
119# Returns true if the cell is merged.
120#
121sub is_merged {
122
123 my $self = shift;
124
125 return $self->{Merged};
126}
127
128###############################################################################
129#
130# get_rich_text()
131#
132# Returns an array ref of font information about each string block in a "rich",
133# i.e. multi-format, string.
134#
135sub get_rich_text {
136
137 my $self = shift;
138
139 return $self->{Rich};
140}
141
142###############################################################################
143#
144# get_hyperlink {
145#
146# Returns an array ref of hyperlink information if the cell contains a hyperlink.
147# Returns undef otherwise
148#
149# [0] : Description of link (You may want $cell->value, as it will have rich text)
150# [1] : URL - the link expressed as a URL. N.B. relative URLs will be defaulted to
151# the directory of the input file, if the input file name is known. Otherwise
152# %REL% will be inserted as a place-holder. Depending on your application,
153# you should either remove %REL% or replace it with the appropriate path.
154# [2] : Target frame (or undef if none)
155
156sub get_hyperlink {
157 my $self = shift;
158
159 return $self->{Hyperlink} if exists $self->{Hyperlink};
160 return undef;
161}
162
163#
164###############################################################################
165#
166# Mapping between legacy method names and new names.
167#
168{
169328µs232µs
# spent 20µs (8+12) within Spreadsheet::ParseExcel::Cell::BEGIN@169 which was called: # once (8µs+12µs) by Spreadsheet::ParseExcel::BEGIN@35 at line 169
no warnings; # Ignore warnings about variables used only once.
# spent 20µs making 1 call to Spreadsheet::ParseExcel::Cell::BEGIN@169 # spent 12µs making 1 call to warnings::unimport
1701900ns *Value = \&value;
171}
172
17312µs1;
174
175__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-pm-30-line.html0000644000175000017500000005177114576335353023645 0ustar michamicha Profile of Test2/EventFacet.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet.pm
StatementsExecuted 11 statements in 209µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111792µs1.26msTest2::EventFacet::::BEGIN@7Test2::EventFacet::BEGIN@7
1119µs10µsTest2::EventFacet::::BEGIN@2Test2::EventFacet::BEGIN@2
1117µs22µsTest2::EventFacet::::BEGIN@3Test2::EventFacet::BEGIN@3
1115µs23µsTest2::EventFacet::::BEGIN@8Test2::EventFacet::BEGIN@8
0000s0sTest2::EventFacet::::cloneTest2::EventFacet::clone
0000s0sTest2::EventFacet::::facet_keyTest2::EventFacet::facet_key
0000s0sTest2::EventFacet::::is_listTest2::EventFacet::is_list
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet;
2217µs212µs
# spent 10µs (9+1) within Test2::EventFacet::BEGIN@2 which was called: # once (9µs+1µs) by Test2::EventFacet::Trace::BEGIN@7 at line 2
use strict;
# spent 10µs making 1 call to Test2::EventFacet::BEGIN@2 # spent 2µs making 1 call to strict::import
3228µs238µs
# spent 22µs (7+15) within Test2::EventFacet::BEGIN@3 which was called: # once (7µs+15µs) by Test2::EventFacet::Trace::BEGIN@7 at line 3
use warnings;
# spent 22µs making 1 call to Test2::EventFacet::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7288µs21.30ms
# spent 1.26ms (792µs+473µs) within Test2::EventFacet::BEGIN@7 which was called: # once (792µs+473µs) by Test2::EventFacet::Trace::BEGIN@7 at line 7
use Test2::Util::HashBase qw/-details/;
# spent 1.26ms making 1 call to Test2::EventFacet::BEGIN@7 # spent 40µs making 1 call to Test2::Util::HashBase::import
8273µs241µs
# spent 23µs (5+18) within Test2::EventFacet::BEGIN@8 which was called: # once (5µs+18µs) by Test2::EventFacet::Trace::BEGIN@7 at line 8
use Carp qw/croak/;
# spent 23µs making 1 call to Test2::EventFacet::BEGIN@8 # spent 18µs making 1 call to Exporter::import
9
101100nsmy $SUBLEN = length(__PACKAGE__ . '::');
11sub facet_key {
12 my $key = ref($_[0]) || $_[0];
13 substr($key, 0, $SUBLEN, '');
14 return lc($key);
15}
16
17sub is_list { 0 }
18
19sub clone {
20 my $self = shift;
21 my $type = ref($self);
22 return bless {%$self, @_}, $type;
23}
24
2512µs1;
26
27__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Errno-pm-91-line.html0000644000175000017500000014364614576335353021721 0ustar michamicha Profile of Errno.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Errno.pm
StatementsExecuted 285 statements in 609µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111115µs115µsErrno::::BEGIN@21Errno::BEGIN@21
11133µs40µsErrno::::BEGIN@11Errno::BEGIN@11
1119µs13µsErrno::::BEGIN@8Errno::BEGIN@8
1116µs7µsErrno::::_tie_itErrno::_tie_it
1113µs5µsErrno::::BEGIN@9Errno::BEGIN@9
111900ns900nsErrno::::TIEHASHErrno::TIEHASH
0000s0sErrno::::EXISTSErrno::EXISTS
0000s0sErrno::::FETCHErrno::FETCH
0000s0sErrno::::FIRSTKEYErrno::FIRSTKEY
0000s0sErrno::::NEXTKEYErrno::NEXTKEY
0000s0sErrno::::STOREErrno::STORE
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# -*- buffer-read-only: t -*-
2#
3# This file is auto-generated by ext/Errno/Errno_pm.PL.
4# ***ANY*** changes here will be lost.
5#
6
7package Errno;
8214µs218µs
# spent 13µs (9+4) within Errno::BEGIN@8 which was called: # once (9µs+4µs) by File::Temp::BEGIN@152 at line 8
use Exporter 'import';
# spent 13µs making 1 call to Errno::BEGIN@8 # spent 4µs making 1 call to Exporter::import
9212µs26µs
# spent 5µs (3+1) within Errno::BEGIN@9 which was called: # once (3µs+1µs) by File::Temp::BEGIN@152 at line 9
use strict;
# spent 5µs making 1 call to Errno::BEGIN@9 # spent 1µs making 1 call to strict::import
10
112202µs247µs
# spent 40µs (33+7) within Errno::BEGIN@11 which was called: # once (33µs+7µs) by File::Temp::BEGIN@152 at line 11
use Config;
# spent 40µs making 1 call to Errno::BEGIN@11 # spent 7µs making 1 call to Config::import
1216µs24µs"$Config{'archname'}-$Config{'osvers'}" eq
# spent 4µs making 2 calls to Config::FETCH, avg 2µs/call
13"x86_64-linux-6.2.0-39-generic" or
14 die "Errno architecture (x86_64-linux-6.2.0-39-generic) does not match executable architecture ($Config{'archname'}-$Config{'osvers'})";
15
161200nsour $VERSION = "1.37";
17110µs$VERSION = eval $VERSION;
# spent 2µs executing statements in string eval
18
191200nsmy %err;
20
21
# spent 115µs within Errno::BEGIN@21 which was called: # once (115µs+0s) by File::Temp::BEGIN@152 at line 177
BEGIN {
22122µs %err = (
23 EPERM => 1,
24 ENOENT => 2,
25 ESRCH => 3,
26 EINTR => 4,
27 EIO => 5,
28 ENXIO => 6,
29 E2BIG => 7,
30 ENOEXEC => 8,
31 EBADF => 9,
32 ECHILD => 10,
33 EAGAIN => 11,
34 EWOULDBLOCK => 11,
35 ENOMEM => 12,
36 EACCES => 13,
37 EFAULT => 14,
38 ENOTBLK => 15,
39 EBUSY => 16,
40 EEXIST => 17,
41 EXDEV => 18,
42 ENODEV => 19,
43 ENOTDIR => 20,
44 EISDIR => 21,
45 EINVAL => 22,
46 ENFILE => 23,
47 EMFILE => 24,
48 ENOTTY => 25,
49 ETXTBSY => 26,
50 EFBIG => 27,
51 ENOSPC => 28,
52 ESPIPE => 29,
53 EROFS => 30,
54 EMLINK => 31,
55 EPIPE => 32,
56 EDOM => 33,
57 ERANGE => 34,
58 EDEADLK => 35,
59 EDEADLOCK => 35,
60 ENAMETOOLONG => 36,
61 ENOLCK => 37,
62 ENOSYS => 38,
63 ENOTEMPTY => 39,
64 ELOOP => 40,
65 ENOMSG => 42,
66 EIDRM => 43,
67 ECHRNG => 44,
68 EL2NSYNC => 45,
69 EL3HLT => 46,
70 EL3RST => 47,
71 ELNRNG => 48,
72 EUNATCH => 49,
73 ENOCSI => 50,
74 EL2HLT => 51,
75 EBADE => 52,
76 EBADR => 53,
77 EXFULL => 54,
78 ENOANO => 55,
79 EBADRQC => 56,
80 EBADSLT => 57,
81 EBFONT => 59,
82 ENOSTR => 60,
83 ENODATA => 61,
84 ETIME => 62,
85 ENOSR => 63,
86 ENONET => 64,
87 ENOPKG => 65,
88 EREMOTE => 66,
89 ENOLINK => 67,
90 EADV => 68,
91 ESRMNT => 69,
92 ECOMM => 70,
93 EPROTO => 71,
94 EMULTIHOP => 72,
95 EDOTDOT => 73,
96 EBADMSG => 74,
97 EOVERFLOW => 75,
98 ENOTUNIQ => 76,
99 EBADFD => 77,
100 EREMCHG => 78,
101 ELIBACC => 79,
102 ELIBBAD => 80,
103 ELIBSCN => 81,
104 ELIBMAX => 82,
105 ELIBEXEC => 83,
106 EILSEQ => 84,
107 ERESTART => 85,
108 ESTRPIPE => 86,
109 EUSERS => 87,
110 ENOTSOCK => 88,
111 EDESTADDRREQ => 89,
112 EMSGSIZE => 90,
113 EPROTOTYPE => 91,
114 ENOPROTOOPT => 92,
115 EPROTONOSUPPORT => 93,
116 ESOCKTNOSUPPORT => 94,
117 ENOTSUP => 95,
118 EOPNOTSUPP => 95,
119 EPFNOSUPPORT => 96,
120 EAFNOSUPPORT => 97,
121 EADDRINUSE => 98,
122 EADDRNOTAVAIL => 99,
123 ENETDOWN => 100,
124 ENETUNREACH => 101,
125 ENETRESET => 102,
126 ECONNABORTED => 103,
127 ECONNRESET => 104,
128 ENOBUFS => 105,
129 EISCONN => 106,
130 ENOTCONN => 107,
131 ESHUTDOWN => 108,
132 ETOOMANYREFS => 109,
133 ETIMEDOUT => 110,
134 ECONNREFUSED => 111,
135 EHOSTDOWN => 112,
136 EHOSTUNREACH => 113,
137 EALREADY => 114,
138 EINPROGRESS => 115,
139 ESTALE => 116,
140 EUCLEAN => 117,
141 ENOTNAM => 118,
142 ENAVAIL => 119,
143 EISNAM => 120,
144 EREMOTEIO => 121,
145 EDQUOT => 122,
146 ENOMEDIUM => 123,
147 EMEDIUMTYPE => 124,
148 ECANCELED => 125,
149 ENOKEY => 126,
150 EKEYEXPIRED => 127,
151 EKEYREVOKED => 128,
152 EKEYREJECTED => 129,
153 EOWNERDEAD => 130,
154 ENOTRECOVERABLE => 131,
155 ERFKILL => 132,
156 EHWPOISON => 133,
157 );
158 # Generate proxy constant subroutines for all the values.
159 # Well, almost all the values. Unfortunately we can't assume that at this
160 # point that our symbol table is empty, as code such as if the parser has
161 # seen code such as C<exists &Errno::EINVAL>, it will have created the
162 # typeglob.
163 # Doing this before defining @EXPORT_OK etc means that even if a platform is
164 # crazy enough to define EXPORT_OK as an error constant, everything will
165 # still work, because the parser will upgrade the PCS to a real typeglob.
166 # We rely on the subroutine definitions below to update the internal caches.
167 # Don't use %each, as we don't want a copy of the value.
168111µs foreach my $name (keys %err) {
16913433µs if ($Errno::{$name}) {
170 # We expect this to be reached fairly rarely, so take an approach
171 # which uses the least compile time effort in the common case:
172124µs eval "sub $name() { $err{$name} }; 1" or die $@;
# spent 2µs executing statements in string eval
173 } else {
17413325µs $Errno::{$name} = \$err{$name};
175 }
176 }
1771226µs1115µs}
# spent 115µs making 1 call to Errno::BEGIN@21
178
17915µsour @EXPORT_OK = keys %err;
180
18114µsour %EXPORT_TAGS = (
182 POSIX => [qw(
183 E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY
184 EBADF EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK
185 EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH
186 EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
187 EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS
188 ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK
189 ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
190 EPFNOSUPPORT EPIPE EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART
191 EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT
192 ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV
193 )],
194);
195
19614µs
# spent 900ns within Errno::TIEHASH which was called: # once (900ns+0s) by Errno::_tie_it at line 228
sub TIEHASH { bless \%err }
197
198sub FETCH {
199 my (undef, $errname) = @_;
200 return "" unless exists $err{$errname};
201 my $errno = $err{$errname};
202 return $errno == $! ? $errno : 0;
203}
204
205sub STORE {
206 require Carp;
207 Carp::confess("ERRNO hash is read only!");
208}
209
210# This is the true return value
21118µs*CLEAR = *DELETE = \*STORE; # Typeglob aliasing uses less space
212
213sub NEXTKEY {
214 each %err;
215}
216
217sub FIRSTKEY {
218 my $s = scalar keys %err; # initialize iterator
219 each %err;
220}
221
222sub EXISTS {
223 my (undef, $errname) = @_;
224 exists $err{$errname};
225}
226
227
# spent 7µs (6+900ns) within Errno::_tie_it which was called: # once (6µs+900ns) by Archive::Zip::BEGIN@11 at line 531 of File/Temp.pm
sub _tie_it {
22814µs1900ns tie %{$_[0]}, __PACKAGE__;
# spent 900ns making 1 call to Errno::TIEHASH
229}
230
231__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 68)[XML-Twig-pm-7113]-185-line.html0000644000175000017500000004115414576335353024347 0ustar michamicha Profile of (eval 68)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 68)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 24 statements in 99µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11124µs910µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs15µsXML::Twig::Elt::::BEGIN@1.12XML::Twig::Elt::BEGIN@1.12
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
12499µs18911µs
# spent 910µs (24+886) within XML::Twig::Elt::__ANON__[(eval 68)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (24µs+886µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 15µs (6+10) within XML::Twig::Elt::BEGIN@1.12 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 'drawmain:clrScheme') } @results;@results= grep defined, map { $_->children( '') } @results;@results= grep defined, map { $_->children( '') } @results;return XML::Twig::_unique_elts( @results); }
# spent 550µs making 1 call to XML::Twig::_unique_elts # spent 274µs making 1 call to XML::Twig::descendants # spent 58µs making 13 calls to XML::Twig::Elt::children, avg 4µs/call # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.12 # spent 10µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Encode-Config-pm-108-line.html0000644000175000017500000011406314576335353023302 0ustar michamicha Profile of Encode/Config.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Encode/Config.pm
StatementsExecuted 11 statements in 339µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11114µs16µsEncode::Config::::BEGIN@7Encode::Config::BEGIN@7
1114µs20µsEncode::Config::::BEGIN@8Encode::Config::BEGIN@8
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2# Demand-load module list
3#
4package Encode::Config;
539µs13µsour $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
# spent 3µs making 1 call to CORE::match
6
7226µs217µs
# spent 16µs (14+2) within Encode::Config::BEGIN@7 which was called: # once (14µs+2µs) by Archive::Zip::Archive::BEGIN@12 at line 7
use strict;
# spent 16µs making 1 call to Encode::Config::BEGIN@7 # spent 2µs making 1 call to strict::import
82216µs236µs
# spent 20µs (4+16) within Encode::Config::BEGIN@8 which was called: # once (4µs+16µs) by Archive::Zip::Archive::BEGIN@12 at line 8
use warnings;
# spent 20µs making 1 call to Encode::Config::BEGIN@8 # spent 16µs making 1 call to warnings::import
9
10112µsour %ExtModule = (
11
12 # Encode::Byte
13 #iso-8859-1 is in Encode.pm itself
14 'iso-8859-2' => 'Encode::Byte',
15 'iso-8859-3' => 'Encode::Byte',
16 'iso-8859-4' => 'Encode::Byte',
17 'iso-8859-5' => 'Encode::Byte',
18 'iso-8859-6' => 'Encode::Byte',
19 'iso-8859-7' => 'Encode::Byte',
20 'iso-8859-8' => 'Encode::Byte',
21 'iso-8859-9' => 'Encode::Byte',
22 'iso-8859-10' => 'Encode::Byte',
23 'iso-8859-11' => 'Encode::Byte',
24 'iso-8859-13' => 'Encode::Byte',
25 'iso-8859-14' => 'Encode::Byte',
26 'iso-8859-15' => 'Encode::Byte',
27 'iso-8859-16' => 'Encode::Byte',
28 'koi8-f' => 'Encode::Byte',
29 'koi8-r' => 'Encode::Byte',
30 'koi8-u' => 'Encode::Byte',
31 'viscii' => 'Encode::Byte',
32 'cp424' => 'Encode::Byte',
33 'cp437' => 'Encode::Byte',
34 'cp737' => 'Encode::Byte',
35 'cp775' => 'Encode::Byte',
36 'cp850' => 'Encode::Byte',
37 'cp852' => 'Encode::Byte',
38 'cp855' => 'Encode::Byte',
39 'cp856' => 'Encode::Byte',
40 'cp857' => 'Encode::Byte',
41 'cp858' => 'Encode::Byte',
42 'cp860' => 'Encode::Byte',
43 'cp861' => 'Encode::Byte',
44 'cp862' => 'Encode::Byte',
45 'cp863' => 'Encode::Byte',
46 'cp864' => 'Encode::Byte',
47 'cp865' => 'Encode::Byte',
48 'cp866' => 'Encode::Byte',
49 'cp869' => 'Encode::Byte',
50 'cp874' => 'Encode::Byte',
51 'cp1006' => 'Encode::Byte',
52 'cp1250' => 'Encode::Byte',
53 'cp1251' => 'Encode::Byte',
54 'cp1252' => 'Encode::Byte',
55 'cp1253' => 'Encode::Byte',
56 'cp1254' => 'Encode::Byte',
57 'cp1255' => 'Encode::Byte',
58 'cp1256' => 'Encode::Byte',
59 'cp1257' => 'Encode::Byte',
60 'cp1258' => 'Encode::Byte',
61 'AdobeStandardEncoding' => 'Encode::Byte',
62 'MacArabic' => 'Encode::Byte',
63 'MacCentralEurRoman' => 'Encode::Byte',
64 'MacCroatian' => 'Encode::Byte',
65 'MacCyrillic' => 'Encode::Byte',
66 'MacFarsi' => 'Encode::Byte',
67 'MacGreek' => 'Encode::Byte',
68 'MacHebrew' => 'Encode::Byte',
69 'MacIcelandic' => 'Encode::Byte',
70 'MacRoman' => 'Encode::Byte',
71 'MacRomanian' => 'Encode::Byte',
72 'MacRumanian' => 'Encode::Byte',
73 'MacSami' => 'Encode::Byte',
74 'MacThai' => 'Encode::Byte',
75 'MacTurkish' => 'Encode::Byte',
76 'MacUkrainian' => 'Encode::Byte',
77 'nextstep' => 'Encode::Byte',
78 'hp-roman8' => 'Encode::Byte',
79 #'gsm0338' => 'Encode::Byte',
80 'gsm0338' => 'Encode::GSM0338',
81
82 # Encode::EBCDIC
83 'cp37' => 'Encode::EBCDIC',
84 'cp500' => 'Encode::EBCDIC',
85 'cp875' => 'Encode::EBCDIC',
86 'cp1026' => 'Encode::EBCDIC',
87 'cp1047' => 'Encode::EBCDIC',
88 'posix-bc' => 'Encode::EBCDIC',
89
90 # Encode::Symbol
91 'dingbats' => 'Encode::Symbol',
92 'symbol' => 'Encode::Symbol',
93 'AdobeSymbol' => 'Encode::Symbol',
94 'AdobeZdingbat' => 'Encode::Symbol',
95 'MacDingbats' => 'Encode::Symbol',
96 'MacSymbol' => 'Encode::Symbol',
97
98 # Encode::Unicode
99 'UCS-2BE' => 'Encode::Unicode',
100 'UCS-2LE' => 'Encode::Unicode',
101 'UTF-16' => 'Encode::Unicode',
102 'UTF-16BE' => 'Encode::Unicode',
103 'UTF-16LE' => 'Encode::Unicode',
104 'UTF-32' => 'Encode::Unicode',
105 'UTF-32BE' => 'Encode::Unicode',
106 'UTF-32LE' => 'Encode::Unicode',
107 'UTF-7' => 'Encode::Unicode::UTF7',
108);
109
110122µsunless ( ord("A") == 193 ) {
111 %ExtModule = (
112 %ExtModule,
113 'euc-cn' => 'Encode::CN',
114 'gb12345-raw' => 'Encode::CN',
115 'gb2312-raw' => 'Encode::CN',
116 'hz' => 'Encode::CN',
117 'iso-ir-165' => 'Encode::CN',
118 'cp936' => 'Encode::CN',
119 'MacChineseSimp' => 'Encode::CN',
120
121 '7bit-jis' => 'Encode::JP',
122 'euc-jp' => 'Encode::JP',
123 'iso-2022-jp' => 'Encode::JP',
124 'iso-2022-jp-1' => 'Encode::JP',
125 'jis0201-raw' => 'Encode::JP',
126 'jis0208-raw' => 'Encode::JP',
127 'jis0212-raw' => 'Encode::JP',
128 'cp932' => 'Encode::JP',
129 'MacJapanese' => 'Encode::JP',
130 'shiftjis' => 'Encode::JP',
131
132 'euc-kr' => 'Encode::KR',
133 'iso-2022-kr' => 'Encode::KR',
134 'johab' => 'Encode::KR',
135 'ksc5601-raw' => 'Encode::KR',
136 'cp949' => 'Encode::KR',
137 'MacKorean' => 'Encode::KR',
138
139 'big5-eten' => 'Encode::TW',
140 'big5-hkscs' => 'Encode::TW',
141 'cp950' => 'Encode::TW',
142 'MacChineseTrad' => 'Encode::TW',
143
144 #'big5plus' => 'Encode::HanExtra',
145 #'euc-tw' => 'Encode::HanExtra',
146 #'gb18030' => 'Encode::HanExtra',
147
148 'MIME-Header' => 'Encode::MIME::Header',
149 'MIME-B' => 'Encode::MIME::Header',
150 'MIME-Q' => 'Encode::MIME::Header',
151
152 'MIME-Header-ISO_2022_JP' => 'Encode::MIME::Header::ISO_2022_JP',
153 );
154}
155
156#
157# Why not export ? to keep ConfigLocal Happy!
158#
159142µswhile ( my ( $enc, $mod ) = each %ExtModule ) {
160 $Encode::ExtModule{$enc} = $mod;
161}
162
163112µs1;
164__END__










Spreadsheet-ParseXLSX-0.35/nytprof/URI-pm-173-line.html0000644000175000017500000023713014576335353021344 0ustar michamicha Profile of URI.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/URI.pm
StatementsExecuted 27 statements in 1.58ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111728µs800µsURI::::BEGIN@41URI::BEGIN@41
11110µs11µsURI::::BEGIN@3URI::BEGIN@3
1117µs29µsURI::::BEGIN@43URI::BEGIN@43
1116µs11µsURI::::BEGIN@180URI::BEGIN@180
1114µs27µsURI::::BEGIN@9URI::BEGIN@9
1114µs20µsURI::::BEGIN@4URI::BEGIN@4
1112µs2µsURI::::BEGIN@40URI::BEGIN@40
0000s0sURI::::STORABLE_freezeURI::STORABLE_freeze
0000s0sURI::::STORABLE_thawURI::STORABLE_thaw
0000s0sURI::::TO_JSONURI::TO_JSON
0000s0sURI::::__ANON__[:43]URI::__ANON__[:43]
0000s0sURI::::__ANON__[:44]URI::__ANON__[:44]
0000s0sURI::::__ANON__[:45]URI::__ANON__[:45]
0000s0sURI::::_fix_uric_escape_for_host_partURI::_fix_uric_escape_for_host_part
0000s0sURI::::_initURI::_init
0000s0sURI::::_init_implementorURI::_init_implementor
0000s0sURI::::_no_scheme_okURI::_no_scheme_ok
0000s0sURI::::_obj_eqURI::_obj_eq
0000s0sURI::::_schemeURI::_scheme
0000s0sURI::::_uric_escapeURI::_uric_escape
0000s0sURI::::absURI::abs
0000s0sURI::::as_iriURI::as_iri
0000s0sURI::::as_stringURI::as_string
0000s0sURI::::canonicalURI::canonical
0000s0sURI::::cloneURI::clone
0000s0sURI::::eqURI::eq
0000s0sURI::::fragmentURI::fragment
0000s0sURI::::has_recognized_schemeURI::has_recognized_scheme
0000s0sURI::::implementorURI::implementor
0000s0sURI::::newURI::new
0000s0sURI::::new_absURI::new_abs
0000s0sURI::::opaqueURI::opaque
0000s0sURI::::pathURI::path
0000s0sURI::::relURI::rel
0000s0sURI::::schemeURI::scheme
0000s0sURI::::secureURI::secure
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package URI;
2
3224µs213µs
# spent 11µs (10+2) within URI::BEGIN@3 which was called: # once (10µs+2µs) by XML::Twig::_use at line 3
use strict;
# spent 11µs making 1 call to URI::BEGIN@3 # spent 2µs making 1 call to strict::import
4235µs236µs
# spent 20µs (4+16) within URI::BEGIN@4 which was called: # once (4µs+16µs) by XML::Twig::_use at line 4
use warnings;
# spent 20µs making 1 call to URI::BEGIN@4 # spent 16µs making 1 call to warnings::import
5
61300nsour $VERSION = '5.27';
7
8# 1=version 5.10 and earlier; 0=version 5.11 and later
9297µs250µs
# spent 27µs (4+23) within URI::BEGIN@9 which was called: # once (4µs+23µs) by XML::Twig::_use at line 9
use constant HAS_RESERVED_SQUARE_BRACKETS => $ENV{URI_HAS_RESERVED_SQUARE_BRACKETS} ? 1 : 0;
# spent 27µs making 1 call to URI::BEGIN@9 # spent 23µs making 1 call to constant::import
10
11our ($ABS_REMOTE_LEADING_DOTS, $ABS_ALLOW_RELATIVE_SCHEME, $DEFAULT_QUERY_FORM_DELIMITER);
12
131200nsmy %implements; # mapping from scheme to implementor class
14
15# Some "official" character classes
16
171100nsour $reserved = HAS_RESERVED_SQUARE_BRACKETS ? q(;/?:@&=+$,[]) : q(;/?:@&=+$,);
181100nsour $mark = q(-_.!~*'()); #'; emacs
191700nsour $unreserved = "A-Za-z0-9\Q$mark\E";
201300nsour $uric = quotemeta($reserved) . $unreserved . "%";
211400nsour $uric4host = $uric . ( HAS_RESERVED_SQUARE_BRACKETS ? '' : quotemeta( q([]) ) );
221200nsour $uric4user = quotemeta( q{!$'()*,;:._~%-+=%&} ) . "A-Za-z0-9" . ( HAS_RESERVED_SQUARE_BRACKETS ? quotemeta( q([]) ) : '' ); # RFC-3987: iuserinfo w/o UTF
23
241100nsour $scheme_re = '[a-zA-Z][a-zA-Z0-9.+\-]*';
25
26# These schemes don't have an IPv6+ address part.
2710sour $schemes_without_host_part_re = 'data|ldapi|urn|sqlite|sqlite3';
28
29# These schemes can have an IPv6+ authority part:
30# file, ftp, gopher, http, https, ldap, ldaps, mms, news, nntp, nntps, pop, rlogin, rtsp, rtspu, rsync, sip, sips, snews,
31# telnet, tn3270, ssh, sftp
32# (all DB URIs, i.e. cassandra, couch, couchdb, etc.), except 'sqlite:', 'sqlite3:'. Others?
33#MAINT: URI has no test coverage for DB schemes
34#MAINT: decoupling - perhaps let each class decide itself by defining a member function 'scheme_has_authority_part()'?
35
36#MAINT: 'mailto:' needs special treatment for IPv* addresses / RFC 5321 (4.1.3). Until then: restore all '[', ']'
37# These schemes need fallback to previous (<= 5.10) encoding until a specific handler is available.
381100nsour $fallback_schemes_re = 'mailto';
39
40211µs12µs
# spent 2µs within URI::BEGIN@40 which was called: # once (2µs+0s) by XML::Twig::_use at line 40
use Carp ();
# spent 2µs making 1 call to URI::BEGIN@40
412112µs1800µs
# spent 800µs (728+72) within URI::BEGIN@41 which was called: # once (728µs+72µs) by XML::Twig::_use at line 41
use URI::Escape ();
# spent 800µs making 1 call to URI::BEGIN@41
42
43
# spent 29µs (7+22) within URI::BEGIN@43 which was called: # once (7µs+22µs) by XML::Twig::_use at line 47
use overload ('""' => sub { ${$_[0]} },
44 '==' => sub { _obj_eq(@_) },
45 '!=' => sub { !_obj_eq(@_) },
4615µs122µs fallback => 1,
# spent 22µs making 1 call to overload::import
471476µs129µs );
# spent 29µs making 1 call to URI::BEGIN@43
48
49# Check if two objects are the same object
50sub _obj_eq {
51 return overload::StrVal($_[0]) eq overload::StrVal($_[1]);
52}
53
54sub new
55{
56 my($class, $uri, $scheme) = @_;
57
58 $uri = defined ($uri) ? "$uri" : ""; # stringify
59 # Get rid of potential wrapping
60 $uri =~ s/^<(?:URL:)?(.*)>$/$1/; #
61 $uri =~ s/^"(.*)"$/$1/;
62 $uri =~ s/^\s+//;
63 $uri =~ s/\s+$//;
64
65 my $impclass;
66 if ($uri =~ m/^($scheme_re):/so) {
67 $scheme = $1;
68 }
69 else {
70 if (($impclass = ref($scheme))) {
71 $scheme = $scheme->scheme;
72 }
73 elsif ($scheme && $scheme =~ m/^($scheme_re)(?::|$)/o) {
74 $scheme = $1;
75 }
76 }
77 $impclass ||= implementor($scheme) ||
78 do {
79 require URI::_foreign;
80 $impclass = 'URI::_foreign';
81 };
82
83 return $impclass->_init($uri, $scheme);
84}
85
86
87sub new_abs
88{
89 my($class, $uri, $base) = @_;
90 $uri = $class->new($uri, $base);
91 $uri->abs($base);
92}
93
94
95sub _init
96{
97 my $class = shift;
98 my($str, $scheme) = @_;
99 # find all funny characters and encode the bytes.
100 $str = $class->_uric_escape($str);
101 $str = "$scheme:$str" unless $str =~ /^$scheme_re:/o ||
102 $class->_no_scheme_ok;
103 my $self = bless \$str, $class;
104 $self;
105}
106
107
108#-- Version: 5.11+
109# Since the complete URI will be percent-encoded including '[' and ']',
110# we selectively unescape square brackets from the authority/host part of the URI.
111# Derived modules that implement _uric_escape() should take this into account
112# if they do not rely on URI::_uric_escape().
113# No unescaping is performed for the userinfo@ part of the authority part.
114sub _fix_uric_escape_for_host_part {
115 return if HAS_RESERVED_SQUARE_BRACKETS;
116 return if $_[0] !~ /%/;
117 return if $_[0] =~ m{^(?:$URI::schemes_without_host_part_re):}os;
118
119 # until a scheme specific handler is available, fall back to previous behavior of v5.10 (i.e. 'mailto:')
120 if ($_[0] =~ m{^(?:$URI::fallback_schemes_re):}os) {
121 $_[0] =~ s/\%5B/[/gi;
122 $_[0] =~ s/\%5D/]/gi;
123 return;
124 }
125
126 if ($_[0] =~ m{^((?:$URI::scheme_re:)?)//([^/?\#]+)(.*)$}os) {
127 my $orig = $2;
128 my ($user, $host) = $orig =~ /^(.*@)?([^@]*)$/;
129 $user ||= '';
130 my $port = $host =~ s/(:\d+)$// ? $1 : '';
131 #MAINT: die() here if scheme indicates TCP/UDP and port is out of range [0..65535] ?
132 $host =~ s/\%5B/[/gi;
133 $host =~ s/\%5D/]/gi;
134 $_[0] =~ s/\Q$orig\E/$user$host$port/;
135 }
136}
137
138
139sub _uric_escape
140{
141 my($class, $str) = @_;
142 $str =~ s*([^$uric\#])* URI::Escape::escape_char($1) *ego;
143 _fix_uric_escape_for_host_part( $str );
144 utf8::downgrade($str);
145 return $str;
146}
147
14810smy %require_attempted;
149
150sub implementor
151{
152 my($scheme, $impclass) = @_;
153 if (!$scheme || $scheme !~ /\A$scheme_re\z/o) {
154 require URI::_generic;
155 return "URI::_generic";
156 }
157
158 $scheme = lc($scheme);
159
160 if ($impclass) {
161 # Set the implementor class for a given scheme
162 my $old = $implements{$scheme};
163 $impclass->_init_implementor($scheme);
164 $implements{$scheme} = $impclass;
165 return $old;
166 }
167
168 my $ic = $implements{$scheme};
169 return $ic if $ic;
170
171 # scheme not yet known, look for internal or
172 # preloaded (with 'use') implementation
173 $ic = "URI::$scheme"; # default location
174
175 # turn scheme into a valid perl identifier by a simple transformation...
176 $ic =~ s/\+/_P/g;
177 $ic =~ s/\./_O/g;
178 $ic =~ s/\-/_/g;
179
1802811µs215µs
# spent 11µs (6+4) within URI::BEGIN@180 which was called: # once (6µs+4µs) by XML::Twig::_use at line 180
no strict 'refs';
# spent 11µs making 1 call to URI::BEGIN@180 # spent 4µs making 1 call to strict::unimport
181 # check we actually have one for the scheme:
182 unless (@{"${ic}::ISA"}) {
183 if (not exists $require_attempted{$ic}) {
184 $require_attempted{$ic} = 1;
185
186 # Try to load it
187 my $_old_error = $@;
188 eval "require $ic";
189 die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
190 $@ = $_old_error;
191 }
192 return undef unless @{"${ic}::ISA"};
193 }
194
195 $ic->_init_implementor($scheme);
196 $implements{$scheme} = $ic;
197 $ic;
198}
199
200
201sub _init_implementor
202{
203 my($class, $scheme) = @_;
204 # Remember that one implementor class may actually
205 # serve to implement several URI schemes.
206}
207
208
209sub clone
210{
211 my $self = shift;
212 my $other = $$self;
213 bless \$other, ref $self;
214}
215
216sub TO_JSON { ${$_[0]} }
217
218sub _no_scheme_ok { 0 }
219
220sub _scheme
221{
222 my $self = shift;
223
224 unless (@_) {
225 return undef unless $$self =~ /^($scheme_re):/o;
226 return $1;
227 }
228
229 my $old;
230 my $new = shift;
231 if (defined($new) && length($new)) {
232 Carp::croak("Bad scheme '$new'") unless $new =~ /^$scheme_re$/o;
233 $old = $1 if $$self =~ s/^($scheme_re)://o;
234 my $newself = URI->new("$new:$$self");
235 $$self = $$newself;
236 bless $self, ref($newself);
237 }
238 else {
239 if ($self->_no_scheme_ok) {
240 $old = $1 if $$self =~ s/^($scheme_re)://o;
241 Carp::carp("Oops, opaque part now look like scheme")
242 if $^W && $$self =~ m/^$scheme_re:/o
243 }
244 else {
245 $old = $1 if $$self =~ m/^($scheme_re):/o;
246 }
247 }
248
249 return $old;
250}
251
252sub scheme
253{
254 my $scheme = shift->_scheme(@_);
255 return undef unless defined $scheme;
256 lc($scheme);
257}
258
259sub has_recognized_scheme {
260 my $self = shift;
261 return ref($self) !~ /^URI::_(?:foreign|generic)\z/;
262}
263
264sub opaque
265{
266 my $self = shift;
267
268 unless (@_) {
269 $$self =~ /^(?:$scheme_re:)?([^\#]*)/o or die;
270 return $1;
271 }
272
273 $$self =~ /^($scheme_re:)? # optional scheme
274 ([^\#]*) # opaque
275 (\#.*)? # optional fragment
276 $/sx or die;
277
278 my $old_scheme = $1;
279 my $old_opaque = $2;
280 my $old_frag = $3;
281
282 my $new_opaque = shift;
283 $new_opaque = "" unless defined $new_opaque;
284 $new_opaque =~ s/([^$uric])/ URI::Escape::escape_char($1)/ego;
285 utf8::downgrade($new_opaque);
286
287 $$self = defined($old_scheme) ? $old_scheme : "";
288 $$self .= $new_opaque;
289 $$self .= $old_frag if defined $old_frag;
290
291 $old_opaque;
292}
293
294sub path { goto &opaque } # alias
295
296
297sub fragment
298{
299 my $self = shift;
300 unless (@_) {
301 return undef unless $$self =~ /\#(.*)/s;
302 return $1;
303 }
304
305 my $old;
306 $old = $1 if $$self =~ s/\#(.*)//s;
307
308 my $new_frag = shift;
309 if (defined $new_frag) {
310 $new_frag =~ s/([^$uric])/ URI::Escape::escape_char($1) /ego;
311 utf8::downgrade($new_frag);
312 $$self .= "#$new_frag";
313 }
314 $old;
315}
316
317
318sub as_string
319{
320 my $self = shift;
321 $$self;
322}
323
324
325sub as_iri
326{
327 my $self = shift;
328 my $str = $$self;
329 if ($str =~ s/%([89a-fA-F][0-9a-fA-F])/chr(hex($1))/eg) {
330 # All this crap because the more obvious:
331 #
332 # Encode::decode("UTF-8", $str, sub { sprintf "%%%02X", shift })
333 #
334 # doesn't work before Encode 2.39. Wait for a standard release
335 # to bundle that version.
336
337 require Encode;
338 my $enc = Encode::find_encoding("UTF-8");
339 my $u = "";
340 while (length $str) {
341 $u .= $enc->decode($str, Encode::FB_QUIET());
342 if (length $str) {
343 # escape next char
344 $u .= URI::Escape::escape_char(substr($str, 0, 1, ""));
345 }
346 }
347 $str = $u;
348 }
349 return $str;
350}
351
352
353sub canonical
354{
355 # Make sure scheme is lowercased, that we don't escape unreserved chars,
356 # and that we use upcase escape sequences.
357
358 my $self = shift;
359 my $scheme = $self->_scheme || "";
360 my $uc_scheme = $scheme =~ /[A-Z]/;
361 my $esc = $$self =~ /%[a-fA-F0-9]{2}/;
362 return $self unless $uc_scheme || $esc;
363
364 my $other = $self->clone;
365 if ($uc_scheme) {
366 $other->_scheme(lc $scheme);
367 }
368 if ($esc) {
369 $$other =~ s{%([0-9a-fA-F]{2})}
370 { my $a = chr(hex($1));
371 $a =~ /^[$unreserved]\z/o ? $a : "%\U$1"
372 }ge;
373 }
374 return $other;
375}
376
377# Compare two URIs, subclasses will provide a more correct implementation
378sub eq {
379 my($self, $other) = @_;
380 $self = URI->new($self, $other) unless ref $self;
381 $other = URI->new($other, $self) unless ref $other;
382 ref($self) eq ref($other) && # same class
383 $self->canonical->as_string eq $other->canonical->as_string;
384}
385
386# generic-URI transformation methods
387sub abs { $_[0]; }
388sub rel { $_[0]; }
389
390sub secure { 0 }
391
392# help out Storable
393sub STORABLE_freeze {
394 my($self, $cloning) = @_;
395 return $$self;
396}
397
398sub STORABLE_thaw {
399 my($self, $cloning, $str) = @_;
400 $$self = $str;
401}
402
40314µs1;
404
405__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 63)[XML-Twig-pm-7113]-180-line.html0000644000175000017500000004106714576335353024340 0ustar michamicha Profile of (eval 63)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 63)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 9 statements in 103µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs31µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1118µs22µsXML::Twig::Elt::::BEGIN@1.7XML::Twig::Elt::BEGIN@1.7
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
19103µs558µs
# spent 31µs (10+22) within XML::Twig::Elt::__ANON__[(eval 63)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (10µs+22µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 22µs (8+14) within XML::Twig::Elt::BEGIN@1.7 which was called: # once (8µs+14µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { grep { ((defined $_->{'att'}->{"Type"}) && ($_->{'att'}->{"Type"} eq "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme")) } $_->descendants( 'packagerels:Relationship') } @results;return XML::Twig::_unique_elts( @results); }
# spent 22µs making 1 call to XML::Twig::Elt::BEGIN@1.7 # spent 15µs making 1 call to XML::Twig::descendants # spent 14µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig # spent 3µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Config_git-pl-23-line.html0000644000175000017500000003271314576335353022666 0ustar michamicha Profile of Config_git.pl
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Config_git.pl
StatementsExecuted 1 statements in 3µs
Line State
ments
Time
on line
Calls Time
in subs
Code
1######################################################################
2# WARNING: 'lib/Config_git.pl' is generated by make_patchnum.pl
3# DO NOT EDIT DIRECTLY - edit make_patchnum.pl instead
4######################################################################
513µs$Config::Git_Data=<<'ENDOFGIT';
6git_commit_id=''
7git_describe=''
8git_branch=''
9git_uncommitted_changes=''
10git_commit_id_title=''
11
12ENDOFGIT










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 40)[JSON-PP-pm-692]-148-line.html0000644000175000017500000003204014576335353023771 0ustar michamicha Profile of (eval 40)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 40)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 800ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11800ns 111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/SelectSaver-pm-77-line.html0000644000175000017500000005401014576335353023042 0ustar michamicha Profile of SelectSaver.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/SelectSaver.pm
StatementsExecuted 7 statements in 91µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs28µsSelectSaver::::BEGIN@38SelectSaver::BEGIN@38
1113µs20µsSelectSaver::::BEGIN@39SelectSaver::BEGIN@39
0000s0sSelectSaver::::DESTROYSelectSaver::DESTROY
0000s0sSelectSaver::::newSelectSaver::new
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package SelectSaver;
2
31200nsour $VERSION = '1.02';
4
5=head1 NAME
6
7SelectSaver - save and restore selected file handle
8
9=head1 SYNOPSIS
10
11 use SelectSaver;
12
13 {
14 my $saver = SelectSaver->new(FILEHANDLE);
15 # FILEHANDLE is selected
16 }
17 # previous handle is selected
18
19 {
20 my $saver = SelectSaver->new;
21 # new handle may be selected, or not
22 }
23 # previous handle is selected
24
25=head1 DESCRIPTION
26
27A C<SelectSaver> object contains a reference to the file handle that
28was selected when it was created. If its C<new> method gets an extra
29parameter, then that parameter is selected; otherwise, the selected
30file handle remains unchanged.
31
32When a C<SelectSaver> is destroyed, it re-selects the file handle
33that was selected when it was created.
34
35=cut
36
3715µsrequire 5.000;
38215µs248µs
# spent 28µs (8+20) within SelectSaver::BEGIN@38 which was called: # once (8µs+20µs) by IO::File::BEGIN@123 at line 38
use Carp;
# spent 28µs making 1 call to SelectSaver::BEGIN@38 # spent 20µs making 1 call to Exporter::import
39268µs236µs
# spent 20µs (3+16) within SelectSaver::BEGIN@39 which was called: # once (3µs+16µs) by IO::File::BEGIN@123 at line 39
use Symbol;
# spent 20µs making 1 call to SelectSaver::BEGIN@39 # spent 16µs making 1 call to Exporter::import
40
41sub new {
42 @_ >= 1 && @_ <= 2 or croak 'usage: SelectSaver->new( [FILEHANDLE] )';
43 my $fh = select;
44 my $self = bless \$fh, $_[0];
45 select qualify($_[1], caller) if @_ > 1;
46 $self;
47}
48
49sub DESTROY {
50 my $self = $_[0];
51 select $$self;
52}
53
5412µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Encode-Alias-pm-104-line.html0000644000175000017500000024065414576335353023130 0ustar michamicha Profile of Encode/Alias.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Encode/Alias.pm
StatementsExecuted 453 statements in 1.41ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111115µs246µsEncode::Alias::::init_aliasesEncode::Alias::init_aliases
48481102µs102µsEncode::Alias::::define_aliasEncode::Alias::define_alias
1119µs10µsEncode::Alias::::BEGIN@2Encode::Alias::BEGIN@2
1114µs27µsEncode::Alias::::BEGIN@5Encode::Alias::BEGIN@5
1114µs7µsEncode::Alias::::BEGIN@7Encode::Alias::BEGIN@7
1113µs18µsEncode::Alias::::BEGIN@3Encode::Alias::BEGIN@3
1113µs3µsEncode::Alias::::BEGIN@111Encode::Alias::BEGIN@111
111600ns600nsEncode::Alias::::undef_aliasesEncode::Alias::undef_aliases
0000s0sEncode::Alias::::find_aliasEncode::Alias::find_alias
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Encode::Alias;
2217µs212µs
# spent 10µs (9+1) within Encode::Alias::BEGIN@2 which was called: # once (9µs+1µs) by Encode::BEGIN@53 at line 2
use strict;
# spent 10µs making 1 call to Encode::Alias::BEGIN@2 # spent 2µs making 1 call to strict::import
3250µs234µs
# spent 18µs (3+16) within Encode::Alias::BEGIN@3 which was called: # once (3µs+16µs) by Encode::BEGIN@53 at line 3
use warnings;
# spent 18µs making 1 call to Encode::Alias::BEGIN@3 # spent 16µs making 1 call to warnings::import
4310µs13µsour $VERSION = do { my @r = ( q$Revision: 2.25 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
# spent 3µs making 1 call to CORE::match
5217µs249µs
# spent 27µs (4+22) within Encode::Alias::BEGIN@5 which was called: # once (4µs+22µs) by Encode::BEGIN@53 at line 5
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
# spent 27µs making 1 call to Encode::Alias::BEGIN@5 # spent 22µs making 1 call to constant::import
6
72352µs210µs
# spent 7µs (4+4) within Encode::Alias::BEGIN@7 which was called: # once (4µs+4µs) by Encode::BEGIN@53 at line 7
use Exporter 'import';
# spent 7µs making 1 call to Encode::Alias::BEGIN@7 # spent 4µs making 1 call to Exporter::import
8
9# Public, encouraged API is exported by default
10
111500nsour @EXPORT =
12 qw (
13 define_alias
14 find_alias
15);
16
17our @Alias; # ordered matching list
18our %Alias; # cached known aliases
19
20sub find_alias {
21 my $class = shift;
22 my $find = shift;
23 unless ( exists $Alias{$find} ) {
24 $Alias{$find} = undef; # Recursion guard
25 for ( my $i = 0 ; $i < @Alias ; $i += 2 ) {
26 my $alias = $Alias[$i];
27 my $val = $Alias[ $i + 1 ];
28 my $new;
29 if ( ref($alias) eq 'Regexp' && $find =~ $alias ) {
30 DEBUG and warn "eval $val";
31 $new = eval $val;
32 DEBUG and $@ and warn "$val, $@";
33 }
34 elsif ( ref($alias) eq 'CODE' ) {
35 DEBUG and warn "$alias", "->", "($find)";
36 $new = $alias->($find);
37 }
38 elsif ( lc($find) eq lc($alias) ) {
39 $new = $val;
40 }
41 if ( defined($new) ) {
42 next if $new eq $find; # avoid (direct) recursion on bugs
43 DEBUG and warn "$alias, $new";
44 my $enc =
45 ( ref($new) ) ? $new : Encode::find_encoding($new);
46 if ($enc) {
47 $Alias{$find} = $enc;
48 last;
49 }
50 }
51 }
52
53 # case insensitive search when canonical is not in all lowercase
54 # RT ticket #7835
55 unless ( $Alias{$find} ) {
56 my $lcfind = lc($find);
57 for my $name ( keys %Encode::Encoding, keys %Encode::ExtModule )
58 {
59 $lcfind eq lc($name) or next;
60 $Alias{$find} = Encode::find_encoding($name);
61 DEBUG and warn "$find => $name";
62 }
63 }
64 }
65 if (DEBUG) {
66 my $name;
67 if ( my $e = $Alias{$find} ) {
68 $name = $e->name;
69 }
70 else {
71 $name = "";
72 }
73 warn "find_alias($class, $find)->name = $name";
74 }
75 return $Alias{$find};
76}
77
78
# spent 102µs within Encode::Alias::define_alias which was called 48 times, avg 2µs/call: # once (34µs+0s) by Encode::Alias::init_aliases at line 196 # once (4µs+0s) by Encode::Alias::init_aliases at line 205 # once (3µs+0s) by Encode::Alias::init_aliases at line 141 # once (3µs+0s) by Encode::Alias::init_aliases at line 146 # once (3µs+0s) by Encode::Alias::init_aliases at line 145 # once (3µs+0s) by Encode::Alias::init_aliases at line 151 # once (3µs+0s) by Encode::Alias::init_aliases at line 253 # once (2µs+0s) by Encode::Alias::init_aliases at line 250 # once (2µs+0s) by Encode::Alias::init_aliases at line 159 # once (2µs+0s) by Encode::Alias::init_aliases at line 189 # once (2µs+0s) by Encode::Alias::init_aliases at line 259 # once (1µs+0s) by Encode::Alias::init_aliases at line 144 # once (1µs+0s) by Encode::Alias::init_aliases at line 266 # once (1µs+0s) by Encode::Alias::init_aliases at line 178 # once (1µs+0s) by Encode::Alias::init_aliases at line 163 # once (1µs+0s) by Encode::Alias::init_aliases at line 249 # once (1µs+0s) by Encode::Alias::init_aliases at line 245 # once (1µs+0s) by Encode::Alias::init_aliases at line 173 # once (1µs+0s) by Encode::Alias::init_aliases at line 262 # once (1µs+0s) by Encode::Alias::init_aliases at line 219 # once (1µs+0s) by Encode::Alias::init_aliases at line 234 # once (1µs+0s) by Encode::Alias::init_aliases at line 167 # once (1µs+0s) by Encode::Alias::init_aliases at line 221 # once (1µs+0s) by Encode::Alias::init_aliases at line 160 # once (1µs+0s) by Encode::Alias::init_aliases at line 258 # once (1µs+0s) by Encode::Alias::init_aliases at line 257 # once (1µs+0s) by Encode::Alias::init_aliases at line 241 # once (1µs+0s) by Encode::Alias::init_aliases at line 271 # once (1µs+0s) by Encode::Alias::init_aliases at line 246 # once (1µs+0s) by Encode::Alias::init_aliases at line 244 # once (1µs+0s) by Encode::Alias::init_aliases at line 228 # once (1µs+0s) by Encode::Alias::init_aliases at line 183 # once (1µs+0s) by Encode::Alias::init_aliases at line 247 # once (1µs+0s) by Encode::Alias::init_aliases at line 233 # once (1µs+0s) by Encode::Alias::init_aliases at line 248 # once (1µs+0s) by Encode::Alias::init_aliases at line 277 # once (1µs+0s) by Encode::Alias::init_aliases at line 170 # once (1µs+0s) by Encode::Alias::init_aliases at line 223 # once (1µs+0s) by Encode::Alias::init_aliases at line 274 # once (1µs+0s) by Encode::Alias::init_aliases at line 185 # once (1µs+0s) by Encode::Alias::init_aliases at line 270 # once (1µs+0s) by Encode::Alias::init_aliases at line 265 # once (1µs+0s) by Encode::Alias::init_aliases at line 238 # once (1µs+0s) by Encode::Alias::init_aliases at line 254 # once (1µs+0s) by Encode::Alias::init_aliases at line 264 # once (1µs+0s) by Encode::Alias::init_aliases at line 158 # once (1µs+0s) by Encode::Alias::init_aliases at line 210 # once (900ns+0s) by Encode::Alias::init_aliases at line 263
sub define_alias {
794846µs while (@_) {
80576µs my $alias = shift;
81576µs my $name = shift;
825715µs unshift( @Alias, $alias => $name ) # newer one has precedence
83 if defined $alias;
845716µs if ( ref($alias) ) {
85
86 # clear %Alias cache to allow overrides
87506µs my @a = keys %Alias;
88508µs for my $k (@a) {
89 if ( ref($alias) eq 'Regexp' && $k =~ $alias ) {
90 DEBUG and warn "delete \$Alias\{$k\}";
91 delete $Alias{$k};
92 }
93 elsif ( ref($alias) eq 'CODE' && $alias->($k) ) {
94 DEBUG and warn "delete \$Alias\{$k\}";
95 delete $Alias{$k};
96 }
97 }
98 }
99 elsif (defined $alias) {
100 DEBUG and warn "delete \$Alias\{$alias\}";
1017700ns delete $Alias{$alias};
102 }
103 elsif (DEBUG) {
104 require Carp;
105 Carp::croak("undef \$alias");
106 }
107 }
108}
109
110# HACK: Encode must be used after define_alias is declarated as Encode calls define_alias
1112706µs13µs
# spent 3µs within Encode::Alias::BEGIN@111 which was called: # once (3µs+0s) by Encode::BEGIN@53 at line 111
use Encode ();
# spent 3µs making 1 call to Encode::Alias::BEGIN@111
112
113# Allow latin-1 style names as well
114# 0 1 2 3 4 5 6 7 8 9 10
1151500nsour @Latin2iso = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 );
116
117# Allow winlatin1 style names as well
11812µsour %Winlatin2cp = (
119 'latin1' => 1252,
120 'latin2' => 1250,
121 'cyrillic' => 1251,
122 'greek' => 1253,
123 'turkish' => 1254,
124 'hebrew' => 1255,
125 'arabic' => 1256,
126 'baltic' => 1257,
127 'vietnamese' => 1258,
128);
129
1301900ns1246µsinit_aliases();
# spent 246µs making 1 call to Encode::Alias::init_aliases
131
132
# spent 600ns within Encode::Alias::undef_aliases which was called: # once (600ns+0s) by Encode::Alias::init_aliases at line 138
sub undef_aliases {
1331200ns @Alias = ();
13412µs %Alias = ();
135}
136
137
# spent 246µs (115+131) within Encode::Alias::init_aliases which was called: # once (115µs+131µs) by Encode::BEGIN@53 at line 130
sub init_aliases {
1381400ns1600ns undef_aliases();
# spent 600ns making 1 call to Encode::Alias::undef_aliases
139
140 # Try all-lower-case version should all else fails
14113µs24µs define_alias( qr/^(.*)$/ => '"\L$1"' );
# spent 3µs making 1 call to Encode::Alias::define_alias # spent 900ns making 1 call to CORE::qr
142
143 # UTF/UCS stuff
14412µs22µs define_alias( qr/^(unicode-1-1-)?UTF-?7$/i => '"UTF-7"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
14512µs24µs define_alias( qr/^UCS-?2-?LE$/i => '"UCS-2LE"' );
# spent 3µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
14614µs44µs define_alias(
# spent 3µs making 1 call to Encode::Alias::define_alias # spent 700ns making 3 calls to CORE::qr, avg 233ns/call
147 qr/^UCS-?2-?(BE)?$/i => '"UCS-2BE"',
148 qr/^UCS-?4-?(BE|LE|)?$/i => 'uc("UTF-32$1")',
149 qr/^iso-10646-1$/i => '"UCS-2BE"'
150 );
15113µs44µs define_alias(
# spent 3µs making 1 call to Encode::Alias::define_alias # spent 700ns making 3 calls to CORE::qr, avg 233ns/call
152 qr/^UTF-?(16|32)-?BE$/i => '"UTF-$1BE"',
153 qr/^UTF-?(16|32)-?LE$/i => '"UTF-$1LE"',
154 qr/^UTF-?(16|32)$/i => '"UTF-$1"',
155 );
156
157 # ASCII
15812µs21µs define_alias( qr/^(?:US-?)ascii$/i => '"ascii"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
1591300ns12µs define_alias( 'C' => 'ascii' );
# spent 2µs making 1 call to Encode::Alias::define_alias
16011µs21µs define_alias( qr/\b(?:ISO[-_]?)?646(?:[-_]?US)?$/i => '"ascii"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 200ns making 1 call to CORE::qr
161
162 # Allow variants of iso-8859-1 etc.
16311µs22µs define_alias( qr/\biso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
164
165 # ISO-8859-8-I => ISO-8859-8
166 # https://en.wikipedia.org/wiki/ISO-8859-8-I
16712µs22µs define_alias( qr/\biso[-_]8859[-_]8[-_]I$/i => '"iso-8859-8"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 700ns making 1 call to CORE::qr
168
169 # At least HP-UX has these.
17011µs21µs define_alias( qr/\biso8859(\d+)$/i => '"iso-8859-$1"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 200ns making 1 call to CORE::qr
171
172 # More HP stuff.
17315µs21µs define_alias(
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 200ns making 1 call to CORE::qr
174 qr/\b(?:hp-)?(arabic|greek|hebrew|kana|roman|thai|turkish)8$/i =>
175 '"${1}8"' );
176
177 # The Official name of ASCII.
17811µs22µs define_alias( qr/\bANSI[-_]?X3\.4[-_]?1968$/i => '"ascii"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
179
180 # This is a font issue, not an encoding issue.
181 # (The currency symbol of the Latin 1 upper half
182 # has been redefined as the euro symbol.)
18311µs21µs define_alias( qr/^(.+)\@euro$/i => '"$1"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 200ns making 1 call to CORE::qr
184
18511µs21µs define_alias( qr/\b(?:iso[-_]?)?latin[-_]?(\d+)$/i =>
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
186'defined $Encode::Alias::Latin2iso[$1] ? "iso-8859-$Encode::Alias::Latin2iso[$1]" : undef'
187 );
188
189115µs22µs define_alias(
# spent 2µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
190 qr/\bwin(latin[12]|cyrillic|baltic|greek|turkish|
191 hebrew|arabic|baltic|vietnamese)$/ix =>
192 '"cp" . $Encode::Alias::Winlatin2cp{lc($1)}'
193 );
194
195 # Common names for non-latin preferred MIME names
196128µs134µs define_alias(
# spent 34µs making 1 call to Encode::Alias::define_alias
197 'ascii' => 'US-ascii',
198 'cyrillic' => 'iso-8859-5',
199 'arabic' => 'iso-8859-6',
200 'greek' => 'iso-8859-7',
201 'hebrew' => 'iso-8859-8',
202 'thai' => 'iso-8859-11',
203 );
204 # RT #20781
20515µs24µs define_alias(qr/\btis-?620\b/i => '"iso-8859-11"');
# spent 4µs making 1 call to Encode::Alias::define_alias # spent 700ns making 1 call to CORE::qr
206
207 # At least AIX has IBM-NNN (surprisingly...) instead of cpNNN.
208 # And Microsoft has their own naming (again, surprisingly).
209 # And windows-* is registered in IANA!
21012µs21µs define_alias(
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
211 qr/\b(?:cp|ibm|ms|windows)[-_ ]?(\d{2,4})$/i => '"cp$1"' );
212
213 # Sometimes seen with a leading zero.
214 # define_alias( qr/\bcp037\b/i => '"cp37"');
215
216 # Mac Mappings
217 # predefined in *.ucm; unneeded
218 # define_alias( qr/\bmacIcelandic$/i => '"macIceland"');
21911µs22µs define_alias( qr/^(?:x[_-])?mac[_-](.*)$/i => '"mac$1"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
220 # http://rt.cpan.org/Ticket/Display.html?id=36326
22112µs22µs define_alias( qr/^macintosh$/i => '"MacRoman"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
222 # https://rt.cpan.org/Ticket/Display.html?id=78125
22312µs21µs define_alias( qr/^macce$/i => '"MacCentralEurRoman"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
224 # Ououououou. gone. They are different!
225 # define_alias( qr/\bmacRomanian$/i => '"macRumanian"');
226
227 # Standardize on the dashed versions.
22811µs22µs define_alias( qr/\bkoi8[\s\-_]*([ru])$/i => '"koi8-$1"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
229
2301300ns unless ($Encode::ON_EBCDIC) {
231
232 # for Encode::CN
23311µs21µs define_alias( qr/\beuc.*cn$/i => '"euc-cn"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
23411µs21µs define_alias( qr/\bcn.*euc$/i => '"euc-cn"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 200ns making 1 call to CORE::qr
235
236 # define_alias( qr/\bGB[- ]?(\d+)$/i => '"euc-cn"' )
237 # CP936 doesn't have vendor-addon for GBK, so they're identical.
23811µs21µs define_alias( qr/^gbk$/i => '"cp936"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
239
240 # This fixes gb2312 vs. euc-cn confusion, practically
24111µs22µs define_alias( qr/\bGB[-_ ]?2312(?!-?raw)/i => '"euc-cn"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
242
243 # for Encode::JP
24411µs22µs define_alias( qr/\bjis$/i => '"7bit-jis"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
24513µs24µs define_alias( qr/\beuc.*jp$/i => '"euc-jp"' );
# spent 2µs making 1 call to CORE::qr # spent 1µs making 1 call to Encode::Alias::define_alias
24615µs23µs define_alias( qr/\bjp.*euc$/i => '"euc-jp"' );
# spent 2µs making 1 call to CORE::qr # spent 1µs making 1 call to Encode::Alias::define_alias
24711µs21µs define_alias( qr/\bujis$/i => '"euc-jp"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
24811µs21µs define_alias( qr/\bshift.*jis$/i => '"shiftjis"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
249110µs210µs define_alias( qr/\bsjis$/i => '"shiftjis"' );
# spent 9µs making 1 call to CORE::qr # spent 1µs making 1 call to Encode::Alias::define_alias
25012µs22µs define_alias( qr/\bwindows-31j$/i => '"cp932"' );
# spent 2µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
251
252 # for Encode::KR
25313µs23µs define_alias( qr/\beuc.*kr$/i => '"euc-kr"' );
# spent 3µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
25412µs21µs define_alias( qr/\bkr.*euc$/i => '"euc-kr"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
255
256 # This fixes ksc5601 vs. euc-kr confusion, practically
25711µs22µs define_alias( qr/(?:x-)?uhc$/i => '"cp949"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
25812µs22µs define_alias( qr/(?:x-)?windows-949$/i => '"cp949"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 500ns making 1 call to CORE::qr
25912µs22µs define_alias( qr/\bks_c_5601-1987$/i => '"cp949"' );
# spent 2µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
260
261 # for Encode::TW
26212µs22µs define_alias( qr/\bbig-?5$/i => '"big5-eten"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
26311µs21µs define_alias( qr/\bbig5-?et(?:en)?$/i => '"big5-eten"' );
# spent 900ns making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
26411µs21µs define_alias( qr/\btca[-_]?big5$/i => '"big5-eten"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
26511µs21µs define_alias( qr/\bbig5-?hk(?:scs)?$/i => '"big5-hkscs"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
26612µs22µs define_alias( qr/\bhk(?:scs)?[-_]?big5$/i => '"big5-hkscs"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 200ns making 1 call to CORE::qr
267 }
268
269 # https://github.com/dankogai/p5-encode/issues/37
27011µs22µs define_alias(qr/cp65000/i => '"UTF-7"');
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
27111µs22µs define_alias(qr/cp65001/i => '"utf-8-strict"');
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 300ns making 1 call to CORE::qr
272
273 # utf8 is blessed :)
27412µs22µs define_alias( qr/\bUTF-8$/i => '"utf-8-strict"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 500ns making 1 call to CORE::qr
275
276 # At last, Map white space and _ to '-'
27714µs22µs define_alias( qr/^([^\s_]+)[\s_]+([^\s_]*)$/i => '"$1-$2"' );
# spent 1µs making 1 call to Encode::Alias::define_alias # spent 400ns making 1 call to CORE::qr
278}
279
28016µs1;
281__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 103)[XML-Twig-pm-7113]-220-line.html0000644000175000017500000004103214576335353024376 0ustar michamicha Profile of (eval 103)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 103)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 11 statements in 85µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs224µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs17µsXML::Twig::Elt::::BEGIN@1.47XML::Twig::Elt::BEGIN@1.47
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11185µs6240µs
# spent 224µs (11+213) within XML::Twig::Elt::__ANON__[(eval 103)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (11µs+213µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 17µs (6+10) within XML::Twig::Elt::BEGIN@1.47 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:sheets') } @results;@results= grep defined, map { $_->children( 's:sheet') } @results;return XML::Twig::_unique_elts( @results); }
# spent 113µs making 1 call to XML::Twig::descendants # spent 92µs making 1 call to XML::Twig::Elt::children # spent 17µs making 1 call to XML::Twig::Elt::BEGIN@1.47 # spent 10µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig # spent 3µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 56)[Test2-API-pm-72]-171-line.html0000644000175000017500000003431414576335353024234 0ustar michamicha Profile of (eval 56)[Test2/API.pm:72]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 56)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API.pm:72]
StatementsExecuted 2 statements in 4µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API.pm line 72
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
2118µs308µsTest2::API::::ENDTest2::API::END
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
124µs1186µs
# spent 308µs (8+300) within Test2::API::END which was called 2 times, avg 154µs/call: # 2 times (8µs+300µs) by main::RUNTIME at line 0 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t, avg 154µs/call
END { test2_set_is_end() }; 1
# spent 186µs making 1 call to Test2::API::test2_set_is_end
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 110)[XML-Twig-pm-1750]-227-line.html0000644000175000017500000004704614576335353024417 0ustar michamicha Profile of (eval 110)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 110)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 30 statements in 186µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
21112µs12µsXML::Twig::::__ANON__[:17]XML::Twig::__ANON__[:17] (merge of 2 subs)
1116µs17µsXML::Twig::::BEGIN@1.64XML::Twig::BEGIN@1.64
1116µs16µsXML::Twig::::BEGIN@1.54XML::Twig::BEGIN@1.54
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14168µs455µs
# spent 17µs (6+11) within XML::Twig::BEGIN@1.64 which was called: # once (6µs+11µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 16µs (6+10) within XML::Twig::BEGIN@1.54 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 12µs within XML::Twig::__ANON__[(eval 110)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] which was called 2 times, avg 6µs/call: # (data for this subroutine includes 1 others that were merged with it) # 2 times (12µs+0s) by XML::Twig::_handler at line 2405 of XML/Twig.pm, avg 6µs/call
sub { no warnings;
# spent 21µs making 2 calls to warnings::unimport, avg 11µs/call # spent 17µs making 1 call to XML::Twig::BEGIN@1.64 # spent 16µs making 1 call to XML::Twig::BEGIN@1.54
22600nsmy( $stack)= @_;
321µsmy @current_elts= (scalar @$stack);
42500nsmy @new_current_elts;
5my $elt;
6
721µsforeach my $current_elt (@current_elts)
82500ns { next if( !$current_elt);
92400ns $current_elt--;
102800ns $elt= $stack->[$current_elt];
1122µs if( ($elt->{'##tag'} eq "s:sheetFormatPr")) { push @new_current_elts, $current_elt;}
12 }
132200nsunless( @new_current_elts) { return 0; }
142600ns@current_elts= @new_current_elts;
152800ns@new_current_elts=();
1624µsreturn q{s:sheetFormatPr};
1726µs }
18;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Note-pm-54-line.html0000644000175000017500000005337414576335353023614 0ustar michamicha Profile of Test2/Event/Note.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Note.pm
StatementsExecuted 10 statements in 169µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11112µs13µsTest2::Event::Note::::BEGIN@2Test2::Event::Note::BEGIN@2
1117µs7µsTest2::Event::Note::::BEGIN@8Test2::Event::Note::BEGIN@8
1114µs41µsTest2::Event::Note::::BEGIN@9Test2::Event::Note::BEGIN@9
1113µs20µsTest2::Event::Note::::BEGIN@3Test2::Event::Note::BEGIN@3
0000s0sTest2::Event::Note::::facet_dataTest2::Event::Note::facet_data
0000s0sTest2::Event::Note::::initTest2::Event::Note::init
0000s0sTest2::Event::Note::::summaryTest2::Event::Note::summary
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Note;
2219µs215µs
# spent 13µs (12+2) within Test2::Event::Note::BEGIN@2 which was called: # once (12µs+2µs) by Test2::API::BEGIN@94 at line 2
use strict;
# spent 13µs making 1 call to Test2::Event::Note::BEGIN@2 # spent 2µs making 1 call to strict::import
3233µs237µs
# spent 20µs (3+17) within Test2::Event::Note::BEGIN@3 which was called: # once (3µs+17µs) by Test2::API::BEGIN@94 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Event::Note::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8224µs17µs
# spent 7µs within Test2::Event::Note::BEGIN@8 which was called: # once (7µs+0s) by Test2::API::BEGIN@94 at line 8
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 7µs making 1 call to Test2::Event::Note::BEGIN@8
9290µs278µs
# spent 41µs (4+38) within Test2::Event::Note::BEGIN@9 which was called: # once (4µs+38µs) by Test2::API::BEGIN@94 at line 9
use Test2::Util::HashBase qw/message/;
# spent 41µs making 1 call to Test2::Event::Note::BEGIN@9 # spent 38µs making 1 call to Test2::Util::HashBase::import
10
11sub init {
12 $_[0]->{+MESSAGE} = 'undef' unless defined $_[0]->{+MESSAGE};
13}
14
15sub summary { $_[0]->{+MESSAGE} }
16
17sub facet_data {
18 my $self = shift;
19
20 my $out = $self->common_facet_data;
21
22 $out->{info} = [
23 {
24 tag => 'NOTE',
25 debug => 0,
26 details => $self->{+MESSAGE},
27 }
28 ];
29
30 return $out;
31}
32
3312µs1;
34
35__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Encode-Encoding-pm-107-line.html0000644000175000017500000010044614576335353023622 0ustar michamicha Profile of Encode/Encoding.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Encode/Encoding.pm
StatementsExecuted 18 statements in 353µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsEncode::Encoding::::BEGIN@4Encode::Encoding::BEGIN@4
1116µs7µsEncode::Encoding::::BEGIN@12Encode::Encoding::BEGIN@12
1116µs6µsEncode::Encoding::::BEGIN@10Encode::Encoding::BEGIN@10
1114µs20µsEncode::Encoding::::BEGIN@5Encode::Encoding::BEGIN@5
1114µs25µsEncode::Encoding::::BEGIN@14Encode::Encoding::BEGIN@14
1112µs2µsEncode::Encoding::::BEGIN@11Encode::Encoding::BEGIN@11
111300ns300nsEncode::Encoding::::__ANON__Encode::Encoding::__ANON__ (xsub)
0000s0sEncode::Encoding::::DESTROYEncode::Encoding::DESTROY
0000s0sEncode::Encoding::::DefineEncode::Encoding::Define
0000s0sEncode::Encoding::::decodeEncode::Encoding::decode
0000s0sEncode::Encoding::::encodeEncode::Encoding::encode
0000s0sEncode::Encoding::::fromUnicodeEncode::Encoding::fromUnicode
0000s0sEncode::Encoding::::mime_nameEncode::Encoding::mime_name
0000s0sEncode::Encoding::::nameEncode::Encoding::name
0000s0sEncode::Encoding::::needs_linesEncode::Encoding::needs_lines
0000s0sEncode::Encoding::::perlio_okEncode::Encoding::perlio_ok
0000s0sEncode::Encoding::::renewEncode::Encoding::renew
0000s0sEncode::Encoding::::renewedEncode::Encoding::renewed
0000s0sEncode::Encoding::::toUnicodeEncode::Encoding::toUnicode
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Encode::Encoding;
2
3# Base class for classes which implement encodings
4222µs213µs
# spent 11µs (10+2) within Encode::Encoding::BEGIN@4 which was called: # once (10µs+2µs) by parent::import at line 4
use strict;
# spent 11µs making 1 call to Encode::Encoding::BEGIN@4 # spent 2µs making 1 call to strict::import
5257µs235µs
# spent 20µs (4+16) within Encode::Encoding::BEGIN@5 which was called: # once (4µs+16µs) by parent::import at line 5
use warnings;
# spent 20µs making 1 call to Encode::Encoding::BEGIN@5 # spent 16µs making 1 call to warnings::import
6310µs12µsour $VERSION = do { my @r = ( q$Revision: 2.8 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
# spent 2µs making 1 call to CORE::match
7
81400nsour @CARP_NOT = qw(Encode Encode::Encoder);
9
10212µs16µs
# spent 6µs within Encode::Encoding::BEGIN@10 which was called: # once (6µs+0s) by parent::import at line 10
use Carp ();
# spent 6µs making 1 call to Encode::Encoding::BEGIN@10
11213µs12µs
# spent 2µs within Encode::Encoding::BEGIN@11 which was called: # once (2µs+0s) by parent::import at line 11
use Encode ();
# spent 2µs making 1 call to Encode::Encoding::BEGIN@11
12222µs27µs
# spent 7µs (6+300ns) within Encode::Encoding::BEGIN@12 which was called: # once (6µs+300ns) by parent::import at line 12
use Encode::MIME::Name;
# spent 7µs making 1 call to Encode::Encoding::BEGIN@12 # spent 300ns making 1 call to Encode::Encoding::__ANON__
13
142212µs247µs
# spent 25µs (4+21) within Encode::Encoding::BEGIN@14 which was called: # once (4µs+21µs) by parent::import at line 14
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
# spent 25µs making 1 call to Encode::Encoding::BEGIN@14 # spent 21µs making 1 call to constant::import
15
16sub Define {
17 my $obj = shift;
18 my $canonical = shift;
19 $obj = bless { Name => $canonical }, $obj unless ref $obj;
20
21 # warn "$canonical => $obj\n";
22 Encode::define_encoding( $obj, $canonical, @_ );
23}
24
25sub name { return shift->{'Name'} }
26
27sub mime_name {
28 return Encode::MIME::Name::get_mime_name(shift->name);
29}
30
31sub renew {
32 my $self = shift;
33 my $clone = bless {%$self} => ref($self);
34 $clone->{renewed}++; # so the caller can see it
35 DEBUG and warn $clone->{renewed};
36 return $clone;
37}
38
39sub renewed { return $_[0]->{renewed} || 0 }
40
411900ns*new_sequence = \&renew;
42
43sub needs_lines { 0 }
44
45sub perlio_ok {
46 return eval { require PerlIO::encoding } ? 1 : 0;
47}
48
49# (Temporary|legacy) methods
50
51sub toUnicode { shift->decode(@_) }
52sub fromUnicode { shift->encode(@_) }
53
54#
55# Needs to be overloaded or just croak
56#
57
58sub encode {
59 my $obj = shift;
60 my $class = ref($obj) ? ref($obj) : $obj;
61 Carp::croak( $class . "->encode() not defined!" );
62}
63
64sub decode {
65 my $obj = shift;
66 my $class = ref($obj) ? ref($obj) : $obj;
67 Carp::croak( $class . "->encode() not defined!" );
68}
69
70sub DESTROY { }
71
7214µs1;
73__END__
 
# spent 300ns within Encode::Encoding::__ANON__ which was called: # once (300ns+0s) by Encode::Encoding::BEGIN@12 at line 12
sub Encode::Encoding::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html0000644000175000017500000013212214576335353027230 0ustar michamicha Profile of Spreadsheet/ParseExcel/FmtDefault.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel/FmtDefault.pm
StatementsExecuted 1269100 statements in 1.21s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
20290711682ms810msSpreadsheet::ParseExcel::FmtDefault::::ValFmtSpreadsheet::ParseExcel::FmtDefault::ValFmt
12727611128ms128msSpreadsheet::ParseExcel::FmtDefault::::TextFmtSpreadsheet::ParseExcel::FmtDefault::TextFmt
1113.26ms3.33msSpreadsheet::ParseExcel::FmtDefault::::BEGIN@22Spreadsheet::ParseExcel::FmtDefault::BEGIN@22
11113µs14µsSpreadsheet::ParseExcel::FmtDefault::::BEGIN@19Spreadsheet::ParseExcel::FmtDefault::BEGIN@19
1113µs18µsSpreadsheet::ParseExcel::FmtDefault::::BEGIN@20Spreadsheet::ParseExcel::FmtDefault::BEGIN@20
1113µs3µsSpreadsheet::ParseExcel::FmtDefault::::newSpreadsheet::ParseExcel::FmtDefault::new
0000s0sSpreadsheet::ParseExcel::FmtDefault::::ChkTypeSpreadsheet::ParseExcel::FmtDefault::ChkType
0000s0sSpreadsheet::ParseExcel::FmtDefault::::FmtStringSpreadsheet::ParseExcel::FmtDefault::FmtString
0000s0sSpreadsheet::ParseExcel::FmtDefault::::FmtStringDefSpreadsheet::ParseExcel::FmtDefault::FmtStringDef
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel::FmtDefault;
2
3###############################################################################
4#
5# Spreadsheet::ParseExcel::FmtDefault - A class for Cell formats.
6#
7# Used in conjunction with Spreadsheet::ParseExcel.
8#
9# Copyright (c) 2014 Douglas Wilson
10# Copyright (c) 2009-2013 John McNamara
11# Copyright (c) 2006-2008 Gabor Szabo
12# Copyright (c) 2000-2006 Kawai Takanori
13#
14# perltidy with standard settings.
15#
16# Documentation after __END__
17#
18
19222µs216µs
# spent 14µs (13+1) within Spreadsheet::ParseExcel::FmtDefault::BEGIN@19 which was called: # once (13µs+1µs) by Spreadsheet::ParseExcel::BEGIN@36 at line 19
use strict;
# spent 14µs making 1 call to Spreadsheet::ParseExcel::FmtDefault::BEGIN@19 # spent 1µs making 1 call to strict::import
20216µs233µs
# spent 18µs (3+15) within Spreadsheet::ParseExcel::FmtDefault::BEGIN@20 which was called: # once (3µs+15µs) by Spreadsheet::ParseExcel::BEGIN@36 at line 20
use warnings;
# spent 18µs making 1 call to Spreadsheet::ParseExcel::FmtDefault::BEGIN@20 # spent 15µs making 1 call to warnings::import
21
222412µs23.35ms
# spent 3.33ms (3.26+74µs) within Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 which was called: # once (3.26ms+74µs) by Spreadsheet::ParseExcel::BEGIN@36 at line 22
use Spreadsheet::ParseExcel::Utility qw(ExcelFmt);
# spent 3.33ms making 1 call to Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 # spent 26µs making 1 call to Exporter::import
231300nsour $VERSION = '0.66';
24
25111µsmy %hFmtDefault = (
26 0x00 => 'General',
27 0x01 => '0',
28 0x02 => '0.00',
29 0x03 => '#,##0',
30 0x04 => '#,##0.00',
31 0x05 => '($#,##0_);($#,##0)',
32 0x06 => '($#,##0_);[Red]($#,##0)',
33 0x07 => '($#,##0.00_);($#,##0.00_)',
34 0x08 => '($#,##0.00_);[Red]($#,##0.00_)',
35 0x09 => '0%',
36 0x0A => '0.00%',
37 0x0B => '0.00E+00',
38 0x0C => '# ?/?',
39 0x0D => '# ??/??',
40 0x0E => 'yyyy-mm-dd', # Was 'm-d-yy', which is bad as system default
41 0x0F => 'd-mmm-yy',
42 0x10 => 'd-mmm',
43 0x11 => 'mmm-yy',
44 0x12 => 'h:mm AM/PM',
45 0x13 => 'h:mm:ss AM/PM',
46 0x14 => 'h:mm',
47 0x15 => 'h:mm:ss',
48 0x16 => 'm-d-yy h:mm',
49
50 #0x17-0x24 -- Differs in Natinal
51 0x25 => '(#,##0_);(#,##0)',
52 0x26 => '(#,##0_);[Red](#,##0)',
53 0x27 => '(#,##0.00);(#,##0.00)',
54 0x28 => '(#,##0.00);[Red](#,##0.00)',
55 0x29 => '_(*#,##0_);_(*(#,##0);_(*"-"_);_(@_)',
56 0x2A => '_($*#,##0_);_($*(#,##0);_(*"-"_);_(@_)',
57 0x2B => '_(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_)',
58 0x2C => '_($*#,##0.00_);_($*(#,##0.00);_(*"-"??_);_(@_)',
59 0x2D => 'mm:ss',
60 0x2E => '[h]:mm:ss',
61 0x2F => 'mm:ss.0',
62 0x30 => '##0.0E+0',
63 0x31 => '@',
64);
65
66#------------------------------------------------------------------------------
67# new (for Spreadsheet::ParseExcel::FmtDefault)
68#------------------------------------------------------------------------------
69
# spent 3µs within Spreadsheet::ParseExcel::FmtDefault::new which was called: # once (3µs+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 151 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub new {
701700ns my ( $sPkg, %hKey ) = @_;
711300ns my $oThis = {};
721400ns bless $oThis;
7312µs return $oThis;
74}
75
76#------------------------------------------------------------------------------
77# TextFmt (for Spreadsheet::ParseExcel::FmtDefault)
78#------------------------------------------------------------------------------
79
# spent 128ms within Spreadsheet::ParseExcel::FmtDefault::TextFmt which was called 127276 times, avg 1µs/call: # 127276 times (128ms+0s) by Spreadsheet::ParseExcel::FmtDefault::ValFmt at line 151, avg 1µs/call
sub TextFmt {
8012727664.3ms my ( $oThis, $sTxt, $sCode ) = @_;
81127276352ms return $sTxt if ( ( !defined($sCode) ) || ( $sCode eq '_native_' ) );
82 return pack( 'U*', unpack( 'n*', $sTxt ) );
83}
84
85#------------------------------------------------------------------------------
86# FmtStringDef (for Spreadsheet::ParseExcel::FmtDefault)
87#------------------------------------------------------------------------------
88sub FmtStringDef {
89 my ( $oThis, $iFmtIdx, $oBook, $rhFmt ) = @_;
90 my $sFmtStr = $oBook->{FormatStr}->{$iFmtIdx};
91
92 if ( !( defined($sFmtStr) ) && defined($rhFmt) ) {
93 $sFmtStr = $rhFmt->{$iFmtIdx};
94 }
95 $sFmtStr = $hFmtDefault{$iFmtIdx} unless ($sFmtStr);
96 return $sFmtStr;
97}
98
99#------------------------------------------------------------------------------
100# FmtString (for Spreadsheet::ParseExcel::FmtDefault)
101#------------------------------------------------------------------------------
102sub FmtString {
103 my ( $oThis, $oCell, $oBook ) = @_;
104
105 my $sFmtStr =
106 $oThis->FmtStringDef( $oBook->{Format}[ $oCell->{FormatNo} ]->{FmtIdx},
107 $oBook );
108
109 # Special case for cells that use Lotus123 style leading
110 # apostrophe to designate text formatting.
111 if ( $oBook->{Format}[ $oCell->{FormatNo} ]->{Key123} ) {
112 $sFmtStr = '@';
113 }
114
115 unless ( defined($sFmtStr) ) {
116 if ( $oCell->{Type} eq 'Numeric' ) {
117 if ( int( $oCell->{Val} ) != $oCell->{Val} ) {
118 $sFmtStr = '0.00';
119 }
120 else {
121 $sFmtStr = '0';
122 }
123 }
124 elsif ( $oCell->{Type} eq 'Date' ) {
125 if ( int( $oCell->{Val} ) <= 0 ) {
126 $sFmtStr = 'h:mm:ss';
127 }
128 else {
129 $sFmtStr = 'yyyy-mm-dd';
130 }
131 }
132 else {
133 $sFmtStr = '@';
134 }
135 }
136 return $sFmtStr;
137}
138
139#------------------------------------------------------------------------------
140# ValFmt (for Spreadsheet::ParseExcel::FmtDefault)
141#------------------------------------------------------------------------------
142
# spent 810ms (682+128) within Spreadsheet::ParseExcel::FmtDefault::ValFmt which was called 202907 times, avg 4µs/call: # 202907 times (682ms+128ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 436 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 4µs/call
sub ValFmt {
14320290726.4ms my ( $oThis, $oCell, $oBook ) = @_;
144
14520290715.0ms my ( $Dt, $iFmtIdx, $iNumeric, $Flg1904 );
146
14720290747.6ms if ( $oCell->{Type} eq 'Text' ) {
148 $Dt =
149 ( ( defined $oCell->{Val} ) && ( $oCell->{Val} ne '' ) )
150 ? $oThis->TextFmt( $oCell->{Val}, $oCell->{Code} )
151202907198ms127276128ms : '';
# spent 128ms making 127276 calls to Spreadsheet::ParseExcel::FmtDefault::TextFmt, avg 1µs/call
152
153202907508ms return $Dt;
154 }
155 else {
156 $Dt = $oCell->{Val};
157 $Flg1904 = $oBook->{Flg1904};
158 my $sFmtStr = $oThis->FmtString( $oCell, $oBook );
159
160 return ExcelFmt( $sFmtStr, $Dt, $Flg1904, $oCell->{Type} );
161 }
162}
163
164#------------------------------------------------------------------------------
165# ChkType (for Spreadsheet::ParseExcel::FmtDefault)
166#------------------------------------------------------------------------------
167sub ChkType {
168 my ( $oPkg, $iNumeric, $iFmtIdx ) = @_;
169 if ($iNumeric) {
170 if ( ( ( $iFmtIdx >= 0x0E ) && ( $iFmtIdx <= 0x16 ) )
171 || ( ( $iFmtIdx >= 0x2D ) && ( $iFmtIdx <= 0x2F ) ) )
172 {
173 return "Date";
174 }
175 else {
176 return "Numeric";
177 }
178 }
179 else {
180 return "Text";
181 }
182}
183
18415µs1;
185
186__END__










Spreadsheet-ParseXLSX-0.35/nytprof/List-Util-pm-8-line.html0000644000175000017500000040627214576335353022375 0ustar michamicha Profile of List/Util.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/List/Util.pm
StatementsExecuted 23 statements in 617µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs13µsList::Util::::BEGIN@9 List::Util::BEGIN@9
22211µs11µsList::Util::::import List::Util::import
1116µs10µsList::Util::::BEGIN@35 List::Util::BEGIN@35
1114µs20µsList::Util::::BEGIN@10 List::Util::BEGIN@10
0000s0sList::Util::_Pair::::TO_JSONList::Util::_Pair::TO_JSON
0000s0sList::Util::_Pair::::keyList::Util::_Pair::key
0000s0sList::Util::_Pair::::valueList::Util::_Pair::value
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# Copyright (c) 1997-2009 Graham Barr <gbarr@pobox.com>. All rights reserved.
2# This program is free software; you can redistribute it and/or
3# modify it under the same terms as Perl itself.
4#
5# Maintained since 2013 by Paul Evans <leonerd@leonerd.org.uk>
6
7package List::Util;
8
9234µs215µs
# spent 13µs (11+2) within List::Util::BEGIN@9 which was called: # once (11µs+2µs) by Test::Builder::BEGIN@15 at line 9
use strict;
# spent 13µs making 1 call to List::Util::BEGIN@9 # spent 2µs making 1 call to strict::import
10287µs236µs
# spent 20µs (4+16) within List::Util::BEGIN@10 which was called: # once (4µs+16µs) by Test::Builder::BEGIN@15 at line 10
use warnings;
# spent 20µs making 1 call to List::Util::BEGIN@10 # spent 16µs making 1 call to warnings::import
111500nsrequire Exporter;
12
1316µsour @ISA = qw(Exporter);
1412µsour @EXPORT_OK = qw(
15 all any first min max minstr maxstr none notall product reduce reductions sum sum0
16 sample shuffle uniq uniqint uniqnum uniqstr zip zip_longest zip_shortest mesh mesh_longest mesh_shortest
17 head tail pairs unpairs pairkeys pairvalues pairmap pairgrep pairfirst
18);
191200nsour $VERSION = "1.63";
201100nsour $XS_VERSION = $VERSION;
211800ns$VERSION =~ tr/_//d;
22
231200nsrequire XSLoader;
241171µs1165µsXSLoader::load('List::Util', $XS_VERSION);
# spent 165µs making 1 call to XSLoader::load
25
26# Used by shuffle()
27our $RAND;
28
29sub import
30
# spent 11µs within List::Util::import which was called 2 times, avg 5µs/call: # once (6µs+0s) by OLE::Storage_Lite::BEGIN@831 at line 831 of OLE/Storage_Lite.pm # once (4µs+0s) by Test2::Hub::BEGIN@12 at line 12 of Test2/Hub.pm
{
312900ns my $pkg = caller;
32
33 # (RT88848) Touch the caller's $a and $b, to avoid the warning of
34 # Name "main::a" used only once: possible typo" warning
352290µs214µs
# spent 10µs (6+4) within List::Util::BEGIN@35 which was called: # once (6µs+4µs) by Test::Builder::BEGIN@15 at line 35
no strict 'refs';
# spent 10µs making 1 call to List::Util::BEGIN@35 # spent 4µs making 1 call to strict::unimport
3624µs ${"${pkg}::a"} = ${"${pkg}::a"};
3723µs ${"${pkg}::b"} = ${"${pkg}::b"};
38
39210µs259µs goto &Exporter::import;
# spent 59µs making 2 calls to Exporter::import, avg 30µs/call
40}
41
42# For objects returned by pairs()
43sub List::Util::_Pair::key { shift->[0] }
44sub List::Util::_Pair::value { shift->[1] }
45sub List::Util::_Pair::TO_JSON { [ @{+shift} ] }
46
47=head1 NAME
48
49List::Util - A selection of general-utility list subroutines
50
51=head1 SYNOPSIS
52
53 use List::Util qw(
54 reduce any all none notall first reductions
55
56 max maxstr min minstr product sum sum0
57
58 pairs unpairs pairkeys pairvalues pairfirst pairgrep pairmap
59
60 shuffle uniq uniqint uniqnum uniqstr zip mesh
61 );
62
63=head1 DESCRIPTION
64
65C<List::Util> contains a selection of subroutines that people have expressed
66would be nice to have in the perl core, but the usage would not really be high
67enough to warrant the use of a keyword, and the size so small such that being
68individual extensions would be wasteful.
69
70By default C<List::Util> does not export any subroutines.
71
72=cut
73
74=head1 LIST-REDUCTION FUNCTIONS
75
76The following set of functions all apply a given block of code to a list of
77values.
78
79=cut
80
81=head2 reduce
82
83 $result = reduce { BLOCK } @list
84
85Reduces C<@list> by calling C<BLOCK> in a scalar context multiple times,
86setting C<$a> and C<$b> each time. The first call will be with C<$a> and C<$b>
87set to the first two elements of the list, subsequent calls will be done by
88setting C<$a> to the result of the previous call and C<$b> to the next element
89in the list.
90
91Returns the result of the last call to the C<BLOCK>. If C<@list> is empty then
92C<undef> is returned. If C<@list> only contains one element then that element
93is returned and C<BLOCK> is not executed.
94
95The following examples all demonstrate how C<reduce> could be used to implement
96the other list-reduction functions in this module. (They are not in fact
97implemented like this, but instead in a more efficient manner in individual C
98functions).
99
100 $foo = reduce { defined($a) ? $a :
101 $code->(local $_ = $b) ? $b :
102 undef } undef, @list # first
103
104 $foo = reduce { $a > $b ? $a : $b } 1..10 # max
105 $foo = reduce { $a gt $b ? $a : $b } 'A'..'Z' # maxstr
106 $foo = reduce { $a < $b ? $a : $b } 1..10 # min
107 $foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr
108 $foo = reduce { $a + $b } 1 .. 10 # sum
109 $foo = reduce { $a . $b } @bar # concat
110
111 $foo = reduce { $a || $code->(local $_ = $b) } 0, @bar # any
112 $foo = reduce { $a && $code->(local $_ = $b) } 1, @bar # all
113 $foo = reduce { $a && !$code->(local $_ = $b) } 1, @bar # none
114 $foo = reduce { $a || !$code->(local $_ = $b) } 0, @bar # notall
115 # Note that these implementations do not fully short-circuit
116
117If your algorithm requires that C<reduce> produce an identity value, then make
118sure that you always pass that identity value as the first argument to prevent
119C<undef> being returned
120
121 $foo = reduce { $a + $b } 0, @values; # sum with 0 identity value
122
123The above example code blocks also suggest how to use C<reduce> to build a
124more efficient combined version of one of these basic functions and a C<map>
125block. For example, to find the total length of all the strings in a list,
126we could use
127
128 $total = sum map { length } @strings;
129
130However, this produces a list of temporary integer values as long as the
131original list of strings, only to reduce it down to a single value again. We
132can compute the same result more efficiently by using C<reduce> with a code
133block that accumulates lengths by writing this instead as:
134
135 $total = reduce { $a + length $b } 0, @strings
136
137The other scalar-returning list reduction functions are all specialisations of
138this generic idea.
139
140=head2 reductions
141
142 @results = reductions { BLOCK } @list
143
144I<Since version 1.54.>
145
146Similar to C<reduce> except that it also returns the intermediate values along
147with the final result. As before, C<$a> is set to the first element of the
148given list, and the C<BLOCK> is then called once for remaining item in the
149list set into C<$b>, with the result being captured for return as well as
150becoming the new value for C<$a>.
151
152The returned list will begin with the initial value for C<$a>, followed by
153each return value from the block in order. The final value of the result will
154be identical to what the C<reduce> function would have returned given the same
155block and list.
156
157 reduce { "$a-$b" } "a".."d" # "a-b-c-d"
158 reductions { "$a-$b" } "a".."d" # "a", "a-b", "a-b-c", "a-b-c-d"
159
160=head2 any
161
162 my $bool = any { BLOCK } @list;
163
164I<Since version 1.33.>
165
166Similar to C<grep> in that it evaluates C<BLOCK> setting C<$_> to each element
167of C<@list> in turn. C<any> returns true if any element makes the C<BLOCK>
168return a true value. If C<BLOCK> never returns true or C<@list> was empty then
169it returns false.
170
171Many cases of using C<grep> in a conditional can be written using C<any>
172instead, as it can short-circuit after the first true result.
173
174 if( any { length > 10 } @strings ) {
175 # at least one string has more than 10 characters
176 }
177
178Note: Due to XS issues the block passed may be able to access the outer @_
179directly. This is not intentional and will break under debugger.
180
181=head2 all
182
183 my $bool = all { BLOCK } @list;
184
185I<Since version 1.33.>
186
187Similar to L</any>, except that it requires all elements of the C<@list> to
188make the C<BLOCK> return true. If any element returns false, then it returns
189false. If the C<BLOCK> never returns false or the C<@list> was empty then it
190returns true.
191
192Note: Due to XS issues the block passed may be able to access the outer @_
193directly. This is not intentional and will break under debugger.
194
195=head2 none
196
197=head2 notall
198
199 my $bool = none { BLOCK } @list;
200
201 my $bool = notall { BLOCK } @list;
202
203I<Since version 1.33.>
204
205Similar to L</any> and L</all>, but with the return sense inverted. C<none>
206returns true only if no value in the C<@list> causes the C<BLOCK> to return
207true, and C<notall> returns true only if not all of the values do.
208
209Note: Due to XS issues the block passed may be able to access the outer @_
210directly. This is not intentional and will break under debugger.
211
212=head2 first
213
214 my $val = first { BLOCK } @list;
215
216Similar to C<grep> in that it evaluates C<BLOCK> setting C<$_> to each element
217of C<@list> in turn. C<first> returns the first element where the result from
218C<BLOCK> is a true value. If C<BLOCK> never returns true or C<@list> was empty
219then C<undef> is returned.
220
221 $foo = first { defined($_) } @list # first defined value in @list
222 $foo = first { $_ > $value } @list # first value in @list which
223 # is greater than $value
224
225=head2 max
226
227 my $num = max @list;
228
229Returns the entry in the list with the highest numerical value. If the list is
230empty then C<undef> is returned.
231
232 $foo = max 1..10 # 10
233 $foo = max 3,9,12 # 12
234 $foo = max @bar, @baz # whatever
235
236=head2 maxstr
237
238 my $str = maxstr @list;
239
240Similar to L</max>, but treats all the entries in the list as strings and
241returns the highest string as defined by the C<gt> operator. If the list is
242empty then C<undef> is returned.
243
244 $foo = maxstr 'A'..'Z' # 'Z'
245 $foo = maxstr "hello","world" # "world"
246 $foo = maxstr @bar, @baz # whatever
247
248=head2 min
249
250 my $num = min @list;
251
252Similar to L</max> but returns the entry in the list with the lowest numerical
253value. If the list is empty then C<undef> is returned.
254
255 $foo = min 1..10 # 1
256 $foo = min 3,9,12 # 3
257 $foo = min @bar, @baz # whatever
258
259=head2 minstr
260
261 my $str = minstr @list;
262
263Similar to L</min>, but treats all the entries in the list as strings and
264returns the lowest string as defined by the C<lt> operator. If the list is
265empty then C<undef> is returned.
266
267 $foo = minstr 'A'..'Z' # 'A'
268 $foo = minstr "hello","world" # "hello"
269 $foo = minstr @bar, @baz # whatever
270
271=head2 product
272
273 my $num = product @list;
274
275I<Since version 1.35.>
276
277Returns the numerical product of all the elements in C<@list>. If C<@list> is
278empty then C<1> is returned.
279
280 $foo = product 1..10 # 3628800
281 $foo = product 3,9,12 # 324
282
283=head2 sum
284
285 my $num_or_undef = sum @list;
286
287Returns the numerical sum of all the elements in C<@list>. For backwards
288compatibility, if C<@list> is empty then C<undef> is returned.
289
290 $foo = sum 1..10 # 55
291 $foo = sum 3,9,12 # 24
292 $foo = sum @bar, @baz # whatever
293
294=head2 sum0
295
296 my $num = sum0 @list;
297
298I<Since version 1.26.>
299
300Similar to L</sum>, except this returns 0 when given an empty list, rather
301than C<undef>.
302
303=cut
304
305=head1 KEY/VALUE PAIR LIST FUNCTIONS
306
307The following set of functions, all inspired by L<List::Pairwise>, consume an
308even-sized list of pairs. The pairs may be key/value associations from a hash,
309or just a list of values. The functions will all preserve the original ordering
310of the pairs, and will not be confused by multiple pairs having the same "key"
311value - nor even do they require that the first of each pair be a plain string.
312
313B<NOTE>: At the time of writing, the following C<pair*> functions that take a
314block do not modify the value of C<$_> within the block, and instead operate
315using the C<$a> and C<$b> globals instead. This has turned out to be a poor
316design, as it precludes the ability to provide a C<pairsort> function. Better
317would be to pass pair-like objects as 2-element array references in C<$_>, in
318a style similar to the return value of the C<pairs> function. At some future
319version this behaviour may be added.
320
321Until then, users are alerted B<NOT> to rely on the value of C<$_> remaining
322unmodified between the outside and the inside of the control block. In
323particular, the following example is B<UNSAFE>:
324
325 my @kvlist = ...
326
327 foreach (qw( some keys here )) {
328 my @items = pairgrep { $a eq $_ } @kvlist;
329 ...
330 }
331
332Instead, write this using a lexical variable:
333
334 foreach my $key (qw( some keys here )) {
335 my @items = pairgrep { $a eq $key } @kvlist;
336 ...
337 }
338
339=cut
340
341=head2 pairs
342
343 my @pairs = pairs @kvlist;
344
345I<Since version 1.29.>
346
347A convenient shortcut to operating on even-sized lists of pairs, this function
348returns a list of C<ARRAY> references, each containing two items from the
349given list. It is a more efficient version of
350
351 @pairs = pairmap { [ $a, $b ] } @kvlist
352
353It is most convenient to use in a C<foreach> loop, for example:
354
355 foreach my $pair ( pairs @kvlist ) {
356 my ( $key, $value ) = @$pair;
357 ...
358 }
359
360Since version C<1.39> these C<ARRAY> references are blessed objects,
361recognising the two methods C<key> and C<value>. The following code is
362equivalent:
363
364 foreach my $pair ( pairs @kvlist ) {
365 my $key = $pair->key;
366 my $value = $pair->value;
367 ...
368 }
369
370Since version C<1.51> they also have a C<TO_JSON> method to ease
371serialisation.
372
373=head2 unpairs
374
375 my @kvlist = unpairs @pairs
376
377I<Since version 1.42.>
378
379The inverse function to C<pairs>; this function takes a list of C<ARRAY>
380references containing two elements each, and returns a flattened list of the
381two values from each of the pairs, in order. This is notionally equivalent to
382
383 my @kvlist = map { @{$_}[0,1] } @pairs
384
385except that it is implemented more efficiently internally. Specifically, for
386any input item it will extract exactly two values for the output list; using
387C<undef> if the input array references are short.
388
389Between C<pairs> and C<unpairs>, a higher-order list function can be used to
390operate on the pairs as single scalars; such as the following near-equivalents
391of the other C<pair*> higher-order functions:
392
393 @kvlist = unpairs grep { FUNC } pairs @kvlist
394 # Like pairgrep, but takes $_ instead of $a and $b
395
396 @kvlist = unpairs map { FUNC } pairs @kvlist
397 # Like pairmap, but takes $_ instead of $a and $b
398
399Note however that these versions will not behave as nicely in scalar context.
400
401Finally, this technique can be used to implement a sort on a keyvalue pair
402list; e.g.:
403
404 @kvlist = unpairs sort { $a->key cmp $b->key } pairs @kvlist
405
406=head2 pairkeys
407
408 my @keys = pairkeys @kvlist;
409
410I<Since version 1.29.>
411
412A convenient shortcut to operating on even-sized lists of pairs, this function
413returns a list of the the first values of each of the pairs in the given list.
414It is a more efficient version of
415
416 @keys = pairmap { $a } @kvlist
417
418=head2 pairvalues
419
420 my @values = pairvalues @kvlist;
421
422I<Since version 1.29.>
423
424A convenient shortcut to operating on even-sized lists of pairs, this function
425returns a list of the the second values of each of the pairs in the given list.
426It is a more efficient version of
427
428 @values = pairmap { $b } @kvlist
429
430=head2 pairgrep
431
432 my @kvlist = pairgrep { BLOCK } @kvlist;
433
434 my $count = pairgrep { BLOCK } @kvlist;
435
436I<Since version 1.29.>
437
438Similar to perl's C<grep> keyword, but interprets the given list as an
439even-sized list of pairs. It invokes the C<BLOCK> multiple times, in scalar
440context, with C<$a> and C<$b> set to successive pairs of values from the
441C<@kvlist>.
442
443Returns an even-sized list of those pairs for which the C<BLOCK> returned true
444in list context, or the count of the B<number of pairs> in scalar context.
445(Note, therefore, in scalar context that it returns a number half the size of
446the count of items it would have returned in list context).
447
448 @subset = pairgrep { $a =~ m/^[[:upper:]]+$/ } @kvlist
449
450As with C<grep> aliasing C<$_> to list elements, C<pairgrep> aliases C<$a> and
451C<$b> to elements of the given list. Any modifications of it by the code block
452will be visible to the caller.
453
454=head2 pairfirst
455
456 my ( $key, $val ) = pairfirst { BLOCK } @kvlist;
457
458 my $found = pairfirst { BLOCK } @kvlist;
459
460I<Since version 1.30.>
461
462Similar to the L</first> function, but interprets the given list as an
463even-sized list of pairs. It invokes the C<BLOCK> multiple times, in scalar
464context, with C<$a> and C<$b> set to successive pairs of values from the
465C<@kvlist>.
466
467Returns the first pair of values from the list for which the C<BLOCK> returned
468true in list context, or an empty list of no such pair was found. In scalar
469context it returns a simple boolean value, rather than either the key or the
470value found.
471
472 ( $key, $value ) = pairfirst { $a =~ m/^[[:upper:]]+$/ } @kvlist
473
474As with C<grep> aliasing C<$_> to list elements, C<pairfirst> aliases C<$a> and
475C<$b> to elements of the given list. Any modifications of it by the code block
476will be visible to the caller.
477
478=head2 pairmap
479
480 my @list = pairmap { BLOCK } @kvlist;
481
482 my $count = pairmap { BLOCK } @kvlist;
483
484I<Since version 1.29.>
485
486Similar to perl's C<map> keyword, but interprets the given list as an
487even-sized list of pairs. It invokes the C<BLOCK> multiple times, in list
488context, with C<$a> and C<$b> set to successive pairs of values from the
489C<@kvlist>.
490
491Returns the concatenation of all the values returned by the C<BLOCK> in list
492context, or the count of the number of items that would have been returned in
493scalar context.
494
495 @result = pairmap { "The key $a has value $b" } @kvlist
496
497As with C<map> aliasing C<$_> to list elements, C<pairmap> aliases C<$a> and
498C<$b> to elements of the given list. Any modifications of it by the code block
499will be visible to the caller.
500
501See L</KNOWN BUGS> for a known-bug with C<pairmap>, and a workaround.
502
503=cut
504
505=head1 OTHER FUNCTIONS
506
507=cut
508
509=head2 shuffle
510
511 my @values = shuffle @values;
512
513Returns the values of the input in a random order
514
515 @cards = shuffle 0..51 # 0..51 in a random order
516
517This function is affected by the C<$RAND> variable.
518
519=cut
520
521=head2 sample
522
523 my @items = sample $count, @values
524
525I<Since version 1.54.>
526
527Randomly select the given number of elements from the input list. Any given
528position in the input list will be selected at most once.
529
530If there are fewer than C<$count> items in the list then the function will
531return once all of them have been randomly selected; effectively the function
532behaves similarly to L</shuffle>.
533
534This function is affected by the C<$RAND> variable.
535
536=head2 uniq
537
538 my @subset = uniq @values
539
540I<Since version 1.45.>
541
542Filters a list of values to remove subsequent duplicates, as judged by a
543DWIM-ish string equality or C<undef> test. Preserves the order of unique
544elements, and retains the first value of any duplicate set.
545
546 my $count = uniq @values
547
548In scalar context, returns the number of elements that would have been
549returned as a list.
550
551The C<undef> value is treated by this function as distinct from the empty
552string, and no warning will be produced. It is left as-is in the returned
553list. Subsequent C<undef> values are still considered identical to the first,
554and will be removed.
555
556=head2 uniqint
557
558 my @subset = uniqint @values
559
560I<Since version 1.55.>
561
562Filters a list of values to remove subsequent duplicates, as judged by an
563integer numerical equality test. Preserves the order of unique elements, and
564retains the first value of any duplicate set. Values in the returned list will
565be coerced into integers.
566
567 my $count = uniqint @values
568
569In scalar context, returns the number of elements that would have been
570returned as a list.
571
572Note that C<undef> is treated much as other numerical operations treat it; it
573compares equal to zero but additionally produces a warning if such warnings
574are enabled (C<use warnings 'uninitialized';>). In addition, an C<undef> in
575the returned list is coerced into a numerical zero, so that the entire list of
576values returned by C<uniqint> are well-behaved as integers.
577
578=head2 uniqnum
579
580 my @subset = uniqnum @values
581
582I<Since version 1.44.>
583
584Filters a list of values to remove subsequent duplicates, as judged by a
585numerical equality test. Preserves the order of unique elements, and retains
586the first value of any duplicate set.
587
588 my $count = uniqnum @values
589
590In scalar context, returns the number of elements that would have been
591returned as a list.
592
593Note that C<undef> is treated much as other numerical operations treat it; it
594compares equal to zero but additionally produces a warning if such warnings
595are enabled (C<use warnings 'uninitialized';>). In addition, an C<undef> in
596the returned list is coerced into a numerical zero, so that the entire list of
597values returned by C<uniqnum> are well-behaved as numbers.
598
599Note also that multiple IEEE C<NaN> values are treated as duplicates of
600each other, regardless of any differences in their payloads, and despite
601the fact that C<< 0+'NaN' == 0+'NaN' >> yields false.
602
603=head2 uniqstr
604
605 my @subset = uniqstr @values
606
607I<Since version 1.45.>
608
609Filters a list of values to remove subsequent duplicates, as judged by a
610string equality test. Preserves the order of unique elements, and retains the
611first value of any duplicate set.
612
613 my $count = uniqstr @values
614
615In scalar context, returns the number of elements that would have been
616returned as a list.
617
618Note that C<undef> is treated much as other string operations treat it; it
619compares equal to the empty string but additionally produces a warning if such
620warnings are enabled (C<use warnings 'uninitialized';>). In addition, an
621C<undef> in the returned list is coerced into an empty string, so that the
622entire list of values returned by C<uniqstr> are well-behaved as strings.
623
624=cut
625
626=head2 head
627
628 my @values = head $size, @list;
629
630I<Since version 1.50.>
631
632Returns the first C<$size> elements from C<@list>. If C<$size> is negative, returns
633all but the last C<$size> elements from C<@list>.
634
635 @result = head 2, qw( foo bar baz );
636 # foo, bar
637
638 @result = head -2, qw( foo bar baz );
639 # foo
640
641=head2 tail
642
643 my @values = tail $size, @list;
644
645I<Since version 1.50.>
646
647Returns the last C<$size> elements from C<@list>. If C<$size> is negative, returns
648all but the first C<$size> elements from C<@list>.
649
650 @result = tail 2, qw( foo bar baz );
651 # bar, baz
652
653 @result = tail -2, qw( foo bar baz );
654 # baz
655
656=head2 zip
657
658 my @result = zip [1..3], ['a'..'c'];
659 # [1, 'a'], [2, 'b'], [3, 'c']
660
661I<Since version 1.56.>
662
663Returns a list of array references, composed of elements from the given list
664of array references. Each array in the returned list is composed of elements
665at that corresponding position from each of the given input arrays. If any
666input arrays run out of elements before others, then C<undef> will be inserted
667into the result to fill in the gaps.
668
669The C<zip> function is particularly handy for iterating over multiple arrays
670at the same time with a C<foreach> loop, taking one element from each:
671
672 foreach ( zip \@xs, \@ys, \@zs ) {
673 my ($x, $y, $z) = @$_;
674 ...
675 }
676
677B<NOTE> to users of L<List::MoreUtils>: This function does not behave the same
678as C<List::MoreUtils::zip>, but is actually a non-prototyped equivalent to
679C<List::MoreUtils::zip_unflatten>. This function does not apply a prototype,
680so make sure to invoke it with references to arrays.
681
682For a function similar to the C<zip> function from C<List::MoreUtils>, see
683L<mesh>.
684
685 my @result = zip_shortest ...
686
687A variation of the function that differs in how it behaves when given input
688arrays of differing lengths. C<zip_shortest> will stop as soon as any one of
689the input arrays run out of elements, discarding any remaining unused values
690from the others.
691
692 my @result = zip_longest ...
693
694C<zip_longest> is an alias to the C<zip> function, provided simply to be
695explicit about that behaviour as compared to C<zip_shortest>.
696
697=head2 mesh
698
699 my @result = mesh [1..3], ['a'..'c'];
700 # (1, 'a', 2, 'b', 3, 'c')
701
702I<Since version 1.56.>
703
704Returns a list of items collected from elements of the given list of array
705references. Each section of items in the returned list is composed of elements
706at the corresponding position from each of the given input arrays. If any
707input arrays run out of elements before others, then C<undef> will be inserted
708into the result to fill in the gaps.
709
710This is similar to L<zip>, except that all of the ranges in the result are
711returned in one long flattened list, instead of being bundled into separate
712arrays.
713
714Because it returns a flat list of items, the C<mesh> function is particularly
715useful for building a hash out of two separate arrays of keys and values:
716
717 my %hash = mesh \@keys, \@values;
718
719 my $href = { mesh \@keys, \@values };
720
721B<NOTE> to users of L<List::MoreUtils>: This function is a non-prototyped
722equivalent to C<List::MoreUtils::mesh> or C<List::MoreUtils::zip> (themselves
723aliases of each other). This function does not apply a prototype, so make sure
724to invoke it with references to arrays.
725
726 my @result = mesh_shortest ...
727
728 my @result = mesh_longest ...
729
730These variations are similar to those of L<zip>, in that they differ in
731behaviour when one of the input lists runs out of elements before the others.
732
733=head1 CONFIGURATION VARIABLES
734
735=head2 $RAND
736
737 local $List::Util::RAND = sub { ... };
738
739I<Since version 1.54.>
740
741This package variable is used by code which needs to generate random numbers
742(such as the L</shuffle> and L</sample> functions). If set to a CODE reference
743it provides an alternative to perl's builtin C<rand()> function. When a new
744random number is needed this function will be invoked with no arguments and is
745expected to return a floating-point value, of which only the fractional part
746will be used.
747
748=head1 KNOWN BUGS
749
750=head2 RT #95409
751
752L<https://rt.cpan.org/Ticket/Display.html?id=95409>
753
754If the block of code given to L</pairmap> contains lexical variables that are
755captured by a returned closure, and the closure is executed after the block
756has been re-used for the next iteration, these lexicals will not see the
757correct values. For example:
758
759 my @subs = pairmap {
760 my $var = "$a is $b";
761 sub { print "$var\n" };
762 } one => 1, two => 2, three => 3;
763
764 $_->() for @subs;
765
766Will incorrectly print
767
768 three is 3
769 three is 3
770 three is 3
771
772This is due to the performance optimisation of using C<MULTICALL> for the code
773block, which means that fresh SVs do not get allocated for each call to the
774block. Instead, the same SV is re-assigned for each iteration, and all the
775closures will share the value seen on the final iteration.
776
777To work around this bug, surround the code with a second set of braces. This
778creates an inner block that defeats the C<MULTICALL> logic, and does get fresh
779SVs allocated each time:
780
781 my @subs = pairmap {
782 {
783 my $var = "$a is $b";
784 sub { print "$var\n"; }
785 }
786 } one => 1, two => 2, three => 3;
787
788This bug only affects closures that are generated by the block but used
789afterwards. Lexical variables that are only used during the lifetime of the
790block's execution will take their individual values for each invocation, as
791normal.
792
793=head2 uniqnum() on oversized bignums
794
795Due to the way that C<uniqnum()> compares numbers, it cannot distinguish
796differences between bignums (especially bigints) that are too large to fit in
797the native platform types. For example,
798
799 my $x = Math::BigInt->new( "1" x 100 );
800 my $y = $x + 1;
801
802 say for uniqnum( $x, $y );
803
804Will print just the value of C<$x>, believing that C<$y> is a numerically-
805equivalent value. This bug does not affect C<uniqstr()>, which will correctly
806observe that the two values stringify to different strings.
807
808=head1 SUGGESTED ADDITIONS
809
810The following are additions that have been requested, but I have been reluctant
811to add due to them being very simple to implement in perl
812
813 # How many elements are true
814
815 sub true { scalar grep { $_ } @_ }
816
817 # How many elements are false
818
819 sub false { scalar grep { !$_ } @_ }
820
821=head1 SEE ALSO
822
823L<Scalar::Util>, L<List::MoreUtils>
824
825=head1 COPYRIGHT
826
827Copyright (c) 1997-2007 Graham Barr <gbarr@pobox.com>. All rights reserved.
828This program is free software; you can redistribute it and/or
829modify it under the same terms as Perl itself.
830
831Recent additions and current maintenance by
832Paul Evans, <leonerd@leonerd.org.uk>.
833
834=cut
835
83616µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Crypt-RC4-pm-120-line.html0000644000175000017500000006476414576335353022377 0ustar michamicha Profile of Crypt/RC4.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Crypt/RC4.pm
StatementsExecuted 10 statements in 298µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsCrypt::RC4::::BEGIN@15Crypt::RC4::BEGIN@15
1113µs27µsCrypt::RC4::::BEGIN@16Crypt::RC4::BEGIN@16
0000s0sCrypt::RC4::::RC4Crypt::RC4::RC4
0000s0sCrypt::RC4::::SetupCrypt::RC4::Setup
0000s0sCrypt::RC4::::newCrypt::RC4::new
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#--------------------------------------------------------------------#
2# Crypt::RC4
3# Date Written: 07-Jun-2000 04:15:55 PM
4# Last Modified: 13-Dec-2001 03:33:49 PM
5# Author: Kurt Kincaid (sifukurt@yahoo.com)
6# Copyright (c) 2001, Kurt Kincaid
7# All Rights Reserved.
8#
9# This is free software and may be modified and/or
10# redistributed under the same terms as Perl itself.
11#--------------------------------------------------------------------#
12
13package Crypt::RC4;
14
15220µs212µs
# spent 11µs (9+1) within Crypt::RC4::BEGIN@15 which was called: # once (9µs+1µs) by Spreadsheet::ParseExcel::BEGIN@26 at line 15
use strict;
# spent 11µs making 1 call to Crypt::RC4::BEGIN@15 # spent 1µs making 1 call to strict::import
162269µs251µs
# spent 27µs (3+24) within Crypt::RC4::BEGIN@16 which was called: # once (3µs+24µs) by Spreadsheet::ParseExcel::BEGIN@26 at line 16
use vars qw( $VERSION @ISA @EXPORT $MAX_CHUNK_SIZE );
# spent 27µs making 1 call to Crypt::RC4::BEGIN@16 # spent 24µs making 1 call to vars::import
17
181300ns$MAX_CHUNK_SIZE = 1024 unless $MAX_CHUNK_SIZE;
19
201300nsrequire Exporter;
21
2215µs@ISA = qw(Exporter);
231300ns@EXPORT = qw(RC4);
241100ns$VERSION = '2.02';
25
26sub new {
27 my ( $class, $key ) = @_;
28 my $self = bless {}, $class;
29 $self->{state} = Setup( $key );
30 $self->{x} = 0;
31 $self->{y} = 0;
32 $self;
33}
34
35sub RC4 {
36 my $self;
37 my( @state, $x, $y );
38 if ( ref $_[0] ) {
39 $self = shift;
40 @state = @{ $self->{state} };
41 $x = $self->{x};
42 $y = $self->{y};
43 } else {
44 @state = Setup( shift );
45 $x = $y = 0;
46 }
47 my $message = shift;
48 my $num_pieces = do {
49 my $num = length($message) / $MAX_CHUNK_SIZE;
50 my $int = int $num;
51 $int == $num ? $int : $int+1;
52 };
53 for my $piece ( 0..$num_pieces - 1 ) {
54 my @message = unpack "C*", substr($message, $piece * $MAX_CHUNK_SIZE, $MAX_CHUNK_SIZE);
55 for ( @message ) {
56 $x = 0 if ++$x > 255;
57 $y -= 256 if ($y += $state[$x]) > 255;
58 @state[$x, $y] = @state[$y, $x];
59 $_ ^= $state[( $state[$x] + $state[$y] ) % 256];
60 }
61 substr($message, $piece * $MAX_CHUNK_SIZE, $MAX_CHUNK_SIZE) = pack "C*", @message;
62 }
63 if ($self) {
64 $self->{state} = \@state;
65 $self->{x} = $x;
66 $self->{y} = $y;
67 }
68 $message;
69}
70
71sub Setup {
72 my @k = unpack( 'C*', shift );
73 my @state = 0..255;
74 my $y = 0;
75 for my $x (0..255) {
76 $y = ( $k[$x % @k] + $state[$x] + $y ) % 256;
77 @state[$x, $y] = @state[$y, $x];
78 }
79 wantarray ? @state : \@state;
80}
81
82
8313µs1;
84__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 77)[XML-Twig-pm-5871]-194-line.html0000644000175000017500000004601614576335353024362 0ustar michamicha Profile of (eval 77)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 77)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 25 statements in 137µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

NOTE!
The data used to generate this report page was merged from 4 of the 37 executions
of the string eval on line 5871 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
13319µs9µsXML::Twig::Elt::::__ANON__[(eval 105)[XML/Twig.pm:5871]:1]XML::Twig::Elt::__ANON__[(eval 105)[XML/Twig.pm:5871]:1] (merge of 4 subs)
1116µs16µsXML::Twig::Elt::::BEGIN@1.21XML::Twig::Elt::BEGIN@1.21
1116µs15µsXML::Twig::Elt::::BEGIN@1.49XML::Twig::Elt::BEGIN@1.49
1116µs15µsXML::Twig::Elt::::BEGIN@1.37XML::Twig::Elt::BEGIN@1.37
1115µs16µsXML::Twig::Elt::::BEGIN@1.42XML::Twig::Elt::BEGIN@1.42
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
125137µs8101µs
# spent 16µs (5+11) within XML::Twig::Elt::BEGIN@1.42 which was called: # once (5µs+11µs) by XML::Twig::Elt::_install_cond at line 1 # spent 15µs (6+10) within XML::Twig::Elt::BEGIN@1.49 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 15µs (6+9) within XML::Twig::Elt::BEGIN@1.37 which was called: # once (6µs+9µs) by XML::Twig::Elt::_install_cond at line 1 # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.21 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 9µs within XML::Twig::Elt::__ANON__[(eval 105)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 13 times, avg 662ns/call: # (data for this subroutine includes 3 others that were merged with it) # 7 times (2µs+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 243ns/call # 4 times (3µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 650ns/call # 2 times (4µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm, avg 2µs/call
sub { no warnings; ; return ($_[0]->{gi} == 36) ? $_[0] : undef; }
# spent 40µs making 4 calls to warnings::unimport, avg 10µs/call # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.42 # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.21 # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.49 # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.37
2;










Spreadsheet-ParseXLSX-0.35/nytprof/all_stacks_by_time.calls0000644000175000017500000330643714576335353023032 0ustar michamichamain::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@18 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@3 31 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@12 94 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns 47973173 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@8 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::_inflateInit 93 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@3 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.35;warnings::unimport 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@20;warnings::import 73 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers 1650 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@301;constant::import;mro::method_changed_in 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::Handle::read;CORE::read 88 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@4;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26;Exporter::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test2::Formatter::import;Test2::API::test2_formatter_add 48 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::new 100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Dir::BEGIN@802;vars::import;CORE::match 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.44 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@4;warnings::register::import;warnings::register_categories;warnings::_mkMask 43 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test;Test::Builder::ctx;Test2::API::context;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@8 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;IO::Seekable::seek 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::fetch_string;CORE::regcomp 91 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Exporter::import 243 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@8;Exporter::import 146 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_xmldecl 108 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@39;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@33;constant::import;CORE::subst 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@283;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@41 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@16;warnings::unimport 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@267;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@2;strict::import 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_encoding 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9 2348 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;Exporter::Heavy::_rebuild_cache;CORE::subst 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@8;warnings::import;warnings::_bits 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@3 73 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_binmode;IO::Handle::binmode 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Parser::Expat::NamespaceEnd 21 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::ctx;Test2::API::context;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] 9 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Event::V2::facet_data;Test2::Event::V2::non_facet_keys 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@115;constant::import;Internals::SvREADONLY 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12 1577 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Compress::Raw::Zlib::AUTOLOAD;CORE::subst 22 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.9;warnings::unimport 62 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead 175 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Dir::BEGIN@802 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@29 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 105 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;Exporter::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_findEndOfCentralDirectory;IO::Handle::read;CORE::read 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@126;constant::import 156 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1494;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Exporter::import;CORE::subst 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::Font::BEGIN@20;warnings::import;warnings::_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@3;warnings::import 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::BEGIN@4 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@42 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@46;constant::import 103 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@9 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.25;warnings::unimport;warnings::_expand_bits 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCharacterDataHandler 91733 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::current_ns_prefixes 686 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@35 27 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.10;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Parser::setHandlers 187 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1490;constant::import 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@20;warnings::import;warnings::_bits;warnings::_expand_bits 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.17 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@269;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start 90363961 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@153;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::regcomp 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Parser::Expat::depth 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268];XML::Twig::purge;XML::Twig::Elt::delete 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@8;Exporter::import 135 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@3;warnings::import 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@310;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@5 92 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@37;Exporter::Heavy::heavy_export_ok_tags;Exporter::Heavy::_push_tags 206 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@202;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@306;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@4;warnings::import 69 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@3 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.68 59 main::BEGIN@5;Test::Builder::Module::import 178 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;CORE::regcomp 376 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.36;warnings::unimport 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@29;constant::import 264 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@3 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@257;constant::import;CORE::subst 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];Spreadsheet::ParseXLSX::_cell_to_row_col;CORE::match 1568002 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers 161 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::MIME::Name::BEGIN@2;strict::import 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler 1702 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter 15 Test2::API::END;Test2::API::test2_set_is_end;Test2::Util::HashBase::_new;Test2::EventFacet::Trace::init 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@144 122 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@17;Test2::Util::HashBase::import;UNIVERSAL::can 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@19 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 126 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@76;constant::import;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@28;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@31 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut;XML::Twig::Elt::is_elt;XML::Twig::Elt::gi 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;CORE::qr 141 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10 9395 main::BEGIN@5;Test::More::BEGIN@209;strict::unimport 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test::Builder::ctx 21 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@131;warnings::unimport;warnings::_expand_bits 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import;Exporter::Heavy::heavy_export 362 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.47;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@20;Test2::API::test2_init_done 36 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process 191 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@13 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@204;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@843;constant::import;mro::method_changed_in 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@312;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;CORE::pack 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];XML::Twig::purge;XML::Twig::Elt::in;UNIVERSAL::isa 115285 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Util::clone_io;CORE::binmode 60 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_findEndOfCentralDirectory;IO::Seekable::tell;CORE::tell 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@3;strict::import 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children 439 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test::Builder::create 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@150;Exporter::import;CORE::match 74 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7 17778 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@35;vars::import 114 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@9 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.55 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@298;constant::import;CORE::subst 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetAttListDeclHandler 105314 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@8 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@578 103 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@72 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@219;constant::import;Internals::SvREADONLY 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@127;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@6 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@124;constant::import;CORE::match 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants;XML::Twig::Elt::next_elt;UNIVERSAL::isa 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@190;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169;overloading::BEGIN@2;warnings::import 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Exporter::import;CORE::match 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::import;Internals::SvREADONLY 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::Config::BEGIN@7;strict::import 16 Test2::API::END;Test2::API::test2_set_is_end;Test2::Util::__ANON__ 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.31;warnings::unimport 60 Test2::API::END;Test2::API::Instance::set_exit;Test2::Hub::is_passing;CORE::match 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.42 54 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@7 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@265;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 82 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.66 64 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:88] 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@220 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::Backend::PP::init;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@285 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::_context_release_callbacks_ref;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@3;warnings::import;warnings::_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@6;warnings::import;warnings::_bits 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_post_load 27 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::compressedSize 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@285;constant::import 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@829;Exporter::import 227 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@220;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@66;warnings::unimport 77 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1491;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@285;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@220;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;CORE::unpack 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@33;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse 357 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.6;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@179 71 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@37 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import 109 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::BEGIN@6;Exporter::import 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@115;constant::import;mro::method_changed_in 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@3;warnings::import;warnings::_bits 52 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@10;warnings::import;warnings::_bits 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@2;warnings::import;warnings::_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@3;warnings::import 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@14;constant::import;Internals::SvREADONLY 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import;Exporter::export;Exporter::as_heavy 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@75;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@305;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode 133 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1489;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@3 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1489;constant::import;CORE::subst 7 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@29;warnings::unimport;warnings::_expand_bits 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@20;warnings::import;CORE::match 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::subst 482 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@6 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.11 51 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@191 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@2;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@268;constant::import 105 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub 145 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4211 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@43;overload::import;overload::OVERLOAD 166 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@268 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@201;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@15;Test2::Util::HashBase::import;mro::get_linear_isa 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 79146 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@209;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@309;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@268;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs 284 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Event::add_hub 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@40;constant::import 117 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath 214 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1232 117 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::_twig_end;XML::Twig::_replace_prefix 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@10;Exporter::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@9;Test2::Util::HashBase::import 691 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20 2652 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start 9159980 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1493;constant::import;CORE::subst 7 File::Temp::END;File::Temp::cleanup;CORE::sort 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1057 53 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@4;warnings::import;warnings::_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::import;mro::method_changed_in 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@12;Exporter::import;CORE::subst 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@72;constant::import;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;Cwd::BEGIN@2;strict::import 13 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 86 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@66;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@236;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader 161 main::BEGIN@5;Test::More::BEGIN@5;warnings::import;warnings::_bits 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@4 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;CORE::match 804147 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 1833 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96 2063 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;CORE::match 21 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.57;warnings::unimport 89 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@127;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig;XML::Twig::Elt::root 111 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@219;constant::import;mro::method_changed_in 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@308;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@191;warnings::unimport 87 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_binmode 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::MIME::Name::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;CORE::qr 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_do_not_escape_amp_in_atts;XML::Twig::Elt::set_do_not_escape_amp_in_atts 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@130;constant::import 155 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@200;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.33;warnings::unimport;warnings::_expand_bits 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@171;Exporter::import 1396 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@66;constant::import 100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@66 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@843;constant::import;Internals::SvREADONLY 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@29;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@40 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@828 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@30;strict::unimport 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.46 63 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@6;warnings::import;warnings::_bits;warnings::_expand_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@9;Exporter::import 247 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests;Test2::Hub::plan 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@176 83 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@203;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@8;Test2::Util::HashBase::import 511 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13 11067 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;CORE::qr 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Exporter::import 719 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@9 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@277;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@34;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::init_aliases;Encode::Alias::undef_aliases 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@266;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@26 146 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@203 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.26;warnings::unimport;warnings::_expand_bits 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;CORE::regcomp 73 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;IO::Seekable::seek 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@10;Exporter::import 171 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@203;constant::import 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@8;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;UNIVERSAL::VERSION 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse 2191 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests;Test::Builder::ctx;Test2::API::context;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@202 76 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::fileparse_set_fstype;CORE::match 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@625 55 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndCdataHandler 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Util::HashBase::_new 61 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.71;warnings::unimport;warnings::_expand_bits 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;MIME::Base64::BEGIN@3 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::__ANON__ 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@6 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.28;warnings::unimport;warnings::_expand_bits 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@2 95 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@30 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@4;vars::import;CORE::match 32 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Exporter::import 429 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Config::BEGIN@6;warnings::import;warnings::_bits 48 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;IO::Seekable::seek;CORE::seek 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export 435 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info 51039466 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::release 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];Spreadsheet::ParseXLSX::_cell_to_row_col;CORE::match 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4;warnings::import 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCommentHandler 25 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::desiredCompressionMethod 128 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@11;Test2::Util::HashBase::import;mro::get_linear_isa 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@8;Test2::Util::HashBase::import;UNIVERSAL::can 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open 337 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::BEGIN@4 86 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@29 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@5;warnings::import;warnings::_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@9 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@1285;warnings::unimport 89 Test::Builder::INIT;Test2::API::test2_in_preload 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetXMLDeclHandler 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new 284 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;CORE::match 363628 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@58;constant::import;CORE::subst 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@288 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@214 23 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@2 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;CORE::subst 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@25;constant::import;CORE::regcomp 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.73 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@6 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Twig::_checked_parse_result;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut;XML::Twig::Elt::is_elt 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@214;constant::import 99 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@288;constant::import 107 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@207;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@3;warnings::import;warnings::_bits 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::BEGIN@4 139 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@26;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::define_encoding 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@2 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse;CORE::subst 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;CORE::match 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter;XML::Twig::Elt::set_output_filter 146 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@832;Exporter::import 164 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123;SelectSaver::BEGIN@39;Exporter::import 157 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@34;Test::Builder::__ANON__ 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::FileMember::externalFileName 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@126;constant::import;CORE::regcomp 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@8;Test2::Util::HashBase::import;mro::get_linear_isa 8 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_findEndOfCentralDirectory;IO::Seekable::seek 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@307;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new;Archive::Zip::Member::unixFileAttributes;Archive::Zip::ZipFileMember::isDirectory;Archive::Zip::Member::fileName 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;Scalar::Util::weaken 2525090 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9 11085 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.12 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@295;constant::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@10;warnings::import;warnings::_bits;warnings::_expand_bits 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Dir::BEGIN@801 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::MIME::Name::BEGIN@2 93 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@3;warnings::import;warnings::_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@9;XSLoader::load 1408 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@830 40 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156];Test::Builder::_ending;Test2::Util::ExternalMeta::meta 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@214;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@288;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@43 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import;Exporter::Heavy::heavy_export 1118 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_remove_cdata 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::BEGIN@7;warnings::register::import;warnings::register_categories;warnings::_mkMask 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Errno::_tie_it 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@5082;Exporter::import 223 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17;Test2::Formatter::BEGIN@3 32 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@3;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::File::open;CORE::open 147 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@34;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;CORE::match 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@35;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.42;warnings::unimport 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@812;warnings::unimport 81 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants 244 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@157;constant::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1488;constant::import;CORE::regcomp 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@102 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@3 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@14;vars::import;CORE::match 31 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1251 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 14 main::BEGIN@3 285 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@145;constant::import;mro::method_changed_in 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child 1045287 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Hub::format 27 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::next_sibling 510 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::FileMember::endRead 171 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@8108 87 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33 1046 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@7340 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@294;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::import;CORE::match 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Parser::Expat::new_ns_prefixes 190 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.11;warnings::unimport 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@32;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;CORE::match 114 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@8;Exporter::import;CORE::match 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@13;Exporter::import;CORE::match 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12 3628 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@2 302 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@41;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@8;Exporter::import;CORE::match 6 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::centralDirectoryOffsetWRTStartingDiskNumber 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@9 82 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@9 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Exporter::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@25;constant::import;CORE::subst 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp 268 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@6 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.42;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@9 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Compress::Raw::Zlib::inflateStream::inflate 1098 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Compress::Raw::Zlib::inflateStream::inflate 119878 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@114;constant::import;Internals::SvREADONLY 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@130 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@6;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@238;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@63;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36 4390 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@63;constant::import 97 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@3 66 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::ContentModel::BEGIN@512;overload::import 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@63 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@274;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@24;warnings::unimport 80 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@10 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@3;strict::import 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@19 92 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Archive::Zip::Archive::memberNamed;Archive::Zip::Member::fileName 65 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@9 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@33;Test::Builder::__ANON__ 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@688;CORE::match 89 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_atts_order 72 Test::More::done_testing;Test::Builder::done_testing;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@7;strict::import 13 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_binmode;Archive::Zip::_CAN;UNIVERSAL::can 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@3;warnings::import;warnings::_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::BEGIN@50 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead;Compress::Raw::Zlib::inflateStream::DESTROY 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@3;warnings::import 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@146 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test2::API::Context::DESTROY 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8;Test2::Hub::Interceptor::Terminator::BEGIN@3;warnings::import;warnings::_bits 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;Scalar::Util::weaken 315903 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@3;warnings::import 73 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@24 68 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@205;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseExcel::Workbook::new 19 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@4;warnings::import;warnings::_bits 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@273;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@126 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartCdataHandler 103379 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@191;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@209;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@2 206 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@275;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@81;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@11;Test2::Util::HashBase::import;mro::get_linear_isa 9 Test::More::ok;Test::Builder::ok;Test::Builder::ctx;Test2::API::context;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] 22 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@8 51 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;CORE::match 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@9;UNIVERSAL::import 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;version::(bool 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::_add_ts_hooks;Test2::API::Stack::top 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.41 58 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::set_atts 14114391 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@7 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;Exporter::import 651 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::Util::clone_io;CORE::open 213 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@9;Test2::Util::HashBase::import 376 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@33 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@1517;integer::import 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_quote 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig 104 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.31 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@19;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@4;warnings::import;CORE::match 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@25;Exporter::import;CORE::match 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@3;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut 143 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData 320 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@8;Exporter::import;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@36;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@1285 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::BEGIN@3;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@213;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;UNIVERSAL::isa 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::match 143 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::uncompressedSize 18 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::print_optimal_pass 161 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@128;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@13;Test2::Util::HashBase::import;UNIVERSAL::can 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@3;integer::import 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@10;warnings::import 78 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Exporter::import;CORE::match 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@297;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::root 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1556 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@208;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::export_to_level 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::gen_code;CORE::substcont 1987 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@3;warnings::import 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@487;CORE::qr 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.70;warnings::unimport;warnings::_expand_bits 72 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@71 51 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new;CORE::match 877 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::Notation_list::new 71 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@53 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;CORE::match 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@206;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@19 83 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@4;warnings::import;CORE::match 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters 351 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@34;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@114;constant::import;mro::method_changed_in 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15 447628 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@272;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1490;constant::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@2 100 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@93 49 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1540;warnings::unimport 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::init_aliases 1146 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@192;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@103;Exporter::import;CORE::match 11 Test::More::done_testing;Test::Builder::done_testing;Test2::API::release 19 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@12;Exporter::import;CORE::match 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@2;strict::import 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::import;UNIVERSAL::can 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@130;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@10;Exporter::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@81 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::purge;XML::Twig::Elt::in;UNIVERSAL::isa 151740 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::readIsDone;Archive::Zip::Member::_dataEnded 46 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::FileMember::externalFileName 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@198;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init;XML::Twig::_set_fh_to_twig_output_fh 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@3 92 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.13;warnings::unimport 58 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_expand_external_entities;XML::Twig::Elt::set_expand_external_entities 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@3;warnings::import 75 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1167;warnings::unimport 86 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@62;constant::import;Internals::SvREADONLY 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@191;warnings::register::import;warnings::register_categories 99 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@253;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.49;warnings::unimport 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1489;constant::import;Internals::SvREADONLY 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;UNIVERSAL::isa 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@15;Test2::Util::HashBase::import;mro::get_linear_isa 19 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;version::(cmp 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1494;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@3;warnings::import;warnings::_bits 48 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@256 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@5;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::FileMember::endRead 167 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@209;constant::import;CORE::subst 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import 350 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@20;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@3 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@145;constant::import;Internals::SvREADONLY 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_regexp_handler 132 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@77;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1492;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new 116 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test::Builder::ctx;Test2::API::context;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@11 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@10;Test2::Util::HashBase::import;mro::get_linear_isa 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@34;constant::import;Internals::SvREADONLY 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3648;strict::unimport 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test2::API::Context::release 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@32;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@3 54 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.61;warnings::unimport 61 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_tag_cond;CORE::match 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@12;Exporter::import 118 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::new;IO::Handle::new 21 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::purge 1617183 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@97 108 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter;XML::Twig::Elt::set_output_filter 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@8;Exporter::import 117 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8;Test2::Hub::Interceptor::Terminator::BEGIN@2 96 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@3;warnings::import;warnings::_bits 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@129;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@256;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21 42323 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::DESTROY;XML::Twig::Elt::delete 2776 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::Util::ExternalMeta::meta;Test2::Util::ExternalMeta::validate_key 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@30;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@36;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndCdataHandler 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string 107 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@5 88 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];Spreadsheet::ParseXLSX::_cell_to_row_col 7463456 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::FileMember::fh;IO::Handle::opened 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@147;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@212;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::subst 81 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::AUTOLOAD;CORE::subst 22 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8 12273 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Util::HashBase::_new;Test2::Event::Plan::init 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@33;constant::import;CORE::match 17 Test2::API::END;Test2::API::Instance::set_exit;Test2::Util::HashBase::_new;Test2::API::Context::init 46 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath 7497 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1488;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter;XML::Twig::Elt::set_output_filter;UNIVERSAL::isa 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@8 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@207;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::Config::BEGIN@8;warnings::import 73 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@89;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@5;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;CORE::pack 87 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@89;warnings::unimport 87 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::substcont 8 Test2::API::END;Test2::API::test2_set_is_end;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19 209 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Exporter::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268];XML::Twig::purge;XML::Twig::Elt::in;UNIVERSAL::isa 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export 173 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@143;warnings::register::import;warnings::register_categories;warnings::_mkMask 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.74;warnings::unimport 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@216;constant::import;CORE::regcomp 11 main::BEGIN@5;Test::More::BEGIN@1783 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new 15234113 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;XML::Twig::_insert_pcdata;Scalar::Util::weaken 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@223;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.53 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@2705;warnings::unimport;warnings::_expand_bits 48 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@10;Test2::Util::HashBase::import;mro::get_linear_isa 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@207 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::text 5326096 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;Fcntl::BEGIN@58 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];Spreadsheet::ParseExcel::Cell::new 3616456 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Config::BEGIN@6 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@207;constant::import 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@214;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@288;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123;SelectSaver::BEGIN@39;Exporter::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@1494;warnings::unimport 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@261;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@2 93 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::current_ns_prefixes 127 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@33;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.5;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.49 57 Test::More::ok;Test::Builder::ok;Test::Builder::ctx;Test2::API::context 531 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@13 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@257;constant::import;CORE::match 8 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests;Test2::API::Context::release 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@11 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@61;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseExcel::FmtDefault::new 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::subst 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Exporter::import;CORE::match 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@76;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::_add_ts_hooks;Test2::Hub::pre_filter 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_regexp_handler 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@3;warnings::import 120 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@8;Exporter::import;CORE::match 14 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::event_tap;Test2::Formatter::TAP::summary_tap 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@5 108 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Event::eid 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@2 100 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;CORE::regcomp 14986 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@154;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Exporter::import;CORE::match 11 main::BEGIN@5;Test::More::BEGIN@4;strict::import 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::base::BEGIN@4;warnings::import 69 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@2 123 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@33;constant::import 102 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::API::test2_in_preload 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@274;constant::import 102 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@30;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@5 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17 21888 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::root 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::Format::BEGIN@20;warnings::import;warnings::_bits;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature 212 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@153;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@274 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@45;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@63;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@12;Exporter::import 445 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;IO::Handle::clearerr 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_tag_cond 482 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@298;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::match 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Exporter::import 408 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature;CORE::unpack 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseExcel::Worksheet::new 69 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.31;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1 49 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::ancestors 3143 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_encoding;XML::Twig::Elt::set_keep_encoding 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child 460 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::isDirectory;Archive::Zip::Member::fileName 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@4;warnings::register::import;warnings::register_categories 75 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];Spreadsheet::ParseExcel::FmtDefault::ValFmt 6817316 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@26;constant::import;CORE::regcomp 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@2;strict::import 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_normalize_args 446 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@10;Exporter::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Exporter::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@14;constant::import 162 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@4 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@10 87 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@274;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@190;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_has_ipc;Test2::API::Instance::has_ipc 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetElementDeclHandler 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@3;warnings::import 95 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetAttListDeclHandler 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124 2363 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@81 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@7;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;Archive::Zip::Archive::members 57 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100 4753 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@6 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@81;constant::import 103 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;Test2::Util::Facets2Legacy::BEGIN@1 112 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@42 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1167 51 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@3;warnings::import 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@210;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@72;warnings::unimport 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@13;Exporter::import 112 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@223;constant::import;Internals::SvREADONLY 3 Test2::API::INIT 247 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::BEGIN@3 111 main::BEGIN@5 29296 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@5;warnings::import;warnings::_bits 56 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@11;Test2::Util::HashBase::import;mro::get_linear_isa 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@191;warnings::register::import 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@3;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@216 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];Spreadsheet::ParseXLSX::_dimensions 100 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.53;warnings::unimport 65 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;XML::Twig::Elt::_and 69 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@5;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@81;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp 3270 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;IO::Handle::binmode;CORE::binmode 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@158;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@168;strict::import 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::Elt::set_atts;XML::Twig::Elt::keep_atts_order 169445 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::BEGIN@54 74 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.44;warnings::unimport;warnings::_expand_bits 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartElementHandler 71677 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use 15886 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;Archive::Zip::FileMember::fh;IO::Handle::opened 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut;Scalar::Util::weaken 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@14;vars::import 133 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@147;constant::import;mro::method_changed_in 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@102;warnings::unimport 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;CORE::regcomp 2243 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@305;constant::import;CORE::subst 9 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Event::V2::facet_data;Test2::Event::meta_facet_data 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@75;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::DESTROY;XML::Parser::Expat::ParserFree 226 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4;warnings::import 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@5;warnings::import;warnings::_bits 103 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::ctx;Test2::API::context;Scalar::Util::weaken 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@4 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init;Scalar::Util::weaken 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_formatter;Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60];Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_ipc;Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60] 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@144;constant::import 143 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@42 65 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@42;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@8;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@36;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@9;Exporter::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;Exporter::Heavy::heavy_export 1404 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@129 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1540 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@9;Test2::Util::HashBase::import 467 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@60;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@109 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@40;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.19;warnings::unimport 74 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@29;warnings::unimport 66 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::root 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100 14320 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@70;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@5 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;CORE::match 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];CORE::subst 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@72;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@20;warnings::import 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::Util::clone_io;CORE::binmode 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@236;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22 2251 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@3;warnings::import 75 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@62;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::Formatter::TAP::_autoflush;CORE::select 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_reset_handlers 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86;Test2::Util::Trace::BEGIN@5;strict::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@156;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Twig::_checked_parse_result;XML::Twig::DESTROY 435 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseXLSX::__ANON__ 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@4;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetAttListDeclHandler 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@289;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@5 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@29;Exporter::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@26;constant::import 119 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@7;UNIVERSAL::import 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler 14717 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@2;strict::import 16 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::open;CORE::open 92 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@153;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader;IO::Handle::read 174 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1490 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_expand_external_entities 81 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_isSeekable;Archive::Zip::_ISA 91 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.39 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::purge;XML::Twig::Elt::in 880916 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@59;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@4;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@229;constant::import 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@154 28 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Event::V2::facet_data;Scalar::Util::reftype 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@147;UNIVERSAL::VERSION 46 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse 755 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1492 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix 1156 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86;Test2::Util::Trace::BEGIN@5 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.66;warnings::unimport 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_context_aquire 20 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_in_preload 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 1780 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@34;constant::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@188;strict::unimport 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEntityDeclHandler 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@227;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@73 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@9 102 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;Exporter::import 91 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@4;warnings::import;warnings::_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@10;Test2::Util::HashBase::import;UNIVERSAL::can 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@211;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@147;File::Temp::__ANON__ 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@14 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@99 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@2;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@28;Exporter::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export 1414 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@25;Exporter::import 190 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@35;constant::import;Internals::SvREADONLY 3 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@515;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@267;constant::import 103 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_quote;XML::Twig::Elt::set_quote 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature;CORE::unpack 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@10;warnings::import 84 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@2;strict::import 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@267 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@155;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] 242 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::gen_code;CORE::readline 165 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];XML::Twig::purge;XML::Twig::Elt::in;UNIVERSAL::isa 90 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@10;integer::import 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut;XML::Twig::Elt::is_elt;XML::Twig::Elt::gi 22 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_readSignature;IO::Handle::read;CORE::read 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@146;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndCdataHandler 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.38 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@231;constant::import;CORE::subst 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@48 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@301;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init 248 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@129;constant::import 111 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.50 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@301;constant::import 139 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@144 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@832;Exporter::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@98 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@301 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@2 94 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@81;warnings::unimport 91 Test::More::ok;Test::Builder::ok;Test::Builder::ctx;Test2::API::context;Scalar::Util::weaken 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@9;warnings::import;warnings::_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Config::BEGIN@5 97 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Util::HashBase::_new 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@10 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@58;constant::import;CORE::match 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@5 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1556;strict::unimport 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk 529 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@267;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond 993 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@227;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@278;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@7;Exporter::import 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.24;warnings::unimport 55 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];CORE::subst 22 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::import 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@67;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@3;warnings::import 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@216;constant::import 216 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@237;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168 7963 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@295;constant::import;CORE::subst 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import 101 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7 26793 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@4 31 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::uncompressedSize 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@307;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@170 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;CORE::match 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::base::BEGIN@3 102 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;MIME::Base64::BEGIN@4;warnings::import;warnings::_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@20;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::init_aliases;Encode::Alias::define_alias 1015 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Util::HashBase::_new;Test2::Event::V2::init;Test2::Util::HashBase::_new;Test2::EventFacet::Trace::init 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@306;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2601 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@5;vars::import 242 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@275;IO::Handle::__ANON__ 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@292;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@202;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@279;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.40 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@35;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@36;constant::import 104 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::new 164 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@39;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@45 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@3;warnings::import;warnings::_bits 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@14;constant::import;CORE::subst 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@20 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@294;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;UNIVERSAL::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@306 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@18;warnings::import 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@32 25 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_post_load;Test2::API::Instance::add_post_load_callback 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@154;constant::import 112 main::BEGIN@5;Test::More::BEGIN@1408;warnings::unimport;warnings::_expand_bits 136 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@202 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@306;constant::import 110 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@15 39 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@202;constant::import 103 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::File::open;IO::Handle::_open_mode_string 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@228;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.54;warnings::unimport 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@26;constant::import;CORE::subst 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Errno::BEGIN@11;Config::import 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@240;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@312;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData 205 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@6;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];CORE::match 278156 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@229 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@21;Exporter::import;CORE::match 8 main::BEGIN@5;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load 11 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@15;Test2::Util::HashBase::import;mro::get_linear_isa 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::ZipFileMember::localHeaderRelativeOffset 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDoctypeHandler 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@238;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@3 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@42;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;UNIVERSAL::import 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::BEGIN@3;strict::import 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:85] 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig;XML::Twig::Elt::root 149 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData 706 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;Archive::Zip::_CAN;UNIVERSAL::can 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;CORE::qr 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1491;constant::import 117 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@7;vars::import;CORE::match 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@38;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info 61717 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@221;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new 851 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@76 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@312 25 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Util::HashBase::_new;Test2::Event::V2::init;Test2::Util::HashBase::_new 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@7;constant::import;CORE::subst 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@27 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Twig::_checked_parse_result;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@23;Exporter::import 524 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1493;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@312;constant::import 101 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import 107 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@8;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];XML::Twig::purge;XML::Twig::Elt::in 554 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@8;Exporter::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::MIME::Name::BEGIN@3;warnings::import 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@3 100 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148] 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@23 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetExternalEntityRefHandler 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.54;warnings::unimport;warnings::_expand_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@3;strict::import 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@205;constant::import;CORE::subst 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig;XML::Twig::Elt::root 120 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@43;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::Util::clone_io;PerlIO::get_layers 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@16 77 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@265;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.48;warnings::unimport;warnings::_expand_bits 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::File::open;IO::Handle::_open_mode_string;CORE::substcont 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::Elt::set_atts 1424160 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Exporter::import 225 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@265;constant::import 100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@52;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@285;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@220;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::_contexts_ref;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1547;bytes::import 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix 6355013 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@3 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@99;strict::import 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1251;strict::unimport 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@265 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import;UNIVERSAL::isa 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10 14645 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_atts_order;XML::Twig::Elt::set_keep_atts_order 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@275;constant::import;CORE::subst 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@8 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@120;strict::import 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string 4720 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes 185 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@227;constant::import;Internals::SvREADONLY 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@3;warnings::import 72 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@3 32 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@133;warnings::import 70 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7 25194 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Exporter::import 363 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@9;Test2::Util::HashBase::import 458 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter;XML::Twig::Elt::set_output_filter;UNIVERSAL::isa 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@180;strict::unimport 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@4;warnings::import;warnings::_bits 49 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655] 676 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1057;warnings::unimport 88 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@3;warnings::import 74 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEntityDeclHandler 102236 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@144;constant::import;CORE::regcomp 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@201;constant::import 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@209 23 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_binmode;Archive::Zip::_CAN 78 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_quote;XML::Twig::Elt::set_quote 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@133;constant::import;CORE::match 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::dataOffset 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@209;constant::import 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse;Compress::Raw::Zlib::Parameters::_checkType;CORE::match 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@201 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@268;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1488;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@209;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@151;Exporter::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@282;constant::import;Internals::SvREADONLY 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@26 51 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig 225 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@1471;warnings::unimport 83 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@11;Test2::Util::HashBase::import 388 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::onBOOT;Encode::define_encoding 117 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@7 62 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseExcel::Worksheet::new;Scalar::Util::weaken 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@201;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@146;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.43;warnings::unimport 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@797;warnings::unimport;warnings::_expand_bits 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12.1 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@10;Test2::Util::HashBase::import 638 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@155;constant::import;mro::method_changed_in 2 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::print_optimal_pass;CORE::print 707 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@35;constant::import;mro::method_changed_in 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@10 68 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@66;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268] 225 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@297;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.23;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@208;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::File::BEGIN@714 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@200 26 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Event::V2::facet_data 237 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@147 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@5;strict::import 16 main::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@200;constant::import 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@5 97 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader;IO::Handle::read;CORE::read 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@6;warnings::import;warnings::_bits;warnings::_expand_bits 39 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test2::Event::eid 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@200;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.29 53 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@3;warnings::import 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1488 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@6 47 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169;overloading::BEGIN@2;warnings::import;CORE::match 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::parser 1251522 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@272;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149 20077 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@192;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final 143 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import;Exporter::export 18 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;IO::Handle::read;CORE::read 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.72;warnings::unimport;warnings::_expand_bits 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_special_handler;CORE::match 82 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@3 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::Config::BEGIN@8;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString 25687528 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@8 23 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@27;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_pi_handler 211 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@23;vars::import;CORE::match 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@229;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@15 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 66 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@3 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::ancestors 2129 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::File::BEGIN@714;vars::import;CORE::match 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;XSLoader::load 1147 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@253;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@228;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@113;warnings::unimport 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Time::HiRes::AUTOLOAD;Time::HiRes::constant 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::BEGIN@6 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@266;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@311;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@47 50 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];XML::Twig::purge;XML::Twig::Elt::in 881319 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1487;constant::import;Internals::SvREADONLY 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@277;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@10;warnings::import;warnings::_bits 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::GLOB_CSH 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@203;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@266 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@277;constant::import 135 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;XML::Twig::_insert_pcdata;Scalar::Util::weaken 368212 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@11;Test2::Util::HashBase::import 442 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Util::clone_io;PerlIO::get_layers 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@277 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@266;constant::import 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1];XML::Twig::Elt::gi 229 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse;Compress::Raw::Zlib::Parameters::_checkType;CORE::match 137 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::BEGIN@3;strict::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level 49 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_pi_handler 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_level_handler 139 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@11 34 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::ctx;Test2::API::context 238 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@20;warnings::import;warnings::_bits;warnings::_expand_bits 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@35;strict::unimport 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@20;warnings::import 59 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Handle::read;CORE::read 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@77;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings 104 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::desiredCompressionMethod;Archive::Zip::Member::uncompressedSize 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10 51 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new 468 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::import 156 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@42;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.3;warnings::unimport;warnings::_expand_bits 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::readIsDone;Archive::Zip::Member::_readDataRemaining 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@158;constant::import 105 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers 277 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@265;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::parser 287322 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::new 571 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader;Archive::Zip::Member::desiredCompressionMethod 239 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::uncompressedSize 12 Test2::API::END 79 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.56;warnings::unimport;warnings::_expand_bits 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndElementHandler 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;Exporter::import 1844 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4181;strict::unimport 20 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@113 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@4;warnings::import;CORE::match 3 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::is_passing 72 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];XML::Twig::purge 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.16;warnings::unimport 66 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@9;Test2::Util::HashBase::import 560 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;UNIVERSAL::isa 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@209;constant::import;Internals::SvREADONLY 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;Archive::Zip::Archive::members 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter;XML::Twig::Elt::set_output_filter 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@145;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Internals::V 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;IO::Seekable::seek 75 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@684;warnings::unimport;warnings::_expand_bits 49 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;XSLoader::load 1651 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] 358 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@8;Test2::Util::HashBase::import 677 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@11;Exporter::import;CORE::match 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::set_root 147 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1491;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@5;warnings::import 84 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@23 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@34;constant::import;CORE::subst 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@199;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import;base::has_fields 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut 105 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@185;constant::import;Internals::SvREADONLY 6 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new;Archive::Zip::Member::unixFileAttributes;Archive::Zip::ZipFileMember::isDirectory 154 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Config::BEGIN@6;warnings::import;CORE::match 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;UNIVERSAL::import 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;IO::Handle::opened 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import;CORE::match 2 Test2::API::END;Test2::API::test2_set_is_end 303 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] 128 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@830;Exporter::import;CORE::match 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.22 56 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@2 101 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes 280 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@18;warnings::import;warnings::_bits;warnings::_expand_bits 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;IO::Handle::binmode 103 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123;SelectSaver::BEGIN@39 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@305;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@75;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.7;warnings::unimport 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@15;overload::import 28 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@80 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@20;Test2::API::test2_init_done;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@4;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@133;constant::import;CORE::regcomp 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@3 88 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import;base::has_attr 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@144;constant::import;CORE::match 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@13;Test2::Util::HashBase::import 1099 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4246;strict::unimport 31 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::desiredCompressionMethod 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@8;Test2::Util::HashBase::import 698 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@209;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader;Archive::Zip::Member::compressionMethod 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@191;warnings::unimport;warnings::_expand_bits 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::_readDataRemaining 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.28 103 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string 961822 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@168 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@201;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new;XML::Twig::Elt::set_gi 37 main::BEGIN@5;Test::More::BEGIN@1408 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@8;Exporter::import;CORE::match 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::setHandlers 223 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@3 136 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@229;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@3 82 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;Exporter::Heavy::_rebuild_cache 512 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::open 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::gen_code;CORE::close 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.19;warnings::unimport;warnings::_expand_bits 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@20;warnings::import;warnings::_bits;warnings::_expand_bits 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@48;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@23;vars::import 108 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@72;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 73 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Event::eid;Test2::Util::gen_uid 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;Archive::Zip::_CAN 153 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@9 35 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new;Archive::Zip::Member::unixFileAttributes;Archive::Zip::Member::_mapPermissionsFromUnix 88 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter;XML::Twig::Elt::set_output_text_filter;UNIVERSAL::isa 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Exporter::import;CORE::subst 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;CORE::subst 31 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@11;UNIVERSAL::VERSION 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@156;constant::import 104 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse 341 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@27;constant::import;CORE::regcomp 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.28;warnings::unimport 54 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse 81 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3619;strict::unimport 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@6;Exporter::import 137 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@200;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];XML::Twig::purge;XML::Twig::Elt::in;UNIVERSAL::isa 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@3 86 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.60;warnings::unimport 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;CORE::subst 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@20;warnings::unimport 80 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@31;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@11.2 810 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import 3851 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@266;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::File::open;IO::Handle::_open_mode_string;CORE::match 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@277;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@143 39 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;IO::Handle::close 17 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new;Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@253;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.22;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@77;constant::import 106 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17 1399 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::Backend::PP::BEGIN@342 72 Test2::API::END;Test2::API::Instance::set_exit;Test2::API::Context::DESTROY 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler 434 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@270 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@77 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@253 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@8 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_atts_order;XML::Twig::Elt::set_keep_atts_order 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@7;Exporter::import 172 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@15 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@253;constant::import 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@77;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::set_atts 9865 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@625;warnings::unimport 80 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Twig::_checked_parse_result 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond 2863 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new 1247 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init;Scalar::Util::weaken 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Time::HiRes::AUTOLOAD 120 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@61;Carp::_fetch_sub 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@8 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.3;warnings::unimport 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@40;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath 249 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler 15614 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@20;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk 664 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@301;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@58 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@133 32 main::BEGIN@5;Test::Builder::Module::import;Exporter::import;CORE::match 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35 3135 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@8 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@58;constant::import 184 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@30;constant::import;CORE::subst 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@2;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@42;constant::import 102 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::import;Test2::Util::HashBase::_new 89 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;Archive::Zip::_CAN;UNIVERSAL::can 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@114;constant::import;CORE::subst 11 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@35 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@58;constant::import;CORE::regcomp 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;CORE::regcomp 477 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::FileMember::endRead 54 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];CORE::match 1797138 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@143;warnings::register::import;warnings::register_categories 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@267;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@104;Exporter::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@146;Exporter::import;CORE::match 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Twig::parser 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::_readDataRemaining 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@790;bytes::import 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@49;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@102 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@7;Exporter::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import;Exporter::export 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2603;overload::import 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@2;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::API::test2_stderr 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@7 63 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Parser::Expat::new_ns_prefixes 202928 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;IO::Seekable::seek;CORE::seek 76 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1491 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::Config::BEGIN@8;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;Exporter::import;CORE::subst 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Exporter::export_tags;Exporter::as_heavy;CORE::subst 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Scalar::Util::BEGIN@10;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_LARGEFILE 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::MIME::Name::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@209;constant::import;mro::method_changed_in 4 Test::More::ok;Test::Builder::ok;Test2::Hub::send 206 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;CORE::match 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] 2183856 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@6;warnings::import;warnings::_bits;warnings::_expand_bits 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@2;strict::import 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@214;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@288;constant::import;CORE::subst 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.72 54 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::match 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@27 121 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@8;Exporter::import 194 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final 440 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond 574 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Time::HiRes::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Time/HiRes.pm:71] 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@3;warnings::import 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@32;constant::import;CORE::subst 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@66;warnings::unimport 67 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::API::Context::DESTROY 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::desiredCompressionMethod 281 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@302;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut;Scalar::Util::weaken 151752 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::import;Test2::Util::HashBase::_new;Test2::API::Instance::init;Test2::API::Instance::reset;Test2::API::Stack::new 12 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_findEndOfCentralDirectory;IO::Handle::read 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@39;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@202;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@7 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@41;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@306;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_pi_handler;CORE::match 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268];XML::Twig::Elt::att 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Errno::BEGIN@11 333 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4175;strict::unimport 30 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers 155 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@3 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151 10086 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::new;XML::Parser::Expat::ParserCreate 358 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@188;constant::import;Internals::SvREADONLY 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@7;Exporter::import 318 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@25;constant::import 232 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@38;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@15;Test2::Util::HashBase::import;UNIVERSAL::can 13 Test::More::ok 127 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test::Builder::ctx 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;Archive::Zip::FileMember::fh 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@8 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@76;constant::import;mro::method_changed_in 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 95127 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::__ANON__ 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDoctypeHandler 72309 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@238;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@63;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@9 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::Format::BEGIN@20;warnings::import 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::_context_release_callbacks_ref 50 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::FileMember::fh 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@252;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@13;warnings::unimport 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@17 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@312;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse 118834 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@8;Exporter::import 157 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@3;strict::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@4 90 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;Exporter::Heavy::BEGIN@3 101 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@36;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1493;constant::import 103 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::regcomp 88 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156];Test::Builder::_ending;Test2::Hub::plan 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1492;constant::import 108 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::zip64 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@9;Exporter::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.15;warnings::unimport;warnings::_expand_bits 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@121 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@2;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@190;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@238 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::compressedSize 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@274 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@6;warnings::unimport;warnings::_expand_bits 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_quote 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148 786 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader 146 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.38;warnings::unimport 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@8404 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@238;constant::import 111 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@78;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::__ANON__ 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.3 63 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@2;strict::import 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;Archive::Zip::FileMember::fh 73 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7 1872 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@205;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@158;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@17;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@313;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@7 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86;Test2::Util::Trace::BEGIN@4;warnings::import 90 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.7 84 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_regexp_handler;CORE::match 10 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new;Archive::Zip::Member::unixFileAttributes 506 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;CORE::qr 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.30;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@2 87 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@13 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@5;warnings::import 73 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@81;constant::import;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@275;constant::import;mro::method_changed_in 2 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Util::HashBase::_new;UNIVERSAL::can 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetXMLDeclHandler 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@20;warnings::import;warnings::_bits 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@30;Exporter::import 145 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1557 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@27 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@11 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.73;warnings::unimport 141 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.45;warnings::unimport 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1489;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::Format::BEGIN@20;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import 111 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@285;constant::import;CORE::subst 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@220;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125 3073 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.5 70 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context 776 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;UNIVERSAL::VERSION 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@3;strict::import 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Archive::Zip::Archive::memberNamed;Archive::Zip::Archive::members 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@16 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@625;warnings::unimport;warnings::_expand_bits 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@3;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@6;Exporter::import;CORE::match 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];XML::Twig::purge;XML::Twig::Elt::delete 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@53 256 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@13 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@5;constant::import;CORE::regcomp 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@153 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@10 63 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::BEGIN@7 15 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new;Archive::Zip::Member::unixFileAttributes;Archive::Zip::Member::_mapPermissionsToUnix;Archive::Zip::Member::localExtraField 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@133;constant::import 128 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@14;vars::import;CORE::match 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;XML::Twig::Elt::_and 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51 19859 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;IO::Seekable::seek;CORE::seek 30 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::new 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383;POSIX::import;POSIX::load_imports 3621 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.55;warnings::unimport 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@268;constant::import;CORE::subst 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169;overloading::BEGIN@2 91 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@2;strict::import 15 main::BEGIN@5;Test::Builder::Module::import;Test::More::import_extra;Test::Builder::Module::builder;Test::Builder::new 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;UNIVERSAL::can 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@120 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::set_atts;XML::Twig::Elt::keep_atts_order 1120 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@843;constant::import;CORE::subst 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@3;warnings::import;warnings::_bits 47 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@113 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@29;Exporter::import 187 main::BEGIN@5;Test::More::BEGIN@5;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1494;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@10 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Exporter::import 122 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@693;warnings::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@4;warnings::import 65 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@89;warnings::unimport;warnings::_expand_bits 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@20;vars::import 225 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_isSeekable 75 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_add_or_discard_stored_spaces 396427 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@240;strict::unimport 39 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;IO::Handle::close;CORE::close 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@66;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@236;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@1783;warnings::unimport;warnings::_expand_bits 194 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@38;vars::import 74 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@297;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@16;Test2::Util::HashBase::import 2218 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@2;strict::import 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@208;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@3 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@236 51 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::root 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@156;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@43;constant::import;CORE::match 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@3 114 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@236;constant::import 104 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk 252 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@3 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@7 92 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Twig::_checked_parse_result;XML::Twig::DESTROY;XML::Twig::Elt::delete 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_level_handler;CORE::match 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@272;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::Builder::Module::import;Test::Builder::Module::_strip_imports 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@192;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@34;constant::import;CORE::regcomp 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Scalar::Util::BEGIN@9 135 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_NOINHERIT;File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:244] 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8;Test2::Hub::Interceptor::Terminator::BEGIN@3 30 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@15;Test2::Util::HashBase::import 507 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut;Scalar::Util::weaken 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@203;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@98;Exporter::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@5 86 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::MIME::Name::BEGIN@3;warnings::import;warnings::_bits 46 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell;XML::Twig::Elt::text;XML::Twig::Elt::text 326 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@103 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@3;warnings::import;CORE::match 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@2;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@30;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@76;warnings::unimport;warnings::_expand_bits 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@300;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@4 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@6 66 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@3 87 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122 5870 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@103;Exporter::import 132 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.14;warnings::unimport 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;XML::Twig::Elt::_and;XML::Twig::Elt::_join_defined 73 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp 1516 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_default 145 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@26;constant::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import;Exporter::export;Exporter::as_heavy 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_add_or_discard_stored_spaces 2495652 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@6;Exporter::import 325 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@150 90 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@37;Exporter::Heavy::heavy_export_ok_tags 36 main::BEGIN@5;Test::Builder::Module::import;Test::Builder::exported_to 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@34 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.9;warnings::unimport;warnings::_expand_bits 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test::Builder::ctx;Test2::API::context 150 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_join_n 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@33;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86;Test2::Util::Trace::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@20;warnings::import 65 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond 1232 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;Archive::Zip::_readSignature 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::File::BEGIN@714;vars::import 138 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@34;constant::import 132 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::import 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;UNIVERSAL::import 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::current_ns_prefixes 12884141 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath 311 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@2;strict::import 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@10;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::centralDirectorySize 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@812 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@113 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@26;Test2::Util::HashBase::import 1252 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize 318 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@11;Exporter::import 155 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;IO::Seekable::tell;CORE::tell 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::ZipFileMember::localHeaderRelativeOffset 28 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_pi_handler;CORE::match 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@33;constant::import 156 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@169;Exporter::import 631 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;IO::Seekable::seek 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@10;Test2::Util::HashBase::import;mro::get_linear_isa 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@33 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@129;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@127;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@219;constant::import;CORE::subst 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@10;warnings::import;warnings::_bits;warnings::_expand_bits 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86 1105 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1519;warnings::unimport 76 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::DESTROY;XML::Parser::Expat::ParserFree 5907 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@3 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@33;constant::import;CORE::regcomp 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.11;warnings::unimport;warnings::_expand_bits 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@256;strict::unimport 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@34;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@9;Exporter::import 138 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@30 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@20;warnings::import;warnings::_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::import;CORE::subst 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@11 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@3 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@4;Exporter::import 84 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Util::HashBase::_new;Test2::Hub::init;Test2::API::_add_uuid_via_ref 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@7 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@137;Carp::_fetch_sub 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::base::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@3 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@68 9812 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::Elt::att 72 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.8 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@207;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@9 44 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test 109 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@3;warnings::import;warnings::_bits 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@10 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@216;constant::import;CORE::match 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@197;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];utf8::encode 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string 9928682 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::StdHash::TIEHASH 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;FileHandle::BEGIN@46;strict::unimport 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@40;constant::import;CORE::subst 8 Test::More::done_testing;Test::Builder::Module::builder 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@37;Exporter::export_ok_tags;Exporter::as_heavy;CORE::subst 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@9;constant::import;Internals::SvREADONLY 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@4;warnings::import 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@109;XSLoader::load 1278 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@158 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@6;Exporter::import;CORE::match 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@295;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@2;strict::import 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@7;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_add_or_discard_stored_spaces 2924 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.39;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_NOFOLLOW 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;CORE::subst 607 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@13;warnings::unimport;warnings::_expand_bits 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@307;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@2;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@66 87 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@257;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_context_aquire;Test2::API::Instance::add_context_acquire_callback;Scalar::Util::reftype 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@235;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.5;warnings::unimport 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@115;constant::import;CORE::subst 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@3 79 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@154;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@2 88 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;CORE::select 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@30 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Parser::Expat::expand_ns_prefix 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut;XML::Twig::Elt::is_elt 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@35;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@9 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@29;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@3 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@257 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@5;strict::import 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] 50 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;IO::Handle::read 45 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test2::Event::eid;Test2::Util::gen_uid 21 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@7 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@257;constant::import 133 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@17 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@294;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@5;vars::import;CORE::match 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.23;warnings::unimport 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1327 78 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@6;Exporter::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@298;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.37 55 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338] 94 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@3;warnings::import 76 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.69;warnings::unimport 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@15;Test2::Util::HashBase::import 513 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@4;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;MIME::Base64::BEGIN@4 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::import;Test2::Util::HashBase::_new;Test2::API::Instance::init;Test2::API::Instance::reset 100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;overload::unimport 115 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@30 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@11;Exporter::import;CORE::match 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string;XML::Parser::Expat::RecognizedString 298894 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@11;Exporter::import 164 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_formatter;Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60];Test2::API::Instance::_finalize;UNIVERSAL::can 21 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@156 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1487;constant::import;CORE::match 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3229 75 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@13;Test2::Util::HashBase::import;mro::get_linear_isa 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Config::BEGIN@6;warnings::import;warnings::_bits;warnings::_expand_bits 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse 2125 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@5096;Exporter::import 152 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@116;strict::unimport 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3;strict::import 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath 5024 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@274;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@5 28 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1539;strict::unimport 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@298 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.63;warnings::unimport 69 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;mro::BEGIN@11 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@298;constant::import 100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@27;vars::import;CORE::match 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Twig::parser 1181381 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@265;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@3 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@515 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@205;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::Backend::PP::init;UNIVERSAL::VERSION 17 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests 111 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@95 426 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh 97 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3852 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@275;constant::import 156 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::import;Test2::Util::HashBase::_new;UNIVERSAL::can 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@103;warnings::unimport 65 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;CORE::unpack 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;overload::import 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@275 45 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader;Archive::Zip::FileMember::fh;IO::Handle::opened 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter;XML::Twig::Elt::set_output_text_filter 127 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979];CORE::subst 34 Test::More::done_testing;Test::Builder::Module::builder;Test::Builder::new 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Parser::Expat::expand_ns_prefix 238 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@89 114 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut 99 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@98;Exporter::import 187 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;XML::Twig::_set_fh_to_selected_fh 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@275;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@617 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_remove_cdata;XML::Twig::Elt::set_remove_cdata 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@205;constant::import 131 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell;XML::Twig::Elt::children;XML::Twig::Elt::first_child 99 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;UNIVERSAL::import 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@205 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@7 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::Elt::new;XML::Twig::Elt::set_gi 222 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.32 137 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy 11325 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@7;constant::import;mro::method_changed_in 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::Config::BEGIN@7 141 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@103;Exporter::import;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276 2215 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@128;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetElementDeclHandler 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut;XML::Twig::Elt::is_elt 84 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;UNIVERSAL::can 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@4;strict::import 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@10;parent::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@260;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;Exporter::import;CORE::match 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@3;warnings::import 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@439 74 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Twig::_checked_parse_result;XML::Twig::DESTROY;UNIVERSAL::isa 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.35 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@3 100 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end 56572654 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;XSLoader::load 1352 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@6;Exporter::import 191 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@3 97 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@201;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@27;constant::import 127 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;CORE::unpack 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;XSLoader::load 5371 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::release;XML::Parser::Expat::ParserRelease 4 Test::More::ok;Test::Builder::ok 405 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@209;constant::import;CORE::subst 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@6 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@4;warnings::import 92 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@46;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Parser::Expat::setHandlers 80 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::Notation_list::new 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@103 53 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@3;warnings::import;warnings::_bits 47 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_formatter;Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60] 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@192 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@36;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@2 110 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::regcomp 130 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@272 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Parser::new 87 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@828;strict::import 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@192;constant::import 95 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Twig::_checked_parse_result;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut;XML::Twig::Elt::is_elt;XML::Twig::Elt::gi 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@50 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@56 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@272;constant::import 99 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@130;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@9 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@208;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;Scalar::Util::weaken 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndElementHandler 127643 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@297;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export 622 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.38;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Twig::_checked_parse_result 87 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4159;strict::unimport 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@236;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::File::open;IO::Handle::_open_mode_string;CORE::subst 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@20 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2601;Exporter::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@208 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;mro::BEGIN@11;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@231;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse 507 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@297 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@11;Exporter::import 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@208;constant::import 102 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::import;overload::OVERLOAD 139 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@3;warnings::import 73 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::Entity_list::new 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@297;constant::import 103 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@192;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Parser::Expat::new_ns_prefixes 241300 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@272;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54 3166 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys 50 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots 611 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::ancestors;XML::Twig::Elt::passes 645 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@200;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@72;warnings::unimport;warnings::_expand_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@157 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@45;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@6;warnings::import 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@277;constant::import;CORE::subst 14 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send 110 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::new;IO::Handle::new;Symbol::gensym 174 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;Cwd::BEGIN@2 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@34;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12.1;warnings::unimport;warnings::_expand_bits 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@94;strict::unimport 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@266;constant::import;CORE::subst 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8 4476 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@230;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;XML::Twig::_insert_pcdata 9679148 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child 3162 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@8;Test2::Util::HashBase::import;UNIVERSAL::can 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@3;warnings::import;CORE::match 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@121;strict::unimport 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@3;warnings::import;warnings::_bits 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::BEGIN@3 88 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383;POSIX::import;CORE::subst 20 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test2::Hub::format 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313];XML::Twig::purge;XML::Twig::Elt::in;UNIVERSAL::isa 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond 39940 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@273 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@3;warnings::import;CORE::match 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::Handle::close;CORE::close 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.63;warnings::unimport;warnings::_expand_bits 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1557;warnings::unimport 61 main::BEGIN@5;Test::Builder::Module::import;Test::Builder::Module::builder;Test::Builder::new 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@6;warnings::import;warnings::_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetProcessingInstructionHandler 92379 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 1100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@29;constant::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@63;warnings::unimport;warnings::_expand_bits 154 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@21 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::Util::clone_io;CORE::select 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test2::Hub::format 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@22 47 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_readSignature;IO::Handle::read 132 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167;parent::import 125 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;IO::Seekable::tell 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@4;warnings::import 72 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12 15025 main::BEGIN@5;Test::Builder::Module::import;Exporter::import;CORE::subst 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@227;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Exporter::import 434 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@43;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@301;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1488;constant::import 131 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@22;Exporter::import 167 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::new;IO::Handle::new 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@14 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XSLoader::load 2021 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95 4190 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123;IO::File::__ANON__ 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::DESTROY 322 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@49;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@20;warnings::import;warnings::_bits;warnings::_expand_bits 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Dir::BEGIN@802;vars::import 130 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@33;constant::import;mro::method_changed_in 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@33;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14 68161 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@6;warnings::import 70 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::subst 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@4;vars::import 141 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@267;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;UNIVERSAL::isa 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants 51 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut 106 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test2::Formatter::import;Test2::API::test2_formatter_add;Test2::API::Instance::add_formatter 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@29;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@245;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1490;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;Spreadsheet::ParseXLSX::_color;Spreadsheet::ParseXLSX::_xml_boolean 89 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@229;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@128 28 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Handle::read;CORE::read 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@7;constant::import;Internals::SvREADONLY 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts 64 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@12 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@307 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::XS::BEGIN@210;parent::import 99 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@151 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@295;constant::import 106 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.32;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::new;IO::Handle::new 131 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::BEGIN@4 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@295 28 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export;Exporter::as_heavy 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@2705 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@307;constant::import 105 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.21 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;Cwd::BEGIN@3 73 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@103;strict::unimport 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@12;Encode::Encoding::__ANON__ 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@66 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import 95 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@2 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::Entity_list::new 22 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndCdataHandler 98459 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@288;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@43;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@214;constant::import;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@25;constant::import;CORE::match 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@126;constant::import;CORE::match 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 44 Test::More::ok;Test::Builder::ok;Test::Builder::ctx 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@5 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@4;Exporter::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@291;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@307;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@228;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@295;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::_op 100 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@3;warnings::import 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@294 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::subst 171 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@2 90 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetAttListDeclHandler 102942 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;Exporter::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@294;constant::import 101 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string;XML::Parser::Expat::RecognizedString 2356 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load 18 main::BEGIN@5;Test::Builder::Module::import;Exporter::import 798 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.74 72 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@257;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@4 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@7 226 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test2::API::release;Test2::API::Context::release 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@35;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.50;warnings::unimport;warnings::_expand_bits 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes 215 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@4 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@202;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@9;Exporter::import;CORE::match 4 Test2::API::Instance::END;Test2::API::test2_set_is_end 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@306;constant::import;CORE::subst 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::parser 83 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@35 25 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@10;Exporter::import 159 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@35;constant::import 111 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@6;Exporter::import 221 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_xs;JSON::__load_xs 380 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156];Test::Builder::_ending;Test2::Util::ExternalMeta::meta;Test2::Util::ExternalMeta::validate_key 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;UNIVERSAL::import 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import 206 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@294;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@3 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export;Exporter::as_heavy;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;XSLoader::load 1261 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@157;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@14;vars::import 128 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@515;warnings::unimport 69 main::BEGIN@5;Test::More::BEGIN@209 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@35;constant::import;CORE::subst 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetExternalEntityRefHandler 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetElementDeclHandler 83719 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@63;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@155;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@298;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@2 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::Font::BEGIN@20 32 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169;Carp::BEGIN@1 73 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@146;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@11 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@124;constant::import 172 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_remove_cdata;XML::Twig::Elt::set_remove_cdata 8 Test2::API::Instance::END 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@312;constant::import;CORE::subst 10 Test2::API::END;Test2::API::Instance::set_exit;Test2::API::Stack::all 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@231;constant::import;Internals::SvREADONLY 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@7;Exporter::import 156 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@225 74 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@47;warnings::unimport;warnings::_expand_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1519 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::BEGIN@5 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@167 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@286;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetNotationDeclHandler 104664 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12;warnings::import;warnings::_bits 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@228;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@2;strict::import 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new;CORE::match 915170 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@744;warnings::unimport;warnings::_expand_bits 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init;XML::Twig::_set_fh_to_twig_output_fh 9 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::event_tap 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@9 49 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Parser::Expat::namespace 10629 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots 7200943 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@29;Exporter::import;CORE::match 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@46 55 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@10 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@3;warnings::import;warnings::_bits 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.64 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_tag_cond 600 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@63 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::tell;CORE::tell 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@19 95 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@64;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@8;Test2::Util::HashBase::import;mro::get_linear_isa 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@10 39 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::ctx 22 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;Exporter::Heavy::BEGIN@4;strict::unimport 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@62;strict::unimport 49 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_add_or_discard_stored_spaces 232 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@8;Test2::Util::HashBase::import;UNIVERSAL::can 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@239;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_atts_order 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@6;Exporter::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::root 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::BEGIN@3;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@24 78 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@11 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::BEGIN@3 89 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@222;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.48 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@40;strict::unimport 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@3;warnings::import 79 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@81;constant::import;CORE::subst 6 main::BEGIN@4;CORE::match 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@9 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 11 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@9;Exporter::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@220;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@285;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_TEMPORARY;File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:274] 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::DESTROY;XML::Parser::Expat::ParserFree 31 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;UNIVERSAL::isa 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Exporter::import;CORE::subst 59 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;CORE::subst 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDoctypeHandler 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.8;warnings::unimport;warnings::_expand_bits 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_xs 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter;XML::Twig::Elt::set_output_text_filter;UNIVERSAL::isa 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_rels_for 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123;SelectSaver::BEGIN@38;Exporter::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::tell 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@3 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_TEMPORARY 52 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import;CORE::match 1 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@128;constant::import 117 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCharacterDataHandler 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@9;Test2::Util::HashBase::import 434 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;Exporter::export 21 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1539 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@305;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@75;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.4 69 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@116 49 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@89;warnings::unimport 72 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::new;XML::Parser::Expat::ParserCreate 77 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@33 83 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::BEGIN@7 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::expand_ns_prefix 77 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@4 32 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::print_optimal_pass 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@3 38 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Event::Plan::facet_data;Test2::Event::common_facet_data 191 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@75 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@305 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@4;warnings::import 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@305;constant::import 109 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@75;constant::import 113 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@2;strict::import 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@153;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;UNIVERSAL::import 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants;XML::Twig::Elt::next_elt;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 883 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@10 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1490;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.25 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3587 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12.1;warnings::unimport 63 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@268;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_quote 81 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@68;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.46;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@119 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@137;strict::unimport 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@251;constant::import;Internals::SvREADONLY 3 Test::More::ok;Test::Builder::ok;Test2::API::Context::release 93 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@52;warnings::import 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@66;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.52;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@72;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_handler 2694572 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@47 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::BEGIN@70;strict::unimport 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@124 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@7;Exporter::import 193 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::Handle::close 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@72;constant::import 98 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@3 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@147;Exporter::import 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;CORE::match 99 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.67;warnings::unimport 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@72 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@15;Test2::Util::HashBase::import 2913 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@35;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@4 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@215;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_special_handler 201 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::root 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;UNIVERSAL::import 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::root 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@3;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.17;warnings::unimport;warnings::_expand_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@203;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;CORE::match 120 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@7;Exporter::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@15;Exporter::import 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@19;strict::import 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import;Exporter::export 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24 1381 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@223;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@253;constant::import;mro::method_changed_in 2 main::BEGIN@7;UNIVERSAL::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@46;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56 15660 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@77;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@23;vars::import 136 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_xs;JSON::__load_xs;JSON::BEGIN@2 269 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];XML::Twig::Elt::att 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_BINARY 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@191 1212 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Time::HiRes::AUTOLOAD;CORE::subst 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];XML::Twig::purge;XML::Twig::Elt::in 43 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::plan 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;Cwd::BEGIN@644 73 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@189;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export;Exporter::as_heavy;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27 9598 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@7;Test2::Event::Fail::__ANON__ 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@42;Exporter::import 205 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@34 57 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::cull 17 Test2::API::END;Test2::API::Instance::set_exit;Test2::Util::HashBase::_new 68 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Exporter::import 115 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@84 73 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@72;warnings::unimport;warnings::_expand_bits 52 Test::More::done_testing;Test::Builder::done_testing 446 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@831;Exporter::import 105 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::parser 2098 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 111940 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@5;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@8119 160 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD 15303 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@9 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Scalar::Util::BEGIN@9;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10 1880 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@121;Exporter::import 200 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.71 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167;UNIVERSAL::VERSION 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@28;Exporter::import;CORE::subst 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;Exporter::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@121;warnings::unimport 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.15 69 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156];Test::Builder::_ending;Test2::Hub::is_passing 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_ipc 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Dir::BEGIN@801;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@4 100 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.10 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@58;constant::import;mro::method_changed_in 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::BEGIN@50;warnings::unimport;warnings::_expand_bits 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@6;warnings::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.4;warnings::unimport 65 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle 249 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@11;Test2::Util::HashBase::import 893 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@15;UNIVERSAL::VERSION 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@137 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@9;Exporter::import 140 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end 2839 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;CORE::match 95 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246] 120 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.17;warnings::unimport 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.21;warnings::unimport;warnings::_expand_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1487;constant::import;CORE::regcomp 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@6 106 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::release;XML::Parser::Expat::ParserRelease 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member 378 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@6;Exporter::import;CORE::subst 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::subst 381 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1494;constant::import 107 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::ExpatNB::BEGIN@600 54 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::BEGIN@7;warnings::register::import 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@207;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetNotationDeclHandler 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::utf8::BEGIN@215;parent::import 109 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@8 72 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@6;warnings::import;warnings::_bits;warnings::_expand_bits 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;Fcntl::BEGIN@60;Exporter::import 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@262;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@9 76 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1493 112 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@247;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@8;Exporter::import;CORE::match 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@2 93 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@76;constant::import 128 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@5 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.21;warnings::unimport 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@76 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;CORE::regcomp 342 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_handler 1126 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@8;Test2::Util::HashBase::import;UNIVERSAL::can 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import;UNIVERSAL::isa 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1494;constant::import;CORE::subst 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@9 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;CORE::subst 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_level_handler 139 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@104;Exporter::import 141 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;CORE::qr 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@31;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::set_atts 40157 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers 15619267 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Errno::BEGIN@21 1146 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::substcont 20 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@744 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char 8290145 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;CORE::subst 64 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@71;warnings::unimport;warnings::_expand_bits 49 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::set_atts;XML::Twig::Elt::keep_atts_order 112 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Exporter::import;CORE::match 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@246;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@157;constant::import 116 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15 11730 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@33;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@76;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.20;warnings::unimport 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@9 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@19;strict::import 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::File::open 120 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature;IO::Handle::read;CORE::read 129 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@51 50 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.47;warnings::unimport 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1487;constant::import 286 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@3;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@117;warnings::unimport;warnings::_expand_bits 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;Spreadsheet::ParseXLSX::_xml_boolean 406 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@751 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@238;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::subst 682 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@190 25 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@3;warnings::import 63 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;Archive::Zip::_readSignature;IO::Handle::read 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@8 84 Test::More::done_testing;Test::Builder::done_testing;Test2::Util::ExternalMeta::meta;Test2::Util::ExternalMeta::validate_key 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@28;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@5;constant::import 174 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::fileparse_set_fstype;CORE::regcomp 218 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@124;constant::import;CORE::regcomp 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@1285;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@190;constant::import 106 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@8;Exporter::import;CORE::match 13 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory 248 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@27;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@274;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@36;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@190;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;overload::import;overload::OVERLOAD 143 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@40 63 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartCdataHandler 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@9;constant::import;CORE::subst 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::next_sibling 9145579 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::in;UNIVERSAL::isa 149 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Notation::BEGIN@5023 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@6;warnings::import;warnings::_bits 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info 1468 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartElementHandler 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::_contexts_ref 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@35;vars::import;CORE::match 21 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.6;warnings::unimport 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@147;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_special_handler;CORE::match 80 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;Scalar::Util::weaken 381 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@221 55 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Scalar::Util::BEGIN@10 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@20 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@240;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@312;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@204;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@221;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@169 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@8 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top 24 Test2::API::END;Test2::API::Instance::set_exit;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.23 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@156;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@252;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@172;vars::import 127 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@4 59 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles 128 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_EXLOCK;File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:252] 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@48;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86;Test2::Util::Trace::BEGIN@4;warnings::import;CORE::match 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@150;UNIVERSAL::VERSION 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@8;Exporter::import 212 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.32;warnings::unimport 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169;overloading::BEGIN@2;warnings::import;warnings::_bits;warnings::_expand_bits 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::depth 416746 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::desiredCompressionMethod;Archive::Zip::Member::uncompressedSize 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@153;constant::import;CORE::match 8 main::BEGIN@5;Test::Builder::Module::import;Test::More::import_extra 109 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@104 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;IO::Seekable::seek;CORE::seek 86 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@228;constant::import;CORE::subst 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.35;warnings::unimport;warnings::_expand_bits 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;CORE::match 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@78;constant::import;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@17 127 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::DESTROY;XML::Twig::Elt::delete 1190 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@221;constant::import;CORE::regcomp 4 Test::Builder::INIT;Test2::API::test2_in_preload;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@31;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19 1319 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_base_path_for 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@240 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@286;constant::import;CORE::subst 16 main::BEGIN@5;Test::More::BEGIN@3 140 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@29;Exporter::import 130 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.61;warnings::unimport;warnings::_expand_bits 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;mro::BEGIN@11;warnings::import;warnings::_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@3;warnings::import 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@240;constant::import 101 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@4 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313];XML::Twig::purge 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::readIsDone 212 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@306;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@829;Exporter::import;CORE::match 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;IO::Handle::read 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@292;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@202;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@6;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@310;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@6 214 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::gen_code;CORE::match 146 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@10 121 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@279;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@302;constant::import;CORE::match 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info 5825035 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@22;warnings::unimport 86 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268];XML::Twig::purge;XML::Twig::Elt::in 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@7 42 Test2::API::END;Test2::API::test2_set_is_end;Test2::Util::HashBase::_new;Test2::API::Context::init 149 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Parser::Expat::namespace 511 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.61 55 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@3 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@169 69 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_level_handler;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12;warnings::import 72 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@5 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@292 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse;CORE::subst 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@279;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@188;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@141 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;Exporter::export;Exporter::as_heavy 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.64;warnings::unimport;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@279 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@62 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@292;constant::import 92 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@3 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@278;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Util::clone_io 330 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_handler;XML::Twig::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] 410 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.57 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@4;warnings::import;warnings::_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.27;warnings::unimport;warnings::_expand_bits 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5 4558 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@12 65 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;Exporter::Heavy::BEGIN@202 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@209;constant::import 185 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@223;constant::import;CORE::match 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::parser 1997832 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::tell 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::BEGIN@4;warnings::import;warnings::_bits 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1519;warnings::unimport;warnings::_expand_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@3;warnings::import 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26;Crypt::RC4::BEGIN@15;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@5082;Exporter::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@67;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;Scalar::Util::weaken 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@237;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@43;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@67;constant::import 108 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new 2856 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@5096 328 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@237;constant::import 102 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;Scalar::Util::weaken 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@67 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@158;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@291;constant::import;CORE::subst 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@237 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@278 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.69;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@15;Exporter::import;CORE::match 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new;XML::Twig::Elt::set_gi 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@269;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::tell;CORE::tell 11 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_has_ipc 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::att 864 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@278;constant::import 107 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::BEGIN@54;strict::unimport 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@9;Test2::Util::HashBase::import 501 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::purge;XML::Twig::Elt::delete 335198 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@3;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;utf8::encode 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@10 53 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_level_handler;CORE::match 22 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test2::Formatter::import 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Parser::Expat::namespace 4478738 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::Parameters::value 122 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@33 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@2;strict::import 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@14 22 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::parser 248152 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@45;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167;parent::BEGIN@21 52 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export;Exporter::as_heavy 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@3 133 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.18 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::Font::BEGIN@20;warnings::import;warnings::_bits;warnings::_expand_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@301;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@6 113 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@3;warnings::import;CORE::match 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;FileHandle::BEGIN@3 108 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse 763 main::BEGIN@5;Test::More::BEGIN@22 2614 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@8;Test2::Util::HashBase::import;mro::get_linear_isa 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17 6882 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@229;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@17;Config::import 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::BEGIN@4 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34 1167 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::event_tap 63 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@11;UNIVERSAL::can 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::Notation_list::new 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@171;Exporter::import;CORE::match 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@245;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle 91 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;Spreadsheet::ParseXLSX::_color 1135 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Exporter::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@5;strict::import 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::_twig_end 111 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@8 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@267;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@8;Exporter::import 169 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.39;warnings::unimport 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;CORE::pack 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@6;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@9 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@3;warnings::import;warnings::_bits 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@283;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::AUTOLOAD 100 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@11;Exporter::import;CORE::match 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.26 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@230;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@311;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@266;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@493 52 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@11;Test2::Util::HashBase::import;UNIVERSAL::can 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Parser::Expat::NamespaceEnd 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler 1673 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_regexp_handler 127 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;CORE::match 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@277;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167;parent::BEGIN@21;strict::unimport 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Config::FETCH 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@311 23 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@153;Exporter::import 127 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests;Test::Builder::ctx;Test2::API::context 127 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@311;constant::import 105 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@2;warnings::import;warnings::_bits;warnings::_expand_bits 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;CORE::select 289412 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut;Scalar::Util::weaken 119 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.40;warnings::unimport 59 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_handler;XML::Twig::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] 1392551 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents 641 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@6;vars::import;CORE::match 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::new 120 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@6;warnings::import;warnings::_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test::Builder::ctx;Test2::API::context 202 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;CORE::match 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@3;strict::import 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_remove_cdata 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@1517 1171 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::API::test2_unset_is_end 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@20 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@4 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@9 94 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@102 51 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@12;warnings::unimport;warnings::_expand_bits 49 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@66;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCommentHandler 91100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@36;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import 300 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1490;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@120 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:85] 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98 1764 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@200;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;IO::Handle::read;CORE::read 5383 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@25 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@202;integer::unimport 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@308;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@439;vars::import;CORE::match 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@20;Test2::API::test2_load_done 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@156;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@28;constant::import 120 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::set_root;Scalar::Util::weaken 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@3;warnings::import;warnings::_bits 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Exporter::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::_revbe 3982 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@2 93 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetXMLDeclHandler 178967 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@8 65 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants 317 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@6 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@53;CORE::regcomp 136 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@260;constant::import;CORE::subst 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];XML::Twig::Elt::att 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_context_aquire;Test2::API::Instance::add_context_acquire_callback 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@150;Exporter::import 1117 Test::Builder::INIT 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@282 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@199;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@3 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15 2150 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@1471 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@282;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@185;constant::import;CORE::match 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::AUTOLOAD 262 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@15;Exporter::import 197 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;IO::Seekable::seek;CORE::seek 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@4;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@147;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@309;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::_twig_end;XML::Twig::_add_or_discard_stored_spaces 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::release;XML::Parser::Expat::ParserRelease 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@209;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@282;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Exporter::import 220 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@201;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178 55 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.41;warnings::unimport;warnings::_expand_bits 40 Test::More::ok;Test::Builder::Module::builder 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@36;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@209 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@141;strict::unimport 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.70 80 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@27;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@460 73 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3587;strict::unimport 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@147;UNIVERSAL::VERSION 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@25;constant::import;mro::method_changed_in 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@3 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@29 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@85 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@3;warnings::import;warnings::_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@42;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@15;Test2::Util::HashBase::import;UNIVERSAL::can 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;CORE::subst 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@158;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Errno::BEGIN@9 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];utf8::encode 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@4;vars::import;CORE::match 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@36;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@265;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@3 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@4 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new 911 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_post_load;Test2::API::Instance::add_post_load_callback;Scalar::Util::reftype 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268];XML::Twig::purge 63 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1491;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@2;strict::import 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;CORE::unpack 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@5 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1492;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@53;CORE::qr 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@8;warnings::import 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152 5459 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@137;Carp::_univ_mod_loaded 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import;Exporter::export;Exporter::as_heavy 50 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41 7283 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@273;Exporter::import 215 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@693;warnings::import;warnings::_bits;warnings::_expand_bits 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export;Exporter::as_heavy;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string;XML::Parser::Expat::RecognizedString 178 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath 248 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::BEGIN@3 99 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter;XML::Twig::Elt::set_output_text_filter 35 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::EventFacet::Trace::snapshot 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@3 88 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::seek 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37;constant::import;CORE::subst 11 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@10 22 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.43;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants 3156 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.24 52 main::BEGIN@4 20008 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@11;Test2::Util::HashBase::import;UNIVERSAL::can 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383;POSIX::import;Exporter::import;CORE::subst 299 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@10 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];XML::Twig::purge;XML::Twig::Elt::in 58 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_normalize_args 91 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_xml_boolean 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@271 105 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@41;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;mro::BEGIN@11;warnings::import 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::base::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@9 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;IO::Handle::opened 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@16 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_expand_external_entities;XML::Twig::Elt::set_expand_external_entities 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92 4032 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@8;Exporter::import;CORE::match 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@7;Exporter::import 305 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@274;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11 43659 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.63 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_join_n 270 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@180 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@272 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@40;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::ExpatNB::BEGIN@600;Exporter::import 206 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@261;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::import 51 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::release 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@35 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@235;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::BEGIN@12 112 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetProcessingInstructionHandler 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@273;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 482 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@34 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@61;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::BEGIN@8;strict::import 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Exporter::import;CORE::subst 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@7 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@49;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1487 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@61;constant::import 107 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4;warnings::import;warnings::_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::fetch_string;CORE::match 190 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@35;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;Exporter::import 655 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@246;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@61 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@9;Test2::Util::HashBase::import 191 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_expand_external_entities;XML::Twig::Elt::set_expand_external_entities 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@261 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123 1613 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;UNIVERSAL::import 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];Spreadsheet::ParseXLSX::_cell_to_row_col 117 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::compressionMethod 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;Archive::Zip::Member::fileName 262 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Spec::Unix::curdir 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@261;constant::import 107 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_reset_handlers 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@439;vars::import 105 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@207;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@2628;strict::unimport 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetElementDeclHandler 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];utf8::encode 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@209;constant::import;CORE::regcomp 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_remove_cdata 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@812;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test::Builder::create;Test2::API::test2_stack 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Parser::Expat::namespace 9749010 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156] 148 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::compressionMethod 58 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature;IO::Handle::read 91 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::DESTROY 491 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@15 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix 44427542 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@49;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.45 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath 1204 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@4 97 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetXMLDeclHandler 88729 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@247;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@227;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::base::BEGIN@3;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@262;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@34;constant::import 105 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88 3973 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@4 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::regcomp 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString 1416 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEntityDeclHandler 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@197;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;Exporter::import 126 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start 133880 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::seek;CORE::seek 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::BEGIN@4;warnings::import;warnings::_bits 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14 3635 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@117 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 8 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader;Archive::Zip::FileMember::fh 178 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@130;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_add_handler 327 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.65;warnings::unimport;warnings::_expand_bits 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];XML::Twig::purge;XML::Twig::Elt::delete 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@212 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@133;constant::import;Internals::SvREADONLY 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;CORE::qr 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@3 85 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@8 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@212;constant::import 103 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::FileMember::fh;IO::Handle::opened 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@24;Config::import 61 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns 5870833 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents 40974 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@256;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;XML::Twig::Elt::_and;XML::Twig::Elt::_join_defined 26 main::BEGIN@5;Test::More::BEGIN@5;warnings::import;warnings::_bits;warnings::_expand_bits 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@66;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27 8375 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@256;constant::import 119 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants 733 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@7;Exporter::import 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14 4002 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_pi_handler;CORE::regcomp 261 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test::Builder::ctx;Test2::API::context;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@47;warnings::unimport 71 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@7 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@256 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::Backend::PP::init 232 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::subst 56 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;XML::Twig::Elt::_and 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@212;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1488;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk 161 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@300;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::BEGIN@70 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@62;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::eocdOffset 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Exporter::BEGIN@4;strict::unimport 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@832;Exporter::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;XML::Twig::_insert_pcdata 909 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@3 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@3;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@31;Exporter::import 158 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@9;Exporter::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@227;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.18;warnings::unimport 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Errno::BEGIN@9;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@211;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;CORE::match 3328 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndCdataHandler 103686 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@227 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_level_handler 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@211;constant::import 137 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@189;constant::import;CORE::subst 8 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Event::Plan::facet_data;Test2::Event::common_facet_data;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@211 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@227;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@228;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import;base::has_fields 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@22;Exporter::import;CORE::match 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@2;strict::import 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15 1275 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@80;warnings::unimport 78 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::_autoflush;CORE::select 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@126;constant::import;CORE::subst 14 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_isSeekable;Archive::Zip::_ISA;UNIVERSAL::isa 30 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import;base::has_attr 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.40;warnings::unimport;warnings::_expand_bits 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Exporter::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@2 94 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test2::Hub::process 102 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@59;constant::import 128 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@3 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.68;warnings::unimport 66 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.57;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp 49 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@113;warnings::unimport 76 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@693;warnings::import;warnings::_bits 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@59 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children 593 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1];XML::Twig::Elt::gi 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;CORE::open 696 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@251;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@3;warnings::import 72 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@3;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@289 133 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@4;Exporter::import 278 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@6;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@68;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@289;constant::import 101 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@3;warnings::import 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@6;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@206;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_expand_external_entities 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4159 65 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;Fcntl::BEGIN@60 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@289;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@215;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;CORE::pack 127 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.67;warnings::unimport;warnings::_expand_bits 37 Test::More::done_testing 69 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;Spreadsheet::ParseXLSX::_color;XML::Twig::Elt::att 245 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@59;constant::import;CORE::regcomp 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@198;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@4;warnings::import;warnings::_bits 42 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests;Test::Builder::ctx 19 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@94 72 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::Elt::att 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::BEGIN@13;vars::import;CORE::match 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@146;constant::import;CORE::match 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8;Test2::Hub::Interceptor::Terminator::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import;base::has_attr 11 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@60 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@70;constant::import 111 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@10;Exporter::import 182 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@684;warnings::unimport 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@70 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@60;constant::import 114 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@7 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@4;warnings::import 69 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;Archive::Zip::FileMember::fh;IO::Handle::opened 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@35;constant::import;CORE::match 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;UNIVERSAL::can 80 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7 4104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1492;constant::import;CORE::match 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@3;warnings::import 75 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@9;constant::import;CORE::regcomp 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@155;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17 13268 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@3;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::match 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];XML::Twig::purge 1549905 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@693 43 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send 100 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@213;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@3;warnings::import;warnings::_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@133;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles 6481 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Twig::parser 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 4098 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@60;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_NOINHERIT 155 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCharacterDataHandler 111776 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;Archive::Zip::_CAN 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@70;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@3;warnings::import;warnings::_bits 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.12;warnings::unimport;warnings::_expand_bits 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::release 102 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_encoding 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32 8177 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::Handle::new;Symbol::gensym 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.20;warnings::unimport;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@239;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@52;warnings::import;warnings::_bits;warnings::_expand_bits 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member 150 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@28 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::next_sibling 88 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile;Archive::Zip::Member::new;Archive::Zip::Member::unixFileAttributes;Archive::Zip::Member::_mapPermissionsToUnix 310 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@64;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.34;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@210;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::export_to_level 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.7;warnings::unimport;warnings::_expand_bits 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@34;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3852;strict::unimport 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::BEGIN@13 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::Font::BEGIN@19 88 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_check_illegal_twig_roots_handlers 86 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@153 21 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_encoding 128 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@39;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@313;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@191;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@2 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@210 24 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;IO::Handle::opened 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_add_or_discard_stored_spaces 3091190 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@273;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.66;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.59;warnings::unimport 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@210;constant::import 94 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.73;warnings::unimport;warnings::_expand_bits 94 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@834;vars::import 144 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@81;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;XML::Twig::_set_fh_to_selected_fh 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@209 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@222;constant::import;CORE::subst 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut;Scalar::Util::weaken 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;CORE::regcomp 172 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::in 904 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@124;constant::import;mro::method_changed_in 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@2 93 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@12;warnings::unimport 84 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::regcomp 9599 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::subst 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@30;Exporter::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@10 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3229;strict::unimport 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.10;warnings::unimport 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.30;warnings::unimport 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@13 66 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::Elt::gi 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@7;Exporter::import 140 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@252;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@20;vars::import;CORE::match 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@63;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@43 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1485 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@228;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@6961 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@78;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@209;warnings::unimport 97 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@10 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string 294 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@843;constant::import;CORE::match 46 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test;Test::Builder::ctx 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse;Compress::Raw::Zlib::Parameters::_checkType 326 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::subst 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@38;constant::import 117 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;CORE::regcomp 380 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::match 5 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader;CORE::unpack 54 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8;Test2::Hub::Interceptor::Terminator::BEGIN@3;warnings::import 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@286;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@493;warnings::unimport 91 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@3;strict::import 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import;Exporter::export 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1;warnings::unimport;warnings::_expand_bits 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::compressionMethod 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::Format::BEGIN@20;warnings::import;warnings::_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26;Crypt::RC4::BEGIN@16;vars::import 194 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@9;constant::import;mro::method_changed_in 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string 421 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix 11326 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::gen_code;CORE::subst 1136 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@4;warnings::import 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::XS::BEGIN@210 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@7919 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@261;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Parser::Expat::new_ns_prefixes 2171 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::ExpatNB::BEGIN@600;Exporter::import;CORE::match 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@8;Test2::Util::HashBase::import 888 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;Exporter::Heavy::BEGIN@202;warnings::unimport 97 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@61;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::Config::BEGIN@8 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93 2018 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@302;constant::import;CORE::subst 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@5;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import;base::has_fields 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import;Exporter::Heavy::heavy_export 594 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];XML::Twig::purge;XML::Twig::Elt::delete 401490 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::readIsDone 77 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@121 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::match 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1];XML::Twig::Elt::gi 645179 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Fcntl::O_EXLOCK 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11 31 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix 21179770 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@5;warnings::register::import 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@831 70 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@117;warnings::unimport 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@3 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1327;strict::unimport 45 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2 149 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@188;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.58;warnings::unimport;warnings::_expand_bits 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.19 59 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Twig::_checked_parse_result 77 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@2 109 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@9 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@14 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Errno::BEGIN@8 89 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4636 79 main::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123;SelectSaver::BEGIN@38 81 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@90 47 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@121;warnings::unimport;warnings::_expand_bits 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.60;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@3 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99 2235 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 11 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Util::HashBase::_new;Test2::Event::V2::init 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@291;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig 101 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::AUTOLOAD;Compress::Raw::Zlib::constant 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut;Scalar::Util::weaken 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@6 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1493;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@8 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants;XML::Twig::Elt::next_elt 1355 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@288;constant::import;Internals::SvREADONLY 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@8;Test2::Util::HashBase::import;mro::get_linear_isa 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@214;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@3 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@17;Test2::Util::HashBase::import 318 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::API::test2_stdout 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::File::BEGIN@713;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1491;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_special_handler;CORE::regcomp 236 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@256;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse 61 Test::More::ok;Test::Builder::ok;Test::Builder::ctx;Test2::API::context;Test2::Util::gen_uid 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort 246 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Twig::_a_proper_ns_prefix 366 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import;base::has_attr 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@2 111 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import;Exporter::export 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;MIME::Base64::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@103 54 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.69 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@2 108 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@120;strict::unimport 146 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@245;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@102;strict::unimport 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@5;warnings::register::import;warnings::register_categories;warnings::_mkMask 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::_autoflush 126 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@229;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@5;constant::import;Internals::SvREADONLY 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169 3314 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 10 Test2::API::END;Test2::API::Instance::set_exit;Test2::Util::HashBase::_new;Test2::EventFacet::Trace::init 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDoctypeHandler 106042 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53 11979 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@7 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@212;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_atts_order;XML::Twig::Elt::set_keep_atts_order 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::base::BEGIN@4;warnings::import;warnings::_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Exporter::import 392 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14 1343 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];Spreadsheet::ParseXLSX::_cell_to_row_col;CORE::match 187406 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@744;warnings::unimport 97 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@230;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@1 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383;POSIX::import;Exporter::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_encoding;XML::Twig::Elt::set_keep_encoding 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@62;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4;warnings::import;warnings::_bits 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@89 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;CORE::subst 477 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@211;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.54 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::Format::BEGIN@19;strict::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@371 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_add_handler 66 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_readDataRemaining 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Handle::read 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@227;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@730 71 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Event::eid;Test2::Util::gen_uid 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18 1736 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@8;Test2::Util::HashBase::import 618 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@5 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::depth 1797305 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;Scalar::Util::weaken 3062 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Scalar::Util::BEGIN@10;warnings::import;warnings::_bits;warnings::_expand_bits 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@62;constant::import 97 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37 1636 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18 53919 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@216;constant::import;CORE::subst 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_pi_handler;CORE::regcomp 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@62 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@4;warnings::import;CORE::match 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.46;warnings::unimport 71 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@684 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@198 25 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@37;strict::unimport 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@20;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@4 41 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Util::HashBase::_new;UNIVERSAL::can 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@198;constant::import 108 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@6;Exporter::import 171 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_pi_handler;CORE::match 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@36;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@90;strict::unimport 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@206;constant::import;CORE::regcomp 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4649;utf8::unimport 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] 698 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@103 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import;Exporter::export;Exporter::as_heavy 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@46;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.15;warnings::unimport 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@206 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169;overloading::BEGIN@2;warnings::import;warnings::_bits 54 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig;XML::Twig::Elt::root 21 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_default;CORE::match 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@206;constant::import 118 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::import;CORE::match 23 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;IO::Handle::binmode;CORE::binmode 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.56;warnings::unimport 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@289;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@52 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@231;constant::import 278 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::utf8::BEGIN@229;bytes::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@198;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@129;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@59;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix 157 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@127;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@219;constant::import;CORE::match 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@124;constant::import;Internals::SvREADONLY 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@38 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.52 66 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh 373 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.29;warnings::unimport 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@260;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@8 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@38;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@6 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::DESTROY 95 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@35;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export 240 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@10;Test2::Util::HashBase::import;mro::get_linear_isa 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetXMLDeclHandler 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@3 93 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.62;warnings::unimport;warnings::_expand_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDoctypeHandler 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.4;warnings::unimport;warnings::_expand_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.34;warnings::unimport 62 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@9;constant::import;CORE::match 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@7;constant::import 161 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@213 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::API::Context::release 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@41;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@20 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import 95 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Parser::Expat::namespace 4014 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@185;constant::import;CORE::subst 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@188 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 119 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@213;constant::import 104 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@199;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@6232 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@213;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Exporter::import 186 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@133;warnings::import;CORE::match 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@15;Exporter::import 178 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_ipc;Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60];Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@15 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_do_not_escape_amp_in_atts 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383;POSIX::import;Exporter::import 5267 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;IO::Seekable::seek 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@43;constant::import 134 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@102;warnings::unimport;warnings::_expand_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@70;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1491;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@60;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@242 1813 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@28;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1;warnings::unimport 202 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@8 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@167 46 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::regcomp 416 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.51;warnings::unimport 60 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;FileHandle::BEGIN@4;strict::import 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@273;constant::import 105 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@115;constant::import;CORE::match 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter;XML::Twig::Elt::set_output_text_filter;UNIVERSAL::isa 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@9 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@191;constant::import 112 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2602;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@273 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@210;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@31;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@154;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@191 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Parser::Expat::NamespaceStart 456 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.53;warnings::unimport;warnings::_expand_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@4;vars::import 141 Test::Builder::INIT;Test2::API::test2_load 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@38 27 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.24;warnings::unimport;warnings::_expand_bits 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@273;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@191;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@11;Exporter::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@137 73 main::BEGIN@5;Test::Builder::Module::import;Test2::API::test2_in_preload;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167 1669 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::FileMember::endRead 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@27;File::Path::__ANON__ 4 main::BEGIN@5;Test::More::BEGIN@1408;warnings::unimport 93 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@6;vars::import;CORE::match 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_add_handler 327 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@19;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@189 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37;constant::import;CORE::match 11 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Stack::root 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@231 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@204;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@240;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@42 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;XSLoader::load 1041 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@24;warnings::unimport;warnings::_expand_bits 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@49;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86;Test2::Util::Trace::BEGIN@4;warnings::import;warnings::_bits 46 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_special_handler 72 Spreadsheet::ParseXLSX::parse;Archive::Zip::new 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@7;Exporter::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_findEndOfCentralDirectory;IO::Seekable::seek;CORE::seek 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;CORE::qr 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@25 43 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;IO::Seekable::seek 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::readIsDone;Archive::Zip::Member::_dataEnded 23 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@8;Test2::Util::HashBase::import;mro::get_linear_isa 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::isEncrypted 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;Cwd::BEGIN@3;Exporter::import 127 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;MIME::Base64::BEGIN@4;warnings::import 70 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_exit;Test2::API::Instance::add_exit_callback 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@204 25 main::BEGIN@5;Test::Builder::Module::import;Test2::API::test2_load 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::AUTOLOAD;Compress::Raw::Zlib::constant 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@221;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@144;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@151;Exporter::import 129 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@204;constant::import 101 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@279;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile 190 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@16;Test2::Util::HashBase::import;mro::get_linear_isa 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::dataOffset 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@145;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@3;strict::import 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@10 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@310;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@292;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@3;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@1471;warnings::unimport;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::regcomp 3371 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@574 204 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::parser 1382 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset 469 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@7 79 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetExternalEntityRefHandler 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@235;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond 10413 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4175 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@246;constant::import;CORE::match 8 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156];Test::Builder::_ending;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@157;constant::import;mro::method_changed_in 3 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::event_tap;Test::Builder::Formatter::plan_tap;Test2::Formatter::TAP::plan_tap 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.44;warnings::unimport 70 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@2;strict::import 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@36;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_encoding;XML::Twig::Elt::set_keep_encoding 53 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@225;strict::unimport 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@11 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@34;constant::import;CORE::match 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@71;Test2::Util::_can_thread;Config::FETCH 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.48;warnings::unimport 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@8 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::utf8::BEGIN@215 39 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test;Test::Builder::ctx;Test2::API::context 185 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@310 24 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Event::Plan::facet_data;Test2::Event::common_facet_data;Test2::Event::meta_facet_data 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;UNIVERSAL::isa 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@145;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@310;constant::import 99 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@269;constant::import 114 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1494 30 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@4;strict::unimport 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@269 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@278;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetNotationDeclHandler 22 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_pi_handler 213 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::next_sibling;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@237;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@9;Exporter::import;CORE::match 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@67;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18 1369 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.71;warnings::unimport 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;Archive::Zip::FileMember::fh;IO::Handle::opened 21 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@191;warnings::register::import;warnings::register_categories;warnings::_mkMask 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::import;mro::get_linear_isa 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@32;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.47 62 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::FileMember::fh 121 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@2 100 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init;XML::Twig::_set_fh_to_twig_output_fh 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@262;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix 12243 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::readIsDone;Archive::Zip::Member::_readDataRemaining 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17;Test2::Formatter::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@9;Test2::Util::HashBase::import 352 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@247;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::FileMember::endRead 65 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@2 107 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@24;Internals::SvREADONLY 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@3 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@269;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@197;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@9;warnings::import;warnings::_bits;warnings::_expand_bits 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetProcessingInstructionHandler 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@15;overload::import;overload::OVERLOAD 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@20;warnings::import 67 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;UNIVERSAL::isa 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@283 25 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::BEGIN@7;warnings::register::import;warnings::register_categories 76 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children 5001326 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@283;constant::import 116 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@8 48 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@18;warnings::unimport 71 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import;base::has_fields 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12 30012 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@229;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@16 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::ContentModel::BEGIN@512 95 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];utf8::encode 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_exit;Test2::API::Instance::add_exit_callback;Scalar::Util::reftype 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;MIME::Base64::BEGIN@3;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@39 31 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@26;Test2::Util::HashBase::import;UNIVERSAL::can 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::BEGIN@4 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;Cwd::BEGIN@41 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@7 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@2 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@3;strict::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::_daygm;CORE::pack 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@128;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers 85 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8 947 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut 2868171 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@283;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::Builder::Module::import;Test2::API::test2_in_preload 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@2;strict::import 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_xmldecl 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;UNIVERSAL::import 11 Test::More::ok;Test::Builder::Module::builder;Test::Builder::new 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@8 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@8;Test2::Util::HashBase::import;mro::get_linear_isa 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::_add_uuid_via_ref 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@1;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::launcher 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Exporter::Heavy::heavy_export_tags;Exporter::Heavy::_push_tags 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@300;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@32;constant::import 105 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@167;strict::import 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@6 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut 2582795 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@203;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::BEGIN@3 115 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@36 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@275 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@3;warnings::import;warnings::_bits 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_do_not_escape_amp_in_atts 81 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@157;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@62 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@311;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@189;constant::import;CORE::match 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter;XML::Twig::Elt::set_output_text_filter 19 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11 2829 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@2 153 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@2 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@12;Exporter::import;CORE::match 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;CORE::match 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Parser::Expat::NamespaceStart 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@41;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@3 31 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 3487435 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@49 51 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@10;warnings::import;CORE::match 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final 68 main::BEGIN@5;Test::More::BEGIN@1494;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@5 57 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@2;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@5 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@11;Exporter::import 129 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;CORE::subst 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@4 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@8 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@251;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@4 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@114;constant::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@66;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants 1678 File::Temp::END;File::Temp::cleanup 147 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@308 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Exporter::import 374 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@5;constant::import;mro::method_changed_in 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::current_ns_prefixes 2206207 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@123 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@308;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@45;constant::import 107 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1557;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@68;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@10;warnings::import;CORE::match 3 main::BEGIN@5;Test::Builder::Module::import;Test::Builder::plan 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.41;warnings::unimport 59 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] 588 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@308;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@7 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath 250 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns 115320 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants 609 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@132 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3619 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@215;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@2 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@231;constant::import;CORE::regcomp 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@18 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@3 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@2 97 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test;Test2::API::release 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@20;warnings::import;warnings::_bits 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17;Test2::Formatter::BEGIN@2 91 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::set_root 43 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Instance::pid 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@13 35 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@7;constant::import;CORE::regcomp 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@4;vars::import 142 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@21;Exporter::import 140 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader 981 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@309;constant::import 153 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Util::HashBase::_new;Test2::Event::Plan::init;CORE::match 130 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@31 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString 16330 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@30;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;Exporter::import;CORE::subst 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@71;Test2::Util::_can_thread 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@309 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader 563 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@128;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2603;overload::import;overload::OVERLOAD 115 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@4 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile 282 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@3 220 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@103;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@11;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@282;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@268;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@309;constant::import;CORE::regcomp 4 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::ctx;Test2::API::context;Test2::Util::gen_uid 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.33;warnings::unimport 61 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::new 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::twig 152 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import;Exporter::export 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4246 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@239;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::API::test2_in_preload;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@64;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@9;Exporter::import;CORE::match 9 main::BEGIN@5;Test::Builder::Module::import;Test::Builder::Module::builder 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts 128 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::descendants;XML::Twig::Elt::next_elt;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1];XML::Twig::Elt::gi 275 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers 56 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.33 57 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml 262 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;Spreadsheet::ParseXLSX::BEGIN@2;warnings::import 63 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@313;constant::import;CORE::subst 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Parser::setHandlers 197 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::__ANON__ 6 Spreadsheet::ParseXLSX::parse;Archive::Zip::new;Archive::Zip::Archive::new 122 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4181 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_in_preload;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@220;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@285;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@90 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::utf8::BEGIN@229 88 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@24;Test2::EventFacet::Hub::BEGIN@3;warnings::import 76 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook 6710 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartCdataHandler 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;XSLoader::load 3410 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@20;warnings::unimport;warnings::_expand_bits 46 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Instance::tid 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@14 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.14 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@222;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@75 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@8;Exporter::import;CORE::match 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Parser::setHandlers 1027 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::match 232 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::_add_ts_hooks 80 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@211;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::subst 176 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@14;constant::import;mro::method_changed_in 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@20;warnings::import;warnings::_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@37;Exporter::export_ok_tags;Exporter::as_heavy 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@189 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;Exporter::Heavy::BEGIN@4 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@227;constant::import;CORE::subst 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Scalar::Util::BEGIN@10;warnings::import 68 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@189;constant::import 112 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartCdataHandler 85261 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export 263 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@3;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@28;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut;Scalar::Util::weaken 184911 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1540;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190 28912 Test::More::done_testing;Test::Builder::done_testing;Test2::EventFacet::Trace::call 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@34 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];Spreadsheet::ParseXLSX::_xml_boolean 133389 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Parser::new 146 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::Handle::read 43 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Hub::plan 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.27 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::import 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@7 72 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];XML::Twig::purge 982 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::recognized_string;XML::Parser::Expat::RecognizedString 1932442 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.16;warnings::unimport;warnings::_expand_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::expand_ns_prefix 1801653 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@145 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@189;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8;Test2::Hub::Interceptor::Terminator::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@3;strict::import 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@3;warnings::import 73 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@48;constant::import 123 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@9;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@215;constant::import 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@219;constant::import 166 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@127;constant::import 122 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@68;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@215 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@231;constant::import;CORE::match 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import;UNIVERSAL::isa 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@251;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::import 207 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::Format::BEGIN@19 86 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@111 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.59 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@72;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@693;warnings::import;CORE::match 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@251 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@59;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@9;constant::import 173 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@251;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@146;Exporter::import 215 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@23;vars::import;CORE::match 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::__ANON__ 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::subst 688 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@68;constant::import 100 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;XML::Twig::_insert_pcdata;Scalar::Util::weaken 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@114;constant::import;CORE::regcomp 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;CORE::ftdir 122 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@308;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@9;Exporter::import 148 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@130;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@68 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@215;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@38;vars::import;CORE::match 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndElementHandler 94725 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@289;constant::import;CORE::subst 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1167;warnings::unimport;warnings::_expand_bits 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;CORE::open 243 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::Handle::new 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@121 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@185;constant::import;mro::method_changed_in 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1489;constant::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@11 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;FileHandle::BEGIN@4 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell;XML::Twig::Elt::children 469 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1493;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_findEndOfCentralDirectory;IO::Seekable::tell 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Parser::Expat::new_ns_prefixes 1984477 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@199;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@75;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@46;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@305;constant::import;Internals::SvREADONLY 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2602 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@148 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@34;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@48;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@617;strict::unimport 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test2::API::Context::DESTROY 93 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler 1890 Test::More::ok;Test::Builder::ok;Test2::API::Context::DESTROY 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@70;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;Exporter::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@4;warnings::import;warnings::_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@60;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];XML::Twig::Elt::att 124409 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@7;constant::import;CORE::match 17 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::event_tap;Test::Builder::Formatter::plan_tap 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4 30 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17;Test2::Formatter::BEGIN@3;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.51;warnings::unimport;warnings::_expand_bits 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@309;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@4;vars::import;CORE::match 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97;Test2::Event::Exception::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@19 129 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@3;warnings::import 79 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import;CORE::match 11 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;Exporter::Heavy::BEGIN@3;strict::import 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::seek;CORE::seek 111 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@9;Exporter::import 115 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1547 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@23;Exporter::import;CORE::match 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@17 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::onBOOT 137 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@210;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@3;strict::import 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@93;warnings::unimport;warnings::_expand_bits 48 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond 833 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root 21 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@2;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@222 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::__ANON__ 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@64;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:265] 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@239;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5 58866 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Parser::Expat::namespace 1527379 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@222;constant::import 108 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath 6035 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers 258 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_add_or_discard_stored_spaces 276 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@222;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@64 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@239 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Twig::parser 151594 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@23 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@64;constant::import 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::BEGIN@4;warnings::import 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@115;constant::import 189 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@239;constant::import 111 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler 444 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@126;constant::import;Internals::SvREADONLY 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_handler 9080396 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;CORE::fteexec 84 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@62 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@3;warnings::import;CORE::match 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@114 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@169;warnings::unimport 77 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@130;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new 15094 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@93;Test2::Event::Diag::BEGIN@3;warnings::import;warnings::_bits 48 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;IO::Seekable::seek;CORE::seek 27 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle 1149 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::subst 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@830;Exporter::import 577 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::regcomp 19193 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@252;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new;CORE::match 88 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@45;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@133;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@5096;Exporter::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@2;strict::import 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_regexp_handler;CORE::match 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::Hub::format 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@204;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@843;constant::import 553 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_remove_cdata;XML::Twig::Elt::set_remove_cdata 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37;constant::import;CORE::regcomp 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts 194 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@27;vars::import 195 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@3 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::parser 117 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@190;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::BEGIN@3 78 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10;base::import 305 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@80;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level 68 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37;constant::import 125 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.37;warnings::unimport 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26;Crypt::RC4::BEGIN@16 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::match 232 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@11 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@832 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1488;constant::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@78;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@29 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@5082 74 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::_twig_end;XML::Parser::Expat::depth 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_special_handler;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.25;warnings::unimport 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@145;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@5 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@61;constant::import;CORE::subst 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@246 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::base::BEGIN@4 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::DESTROY 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.45;warnings::unimport;warnings::_expand_bits 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@302;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@246;constant::import 103 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@310;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@113;warnings::unimport;warnings::_expand_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;XSLoader::load 1259 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@34;constant::import;CORE::regcomp 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@261;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::set_atts;XML::Twig::Elt::keep_atts_order 1112260 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@688 999 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Twig::_ns_info 6479774 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Util::HashBase::_new 102 Test::Builder::INIT;Test2::API::test2_load;Test2::API::Instance::load 21 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters 122 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::set_root;Scalar::Util::weaken 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16 1236 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut 132 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@32;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@188;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@49;constant::import 99 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.6 75 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@274;Exporter::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::Member::_inflater 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@246;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@9;strict::import 19 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::is_passing;CORE::match 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@76;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26;Crypt::RC4::BEGIN@16;vars::import;CORE::match 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@61 75 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];Spreadsheet::ParseXLSX::_dimensions;Spreadsheet::ParseXLSX::_cell_to_row_col;CORE::match 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@247;constant::import 118 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.8;warnings::unimport 73 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@262 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::File::BEGIN@713 55 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94 1999 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import;Exporter::export;Exporter::as_heavy 41 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Member::_newFromZipFile;Archive::Zip::ZipFileMember::_newFromZipFile 374 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@126;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@262;constant::import 97 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@247 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@3;strict::import 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@7;vars::import 218 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::Util::clone_io 266 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@36;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Util::clone_io;CORE::select 23 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@20;Test2::API::test2_load_done;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@24 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@269;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1485;strict::import 13 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead;Compress::Raw::Zlib::inflateStream::DESTROY 211 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@262;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@6;Exporter::import 91 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;CORE::match 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.64;warnings::unimport 66 main::BEGIN@4;warnings::import;warnings::_bits 68 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@5;warnings::register::import;warnings::register_categories 68 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@167;strict::unimport 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@247;constant::import;CORE::regcomp 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEntityDeclHandler 108399 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1518 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::Config::BEGIN@8;warnings::import;warnings::_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@93;warnings::unimport 88 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::BEGIN@4;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@256;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files 898 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@11 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@35;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@9;strict::import 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@15;MIME::Base64::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Exporter::import;CORE::subst 32 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::open;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartElementHandler 85294 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@73;Carp::_fetch_sub 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::Format::BEGIN@20 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 3694 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@48;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@8906 63 main::BEGIN@5;Test::More::BEGIN@1783;warnings::unimport 89 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@22;Exporter::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy;Exporter::Heavy::BEGIN@202;warnings::unimport;warnings::_expand_bits 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@283;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@212;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36 3427 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@3 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3 108 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_handler;XML::Twig::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] 225 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk 233 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::expected_tests;Test2::API::Context::DESTROY 4 main::BEGIN@5;Test::More::BEGIN@1494 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@9;Exporter::import 190 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Parser::Expat::NamespaceStart 165 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@751;strict::unimport 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@797 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@65 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;IO::Handle::read;CORE::read 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;CORE::qr 144 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.67 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@7 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@40;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Scalar::Util::openhandle 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@311;constant::import;CORE::subst 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@2;strict::import 23 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@7;Test2::Event::Pass::__ANON__ 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.18;warnings::unimport;warnings::_expand_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@272;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@230;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@18;warnings::unimport;warnings::_expand_bits 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@18;warnings::import;warnings::_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@3 102 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.12;warnings::unimport 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@41;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@300;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@62;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33 2084 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Parser::Expat::namespace 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@230 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::MIME::Name::BEGIN@3 31 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;Archive::Zip::FileMember::fh;IO::Handle::opened 58 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@10;Test2::Util::HashBase::import;UNIVERSAL::can 11 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::FileMember::externalFileName 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@230;constant::import 112 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort 522 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond 698 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@9;Test2::Util::HashBase::import;mro::get_linear_isa 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@28 68 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@2 96 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@3;warnings::import 69 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open 126 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@8;Test2::Util::HashBase::import;UNIVERSAL::can 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@11 185 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@2;strict::import 17 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@3;warnings::import 78 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Exporter::export_tags;Exporter::as_heavy 81 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@25 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@206;constant::import;CORE::match 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;UNIVERSAL::isa 94 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@36;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::current_ns_prefixes 249 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@127;constant::import;CORE::regcomp 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@219;constant::import;CORE::regcomp 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_readDataRemaining 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@83;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@169;Exporter::import;CORE::match 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetProcessingInstructionHandler 85667 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;Archive::Zip::Member::fileName 109 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@208;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 23 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature;IO::Handle::read 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::Elt::new;CORE::match 180729 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_do_not_escape_amp_in_atts;XML::Twig::Elt::set_do_not_escape_amp_in_atts 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::import;CORE::regcomp 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@297;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@100;Test2::Event::Subtest::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@10 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@198;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@843 69 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@829 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::regcomp 270 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1493;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7 7918 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@5;warnings::import;warnings::_bits;warnings::_expand_bits 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@192;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@272;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@114;constant::import 144 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@36 23 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@98;Test2::Event::Waiting::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::Util::gen_uid 37 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 13623 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@6 35 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::Elt::new 1835452 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@16 42 Test2::API::END;Test2::API::Instance::set_exit;Test2::Hub::is_passing 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@36;constant::import 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import 115 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test2::Event::add_hub 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns 1947 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;UNIVERSAL::isa 34 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Formatter::finalize 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@2 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1489;constant::import 112 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@3;warnings::import;warnings::_bits 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@156;strict::unimport 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::expand_ns_prefix 325 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@260;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@8;Exporter::import 169 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCharacterDataHandler 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@14;constant::import;CORE::regcomp 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@2455;bytes::import 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@30;UNIVERSAL::import 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::Member::_inflater 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@10;Test2::Util::HashBase::import 374 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::import;Test2::Util::HashBase::_new;Test2::API::Instance::init 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell;XML::Twig::Elt::text 676 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@260 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;Cwd::BEGIN@644;strict::unimport 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Exporter::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;CORE::match 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::Entity_list::new 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@3 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::DESTROY;UNIVERSAL::isa 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@176;Exporter::import 38 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];XML::Twig::purge;XML::Twig::Elt::delete;XML::Twig::Elt::cut 1566 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@260;constant::import 150 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@3 36 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@2 116 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@206 63 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@8;Test2::Hub::Interceptor::Terminator::BEGIN@2;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@50;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@213;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::AUTOLOAD;CORE::subst 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@19 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@282;constant::import;CORE::subst 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::in;UNIVERSAL::isa 67 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns 5056620 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@9 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13 5413 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@3;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::expand_ns_prefix 6302 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3842 293 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@313;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@13;strict::import 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@10;Exporter::import 207 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@3;warnings::import;warnings::_bits 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::Elt::att 80 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@205;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@4;vars::import;CORE::match 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;File::Find::BEGIN@4;warnings::import 71 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@171 49 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@3;warnings::import 76 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test;Test2::API::release;Test2::API::Context::release 28 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17;Test2::Formatter::BEGIN@2;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@6;vars::import 129 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@169;Carp::BEGIN@1;overloading::unimport 57 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Exporter::BEGIN@3 106 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::Elt::new;XML::Twig::Elt::set_gi 2103 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] 55197349 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@20 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData 1045 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.68;warnings::unimport;warnings::_expand_bits 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@32;Spreadsheet::ParseExcel::Worksheet::BEGIN@20 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@115;constant::import;CORE::regcomp 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::FileMember::endRead 337 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@275;constant::import;Internals::SvREADONLY 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@7 67 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@10;Test2::Util::HashBase::import;UNIVERSAL::can 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];CORE::subst 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@191;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetExternalEntityRefHandler 97948 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@273;constant::import;CORE::match 8 File::Temp::END 112 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@131;warnings::unimport 65 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_xmldecl 174 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@63;warnings::unimport 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@228 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@145 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@35;constant::import 101 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313] 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@228;constant::import 100 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76];CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@286;constant::import 170 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@843;constant::import;CORE::regcomp 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@8;Test2::Util::HashBase::import 434 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@286 23 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse 94 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@240;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::FileMember::BEGIN@11;Exporter::import 99 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::_inflateInit 303 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_pi_handler;CORE::regcomp 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113 8500 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::fetch_string 89 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@11;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@9 91 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Compress::Raw::Zlib::AUTOLOAD;Compress::Raw::Zlib::constant 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetAttListDeclHandler 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@286;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end 17676 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@221;constant::import;CORE::subst 10 main::BEGIN@3;strict::import 184 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::set_root;Scalar::Util::weaken 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@3 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@228;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@10 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@3;warnings::import;warnings::_bits 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@219 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@127 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@176;UNIVERSAL::VERSION 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.27;warnings::unimport 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@2705;warnings::unimport 83 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@145;constant::import 237 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@26;Test2::Util::HashBase::import;mro::get_linear_isa 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import;Exporter::export 22 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.36;warnings::unimport;warnings::_expand_bits 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;XSLoader::load 1705 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@25;constant::import;Internals::SvREADONLY 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@235;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_formatter 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8 18877 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@76;warnings::unimport 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@279;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@35;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_text_filter 59 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature 141 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@34;constant::import 159 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetElementDeclHandler 110048 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@15;Test2::Util::HashBase::import;UNIVERSAL::can 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@2 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::subst 533 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@40 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@292;constant::import;CORE::subst 12 Test2::API::END;Test2::API::test2_set_is_end;Test2::Util::HashBase::_new 114 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@156 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 32552 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::BEGIN@3 139 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetProcessingInstructionHandler 3 Test::More::done_testing;Test::Builder::done_testing;Test2::Util::ExternalMeta::meta 55 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.43 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@158;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@294;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@276;IO::BEGIN@8 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;UNIVERSAL::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7 9465 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_tag_cond;CORE::match 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::current_ns_prefixes 8945 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_regexp_handler;CORE::match 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import;Exporter::Heavy::heavy_export;CORE::subst 124 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEntityDeclHandler 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@237;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@291 26 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet 1979105 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new 598 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@67;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching;CORE::match 222 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Util::HashBase::_new;Test2::Hub::init;Test2::Util::gen_uid 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.58 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@291;constant::import 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::root 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@22 50 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@15 59 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@45;constant::import;CORE::subst 9 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle 68 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@9 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants 225 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@115 48 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@102;Exporter::import;CORE::match 12 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::ZipFileMember::isDirectory 128 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@278;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@113;overloading::unimport 45 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix 813 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@11;Test2::Util::HashBase::import;UNIVERSAL::can 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@61;strict::unimport 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@8 28 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::root 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@6;Exporter::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@197;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Parser::Expat::expand_ns_prefix 77 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1492;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Parser::Expat::namespace 371 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_findEndOfCentralDirectory 158 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@20;warnings::import;warnings::_bits;warnings::_expand_bits 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@35;Spreadsheet::ParseExcel::Cell::BEGIN@169;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@291;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_keep_atts_order 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.62 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@3;warnings::import 76 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@9;warnings::import 71 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::DESTROY;XML::Twig::Elt::delete;XML::Twig::Elt::cut 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@307;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_binmode;IO::Handle::binmode 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@3;warnings::import;warnings::_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1487;constant::import;CORE::subst 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@295;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::desiredCompressionMethod 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@229;constant::import 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@245 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_do_not_escape_amp_in_atts 11 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Event::eid 15 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write 158 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@156;constant::import;CORE::subst 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndElementHandler 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@245;constant::import 98 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@229 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6;XSLoader::load 1149 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@65;strict::unimport 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@28;Exporter::import 581 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@2;strict::import 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@8 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;CORE::subst 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@12 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;CORE::match 27 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;Archive::Zip::FileMember::fh 208 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::next_sibling;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 433346 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Hub::plan;CORE::match 14 Test::More::done_testing;Test::Builder::done_testing;Test2::API::Context::DESTROY 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.55;warnings::unimport;warnings::_expand_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;UNIVERSAL::VERSION 68 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::new;IO::Handle::new;Symbol::gensym 28 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@3;warnings::import;warnings::_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::BEGIN@4;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@3;warnings::import 74 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@27;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@14;Test2::Util::ExternalMeta::BEGIN@8 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302];Spreadsheet::ParseXLSX::_cell_to_row_col 1145672 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@245;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;mro::BEGIN@10 101 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@229;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_binmode;IO::Handle::binmode;CORE::binmode 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@34;Spreadsheet::ParseExcel::__ANON__ 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@227;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::BEGIN@7 56 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@34;constant::import;Internals::SvREADONLY 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@211;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test2::API::release 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::utf8::BEGIN@215;parent::import;CORE::subst 22 Test2::API::END;Test2::API::Instance::set_exit 333 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_normalize_args 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@228;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.16 62 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;CORE::subst 547 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@300;constant::import;CORE::regcomp 4 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_expand_external_entities 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@5 68 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.30 54 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@54;Encode::__ANON__ 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@5;warnings::import;warnings::_bits;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::subst 103 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@230;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@31;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@31;Exporter::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@2 93 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@300 26 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::TIEHASH 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@2 90 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Util::HashBase::_new;Test2::Hub::init 91 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@300;constant::import 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@148;XML::Twig::BEGIN@1;Exporter::import;CORE::match 13 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@133;warnings::import;warnings::_bits;warnings::_expand_bits 28 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@11;Test2::Formatter::TAP::OUT_ERR 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@3648 55 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write 39 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@36;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;CORE::match 1794325 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@42;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::isEncrypted 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@236;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::BEGIN@4;strict::import 37 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8;Config::BEGIN@47;strict::unimport 40 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::regcomp 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@4 30 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@10;Test2::Util::HashBase::import 692 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@2628 72 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@143;warnings::register::import 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@11;Exporter::import 185 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@16;Exporter::import 108 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Config::BEGIN@6;warnings::import 78 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@3;warnings::import;CORE::match 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;XML::Twig::_insert_pcdata 116 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@229;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import 807 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char 743 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy 49 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::in 1761 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@59;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@15 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@289;constant::import;CORE::match 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.52;warnings::unimport 159 main::BEGIN@5;Test::More::BEGIN@4 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@308;constant::import;CORE::subst 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1518;strict::unimport 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@144;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25 1409 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@14 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167;parent::BEGIN@2;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@7;CORE::qr 19 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@23 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@20 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.56 58 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::DESTROY 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1489 28 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCommentHandler 113515 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;CORE::match 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@36;constant::import 109 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_add_or_discard_stored_spaces 2749 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@270;strict::unimport 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartElementHandler 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@2;strict::import 19 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@8;Exporter::import 179 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;UNIVERSAL::import 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Exporter::import 96 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@11;Exporter::import;CORE::match 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@260;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@147;constant::import 120 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.70;warnings::unimport 95 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@155;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;List::Util::BEGIN@9 108 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new 106 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@60;constant::import;CORE::match 9 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@3;warnings::import;CORE::match 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17;Test2::Formatter::BEGIN@3;warnings::import;warnings::_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetEndElementHandler 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@70;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@6;warnings::import 66 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@35;constant::import;CORE::regcomp 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@16;Test2::Util::HashBase::import;UNIVERSAL::can 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;UNIVERSAL::isa 98 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::FileMember::externalFileName 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@309;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@493;warnings::unimport;warnings::_expand_bits 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@146;constant::import;CORE::regcomp 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::expand_ns_prefix 230 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31 3827 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@37;Test::Builder::TodoDiag::BEGIN@3 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start 4677 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9 1546 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@3;warnings::import 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@210;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@797;warnings::unimport 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@313;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@3 80 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@17;Test2::Util::HashBase::import;mro::get_linear_isa 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@30 69 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@6 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;Exporter::import 206 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@2 104 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;Archive::Zip::_readSignature;CORE::unpack 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@34;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@38;constant::import;CORE::match 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@157;constant::import;CORE::subst 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1 52350 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@19 89 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;UNIVERSAL::isa 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@227 27 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::regcomp 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11;Exporter::import 98 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@3;warnings::import;warnings::_bits 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Parser::Expat::setHandlers 42 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_handler;XML::Twig::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] 1452879 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@313;constant::import 99 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@11;Exporter::import 298 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::BEGIN@3;strict::import 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@1057;warnings::unimport;warnings::_expand_bits 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@578;Archive::Zip::Member::__ANON__ 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@4;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@44 286 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@37;Exporter::export_ok_tags 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@189;warnings::unimport 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@31;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@313 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler 73 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Event::Plan::facet_data 99 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::att 2653225 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@298;constant::import;Internals::SvREADONLY 2 Test::More::ok;Test::Builder::ok;Test2::Hub::send;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:88] 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::ContentModel::BEGIN@512;overload::import;overload::OVERLOAD 102 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@10;Test2::Util::HashBase::import 544 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::ZipFileMember::BEGIN@11 88 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@229;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::init_aliases;CORE::qr 293 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@170;Exporter::import 67 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::Parameters::value 368 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;Config::BEGIN@5;strict::import 18 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath 315 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@460;strict::unimport 62 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11 135121 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@204;constant::import;CORE::subst 7 main::BEGIN@5;Test::Builder::Module::import;Test::More::import_extra;Test::Builder::exported_to 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@153;constant::import 112 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@128;constant::import;CORE::subst 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Parser::new 592 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@4;strict::import 14 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;Fcntl::BEGIN@58;strict::import 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.51 54 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read 101 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@286;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@3;strict::import 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@172;vars::import;CORE::match 32 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::BEGIN@4;strict::import 16 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@11 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@102;Exporter::import 210 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartElementHandler 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.14;warnings::unimport;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@39;constant::import 126 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@487 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@228;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@2455 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10 34 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::API::test2_formatter;Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60];Test2::API::Instance::_finalize 110 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetDefaultHandler 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@12;JSON::PP::Boolean::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 40 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383;POSIX::import;CORE::sort 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@113;constant::BEGIN@4;warnings::register::import 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14;builtin::BEGIN@4;warnings::import 65 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@257;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@3;warnings::import;warnings::_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@235;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;UNIVERSAL::VERSION 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::Context::BEGIN@72;warnings::unimport 86 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;Digest::SHA::BEGIN@10 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@61;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@3;warnings::import;warnings::_bits 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts 211 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@8;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;CORE::qr 25 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@2;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;UNIVERSAL::can 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@261;constant::import;CORE::match 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse 441 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::FileMember::endRead 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@310;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@11;Crypt::Mode::ECB::BEGIN@6;warnings::import;warnings::_bits 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1492;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@228 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@5;constant::import;CORE::match 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader 468 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetStartCdataHandler 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::new;IO::Handle::new;Symbol::gensym 61 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@38;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@8 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2603 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::BEGIN@4;strict::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@4;warnings::import 55 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load 331 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@11 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@9 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Exporter::Heavy::heavy_export_tags 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@235 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;Exporter::import;CORE::match 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_default;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@12;warnings::import;warnings::_bits;warnings::_expand_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@235;constant::import 99 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::Root::BEGIN@172 35 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_readSignature;CORE::unpack 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@11 1951 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@2 99 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching 487 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;IO::Handle::clearerr 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@7;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313];XML::Twig::purge;XML::Twig::Elt::in 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::substcont 53 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Fail::BEGIN@7 63 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Archive::Zip::Archive::memberNamed 166 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@20;warnings::import;warnings::_bits 44 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@227;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@197 26 main::BEGIN@7 34360 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::new 56 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338];XML::Twig::purge;XML::Twig::Elt::in;UNIVERSAL::isa 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@8;Test2::Util::HashBase::import;UNIVERSAL::can 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@197;constant::import 104 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@11;Exporter::import;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::parser 120619 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.36 78 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@48;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@3;warnings::import 82 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@269;constant::import;CORE::subst 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@197;constant::import;CORE::regcomp 5 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::subst 170 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@6;warnings::import 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12 5949 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@40 72 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@223;constant::import 124 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@5;strict::import 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_do_not_escape_amp_in_atts;XML::Twig::Elt::set_do_not_escape_amp_in_atts 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@209;constant::import;CORE::match 17 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@43;overload::import 51 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;mro::BEGIN@11;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@291;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Util::clone_io;CORE::open 256 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@9;Exporter::import;CORE::subst 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::StringMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export;CORE::match 10 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::new 33 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@18;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@6;warnings::unimport 96 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Seekable::seek 23 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@14;constant::import;CORE::match 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@256;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@131 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@33;mro::BEGIN@10;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@49 29 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test2::API::test2_add_callback_exit 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@146 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::fileparse_set_fstype 200 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@53;UNIVERSAL::can 20 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::export_to_level;Exporter::as_heavy 42 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@113;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@97 2298 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26;Crypt::RC4::BEGIN@15 93 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@155 141 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Scalar::Util::weaken 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::Font::BEGIN@20;warnings::import 67 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_skipLocalFileHeader;IO::Handle::read 71 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_handler;XML::Twig::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] 229 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@35 28 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Exporter::BEGIN@4 37 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;CORE::subst 1310 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::Module::__ANON__ 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@16;File::Copy::__ANON__ 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@212;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::set_root 25 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@39;constant::import;CORE::regcomp 6 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;Archive::Zip::_readSignature;IO::Handle::read;CORE::read 14 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.74;warnings::unimport;warnings::_expand_bits 44 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@8 64 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@3 118 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.62;warnings::unimport 67 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@33;constant::import;Internals::SvREADONLY 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@283;constant::import;CORE::subst 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@14 777 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@12;XSLoader::load 1481 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Twig::_replace_prefix;XML::Twig::parser 1046 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@229;constant::import;mro::method_changed_in 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@81;warnings::unimport;warnings::_expand_bits 50 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::Archive::_readEndOfCentralDirectory;IO::Handle::read 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@144;constant::import;Internals::SvREADONLY 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@41;URI::Escape::BEGIN@3 86 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::Dir::BEGIN@2601;Exporter::import 164 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@12 34 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.49;warnings::unimport;warnings::_expand_bits 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@245;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1487;constant::import;mro::method_changed_in 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@21;Exporter::import;Exporter::export;Exporter::as_heavy;CORE::subst 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4636;utf8::unimport 18 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::new;Test::Builder::create;Test2::API::test2_stack;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::UTF_EBCDIC::BEGIN@178;parent::import;Encode::Encoding::BEGIN@5;warnings::import 71 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@311;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@5;warnings::import 82 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers 15109720 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@253;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test2::Util::ExternalMeta::meta 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@228;constant::import 105 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17;Test2::Formatter::BEGIN@3;warnings::import 70 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@62;constant::import;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@61 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@28;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@154;constant::import;Internals::SvREADONLY 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_tag_cond;CORE::match 4 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test2::Event::add_hub 20 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::text;XML::Twig::Elt::text 1450934 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26;Exporter::import 162 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@71;warnings::unimport 83 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@36;Spreadsheet::ParseExcel::FmtDefault::BEGIN@22;Spreadsheet::ParseExcel::Utility::BEGIN@19;strict::import 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@22;Test2::EventFacet::Plan::BEGIN@2 157 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89 4292 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@77;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::XS::BEGIN@210;parent::import;CORE::subst 30 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::Font::BEGIN@20;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;Spreadsheet::ParseExcel::Format::new 444 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::ZipFileMember::_readRawChunk;Archive::Zip::FileMember::fh 24 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@62;warnings::unimport 72 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] 60 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.34 59 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@189;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler 429 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171 169 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Twig::_a_proper_ns_prefix;XML::Parser::Expat::expand_ns_prefix 11329682 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::BEGIN@3;warnings::import 65 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@72 50 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@122;Symbol::BEGIN@4;warnings::import;warnings::_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@121;Exporter::import;CORE::match 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@68;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@31;Spreadsheet::ParseExcel::Workbook::BEGIN@189;warnings::unimport;warnings::_expand_bits 45 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@7;Test2::Util::HashBase::import 346 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_init;Scalar::Util::weaken 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@206;constant::import;CORE::subst 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167;parent::BEGIN@2 84 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@12;Graphics::ColorUtils::BEGIN@492 2347 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@16;Test2::EventFacet::Assert::BEGIN@8 35 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@831;Exporter::import;CORE::match 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@6 21286 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];Spreadsheet::ParseExcel::FmtDefault::ValFmt;Spreadsheet::ParseExcel::FmtDefault::TextFmt 1280460 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Util::HashBase::_new;UNIVERSAL::can 8 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;CORE::subst 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@251;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@4 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@15;Exporter::import;CORE::match 10 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@133 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes 235 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@4;warnings::import;warnings::_bits;warnings::_expand_bits 39 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.65;warnings::unimport 66 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::uncompressedSize 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@198;constant::import;CORE::subst 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@7;File::Basename::BEGIN@52;warnings::import;CORE::match 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::_unique_elts;CORE::sort;XML::Twig::Elt::cmp;XML::Twig::Elt::ancestors;XML::Twig::Elt::passes 570 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@153 26 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@6;vars::import 139 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@215;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] 96 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@37 162 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;Exporter::import 175 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@9;CORE::match 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::_daygm 84 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21;Test2::EventFacet::Parent::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 64 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@10;Test2::Util::HashBase::import;UNIVERSAL::can 11 Test2::API::END;Test2::API::test2_set_is_end;Test2::API::Context::send_ev2;Test2::Hub::send;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:88] 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@199;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@133;warnings::import;warnings::_bits 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1494;constant::import;CORE::match 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Storable::BEGIN@42;Exporter::import;CORE::match 11 Spreadsheet::ParseXLSX::new 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@185;constant::import;CORE::regcomp 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@36;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@831;List::Util::import 64 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@13 47 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.20 58 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@123;SelectSaver::BEGIN@38;Exporter::import 192 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@152;Errno::BEGIN@8;Exporter::import 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@33;Spreadsheet::ParseExcel::Font::BEGIN@19;strict::import 16 main::BEGIN@4;warnings::import 121 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots 499 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4211;strict::unimport 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCharacterDataHandler 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@147;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@834 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.13;warnings::unimport;warnings::_expand_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@155;constant::import 110 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::BEGIN@2;strict::import 16 Test::More::done_testing;Test::Builder::done_testing;Test::Builder::current_test;Test2::API::Context::DESTROY 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@1125;File::Glob::BEGIN@50;warnings::unimport 92 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] 94 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@4 39 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@35;constant::import 122 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@282;constant::import;CORE::match 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@185;constant::import 171 main::BEGIN@5;Test::Builder::Module::import;Test::More::import_extra;Test::Builder::Module::builder 11 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@199 27 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@29 43 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@129;constant::import;Internals::SvREADONLY 2 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@95;Test2::Event::Plan::BEGIN@3;warnings::import 72 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@7;Test2::Formatter::TAP::BEGIN@17 1708 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.13 55 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@10;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;CORE::subst 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@199;constant::import 114 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@185 43 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@8;Exporter::import 110 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::subst 12 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@146;constant::import 132 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::BEGIN@13;vars::import 168 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::Backend::PP::BEGIN@342;strict::unimport 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@213;constant::import;CORE::subst 7 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156];Test::Builder::_ending 294 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Archive::Zip::Member::compressionMethod 21 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@10;File::Spec::Unix::BEGIN@124;constant::import;CORE::subst 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;Spreadsheet::ParseExcel::Font::new 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@151;XML::Parser::BEGIN@17;XML::Parser::Expat::BEGIN@3 84 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@2;strict::import 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::next_sibling 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@223 31 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@6 33 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end_check_roots;XML::Twig::_twig_end;XML::Twig::_handler 27 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;CORE::substcont 312 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@790 104 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@834;vars::import;CORE::match 34 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Exporter::export_tags 38 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@103;Exporter::import 194 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature;IO::Handle::read;CORE::read 234 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.72;warnings::unimport 56 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.26;warnings::unimport 55 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9 20353 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::_readSignature 344 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@239;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell;XML::Twig::Elt::gi 99 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;XSLoader::load 1663 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetExternalEntityRefHandler 103383 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@7919;utf8::unimport 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313];XML::Twig::purge;XML::Twig::Elt::delete 16 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@240 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::_use;URI::BEGIN@4;warnings::import;warnings::_bits 46 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@64;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell 1047 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@10;base::import;UNIVERSAL::isa 15 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::ZipFileMember::_seekToLocalHeader;Archive::Zip::_readSignature 81 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;IO::File::new;IO::File::open;CORE::match 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@33;Config::import 60 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@19;Test2::EventFacet::Info::BEGIN@2 94 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@9;Exporter::import 256 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@222;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@216;constant::import;Internals::SvREADONLY 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@191;constant::import;CORE::subst 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;UNIVERSAL::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@273;constant::import;CORE::subst 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@4;vars::import 142 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@5;warnings::import;warnings::_bits;warnings::_expand_bits 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@30;constant::import 110 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@171;Test2::Util::_check_for_sig_sys;Config::FETCH;Config::AUTOLOAD;CORE::match 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@78;constant::import 97 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@238;constant::import;Internals::SvREADONLY 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@252;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@21 2736 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Exporter::BEGIN@3;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@78 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::PPS::BEGIN@12;strict::import 13 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@240;constant::import;CORE::match 7 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char;CORE::match 20 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@3;warnings::import 73 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_char 109 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;UNIVERSAL::isa 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37;constant::import;mro::method_changed_in 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@153;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@37;CORE::symlink 27 Spreadsheet::ParseXLSX::parse;Archive::Zip::Archive::read;Archive::Zip::Archive::readFromFileHandle;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead 117 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::root 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@26;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@89;Test2::Hub::Interceptor::BEGIN@3;warnings::import 71 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;CORE::regcomp 405 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@221;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@147 102 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@4;strict::import 15 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@15;Scalar::Util::BEGIN@10;warnings::import;warnings::_bits 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];Spreadsheet::ParseXLSX::_dimensions;Spreadsheet::ParseXLSX::_cell_to_row_col 109 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@252 22 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@18;Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3 115 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@12;FileHandle::BEGIN@46 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@10;parent::import 79 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@8 24 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCommentHandler 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@22;warnings::unimport;warnings::_expand_bits 53 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@78;constant::import;CORE::regcomp 4 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@252;constant::import 100 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond 3319 Test2::API::END;Test2::API::Instance::set_exit;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156];Test::Builder::_ending;Test2::Hub::is_passing;CORE::match 16 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test 185 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::BEGIN@11 22 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.60 57 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@302;constant::import;CORE::regcomp 6 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Carp::Heavy::BEGIN@3 66 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::V2::BEGIN@12;Test2::Util::Facets2Legacy::BEGIN@8 31 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@17;Test2::EventFacet::Control::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@292;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@188 30 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Compress::Raw::Zlib::AUTOLOAD 75 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_check_signature;Scalar::Util::openhandle 10 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@29;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.59;warnings::unimport;warnings::_expand_bits 41 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@279;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@188;constant::import 127 Test2::API::END;Test2::API::test2_set_is_end;Test2::Util::HashBase::_new;UNIVERSAL::can 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@12;List::Util::import 43 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;CORE::subst 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@3;warnings::import;warnings::_bits 42 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@27;Digest::Perl::MD5::gen_code 13923 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@154;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::setHandlers;XML::Parser::Expat::SetCommentHandler 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_quote;XML::Twig::Elt::set_quote 76 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@188;constant::import;CORE::regcomp 6 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@15;Test2::EventFacet::Amnesty::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 41 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.65 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.37;warnings::unimport;warnings::_expand_bits 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::NewFileMember::BEGIN@11;Exporter::import;Exporter::Heavy::heavy_export 930 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;UNIVERSAL::isa 85 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@10;bytes::BEGIN@4;warnings::import 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246];XML::Twig::purge 106 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_join_n 265 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@5 83 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;Test2::Formatter::TAP::print_optimal_pass 12 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::_gi_test;XML::Twig::Elt::_and;XML::Twig::Elt::_join_defined 33 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@96;Test2::Event::Bail::BEGIN@3;warnings::import;warnings::_bits 45 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::DirectoryMember::BEGIN@13;Exporter::import;Exporter::export 18 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@46;constant::import;CORE::regcomp 4 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::reset_outputs;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@302 28 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::BEGIN@35;constant::import;CORE::regcomp 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::use_numbers;Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] 9 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@246;constant::import;mro::method_changed_in 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@20;Test2::EventFacet::Meta::BEGIN@8;vars::BEGIN@8 36 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@29;strict::unimport 40 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@730;strict::unimport 49 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@302;constant::import 120 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_themes;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;CORE::regcomp 19 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::Elt::children;XML::Twig::Elt::first_child;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.22;warnings::unimport 61 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@3;warnings::import;warnings::_bits 46 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@71 83 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@237;constant::import;CORE::match 7 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@216;constant::import;mro::method_changed_in 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@56;Encode::BEGIN@11 58 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::Member::rewindData;Compress::Raw::Zlib::Inflate::new;Compress::Raw::Zlib::ParseParameters;Compress::Raw::Zlib::Parameters::parse;Compress::Raw::Zlib::Parameters::_checkType 941 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@5;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::Heavy::heavy_export;CORE::subst 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@67;constant::import;CORE::match 8 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;Tie::Hash::BEGIN@190;Carp::BEGIN@296 52 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@9;Crypt::Cipher::BEGIN@9;CryptX::BEGIN@13;JSON::_load_pp;JSON::__load_pp;JSON::BEGIN@1;JSON::PP::IncrParser::BEGIN@1490;constant::import;CORE::regcomp 5 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@5;strict::import 17 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@167;parent::import;CORE::subst 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@227;constant::import 115 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@12;Encode::BEGIN@53;Encode::Alias::BEGIN@5;constant::import;CORE::subst 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@278;constant::import;CORE::match 7 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@86;Test2::Util::Trace::BEGIN@4 109 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::import;Test2::API::test2_load;Test2::API::Instance::load;Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148];Test::Builder::reset;Test::Builder::ctx;Test2::API::context;Test2::API::Stack::top;Test2::API::Stack::new_hub;Test2::Formatter::new_root;Test2::Util::HashBase::_new;Test::Builder::Formatter::init;Test2::Formatter::TAP::init;Test2::Formatter::TAP::_open_handles;Test2::Formatter::TAP::_autoflush 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@18;Spreadsheet::ParseXLSX::Cell::BEGIN@11;base::import;base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] 32 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;Errno::_tie_it;Errno::TIEHASH 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell;XML::Twig::Elt::children;XML::Twig::Elt::next_sibling 85 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@14;Test2::EventFacet::About::BEGIN@2 91 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@7;IO::File::BEGIN@124;IO::Seekable::BEGIN@100;IO::Handle::BEGIN@274;Exporter::import 159 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@168;overload::BEGIN@84;overloading::unimport 62 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@36;Test::Builder::Formatter::BEGIN@2 93 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process 156 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@14;Test2::API::Stack::BEGIN@8;Test2::Hub::BEGIN@3;warnings::import;CORE::match 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@19;File::Copy::BEGIN@1;Time::HiRes::import;Exporter::Heavy::heavy_export_to_level;Exporter::export;Exporter::as_heavy 24 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@223;constant::import;CORE::regcomp 8 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@247;constant::import;mro::method_changed_in 2 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::set_output_filter;XML::Twig::Elt::set_output_filter;UNIVERSAL::isa 6 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.50;warnings::unimport 64 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1 78 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@10;Crypt::Mode::CBC::BEGIN@6;warnings::import 63 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::Member::readChunk;Archive::Zip::Member::_inflateChunk;Archive::Zip::FileMember::endRead;Archive::Zip::Member::endRead 84 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@92;Test2::Event::Ok::BEGIN@8;Test2::Event::BEGIN@18;Test2::EventFacet::Error::BEGIN@3;warnings::import;warnings::_bits 47 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@262;constant::import;mro::method_changed_in 2 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@21;OLE::Storage_Lite::BEGIN@1383;POSIX::import 168 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@16;warnings::unimport;warnings::_expand_bits 47 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@7;POSIX::BEGIN@11;Exporter::import;CORE::match 55 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_special_handler 204 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@4649 53 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@3;warnings::import;warnings::_bits;warnings::_expand_bits 44 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655];XML::Twig::purge;XML::Twig::Elt::delete 358 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Archive::membersMatching 1547 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@129;constant::import;mro::method_changed_in 3 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::DESTROY 15 Test::More::done_testing;Test::Builder::done_testing;Test2::API::release;Test2::API::Context::release 51 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Archive::BEGIN@9;File::Copy::BEGIN@16 54 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_start_check_roots;XML::Twig::_replace_ns;XML::Twig::_ns_info;XML::Parser::Expat::namespace 1571290 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::BEGIN@25;utf8::BEGIN@4;warnings::import;warnings::_bits 41 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::send;Test2::Hub::process;Test2::Formatter::TAP::write;CORE::print 48 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@15;XML::Twig::Elt::BEGIN@8108;XML::Twig::Elt::set_destroy 12 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@17;Test2::Util::BEGIN@8 4386 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::Event::Pass::BEGIN@2 107 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_default 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;Spreadsheet::ParseXLSX::_zip_file_member;Archive::Zip::Member::contents;Archive::Zip::ZipFileMember::rewindData;Archive::Zip::FileMember::fh;Archive::Zip::FileMember::_openFile;Archive::Zip::_newFileHandle;IO::File::open;IO::Handle::_open_mode_string;CORE::match 52 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::new;XML::Parser::Expat::ParserCreate 32 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1];XML::Twig::descendants;XML::Twig::Elt::passes;XML::Twig::Elt::_install_cond;XML::Twig::Elt::BEGIN@1.9 53 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@8;Exporter::import 186 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@26 3487 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigRoots;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::BEGIN@1.58;warnings::unimport 62 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_shared_strings;Spreadsheet::ParseXLSX::_new_twig;XML::Twig::new;XML::Twig::setTwigHandlers;XML::Twig::_set_handlers;XML::Twig::_set_handler;XML::Twig::_set_xpath_handler;XML::Twig::_parse_xpath_handler;XML::Twig::_tag_cond 90 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Twig::_twig_final;XML::Twig::_set_fh_to_selected_fh 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@17;Spreadsheet::ParseXLSX::Decryptor::BEGIN@19;Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4 29 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_extract_files;Spreadsheet::ParseXLSX::_parse_xml;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Parser::Expat::NamespaceEnd 291 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@51;Test2::API::Instance::BEGIN@13;Test2::EventFacet::Trace::BEGIN@7;Test2::EventFacet::BEGIN@2;strict::import 15 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@14;Spreadsheet::ParseExcel::BEGIN@58;constant::import;Internals::SvREADONLY 5 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@88;Test2::Hub::Subtest::BEGIN@3;warnings::import;CORE::match 3 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@94;Test2::Event::Note::BEGIN@9;Test2::Util::HashBase::import;UNIVERSAL::can 14 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@11;File::Temp::BEGIN@149;File::Path::BEGIN@4 38 main::BEGIN@5;Test::More::BEGIN@22;Test::Builder::Module::BEGIN@5;Test::Builder::BEGIN@18;Test2::API::BEGIN@99;Test2::Event::Skip::BEGIN@9;Test2::Util::HashBase::import 395 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::BEGIN@9;Compress::Raw::Zlib::BEGIN@147 29 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@19;Exporter::import;Exporter::Heavy::heavy_export 2033 Test::More::done_testing;Test::Builder::done_testing;Test2::Hub::finalize;Test2::Hub::is_subtest 9 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_styles;XML::Twig::get_xpath;XML::Twig::Elt::get_xpath;XML::Twig::Elt::_install_xpath;XML::Twig::Elt::BEGIN@1.29;warnings::unimport;warnings::_expand_bits 36 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;Spreadsheet::ParseXLSX::_parse_sheet;XML::Twig::parse;XML::Parser::parse;XML::Parser::Expat::parse;XML::Parser::Expat::ParseString;XML::Twig::_twig_end;Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443];XML::Twig::Elt::first_child 15501916 main::BEGIN@7;Spreadsheet::ParseXLSX::BEGIN@11;Archive::Zip::Member::BEGIN@27;Time::Local::BEGIN@36 25 Spreadsheet::ParseXLSX::parse;Spreadsheet::ParseXLSX::_parse_workbook;XML::Twig::DESTROY;UNIVERSAL::isa 20 Spreadsheet-ParseXLSX-0.35/nytprof/Encode-pm-103-line.html0000644000175000017500000020004014576335353022061 0ustar michamicha Profile of Encode.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Encode.pm
StatementsExecuted 123 statements in 1.54ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.57ms1.87msEncode::::BEGIN@56 Encode::BEGIN@56
1111.20ms1.51msEncode::::BEGIN@53 Encode::BEGIN@53
111317µs350µsEncode::::BEGIN@54 Encode::BEGIN@54
72116µs16µsEncode::::define_encoding Encode::define_encoding
11114µs25µsEncode::::onBOOT Encode::onBOOT (xsub)
1119µs153µsEncode::::BEGIN@9 Encode::BEGIN@9
1119µs10µsEncode::utf8::::BEGIN@229 Encode::utf8::BEGIN@229
1119µs10µsEncode::::BEGIN@5 Encode::BEGIN@5
1117µs16µsEncode::::BEGIN@15 Encode::BEGIN@15
1116µs467µsEncode::UTF_EBCDIC::::BEGIN@178Encode::UTF_EBCDIC::BEGIN@178
1115µs18µsEncode::XS::::BEGIN@210 Encode::XS::BEGIN@210
1114µs17µsEncode::utf8::::BEGIN@215 Encode::utf8::BEGIN@215
1114µs25µsEncode::::BEGIN@7 Encode::BEGIN@7
1113µs19µsEncode::::BEGIN@6 Encode::BEGIN@6
1112µs2µsEncode::::BEGIN@17 Encode::BEGIN@17
111600ns600nsEncode::::__ANON__ Encode::__ANON__ (xsub)
0000s0sEncode::UTF_EBCDIC::::decodeEncode::UTF_EBCDIC::decode
0000s0sEncode::UTF_EBCDIC::::encodeEncode::UTF_EBCDIC::encode
0000s0sEncode::::clone_encoding Encode::clone_encoding
0000s0sEncode::::define_alias Encode::define_alias
0000s0sEncode::::encodings Encode::encodings
0000s0sEncode::::find_alias Encode::find_alias
0000s0sEncode::::find_encoding Encode::find_encoding
0000s0sEncode::::find_mime_encoding Encode::find_mime_encoding
0000s0sEncode::::getEncoding Encode::getEncoding
0000s0sEncode::::perlio_ok Encode::perlio_ok
0000s0sEncode::::resolve_alias Encode::resolve_alias
0000s0sEncode::utf8::::cat_decode Encode::utf8::cat_decode
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2# $Id: Encode.pm,v 3.21 2024/02/25 22:17:32 dankogai Exp $
3#
4package Encode;
5216µs212µs
# spent 10µs (9+2) within Encode::BEGIN@5 which was called: # once (9µs+2µs) by Archive::Zip::Archive::BEGIN@12 at line 5
use strict;
# spent 10µs making 1 call to Encode::BEGIN@5 # spent 2µs making 1 call to strict::import
6219µs235µs
# spent 19µs (3+16) within Encode::BEGIN@6 which was called: # once (3µs+16µs) by Archive::Zip::Archive::BEGIN@12 at line 6
use warnings;
# spent 19µs making 1 call to Encode::BEGIN@6 # spent 16µs making 1 call to warnings::import
7248µs246µs
# spent 25µs (4+21) within Encode::BEGIN@7 which was called: # once (4µs+21µs) by Archive::Zip::Archive::BEGIN@12 at line 7
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
# spent 25µs making 1 call to Encode::BEGIN@7 # spent 21µs making 1 call to constant::import
8our $VERSION;
9
# spent 153µs (9+144) within Encode::BEGIN@9 which was called: # once (9µs+144µs) by Archive::Zip::Archive::BEGIN@12 at line 13
BEGIN {
1017µs13µs $VERSION = sprintf "%d.%02d", q$Revision: 3.21 $ =~ /(\d+)/g;
# spent 3µs making 1 call to CORE::match
111200ns require XSLoader;
121146µs1141µs XSLoader::load( __PACKAGE__, $VERSION );
# spent 141µs making 1 call to XSLoader::load
13125µs1153µs}
# spent 153µs making 1 call to Encode::BEGIN@9
14
15321µs325µs
# spent 16µs (7+9) within Encode::BEGIN@15 which was called: # once (7µs+9µs) by Archive::Zip::Archive::BEGIN@12 at line 15
use Exporter 5.57 'import';
# spent 16µs making 1 call to Encode::BEGIN@15 # spent 5µs making 1 call to UNIVERSAL::VERSION # spent 4µs making 1 call to Exporter::import
16
17293µs12µs
# spent 2µs within Encode::BEGIN@17 which was called: # once (2µs+0s) by Archive::Zip::Archive::BEGIN@12 at line 17
use Carp ();
# spent 2µs making 1 call to Encode::BEGIN@17
181700nsour @CARP_NOT = qw(Encode::Encoder);
19
20# Public, encouraged API is exported by default
21
2211µsour @EXPORT = qw(
23 decode decode_utf8 encode encode_utf8 str2bytes bytes2str
24 encodings find_encoding find_mime_encoding clone_encoding
25);
261600nsour @FB_FLAGS = qw(
27 DIE_ON_ERR WARN_ON_ERR RETURN_ON_ERR LEAVE_SRC
28 PERLQQ HTMLCREF XMLCREF STOP_AT_PARTIAL
29);
301400nsour @FB_CONSTS = qw(
31 FB_DEFAULT FB_CROAK FB_QUIET FB_WARN
32 FB_PERLQQ FB_HTMLCREF FB_XMLCREF
33);
3411µsour @EXPORT_OK = (
35 qw(
36 _utf8_off _utf8_on define_encoding from_to is_16bit is_8bit
37 is_utf8 perlio_ok resolve_alias utf8_downgrade utf8_upgrade
38 ),
39 @FB_FLAGS, @FB_CONSTS,
40);
41
4214µsour %EXPORT_TAGS = (
43 all => [ @EXPORT, @EXPORT_OK ],
44 default => [ @EXPORT ],
45 fallbacks => [ @FB_CONSTS ],
46 fallback_all => [ @FB_CONSTS, @FB_FLAGS ],
47);
48
49# Documentation moved after __END__ for speed - NI-S
50
511300nsour $ON_EBCDIC = ( ord("A") == 193 );
52
53276µs11.51ms
# spent 1.51ms (1.20+314µs) within Encode::BEGIN@53 which was called: # once (1.20ms+314µs) by Archive::Zip::Archive::BEGIN@12 at line 53
use Encode::Alias ();
# spent 1.51ms making 1 call to Encode::BEGIN@53
54283µs2350µs
# spent 350µs (317+33) within Encode::BEGIN@54 which was called: # once (317µs+33µs) by Archive::Zip::Archive::BEGIN@12 at line 54
use Encode::MIME::Name;
# spent 350µs making 1 call to Encode::BEGIN@54 # spent 600ns making 1 call to Encode::__ANON__
55
562524µs21.89ms
# spent 1.87ms (1.57+302µs) within Encode::BEGIN@56 which was called: # once (1.57ms+302µs) by Archive::Zip::Archive::BEGIN@12 at line 56
use Storable;
# spent 1.87ms making 1 call to Encode::BEGIN@56 # spent 20µs making 1 call to Exporter::import
57
58# Make a %Encoding package variable to allow a certain amount of cheating
59our %Encoding;
60our %ExtModule;
61185µsrequire Encode::Config;
62# See
63# https://bugzilla.redhat.com/show_bug.cgi?id=435505#c2
64# to find why sig handlers inside eval{} are disabled.
651200nseval {
6611µs local $SIG{__DIE__};
671500ns local $SIG{__WARN__};
681900ns local @INC = @INC;
691500ns pop @INC if @INC && $INC[-1] eq '.';
70126µs require Encode::ConfigLocal;
71};
72
73sub encodings {
74 my %enc;
75 my $arg = $_[1] || '';
76 if ( $arg eq ":all" ) {
77 %enc = ( %Encoding, %ExtModule );
78 }
79 else {
80 %enc = %Encoding;
81 for my $mod ( map { m/::/ ? $_ : "Encode::$_" } @_ ) {
82 DEBUG and warn $mod;
83 for my $enc ( keys %ExtModule ) {
84 $ExtModule{$enc} eq $mod and $enc{$enc} = $mod;
85 }
86 }
87 }
88 return sort { lc $a cmp lc $b }
89 grep { !/^(?:Internal|Unicode|Guess)$/o } keys %enc;
90}
91
92sub perlio_ok {
93 my $obj = ref( $_[0] ) ? $_[0] : find_encoding( $_[0] );
94 $obj->can("perlio_ok") and return $obj->perlio_ok();
95 return 0; # safety net
96}
97
98
# spent 16µs within Encode::define_encoding which was called 7 times, avg 2µs/call: # 5 times (12µs+0s) by Encode::onBOOT at line 174, avg 2µs/call # 2 times (4µs+0s) by Archive::Zip::Archive::BEGIN@12 at line 222, avg 2µs/call
sub define_encoding {
997500ns my $obj = shift;
10071µs my $name = shift;
10172µs $Encoding{$name} = $obj;
10272µs my $lc = lc($name);
1037800ns define_alias( $lc => $obj ) unless $lc eq $name;
10471µs while (@_) {
105 my $alias = shift;
106 define_alias( $alias, $obj );
107 }
10871µs my $class = ref($obj);
10973µs push @Encode::CARP_NOT, $class unless grep { $_ eq $class } @Encode::CARP_NOT;
11072µs push @Encode::Encoding::CARP_NOT, $class unless grep { $_ eq $class } @Encode::Encoding::CARP_NOT;
11177µs return $obj;
112}
113
114sub getEncoding {
115 my ( $class, $name, $skip_external ) = @_;
116
117 defined($name) or return;
118
119 $name =~ s/\s+//g; # https://rt.cpan.org/Ticket/Display.html?id=65796
120
121 ref($name) && $name->can('renew') and return $name;
122 exists $Encoding{$name} and return $Encoding{$name};
123 my $lc = lc $name;
124 exists $Encoding{$lc} and return $Encoding{$lc};
125
126 my $oc = $class->find_alias($name);
127 defined($oc) and return $oc;
128 $lc ne $name and $oc = $class->find_alias($lc);
129 defined($oc) and return $oc;
130
131 unless ($skip_external) {
132 if ( my $mod = $ExtModule{$name} || $ExtModule{$lc} ) {
133 $mod =~ s,::,/,g;
134 $mod .= '.pm';
135 eval { require $mod; };
136 exists $Encoding{$name} and return $Encoding{$name};
137 }
138 }
139 return;
140}
141
142# HACK: These two functions must be defined in Encode and because of
143# cyclic dependency between Encode and Encode::Alias, Exporter does not work
144sub find_alias {
145 goto &Encode::Alias::find_alias;
146}
147sub define_alias {
148 goto &Encode::Alias::define_alias;
149}
150
151sub find_encoding($;$) {
152 my ( $name, $skip_external ) = @_;
153 return __PACKAGE__->getEncoding( $name, $skip_external );
154}
155
156sub find_mime_encoding($;$) {
157 my ( $mime_name, $skip_external ) = @_;
158 my $name = Encode::MIME::Name::get_encode_name( $mime_name );
159 return find_encoding( $name, $skip_external );
160}
161
162sub resolve_alias($) {
163 my $obj = find_encoding(shift);
164 defined $obj and return $obj->name;
165 return;
166}
167
168sub clone_encoding($) {
169 my $obj = find_encoding(shift);
170 ref $obj or return;
171 return Storable::dclone($obj);
172}
173
174113µs637µsonBOOT;
# spent 25µs making 1 call to Encode::onBOOT # spent 12µs making 5 calls to Encode::define_encoding, avg 2µs/call
175
1761200nsif ($ON_EBCDIC) {
177 package Encode::UTF_EBCDIC;
1782122µs2929µs
# spent 467µs (6+462) within Encode::UTF_EBCDIC::BEGIN@178 which was called: # once (6µs+462µs) by Archive::Zip::Archive::BEGIN@12 at line 178
use parent 'Encode::Encoding';
# spent 467µs making 1 call to Encode::UTF_EBCDIC::BEGIN@178 # spent 462µs making 1 call to parent::import
179 my $obj = bless { Name => "UTF_EBCDIC" } => "Encode::UTF_EBCDIC";
180 Encode::define_encoding($obj, 'Unicode');
181 sub decode {
182 my ( undef, $str, $chk ) = @_;
183 my $res = '';
184 for ( my $i = 0 ; $i < length($str) ; $i++ ) {
185 $res .=
186 chr(
187 utf8::unicode_to_native( ord( substr( $str, $i, 1 ) ) )
188 );
189 }
190 $_[1] = '' if $chk;
191 return $res;
192 }
193 sub encode {
194 my ( undef, $str, $chk ) = @_;
195 my $res = '';
196 for ( my $i = 0 ; $i < length($str) ; $i++ ) {
197 $res .=
198 chr(
199 utf8::native_to_unicode( ord( substr( $str, $i, 1 ) ) )
200 );
201 }
202 $_[1] = '' if $chk;
203 return $res;
204 }
205}
206
207{
208 # https://rt.cpan.org/Public/Bug/Display.html?id=103253
209 package Encode::XS;
210227µs231µs
# spent 18µs (5+13) within Encode::XS::BEGIN@210 which was called: # once (5µs+13µs) by Archive::Zip::Archive::BEGIN@12 at line 210
use parent 'Encode::Encoding';
# spent 18µs making 1 call to Encode::XS::BEGIN@210 # spent 13µs making 1 call to parent::import
211}
212
213{
2141300ns package Encode::utf8;
215285µs230µs
# spent 17µs (4+13) within Encode::utf8::BEGIN@215 which was called: # once (4µs+13µs) by Archive::Zip::Archive::BEGIN@12 at line 215
use parent 'Encode::Encoding';
# spent 17µs making 1 call to Encode::utf8::BEGIN@215 # spent 13µs making 1 call to parent::import
21612µs my %obj = (
217 'utf8' => { Name => 'utf8' },
218 'utf-8-strict' => { Name => 'utf-8-strict', strict_utf8 => 1 }
219 );
22011µs for ( keys %obj ) {
2212500ns bless $obj{$_} => __PACKAGE__;
22221µs24µs Encode::define_encoding( $obj{$_} => $_ );
# spent 4µs making 2 calls to Encode::define_encoding, avg 2µs/call
223 }
224 sub cat_decode {
225 # ($obj, $dst, $src, $pos, $trm, $chk)
226 # currently ignores $chk
227 my ( undef, undef, undef, $pos, $trm ) = @_;
228 my ( $rdst, $rsrc, $rpos ) = \@_[ 1, 2, 3 ];
229280µs212µs
# spent 10µs (9+1) within Encode::utf8::BEGIN@229 which was called: # once (9µs+1µs) by Archive::Zip::Archive::BEGIN@12 at line 229
use bytes;
# spent 10µs making 1 call to Encode::utf8::BEGIN@229 # spent 1µs making 1 call to bytes::import
230 if ( ( my $npos = index( $$rsrc, $trm, $pos ) ) >= 0 ) {
231 $$rdst .=
232 substr( $$rsrc, $pos, $npos - $pos + length($trm) );
233 $$rpos = $npos + length($trm);
234 return 1;
235 }
236 $$rdst .= substr( $$rsrc, $pos );
237 $$rpos = length($$rsrc);
238 return '';
239 }
240}
241
242210µs1;
243
244__END__
 
# spent 600ns within Encode::__ANON__ which was called: # once (600ns+0s) by Encode::BEGIN@54 at line 54
sub Encode::__ANON__; # xsub
# spent 25µs (14+12) within Encode::onBOOT which was called: # once (14µs+12µs) by Archive::Zip::Archive::BEGIN@12 at line 174
sub Encode::onBOOT; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/File-Copy-pm-100-line.html0000644000175000017500000021231114576335353022454 0ustar michamicha Profile of File/Copy.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Copy.pm
StatementsExecuted 30 statements in 1.16ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11178µs111µsFile::Copy::::BEGIN@14File::Copy::BEGIN@14
11121µs101µsFile::Copy::::BEGIN@19File::Copy::BEGIN@19
11111µs11µsFile::Copy::::BEGIN@10File::Copy::BEGIN@10
1115µs6µsFile::Copy::::BEGIN@16File::Copy::BEGIN@16
1114µs5µsFile::Copy::::BEGIN@11File::Copy::BEGIN@11
1113µs12µsFile::Copy::::BEGIN@12.1File::Copy::BEGIN@12.1
1113µs10µsFile::Copy::::BEGIN@15File::Copy::BEGIN@15
1113µs8µsFile::Copy::::BEGIN@17File::Copy::BEGIN@17
1113µs20µsFile::Copy::::BEGIN@12File::Copy::BEGIN@12
1113µs8µsFile::Copy::::BEGIN@13File::Copy::BEGIN@13
111300ns300nsFile::Copy::::__ANON__File::Copy::__ANON__ (xsub)
0000s0sFile::Copy::::__ANON__[:323]File::Copy::__ANON__[:323]
0000s0sFile::Copy::::_catnameFile::Copy::_catname
0000s0sFile::Copy::::_eqFile::Copy::_eq
0000s0sFile::Copy::::_moveFile::Copy::_move
0000s0sFile::Copy::::carpFile::Copy::carp
0000s0sFile::Copy::::copyFile::Copy::copy
0000s0sFile::Copy::::cpFile::Copy::cp
0000s0sFile::Copy::::croakFile::Copy::croak
0000s0sFile::Copy::::moveFile::Copy::move
0000s0sFile::Copy::::mvFile::Copy::mv
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# File/Copy.pm. Written in 1994 by Aaron Sherman <ajs@ajs.com>. This
2# source code has been placed in the public domain by the author.
3# Please be kind and preserve the documentation.
4#
5# Additions copyright 1996 by Charles Bailey. Permission is granted
6# to distribute the revised code under the same terms as Perl itself.
7
8package File::Copy;
9
10223µs111µs
# spent 11µs within File::Copy::BEGIN@10 which was called: # once (11µs+0s) by Archive::Zip::Archive::BEGIN@9 at line 10
use 5.035007;
# spent 11µs making 1 call to File::Copy::BEGIN@10
11214µs27µs
# spent 5µs (4+2) within File::Copy::BEGIN@11 which was called: # once (4µs+2µs) by Archive::Zip::Archive::BEGIN@9 at line 11
use strict;
# spent 5µs making 1 call to File::Copy::BEGIN@11 # spent 2µs making 1 call to strict::import
12427µs457µs
# spent 12µs (3+9) within File::Copy::BEGIN@12.1 which was called: # once (3µs+9µs) by Archive::Zip::Archive::BEGIN@9 at line 12 # spent 20µs (3+17) within File::Copy::BEGIN@12 which was called: # once (3µs+17µs) by Archive::Zip::Archive::BEGIN@9 at line 12
use warnings; no warnings 'newline';
# spent 20µs making 1 call to File::Copy::BEGIN@12 # spent 17µs making 1 call to warnings::import # spent 12µs making 1 call to File::Copy::BEGIN@12.1 # spent 9µs making 1 call to warnings::unimport
13211µs214µs
# spent 8µs (3+5) within File::Copy::BEGIN@13 which was called: # once (3µs+5µs) by Archive::Zip::Archive::BEGIN@9 at line 13
no warnings 'experimental::builtin';
# spent 8µs making 1 call to File::Copy::BEGIN@13 # spent 5µs making 1 call to warnings::unimport
14272µs2114µs
# spent 111µs (78+33) within File::Copy::BEGIN@14 which was called: # once (78µs+33µs) by Archive::Zip::Archive::BEGIN@9 at line 14
use builtin 'blessed';
# spent 111µs making 1 call to File::Copy::BEGIN@14 # spent 3µs making 1 call to builtin::import
15210µs217µs
# spent 10µs (3+7) within File::Copy::BEGIN@15 which was called: # once (3µs+7µs) by Archive::Zip::Archive::BEGIN@9 at line 15
use overload;
# spent 10µs making 1 call to File::Copy::BEGIN@15 # spent 7µs making 1 call to overload::import
16214µs26µs
# spent 6µs (5+300ns) within File::Copy::BEGIN@16 which was called: # once (5µs+300ns) by Archive::Zip::Archive::BEGIN@9 at line 16
use File::Spec;
# spent 6µs making 1 call to File::Copy::BEGIN@16 # spent 300ns making 1 call to File::Copy::__ANON__
17213µs214µs
# spent 8µs (3+5) within File::Copy::BEGIN@17 which was called: # once (3µs+5µs) by Archive::Zip::Archive::BEGIN@9 at line 17
use Config;
# spent 8µs making 1 call to File::Copy::BEGIN@17 # spent 5µs making 1 call to Config::import
18# We want HiRes stat and utime if available
191958µs1101µs
# spent 101µs (21+80) within File::Copy::BEGIN@19 which was called: # once (21µs+80µs) by Archive::Zip::Archive::BEGIN@9 at line 19
BEGIN { eval q{ use Time::HiRes qw( stat utime ) } };
# spent 101µs making 1 call to File::Copy::BEGIN@19
# spent 10µs executing statements in string eval
# includes 5µs spent executing 1 call to 1 sub defined therein.
20our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy);
21sub copy;
22sub syscopy;
23sub cp;
24sub mv;
25
261400ns$VERSION = '2.41';
27
281400nsrequire Exporter;
2915µs@ISA = qw(Exporter);
301300ns@EXPORT = qw(copy move);
311200ns@EXPORT_OK = qw(cp mv);
32
331100ns$Too_Big = 1024 * 1024 * 2;
34
35sub croak {
36 require Carp;
37 goto &Carp::croak;
38}
39
40sub carp {
41 require Carp;
42 goto &Carp::carp;
43}
44
45sub _catname {
46 my($from, $to) = @_;
47 if (not defined &basename) {
48 require File::Basename;
49 File::Basename->import( 'basename' );
50 }
51
52 return File::Spec->catfile($to, basename($from));
53}
54
55# _eq($from, $to) tells whether $from and $to are identical
56sub _eq {
57 my ($from, $to) = map {
58 blessed($_) && overload::Method($_, q{""})
59 ? "$_"
60 : $_
61 } (@_);
62 return '' if ( (ref $from) xor (ref $to) );
63 return $from == $to if ref $from;
64 return $from eq $to;
65}
66
67sub copy {
68 croak("Usage: copy(FROM, TO [, BUFFERSIZE]) ")
69 unless(@_ == 2 || @_ == 3);
70
71 my $from = shift;
72 my $to = shift;
73
74 my $size;
75 if (@_) {
76 $size = shift(@_) + 0;
77 croak("Bad buffer size for copy: $size\n") unless ($size > 0);
78 }
79
80 my $from_a_handle = (ref($from)
81 ? (ref($from) eq 'GLOB'
82 || UNIVERSAL::isa($from, 'GLOB')
83 || UNIVERSAL::isa($from, 'IO::Handle'))
84 : (ref(\$from) eq 'GLOB'));
85 my $to_a_handle = (ref($to)
86 ? (ref($to) eq 'GLOB'
87 || UNIVERSAL::isa($to, 'GLOB')
88 || UNIVERSAL::isa($to, 'IO::Handle'))
89 : (ref(\$to) eq 'GLOB'));
90
91 if (_eq($from, $to)) { # works for references, too
92 carp("'$from' and '$to' are identical (not copied)");
93 return 0;
94 }
95
96 if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) {
97 $to = _catname($from, $to);
98 }
99
100 if ((($Config{d_symlink} && $Config{d_readlink}) || $Config{d_link}) &&
101 !($^O eq 'os2')) {
102 my @fs = stat($from);
103 if (@fs) {
104 my @ts = stat($to);
105 if (@ts && $fs[0] == $ts[0] && $fs[1] eq $ts[1] && !-p $from) {
106 carp("'$from' and '$to' are identical (not copied)");
107 return 0;
108 }
109 }
110 }
111 elsif (_eq($from, $to)) {
112 carp("'$from' and '$to' are identical (not copied)");
113 return 0;
114 }
115
116 if (defined &syscopy && !$Syscopy_is_copy
117 && !$to_a_handle
118 && !($from_a_handle && $^O eq 'os2' ) # OS/2 cannot handle handles
119 && !($from_a_handle && $^O eq 'MSWin32')
120 )
121 {
122 if ($^O eq 'VMS' && -e $from
123 && ! -d $to && ! -d $from) {
124
125 # VMS natively inherits path components from the source of a
126 # copy, but we want the Unixy behavior of inheriting from
127 # the current working directory. Also, default in a trailing
128 # dot for null file types.
129
130 $to = VMS::Filespec::rmsexpand(VMS::Filespec::vmsify($to), '.');
131
132 # Get rid of the old versions to be like UNIX
133 1 while unlink $to;
134 }
135
136 return syscopy($from, $to) || 0;
137 }
138
139 my $closefrom = 0;
140 my $closeto = 0;
141 my ($status, $r, $buf);
142 local($\) = '';
143
144 my $from_h;
145 if ($from_a_handle) {
146 $from_h = $from;
147 } else {
148 open $from_h, "<", $from or goto fail_open1;
149 binmode $from_h or die "($!,$^E)";
150 $closefrom = 1;
151 }
152
153 # Seems most logical to do this here, in case future changes would want to
154 # make this croak for some reason.
155 unless (defined $size) {
156 $size = tied(*$from_h) ? 0 : -s $from_h || 0;
157 $size = 1024 if ($size < 512);
158 $size = $Too_Big if ($size > $Too_Big);
159 }
160
161 my $to_h;
162 if ($to_a_handle) {
163 $to_h = $to;
164 } else {
165 $to_h = \do { local *FH }; # XXX is this line obsolete?
166 open $to_h, ">", $to or goto fail_open2;
167 binmode $to_h or die "($!,$^E)";
168 $closeto = 1;
169 }
170
171 $! = 0;
172 for (;;) {
173 my ($r, $w, $t);
174 defined($r = sysread($from_h, $buf, $size))
175 or goto fail_inner;
176 last unless $r;
177 for ($w = 0; $w < $r; $w += $t) {
178 $t = syswrite($to_h, $buf, $r - $w, $w)
179 or goto fail_inner;
180 }
181 }
182
183 close($to_h) || goto fail_open2 if $closeto;
184 close($from_h) || goto fail_open1 if $closefrom;
185
186 # Use this idiom to avoid uninitialized value warning.
187 return 1;
188
189 # All of these contortions try to preserve error messages...
190 fail_inner:
191 if ($closeto) {
192 $status = $!;
193 $! = 0;
194 close $to_h;
195 $! = $status unless $!;
196 }
197 fail_open2:
198 if ($closefrom) {
199 $status = $!;
200 $! = 0;
201 close $from_h;
202 $! = $status unless $!;
203 }
204 fail_open1:
205 return 0;
206}
207
208sub cp {
209 my($from,$to) = @_;
210 my(@fromstat) = stat $from;
211 my(@tostat) = stat $to;
212 my $perm;
213
214 return 0 unless copy(@_) and @fromstat;
215
216 if (@tostat) {
217 $perm = $tostat[2];
218 } else {
219 $perm = $fromstat[2] & ~(umask || 0);
220 @tostat = stat $to;
221 }
222 # Might be more robust to look for S_I* in Fcntl, but we're
223 # trying to avoid dependence on any XS-containing modules,
224 # since File::Copy is used during the Perl build.
225 $perm &= 07777;
226 if ($perm & 06000) {
227 croak("Unable to check setuid/setgid permissions for $to: $!")
228 unless @tostat;
229
230 if ($perm & 04000 and # setuid
231 $fromstat[4] != $tostat[4]) { # owner must match
232 $perm &= ~06000;
233 }
234
235 if ($perm & 02000 && $> != 0) { # if not root, setgid
236 my $ok = $fromstat[5] == $tostat[5]; # group must match
237 if ($ok) { # and we must be in group
238 $ok = grep { $_ == $fromstat[5] } split /\s+/, $)
239 }
240 $perm &= ~06000 unless $ok;
241 }
242 }
243 return 0 unless @tostat;
244 return 1 if $perm == ($tostat[2] & 07777);
245 return eval { chmod $perm, $to; } ? 1 : 0;
246}
247
248sub _move {
249 croak("Usage: move(FROM, TO) ") unless @_ == 3;
250
251 my($from,$to,$fallback) = @_;
252
253 my($fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts);
254
255 if (-d $to && ! -d $from) {
256 $to = _catname($from, $to);
257 }
258
259 ($tosz1,$tomt1) = (stat($to))[7,9];
260 $fromsz = -s $from;
261 if ($^O eq 'os2' and defined $tosz1 and defined $fromsz) {
262 # will not rename with overwrite
263 unlink $to;
264 }
265
266 if ($^O eq 'VMS' && -e $from
267 && ! -d $to && ! -d $from) {
268
269 # VMS natively inherits path components from the source of a
270 # copy, but we want the Unixy behavior of inheriting from
271 # the current working directory. Also, default in a trailing
272 # dot for null file types.
273
274 $to = VMS::Filespec::rmsexpand(VMS::Filespec::vmsify($to), '.');
275
276 # Get rid of the old versions to be like UNIX
277 1 while unlink $to;
278 }
279
280 return 1 if rename $from, $to;
281
282 # Did rename return an error even though it succeeded, because $to
283 # is on a remote NFS file system, and NFS lost the server's ack?
284 return 1 if defined($fromsz) && !-e $from && # $from disappeared
285 (($tosz2,$tomt2) = (stat($to))[7,9]) && # $to's there
286 ((!defined $tosz1) || # not before or
287 ($tosz1 != $tosz2 or $tomt1 != $tomt2)) && # was changed
288 $tosz2 == $fromsz; # it's all there
289
290 ($tosz1,$tomt1) = (stat($to))[7,9]; # just in case rename did something
291
292 {
293 local $@;
294 eval {
295 local $SIG{__DIE__};
296 $fallback->($from,$to) or die;
297 my($atime, $mtime) = (stat($from))[8,9];
298 utime($atime, $mtime, $to);
299 unlink($from) or die;
300 };
301 return 1 unless $@;
302 }
303 ($sts,$ossts) = ($! + 0, $^E + 0);
304
305 ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1;
306 unlink($to) if !defined($tomt1) or $tomt1 != $tomt2 or $tosz1 != $tosz2;
307 ($!,$^E) = ($sts,$ossts);
308 return 0;
309}
310
311sub move { _move(@_,\&copy); }
312sub mv { _move(@_,\&cp); }
313
314# &syscopy is an XSUB under OS/2
3151500nsunless (defined &syscopy) {
31611µs if ($^O eq 'VMS') {
317 *syscopy = \&rmscopy;
318 } elsif ($^O eq 'MSWin32' && defined &DynaLoader::boot_DynaLoader) {
319 # Win32::CopyFile() fill only work if we can load Win32.xs
320 *syscopy = sub {
321 return 0 unless @_ == 2;
322 return Win32::CopyFile(@_, 1);
323 };
324 } else {
3251100ns $Syscopy_is_copy = 1;
32611µs *syscopy = \&copy;
327 }
328}
329
33016µs1;
331
332__END__
 
# spent 300ns within File::Copy::__ANON__ which was called: # once (300ns+0s) by File::Copy::BEGIN@16 at line 16
sub File::Copy::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 75)[XML-Twig-pm-5871]-192-line.html0000644000175000017500000004622614576335353024361 0ustar michamicha Profile of (eval 75)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 75)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 58 statements in 156µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

NOTE!
The data used to generate this report page was merged from 4 of the 37 executions
of the string eval on line 5871 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
464114µs14µsXML::Twig::Elt::::__ANON__[(eval 104)[XML/Twig.pm:5871]:1]XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1] (merge of 4 subs)
11110µs19µsXML::Twig::Elt::::BEGIN@1.28XML::Twig::Elt::BEGIN@1.28
1116µs16µsXML::Twig::Elt::::BEGIN@1.48XML::Twig::Elt::BEGIN@1.48
1116µs20µsXML::Twig::Elt::::BEGIN@1.19XML::Twig::Elt::BEGIN@1.19
1115µs16µsXML::Twig::Elt::::BEGIN@1.43XML::Twig::Elt::BEGIN@1.43
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
158156µs8113µs
# spent 20µs (6+14) within XML::Twig::Elt::BEGIN@1.19 which was called: # once (6µs+14µs) by XML::Twig::Elt::_install_cond at line 1 # spent 19µs (10+9) within XML::Twig::Elt::BEGIN@1.28 which was called: # once (10µs+9µs) by XML::Twig::Elt::_install_cond at line 1 # spent 14µs within XML::Twig::Elt::__ANON__[(eval 104)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 46 times, avg 304ns/call: # (data for this subroutine includes 3 others that were merged with it) # 16 times (3µs+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 206ns/call # 15 times (5µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 347ns/call # 14 times (3µs+0s) by XML::Twig::Elt::next_sibling at line 6071 of XML/Twig.pm, avg 229ns/call # once (2µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm # spent 16µs (5+10) within XML::Twig::Elt::BEGIN@1.43 which was called: # once (5µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.48 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 35) ? $_[0] : undef; }
# spent 43µs making 4 calls to warnings::unimport, avg 11µs/call # spent 20µs making 1 call to XML::Twig::Elt::BEGIN@1.19 # spent 19µs making 1 call to XML::Twig::Elt::BEGIN@1.28 # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.43 # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.48
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Storable-pm-106-line.html0000644000175000017500000027724214576335353022464 0ustar michamicha Profile of Storable.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Storable.pm
StatementsExecuted 31 statements in 1.69ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11129µs29µsStorable::::BEGIN@44Storable::BEGIN@44
1116µs8µsStorable::::BEGIN@487Storable::BEGIN@487
1116µs6µsEncode::::BEGIN@11 Encode::BEGIN@11
1116µs133µsStorable::::BEGIN@109Storable::BEGIN@109
1114µs16µsStorable::::BEGIN@66Storable::BEGIN@66
1114µs25µsStorable::::BEGIN@42Storable::BEGIN@42
1114µs63µsStorable::::BEGIN@83Storable::BEGIN@83
1112µs2µsStorable::::BEGIN@30Storable::BEGIN@30
0000s0sStorable::::BIN_VERSION_NVStorable::BIN_VERSION_NV
0000s0sStorable::::BIN_WRITE_VERSION_NVStorable::BIN_WRITE_VERSION_NV
0000s0sStorable::::CLONEStorable::CLONE
0000s0sStorable::::__ANON__[:72]Storable::__ANON__[:72]
0000s0sStorable::::_freezeStorable::_freeze
0000s0sStorable::::_make_reStorable::_make_re
0000s0sStorable::::_retrieveStorable::_retrieve
0000s0sStorable::::_storeStorable::_store
0000s0sStorable::::_store_fdStorable::_store_fd
0000s0sStorable::::fd_retrieveStorable::fd_retrieve
0000s0sStorable::::file_magicStorable::file_magic
0000s0sStorable::::freezeStorable::freeze
0000s0sStorable::::lock_nstoreStorable::lock_nstore
0000s0sStorable::::lock_retrieveStorable::lock_retrieve
0000s0sStorable::::lock_storeStorable::lock_store
0000s0sStorable::::nfreezeStorable::nfreeze
0000s0sStorable::::nstoreStorable::nstore
0000s0sStorable::::nstore_fdStorable::nstore_fd
0000s0sStorable::::read_magicStorable::read_magic
0000s0sStorable::::retrieveStorable::retrieve
0000s0sStorable::::retrieve_fdStorable::retrieve_fd
0000s0sStorable::::show_file_magicStorable::show_file_magic
0000s0sStorable::::storeStorable::store
0000s0sStorable::::store_fdStorable::store_fd
0000s0sStorable::::thawStorable::thaw
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2# Copyright (c) 1995-2001, Raphael Manfredi
3# Copyright (c) 2002-2014 by the Perl 5 Porters
4# Copyright (c) 2015-2016 cPanel Inc
5# Copyright (c) 2017 Reini Urban
6#
7# You may redistribute only under the same terms as Perl 5, as specified
8# in the README file that comes with the distribution.
9#
10
11153µs16µs
# spent 6µs within Encode::BEGIN@11 which was called: # once (6µs+0s) by Encode::BEGIN@56 at line 11
BEGIN { require XSLoader }
# spent 6µs making 1 call to Encode::BEGIN@11
121500nsrequire Exporter;
13package Storable;
14
1515µsour @ISA = qw(Exporter);
161400nsour @EXPORT = qw(store retrieve);
1711µsour @EXPORT_OK = qw(
18 nstore store_fd nstore_fd fd_retrieve
19 freeze nfreeze thaw
20 dclone
21 retrieve_fd
22 lock_store lock_nstore lock_retrieve
23 file_magic read_magic
24 BLESS_OK TIE_OK FLAGS_COMPAT
25 stack_depth stack_depth_hash
26);
27
28our ($canonical, $forgive_me);
29
30
# spent 2µs within Storable::BEGIN@30 which was called: # once (2µs+0s) by Encode::BEGIN@56 at line 32
BEGIN {
3112µs our $VERSION = '3.32';
32124µs12µs}
# spent 2µs making 1 call to Storable::BEGIN@30
33
34our $recursion_limit;
35our $recursion_limit_hash;
36
371300ns$recursion_limit = 512
38 unless defined $recursion_limit;
3910s$recursion_limit_hash = 256
40 unless defined $recursion_limit_hash;
41
42277µs247µs
# spent 25µs (4+22) within Storable::BEGIN@42 which was called: # once (4µs+22µs) by Encode::BEGIN@56 at line 42
use Carp;
# spent 25µs making 1 call to Storable::BEGIN@42 # spent 22µs making 1 call to Exporter::import
43
44
# spent 29µs within Storable::BEGIN@44 which was called: # once (29µs+0s) by Encode::BEGIN@56 at line 77
BEGIN {
451100ns if (eval {
4611µs local $SIG{__DIE__};
4711µs local @INC = @INC;
481300ns pop @INC if $INC[-1] eq '.';
49122µs require Log::Agent;
50 1;
51 }) {
52 Log::Agent->import;
53 }
54 #
55 # Use of Log::Agent is optional. If it hasn't imported these subs then
56 # provide a fallback implementation.
57 #
5811µs unless ($Storable::{logcroak} && *{$Storable::{logcroak}}{CODE}) {
59 *logcroak = \&Carp::croak;
60 }
61 else {
62 # Log::Agent's logcroak always adds a newline to the error it is
63 # given. This breaks refs getting thrown. We can just discard what
64 # it throws (but keep whatever logging it does) and throw the original
65 # args.
66269µs228µs
# spent 16µs (4+12) within Storable::BEGIN@66 which was called: # once (4µs+12µs) by Encode::BEGIN@56 at line 66
no warnings 'redefine';
# spent 16µs making 1 call to Storable::BEGIN@66 # spent 12µs making 1 call to warnings::unimport
67 my $logcroak = \&logcroak;
68 *logcroak = sub {
69 my @args = @_;
70 eval { &$logcroak };
71 Carp::croak(@args);
72 };
73 }
7413µs unless ($Storable::{logcarp} && *{$Storable::{logcarp}}{CODE}) {
75 *logcarp = \&Carp::carp;
76 }
77141µs129µs}
# spent 29µs making 1 call to Storable::BEGIN@44
78
79#
80# They might miss :flock in Fcntl
81#
82
83
# spent 63µs (4+59) within Storable::BEGIN@83 which was called: # once (4µs+59µs) by Encode::BEGIN@56 at line 92
BEGIN {
8433µs159µs if (eval { require Fcntl; 1 } && exists $Fcntl::EXPORT_TAGS{'flock'}) {
# spent 59µs making 1 call to Exporter::import
85 Fcntl->import(':flock');
86 } else {
87 eval q{
88 sub LOCK_SH () { 1 }
89 sub LOCK_EX () { 2 }
90 };
91 }
92156µs163µs}
# spent 63µs making 1 call to Storable::BEGIN@83
93
94sub CLONE {
95 # clone context under threads
96 Storable::init_perinterp();
97}
98
99sub BLESS_OK () { 2 }
100sub TIE_OK () { 4 }
101sub FLAGS_COMPAT () { BLESS_OK | TIE_OK }
102
103# By default restricted hashes are downgraded on earlier perls.
104
1051100ns$Storable::flags = FLAGS_COMPAT;
10610s$Storable::downgrade_restricted = 1;
10710s$Storable::accept_future_minor = 1;
108
10911.22ms2261µs
# spent 133µs (6+128) within Storable::BEGIN@109 which was called: # once (6µs+128µs) by Encode::BEGIN@56 at line 109
BEGIN { XSLoader::load('Storable') };
# spent 133µs making 1 call to Storable::BEGIN@109 # spent 128µs making 1 call to XSLoader::load
110
111#
112# Determine whether locking is possible, but only when needed.
113#
114
115sub show_file_magic {
116 print <<EOM;
117#
118# To recognize the data files of the Perl module Storable,
119# the following lines need to be added to the local magic(5) file,
120# usually either /usr/share/misc/magic or /etc/magic.
121#
1220 string perl-store perl Storable(v0.6) data
123>4 byte >0 (net-order %d)
124>>4 byte &01 (network-ordered)
125>>4 byte =3 (major 1)
126>>4 byte =2 (major 1)
127
1280 string pst0 perl Storable(v0.7) data
129>4 byte >0
130>>4 byte &01 (network-ordered)
131>>4 byte =5 (major 2)
132>>4 byte =4 (major 2)
133>>5 byte >0 (minor %d)
134EOM
135}
136
137sub file_magic {
138 require IO::File;
139
140 my $file = shift;
141 my $fh = IO::File->new;
142 open($fh, "<", $file) || die "Can't open '$file': $!";
143 binmode($fh);
144 defined(sysread($fh, my $buf, 32)) || die "Can't read from '$file': $!";
145 close($fh);
146
147 $file = "./$file" unless $file; # ensure TRUE value
148
149 return read_magic($buf, $file);
150}
151
152sub read_magic {
153 my($buf, $file) = @_;
154 my %info;
155
156 my $buflen = length($buf);
157 my $magic;
158 if ($buf =~ s/^(pst0|perl-store)//) {
159 $magic = $1;
160 $info{file} = $file || 1;
161 }
162 else {
163 return undef if $file;
164 $magic = "";
165 }
166
167 return undef unless length($buf);
168
169 my $net_order;
170 if ($magic eq "perl-store" && ord(substr($buf, 0, 1)) > 1) {
171 $info{version} = -1;
172 $net_order = 0;
173 }
174 else {
175 $buf =~ s/(.)//s;
176 my $major = (ord $1) >> 1;
177 return undef if $major > 4; # sanity (assuming we never go that high)
178 $info{major} = $major;
179 $net_order = (ord $1) & 0x01;
180 if ($major > 1) {
181 return undef unless $buf =~ s/(.)//s;
182 my $minor = ord $1;
183 $info{minor} = $minor;
184 $info{version} = "$major.$minor";
185 $info{version_nv} = sprintf "%d.%03d", $major, $minor;
186 }
187 else {
188 $info{version} = $major;
189 }
190 }
191 $info{version_nv} ||= $info{version};
192 $info{netorder} = $net_order;
193
194 unless ($net_order) {
195 return undef unless $buf =~ s/(.)//s;
196 my $len = ord $1;
197 return undef unless length($buf) >= $len;
198 return undef unless $len == 4 || $len == 8; # sanity
199 @info{qw(byteorder intsize longsize ptrsize)}
200 = unpack "a${len}CCC", $buf;
201 (substr $buf, 0, $len + 3) = '';
202 if ($info{version_nv} >= 2.002) {
203 return undef unless $buf =~ s/(.)//s;
204 $info{nvsize} = ord $1;
205 }
206 }
207 $info{hdrsize} = $buflen - length($buf);
208
209 return \%info;
210}
211
212sub BIN_VERSION_NV {
213 sprintf "%d.%03d", BIN_MAJOR(), BIN_MINOR();
214}
215
216sub BIN_WRITE_VERSION_NV {
217 sprintf "%d.%03d", BIN_MAJOR(), BIN_WRITE_MINOR();
218}
219
220#
221# store
222#
223# Store target object hierarchy, identified by a reference to its root.
224# The stored object tree may later be retrieved to memory via retrieve.
225# Returns undef if an I/O error occurred, in which case the file is
226# removed.
227#
228sub store {
229 return _store(\&pstore, @_, 0);
230}
231
232#
233# nstore
234#
235# Same as store, but in network order.
236#
237sub nstore {
238 return _store(\&net_pstore, @_, 0);
239}
240
241#
242# lock_store
243#
244# Same as store, but flock the file first (advisory locking).
245#
246sub lock_store {
247 return _store(\&pstore, @_, 1);
248}
249
250#
251# lock_nstore
252#
253# Same as nstore, but flock the file first (advisory locking).
254#
255sub lock_nstore {
256 return _store(\&net_pstore, @_, 1);
257}
258
259# Internal store to file routine
260sub _store {
261 my $xsptr = shift;
262 my $self = shift;
263 my ($file, $use_locking) = @_;
264 logcroak "not a reference" unless ref($self);
265 logcroak "wrong argument number" unless @_ == 2; # No @foo in arglist
266 local *FILE;
267 if ($use_locking) {
268 open(FILE, ">>", $file) || logcroak "can't write into $file: $!";
269 unless (CAN_FLOCK) {
270 logcarp
271 "Storable::lock_store: fcntl/flock emulation broken on $^O";
272 return undef;
273 }
274 flock(FILE, LOCK_EX) ||
275 logcroak "can't get exclusive lock on $file: $!";
276 truncate FILE, 0;
277 # Unlocking will happen when FILE is closed
278 } else {
279 open(FILE, ">", $file) || logcroak "can't create $file: $!";
280 }
281 binmode FILE; # Archaic systems...
282 my $da = $@; # Don't mess if called from exception handler
283 my $ret;
284 # Call C routine nstore or pstore, depending on network order
285 eval { $ret = &$xsptr(*FILE, $self) };
286 # close will return true on success, so the or short-circuits, the ()
287 # expression is true, and for that case the block will only be entered
288 # if $@ is true (ie eval failed)
289 # if close fails, it returns false, $ret is altered, *that* is (also)
290 # false, so the () expression is false, !() is true, and the block is
291 # entered.
292 if (!(close(FILE) or undef $ret) || $@) {
293 unlink($file) or warn "Can't unlink $file: $!\n";
294 }
295 if ($@) {
296 $@ =~ s/\.?\n$/,/ unless ref $@;
297 logcroak $@;
298 }
299 $@ = $da;
300 return $ret;
301}
302
303#
304# store_fd
305#
306# Same as store, but perform on an already opened file descriptor instead.
307# Returns undef if an I/O error occurred.
308#
309sub store_fd {
310 return _store_fd(\&pstore, @_);
311}
312
313#
314# nstore_fd
315#
316# Same as store_fd, but in network order.
317#
318sub nstore_fd {
319 my ($self, $file) = @_;
320 return _store_fd(\&net_pstore, @_);
321}
322
323# Internal store routine on opened file descriptor
324sub _store_fd {
325 my $xsptr = shift;
326 my $self = shift;
327 my ($file) = @_;
328 logcroak "not a reference" unless ref($self);
329 logcroak "too many arguments" unless @_ == 1; # No @foo in arglist
330 my $fd = fileno($file);
331 logcroak "not a valid file descriptor" unless defined $fd;
332 my $da = $@; # Don't mess if called from exception handler
333 my $ret;
334 # Call C routine nstore or pstore, depending on network order
335 eval { $ret = &$xsptr($file, $self) };
336 logcroak $@ if $@ =~ s/\.?\n$/,/;
337 local $\; print $file ''; # Autoflush the file if wanted
338 $@ = $da;
339 return $ret;
340}
341
342#
343# freeze
344#
345# Store object and its hierarchy in memory and return a scalar
346# containing the result.
347#
348sub freeze {
349 _freeze(\&mstore, @_);
350}
351
352#
353# nfreeze
354#
355# Same as freeze but in network order.
356#
357sub nfreeze {
358 _freeze(\&net_mstore, @_);
359}
360
361# Internal freeze routine
362sub _freeze {
363 my $xsptr = shift;
364 my $self = shift;
365 logcroak "not a reference" unless ref($self);
366 logcroak "too many arguments" unless @_ == 0; # No @foo in arglist
367 my $da = $@; # Don't mess if called from exception handler
368 my $ret;
369 # Call C routine mstore or net_mstore, depending on network order
370 eval { $ret = &$xsptr($self) };
371 if ($@) {
372 $@ =~ s/\.?\n$/,/ unless ref $@;
373 logcroak $@;
374 }
375 $@ = $da;
376 return $ret ? $ret : undef;
377}
378
379#
380# retrieve
381#
382# Retrieve object hierarchy from disk, returning a reference to the root
383# object of that tree.
384#
385# retrieve(file, flags)
386# flags include by default BLESS_OK=2 | TIE_OK=4
387# with flags=0 or the global $Storable::flags set to 0, no resulting object
388# will be blessed nor tied.
389#
390sub retrieve {
391 _retrieve(shift, 0, @_);
392}
393
394#
395# lock_retrieve
396#
397# Same as retrieve, but with advisory locking.
398#
399sub lock_retrieve {
400 _retrieve(shift, 1, @_);
401}
402
403# Internal retrieve routine
404sub _retrieve {
405 my ($file, $use_locking, $flags) = @_;
406 $flags = $Storable::flags unless defined $flags;
407 my $FILE;
408 open($FILE, "<", $file) || logcroak "can't open $file: $!";
409 binmode $FILE; # Archaic systems...
410 my $self;
411 my $da = $@; # Could be from exception handler
412 if ($use_locking) {
413 unless (CAN_FLOCK) {
414 logcarp
415 "Storable::lock_store: fcntl/flock emulation broken on $^O";
416 return undef;
417 }
418 flock($FILE, LOCK_SH) || logcroak "can't get shared lock on $file: $!";
419 # Unlocking will happen when FILE is closed
420 }
421 eval { $self = pretrieve($FILE, $flags) }; # Call C routine
422 close($FILE);
423 if ($@) {
424 $@ =~ s/\.?\n$/,/ unless ref $@;
425 logcroak $@;
426 }
427 $@ = $da;
428 return $self;
429}
430
431#
432# fd_retrieve
433#
434# Same as retrieve, but perform from an already opened file descriptor instead.
435#
436sub fd_retrieve {
437 my ($file, $flags) = @_;
438 $flags = $Storable::flags unless defined $flags;
439 my $fd = fileno($file);
440 logcroak "not a valid file descriptor" unless defined $fd;
441 my $self;
442 my $da = $@; # Could be from exception handler
443 eval { $self = pretrieve($file, $flags) }; # Call C routine
444 if ($@) {
445 $@ =~ s/\.?\n$/,/ unless ref $@;
446 logcroak $@;
447 }
448 $@ = $da;
449 return $self;
450}
451
452sub retrieve_fd { &fd_retrieve } # Backward compatibility
453
454#
455# thaw
456#
457# Recreate objects in memory from an existing frozen image created
458# by freeze. If the frozen image passed is undef, return undef.
459#
460# thaw(frozen_obj, flags)
461# flags include by default BLESS_OK=2 | TIE_OK=4
462# with flags=0 or the global $Storable::flags set to 0, no resulting object
463# will be blessed nor tied.
464#
465sub thaw {
466 my ($frozen, $flags) = @_;
467 $flags = $Storable::flags unless defined $flags;
468 return undef unless defined $frozen;
469 my $self;
470 my $da = $@; # Could be from exception handler
471 eval { $self = mretrieve($frozen, $flags) };# Call C routine
472 if ($@) {
473 $@ =~ s/\.?\n$/,/ unless ref $@;
474 logcroak $@;
475 }
476 $@ = $da;
477 return $self;
478}
479
480#
481# _make_re($re, $flags)
482#
483# Internal function used to thaw a regular expression.
484#
485
4861100nsmy $re_flags;
487
# spent 8µs (6+1) within Storable::BEGIN@487 which was called: # once (6µs+1µs) by Encode::BEGIN@56 at line 500
BEGIN {
48812µs if ($] < 5.010) {
489 $re_flags = qr/\A[imsx]*\z/;
490 }
491 elsif ($] < 5.014) {
492 $re_flags = qr/\A[msixp]*\z/;
493 }
494 elsif ($] < 5.022) {
495 $re_flags = qr/\A[msixpdual]*\z/;
496 }
497 else {
49815µs11µs $re_flags = qr/\A[msixpdualn]*\z/;
# spent 1µs making 1 call to CORE::qr
499 }
500194µs18µs}
# spent 8µs making 1 call to Storable::BEGIN@487
501
502sub _make_re {
503 my ($re, $flags) = @_;
504
505 $flags =~ $re_flags
506 or die "regexp flags invalid";
507
508 my $qr = eval "qr/\$re/$flags";
509 die $@ if $@;
510
511 $qr;
512}
513
5141200nsif ($] < 5.012) {
515 eval <<'EOS'
516sub _regexp_pattern {
517 my $re = "" . shift;
518 $re =~ /\A\(\?([xism]*)(?:-[xism]*)?:(.*)\)\z/s
519 or die "Cannot parse regexp /$re/";
520 return ($2, $1);
521}
5221
523EOS
524 or die "Cannot define _regexp_pattern: $@";
525}
526
52716µs1;
528__END__










Spreadsheet-ParseXLSX-0.35/nytprof/POSIX-pm-10-line.html0000644000175000017500000032726414576335353021525 0ustar michamicha Profile of POSIX.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/POSIX.pm
StatementsExecuted 38 statements in 2.91ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111362µs362µsPOSIX::::load_imports POSIX::load_imports
111283µs662µsPOSIX::::BEGIN@11 POSIX::BEGIN@11
11117µs939µsPOSIX::::import POSIX::import
11112µs14µsPOSIX::::BEGIN@2 POSIX::BEGIN@2
1117µs10µsPOSIX::::BEGIN@225 POSIX::BEGIN@225
1113µs17µsPOSIX::::BEGIN@3 POSIX::BEGIN@3
0000s0sPOSIX::::AUTOLOAD POSIX::AUTOLOAD
0000s0sPOSIX::SigAction::::flagsPOSIX::SigAction::flags
0000s0sPOSIX::SigAction::::handlerPOSIX::SigAction::handler
0000s0sPOSIX::SigAction::::maskPOSIX::SigAction::mask
0000s0sPOSIX::SigAction::::newPOSIX::SigAction::new
0000s0sPOSIX::SigAction::::safePOSIX::SigAction::safe
0000s0sPOSIX::SigRt::::CLEAR POSIX::SigRt::CLEAR
0000s0sPOSIX::SigRt::::DELETE POSIX::SigRt::DELETE
0000s0sPOSIX::SigRt::::EXISTS POSIX::SigRt::EXISTS
0000s0sPOSIX::SigRt::::FETCH POSIX::SigRt::FETCH
0000s0sPOSIX::SigRt::::SCALAR POSIX::SigRt::SCALAR
0000s0sPOSIX::SigRt::::STORE POSIX::SigRt::STORE
0000s0sPOSIX::SigRt::::_check POSIX::SigRt::_check
0000s0sPOSIX::SigRt::::_croak POSIX::SigRt::_croak
0000s0sPOSIX::SigRt::::_exist POSIX::SigRt::_exist
0000s0sPOSIX::SigRt::::_getsig POSIX::SigRt::_getsig
0000s0sPOSIX::SigRt::::_init POSIX::SigRt::_init
0000s0sPOSIX::SigRt::::new POSIX::SigRt::new
0000s0sPOSIX::::croak POSIX::croak
0000s0sPOSIX::::perror POSIX::perror
0000s0sPOSIX::::printf POSIX::printf
0000s0sPOSIX::::sprintf POSIX::sprintf
0000s0sPOSIX::::unimplemented_message POSIX::unimplemented_message
0000s0sPOSIX::::usage POSIX::usage
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package POSIX;
2218µs216µs
# spent 14µs (12+2) within POSIX::BEGIN@2 which was called: # once (12µs+2µs) by Test2::Util::BEGIN@7 at line 2
use strict;
# spent 14µs making 1 call to POSIX::BEGIN@2 # spent 2µs making 1 call to strict::import
3249µs231µs
# spent 17µs (3+14) within POSIX::BEGIN@3 which was called: # once (3µs+14µs) by Test2::Util::BEGIN@7 at line 3
use warnings;
# spent 17µs making 1 call to POSIX::BEGIN@3 # spent 14µs making 1 call to warnings::import
4
5our ($AUTOLOAD, %SIGRT);
6
71400nsour $VERSION = '2.13';
8
91500nsrequire XSLoader;
10
1114µs1193µs
# spent 662µs (283+379) within POSIX::BEGIN@11 which was called: # once (283µs+379µs) by Test2::Util::BEGIN@7 at line 17
use Fcntl qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD
# spent 193µs making 1 call to Exporter::import
12 F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND
13 O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC
14 O_WRONLY SEEK_CUR SEEK_END SEEK_SET
15 S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISLNK S_ISREG S_ISSOCK
16 S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID
171637µs1662µs S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR);
# spent 662µs making 1 call to POSIX::BEGIN@11
18
191200nsmy $loaded;
20
21sub croak { require Carp; goto &Carp::croak }
22sub usage { croak "Usage: POSIX::$_[0]" }
23
241348µs1341µsXSLoader::load();
# spent 341µs making 1 call to XSLoader::load
25
26121µsmy %replacement = (
27 L_tmpnam => undef,
28 atexit => 'END {}',
29 atof => undef,
30 atoi => undef,
31 atol => undef,
32 bsearch => \'not supplied',
33 calloc => undef,
34 clearerr => 'IO::Handle::clearerr',
35 div => '/, % and int',
36 execl => undef,
37 execle => undef,
38 execlp => undef,
39 execv => undef,
40 execve => undef,
41 execvp => undef,
42 fclose => 'IO::Handle::close',
43 fdopen => 'IO::Handle::new_from_fd',
44 feof => 'IO::Handle::eof',
45 ferror => 'IO::Handle::error',
46 fflush => 'IO::Handle::flush',
47 fgetc => 'IO::Handle::getc',
48 fgetpos => 'IO::Seekable::getpos',
49 fgets => 'IO::Handle::gets',
50 fileno => 'IO::Handle::fileno',
51 fopen => 'IO::File::open',
52 fprintf => 'printf',
53 fputc => 'print',
54 fputs => 'print',
55 fread => 'read',
56 free => undef,
57 freopen => 'open',
58 fscanf => '<> and regular expressions',
59 fseek => 'IO::Seekable::seek',
60 fsetpos => 'IO::Seekable::setpos',
61 fsync => 'IO::Handle::sync',
62 ftell => 'IO::Seekable::tell',
63 fwrite => 'print',
64 labs => 'abs',
65 ldiv => '/, % and int',
66 longjmp => 'die',
67 malloc => undef,
68 memchr => 'index()',
69 memcmp => 'eq',
70 memcpy => '=',
71 memmove => '=',
72 memset => 'x',
73 offsetof => undef,
74 putc => 'print',
75 putchar => 'print',
76 puts => 'print',
77 qsort => 'sort',
78 rand => \'non-portable, use Perl\'s rand instead',
79 realloc => undef,
80 scanf => '<> and regular expressions',
81 setbuf => 'IO::Handle::setbuf',
82 setjmp => 'eval {}',
83 setvbuf => 'IO::Handle::setvbuf',
84 siglongjmp => 'die',
85 sigsetjmp => 'eval {}',
86 srand => \'not supplied; refer to Perl\'s srand documentation',
87 sscanf => 'regular expressions',
88 strcat => '.=',
89 strchr => 'index()',
90 strcmp => 'eq',
91 strcpy => '=',
92 strcspn => 'regular expressions',
93 strlen => 'length',
94 strncat => '.=',
95 strncmp => 'eq',
96 strncpy => '=',
97 strpbrk => undef,
98 strrchr => 'rindex()',
99 strspn => undef,
100 strtok => undef,
101 tmpfile => 'IO::File::new_tmpfile',
102 tmpnam => 'use File::Temp',
103 ungetc => 'IO::Handle::ungetc',
104 vfprintf => undef,
105 vprintf => undef,
106 vsprintf => undef,
107);
108
109114µsmy %reimpl = (
110 abs => 'x => CORE::abs($_[0])',
111 alarm => 'seconds => CORE::alarm($_[0])',
112 assert => 'expr => croak "Assertion failed" if !$_[0]',
113 atan2 => 'x, y => CORE::atan2($_[0], $_[1])',
114 chdir => 'directory => CORE::chdir($_[0])',
115 chmod => 'mode, filename => CORE::chmod($_[0], $_[1])',
116 chown => 'uid, gid, filename => CORE::chown($_[0], $_[1], $_[2])',
117 closedir => 'dirhandle => CORE::closedir($_[0])',
118 cos => 'x => CORE::cos($_[0])',
119 creat => 'filename, mode => &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[1])',
120 errno => '$! + 0',
121 exit => 'status => CORE::exit($_[0])',
122 exp => 'x => CORE::exp($_[0])',
123 fabs => 'x => CORE::abs($_[0])',
124 fcntl => 'filehandle, cmd, arg => CORE::fcntl($_[0], $_[1], $_[2])',
125 fork => 'CORE::fork',
126 fstat => 'fd => CORE::open my $dup, "<&", $_[0]; CORE::stat($dup)', # Gross.
127 getc => 'handle => CORE::getc($_[0])',
128 getchar => 'CORE::getc(STDIN)',
129 getegid => '$) + 0',
130 getenv => 'name => $ENV{$_[0]}',
131 geteuid => '$> + 0',
132 getgid => '$( + 0',
133 getgrgid => 'gid => CORE::getgrgid($_[0])',
134 getgrnam => 'name => CORE::getgrnam($_[0])',
135 getgroups => 'my %seen; grep !$seen{$_}++, split " ", $)',
136 getlogin => 'CORE::getlogin()',
137 getpgrp => 'CORE::getpgrp',
138 getpid => '$$',
139 getppid => 'CORE::getppid',
140 getpwnam => 'name => CORE::getpwnam($_[0])',
141 getpwuid => 'uid => CORE::getpwuid($_[0])',
142 gets => 'scalar <STDIN>',
143 getuid => '$<',
144 gmtime => 'time => CORE::gmtime($_[0])',
145 isatty => 'filehandle => -t $_[0]',
146 kill => 'pid, sig => CORE::kill $_[1], $_[0]',
147 link => 'oldfilename, newfilename => CORE::link($_[0], $_[1])',
148 localtime => 'time => CORE::localtime($_[0])',
149 log => 'x => CORE::log($_[0])',
150 mkdir => 'directoryname, mode => CORE::mkdir($_[0], $_[1])',
151 opendir => 'directory => my $dh; CORE::opendir($dh, $_[0]) ? $dh : undef',
152 pow => 'x, exponent => $_[0] ** $_[1]',
153 raise => 'sig => CORE::kill $_[0], $$; # Is this good enough',
154 readdir => 'dirhandle => CORE::readdir($_[0])',
155 remove => 'filename => (-d $_[0]) ? CORE::rmdir($_[0]) : CORE::unlink($_[0])',
156 rename => 'oldfilename, newfilename => CORE::rename($_[0], $_[1])',
157 rewind => 'filehandle => CORE::seek($_[0],0,0)',
158 rewinddir => 'dirhandle => CORE::rewinddir($_[0])',
159 rmdir => 'directoryname => CORE::rmdir($_[0])',
160 sin => 'x => CORE::sin($_[0])',
161 sqrt => 'x => CORE::sqrt($_[0])',
162 stat => 'filename => CORE::stat($_[0])',
163 strerror => 'errno => BEGIN { local $!; require locale; locale->import} my $e = $_[0] + 0; local $!; $! = $e; "$!"',
164 strstr => 'big, little => CORE::index($_[0], $_[1])',
165 system => 'command => CORE::system($_[0])',
166 time => 'CORE::time',
167 umask => 'mask => CORE::umask($_[0])',
168 unlink => 'filename => CORE::unlink($_[0])',
169 utime => 'filename, atime, mtime => CORE::utime($_[1], $_[2], $_[0])',
170 wait => 'CORE::wait()',
171 waitpid => 'pid, options => CORE::waitpid($_[0], $_[1])',
172);
173
174
# spent 939µs (17+922) within POSIX::import which was called: # once (17µs+922µs) by OLE::Storage_Lite::BEGIN@1383 at line 1383 of OLE/Storage_Lite.pm
sub import {
1751600ns my $pkg = shift;
176
17712µs1362µs load_imports() unless $loaded++;
# spent 362µs making 1 call to POSIX::load_imports
178
179 # Rewrite legacy foo_h form to new :foo_h form
18016µs12µs s/^(?=\w+_h$)/:/ for my @list = @_;
# spent 2µs making 1 call to CORE::subst
181
18214µs1600ns my @unimpl = sort grep { exists $replacement{$_} } @list;
# spent 600ns making 1 call to CORE::sort
1831300ns if (@unimpl) {
184 for my $u (@unimpl) {
185 warn "Unimplemented: POSIX::$u(): ", unimplemented_message($u);
186 }
187 croak(sprintf("Unimplemented: %s",
188 join(" ", map { "POSIX::$_()" } @unimpl)));
189 }
190
1911300ns local $Exporter::ExportLevel = 1;
19213µs1557µs Exporter::import($pkg,@list);
# spent 557µs making 1 call to Exporter::import
193}
194
1951272µseval join ';', map "sub $_", keys %replacement, keys %reimpl;
196
197sub unimplemented_message {
198 my $func = shift;
199 my $how = $replacement{$func};
200 return "C-specific, stopped" unless defined $how;
201 return "$$how" if ref $how;
202 return "$how instead" if $how =~ /^use /;
203 return "Use method $how() instead" if $how =~ /::/;
204 return "C-specific: use $how instead";
205}
206
207sub AUTOLOAD {
208 my ($func) = ($AUTOLOAD =~ /.*::(.*)/);
209
210 die "POSIX.xs has failed to load\n" if $func eq 'constant';
211
212 if (my $code = $reimpl{$func}) {
213 my ($num, $arg) = (0, '');
214 if ($code =~ s/^(.*?) *=> *//) {
215 $arg = $1;
216 $num = 1 + $arg =~ tr/,//;
217 }
218 # no warnings to be consistent with the old implementation, where each
219 # function was in its own little AutoSplit world:
220 eval qq{ sub $func {
221 no warnings;
222 usage "$func($arg)" if \@_ != $num;
223 $code
224 } };
22521.02ms213µs
# spent 10µs (7+3) within POSIX::BEGIN@225 which was called: # once (7µs+3µs) by Test2::Util::BEGIN@7 at line 225
no strict;
# spent 10µs making 1 call to POSIX::BEGIN@225 # spent 3µs making 1 call to strict::unimport
226 goto &$AUTOLOAD;
227 }
228 if (exists $replacement{$func}) {
229 croak "Unimplemented: POSIX::$func(): ", unimplemented_message($func);
230 }
231
232 constant($func);
233}
234
235sub perror {
236 print STDERR "@_: " if @_;
237 print STDERR $!,"\n";
238}
239
240sub printf {
241 usage "printf(pattern, args...)" if @_ < 1;
242 CORE::printf STDOUT @_;
243}
244
245sub sprintf {
246 usage "sprintf(pattern, args...)" if @_ == 0;
247 CORE::sprintf(shift,@_);
248}
249
250
# spent 362µs within POSIX::load_imports which was called: # once (362µs+0s) by POSIX::import at line 177
sub load_imports {
251153µsmy %default_export_tags = ( # cf. exports policy below
252
253 assert_h => [qw(assert NDEBUG)],
254
255 ctype_h => [],
256
257 dirent_h => [],
258
259 errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN
260 EALREADY EBADF EBADMSG EBUSY ECANCELED ECHILD ECONNABORTED
261 ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT EEXIST
262 EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EIDRM EILSEQ EINPROGRESS
263 EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE
264 ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS
265 ENODATA ENODEV ENOENT ENOEXEC ENOLCK ENOLINK ENOMEM ENOMSG
266 ENOPROTOOPT ENOSPC ENOSR ENOSTR ENOSYS ENOTBLK ENOTCONN ENOTDIR
267 ENOTEMPTY ENOTRECOVERABLE ENOTSOCK ENOTSUP ENOTTY ENXIO
268 EOPNOTSUPP EOTHER EOVERFLOW EOWNERDEAD EPERM EPFNOSUPPORT EPIPE
269 EPROCLIM EPROTO EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE
270 ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE
271 ETIME ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV
272 errno)],
273
274 fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK
275 F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK
276 O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK
277 O_RDONLY O_RDWR O_TRUNC O_WRONLY
278 creat
279 SEEK_CUR SEEK_END SEEK_SET
280 S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
281 S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISLNK S_ISREG S_ISSOCK S_ISUID
282 S_IWGRP S_IWOTH S_IWUSR)],
283
284 float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG
285 DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
286 DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP
287 FLT_DIG FLT_EPSILON FLT_MANT_DIG
288 FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP
289 FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP
290 FLT_RADIX FLT_ROUNDS
291 LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG
292 LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP
293 LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)],
294
295 grp_h => [],
296
297 limits_h => [qw( ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX
298 INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON
299 MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX
300 PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN
301 SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX
302 ULONG_MAX USHRT_MAX _POSIX_ARG_MAX _POSIX_CHILD_MAX
303 _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
304 _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX
305 _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
306 _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)],
307
308 locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
309 LC_MONETARY LC_NUMERIC LC_TIME LC_IDENTIFICATION
310 LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_ADDRESS LC_NAME
311 LC_SYNTAX LC_TOD NULL
312 localeconv setlocale)],
313
314 math_h => [qw(FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL
315 FP_SUBNORMAL FP_ZERO
316 M_1_PI M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 M_LOG10E M_LOG2E
317 M_PI M_PI_2 M_PI_4 M_SQRT1_2 M_SQRT2
318 HUGE_VAL INFINITY NAN
319 acos asin atan ceil cosh fabs floor fmod
320 frexp ldexp log10 modf pow sinh tan tanh)],
321
322 pwd_h => [],
323
324 setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)],
325
326 signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
327 SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
328 SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL
329 SIGPIPE %SIGRT SIGRTMIN SIGRTMAX SIGQUIT SIGSEGV SIGSTOP
330 SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIGBUS
331 SIGPOLL SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXFSZ
332 SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK
333 raise sigaction signal sigpending sigprocmask sigsuspend)],
334
335 stdarg_h => [],
336
337 stddef_h => [qw(NULL offsetof)],
338
339 stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
340 NULL SEEK_CUR SEEK_END SEEK_SET
341 STREAM_MAX TMP_MAX stderr stdin stdout
342 clearerr fclose fdopen feof ferror fflush fgetc fgetpos
343 fgets fopen fprintf fputc fputs fread freopen
344 fscanf fseek fsetpos ftell fwrite getchar gets
345 perror putc putchar puts remove rewind
346 scanf setbuf setvbuf sscanf tmpfile tmpnam
347 ungetc vfprintf vprintf vsprintf)],
348
349 stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
350 abort atexit atof atoi atol bsearch calloc div
351 free getenv labs ldiv malloc mblen mbstowcs mbtowc
352 qsort realloc strtod strtol strtoul wcstombs wctomb)],
353
354 string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
355 strchr strcmp strcoll strcpy strcspn strerror strlen
356 strncat strncmp strncpy strpbrk strrchr strspn strstr
357 strtok strxfrm)],
358
359 sys_stat_h => [qw(S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
360 S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISLNK S_ISREG S_ISSOCK
361 S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR
362 fstat mkfifo)],
363
364 sys_times_h => [],
365
366 sys_types_h => [],
367
368 sys_utsname_h => [qw(uname)],
369
370 sys_wait_h => [qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED
371 WNOHANG WSTOPSIG WTERMSIG WUNTRACED)],
372
373 termios_h => [qw( B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400
374 B300 B38400 B4800 B50 B600 B75 B9600 BRKINT CLOCAL
375 CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB ECHO ECHOE ECHOK
376 ECHONL HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR
377 INLCR INPCK ISIG ISTRIP IXOFF IXON NCCS NOFLSH OPOST
378 PARENB PARMRK PARODD TCIFLUSH TCIOFF TCIOFLUSH TCION
379 TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW
380 TOSTOP VEOF VEOL VERASE VINTR VKILL VMIN VQUIT VSTART
381 VSTOP VSUSP VTIME
382 cfgetispeed cfgetospeed cfsetispeed cfsetospeed tcdrain
383 tcflow tcflush tcgetattr tcsendbreak tcsetattr )],
384
385 time_h => [qw(CLK_TCK CLOCKS_PER_SEC NULL asctime clock ctime
386 difftime mktime strftime tzset tzname)],
387
388 unistd_h => [qw(F_OK NULL R_OK SEEK_CUR SEEK_END SEEK_SET
389 STDERR_FILENO STDIN_FILENO STDOUT_FILENO W_OK X_OK
390 _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON
391 _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX
392 _PC_PIPE_BUF _PC_VDISABLE _POSIX_CHOWN_RESTRICTED
393 _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS
394 _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX
395 _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
396 _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS
397 _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
398 _exit access ctermid cuserid
399 dup2 dup execl execle execlp execv execve execvp
400 fpathconf fsync getcwd getegid geteuid getgid getgroups
401 getpid getuid isatty lseek pathconf pause setgid setpgid
402 setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)],
403
404 utime_h => [],
405);
406
4071900nsif ($^O eq 'MSWin32') {
408 $default_export_tags{winsock_h} = [qw(
409 WSAEINTR WSAEBADF WSAEACCES WSAEFAULT WSAEINVAL WSAEMFILE WSAEWOULDBLOCK
410 WSAEINPROGRESS WSAEALREADY WSAENOTSOCK WSAEDESTADDRREQ WSAEMSGSIZE
411 WSAEPROTOTYPE WSAENOPROTOOPT WSAEPROTONOSUPPORT WSAESOCKTNOSUPPORT
412 WSAEOPNOTSUPP WSAEPFNOSUPPORT WSAEAFNOSUPPORT WSAEADDRINUSE
413 WSAEADDRNOTAVAIL WSAENETDOWN WSAENETUNREACH WSAENETRESET WSAECONNABORTED
414 WSAECONNRESET WSAENOBUFS WSAEISCONN WSAENOTCONN WSAESHUTDOWN
415 WSAETOOMANYREFS WSAETIMEDOUT WSAECONNREFUSED WSAELOOP WSAENAMETOOLONG
416 WSAEHOSTDOWN WSAEHOSTUNREACH WSAENOTEMPTY WSAEPROCLIM WSAEUSERS
417 WSAEDQUOT WSAESTALE WSAEREMOTE WSAEDISCON WSAENOMORE WSAECANCELLED
418 WSAEINVALIDPROCTABLE WSAEINVALIDPROVIDER WSAEPROVIDERFAILEDINIT
419 WSAEREFUSED)];
420}
421
422my %other_export_tags = ( # cf. exports policy below
423 fenv_h => [qw(
424 FE_DOWNWARD FE_TONEAREST FE_TOWARDZERO FE_UPWARD fegetround fesetround
425 )],
426
427 math_h_c99 => [ @{$default_export_tags{math_h}}, qw(
428 Inf NaN acosh asinh atanh cbrt copysign erf erfc exp2 expm1 fdim fma
429 fmax fmin fpclassify hypot ilogb isfinite isgreater isgreaterequal
430 isinf isless islessequal islessgreater isnan isnormal isunordered j0 j1
431 jn lgamma log1p log2 logb lrint lround nan nearbyint nextafter nexttoward
432 remainder remquo rint round scalbn signbit tgamma trunc y0 y1 yn
433 )],
434
435 netdb_h => [qw(EAI_AGAIN EAI_BADFLAGS EAI_FAIL
436 EAI_FAMILY EAI_MEMORY EAI_NONAME
437 EAI_OVERFLOW EAI_SERVICE EAI_SOCKTYPE
438 EAI_SYSTEM)],
439
440118µs stdlib_h_c99 => [ @{$default_export_tags{stdlib_h}}, 'strtold' ],
441
442 sys_resource_h => [qw(PRIO_PROCESS PRIO_PGRP PRIO_USER)],
443
444 sys_socket_h => [qw(
445 MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK MSG_TRUNC MSG_WAITALL
446 )],
447
448 nan_payload => [ qw(getpayload setpayload setpayloadsig issignaling) ],
449
450 signal_h_si_code => [qw(
451 ILL_ILLOPC ILL_ILLOPN ILL_ILLADR ILL_ILLTRP ILL_PRVOPC ILL_PRVREG
452 ILL_COPROC ILL_BADSTK
453 FPE_INTDIV FPE_INTOVF FPE_FLTDIV FPE_FLTOVF FPE_FLTUND
454 FPE_FLTRES FPE_FLTINV FPE_FLTSUB
455 SEGV_MAPERR SEGV_ACCERR
456 BUS_ADRALN BUS_ADRERR BUS_OBJERR
457 TRAP_BRKPT TRAP_TRACE
458 CLD_EXITED CLD_KILLED CLD_DUMPED CLD_TRAPPED CLD_STOPPED CLD_CONTINUED
459 POLL_IN POLL_OUT POLL_MSG POLL_ERR POLL_PRI POLL_HUP
460 SI_USER SI_QUEUE SI_TIMER SI_ASYNCIO SI_MESGQ
461 )],
462);
463
464# exports policy:
465# - new functions may not be added to @EXPORT, only to @EXPORT_OK
466# - new SHOUTYCONSTANTS are OK to add to @EXPORT
467
468{
469 # De-duplicate the export list:
47021µs my ( %export, %export_ok );
4711150µs @export {map {@$_} values %default_export_tags} = ();
472141µs @export_ok{map {@$_} values %other_export_tags} = ();
473 # Doing the de-dup with a temporary hash has the advantage that the SVs in
474 # @EXPORT are actually shared hash key scalars, which will save some memory.
475121µs our @EXPORT = keys %export;
476
477 # you do not want to add symbols to the following list. add a new tag instead
478 our @EXPORT_OK = (qw(close lchown nice open pipe read sleep times write
479 printf sprintf),
480150µs grep {!exists $export{$_}} keys %reimpl, keys %replacement, keys %export_ok);
481
482124µs our %EXPORT_TAGS = ( %default_export_tags, %other_export_tags );
483}
484
48516µsrequire Exporter;
486}
487
488package POSIX::SigAction;
489
490sub new { bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0, SAFE => 0}, $_[0] }
491sub handler { $_[0]->{HANDLER} = $_[1] if @_ > 1; $_[0]->{HANDLER} };
492sub mask { $_[0]->{MASK} = $_[1] if @_ > 1; $_[0]->{MASK} };
493sub flags { $_[0]->{FLAGS} = $_[1] if @_ > 1; $_[0]->{FLAGS} };
494sub safe { $_[0]->{SAFE} = $_[1] if @_ > 1; $_[0]->{SAFE} };
495
496{
4971300nspackage POSIX::SigSet;
498# This package is here entirely to make sure that POSIX::SigSet is seen by the
499# PAUSE indexer, so that it will always be clearly indexed in core. This is to
500# prevent the accidental case where a third-party distribution can accidentally
501# claim the POSIX::SigSet package, as occurred in 2011-12. -- rjbs, 2011-12-30
502}
503
504package POSIX::SigRt;
505
5061123µsrequire Tie::Hash;
507
50816µsour @ISA = 'Tie::StdHash';
509
510our ($_SIGRTMIN, $_SIGRTMAX, $_sigrtn);
511
5121300nsour $SIGACTION_FLAGS = 0;
513
514sub _init {
515 $_SIGRTMIN = &POSIX::SIGRTMIN;
516 $_SIGRTMAX = &POSIX::SIGRTMAX;
517 $_sigrtn = $_SIGRTMAX - $_SIGRTMIN;
518}
519
520sub _croak {
521 &_init unless defined $_sigrtn;
522 die "POSIX::SigRt not available" unless defined $_sigrtn && $_sigrtn > 0;
523}
524
525sub _getsig {
526 &_croak;
527 my $rtsig = $_[0];
528 # Allow (SIGRT)?MIN( + n)?, a common idiom when doing these things in C.
529 $rtsig = $_SIGRTMIN + ($1 || 0)
530 if $rtsig =~ /^(?:(?:SIG)?RT)?MIN(\s*\+\s*(\d+))?$/;
531 return $rtsig;
532}
533
534sub _exist {
535 my $rtsig = _getsig($_[1]);
536 my $ok = $rtsig >= $_SIGRTMIN && $rtsig <= $_SIGRTMAX;
537 ($rtsig, $ok);
538}
539
540sub _check {
541 my ($rtsig, $ok) = &_exist;
542 die "No POSIX::SigRt signal $_[1] (valid range SIGRTMIN..SIGRTMAX, or $_SIGRTMIN..$_SIGRTMAX)"
543 unless $ok;
544 return $rtsig;
545}
546
547sub new {
548 my ($rtsig, $handler, $flags) = @_;
549 my $sigset = POSIX::SigSet->new($rtsig);
550 my $sigact = POSIX::SigAction->new($handler, $sigset, $flags);
551 POSIX::sigaction($rtsig, $sigact);
552}
553
554sub EXISTS { &_exist }
555sub FETCH { my $rtsig = &_check;
556 my $oa = POSIX::SigAction->new();
557 POSIX::sigaction($rtsig, undef, $oa);
558 return $oa->{HANDLER} }
559sub STORE { my $rtsig = &_check; new($rtsig, $_[2], $SIGACTION_FLAGS) }
560sub DELETE { delete $SIG{ &_check } }
561sub CLEAR { &_exist; delete @SIG{ &POSIX::SIGRTMIN .. &POSIX::SIGRTMAX } }
562sub SCALAR { &_croak; $_sigrtn + 1 }
563
564122µs12µstie %POSIX::SIGRT, 'POSIX::SigRt';
# spent 2µs making 1 call to Tie::StdHash::TIEHASH
565# and the expression on the line above is true, so we return true.










Spreadsheet-ParseXLSX-0.35/nytprof/bug-md-11-t-1-line.html0000644000175000017500000021510114576335353021746 0ustar michamicha Profile of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:22 2024

Filename/home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
StatementsExecuted 13 statements in 2.63ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
13179705428790ms790msCORE::::match CORE::match (xsub)
338267329.0ms29.0msCORE::::select CORE::select (xsub)
5972275.47ms5.47msCORE::::regcomp CORE::regcomp (xsub)
1113.44ms143msmain::::BEGIN@7 main::BEGIN@7
1112.93ms53.3msmain::::BEGIN@5 main::BEGIN@5
1112.00ms2.03msmain::::BEGIN@4 main::BEGIN@4
267543141.18ms1.18msCORE::::subst CORE::subst (xsub)
5911617µs617µsCORE::::read CORE::read (xsub)
69443240µs240µsCORE::::substcont CORE::substcont (xsub)
1322165µs165µsCORE::::open CORE::open (xsub)
175641087µs87µsCORE::::qr CORE::qr (xsub)
183382µs1.50msCORE::::sort CORE::sort (xsub)
22175µs75µsCORE::::print CORE::print (xsub)
1813158µs58µsInternals::::SvREADONLYInternals::SvREADONLY (xsub)
281146µs46µsCORE::::seek CORE::seek (xsub)
3232631µs31µsCORE::::pack CORE::pack (xsub)
11128µs47µsmain::::BEGIN@3 main::BEGIN@3
396424µs24µsCORE::::unpack CORE::unpack (xsub)
651116µs16µsCORE::::readline CORE::readline (xsub)
122216µs16µsCORE::::binmode CORE::binmode (xsub)
11116µs16µsFcntl::::O_NOINHERIT Fcntl::O_NOINHERIT
51112µs12µsCORE::::ftdir CORE::ftdir (xsub)
32211µs11µsCORE::::close CORE::close (xsub)
1118µs8µsCORE::::fteexec CORE::fteexec (xsub)
1116µs7µsFcntl::::O_EXLOCK Fcntl::O_EXLOCK
1115µs6µsFcntl::::O_TEMPORARY Fcntl::O_TEMPORARY
1114µs4µsversion::::(bool version::(bool (xsub)
1113µs3µsCORE::::symlink CORE::symlink (xsub)
9112µs2µsCORE::::tell CORE::tell (xsub)
1112µs2µsversion::::(cmp version::(cmp (xsub)
1112µs2µsInternals::::VInternals::V (xsub)
0000s0smain::::RUNTIME main::RUNTIME
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
06376µsProfile data that couldn't be associated with a specific line:
# spent 308µs making 2 calls to Test2::API::END, avg 154µs/call # spent 26µs making 1 call to File::Temp::END # spent 25µs making 1 call to Test2::API::INIT # spent 15µs making 1 call to Test::Builder::INIT # spent 3µs making 1 call to Test2::API::Instance::END
1145µs#!/usr/bin/env perl
2
3247µs265µs
# spent 47µs (28+18) within main::BEGIN@3 which was called: # once (28µs+18µs) by main::NULL at line 3
use strict;
# spent 47µs making 1 call to main::BEGIN@3 # spent 18µs making 1 call to strict::import
421.94ms22.05ms
# spent 2.03ms (2.00+25µs) within main::BEGIN@4 which was called: # once (2.00ms+25µs) by main::NULL at line 4
use warnings;
# spent 2.03ms making 1 call to main::BEGIN@4 # spent 22µs making 1 call to warnings::import
5287µs253.4ms
# spent 53.3ms (2.93+50.3) within main::BEGIN@5 which was called: # once (2.93ms+50.3ms) by main::NULL at line 5
use Test::More;
# spent 53.3ms making 1 call to main::BEGIN@5 # spent 137µs making 1 call to Test::Builder::Module::import
6
72472µs2143ms
# spent 143ms (3.44+140) within main::BEGIN@7 which was called: # once (3.44ms+140ms) by main::NULL at line 7
use Spreadsheet::ParseXLSX;
# spent 143ms making 1 call to main::BEGIN@7 # spent 1µs making 1 call to UNIVERSAL::import
8
91100nsmy $wb;
101200nseval {
1112µs270.7s $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-md-11.xlsx');
# spent 70.7s making 1 call to Spreadsheet::ParseXLSX::parse # spent 2µs making 1 call to Spreadsheet::ParseXLSX::new
12};
13
1413µs1275µsok(defined($wb));
# spent 275µs making 1 call to Test::More::ok
15
16127µs1363µsdone_testing;
# spent 363µs making 1 call to Test::More::done_testing
 
# spent 16µs within CORE::binmode which was called 12 times, avg 1µs/call: # 8 times (4µs+0s) by IO::Handle::binmode at line 648 of IO/Handle.pm, avg 562ns/call # 4 times (12µs+0s) by Test2::Util::clone_io at line 195 of Test2/Util.pm, avg 3µs/call
sub CORE::binmode; # opcode
# spent 11µs within CORE::close which was called 3 times, avg 4µs/call: # 2 times (8µs+0s) by IO::Handle::close at line 393 of IO/Handle.pm, avg 4µs/call # once (3µs+0s) by Digest::Perl::MD5::gen_code at line 78 of Digest/Perl/MD5.pm
sub CORE::close; # opcode
# spent 12µs within CORE::ftdir which was called 5 times, avg 2µs/call: # 5 times (12µs+0s) by XML::Parser::BEGIN@17 at line 26 of XML/Parser/Expat.pm, avg 2µs/call
sub CORE::ftdir; # opcode
# spent 8µs within CORE::fteexec which was called: # once (8µs+0s) by Archive::Zip::BEGIN@6 at line 159 of Cwd.pm
sub CORE::fteexec; # opcode
# spent 790ms within CORE::match which was called 1317970 times, avg 599ns/call: # 364369 times (216ms+0s) by XML::Twig::_twig_start at line 2120 of XML/Twig.pm, avg 593ns/call # 364369 times (110ms+0s) by XML::Twig::Elt::new at line 5178 of XML/Twig.pm, avg 301ns/call # 239270 times (176ms+0s) by Spreadsheet::ParseXLSX::_cell_to_row_col at line 1106 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 734ns/call # 202907 times (180ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 419 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 886ns/call # 127292 times (80.4ms+0s) by XML::Twig::_twig_char at line 2487 of XML/Twig.pm, avg 632ns/call # 18180 times (27.8ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] at line 293 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 2µs/call # 368 times (100µs+0s) by Exporter::import at line 54 of Exporter.pm, avg 271ns/call # 213 times (31µs+0s) by Exporter::import at line 57 of Exporter.pm, avg 146ns/call # 179 times (156µs+0s) by constant::import at line 99 of constant.pm, avg 874ns/call # 95 times (29µs+0s) by warnings::import at line 393 of warnings.pm, avg 309ns/call # 70 times (31µs+0s) by Archive::Zip::Archive::membersMatching at line 106 of Archive/Zip/Archive.pm, avg 439ns/call # 68 times (10µs+0s) by Archive::Zip::BEGIN@7 at line 137 of IO/File.pm, avg 140ns/call # 64 times (15µs+0s) by Digest::Perl::MD5::gen_code at line 61 of Digest/Perl/MD5.pm, avg 228ns/call # 55 times (58µs+0s) by vars::import at line 15 of vars.pm, avg 1µs/call # 55 times (14µs+0s) by vars::import at line 16 of vars.pm, avg 251ns/call # 55 times (12µs+0s) by vars::import at line 28 of vars.pm, avg 209ns/call # 27 times (39µs+0s) by XML::Twig::_parse_xpath_handler at line 1680 of XML/Twig.pm, avg 1µs/call # 27 times (10µs+0s) by Exporter::Heavy::heavy_export at line 76 of Exporter/Heavy.pm, avg 381ns/call # 27 times (3µs+0s) by XML::Twig::_tag_cond at line 1766 of XML/Twig.pm, avg 115ns/call # 24 times (7µs+0s) by XML::Twig::Elt::_install_xpath at line 7003 of XML/Twig.pm, avg 279ns/call # 21 times (16µs+0s) by XML::Twig::_set_special_handler at line 1530 of XML/Twig.pm, avg 786ns/call # 21 times (8µs+0s) by XML::Twig::_parse_xpath_handler at line 1675 of XML/Twig.pm, avg 400ns/call # 21 times (8µs+0s) by XML::Twig::_set_pi_handler at line 1575 of XML/Twig.pm, avg 381ns/call # 21 times (4µs+0s) by XML::Twig::_set_level_handler at line 1589 of XML/Twig.pm, avg 210ns/call # 21 times (3µs+0s) by XML::Twig::_set_regexp_handler at line 1605 of XML/Twig.pm, avg 133ns/call # 21 times (2µs+0s) by XML::Twig::_parse_xpath_handler at line 1634 of XML/Twig.pm, avg 105ns/call # 18 times (9µs+0s) by IO::File::open at line 168 of IO/File.pm, avg 489ns/call # 17 times (9µs+0s) by JSON::PP::BEGIN@688 at line 693 of JSON/PP.pm, avg 524ns/call # 10 times (9µs+0s) by XML::Twig::Elt::_install_xpath at line 7019 of XML/Twig.pm, avg 890ns/call # 10 times (2µs+0s) by File::Basename::fileparse_set_fstype at line 384 of File/Basename.pm, avg 200ns/call # 9 times (10µs+0s) by IO::Handle::_open_mode_string at line 362 of IO/Handle.pm, avg 1µs/call # 9 times (2µs+0s) by Exporter::Heavy::heavy_export at line 82 of Exporter/Heavy.pm, avg 233ns/call # 7 times (15µs+0s) by XML::Twig::Elt::_gi_test at line 5885 of XML/Twig.pm, avg 2µs/call # 7 times (12µs+0s) by Compress::Raw::Zlib::Parameters::_checkType at line 337 of Compress/Raw/Zlib.pm, avg 2µs/call # 7 times (6µs+0s) by Compress::Raw::Zlib::Parameters::_checkType at line 327 of Compress/Raw/Zlib.pm, avg 871ns/call # 6 times (5µs+0s) by XML::Twig::_twig_default at line 3028 of XML/Twig.pm, avg 867ns/call # 5 times (3µs+0s) by XML::Twig::Elt::_install_xpath at line 7048 of XML/Twig.pm, avg 660ns/call # 4 times (900ns+0s) by base::import at line 159 of base.pm, avg 225ns/call # 3 times (3µs+0s) by Test2::Hub::is_passing at line 484 of Test2/Hub.pm, avg 1µs/call # 3 times (2µs+0s) by CryptX::BEGIN@13 at line 72 of JSON.pm, avg 800ns/call # 2 times (1µs+0s) by Config::AUTOLOAD at line 1424 of Config_heavy.pl, avg 650ns/call # once (19µs+0s) by Config::fetch_string at line 1459 of Config_heavy.pl # once (13µs+0s) by Test2::Event::Plan::init at line 34 of Test2/Event/Plan.pm # once (3µs+0s) by main::BEGIN@4 at line 14 of warnings.pm # once (3µs+0s) by Encode::BEGIN@53 at line 4 of Encode/Alias.pm # once (3µs+0s) by Encode::BEGIN@9 at line 10 of Encode.pm # once (3µs+0s) by Archive::Zip::Archive::BEGIN@12 at line 5 of Encode/Config.pm # once (3µs+0s) by Encode::BEGIN@54 at line 4 of Encode/MIME/Name.pm # once (2µs+0s) by parent::import at line 6 of Encode/Encoding.pm # once (2µs+0s) by XML::Twig::BEGIN@1125 at line 67 of File/Glob.pm # once (1µs+0s) by Test2::Hub::plan at line 509 of Test2/Hub.pm # once (1µs+0s) by Test2::Util::_check_for_sig_sys at line 168 of Test2/Util.pm # once (900ns+0s) by Config::AUTOLOAD at line 81 of Config.pm # once (400ns+0s) by Archive::Zip::BEGIN@6 at line 171 of Cwd.pm
sub CORE::match; # opcode
# spent 165µs within CORE::open which was called 13 times, avg 13µs/call: # 9 times (118µs+0s) by IO::File::open at line 175 of IO/File.pm, avg 13µs/call # 4 times (47µs+0s) by Test2::Util::clone_io at line 191 of Test2/Util.pm, avg 12µs/call
sub CORE::open; # opcode
# spent 31µs within CORE::pack which was called 32 times, avg 963ns/call: # once (9µs+0s) by Config::AUTOLOAD at line 1417 of Config_heavy.pl # once (3µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 185 of Archive/Zip.pm # once (2µs+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 379 of OLE/Storage_Lite.pm # once (1µs+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 369 of OLE/Storage_Lite.pm # once (1µs+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 99 of OLE/Storage_Lite.pm # once (1µs+0s) by Time::Local::_daygm at line 102 of Time/Local.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@14 at line 194 of Spreadsheet/ParseExcel.pm # once (1µs+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 123 of OLE/Storage_Lite.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 284 of Archive/Zip.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 886 of Archive/Zip/Member.pm # once (1µs+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 663 of OLE/Storage_Lite.pm # once (900ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 142 of OLE/Storage_Lite.pm # once (900ns+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 1011 of Archive/Zip/Member.pm # once (700ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 669 of OLE/Storage_Lite.pm # once (700ns+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 290 of Archive/Zip.pm # once (600ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 156 of OLE/Storage_Lite.pm # once (600ns+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 296 of Archive/Zip.pm # once (500ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 699 of OLE/Storage_Lite.pm # once (400ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 400 of OLE/Storage_Lite.pm # once (300ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 675 of OLE/Storage_Lite.pm # once (300ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 385 of OLE/Storage_Lite.pm # once (300ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 378 of OLE/Storage_Lite.pm # once (300ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 370 of OLE/Storage_Lite.pm # once (200ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 678 of OLE/Storage_Lite.pm # once (200ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 685 of OLE/Storage_Lite.pm # once (200ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 371 of OLE/Storage_Lite.pm # once (200ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 701 of OLE/Storage_Lite.pm # once (200ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 682 of OLE/Storage_Lite.pm # once (200ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 386 of OLE/Storage_Lite.pm # once (100ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 373 of OLE/Storage_Lite.pm # once (100ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 372 of OLE/Storage_Lite.pm # once (100ns+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 374 of OLE/Storage_Lite.pm
sub CORE::pack; # opcode
# spent 75µs within CORE::print which was called 2 times, avg 38µs/call: # once (71µs+0s) by Test2::Formatter::TAP::print_optimal_pass at line 156 of Test2/Formatter/TAP.pm # once (5µs+0s) by Test2::Formatter::TAP::write at line 125 of Test2/Formatter/TAP.pm
sub CORE::print; # opcode
# spent 87µs within CORE::qr which was called 175 times, avg 499ns/call: # 21 times (13µs+0s) by XML::Twig::_set_handler at line 1495 of XML/Twig.pm, avg 638ns/call # 21 times (5µs+0s) by XML::Twig::_set_handler at line 1499 of XML/Twig.pm, avg 229ns/call # 21 times (5µs+0s) by XML::Twig::_set_handler at line 1497 of XML/Twig.pm, avg 229ns/call # 21 times (4µs+0s) by XML::Twig::_set_handler at line 1498 of XML/Twig.pm, avg 214ns/call # 21 times (4µs+0s) by XML::Twig::_set_handler at line 1496 of XML/Twig.pm, avg 214ns/call # 7 times (8µs+0s) by Spreadsheet::ParseXLSX::_zip_file_member at line 1042 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 1µs/call # 3 times (700ns+0s) by Encode::Alias::init_aliases at line 151 of Encode/Alias.pm, avg 233ns/call # 3 times (700ns+0s) by Encode::Alias::init_aliases at line 146 of Encode/Alias.pm, avg 233ns/call # 2 times (6µs+0s) by URI::BEGIN@41 at line 162 of URI/Escape.pm, avg 3µs/call # once (9µs+0s) by Encode::Alias::init_aliases at line 249 of Encode/Alias.pm # once (2µs+0s) by Encode::Alias::init_aliases at line 245 of Encode/Alias.pm # once (2µs+0s) by Encode::Alias::init_aliases at line 246 of Encode/Alias.pm # once (2µs+0s) by Compress::Raw::Zlib::BEGIN@113 at line 20 of constant.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 106 of XML/Twig.pm # once (2µs+0s) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 at line 30 of Spreadsheet/ParseExcel/Utility.pm # once (2µs+0s) by Archive::Zip::Archive::BEGIN@7 at line 773 of File/Find.pm # once (1µs+0s) by Storable::BEGIN@487 at line 498 of Storable.pm # once (1µs+0s) by JSON::PP::BEGIN@53 at line 59 of JSON/PP.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 29 of Archive/Zip/Archive.pm # once (900ns+0s) by Encode::Alias::init_aliases at line 141 of Encode/Alias.pm # once (800ns+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 145 of XML/Twig.pm # once (700ns+0s) by Encode::Alias::init_aliases at line 205 of Encode/Alias.pm # once (700ns+0s) by Encode::Alias::init_aliases at line 167 of Encode/Alias.pm # once (500ns+0s) by Encode::Alias::init_aliases at line 258 of Encode/Alias.pm # once (500ns+0s) by Encode::Alias::init_aliases at line 274 of Encode/Alias.pm # once (400ns+0s) by Archive::Zip::Archive::BEGIN@7 at line 774 of File/Find.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 145 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 270 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 189 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 259 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 210 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 250 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 254 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 277 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 264 of Encode/Alias.pm # once (400ns+0s) by Encode::Alias::init_aliases at line 228 of Encode/Alias.pm # once (400ns+0s) by Compress::Raw::Zlib::BEGIN@113 at line 21 of constant.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 271 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 163 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 244 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 185 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 221 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 223 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 178 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 241 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 257 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 238 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 265 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 262 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 158 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 219 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 253 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 247 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 144 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 263 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 248 of Encode/Alias.pm # once (300ns+0s) by Encode::Alias::init_aliases at line 233 of Encode/Alias.pm # once (200ns+0s) by Encode::Alias::init_aliases at line 160 of Encode/Alias.pm # once (200ns+0s) by Encode::Alias::init_aliases at line 234 of Encode/Alias.pm # once (200ns+0s) by Encode::Alias::init_aliases at line 170 of Encode/Alias.pm # once (200ns+0s) by Encode::Alias::init_aliases at line 266 of Encode/Alias.pm # once (200ns+0s) by Encode::Alias::init_aliases at line 183 of Encode/Alias.pm # once (200ns+0s) by Encode::Alias::init_aliases at line 173 of Encode/Alias.pm # once (200ns+0s) by Compress::Raw::Zlib::BEGIN@113 at line 22 of constant.pm
sub CORE::qr; # opcode
# spent 617µs within CORE::read which was called 59 times, avg 10µs/call: # 59 times (617µs+0s) by IO::Handle::read at line 449 of IO/Handle.pm, avg 10µs/call
sub CORE::read; # opcode
# spent 16µs within CORE::readline which was called 65 times, avg 254ns/call: # 65 times (16µs+0s) by Digest::Perl::MD5::gen_code at line 59 of Digest/Perl/MD5.pm, avg 254ns/call
sub CORE::readline; # opcode
# spent 5.47ms within CORE::regcomp which was called 597 times, avg 9µs/call: # 179 times (97µs+0s) by constant::import at line 99 of constant.pm, avg 542ns/call # 111 times (406µs+0s) by XML::Twig::Elt::_install_cond at line 5834 of XML/Twig.pm, avg 4µs/call # 70 times (24µs+0s) by Archive::Zip::Archive::membersMatching at line 106 of Archive/Zip/Archive.pm, avg 350ns/call # 33 times (31µs+0s) by XML::Twig::_parse_xpath_handler at line 1659 of XML/Twig.pm, avg 948ns/call # 27 times (292µs+0s) by XML::Twig::_parse_xpath_handler at line 1680 of XML/Twig.pm, avg 11µs/call # 21 times (989µs+0s) by XML::Twig::_parse_xpath_handler at line 1641 of XML/Twig.pm, avg 47µs/call # 21 times (792µs+0s) by XML::Twig::_set_handler at line 1505 of XML/Twig.pm, avg 38µs/call # 21 times (692µs+0s) by XML::Twig::_set_handler at line 1499 of XML/Twig.pm, avg 33µs/call # 21 times (689µs+0s) by XML::Twig::_parse_xpath_handler at line 1632 of XML/Twig.pm, avg 33µs/call # 21 times (51µs+0s) by XML::Twig::_set_handler at line 1495 of XML/Twig.pm, avg 2µs/call # 21 times (39µs+0s) by XML::Twig::_set_handler at line 1496 of XML/Twig.pm, avg 2µs/call # 21 times (36µs+0s) by XML::Twig::_set_pi_handler at line 1575 of XML/Twig.pm, avg 2µs/call # 10 times (22µs+0s) by File::Basename::fileparse_set_fstype at line 384 of File/Basename.pm, avg 2µs/call # 7 times (82µs+0s) by Spreadsheet::ParseXLSX::_zip_file_member at line 1042 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 12µs/call # 5 times (236µs+0s) by XML::Twig::Elt::_install_xpath at line 7065 of XML/Twig.pm, avg 47µs/call # 2 times (50µs+0s) by XML::Twig::Elt::_install_xpath at line 7061 of XML/Twig.pm, avg 25µs/call # once (509µs+0s) by XML::Twig::Elt::_install_xpath at line 6991 of XML/Twig.pm # once (224µs+0s) by Spreadsheet::ParseXLSX::BEGIN@15 at line 106 of XML/Twig.pm # once (165µs+0s) by XML::Twig::Elt::_install_xpath at line 7042 of XML/Twig.pm # once (24µs+0s) by XML::Twig::_set_special_handler at line 1530 of XML/Twig.pm # once (14µs+0s) by JSON::PP::BEGIN@53 at line 59 of JSON/PP.pm # once (9µs+0s) by Config::fetch_string at line 1459 of Config_heavy.pl
sub CORE::regcomp; # opcode
# spent 46µs within CORE::seek which was called 28 times, avg 2µs/call: # 28 times (46µs+0s) by IO::Seekable::seek at line 113 of IO/Seekable.pm, avg 2µs/call
sub CORE::seek; # opcode
# spent 29.0ms within CORE::select which was called 33826 times, avg 856ns/call: # 33799 times (28.9ms+0s) by XML::Twig::_twig_start_check_roots at line 4131 of XML/Twig.pm, avg 856ns/call # 7 times (5µs+0s) by XML::Twig::_twig_end_check_roots at line 4196 of XML/Twig.pm, avg 657ns/call # 4 times (3µs+0s) by Test2::Util::clone_io at line 197 of Test2/Util.pm, avg 650ns/call # 4 times (2µs+0s) by Test2::Formatter::TAP::_autoflush at line 34 of Test2/Formatter/TAP.pm, avg 400ns/call # 4 times (900ns+0s) by Test2::Util::clone_io at line 199 of Test2/Util.pm, avg 225ns/call # 4 times (700ns+0s) by Test2::Formatter::TAP::_autoflush at line 36 of Test2/Formatter/TAP.pm, avg 175ns/call # 4 times (500ns+0s) by Test2::Util::clone_io at line 201 of Test2/Util.pm, avg 125ns/call
sub CORE::select; # opcode
# spent 1.50ms (82µs+1.42) within CORE::sort which was called 18 times, avg 83µs/call: # 16 times (81µs+1.42ms) by XML::Twig::_unique_elts at line 3696 of XML/Twig.pm, avg 94µs/call # once (600ns+0s) by POSIX::import at line 182 of POSIX.pm # once (300ns+0s) by File::Temp::cleanup at line 884 of File/Temp.pm
sub CORE::sort; # opcode
# spent 1.18ms within CORE::subst which was called 2675 times, avg 441ns/call: # 1359 times (72µs+0s) by Exporter::import at line 46 of Exporter.pm, avg 53ns/call # 350 times (40µs+0s) by Exporter::Heavy::heavy_export at line 199 of Exporter/Heavy.pm, avg 115ns/call # 179 times (168µs+0s) by constant::import at line 87 of constant.pm, avg 940ns/call # 111 times (107µs+0s) by XML::Twig::Elt::_install_cond at line 5834 of XML/Twig.pm, avg 966ns/call # 64 times (86µs+0s) by Digest::Perl::MD5::gen_code at line 66 of Digest/Perl/MD5.pm, avg 1µs/call # 64 times (21µs+0s) by Digest::Perl::MD5::gen_code at line 64 of Digest/Perl/MD5.pm, avg 333ns/call # 64 times (7µs+0s) by Digest::Perl::MD5::gen_code at line 65 of Digest/Perl/MD5.pm, avg 103ns/call # 61 times (6µs+0s) by Exporter::Heavy::_rebuild_cache at line 34 of Exporter/Heavy.pm, avg 97ns/call # 37 times (20µs+0s) by XML::Twig::Elt::_install_cond at line 5823 of XML/Twig.pm, avg 543ns/call # 33 times (14µs+0s) by XML::Twig::_parse_xpath_handler at line 1659 of XML/Twig.pm, avg 439ns/call # 30 times (25µs+0s) by XML::Twig::Elt::_install_xpath at line 7065 of XML/Twig.pm, avg 820ns/call # 27 times (5µs+0s) by XML::Twig::_parse_xpath_handler at line 1698 of XML/Twig.pm, avg 196ns/call # 24 times (21µs+0s) by XML::Twig::Elt::_install_xpath at line 7042 of XML/Twig.pm, avg 871ns/call # 23 times (9µs+0s) by Exporter::Heavy::heavy_export at line 86 of Exporter/Heavy.pm, avg 374ns/call # 23 times (3µs+0s) by Exporter::Heavy::heavy_export at line 84 of Exporter/Heavy.pm, avg 126ns/call # 21 times (122µs+0s) by XML::Twig::_set_handler at line 1505 of XML/Twig.pm, avg 6µs/call # 21 times (87µs+0s) by XML::Twig::_parse_xpath_handler at line 1632 of XML/Twig.pm, avg 4µs/call # 21 times (32µs+0s) by XML::Twig::_parse_xpath_handler at line 1641 of XML/Twig.pm, avg 2µs/call # 21 times (9µs+0s) by XML::Twig::_parse_xpath_handler at line 1636 of XML/Twig.pm, avg 410ns/call # 17 times (32µs+0s) by Exporter::as_heavy at line 17 of Exporter.pm, avg 2µs/call # 15 times (124µs+0s) by XML::Twig::Elt::_install_xpath at line 6991 of XML/Twig.pm, avg 8µs/call # 15 times (20µs+0s) by XML::Twig::Elt::_install_xpath at line 6981 of XML/Twig.pm, avg 1µs/call # 14 times (10µs+0s) by Compress::Raw::Zlib::Parameters::parse at line 269 of Compress/Raw/Zlib.pm, avg 686ns/call # 10 times (1µs+0s) by XML::Twig::Elt::_install_xpath at line 7061 of XML/Twig.pm, avg 140ns/call # 9 times (18µs+0s) by XML::Twig::Elt::_install_xpath at line 7003 of XML/Twig.pm, avg 2µs/call # 9 times (10µs+0s) by IO::Handle::_open_mode_string at line 362 of IO/Handle.pm, avg 1µs/call # 7 times (10µs+0s) by Compress::Raw::Zlib::AUTOLOAD at line 118 of Compress/Raw/Zlib.pm, avg 1µs/call # 7 times (3µs+0s) by XML::Twig::_twig_final at line 2732 of XML/Twig.pm, avg 386ns/call # 6 times (15µs+0s) by parent::import at line 15 of parent.pm, avg 2µs/call # 5 times (11µs+0s) by XML::Twig::Elt::_install_xpath at line 7045 of XML/Twig.pm, avg 2µs/call # 5 times (4µs+0s) by XML::Twig::Elt::_install_xpath at line 7044 of XML/Twig.pm, avg 840ns/call # 5 times (3µs+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] at line 976 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 680ns/call # 5 times (600ns+0s) by XML::Twig::Elt::_install_xpath at line 7048 of XML/Twig.pm, avg 120ns/call # 4 times (7µs+0s) by base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] at line 72 of base.pm, avg 2µs/call # once (43µs+0s) by Config::AUTOLOAD at line 1435 of Config_heavy.pl # once (5µs+0s) by Config::AUTOLOAD at line 1418 of Config_heavy.pl # once (3µs+0s) by Time::HiRes::AUTOLOAD at line 60 of Time/HiRes.pm # once (2µs+0s) by POSIX::import at line 180 of POSIX.pm # once (1µs+0s) by CryptX::BEGIN@13 at line 68 of JSON.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 967 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (700ns+0s) by JSON::Backend::PP::init at line 355 of JSON.pm # once (600ns+0s) by XML::Twig::BEGIN@148 at line 153 of XML/Twig.pm # once (200ns+0s) by XML::Twig::BEGIN@148 at line 156 of XML/Twig.pm
sub CORE::subst; # opcode
# spent 240µs within CORE::substcont which was called 694 times, avg 345ns/call: # 672 times (199µs+0s) by Digest::Perl::MD5::gen_code at line 64 of Digest/Perl/MD5.pm, avg 296ns/call # 18 times (10µs+0s) by IO::Handle::_open_mode_string at line 362 of IO/Handle.pm, avg 544ns/call # 2 times (19µs+0s) by Config::AUTOLOAD at line 1435 of Config_heavy.pl, avg 9µs/call # 2 times (12µs+0s) by Config::AUTOLOAD at line 1418 of Config_heavy.pl, avg 6µs/call
sub CORE::substcont; # opcode
# spent 3µs within CORE::symlink which was called: # once (3µs+0s) by Archive::Zip::Member::BEGIN@37 at line 39 of Archive/Zip/Member.pm
sub CORE::symlink; # opcode
# spent 2µs within CORE::tell which was called 9 times, avg 233ns/call: # 9 times (2µs+0s) by IO::Seekable::tell at line 123 of IO/Seekable.pm, avg 233ns/call
sub CORE::tell; # opcode
# spent 24µs within CORE::unpack which was called 39 times, avg 605ns/call: # 19 times (10µs+0s) by Archive::Zip::_readSignature at line 520 of Archive/Zip.pm, avg 532ns/call # 10 times (5µs+0s) by Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader at line 392 of Archive/Zip/ZipFileMember.pm, avg 540ns/call # 7 times (5µs+0s) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 147 of Archive/Zip/ZipFileMember.pm, avg 657ns/call # once (2µs+0s) by Config::AUTOLOAD at line 1417 of Config_heavy.pl # once (800ns+0s) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 888 of Archive/Zip/Archive.pm # once (600ns+0s) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 966 of Archive/Zip/Archive.pm
sub CORE::unpack; # opcode
# spent 58µs within Internals::SvREADONLY which was called 181 times, avg 320ns/call: # 179 times (57µs+0s) by constant::import at line 164 of constant.pm, avg 320ns/call # once (600ns+0s) by constant::BEGIN@24 at line 33 of constant.pm # once (100ns+0s) by constant::BEGIN@24 at line 34 of constant.pm
sub Internals::SvREADONLY; # xsub
# spent 2µs within Internals::V which was called: # once (2µs+0s) by Config::AUTOLOAD at line 1423 of Config_heavy.pl
sub Internals::V; # xsub
# spent 4µs within version::(bool which was called: # once (4µs+0s) by Test2::Util::BEGIN@8 at line 59 of Config.pm
sub version::(bool; # xsub
# spent 2µs within version::(cmp which was called: # once (2µs+0s) by Test2::Util::BEGIN@8 at line 62 of Config.pm
sub version::(cmp; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/File-Spec-pm-85-line.html0000644000175000017500000004304414576335353022375 0ustar michamicha Profile of File/Spec.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/File/Spec.pm
StatementsExecuted 9 statements in 143µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs10µsFile::Spec::::BEGIN@3File::Spec::BEGIN@3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Spec;
2
3271µs212µs
# spent 10µs (9+2) within File::Spec::BEGIN@3 which was called: # once (9µs+2µs) by Archive::Zip::BEGIN@10 at line 3
use strict;
# spent 10µs making 1 call to File::Spec::BEGIN@3 # spent 2µs making 1 call to strict::import
4
51300nsour $VERSION = '3.88';
61600ns$VERSION =~ tr/_//d;
7
812µsmy %module = (
9 MSWin32 => 'Win32',
10 os2 => 'OS2',
11 VMS => 'VMS',
12 NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
13 symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
14 dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
15 cygwin => 'Cygwin',
16 amigaos => 'AmigaOS');
17
18
191900nsmy $module = $module{$^O} || 'Unix';
20
21157µsrequire "File/Spec/$module.pm";
2216µsour @ISA = ("File::Spec::$module");
23
2415µs1;
25
26__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 115)[XML-Twig-pm-1750]-232-line.html0000644000175000017500000004474114576335353024417 0ustar michamicha Profile of (eval 115)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 115)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 6 statements in 169µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116µs16µsXML::Twig::::BEGIN@1.69XML::Twig::BEGIN@1.69
1116µs16µsXML::Twig::::BEGIN@1.59XML::Twig::BEGIN@1.59
0000s0sXML::Twig::::__ANON__[:17]XML::Twig::__ANON__[:17] (merge of 2 subs)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14164µs453µs
# spent 16µs (6+10) within XML::Twig::BEGIN@1.59 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 16µs (6+10) within XML::Twig::BEGIN@1.69 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1
sub { no warnings;
# spent 20µs making 2 calls to warnings::unimport, avg 10µs/call # spent 16µs making 1 call to XML::Twig::BEGIN@1.69 # spent 16µs making 1 call to XML::Twig::BEGIN@1.59
2my( $stack)= @_;
3my @current_elts= (scalar @$stack);
4my @new_current_elts;
5my $elt;
6
7foreach my $current_elt (@current_elts)
8 { next if( !$current_elt);
9 $current_elt--;
10 $elt= $stack->[$current_elt];
11 if( ($elt->{'##tag'} eq "s:headerFooter")) { push @new_current_elts, $current_elt;}
12 }
13unless( @new_current_elts) { return 0; }
14@current_elts= @new_current_elts;
15@new_current_elts=();
16return q{s:headerFooter};
1725µs }
18;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-About-pm-42-line.html0000644000175000017500000004450514576335353024715 0ustar michamicha Profile of Test2/EventFacet/About.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/About.pm
StatementsExecuted 10 statements in 95µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsTest2::EventFacet::About::::BEGIN@2Test2::EventFacet::About::BEGIN@2
1116µs6µsTest2::EventFacet::About::::BEGIN@7Test2::EventFacet::About::BEGIN@7
1114µs57µsTest2::EventFacet::About::::BEGIN@8Test2::EventFacet::About::BEGIN@8
1114µs20µsTest2::EventFacet::About::::BEGIN@3Test2::EventFacet::About::BEGIN@3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::About;
2220µs212µs
# spent 11µs (9+2) within Test2::EventFacet::About::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Event::BEGIN@14 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::About::BEGIN@2 # spent 2µs making 1 call to strict::import
3232µs237µs
# spent 20µs (4+16) within Test2::EventFacet::About::BEGIN@3 which was called: # once (4µs+16µs) by Test2::Event::BEGIN@14 at line 3
use warnings;
# spent 20µs making 1 call to Test2::EventFacet::About::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7225µs16µs
# spent 6µs within Test2::EventFacet::About::BEGIN@7 which was called: # once (6µs+0s) by Test2::Event::BEGIN@14 at line 7
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 6µs making 1 call to Test2::EventFacet::About::BEGIN@7
8217µs2110µs
# spent 57µs (4+53) within Test2::EventFacet::About::BEGIN@8 which was called: # once (4µs+53µs) by Test2::Event::BEGIN@14 at line 8
use Test2::Util::HashBase qw{ -package -no_display -uuid -eid };
# spent 57µs making 1 call to Test2::EventFacet::About::BEGIN@8 # spent 53µs making 1 call to Test2::Util::HashBase::import
9
1012µs1;
11
12__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 106)[XML-Twig-pm-1750]-223-line.html0000644000175000017500000005145614576335353024420 0ustar michamicha Profile of (eval 106)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 106)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 60 statements in 374µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 4 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
41122µs22µsXML::Twig::::__ANON__[:17]XML::Twig::__ANON__[:17] (merge of 4 subs)
1116µs20µsXML::Twig::::BEGIN@1.57XML::Twig::BEGIN@1.57
1116µs16µsXML::Twig::::BEGIN@1.50XML::Twig::BEGIN@1.50
1116µs16µsXML::Twig::::BEGIN@1.67XML::Twig::BEGIN@1.67
1116µs16µsXML::Twig::::BEGIN@1.60XML::Twig::BEGIN@1.60
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
18338µs8112µs
# spent 20µs (6+13) within XML::Twig::BEGIN@1.57 which was called: # once (6µs+13µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 16µs (6+10) within XML::Twig::BEGIN@1.50 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 16µs (6+10) within XML::Twig::BEGIN@1.67 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 22µs within XML::Twig::__ANON__[(eval 106)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] which was called 4 times, avg 6µs/call: # (data for this subroutine includes 3 others that were merged with it) # 4 times (22µs+0s) by XML::Twig::_handler at line 2405 of XML/Twig.pm, avg 6µs/call # spent 16µs (6+11) within XML::Twig::BEGIN@1.60 which was called: # once (6µs+11µs) by XML::Twig::_parse_xpath_handler at line 1
sub { no warnings;
# spent 44µs making 4 calls to warnings::unimport, avg 11µs/call # spent 20µs making 1 call to XML::Twig::BEGIN@1.57 # spent 16µs making 1 call to XML::Twig::BEGIN@1.50 # spent 16µs making 1 call to XML::Twig::BEGIN@1.60 # spent 16µs making 1 call to XML::Twig::BEGIN@1.67
241µsmy( $stack)= @_;
342µsmy @current_elts= (scalar @$stack);
44800nsmy @new_current_elts;
5my $elt;
6
742µsforeach my $current_elt (@current_elts)
84900ns { next if( !$current_elt);
94700ns $current_elt--;
1041µs $elt= $stack->[$current_elt];
1144µs if( ($elt->{'##tag'} eq "s:dimension")) { push @new_current_elts, $current_elt;}
12 }
134900nsunless( @new_current_elts) { return 0; }
1441µs@current_elts= @new_current_elts;
154700ns@new_current_elts=();
1648µsreturn q{s:dimension};
17411µs }
18;










Spreadsheet-ParseXLSX-0.35/nytprof/Compress-Raw-Zlib-pm-81-line.html0000644000175000017500000042547214576335353024053 0ustar michamicha Profile of Compress/Raw/Zlib.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm
StatementsExecuted 1999 statements in 3.16ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
71112.1ms12.1msCompress::Raw::Zlib::inflateStream::::inflate Compress::Raw::Zlib::inflateStream::inflate (xsub)
111850µs965µsCompress::Raw::Zlib::::BEGIN@113 Compress::Raw::Zlib::BEGIN@113
711295µs450µsCompress::Raw::Zlib::Parameters::::parse Compress::Raw::Zlib::Parameters::parse
111188µs228µsCompress::Raw::Zlib::::BEGIN@10 Compress::Raw::Zlib::BEGIN@10
7021127µs145µsCompress::Raw::Zlib::Parameters::::_checkType Compress::Raw::Zlib::Parameters::_checkType
711120µs722µsCompress::Raw::Zlib::Inflate::::new Compress::Raw::Zlib::Inflate::new
638149µs49µsCompress::Raw::Zlib::Parameters::::value Compress::Raw::Zlib::Parameters::value
71147µs510µsCompress::Raw::Zlib::::ParseParameters Compress::Raw::Zlib::ParseParameters
73244µs58µsCompress::Raw::Zlib::::AUTOLOAD Compress::Raw::Zlib::AUTOLOAD
71140µs40µsCompress::Raw::Zlib::::_inflateInit Compress::Raw::Zlib::_inflateInit (xsub)
558232µs32µsCompress::Raw::Zlib::::__ANON__[:122] Compress::Raw::Zlib::__ANON__[:122]
71125µs25µsCompress::Raw::Zlib::inflateStream::::DESTROY Compress::Raw::Zlib::inflateStream::DESTROY (xsub)
11114µs28µsCompress::Raw::Zlib::::BEGIN@155 Compress::Raw::Zlib::BEGIN@155
71113µs13µsCompress::Raw::Zlib::Parameters::::new Compress::Raw::Zlib::Parameters::new
1118µs42µsCompress::Raw::Zlib::::BEGIN@6 Compress::Raw::Zlib::BEGIN@6
1115µs9µsCompress::Raw::Zlib::::BEGIN@121 Compress::Raw::Zlib::BEGIN@121
7114µs4µsCompress::Raw::Zlib::::constant Compress::Raw::Zlib::constant (xsub)
1114µs5µsCompress::Raw::Zlib::::BEGIN@8 Compress::Raw::Zlib::BEGIN@8
1114µs22µsCompress::Raw::Zlib::::BEGIN@114 Compress::Raw::Zlib::BEGIN@114
1114µs24µsCompress::Raw::Zlib::::BEGIN@126 Compress::Raw::Zlib::BEGIN@126
1114µs21µsCompress::Raw::Zlib::::BEGIN@144 Compress::Raw::Zlib::BEGIN@144
1113µs21µsCompress::Raw::Zlib::::BEGIN@130 Compress::Raw::Zlib::BEGIN@130
1113µs18µsCompress::Raw::Zlib::::BEGIN@127 Compress::Raw::Zlib::BEGIN@127
1113µs19µsCompress::Raw::Zlib::::BEGIN@146 Compress::Raw::Zlib::BEGIN@146
1113µs17µsCompress::Raw::Zlib::::BEGIN@129 Compress::Raw::Zlib::BEGIN@129
1113µs36µsCompress::Raw::Zlib::::BEGIN@145 Compress::Raw::Zlib::BEGIN@145
1113µs18µsCompress::Raw::Zlib::::BEGIN@147 Compress::Raw::Zlib::BEGIN@147
1113µs17µsCompress::Raw::Zlib::::BEGIN@128 Compress::Raw::Zlib::BEGIN@128
1113µs16µsCompress::Raw::Zlib::::BEGIN@154 Compress::Raw::Zlib::BEGIN@154
1113µs19µsCompress::Raw::Zlib::::BEGIN@9 Compress::Raw::Zlib::BEGIN@9
1113µs18µsCompress::Raw::Zlib::::BEGIN@157 Compress::Raw::Zlib::BEGIN@157
1113µs16µsCompress::Raw::Zlib::::BEGIN@158 Compress::Raw::Zlib::BEGIN@158
1113µs16µsCompress::Raw::Zlib::::BEGIN@153 Compress::Raw::Zlib::BEGIN@153
1112µs15µsCompress::Raw::Zlib::::BEGIN@156 Compress::Raw::Zlib::BEGIN@156
0000s0sCompress::Raw::Zlib::Deflate::::new Compress::Raw::Zlib::Deflate::new
0000s0sCompress::Raw::Zlib::InflateScan::::new Compress::Raw::Zlib::InflateScan::new
0000s0sCompress::Raw::Zlib::Parameters::::parsed Compress::Raw::Zlib::Parameters::parsed
0000s0sCompress::Raw::Zlib::Parameters::::setError Compress::Raw::Zlib::Parameters::setError
0000s0sCompress::Raw::Zlib::deflateStream::::STORABLE_freeze Compress::Raw::Zlib::deflateStream::STORABLE_freeze
0000s0sCompress::Raw::Zlib::deflateStream::::STORABLE_thaw Compress::Raw::Zlib::deflateStream::STORABLE_thaw
0000s0sCompress::Raw::Zlib::deflateStream::::deflateParams Compress::Raw::Zlib::deflateStream::deflateParams
0000s0sCompress::Raw::Zlib::inflateScanStream::::createDeflateStreamCompress::Raw::Zlib::inflateScanStream::createDeflateStream
0000s0sCompress::Raw::Zlib::inflateScanStream::::inflateCompress::Raw::Zlib::inflateScanStream::inflate
0000s0sCompress::Raw::Zlib::inflateStream::::STORABLE_freeze Compress::Raw::Zlib::inflateStream::STORABLE_freeze
0000s0sCompress::Raw::Zlib::inflateStream::::STORABLE_thaw Compress::Raw::Zlib::inflateStream::STORABLE_thaw
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2package Compress::Raw::Zlib;
3
416µsrequire 5.006 ;
51400nsrequire Exporter;
6217µs275µs
# spent 42µs (8+34) within Compress::Raw::Zlib::BEGIN@6 which was called: # once (8µs+34µs) by Archive::Zip::BEGIN@9 at line 6
use Carp ;
# spent 42µs making 1 call to Compress::Raw::Zlib::BEGIN@6 # spent 34µs making 1 call to Exporter::import
7
8214µs27µs
# spent 5µs (4+2) within Compress::Raw::Zlib::BEGIN@8 which was called: # once (4µs+2µs) by Archive::Zip::BEGIN@9 at line 8
use strict ;
# spent 5µs making 1 call to Compress::Raw::Zlib::BEGIN@8 # spent 2µs making 1 call to strict::import
9213µs235µs
# spent 19µs (3+16) within Compress::Raw::Zlib::BEGIN@9 which was called: # once (3µs+16µs) by Archive::Zip::BEGIN@9 at line 9
use warnings ;
# spent 19µs making 1 call to Compress::Raw::Zlib::BEGIN@9 # spent 16µs making 1 call to warnings::import
102204µs2230µs
# spent 228µs (188+40) within Compress::Raw::Zlib::BEGIN@10 which was called: # once (188µs+40µs) by Archive::Zip::BEGIN@9 at line 10
use bytes ;
# spent 228µs making 1 call to Compress::Raw::Zlib::BEGIN@10 # spent 2µs making 1 call to bytes::import
11our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS);
12
131300ns$VERSION = '2.209';
141100ns$XS_VERSION = $VERSION;
15111µs$VERSION = eval $VERSION;
# spent 2µs executing statements in string eval
16
1715µs@ISA = qw(Exporter);
1813µs%EXPORT_TAGS = ( flush => [qw{
19 Z_NO_FLUSH
20 Z_PARTIAL_FLUSH
21 Z_SYNC_FLUSH
22 Z_FULL_FLUSH
23 Z_FINISH
24 Z_BLOCK
25 }],
26 level => [qw{
27 Z_NO_COMPRESSION
28 Z_BEST_SPEED
29 Z_BEST_COMPRESSION
30 Z_DEFAULT_COMPRESSION
31 }],
32 strategy => [qw{
33 Z_FILTERED
34 Z_HUFFMAN_ONLY
35 Z_RLE
36 Z_FIXED
37 Z_DEFAULT_STRATEGY
38 }],
39 status => [qw{
40 Z_OK
41 Z_STREAM_END
42 Z_NEED_DICT
43 Z_ERRNO
44 Z_STREAM_ERROR
45 Z_DATA_ERROR
46 Z_MEM_ERROR
47 Z_BUF_ERROR
48 Z_VERSION_ERROR
49 }],
50 );
51
5211µs%DEFLATE_CONSTANTS = %EXPORT_TAGS;
53
54# Items to export into callers namespace by default. Note: do not export
55# names by default without a very good reason. Use EXPORT_OK instead.
56# Do not simply export all your public functions/methods/constants.
5714µs@DEFLATE_CONSTANTS =
58@EXPORT = qw(
59 ZLIB_VERSION
60 ZLIB_VERNUM
61
62
63 OS_CODE
64
65 MAX_MEM_LEVEL
66 MAX_WBITS
67
68 Z_ASCII
69 Z_BEST_COMPRESSION
70 Z_BEST_SPEED
71 Z_BINARY
72 Z_BLOCK
73 Z_BUF_ERROR
74 Z_DATA_ERROR
75 Z_DEFAULT_COMPRESSION
76 Z_DEFAULT_STRATEGY
77 Z_DEFLATED
78 Z_ERRNO
79 Z_FILTERED
80 Z_FIXED
81 Z_FINISH
82 Z_FULL_FLUSH
83 Z_HUFFMAN_ONLY
84 Z_MEM_ERROR
85 Z_NEED_DICT
86 Z_NO_COMPRESSION
87 Z_NO_FLUSH
88 Z_NULL
89 Z_OK
90 Z_PARTIAL_FLUSH
91 Z_RLE
92 Z_STREAM_END
93 Z_STREAM_ERROR
94 Z_SYNC_FLUSH
95 Z_TREES
96 Z_UNKNOWN
97 Z_VERSION_ERROR
98
99 ZLIBNG_VERSION
100 ZLIBNG_VERNUM
101 ZLIBNG_VER_MAJOR
102 ZLIBNG_VER_MINOR
103 ZLIBNG_VER_REVISION
104 ZLIBNG_VER_STATUS
105 ZLIBNG_VER_MODIFIED
106
107 WANT_GZIP
108 WANT_GZIP_OR_ZLIB
109);
110
1111700nspush @EXPORT, qw(crc32 adler32 DEF_WBITS);
112
113291µs2994µs
# spent 965µs (850+115) within Compress::Raw::Zlib::BEGIN@113 which was called: # once (850µs+115µs) by Archive::Zip::BEGIN@9 at line 113
use constant WANT_GZIP => 16;
# spent 965µs making 1 call to Compress::Raw::Zlib::BEGIN@113 # spent 28µs making 1 call to constant::import
114249µs241µs
# spent 22µs (4+19) within Compress::Raw::Zlib::BEGIN@114 which was called: # once (4µs+19µs) by Archive::Zip::BEGIN@9 at line 114
use constant WANT_GZIP_OR_ZLIB => 32;
# spent 22µs making 1 call to Compress::Raw::Zlib::BEGIN@114 # spent 19µs making 1 call to constant::import
115
116
# spent 58µs (44+14) within Compress::Raw::Zlib::AUTOLOAD which was called 7 times, avg 8µs/call: # 5 times (26µs+9µs) by Archive::Zip::BEGIN@9 at line 385, avg 7µs/call # once (10µs+3µs) by Archive::Zip::Member::rewindData at line 1230 of Archive/Zip/Member.pm # once (8µs+3µs) by Archive::Zip::Member::_inflateChunk at line 1186 of Archive/Zip/Member.pm
sub AUTOLOAD {
1177800ns my($constname);
118719µs710µs ($constname = $AUTOLOAD) =~ s/.*:://;
# spent 10µs making 7 calls to CORE::subst, avg 1µs/call
119713µs74µs my ($error, $val) = constant($constname);
# spent 4µs making 7 calls to Compress::Raw::Zlib::constant, avg 600ns/call
1207800ns Carp::croak $error if $error;
121249µs213µs
# spent 9µs (5+4) within Compress::Raw::Zlib::BEGIN@121 which was called: # once (5µs+4µs) by Archive::Zip::BEGIN@9 at line 121
no strict 'refs';
# spent 9µs making 1 call to Compress::Raw::Zlib::BEGIN@121 # spent 4µs making 1 call to strict::unimport
1226260µs
# spent 32µs within Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] which was called 55 times, avg 582ns/call: # 13 times (6µs+0s) by Archive::Zip::Member::_inflateChunk at line 1186 of Archive/Zip/Member.pm, avg 469ns/call # 7 times (8µs+0s) by Archive::Zip::Member::_inflateChunk at line 1185 of Archive/Zip/Member.pm, avg 1µs/call # 7 times (6µs+0s) by Archive::Zip::Member::rewindData at line 1225 of Archive/Zip/Member.pm, avg 829ns/call # 7 times (3µs+0s) by Compress::Raw::Zlib::Inflate::new at line 473, avg 486ns/call # 7 times (3µs+0s) by Archive::Zip::BEGIN@9 or Archive::Zip::Member::_inflateChunk or Archive::Zip::Member::rewindData at line 123, avg 429ns/call # 7 times (2µs+0s) by Archive::Zip::Member::_inflateChunk at line 1187 of Archive/Zip/Member.pm, avg 214ns/call # 6 times (4µs+0s) by Archive::Zip::Member::rewindData at line 1230 of Archive/Zip/Member.pm, avg 733ns/call # once (300ns+0s) by Archive::Zip::BEGIN@9 at line 442
*{$AUTOLOAD} = sub { $val };
123717µs73µs goto &{$AUTOLOAD};
# spent 3µs making 7 calls to Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122], avg 429ns/call
124}
125
126215µs244µs
# spent 24µs (4+20) within Compress::Raw::Zlib::BEGIN@126 which was called: # once (4µs+20µs) by Archive::Zip::BEGIN@9 at line 126
use constant FLAG_APPEND => 1 ;
# spent 24µs making 1 call to Compress::Raw::Zlib::BEGIN@126 # spent 20µs making 1 call to constant::import
127212µs233µs
# spent 18µs (3+15) within Compress::Raw::Zlib::BEGIN@127 which was called: # once (3µs+15µs) by Archive::Zip::BEGIN@9 at line 127
use constant FLAG_CRC => 2 ;
# spent 18µs making 1 call to Compress::Raw::Zlib::BEGIN@127 # spent 15µs making 1 call to constant::import
128213µs231µs
# spent 17µs (3+14) within Compress::Raw::Zlib::BEGIN@128 which was called: # once (3µs+14µs) by Archive::Zip::BEGIN@9 at line 128
use constant FLAG_ADLER => 4 ;
# spent 17µs making 1 call to Compress::Raw::Zlib::BEGIN@128 # spent 14µs making 1 call to constant::import
129212µs230µs
# spent 17µs (3+14) within Compress::Raw::Zlib::BEGIN@129 which was called: # once (3µs+14µs) by Archive::Zip::BEGIN@9 at line 129
use constant FLAG_CONSUME_INPUT => 8 ;
# spent 17µs making 1 call to Compress::Raw::Zlib::BEGIN@129 # spent 14µs making 1 call to constant::import
130242µs239µs
# spent 21µs (3+18) within Compress::Raw::Zlib::BEGIN@130 which was called: # once (3µs+18µs) by Archive::Zip::BEGIN@9 at line 130
use constant FLAG_LIMIT_OUTPUT => 16 ;
# spent 21µs making 1 call to Compress::Raw::Zlib::BEGIN@130 # spent 18µs making 1 call to constant::import
131
132eval {
1331400ns require XSLoader;
1341176µs1170µs XSLoader::load('Compress::Raw::Zlib', $XS_VERSION);
# spent 170µs making 1 call to XSLoader::load
1351500ns 1;
136}
1371400nsor do {
138 require DynaLoader;
139 local @ISA = qw(DynaLoader);
140 bootstrap Compress::Raw::Zlib $XS_VERSION ;
141};
142
143
144213µs239µs
# spent 21µs (4+18) within Compress::Raw::Zlib::BEGIN@144 which was called: # once (4µs+18µs) by Archive::Zip::BEGIN@9 at line 144
use constant Parse_any => 0x01;
# spent 21µs making 1 call to Compress::Raw::Zlib::BEGIN@144 # spent 18µs making 1 call to constant::import
145216µs269µs
# spent 36µs (3+33) within Compress::Raw::Zlib::BEGIN@145 which was called: # once (3µs+33µs) by Archive::Zip::BEGIN@9 at line 145
use constant Parse_unsigned => 0x02;
# spent 36µs making 1 call to Compress::Raw::Zlib::BEGIN@145 # spent 33µs making 1 call to constant::import
146213µs235µs
# spent 19µs (3+16) within Compress::Raw::Zlib::BEGIN@146 which was called: # once (3µs+16µs) by Archive::Zip::BEGIN@9 at line 146
use constant Parse_signed => 0x04;
# spent 19µs making 1 call to Compress::Raw::Zlib::BEGIN@146 # spent 16µs making 1 call to constant::import
147214µs233µs
# spent 18µs (3+15) within Compress::Raw::Zlib::BEGIN@147 which was called: # once (3µs+15µs) by Archive::Zip::BEGIN@9 at line 147
use constant Parse_boolean => 0x08;
# spent 18µs making 1 call to Compress::Raw::Zlib::BEGIN@147 # spent 15µs making 1 call to constant::import
148#use constant Parse_string => 0x10;
149#use constant Parse_custom => 0x12;
150
151#use constant Parse_store_ref => 0x100 ;
152
153212µs230µs
# spent 16µs (3+14) within Compress::Raw::Zlib::BEGIN@153 which was called: # once (3µs+14µs) by Archive::Zip::BEGIN@9 at line 153
use constant OFF_PARSED => 0 ;
# spent 16µs making 1 call to Compress::Raw::Zlib::BEGIN@153 # spent 14µs making 1 call to constant::import
154212µs230µs
# spent 16µs (3+14) within Compress::Raw::Zlib::BEGIN@154 which was called: # once (3µs+14µs) by Archive::Zip::BEGIN@9 at line 154
use constant OFF_TYPE => 1 ;
# spent 16µs making 1 call to Compress::Raw::Zlib::BEGIN@154 # spent 14µs making 1 call to constant::import
155211µs241µs
# spent 28µs (14+13) within Compress::Raw::Zlib::BEGIN@155 which was called: # once (14µs+13µs) by Archive::Zip::BEGIN@9 at line 155
use constant OFF_DEFAULT => 2 ;
# spent 28µs making 1 call to Compress::Raw::Zlib::BEGIN@155 # spent 13µs making 1 call to constant::import
156211µs228µs
# spent 15µs (2+13) within Compress::Raw::Zlib::BEGIN@156 which was called: # once (2µs+13µs) by Archive::Zip::BEGIN@9 at line 156
use constant OFF_FIXED => 3 ;
# spent 15µs making 1 call to Compress::Raw::Zlib::BEGIN@156 # spent 13µs making 1 call to constant::import
157213µs233µs
# spent 18µs (3+15) within Compress::Raw::Zlib::BEGIN@157 which was called: # once (3µs+15µs) by Archive::Zip::BEGIN@9 at line 157
use constant OFF_FIRST_ONLY => 4 ;
# spent 18µs making 1 call to Compress::Raw::Zlib::BEGIN@157 # spent 15µs making 1 call to constant::import
15821.45ms228µs
# spent 16µs (3+13) within Compress::Raw::Zlib::BEGIN@158 which was called: # once (3µs+13µs) by Archive::Zip::BEGIN@9 at line 158
use constant OFF_STICKY => 5 ;
# spent 16µs making 1 call to Compress::Raw::Zlib::BEGIN@158 # spent 13µs making 1 call to constant::import
159
- -
162sub ParseParameters
163
# spent 510µs (47+463) within Compress::Raw::Zlib::ParseParameters which was called 7 times, avg 73µs/call: # 7 times (47µs+463µs) by Compress::Raw::Zlib::Inflate::new at line 458, avg 73µs/call
{
16472µs my $level = shift || 0 ;
165
166715µs my $sub = (caller($level + 1))[3] ;
167 #local $Carp::CarpLevel = 1 ;
168713µs713µs my $p = new Compress::Raw::Zlib::Parameters() ;
# spent 13µs making 7 calls to Compress::Raw::Zlib::Parameters::new, avg 2µs/call
16976µs7450µs $p->parse(@_)
# spent 450µs making 7 calls to Compress::Raw::Zlib::Parameters::parse, avg 64µs/call
170 or croak "$sub: $p->{Error}" ;
171
17278µs return $p;
173}
174
175
176sub Compress::Raw::Zlib::Parameters::new
177
# spent 13µs within Compress::Raw::Zlib::Parameters::new which was called 7 times, avg 2µs/call: # 7 times (13µs+0s) by Compress::Raw::Zlib::ParseParameters at line 168, avg 2µs/call
{
17871µs my $class = shift ;
179
18076µs my $obj = { Error => '',
181 Got => {},
182 } ;
183
184 #return bless $obj, ref($class) || $class || __PACKAGE__ ;
185710µs return bless $obj, 'Compress::Raw::Zlib::Parameters' ;
186}
187
188sub Compress::Raw::Zlib::Parameters::setError
189{
190 my $self = shift ;
191 my $error = shift ;
192 my $retval = @_ ? shift : undef ;
193
194 $self->{Error} = $error ;
195 return $retval;
196}
197
198#sub getError
199#{
200# my $self = shift ;
201# return $self->{Error} ;
202#}
203
204sub Compress::Raw::Zlib::Parameters::parse
205
# spent 450µs (295+155) within Compress::Raw::Zlib::Parameters::parse which was called 7 times, avg 64µs/call: # 7 times (295µs+155µs) by Compress::Raw::Zlib::ParseParameters at line 169, avg 64µs/call
{
20672µs my $self = shift ;
207
20871µs my $default = shift ;
209
21073µs my $got = $self->{Got} ;
21174µs my $firstTime = keys %{ $got } == 0 ;
212
2137800ns my (@Bad) ;
21472µs my @entered = () ;
215
216 # Allow the options to be passed as a hash reference or
217 # as the complete hash.
21874µs if (@_ == 0) {
219 @entered = () ;
220 }
221 elsif (@_ == 1) {
222 my $href = $_[0] ;
223 return $self->setError("Expected even number of parameters, got 1")
224 if ! defined $href or ! ref $href or ref $href ne "HASH" ;
225
226 foreach my $key (keys %$href) {
227 push @entered, $key ;
228 push @entered, \$href->{$key} ;
229 }
230 }
231 else {
23272µs my $count = @_;
23373µs return $self->setError("Expected even number of parameters, got $count")
234 if $count % 2 != 0 ;
235
236710µs for my $i (0.. $count / 2 - 1) {
237144µs push @entered, $_[2* $i] ;
238146µs push @entered, \$_[2* $i+1] ;
239 }
240 }
241
242
243732µs while (my ($key, $v) = each %$default)
244 {
245565µs croak "need 4 params [@$v]"
246 if @$v != 4 ;
247
2485613µs my ($first_only, $sticky, $type, $value) = @$v ;
249564µs my $x ;
2505627µs5690µs $self->_checkType($key, \$value, $type, 0, \$x)
# spent 90µs making 56 calls to Compress::Raw::Zlib::Parameters::_checkType, avg 2µs/call
251 or return undef ;
252
2535613µs $key = lc $key;
254
2555637µs if ($firstTime || ! $sticky) {
256 $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ;
257 }
258
2595615µs $got->{$key}[OFF_PARSED] = 0 ;
260 }
261
26276µs for my $i (0.. @entered / 2 - 1) {
263144µs my $key = $entered[2* $i] ;
264143µs my $value = $entered[2* $i+1] ;
265
266 #print "Key [$key] Value [$value]" ;
267 #print defined $$value ? "[$$value]\n" : "[undef]\n";
268
2691424µs1410µs $key =~ s/^-// ;
# spent 10µs making 14 calls to CORE::subst, avg 686ns/call
270143µs my $canonkey = lc $key;
271
272149µs if ($got->{$canonkey} && ($firstTime ||
273 ! $got->{$canonkey}[OFF_FIRST_ONLY] ))
274 {
275143µs my $type = $got->{$canonkey}[OFF_TYPE] ;
276141µs my $s ;
277148µs1455µs $self->_checkType($key, $value, $type, 1, \$s)
# spent 55µs making 14 calls to Compress::Raw::Zlib::Parameters::_checkType, avg 4µs/call
278 or return undef ;
279 #$value = $$value unless $type & Parse_store_ref ;
280142µs $value = $$value ;
2811411µs $got->{$canonkey} = [1, $type, $value, $s] ;
282 }
283 else
284 { push (@Bad, $key) }
285 }
286
28771µs if (@Bad) {
288 my ($bad) = join(", ", @Bad) ;
289 return $self->setError("unknown key value(s) @Bad") ;
290 }
291
29279µs return 1;
293}
294
295sub Compress::Raw::Zlib::Parameters::_checkType
296
# spent 145µs (127+18) within Compress::Raw::Zlib::Parameters::_checkType which was called 70 times, avg 2µs/call: # 56 times (90µs+0s) by Compress::Raw::Zlib::Parameters::parse at line 250, avg 2µs/call # 14 times (36µs+18µs) by Compress::Raw::Zlib::Parameters::parse at line 277, avg 4µs/call
{
297706µs my $self = shift ;
298
299708µs my $key = shift ;
300708µs my $value = shift ;
301705µs my $type = shift ;
302706µs my $validate = shift ;
303705µs my $output = shift;
304
305 #local $Carp::CarpLevel = $level ;
306 #print "PARSE $type $key $value $validate $sub\n" ;
307# if ( $type & Parse_store_ref)
308# {
309# #$value = $$value
310# # if ref ${ $value } ;
311#
312# $$output = $value ;
313# return 1;
314# }
315
316708µs $value = $$value ;
317
3187017µs if ($type & Parse_any)
319 {
32071µs $$output = $value ;
32176µs return 1;
322 }
323 elsif ($type & Parse_unsigned)
324 {
325142µs return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'")
326 if $validate && ! defined $value ;
3271413µs76µs return $self->setError("Parameter '$key' must be an unsigned int, got '$value'")
# spent 6µs making 7 calls to CORE::match, avg 871ns/call
328 if $validate && $value !~ /^\d+$/;
329
330143µs $$output = defined $value ? $value : 0 ;
3311410µs return 1;
332 }
333 elsif ($type & Parse_signed)
334 {
335143µs return $self->setError("Parameter '$key' must be a signed int, got 'undef'")
336 if $validate && ! defined $value ;
3371420µs712µs return $self->setError("Parameter '$key' must be a signed int, got '$value'")
# spent 12µs making 7 calls to CORE::match, avg 2µs/call
338 if $validate && $value !~ /^-?\d+$/;
339
340144µs $$output = defined $value ? $value : 0 ;
3411420µs return 1 ;
342 }
343 elsif ($type & Parse_boolean)
344 {
345352µs return $self->setError("Parameter '$key' must be an int, got '$value'")
346 if $validate && defined $value && $value !~ /^\d*$/;
347356µs $$output = defined $value ? $value != 0 : 0 ;
3483527µs return 1;
349 }
350# elsif ($type & Parse_string)
351# {
352# $$output = defined $value ? $value : "" ;
353# return 1;
354# }
355
356 $$output = $value ;
357 return 1;
358}
359
- -
362sub Compress::Raw::Zlib::Parameters::parsed
363{
364 my $self = shift ;
365 my $name = shift ;
366
367 return $self->{Got}{lc $name}[OFF_PARSED] ;
368}
369
370sub Compress::Raw::Zlib::Parameters::value
371
# spent 49µs within Compress::Raw::Zlib::Parameters::value which was called 63 times, avg 778ns/call: # 14 times (9µs+0s) by Compress::Raw::Zlib::Inflate::new at line 476, avg 629ns/call # 7 times (12µs+0s) by Compress::Raw::Zlib::Inflate::new at line 460, avg 2µs/call # 7 times (5µs+0s) by Compress::Raw::Zlib::Inflate::new at line 465, avg 757ns/call # 7 times (5µs+0s) by Compress::Raw::Zlib::Inflate::new at line 467, avg 700ns/call # 7 times (5µs+0s) by Compress::Raw::Zlib::Inflate::new at line 466, avg 686ns/call # 7 times (4µs+0s) by Compress::Raw::Zlib::Inflate::new at line 468, avg 614ns/call # 7 times (4µs+0s) by Compress::Raw::Zlib::Inflate::new at line 472, avg 614ns/call # 7 times (4µs+0s) by Compress::Raw::Zlib::Inflate::new at line 469, avg 600ns/call
{
372635µs my $self = shift ;
373637µs my $name = shift ;
374
375635µs if (@_)
376 {
377 $self->{Got}{lc $name}[OFF_PARSED] = 1;
378 $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ;
379 $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ;
380 }
381
3826363µs return $self->{Got}{lc $name}[OFF_FIXED] ;
383}
384
385110µs535µsour $OPTIONS_deflate =
# spent 35µs making 5 calls to Compress::Raw::Zlib::AUTOLOAD, avg 7µs/call
386 {
387 'AppendOutput' => [1, 1, Parse_boolean, 0],
388 'CRC32' => [1, 1, Parse_boolean, 0],
389 'ADLER32' => [1, 1, Parse_boolean, 0],
390 'Bufsize' => [1, 1, Parse_unsigned, 4096],
391
392 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
393 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
394 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
395 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
396 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
397 'Dictionary' => [1, 1, Parse_any, ""],
398 };
399
400sub Compress::Raw::Zlib::Deflate::new
401{
402 my $pkg = shift ;
403 my ($got) = ParseParameters(0, $OPTIONS_deflate, @_);
404
405 croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " .
406 $got->value('Bufsize')
407 unless $got->value('Bufsize') >= 1;
408
409 my $flags = 0 ;
410 $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
411 $flags |= FLAG_CRC if $got->value('CRC32') ;
412 $flags |= FLAG_ADLER if $got->value('ADLER32') ;
413
414 my $windowBits = $got->value('WindowBits');
415 $windowBits += MAX_WBITS()
416 if ($windowBits & MAX_WBITS()) == 0 ;
417
418 _deflateInit($flags,
419 $got->value('Level'),
420 $got->value('Method'),
421 $windowBits,
422 $got->value('MemLevel'),
423 $got->value('Strategy'),
424 $got->value('Bufsize'),
425 $got->value('Dictionary')) ;
426
427}
428
429sub Compress::Raw::Zlib::deflateStream::STORABLE_freeze
430{
431 my $type = ref shift;
432 croak "Cannot freeze $type object\n";
433}
434
435sub Compress::Raw::Zlib::deflateStream::STORABLE_thaw
436{
437 my $type = ref shift;
438 croak "Cannot thaw $type object\n";
439}
440
441
44212µs1300nsour $OPTIONS_inflate =
443 {
444 'AppendOutput' => [1, 1, Parse_boolean, 0],
445 'LimitOutput' => [1, 1, Parse_boolean, 0],
446 'CRC32' => [1, 1, Parse_boolean, 0],
447 'ADLER32' => [1, 1, Parse_boolean, 0],
448 'ConsumeInput' => [1, 1, Parse_boolean, 1],
449 'Bufsize' => [1, 1, Parse_unsigned, 4096],
450
451 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
452 'Dictionary' => [1, 1, Parse_any, ""],
453 } ;
454
455sub Compress::Raw::Zlib::Inflate::new
456
# spent 722µs (120+602) within Compress::Raw::Zlib::Inflate::new which was called 7 times, avg 103µs/call: # 7 times (120µs+602µs) by Archive::Zip::Member::rewindData at line 1225 of Archive/Zip/Member.pm, avg 103µs/call
{
45771µs my $pkg = shift ;
45878µs7510µs my ($got) = ParseParameters(0, $OPTIONS_inflate, @_);
# spent 510µs making 7 calls to Compress::Raw::Zlib::ParseParameters, avg 73µs/call
459
46076µs712µs croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " .
# spent 12µs making 7 calls to Compress::Raw::Zlib::Parameters::value, avg 2µs/call
461 $got->value('Bufsize')
462 unless $got->value('Bufsize') >= 1;
463
46471µs my $flags = 0 ;
46573µs75µs $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
# spent 5µs making 7 calls to Compress::Raw::Zlib::Parameters::value, avg 757ns/call
46673µs75µs $flags |= FLAG_CRC if $got->value('CRC32') ;
# spent 5µs making 7 calls to Compress::Raw::Zlib::Parameters::value, avg 686ns/call
46774µs75µs $flags |= FLAG_ADLER if $got->value('ADLER32') ;
# spent 5µs making 7 calls to Compress::Raw::Zlib::Parameters::value, avg 700ns/call
46875µs74µs $flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
# spent 4µs making 7 calls to Compress::Raw::Zlib::Parameters::value, avg 614ns/call
46973µs74µs $flags |= FLAG_LIMIT_OUTPUT if $got->value('LimitOutput') ;
# spent 4µs making 7 calls to Compress::Raw::Zlib::Parameters::value, avg 600ns/call
470
471
47275µs74µs my $windowBits = $got->value('WindowBits');
# spent 4µs making 7 calls to Compress::Raw::Zlib::Parameters::value, avg 614ns/call
47376µs73µs $windowBits += MAX_WBITS()
# spent 3µs making 7 calls to Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122], avg 486ns/call
474 if ($windowBits & MAX_WBITS()) == 0 ;
475
476780µs2148µs _inflateInit($flags, $windowBits, $got->value('Bufsize'),
# spent 40µs making 7 calls to Compress::Raw::Zlib::_inflateInit, avg 6µs/call # spent 9µs making 14 calls to Compress::Raw::Zlib::Parameters::value, avg 629ns/call
477 $got->value('Dictionary')) ;
478}
479
480sub Compress::Raw::Zlib::inflateStream::STORABLE_freeze
481{
482 my $type = ref shift;
483 croak "Cannot freeze $type object\n";
484}
485
486sub Compress::Raw::Zlib::inflateStream::STORABLE_thaw
487{
488 my $type = ref shift;
489 croak "Cannot thaw $type object\n";
490}
491
492sub Compress::Raw::Zlib::InflateScan::new
493{
494 my $pkg = shift ;
495 my ($got) = ParseParameters(0,
496 {
497 'CRC32' => [1, 1, Parse_boolean, 0],
498 'ADLER32' => [1, 1, Parse_boolean, 0],
499 'Bufsize' => [1, 1, Parse_unsigned, 4096],
500
501 'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()],
502 'Dictionary' => [1, 1, Parse_any, ""],
503 }, @_) ;
504
505
506 croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " .
507 $got->value('Bufsize')
508 unless $got->value('Bufsize') >= 1;
509
510 my $flags = 0 ;
511 #$flags |= FLAG_APPEND if $got->value('AppendOutput') ;
512 $flags |= FLAG_CRC if $got->value('CRC32') ;
513 $flags |= FLAG_ADLER if $got->value('ADLER32') ;
514 #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
515
516 _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'),
517 '') ;
518}
519
520sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream
521{
522 my $pkg = shift ;
523 my ($got) = ParseParameters(0,
524 {
525 'AppendOutput' => [1, 1, Parse_boolean, 0],
526 'CRC32' => [1, 1, Parse_boolean, 0],
527 'ADLER32' => [1, 1, Parse_boolean, 0],
528 'Bufsize' => [1, 1, Parse_unsigned, 4096],
529
530 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
531 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
532 'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()],
533 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
534 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
535 }, @_) ;
536
537 croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " .
538 $got->value('Bufsize')
539 unless $got->value('Bufsize') >= 1;
540
541 my $flags = 0 ;
542 $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
543 $flags |= FLAG_CRC if $got->value('CRC32') ;
544 $flags |= FLAG_ADLER if $got->value('ADLER32') ;
545
546 $pkg->_createDeflateStream($flags,
547 $got->value('Level'),
548 $got->value('Method'),
549 $got->value('WindowBits'),
550 $got->value('MemLevel'),
551 $got->value('Strategy'),
552 $got->value('Bufsize'),
553 ) ;
554
555}
556
557sub Compress::Raw::Zlib::inflateScanStream::inflate
558{
559 my $self = shift ;
560 my $buffer = $_[1];
561 my $eof = $_[2];
562
563 my $status = $self->scan(@_);
564
565 if ($status == Z_OK() && $_[2]) {
566 my $byte = ' ';
567
568 $status = $self->scan(\$byte, $_[1]) ;
569 }
570
571 return $status ;
572}
573
574sub Compress::Raw::Zlib::deflateStream::deflateParams
575{
576 my $self = shift ;
577 my ($got) = ParseParameters(0, {
578 'Level' => [1, 1, Parse_signed, undef],
579 'Strategy' => [1, 1, Parse_unsigned, undef],
580 'Bufsize' => [1, 1, Parse_unsigned, undef],
581 },
582 @_) ;
583
584 croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy"
585 unless $got->parsed('Level') + $got->parsed('Strategy') +
586 $got->parsed('Bufsize');
587
588 croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " .
589 $got->value('Bufsize')
590 if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1;
591
592 my $flags = 0;
593 $flags |= 1 if $got->parsed('Level') ;
594 $flags |= 2 if $got->parsed('Strategy') ;
595 $flags |= 4 if $got->parsed('Bufsize') ;
596
597 $self->_deflateParams($flags, $got->value('Level'),
598 $got->value('Strategy'), $got->value('Bufsize'));
599
600}
601
602
603113µs1;
604__END__
 
# spent 40µs within Compress::Raw::Zlib::_inflateInit which was called 7 times, avg 6µs/call: # 7 times (40µs+0s) by Compress::Raw::Zlib::Inflate::new at line 476, avg 6µs/call
sub Compress::Raw::Zlib::_inflateInit; # xsub
# spent 4µs within Compress::Raw::Zlib::constant which was called 7 times, avg 600ns/call: # 7 times (4µs+0s) by Compress::Raw::Zlib::AUTOLOAD at line 119, avg 600ns/call
sub Compress::Raw::Zlib::constant; # xsub
# spent 25µs within Compress::Raw::Zlib::inflateStream::DESTROY which was called 7 times, avg 4µs/call: # 7 times (25µs+0s) by Archive::Zip::Member::endRead at line 1255 of Archive/Zip/Member.pm, avg 4µs/call
sub Compress::Raw::Zlib::inflateStream::DESTROY; # xsub
# spent 12.1ms within Compress::Raw::Zlib::inflateStream::inflate which was called 7 times, avg 1.73ms/call: # 7 times (12.1ms+0s) by Archive::Zip::Member::_inflateChunk at line 1183 of Archive/Zip/Member.pm, avg 1.73ms/call
sub Compress::Raw::Zlib::inflateStream::inflate; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 46)[JSON-PP-pm-692]-154-line.html0000644000175000017500000003204614576335353024002 0ustar michamicha Profile of (eval 46)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 46)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Hub-Subtest-pm-37-line.html0000644000175000017500000007510514576335353023772 0ustar michamicha Profile of Test2/Hub/Subtest.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Hub/Subtest.pm
StatementsExecuted 22 statements in 379µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsTest2::Hub::Subtest::::BEGIN@2Test2::Hub::Subtest::BEGIN@2
1119µs19µsTest2::Hub::Subtest::::BEGIN@66Test2::Hub::Subtest::BEGIN@66
1117µs20µsTest2::Hub::Subtest::::BEGIN@24Test2::Hub::Subtest::BEGIN@24
1116µs6µsTest2::Hub::Subtest::::BEGIN@7Test2::Hub::Subtest::BEGIN@7
1114µs16µsTest2::Hub::Subtest::::BEGIN@47Test2::Hub::Subtest::BEGIN@47
1114µs76µsTest2::Hub::Subtest::::BEGIN@8Test2::Hub::Subtest::BEGIN@8
1114µs20µsTest2::Hub::Subtest::::BEGIN@9Test2::Hub::Subtest::BEGIN@9
1113µs20µsTest2::Hub::Subtest::::BEGIN@3Test2::Hub::Subtest::BEGIN@3
0000s0sTest2::Hub::Subtest::::inheritTest2::Hub::Subtest::inherit
0000s0sTest2::Hub::Subtest::::is_subtestTest2::Hub::Subtest::is_subtest
0000s0sTest2::Hub::Subtest::::sendTest2::Hub::Subtest::send
0000s0sTest2::Hub::Subtest::::terminateTest2::Hub::Subtest::terminate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Hub::Subtest;
2218µs212µs
# spent 11µs (10+1) within Test2::Hub::Subtest::BEGIN@2 which was called: # once (10µs+1µs) by Test2::API::BEGIN@88 at line 2
use strict;
# spent 11µs making 1 call to Test2::Hub::Subtest::BEGIN@2 # spent 2µs making 1 call to strict::import
3235µs237µs
# spent 20µs (3+17) within Test2::Hub::Subtest::BEGIN@3 which was called: # once (3µs+17µs) by Test2::API::BEGIN@88 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Hub::Subtest::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7226µs16µs
# spent 6µs within Test2::Hub::Subtest::BEGIN@7 which was called: # once (6µs+0s) by Test2::API::BEGIN@88 at line 7
BEGIN { require Test2::Hub; our @ISA = qw(Test2::Hub) }
# spent 6µs making 1 call to Test2::Hub::Subtest::BEGIN@7
8222µs2148µs
# spent 76µs (4+72) within Test2::Hub::Subtest::BEGIN@8 which was called: # once (4µs+72µs) by Test2::API::BEGIN@88 at line 8
use Test2::Util::HashBase qw/nested exit_code manual_skip_all/;
# spent 76µs making 1 call to Test2::Hub::Subtest::BEGIN@8 # spent 72µs making 1 call to Test2::Util::HashBase::import
9262µs235µs
# spent 20µs (4+16) within Test2::Hub::Subtest::BEGIN@9 which was called: # once (4µs+16µs) by Test2::API::BEGIN@88 at line 9
use Test2::Util qw/get_tid/;
# spent 20µs making 1 call to Test2::Hub::Subtest::BEGIN@9 # spent 16µs making 1 call to Exporter::import
10
11sub is_subtest { 1 }
12
13sub inherit {
14 my $self = shift;
15 my ($from) = @_;
16
17 $self->SUPER::inherit($from);
18
19 $self->{+NESTED} = $from->nested + 1;
20}
21
22{
23 # Legacy
24385µs232µs
# spent 20µs (7+13) within Test2::Hub::Subtest::BEGIN@24 which was called: # once (7µs+13µs) by Test2::API::BEGIN@88 at line 24
no warnings 'once';
# spent 20µs making 1 call to Test2::Hub::Subtest::BEGIN@24 # spent 13µs making 1 call to warnings::unimport
2511µs *ID = \&Test2::Hub::HID;
261200ns *id = \&Test2::Hub::hid;
271200ns *set_id = \&Test2::Hub::set_hid;
28}
29
30sub send {
31 my $self = shift;
32 my ($e) = @_;
33
34 my $out = $self->SUPER::send($e);
35
36 return $out if $self->{+MANUAL_SKIP_ALL};
37
38 my $f = $e->facet_data;
39
40 my $plan = $f->{plan} or return $out;
41 return $out unless $plan->{skip};
42
43 my $trace = $f->{trace} or die "Missing Trace!";
44 return $out unless $trace->{pid} != $self->pid
45 || $trace->{tid} != $self->tid;
46
47287µs228µs
# spent 16µs (4+12) within Test2::Hub::Subtest::BEGIN@47 which was called: # once (4µs+12µs) by Test2::API::BEGIN@88 at line 47
no warnings 'exiting';
# spent 16µs making 1 call to Test2::Hub::Subtest::BEGIN@47 # spent 12µs making 1 call to warnings::unimport
48 last T2_SUBTEST_WRAPPER;
49}
50
51sub terminate {
52 my $self = shift;
53 my ($code, $e, $f) = @_;
54 $self->set_exit_code($code);
55
56 return if $self->{+MANUAL_SKIP_ALL};
57
58 $f ||= $e->facet_data;
59
60 if(my $plan = $f->{plan}) {
61 my $trace = $f->{trace} or die "Missing Trace!";
62 return if $plan->{skip}
63 && ($trace->{pid} != $$ || $trace->{tid} != get_tid);
64 }
65
66238µs230µs
# spent 19µs (9+11) within Test2::Hub::Subtest::BEGIN@66 which was called: # once (9µs+11µs) by Test2::API::BEGIN@88 at line 66
no warnings 'exiting';
# spent 19µs making 1 call to Test2::Hub::Subtest::BEGIN@66 # spent 11µs making 1 call to warnings::unimport
67 last T2_SUBTEST_WRAPPER;
68}
69
7013µs1;
71
72__END__










Spreadsheet-ParseXLSX-0.35/nytprof/File-Temp-pm-87-line.html0000644000175000017500000147511114576335353022417 0ustar michamicha Profile of File/Temp.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm
StatementsExecuted 136 statements in 4.63ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.01ms3.17msFile::Temp::::BEGIN@149 File::Temp::BEGIN@149
111796µs890µsFile::Temp::::BEGIN@168 File::Temp::BEGIN@168
111546µs735µsFile::Temp::::BEGIN@152 File::Temp::BEGIN@152
111167µs210µsFile::Temp::::BEGIN@167 File::Temp::BEGIN@167
11115µs15µsFile::Temp::::cleanup File::Temp::cleanup
11112µs12µsFile::Temp::::BEGIN@144 File::Temp::BEGIN@144
11111µs26µsFile::Temp::::END File::Temp::END
11110µs15µsFile::Temp::::BEGIN@147 File::Temp::BEGIN@147
1119µs132µsFile::Temp::::BEGIN@150 File::Temp::BEGIN@150
1118µs17µsFile::Temp::::BEGIN@176 File::Temp::BEGIN@176
1116µs23µsFile::Temp::Dir::::BEGIN@2601File::Temp::Dir::BEGIN@2601
1115µs32µsFile::Temp::::BEGIN@216 File::Temp::BEGIN@216
1115µs8µsFile::Temp::::BEGIN@270 File::Temp::BEGIN@270
1114µs6µsFile::Temp::::BEGIN@145 File::Temp::BEGIN@145
1114µs8µsFile::Temp::::BEGIN@240 File::Temp::BEGIN@240
1114µs18µsFile::Temp::::BEGIN@153 File::Temp::BEGIN@153
1114µs5µsFile::Temp::Dir::::BEGIN@2602File::Temp::Dir::BEGIN@2602
1114µs17µsFile::Temp::::BEGIN@151 File::Temp::BEGIN@151
1114µs25µsFile::Temp::::BEGIN@219 File::Temp::BEGIN@219
1114µs26µsFile::Temp::::BEGIN@146 File::Temp::BEGIN@146
1113µs18µsFile::Temp::Dir::::BEGIN@2603File::Temp::Dir::BEGIN@2603
1113µs19µsFile::Temp::::BEGIN@223 File::Temp::BEGIN@223
1113µs17µsFile::Temp::::BEGIN@227 File::Temp::BEGIN@227
1113µs16µsFile::Temp::::BEGIN@229 File::Temp::BEGIN@229
1112µs15µsFile::Temp::::BEGIN@228 File::Temp::BEGIN@228
1112µs2µsFile::Temp::::BEGIN@148 File::Temp::BEGIN@148
111700ns700nsFile::Temp::::__ANON__[:244] File::Temp::__ANON__[:244]
111300ns300nsFile::Temp::::__ANON__ File::Temp::__ANON__ (xsub)
111300ns300nsFile::Temp::::__ANON__[:252] File::Temp::__ANON__[:252]
111300ns300nsFile::Temp::::__ANON__[:274] File::Temp::__ANON__[:274]
0000s0sFile::Temp::::DESTROY File::Temp::DESTROY
0000s0sFile::Temp::Dir::::DESTROYFile::Temp::Dir::DESTROY
0000s0sFile::Temp::Dir::::STRINGIFYFile::Temp::Dir::STRINGIFY
0000s0sFile::Temp::Dir::::dirnameFile::Temp::Dir::dirname
0000s0sFile::Temp::Dir::::unlink_on_destroyFile::Temp::Dir::unlink_on_destroy
0000s0sFile::Temp::::NUMIFY File::Temp::NUMIFY
0000s0sFile::Temp::::STRINGIFY File::Temp::STRINGIFY
0000s0sFile::Temp::::__ANON__[:245] File::Temp::__ANON__[:245]
0000s0sFile::Temp::::__ANON__[:253] File::Temp::__ANON__[:253]
0000s0sFile::Temp::::__ANON__[:275] File::Temp::__ANON__[:275]
0000s0sFile::Temp::::_can_do_level File::Temp::_can_do_level
0000s0sFile::Temp::::_can_unlink_opened_file File::Temp::_can_unlink_opened_file
0000s0sFile::Temp::::_deferred_unlink File::Temp::_deferred_unlink
0000s0sFile::Temp::::_force_writable File::Temp::_force_writable
0000s0sFile::Temp::::_gettemp File::Temp::_gettemp
0000s0sFile::Temp::::_is_safe File::Temp::_is_safe
0000s0sFile::Temp::::_is_verysafe File::Temp::_is_verysafe
0000s0sFile::Temp::::_parse_args File::Temp::_parse_args
0000s0sFile::Temp::::_replace_XX File::Temp::_replace_XX
0000s0sFile::Temp::::_wrap_file_spec_tmpdir File::Temp::_wrap_file_spec_tmpdir
0000s0sFile::Temp::::cmpstat File::Temp::cmpstat
0000s0sFile::Temp::::filename File::Temp::filename
0000s0sFile::Temp::::mkdtemp File::Temp::mkdtemp
0000s0sFile::Temp::::mkstemp File::Temp::mkstemp
0000s0sFile::Temp::::mkstemps File::Temp::mkstemps
0000s0sFile::Temp::::mktemp File::Temp::mktemp
0000s0sFile::Temp::::new File::Temp::new
0000s0sFile::Temp::::newdir File::Temp::newdir
0000s0sFile::Temp::::safe_level File::Temp::safe_level
0000s0sFile::Temp::::tempdir File::Temp::tempdir
0000s0sFile::Temp::::tempfile File::Temp::tempfile
0000s0sFile::Temp::::tempnam File::Temp::tempnam
0000s0sFile::Temp::::tmpfile File::Temp::tmpfile
0000s0sFile::Temp::::tmpnam File::Temp::tmpnam
0000s0sFile::Temp::::top_system_uid File::Temp::top_system_uid
0000s0sFile::Temp::::unlink0 File::Temp::unlink0
0000s0sFile::Temp::::unlink1 File::Temp::unlink1
0000s0sFile::Temp::::unlink_on_destroy File::Temp::unlink_on_destroy
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Temp; # git description: v0.2310-3-gc7148fe
2# ABSTRACT: return name and handle of a temporary file safely
3
41300nsour $VERSION = '0.2311';
5
6#pod =begin :__INTERNALS
7#pod
8#pod =head1 PORTABILITY
9#pod
10#pod This section is at the top in order to provide easier access to
11#pod porters. It is not expected to be rendered by a standard pod
12#pod formatting tool. Please skip straight to the SYNOPSIS section if you
13#pod are not trying to port this module to a new platform.
14#pod
15#pod This module is designed to be portable across operating systems and it
16#pod currently supports Unix, VMS, DOS, OS/2, Windows and Mac OS
17#pod (Classic). When porting to a new OS there are generally three main
18#pod issues that have to be solved:
19#pod
20#pod =over 4
21#pod
22#pod =item *
23#pod
24#pod Can the OS unlink an open file? If it can not then the
25#pod C<_can_unlink_opened_file> method should be modified.
26#pod
27#pod =item *
28#pod
29#pod Are the return values from C<stat> reliable? By default all the
30#pod return values from C<stat> are compared when unlinking a temporary
31#pod file using the filename and the handle. Operating systems other than
32#pod unix do not always have valid entries in all fields. If utility function
33#pod C<File::Temp::unlink0> fails then the C<stat> comparison should be
34#pod modified accordingly.
35#pod
36#pod =item *
37#pod
38#pod Security. Systems that can not support a test for the sticky bit
39#pod on a directory can not use the MEDIUM and HIGH security tests.
40#pod The C<_can_do_level> method should be modified accordingly.
41#pod
42#pod =back
43#pod
44#pod =end :__INTERNALS
45#pod
46#pod =head1 SYNOPSIS
47#pod
48#pod use File::Temp qw/ tempfile tempdir /;
49#pod
50#pod $fh = tempfile();
51#pod ($fh, $filename) = tempfile();
52#pod
53#pod ($fh, $filename) = tempfile( $template, DIR => $dir);
54#pod ($fh, $filename) = tempfile( $template, SUFFIX => '.dat');
55#pod ($fh, $filename) = tempfile( $template, TMPDIR => 1 );
56#pod
57#pod binmode( $fh, ":utf8" );
58#pod
59#pod $dir = tempdir( CLEANUP => 1 );
60#pod ($fh, $filename) = tempfile( DIR => $dir );
61#pod
62#pod Object interface:
63#pod
64#pod require File::Temp;
65#pod use File::Temp ();
66#pod use File::Temp qw/ :seekable /;
67#pod
68#pod $fh = File::Temp->new();
69#pod $fname = $fh->filename;
70#pod
71#pod $fh = File::Temp->new(TEMPLATE => $template);
72#pod $fname = $fh->filename;
73#pod
74#pod $tmp = File::Temp->new( UNLINK => 0, SUFFIX => '.dat' );
75#pod print $tmp "Some data\n";
76#pod print "Filename is $tmp\n";
77#pod $tmp->seek( 0, SEEK_END );
78#pod
79#pod $dir = File::Temp->newdir(); # CLEANUP => 1 by default
80#pod
81#pod The following interfaces are provided for compatibility with
82#pod existing APIs. They should not be used in new code.
83#pod
84#pod MkTemp family:
85#pod
86#pod use File::Temp qw/ :mktemp /;
87#pod
88#pod ($fh, $file) = mkstemp( "tmpfileXXXXX" );
89#pod ($fh, $file) = mkstemps( "tmpfileXXXXXX", $suffix);
90#pod
91#pod $tmpdir = mkdtemp( $template );
92#pod
93#pod $unopened_file = mktemp( $template );
94#pod
95#pod POSIX functions:
96#pod
97#pod use File::Temp qw/ :POSIX /;
98#pod
99#pod $file = tmpnam();
100#pod $fh = tmpfile();
101#pod
102#pod ($fh, $file) = tmpnam();
103#pod
104#pod Compatibility functions:
105#pod
106#pod $unopened_file = File::Temp::tempnam( $dir, $pfx );
107#pod
108#pod =head1 DESCRIPTION
109#pod
110#pod C<File::Temp> can be used to create and open temporary files in a safe
111#pod way. There is both a function interface and an object-oriented
112#pod interface. The File::Temp constructor or the tempfile() function can
113#pod be used to return the name and the open filehandle of a temporary
114#pod file. The tempdir() function can be used to create a temporary
115#pod directory.
116#pod
117#pod The security aspect of temporary file creation is emphasized such that
118#pod a filehandle and filename are returned together. This helps guarantee
119#pod that a race condition can not occur where the temporary file is
120#pod created by another process between checking for the existence of the
121#pod file and its opening. Additional security levels are provided to
122#pod check, for example, that the sticky bit is set on world writable
123#pod directories. See L<"safe_level"> for more information.
124#pod
125#pod For compatibility with popular C library functions, Perl implementations of
126#pod the mkstemp() family of functions are provided. These are, mkstemp(),
127#pod mkstemps(), mkdtemp() and mktemp().
128#pod
129#pod Additionally, implementations of the standard L<POSIX|POSIX>
130#pod tmpnam() and tmpfile() functions are provided if required.
131#pod
132#pod Implementations of mktemp(), tmpnam(), and tempnam() are provided,
133#pod but should be used with caution since they return only a filename
134#pod that was valid when function was called, so cannot guarantee
135#pod that the file will not exist by the time the caller opens the filename.
136#pod
137#pod Filehandles returned by these functions support the seekable methods.
138#pod
139#pod =cut
140
141# Toolchain targets v5.8.1, but we'll try to support back to v5.6 anyway.
142# It might be possible to make this v5.5, but many v5.6isms are creeping
143# into the code and tests.
144231µs112µs
# spent 12µs within File::Temp::BEGIN@144 which was called: # once (12µs+0s) by Archive::Zip::BEGIN@11 at line 144
use 5.006;
# spent 12µs making 1 call to File::Temp::BEGIN@144
145215µs28µs
# spent 6µs (4+2) within File::Temp::BEGIN@145 which was called: # once (4µs+2µs) by Archive::Zip::BEGIN@11 at line 145
use strict;
# spent 6µs making 1 call to File::Temp::BEGIN@145 # spent 2µs making 1 call to strict::import
146218µs249µs
# spent 26µs (4+23) within File::Temp::BEGIN@146 which was called: # once (4µs+23µs) by Archive::Zip::BEGIN@11 at line 146
use Carp;
# spent 26µs making 1 call to File::Temp::BEGIN@146 # spent 23µs making 1 call to Exporter::import
147326µs320µs
# spent 15µs (10+5) within File::Temp::BEGIN@147 which was called: # once (10µs+5µs) by Archive::Zip::BEGIN@11 at line 147
use File::Spec 0.8;
# spent 15µs making 1 call to File::Temp::BEGIN@147 # spent 5µs making 1 call to UNIVERSAL::VERSION # spent 300ns making 1 call to File::Temp::__ANON__
148230µs12µs
# spent 2µs within File::Temp::BEGIN@148 which was called: # once (2µs+0s) by Archive::Zip::BEGIN@11 at line 148
use Cwd ();
# spent 2µs making 1 call to File::Temp::BEGIN@148
149397µs33.20ms
# spent 3.17ms (2.01+1.16) within File::Temp::BEGIN@149 which was called: # once (2.01ms+1.16ms) by Archive::Zip::BEGIN@11 at line 149
use File::Path 2.06 qw/ rmtree /;
# spent 3.17ms making 1 call to File::Temp::BEGIN@149 # spent 22µs making 1 call to Exporter::import # spent 6µs making 1 call to UNIVERSAL::VERSION
150326µs3255µs
# spent 132µs (9+123) within File::Temp::BEGIN@150 which was called: # once (9µs+123µs) by Archive::Zip::BEGIN@11 at line 150
use Fcntl 1.03;
# spent 132µs making 1 call to File::Temp::BEGIN@150 # spent 119µs making 1 call to Exporter::import # spent 4µs making 1 call to UNIVERSAL::VERSION
151213µs231µs
# spent 17µs (4+14) within File::Temp::BEGIN@151 which was called: # once (4µs+14µs) by Archive::Zip::BEGIN@11 at line 151
use IO::Seekable; # For SEEK_*
# spent 17µs making 1 call to File::Temp::BEGIN@151 # spent 14µs making 1 call to Exporter::import
152284µs2747µs
# spent 735µs (546+189) within File::Temp::BEGIN@152 which was called: # once (546µs+189µs) by Archive::Zip::BEGIN@11 at line 152
use Errno;
# spent 735µs making 1 call to File::Temp::BEGIN@152 # spent 12µs making 1 call to Exporter::import
153238µs231µs
# spent 18µs (4+14) within File::Temp::BEGIN@153 which was called: # once (4µs+14µs) by Archive::Zip::BEGIN@11 at line 153
use Scalar::Util 'refaddr';
# spent 18µs making 1 call to File::Temp::BEGIN@153 # spent 14µs making 1 call to Exporter::import
1541900nsrequire VMS::Stdio if $^O eq 'VMS';
155
156# pre-emptively load Carp::Heavy. If we don't when we run out of file
157# handles and attempt to call croak() we get an error message telling
158# us that Carp::Heavy won't load rather than an error telling us we
159# have run out of file handles. We either preload croak() or we
160# switch the calls to croak from _gettemp() to use die.
161271µseval { require Carp::Heavy; };
162
163# Need the Symbol package if we are running older perl
1641200nsrequire Symbol if $] < 5.006;
165
166### For the OO interface
167388µs3233µs
# spent 210µs (167+43) within File::Temp::BEGIN@167 which was called: # once (167µs+43µs) by Archive::Zip::BEGIN@11 at line 167
use parent 0.221 qw/ IO::Handle IO::Seekable /;
# spent 210µs making 1 call to File::Temp::BEGIN@167 # spent 18µs making 1 call to parent::import # spent 6µs making 1 call to UNIVERSAL::VERSION
16813µs119µs
# spent 890µs (796+94) within File::Temp::BEGIN@168 which was called: # once (796µs+94µs) by Archive::Zip::BEGIN@11 at line 169
use overload '""' => "STRINGIFY", '0+' => "NUMIFY",
# spent 19µs making 1 call to overload::import
169192µs1890µs fallback => 1;
# spent 890µs making 1 call to File::Temp::BEGIN@168
170
1711200nsour $DEBUG = 0;
1721100nsour $KEEP_ALL = 0;
173
174# We are exporting functions
175
176382µs326µs
# spent 17µs (8+9) within File::Temp::BEGIN@176 which was called: # once (8µs+9µs) by Archive::Zip::BEGIN@11 at line 176
use Exporter 5.57 'import'; # 5.57 lets us import 'import'
# spent 17µs making 1 call to File::Temp::BEGIN@176 # spent 5µs making 1 call to UNIVERSAL::VERSION # spent 4µs making 1 call to Exporter::import
177
178# Export list - to allow fine tuning of export table
179
18012µsour @EXPORT_OK = qw{
181 tempfile
182 tempdir
183 tmpnam
184 tmpfile
185 mktemp
186 mkstemp
187 mkstemps
188 mkdtemp
189 unlink0
190 cleanup
191 SEEK_SET
192 SEEK_CUR
193 SEEK_END
194 };
195
196# Groups of functions for export
197
19812µsour %EXPORT_TAGS = (
199 'POSIX' => [qw/ tmpnam tmpfile /],
200 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/],
201 'seekable' => [qw/ SEEK_SET SEEK_CUR SEEK_END /],
202 );
203
204# add contents of these tags to @EXPORT
20512µs115µsExporter::export_tags('POSIX','mktemp','seekable');
# spent 15µs making 1 call to Exporter::export_tags
206
207# This is a list of characters that can be used in random filenames
208
20913µsmy @CHARS = (qw/ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
210 a b c d e f g h i j k l m n o p q r s t u v w x y z
211 0 1 2 3 4 5 6 7 8 9 _
212 /);
213
214# Maximum number of tries to make a temp file before failing
215
216224µs259µs
# spent 32µs (5+27) within File::Temp::BEGIN@216 which was called: # once (5µs+27µs) by Archive::Zip::BEGIN@11 at line 216
use constant MAX_TRIES => 1000;
# spent 32µs making 1 call to File::Temp::BEGIN@216 # spent 27µs making 1 call to constant::import
217
218# Minimum number of X characters that should be in a template
219220µs247µs
# spent 25µs (4+21) within File::Temp::BEGIN@219 which was called: # once (4µs+21µs) by Archive::Zip::BEGIN@11 at line 219
use constant MINX => 4;
# spent 25µs making 1 call to File::Temp::BEGIN@219 # spent 21µs making 1 call to constant::import
220
221# Default template when no template supplied
222
223215µs235µs
# spent 19µs (3+16) within File::Temp::BEGIN@223 which was called: # once (3µs+16µs) by Archive::Zip::BEGIN@11 at line 223
use constant TEMPXXX => 'X' x 10;
# spent 19µs making 1 call to File::Temp::BEGIN@223 # spent 16µs making 1 call to constant::import
224
225# Constants for the security level
226
227212µs231µs
# spent 17µs (3+14) within File::Temp::BEGIN@227 which was called: # once (3µs+14µs) by Archive::Zip::BEGIN@11 at line 227
use constant STANDARD => 0;
# spent 17µs making 1 call to File::Temp::BEGIN@227 # spent 14µs making 1 call to constant::import
228215µs228µs
# spent 15µs (2+13) within File::Temp::BEGIN@228 which was called: # once (2µs+13µs) by Archive::Zip::BEGIN@11 at line 228
use constant MEDIUM => 1;
# spent 15µs making 1 call to File::Temp::BEGIN@228 # spent 13µs making 1 call to constant::import
229244µs229µs
# spent 16µs (3+13) within File::Temp::BEGIN@229 which was called: # once (3µs+13µs) by Archive::Zip::BEGIN@11 at line 229
use constant HIGH => 2;
# spent 16µs making 1 call to File::Temp::BEGIN@229 # spent 13µs making 1 call to constant::import
230
231# OPENFLAGS. If we defined the flag to use with Sysopen here this gives
232# us an optimisation when many temporary files are requested
233
2341100nsmy $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR;
2351100nsmy $LOCKFLAG;
236
23711µsunless ($^O eq 'MacOS') {
2381400ns for my $oflag (qw/ NOFOLLOW BINARY LARGEFILE NOINHERIT /) {
23941µs my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
2402114µs212µs
# spent 8µs (4+4) within File::Temp::BEGIN@240 which was called: # once (4µs+4µs) by Archive::Zip::BEGIN@11 at line 240
no strict 'refs';
# spent 8µs making 1 call to File::Temp::BEGIN@240 # spent 4µs making 1 call to strict::unimport
24142µs $OPENFLAGS |= $bit if eval {
242 # Make sure that redefined die handlers do not cause problems
243 # e.g. CGI::Carp
24457µs
# spent 700ns within File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:244] which was called: # once (700ns+0s) by Fcntl::O_NOINHERIT at line 246
local $SIG{__DIE__} = sub {};
24543µs local $SIG{__WARN__} = sub {};
246431µs524µs $bit = &$func();
# spent 16µs making 1 call to Fcntl::O_NOINHERIT # spent 3µs making 1 call to Fcntl::O_NOFOLLOW # spent 2µs making 1 call to Fcntl::O_BINARY # spent 2µs making 1 call to Fcntl::O_LARGEFILE # spent 700ns making 1 call to File::Temp::__ANON__[File/Temp.pm:244]
24734µs 1;
248 };
249 }
250 # Special case O_EXLOCK
2511200ns $LOCKFLAG = eval {
25223µs
# spent 300ns within File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:252] which was called: # once (300ns+0s) by Fcntl::O_EXLOCK at line 254
local $SIG{__DIE__} = sub {};
2531700ns local $SIG{__WARN__} = sub {};
25418µs27µs &Fcntl::O_EXLOCK();
# spent 7µs making 1 call to Fcntl::O_EXLOCK # spent 300ns making 1 call to File::Temp::__ANON__[File/Temp.pm:252]
255 };
256}
257
258# On some systems the O_TEMPORARY flag can be used to tell the OS
259# to automatically remove the file when it is closed. This is fine
260# in most cases but not if tempfile is called with UNLINK=>0 and
261# the filename is requested -- in the case where the filename is to
262# be passed to another routine. This happens on windows. We overcome
263# this by using a second open flags variable
264
2651200nsmy $OPENTEMPFLAGS = $OPENFLAGS;
2661600nsunless ($^O eq 'MacOS') {
2671400ns for my $oflag (qw/ TEMPORARY /) {
2681400ns my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
2691100ns local($@);
2702398µs211µs
# spent 8µs (5+3) within File::Temp::BEGIN@270 which was called: # once (5µs+3µs) by Archive::Zip::BEGIN@11 at line 270
no strict 'refs';
# spent 8µs making 1 call to File::Temp::BEGIN@270 # spent 3µs making 1 call to strict::unimport
2711400ns $OPENTEMPFLAGS |= $bit if eval {
272 # Make sure that redefined die handlers do not cause problems
273 # e.g. CGI::Carp
27422µs
# spent 300ns within File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:274] which was called: # once (300ns+0s) by Fcntl::O_TEMPORARY at line 276
local $SIG{__DIE__} = sub {};
2751600ns local $SIG{__WARN__} = sub {};
27617µs26µs $bit = &$func();
# spent 6µs making 1 call to Fcntl::O_TEMPORARY # spent 300ns making 1 call to File::Temp::__ANON__[File/Temp.pm:274]
277 1;
278 };
279 }
280}
281
282# Private hash tracking which files have been created by each process id via the OO interface
2831200nsmy %FILES_CREATED_BY_OBJECT;
284
285# INTERNAL ROUTINES - not to be used outside of package
286
287# Generic routine for getting a temporary filename
288# modelled on OpenBSD _gettemp() in mktemp.c
289
290# The template must contain X's that are to be replaced
291# with the random values
292
293# Arguments:
294
295# TEMPLATE - string containing the XXXXX's that is converted
296# to a random filename and opened if required
297
298# Optionally, a hash can also be supplied containing specific options
299# "open" => if true open the temp file, else just return the name
300# default is 0
301# "mkdir"=> if true, we are creating a temp directory rather than tempfile
302# default is 0
303# "suffixlen" => number of characters at end of PATH to be ignored.
304# default is 0.
305# "unlink_on_close" => indicates that, if possible, the OS should remove
306# the file as soon as it is closed. Usually indicates
307# use of the O_TEMPORARY flag to sysopen.
308# Usually irrelevant on unix
309# "use_exlock" => Indicates that O_EXLOCK should be used. Default is false.
310# "file_permissions" => file permissions for sysopen(). Default is 0600.
311
312# Optionally a reference to a scalar can be passed into the function
313# On error this will be used to store the reason for the error
314# "ErrStr" => \$errstr
315
316# "open" and "mkdir" can not both be true
317# "unlink_on_close" is not used when "mkdir" is true.
318
319# The default options are equivalent to mktemp().
320
321# Returns:
322# filehandle - open file handle (if called with doopen=1, else undef)
323# temp name - name of the temp file or directory
324
325# For example:
326# ($fh, $name) = _gettemp($template, "open" => 1);
327
328# for the current version, failures are associated with
329# stored in an error string and returned to give the reason whilst debugging
330# This routine is not called by any external function
331sub _gettemp {
332
333 croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);'
334 unless scalar(@_) >= 1;
335
336 # the internal error string - expect it to be overridden
337 # Need this in case the caller decides not to supply us a value
338 # need an anonymous scalar
339 my $tempErrStr;
340
341 # Default options
342 my %options = (
343 "open" => 0,
344 "mkdir" => 0,
345 "suffixlen" => 0,
346 "unlink_on_close" => 0,
347 "use_exlock" => 0,
348 "ErrStr" => \$tempErrStr,
349 "file_permissions" => undef,
350 );
351
352 # Read the template
353 my $template = shift;
354 if (ref($template)) {
355 # Use a warning here since we have not yet merged ErrStr
356 carp "File::Temp::_gettemp: template must not be a reference";
357 return ();
358 }
359
360 # Check that the number of entries on stack are even
361 if (scalar(@_) % 2 != 0) {
362 # Use a warning here since we have not yet merged ErrStr
363 carp "File::Temp::_gettemp: Must have even number of options";
364 return ();
365 }
366
367 # Read the options and merge with defaults
368 %options = (%options, @_) if @_;
369
370 # Make sure the error string is set to undef
371 ${$options{ErrStr}} = undef;
372
373 # Can not open the file and make a directory in a single call
374 if ($options{"open"} && $options{"mkdir"}) {
375 ${$options{ErrStr}} = "doopen and domkdir can not both be true\n";
376 return ();
377 }
378
379 # Find the start of the end of the Xs (position of last X)
380 # Substr starts from 0
381 my $start = length($template) - 1 - $options{"suffixlen"};
382
383 # Check that we have at least MINX x X (e.g. 'XXXX") at the end of the string
384 # (taking suffixlen into account). Any fewer is insecure.
385
386 # Do it using substr - no reason to use a pattern match since
387 # we know where we are looking and what we are looking for
388
389 if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) {
390 ${$options{ErrStr}} = "The template must end with at least ".
391 MINX . " 'X' characters\n";
392 return ();
393 }
394
395 # Replace all the X at the end of the substring with a
396 # random character or just all the XX at the end of a full string.
397 # Do it as an if, since the suffix adjusts which section to replace
398 # and suffixlen=0 returns nothing if used in the substr directly
399 # and generate a full path from the template
400
401 my $path = _replace_XX($template, $options{"suffixlen"});
402
403
404 # Split the path into constituent parts - eventually we need to check
405 # whether the directory exists
406 # We need to know whether we are making a temp directory
407 # or a tempfile
408
409 my ($volume, $directories, $file);
410 my $parent; # parent directory
411 if ($options{"mkdir"}) {
412 # There is no filename at the end
413 ($volume, $directories, $file) = File::Spec->splitpath( $path, 1);
414
415 # The parent is then $directories without the last directory
416 # Split the directory and put it back together again
417 my @dirs = File::Spec->splitdir($directories);
418
419 # If @dirs only has one entry (i.e. the directory template) that means
420 # we are in the current directory
421 if ($#dirs == 0) {
422 $parent = File::Spec->curdir;
423 } else {
424
425 if ($^O eq 'VMS') { # need volume to avoid relative dir spec
426 $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]);
427 $parent = 'sys$disk:[]' if $parent eq '';
428 } else {
429
430 # Put it back together without the last one
431 $parent = File::Spec->catdir(@dirs[0..$#dirs-1]);
432
433 # ...and attach the volume (no filename)
434 $parent = File::Spec->catpath($volume, $parent, '');
435 }
436
437 }
438
439 } else {
440
441 # Get rid of the last filename (use File::Basename for this?)
442 ($volume, $directories, $file) = File::Spec->splitpath( $path );
443
444 # Join up without the file part
445 $parent = File::Spec->catpath($volume,$directories,'');
446
447 # If $parent is empty replace with curdir
448 $parent = File::Spec->curdir
449 unless $directories ne '';
450
451 }
452
453 # Check that the parent directories exist
454 # Do this even for the case where we are simply returning a name
455 # not a file -- no point returning a name that includes a directory
456 # that does not exist or is not writable
457
458 unless (-e $parent) {
459 ${$options{ErrStr}} = "Parent directory ($parent) does not exist";
460 return ();
461 }
462 unless (-d $parent) {
463 ${$options{ErrStr}} = "Parent directory ($parent) is not a directory";
464 return ();
465 }
466
467 # Check the stickiness of the directory and chown giveaway if required
468 # If the directory is world writable the sticky bit
469 # must be set
470
471 if (File::Temp->safe_level == MEDIUM) {
472 my $safeerr;
473 unless (_is_safe($parent,\$safeerr)) {
474 ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
475 return ();
476 }
477 } elsif (File::Temp->safe_level == HIGH) {
478 my $safeerr;
479 unless (_is_verysafe($parent, \$safeerr)) {
480 ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
481 return ();
482 }
483 }
484
485 my $perms = $options{file_permissions};
486 my $has_perms = defined $perms;
487 $perms = 0600 unless $has_perms;
488
489 # Now try MAX_TRIES time to open the file
490 for (my $i = 0; $i < MAX_TRIES; $i++) {
491
492 # Try to open the file if requested
493 if ($options{"open"}) {
494 my $fh;
495
496 # If we are running before perl5.6.0 we can not auto-vivify
497 if ($] < 5.006) {
498 $fh = &Symbol::gensym;
499 }
500
501 # Try to make sure this will be marked close-on-exec
502 # XXX: Win32 doesn't respect this, nor the proper fcntl,
503 # but may have O_NOINHERIT. This may or may not be in Fcntl.
504 local $^F = 2;
505
506 # Attempt to open the file
507 my $open_success = undef;
508 if ( $^O eq 'VMS' and $options{"unlink_on_close"} && !$KEEP_ALL) {
509 # make it auto delete on close by setting FAB$V_DLT bit
510 $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, $perms, 'fop=dlt');
511 $open_success = $fh;
512 } else {
513 my $flags = ( ($options{"unlink_on_close"} && !$KEEP_ALL) ?
514 $OPENTEMPFLAGS :
515 $OPENFLAGS );
516 $flags |= $LOCKFLAG if (defined $LOCKFLAG && $options{use_exlock});
517 $open_success = sysopen($fh, $path, $flags, $perms);
518 }
519 if ( $open_success ) {
520
521 # in case of odd umask force rw
522 chmod($perms, $path) unless $has_perms;
523
524 # Opened successfully - return file handle and name
525 return ($fh, $path);
526
527 } else {
528
529 # Error opening file - abort with error
530 # if the reason was anything but EEXIST
53112.95ms17µs unless ($!{EEXIST}) {
# spent 7µs making 1 call to Errno::_tie_it
532 ${$options{ErrStr}} = "Could not create temp file $path: $!";
533 return ();
534 }
535
536 # Loop round for another try
537
538 }
539 } elsif ($options{"mkdir"}) {
540
541 # Open the temp directory
542 if (mkdir( $path, 0700)) {
543 # in case of odd umask
544 chmod(0700, $path);
545
546 return undef, $path;
547 } else {
548
549 # Abort with error if the reason for failure was anything
550 # except EEXIST
551 unless ($!{EEXIST}) {
552 ${$options{ErrStr}} = "Could not create directory $path: $!";
553 return ();
554 }
555
556 # Loop round for another try
557
558 }
559
560 } else {
561
562 # Return true if the file can not be found
563 # Directory has been checked previously
564
565 return (undef, $path) unless -e $path;
566
567 # Try again until MAX_TRIES
568
569 }
570
571 # Did not successfully open the tempfile/dir
572 # so try again with a different set of random letters
573 # No point in trying to increment unless we have only
574 # 1 X say and the randomness could come up with the same
575 # file MAX_TRIES in a row.
576
577 # Store current attempt - in principle this implies that the
578 # 3rd time around the open attempt that the first temp file
579 # name could be generated again. Probably should store each
580 # attempt and make sure that none are repeated
581
582 my $original = $path;
583 my $counter = 0; # Stop infinite loop
584 my $MAX_GUESS = 50;
585
586 do {
587
588 # Generate new name from original template
589 $path = _replace_XX($template, $options{"suffixlen"});
590
591 $counter++;
592
593 } until ($path ne $original || $counter > $MAX_GUESS);
594
595 # Check for out of control looping
596 if ($counter > $MAX_GUESS) {
597 ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)";
598 return ();
599 }
600
601 }
602
603 # If we get here, we have run out of tries
604 ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts ("
605 . MAX_TRIES . ") to open temp file/dir";
606
607 return ();
608
609}
610
611# Internal routine to replace the XXXX... with random characters
612# This has to be done by _gettemp() every time it fails to
613# open a temp file/dir
614
615# Arguments: $template (the template with XXX),
616# $ignore (number of characters at end to ignore)
617
618# Returns: modified template
619
620sub _replace_XX {
621
622 croak 'Usage: _replace_XX($template, $ignore)'
623 unless scalar(@_) == 2;
624
625 my ($path, $ignore) = @_;
626
627 # Do it as an if, since the suffix adjusts which section to replace
628 # and suffixlen=0 returns nothing if used in the substr directly
629 # Alternatively, could simply set $ignore to length($path)-1
630 # Don't want to always use substr when not required though.
631 my $end = ( $] >= 5.006 ? "\\z" : "\\Z" );
632
633 if ($ignore) {
634 substr($path, 0, - $ignore) =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge;
635 } else {
636 $path =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge;
637 }
638 return $path;
639}
640
641# Internal routine to force a temp file to be writable after
642# it is created so that we can unlink it. Windows seems to occasionally
643# force a file to be readonly when written to certain temp locations
644sub _force_writable {
645 my $file = shift;
646 chmod 0600, $file;
647}
648
649
650# internal routine to check to see if the directory is safe
651# First checks to see if the directory is not owned by the
652# current user or root. Then checks to see if anyone else
653# can write to the directory and if so, checks to see if
654# it has the sticky bit set
655
656# Will not work on systems that do not support sticky bit
657
658#Args: directory path to check
659# Optionally: reference to scalar to contain error message
660# Returns true if the path is safe and false otherwise.
661# Returns undef if can not even run stat() on the path
662
663# This routine based on version written by Tom Christiansen
664
665# Presumably, by the time we actually attempt to create the
666# file or directory in this directory, it may not be safe
667# anymore... Have to run _is_safe directly after the open.
668
669sub _is_safe {
670
671 my $path = shift;
672 my $err_ref = shift;
673
674 # Stat path
675 my @info = stat($path);
676 unless (scalar(@info)) {
677 $$err_ref = "stat(path) returned no values";
678 return 0;
679 }
680 ;
681 return 1 if $^O eq 'VMS'; # owner delete control at file level
682
683 # Check to see whether owner is neither superuser (or a system uid) nor me
684 # Use the effective uid from the $> variable
685 # UID is in [4]
686 if ($info[4] > File::Temp->top_system_uid() && $info[4] != $>) {
687
688 Carp::cluck(sprintf "uid=$info[4] topuid=%s euid=$> path='$path'",
689 File::Temp->top_system_uid());
690
691 $$err_ref = "Directory owned neither by root nor the current user"
692 if ref($err_ref);
693 return 0;
694 }
695
696 # check whether group or other can write file
697 # use 066 to detect either reading or writing
698 # use 022 to check writability
699 # Do it with S_IWOTH and S_IWGRP for portability (maybe)
700 # mode is in info[2]
701 if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable?
702 ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable?
703 # Must be a directory
704 unless (-d $path) {
705 $$err_ref = "Path ($path) is not a directory"
706 if ref($err_ref);
707 return 0;
708 }
709 # Must have sticky bit set
710 unless (-k $path) {
711 $$err_ref = "Sticky bit not set on $path when dir is group|world writable"
712 if ref($err_ref);
713 return 0;
714 }
715 }
716
717 return 1;
718}
719
720# Internal routine to check whether a directory is safe
721# for temp files. Safer than _is_safe since it checks for
722# the possibility of chown giveaway and if that is a possibility
723# checks each directory in the path to see if it is safe (with _is_safe)
724
725# If _PC_CHOWN_RESTRICTED is not set, does the full test of each
726# directory anyway.
727
728# Takes optional second arg as scalar ref to error reason
729
730sub _is_verysafe {
731
732 # Need POSIX - but only want to bother if really necessary due to overhead
733 require POSIX;
734
735 my $path = shift;
736 print "_is_verysafe testing $path\n" if $DEBUG;
737 return 1 if $^O eq 'VMS'; # owner delete control at file level
738
739 my $err_ref = shift;
740
741 # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined
742 # and If it is not there do the extensive test
743 local($@);
744 my $chown_restricted;
745 $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED()
746 if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1};
747
748 # If chown_resticted is set to some value we should test it
749 if (defined $chown_restricted) {
750
751 # Return if the current directory is safe
752 return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted );
753
754 }
755
756 # To reach this point either, the _PC_CHOWN_RESTRICTED symbol
757 # was not available or the symbol was there but chown giveaway
758 # is allowed. Either way, we now have to test the entire tree for
759 # safety.
760
761 # Convert path to an absolute directory if required
762 unless (File::Spec->file_name_is_absolute($path)) {
763 $path = File::Spec->rel2abs($path);
764 }
765
766 # Split directory into components - assume no file
767 my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1);
768
769 # Slightly less efficient than having a function in File::Spec
770 # to chop off the end of a directory or even a function that
771 # can handle ../ in a directory tree
772 # Sometimes splitdir() returns a blank at the end
773 # so we will probably check the bottom directory twice in some cases
774 my @dirs = File::Spec->splitdir($directories);
775
776 # Concatenate one less directory each time around
777 foreach my $pos (0.. $#dirs) {
778 # Get a directory name
779 my $dir = File::Spec->catpath($volume,
780 File::Spec->catdir(@dirs[0.. $#dirs - $pos]),
781 ''
782 );
783
784 print "TESTING DIR $dir\n" if $DEBUG;
785
786 # Check the directory
787 return 0 unless _is_safe($dir,$err_ref);
788
789 }
790
791 return 1;
792}
793
- -
796# internal routine to determine whether unlink works on this
797# platform for files that are currently open.
798# Returns true if we can, false otherwise.
799
800# Currently WinNT, OS/2 and VMS can not unlink an opened file
801# On VMS this is because the O_EXCL flag is used to open the
802# temporary file. Currently I do not know enough about the issues
803# on VMS to decide whether O_EXCL is a requirement.
804
805sub _can_unlink_opened_file {
806
807 if (grep $^O eq $_, qw/MSWin32 os2 VMS dos MacOS haiku/) {
808 return 0;
809 } else {
810 return 1;
811 }
812
813}
814
815# internal routine to decide which security levels are allowed
816# see safe_level() for more information on this
817
818# Controls whether the supplied security level is allowed
819
820# $cando = _can_do_level( $level )
821
822sub _can_do_level {
823
824 # Get security level
825 my $level = shift;
826
827 # Always have to be able to do STANDARD
828 return 1 if $level == STANDARD;
829
830 # Currently, the systems that can do HIGH or MEDIUM are identical
831 if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'MacOS' || $^O eq 'mpeix') {
832 return 0;
833 } else {
834 return 1;
835 }
836
837}
838
839# This routine sets up a deferred unlinking of a specified
840# filename and filehandle. It is used in the following cases:
841# - Called by unlink0 if an opened file can not be unlinked
842# - Called by tempfile() if files are to be removed on shutdown
843# - Called by tempdir() if directories are to be removed on shutdown
844
845# Arguments:
846# _deferred_unlink( $fh, $fname, $isdir );
847#
848# - filehandle (so that it can be explicitly closed if open
849# - filename (the thing we want to remove)
850# - isdir (flag to indicate that we are being given a directory)
851# [and hence no filehandle]
852
853# Status is not referred to since all the magic is done with an END block
854
855{
856 # Will set up two lexical variables to contain all the files to be
857 # removed. One array for files, another for directories They will
858 # only exist in this block.
859
860 # This means we only have to set up a single END block to remove
861 # all files.
862
863 # in order to prevent child processes inadvertently deleting the parent
864 # temp files we use a hash to store the temp files and directories
865 # created by a particular process id.
866
867 # %files_to_unlink contains values that are references to an array of
868 # array references containing the filehandle and filename associated with
869 # the temp file.
8701200ns my (%files_to_unlink, %dirs_to_unlink);
871
872 # Set up an end block to use these arrays
873
# spent 26µs (11+15) within File::Temp::END which was called: # once (11µs+15µs) by main::RUNTIME at line 0 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
END {
87416µs local($., $@, $!, $^E, $?);
87514µs115µs cleanup(at_exit => 1);
# spent 15µs making 1 call to File::Temp::cleanup
876 }
877
878 # Cleanup function. Always triggered on END (with at_exit => 1) but
879 # can be invoked manually.
880
# spent 15µs (15+300ns) within File::Temp::cleanup which was called: # once (15µs+300ns) by File::Temp::END at line 875
sub cleanup {
8811700ns my %h = @_;
8821600ns my $at_exit = delete $h{at_exit};
88311µs $at_exit = 0 if not defined $at_exit;
88434µs1300ns { my @k = sort keys %h; die "unrecognized parameters: @k" if @k }
# spent 300ns making 1 call to CORE::sort
885
88612µs if (!$KEEP_ALL) {
887 # Files
888 my @files = (exists $files_to_unlink{$$} ?
88911µs @{ $files_to_unlink{$$} } : () );
8901800ns foreach my $file (@files) {
891 # close the filehandle without checking its state
892 # in order to make real sure that this is closed
893 # if its already closed then I don't care about the answer
894 # probably a better way to do this
895 close($file->[0]); # file handle is [0]
896
897 if (-f $file->[1]) { # file name is [1]
898 _force_writable( $file->[1] ); # for windows
899 unlink $file->[1] or warn "Error removing ".$file->[1];
900 }
901 }
902 # Dirs
903 my @dirs = (exists $dirs_to_unlink{$$} ?
90412µs @{ $dirs_to_unlink{$$} } : () );
9051500ns my ($cwd, $cwd_to_remove);
9061500ns foreach my $dir (@dirs) {
907 if (-d $dir) {
908 # Some versions of rmtree will abort if you attempt to remove
909 # the directory you are sitting in. For automatic cleanup
910 # at program exit, we avoid this by chdir()ing out of the way
911 # first. If not at program exit, it's best not to mess with the
912 # current directory, so just let it fail with a warning.
913 if ($at_exit) {
914 $cwd = Cwd::abs_path(File::Spec->curdir) if not defined $cwd;
915 my $abs = Cwd::abs_path($dir);
916 if ($abs eq $cwd) {
917 $cwd_to_remove = $dir;
918 next;
919 }
920 }
921 eval { rmtree($dir, $DEBUG, 0); };
922 warn $@ if ($@ && $^W);
923 }
924 }
925
9261500ns if (defined $cwd_to_remove) {
927 # We do need to clean up the current directory, and everything
928 # else is done, so get out of there and remove it.
929 chdir $cwd_to_remove or die "cannot chdir to $cwd_to_remove: $!";
930 my $updir = File::Spec->updir;
931 chdir $updir or die "cannot chdir to $updir: $!";
932 eval { rmtree($cwd_to_remove, $DEBUG, 0); };
933 warn $@ if ($@ && $^W);
934 }
935
936 # clear the arrays
937 @{ $files_to_unlink{$$} } = ()
9381800ns if exists $files_to_unlink{$$};
939 @{ $dirs_to_unlink{$$} } = ()
9401800ns if exists $dirs_to_unlink{$$};
941 }
942 }
943
944
945 # This is the sub called to register a file for deferred unlinking
946 # This could simply store the input parameters and defer everything
947 # until the END block. For now we do a bit of checking at this
948 # point in order to make sure that (1) we have a file/dir to delete
949 # and (2) we have been called with the correct arguments.
950 sub _deferred_unlink {
951
952 croak 'Usage: _deferred_unlink($fh, $fname, $isdir)'
953 unless scalar(@_) == 3;
954
955 my ($fh, $fname, $isdir) = @_;
956
957 warn "Setting up deferred removal of $fname\n"
958 if $DEBUG;
959
960 # make sure we save the absolute path for later cleanup
961 # OK to untaint because we only ever use this internally
962 # as a file path, never interpolating into the shell
963 $fname = Cwd::abs_path($fname);
964 ($fname) = $fname =~ /^(.*)$/;
965
966 # If we have a directory, check that it is a directory
967 if ($isdir) {
968
969 if (-d $fname) {
970
971 # Directory exists so store it
972 # first on VMS turn []foo into [.foo] for rmtree
973 $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS';
974 $dirs_to_unlink{$$} = []
975 unless exists $dirs_to_unlink{$$};
976 push (@{ $dirs_to_unlink{$$} }, $fname);
977
978 } else {
979 carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W;
980 }
981
982 } else {
983
984 if (-f $fname) {
985
986 # file exists so store handle and name for later removal
987 $files_to_unlink{$$} = []
988 unless exists $files_to_unlink{$$};
989 push(@{ $files_to_unlink{$$} }, [$fh, $fname]);
990
991 } else {
992 carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W;
993 }
994
995 }
996
997 }
998
999
1000}
1001
1002# normalize argument keys to upper case and do consistent handling
1003# of leading template vs TEMPLATE
10041100nssub _parse_args {
1005 my $leading_template = (scalar(@_) % 2 == 1 ? shift(@_) : '' );
1006 my %args = @_;
1007 %args = map +(uc($_) => $args{$_}), keys %args;
1008
1009 # template (store it in an array so that it will
1010 # disappear from the arg list of tempfile)
1011 my @template = (
1012 exists $args{TEMPLATE} ? $args{TEMPLATE} :
1013 $leading_template ? $leading_template : ()
1014 );
1015 delete $args{TEMPLATE};
1016
1017 return( \@template, \%args );
1018}
1019
1020#pod =head1 OBJECT-ORIENTED INTERFACE
1021#pod
1022#pod This is the primary interface for interacting with
1023#pod C<File::Temp>. Using the OO interface a temporary file can be created
1024#pod when the object is constructed and the file can be removed when the
1025#pod object is no longer required.
1026#pod
1027#pod Note that there is no method to obtain the filehandle from the
1028#pod C<File::Temp> object. The object itself acts as a filehandle. The object
1029#pod isa C<IO::Handle> and isa C<IO::Seekable> so all those methods are
1030#pod available.
1031#pod
1032#pod Also, the object is configured such that it stringifies to the name of the
1033#pod temporary file and so can be compared to a filename directly. It numifies
1034#pod to the C<refaddr> the same as other handles and so can be compared to other
1035#pod handles with C<==>.
1036#pod
1037#pod $fh eq $filename # as a string
1038#pod $fh != \*STDOUT # as a number
1039#pod
1040#pod Available since 0.14.
1041#pod
1042#pod =over 4
1043#pod
1044#pod =item B<new>
1045#pod
1046#pod Create a temporary file object.
1047#pod
1048#pod my $tmp = File::Temp->new();
1049#pod
1050#pod by default the object is constructed as if C<tempfile>
1051#pod was called without options, but with the additional behaviour
1052#pod that the temporary file is removed by the object destructor
1053#pod if UNLINK is set to true (the default).
1054#pod
1055#pod Supported arguments are the same as for C<tempfile>: UNLINK
1056#pod (defaulting to true), DIR, EXLOCK, PERMS and SUFFIX.
1057#pod Additionally, the filename
1058#pod template is specified using the TEMPLATE option. The OPEN option
1059#pod is not supported (the file is always opened).
1060#pod
1061#pod $tmp = File::Temp->new( TEMPLATE => 'tempXXXXX',
1062#pod DIR => 'mydir',
1063#pod SUFFIX => '.dat');
1064#pod
1065#pod Arguments are case insensitive.
1066#pod
1067#pod Can call croak() if an error occurs.
1068#pod
1069#pod Available since 0.14.
1070#pod
1071#pod TEMPLATE available since 0.23
1072#pod
1073#pod =cut
1074
1075sub new {
1076 my $proto = shift;
1077 my $class = ref($proto) || $proto;
1078
1079 my ($maybe_template, $args) = _parse_args(@_);
1080
1081 # see if they are unlinking (defaulting to yes)
1082 my $unlink = (exists $args->{UNLINK} ? $args->{UNLINK} : 1 );
1083 delete $args->{UNLINK};
1084
1085 # Protect OPEN
1086 delete $args->{OPEN};
1087
1088 # Open the file and retain file handle and file name
1089 my ($fh, $path) = tempfile( @$maybe_template, %$args );
1090
1091 print "Tmp: $fh - $path\n" if $DEBUG;
1092
1093 # Store the filename in the scalar slot
1094 ${*$fh} = $path;
1095
1096 # Cache the filename by pid so that the destructor can decide whether to remove it
1097 $FILES_CREATED_BY_OBJECT{$$}{$path} = 1;
1098
1099 # Store unlink information in hash slot (plus other constructor info)
1100 %{*$fh} = %$args;
1101
1102 # create the object
1103 bless $fh, $class;
1104
1105 # final method-based configuration
1106 $fh->unlink_on_destroy( $unlink );
1107
1108 return $fh;
1109}
1110
1111#pod =item B<newdir>
1112#pod
1113#pod Create a temporary directory using an object oriented interface.
1114#pod
1115#pod $dir = File::Temp->newdir();
1116#pod
1117#pod By default the directory is deleted when the object goes out of scope.
1118#pod
1119#pod Supports the same options as the C<tempdir> function. Note that directories
1120#pod created with this method default to CLEANUP => 1.
1121#pod
1122#pod $dir = File::Temp->newdir( $template, %options );
1123#pod
1124#pod A template may be specified either with a leading template or
1125#pod with a TEMPLATE argument.
1126#pod
1127#pod Available since 0.19.
1128#pod
1129#pod TEMPLATE available since 0.23.
1130#pod
1131#pod =cut
1132
1133sub newdir {
1134 my $self = shift;
1135
1136 my ($maybe_template, $args) = _parse_args(@_);
1137
1138 # handle CLEANUP without passing CLEANUP to tempdir
1139 my $cleanup = (exists $args->{CLEANUP} ? $args->{CLEANUP} : 1 );
1140 delete $args->{CLEANUP};
1141
1142 my $tempdir = tempdir( @$maybe_template, %$args);
1143
1144 # get a safe absolute path for cleanup, just like
1145 # happens in _deferred_unlink
1146 my $real_dir = Cwd::abs_path( $tempdir );
1147 ($real_dir) = $real_dir =~ /^(.*)$/;
1148
1149 return bless { DIRNAME => $tempdir,
1150 REALNAME => $real_dir,
1151 CLEANUP => $cleanup,
1152 LAUNCHPID => $$,
1153 }, "File::Temp::Dir";
1154}
1155
1156#pod =item B<filename>
1157#pod
1158#pod Return the name of the temporary file associated with this object
1159#pod (if the object was created using the "new" constructor).
1160#pod
1161#pod $filename = $tmp->filename;
1162#pod
1163#pod This method is called automatically when the object is used as
1164#pod a string.
1165#pod
1166#pod Current API available since 0.14
1167#pod
1168#pod =cut
1169
1170sub filename {
1171 my $self = shift;
1172 return ${*$self};
1173}
1174
1175sub STRINGIFY {
1176 my $self = shift;
1177 return $self->filename;
1178}
1179
1180# For reference, can't use '0+'=>\&Scalar::Util::refaddr directly because
1181# refaddr() demands one parameter only, whereas overload.pm calls with three
1182# even for unary operations like '0+'.
1183sub NUMIFY {
1184 return refaddr($_[0]);
1185}
1186
1187#pod =item B<dirname>
1188#pod
1189#pod Return the name of the temporary directory associated with this
1190#pod object (if the object was created using the "newdir" constructor).
1191#pod
1192#pod $dirname = $tmpdir->dirname;
1193#pod
1194#pod This method is called automatically when the object is used in string context.
1195#pod
1196#pod =item B<unlink_on_destroy>
1197#pod
1198#pod Control whether the file is unlinked when the object goes out of scope.
1199#pod The file is removed if this value is true and $KEEP_ALL is not.
1200#pod
1201#pod $fh->unlink_on_destroy( 1 );
1202#pod
1203#pod Default is for the file to be removed.
1204#pod
1205#pod Current API available since 0.15
1206#pod
1207#pod =cut
1208
1209sub unlink_on_destroy {
1210 my $self = shift;
1211 if (@_) {
1212 ${*$self}{UNLINK} = shift;
1213 }
1214 return ${*$self}{UNLINK};
1215}
1216
1217#pod =item B<DESTROY>
1218#pod
1219#pod When the object goes out of scope, the destructor is called. This
1220#pod destructor will attempt to unlink the file (using L<unlink1|"unlink1">)
1221#pod if the constructor was called with UNLINK set to 1 (the default state
1222#pod if UNLINK is not specified).
1223#pod
1224#pod No error is given if the unlink fails.
1225#pod
1226#pod If the object has been passed to a child process during a fork, the
1227#pod file will be deleted when the object goes out of scope in the parent.
1228#pod
1229#pod For a temporary directory object the directory will be removed unless
1230#pod the CLEANUP argument was used in the constructor (and set to false) or
1231#pod C<unlink_on_destroy> was modified after creation. Note that if a temp
1232#pod directory is your current directory, it cannot be removed - a warning
1233#pod will be given in this case. C<chdir()> out of the directory before
1234#pod letting the object go out of scope.
1235#pod
1236#pod If the global variable $KEEP_ALL is true, the file or directory
1237#pod will not be removed.
1238#pod
1239#pod =cut
1240
1241sub DESTROY {
1242 local($., $@, $!, $^E, $?);
1243 my $self = shift;
1244
1245 # Make sure we always remove the file from the global hash
1246 # on destruction. This prevents the hash from growing uncontrollably
1247 # and post-destruction there is no reason to know about the file.
1248 my $file = $self->filename;
1249 my $was_created_by_proc;
1250 if (exists $FILES_CREATED_BY_OBJECT{$$}{$file}) {
1251 $was_created_by_proc = 1;
1252 delete $FILES_CREATED_BY_OBJECT{$$}{$file};
1253 }
1254
1255 if (${*$self}{UNLINK} && !$KEEP_ALL) {
1256 print "# ---------> Unlinking $self\n" if $DEBUG;
1257
1258 # only delete if this process created it
1259 return unless $was_created_by_proc;
1260
1261 # The unlink1 may fail if the file has been closed
1262 # by the caller. This leaves us with the decision
1263 # of whether to refuse to remove the file or simply
1264 # do an unlink without test. Seems to be silly
1265 # to do this when we are trying to be careful
1266 # about security
1267 _force_writable( $file ); # for windows
1268 unlink1( $self, $file )
1269 or unlink($file);
1270 }
1271}
1272
1273#pod =back
1274#pod
1275#pod =head1 FUNCTIONS
1276#pod
1277#pod This section describes the recommended interface for generating
1278#pod temporary files and directories.
1279#pod
1280#pod =over 4
1281#pod
1282#pod =item B<tempfile>
1283#pod
1284#pod This is the basic function to generate temporary files.
1285#pod The behaviour of the file can be changed using various options:
1286#pod
1287#pod $fh = tempfile();
1288#pod ($fh, $filename) = tempfile();
1289#pod
1290#pod Create a temporary file in the directory specified for temporary
1291#pod files, as specified by the tmpdir() function in L<File::Spec>.
1292#pod
1293#pod ($fh, $filename) = tempfile($template);
1294#pod
1295#pod Create a temporary file in the current directory using the supplied
1296#pod template. Trailing `X' characters are replaced with random letters to
1297#pod generate the filename. At least four `X' characters must be present
1298#pod at the end of the template.
1299#pod
1300#pod ($fh, $filename) = tempfile($template, SUFFIX => $suffix)
1301#pod
1302#pod Same as previously, except that a suffix is added to the template
1303#pod after the `X' translation. Useful for ensuring that a temporary
1304#pod filename has a particular extension when needed by other applications.
1305#pod But see the WARNING at the end.
1306#pod
1307#pod ($fh, $filename) = tempfile($template, DIR => $dir);
1308#pod
1309#pod Translates the template as before except that a directory name
1310#pod is specified.
1311#pod
1312#pod ($fh, $filename) = tempfile($template, TMPDIR => 1);
1313#pod
1314#pod Equivalent to specifying a DIR of "File::Spec->tmpdir", writing the file
1315#pod into the same temporary directory as would be used if no template was
1316#pod specified at all.
1317#pod
1318#pod ($fh, $filename) = tempfile($template, UNLINK => 1);
1319#pod
1320#pod Return the filename and filehandle as before except that the file is
1321#pod automatically removed when the program exits (dependent on
1322#pod $KEEP_ALL). Default is for the file to be removed if a file handle is
1323#pod requested and to be kept if the filename is requested. In a scalar
1324#pod context (where no filename is returned) the file is always deleted
1325#pod either (depending on the operating system) on exit or when it is
1326#pod closed (unless $KEEP_ALL is true when the temp file is created).
1327#pod
1328#pod Use the object-oriented interface if fine-grained control of when
1329#pod a file is removed is required.
1330#pod
1331#pod If the template is not specified, a template is always
1332#pod automatically generated. This temporary file is placed in tmpdir()
1333#pod (L<File::Spec>) unless a directory is specified explicitly with the
1334#pod DIR option.
1335#pod
1336#pod $fh = tempfile( DIR => $dir );
1337#pod
1338#pod If called in scalar context, only the filehandle is returned and the
1339#pod file will automatically be deleted when closed on operating systems
1340#pod that support this (see the description of tmpfile() elsewhere in this
1341#pod document). This is the preferred mode of operation, as if you only
1342#pod have a filehandle, you can never create a race condition by fumbling
1343#pod with the filename. On systems that can not unlink an open file or can
1344#pod not mark a file as temporary when it is opened (for example, Windows
1345#pod NT uses the C<O_TEMPORARY> flag) the file is marked for deletion when
1346#pod the program ends (equivalent to setting UNLINK to 1). The C<UNLINK>
1347#pod flag is ignored if present.
1348#pod
1349#pod (undef, $filename) = tempfile($template, OPEN => 0);
1350#pod
1351#pod This will return the filename based on the template but
1352#pod will not open this file. Cannot be used in conjunction with
1353#pod UNLINK set to true. Default is to always open the file
1354#pod to protect from possible race conditions. A warning is issued
1355#pod if warnings are turned on. Consider using the tmpnam()
1356#pod and mktemp() functions described elsewhere in this document
1357#pod if opening the file is not required.
1358#pod
1359#pod To open the temporary filehandle with O_EXLOCK (open with exclusive
1360#pod file lock) use C<< EXLOCK=>1 >>. This is supported only by some
1361#pod operating systems (most notably BSD derived systems). By default
1362#pod EXLOCK will be false. Former C<File::Temp> versions set EXLOCK to
1363#pod true, so to be sure to get an unlocked filehandle also with older
1364#pod versions, explicitly set C<< EXLOCK=>0 >>.
1365#pod
1366#pod ($fh, $filename) = tempfile($template, EXLOCK => 1);
1367#pod
1368#pod By default, the temp file is created with 0600 file permissions.
1369#pod Use C<PERMS> to change this:
1370#pod
1371#pod ($fh, $filename) = tempfile($template, PERMS => 0666);
1372#pod
1373#pod Options can be combined as required.
1374#pod
1375#pod Will croak() if there is an error.
1376#pod
1377#pod Available since 0.05.
1378#pod
1379#pod UNLINK flag available since 0.10.
1380#pod
1381#pod TMPDIR flag available since 0.19.
1382#pod
1383#pod EXLOCK flag available since 0.19.
1384#pod
1385#pod PERMS flag available since 0.2310.
1386#pod
1387#pod =cut
1388
1389sub tempfile {
1390 if ( @_ && $_[0] eq 'File::Temp' ) {
1391 croak "'tempfile' can't be called as a method";
1392 }
1393 # Can not check for argument count since we can have any
1394 # number of args
1395
1396 # Default options
1397 my %options = (
1398 "DIR" => undef, # Directory prefix
1399 "SUFFIX" => '', # Template suffix
1400 "UNLINK" => 0, # Do not unlink file on exit
1401 "OPEN" => 1, # Open file
1402 "TMPDIR" => 0, # Place tempfile in tempdir if template specified
1403 "EXLOCK" => 0, # Open file with O_EXLOCK
1404 "PERMS" => undef, # File permissions
1405 );
1406
1407 # Check to see whether we have an odd or even number of arguments
1408 my ($maybe_template, $args) = _parse_args(@_);
1409 my $template = @$maybe_template ? $maybe_template->[0] : undef;
1410
1411 # Read the options and merge with defaults
1412 %options = (%options, %$args);
1413
1414 # First decision is whether or not to open the file
1415 if (! $options{"OPEN"}) {
1416
1417 warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n"
1418 if $^W;
1419
1420 }
1421
1422 if ($options{"DIR"} and $^O eq 'VMS') {
1423
1424 # on VMS turn []foo into [.foo] for concatenation
1425 $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"});
1426 }
1427
1428 # Construct the template
1429
1430 # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc
1431 # functions or simply constructing a template and using _gettemp()
1432 # explicitly. Go for the latter
1433
1434 # First generate a template if not defined and prefix the directory
1435 # If no template must prefix the temp directory
1436 if (defined $template) {
1437 # End up with current directory if neither DIR not TMPDIR are set
1438 if ($options{"DIR"}) {
1439
1440 $template = File::Spec->catfile($options{"DIR"}, $template);
1441
1442 } elsif ($options{TMPDIR}) {
1443
1444 $template = File::Spec->catfile(_wrap_file_spec_tmpdir(), $template );
1445
1446 }
1447
1448 } else {
1449
1450 if ($options{"DIR"}) {
1451
1452 $template = File::Spec->catfile($options{"DIR"}, TEMPXXX);
1453
1454 } else {
1455
1456 $template = File::Spec->catfile(_wrap_file_spec_tmpdir(), TEMPXXX);
1457
1458 }
1459
1460 }
1461
1462 # Now add a suffix
1463 $template .= $options{"SUFFIX"};
1464
1465 # Determine whether we should tell _gettemp to unlink the file
1466 # On unix this is irrelevant and can be worked out after the file is
1467 # opened (simply by unlinking the open filehandle). On Windows or VMS
1468 # we have to indicate temporary-ness when we open the file. In general
1469 # we only want a true temporary file if we are returning just the
1470 # filehandle - if the user wants the filename they probably do not
1471 # want the file to disappear as soon as they close it (which may be
1472 # important if they want a child process to use the file)
1473 # For this reason, tie unlink_on_close to the return context regardless
1474 # of OS.
1475 my $unlink_on_close = ( wantarray ? 0 : 1);
1476
1477 # Create the file
1478 my ($fh, $path, $errstr);
1479 croak "Error in tempfile() using template $template: $errstr"
1480 unless (($fh, $path) = _gettemp($template,
1481 "open" => $options{OPEN},
1482 "mkdir" => 0,
1483 "unlink_on_close" => $unlink_on_close,
1484 "suffixlen" => length($options{SUFFIX}),
1485 "ErrStr" => \$errstr,
1486 "use_exlock" => $options{EXLOCK},
1487 "file_permissions" => $options{PERMS},
1488 ) );
1489
1490 # Set up an exit handler that can do whatever is right for the
1491 # system. This removes files at exit when requested explicitly or when
1492 # system is asked to unlink_on_close but is unable to do so because
1493 # of OS limitations.
1494 # The latter should be achieved by using a tied filehandle.
1495 # Do not check return status since this is all done with END blocks.
1496 _deferred_unlink($fh, $path, 0) if $options{"UNLINK"};
1497
1498 # Return
1499 if (wantarray()) {
1500
1501 if ($options{'OPEN'}) {
1502 return ($fh, $path);
1503 } else {
1504 return (undef, $path);
1505 }
1506
1507 } else {
1508
1509 # Unlink the file. It is up to unlink0 to decide what to do with
1510 # this (whether to unlink now or to defer until later)
1511 unlink0($fh, $path) or croak "Error unlinking file $path using unlink0";
1512
1513 # Return just the filehandle.
1514 return $fh;
1515 }
1516
1517
1518}
1519
1520# On Windows under taint mode, File::Spec could suggest "C:\" as a tempdir
1521# which might not be writable. If that is the case, we fallback to a
1522# user directory. See https://rt.cpan.org/Ticket/Display.html?id=60340
1523
1524{
15251200ns my ($alt_tmpdir, $checked);
1526
1527 sub _wrap_file_spec_tmpdir {
1528 return File::Spec->tmpdir unless $^O eq "MSWin32" && ${^TAINT};
1529
1530 if ( $checked ) {
1531 return $alt_tmpdir ? $alt_tmpdir : File::Spec->tmpdir;
1532 }
1533
1534 # probe what File::Spec gives and find a fallback
1535 my $xxpath = _replace_XX( "X" x 10, 0 );
1536
1537 # First, see if File::Spec->tmpdir is writable
1538 my $tmpdir = File::Spec->tmpdir;
1539 my $testpath = File::Spec->catdir( $tmpdir, $xxpath );
1540 if (mkdir( $testpath, 0700) ) {
1541 $checked = 1;
1542 rmdir $testpath;
1543 return $tmpdir;
1544 }
1545
1546 # Next, see if CSIDL_LOCAL_APPDATA is writable
1547 require Win32;
1548 my $local_app = File::Spec->catdir(
1549 Win32::GetFolderPath( Win32::CSIDL_LOCAL_APPDATA() ), 'Temp'
1550 );
1551 $testpath = File::Spec->catdir( $local_app, $xxpath );
1552 if ( -e $local_app or mkdir( $local_app, 0700 ) ) {
1553 if (mkdir( $testpath, 0700) ) {
1554 $checked = 1;
1555 rmdir $testpath;
1556 return $alt_tmpdir = $local_app;
1557 }
1558 }
1559
1560 # Can't find something writable
1561 croak << "HERE";
1562Couldn't find a writable temp directory in taint mode. Tried:
1563 $tmpdir
1564 $local_app
1565
1566Try setting and untainting the TMPDIR environment variable.
1567HERE
1568
1569 }
1570}
1571
1572#pod =item B<tempdir>
1573#pod
1574#pod This is the recommended interface for creation of temporary
1575#pod directories. By default the directory will not be removed on exit
1576#pod (that is, it won't be temporary; this behaviour can not be changed
1577#pod because of issues with backwards compatibility). To enable removal
1578#pod either use the CLEANUP option which will trigger removal on program
1579#pod exit, or consider using the "newdir" method in the object interface which
1580#pod will allow the directory to be cleaned up when the object goes out of
1581#pod scope.
1582#pod
1583#pod The behaviour of the function depends on the arguments:
1584#pod
1585#pod $tempdir = tempdir();
1586#pod
1587#pod Create a directory in tmpdir() (see L<File::Spec|File::Spec>).
1588#pod
1589#pod $tempdir = tempdir( $template );
1590#pod
1591#pod Create a directory from the supplied template. This template is
1592#pod similar to that described for tempfile(). `X' characters at the end
1593#pod of the template are replaced with random letters to construct the
1594#pod directory name. At least four `X' characters must be in the template.
1595#pod
1596#pod $tempdir = tempdir ( DIR => $dir );
1597#pod
1598#pod Specifies the directory to use for the temporary directory.
1599#pod The temporary directory name is derived from an internal template.
1600#pod
1601#pod $tempdir = tempdir ( $template, DIR => $dir );
1602#pod
1603#pod Prepend the supplied directory name to the template. The template
1604#pod should not include parent directory specifications itself. Any parent
1605#pod directory specifications are removed from the template before
1606#pod prepending the supplied directory.
1607#pod
1608#pod $tempdir = tempdir ( $template, TMPDIR => 1 );
1609#pod
1610#pod Using the supplied template, create the temporary directory in
1611#pod a standard location for temporary files. Equivalent to doing
1612#pod
1613#pod $tempdir = tempdir ( $template, DIR => File::Spec->tmpdir);
1614#pod
1615#pod but shorter. Parent directory specifications are stripped from the
1616#pod template itself. The C<TMPDIR> option is ignored if C<DIR> is set
1617#pod explicitly. Additionally, C<TMPDIR> is implied if neither a template
1618#pod nor a directory are supplied.
1619#pod
1620#pod $tempdir = tempdir( $template, CLEANUP => 1);
1621#pod
1622#pod Create a temporary directory using the supplied template, but
1623#pod attempt to remove it (and all files inside it) when the program
1624#pod exits. Note that an attempt will be made to remove all files from
1625#pod the directory even if they were not created by this module (otherwise
1626#pod why ask to clean it up?). The directory removal is made with
1627#pod the rmtree() function from the L<File::Path|File::Path> module.
1628#pod Of course, if the template is not specified, the temporary directory
1629#pod will be created in tmpdir() and will also be removed at program exit.
1630#pod
1631#pod Will croak() if there is an error.
1632#pod
1633#pod Current API available since 0.05.
1634#pod
1635#pod =cut
1636
1637# '
1638
16391200nssub tempdir {
1640 if ( @_ && $_[0] eq 'File::Temp' ) {
1641 croak "'tempdir' can't be called as a method";
1642 }
1643
1644 # Can not check for argument count since we can have any
1645 # number of args
1646
1647 # Default options
1648 my %options = (
1649 "CLEANUP" => 0, # Remove directory on exit
1650 "DIR" => '', # Root directory
1651 "TMPDIR" => 0, # Use tempdir with template
1652 );
1653
1654 # Check to see whether we have an odd or even number of arguments
1655 my ($maybe_template, $args) = _parse_args(@_);
1656 my $template = @$maybe_template ? $maybe_template->[0] : undef;
1657
1658 # Read the options and merge with defaults
1659 %options = (%options, %$args);
1660
1661 # Modify or generate the template
1662
1663 # Deal with the DIR and TMPDIR options
1664 if (defined $template) {
1665
1666 # Need to strip directory path if using DIR or TMPDIR
1667 if ($options{'TMPDIR'} || $options{'DIR'}) {
1668
1669 # Strip parent directory from the filename
1670 #
1671 # There is no filename at the end
1672 $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS';
1673 my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1);
1674
1675 # Last directory is then our template
1676 $template = (File::Spec->splitdir($directories))[-1];
1677
1678 # Prepend the supplied directory or temp dir
1679 if ($options{"DIR"}) {
1680
1681 $template = File::Spec->catdir($options{"DIR"}, $template);
1682
1683 } elsif ($options{TMPDIR}) {
1684
1685 # Prepend tmpdir
1686 $template = File::Spec->catdir(_wrap_file_spec_tmpdir(), $template);
1687
1688 }
1689
1690 }
1691
1692 } else {
1693
1694 if ($options{"DIR"}) {
1695
1696 $template = File::Spec->catdir($options{"DIR"}, TEMPXXX);
1697
1698 } else {
1699
1700 $template = File::Spec->catdir(_wrap_file_spec_tmpdir(), TEMPXXX);
1701
1702 }
1703
1704 }
1705
1706 # Create the directory
1707 my $tempdir;
1708 my $suffixlen = 0;
1709 if ($^O eq 'VMS') { # dir names can end in delimiters
1710 $template =~ m/([\.\]:>]+)$/;
1711 $suffixlen = length($1);
1712 }
1713 if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
1714 # dir name has a trailing ':'
1715 ++$suffixlen;
1716 }
1717
1718 my $errstr;
1719 croak "Error in tempdir() using $template: $errstr"
1720 unless ((undef, $tempdir) = _gettemp($template,
1721 "open" => 0,
1722 "mkdir"=> 1 ,
1723 "suffixlen" => $suffixlen,
1724 "ErrStr" => \$errstr,
1725 ) );
1726
1727 # Install exit handler; must be dynamic to get lexical
1728 if ( $options{'CLEANUP'} && -d $tempdir) {
1729 _deferred_unlink(undef, $tempdir, 1);
1730 }
1731
1732 # Return the dir name
1733 return $tempdir;
1734
1735}
1736
1737#pod =back
1738#pod
1739#pod =head1 MKTEMP FUNCTIONS
1740#pod
1741#pod The following functions are Perl implementations of the
1742#pod mktemp() family of temp file generation system calls.
1743#pod
1744#pod =over 4
1745#pod
1746#pod =item B<mkstemp>
1747#pod
1748#pod Given a template, returns a filehandle to the temporary file and the name
1749#pod of the file.
1750#pod
1751#pod ($fh, $name) = mkstemp( $template );
1752#pod
1753#pod In scalar context, just the filehandle is returned.
1754#pod
1755#pod The template may be any filename with some number of X's appended
1756#pod to it, for example F</tmp/temp.XXXX>. The trailing X's are replaced
1757#pod with unique alphanumeric combinations.
1758#pod
1759#pod Will croak() if there is an error.
1760#pod
1761#pod Current API available since 0.05.
1762#pod
1763#pod =cut
1764
- -
1767sub mkstemp {
1768
1769 croak "Usage: mkstemp(template)"
1770 if scalar(@_) != 1;
1771
1772 my $template = shift;
1773
1774 my ($fh, $path, $errstr);
1775 croak "Error in mkstemp using $template: $errstr"
1776 unless (($fh, $path) = _gettemp($template,
1777 "open" => 1,
1778 "mkdir"=> 0 ,
1779 "suffixlen" => 0,
1780 "ErrStr" => \$errstr,
1781 ) );
1782
1783 if (wantarray()) {
1784 return ($fh, $path);
1785 } else {
1786 return $fh;
1787 }
1788
1789}
1790
1791
1792#pod =item B<mkstemps>
1793#pod
1794#pod Similar to mkstemp(), except that an extra argument can be supplied
1795#pod with a suffix to be appended to the template.
1796#pod
1797#pod ($fh, $name) = mkstemps( $template, $suffix );
1798#pod
1799#pod For example a template of C<testXXXXXX> and suffix of C<.dat>
1800#pod would generate a file similar to F<testhGji_w.dat>.
1801#pod
1802#pod Returns just the filehandle alone when called in scalar context.
1803#pod
1804#pod Will croak() if there is an error.
1805#pod
1806#pod Current API available since 0.05.
1807#pod
1808#pod =cut
1809
1810sub mkstemps {
1811
1812 croak "Usage: mkstemps(template, suffix)"
1813 if scalar(@_) != 2;
1814
1815
1816 my $template = shift;
1817 my $suffix = shift;
1818
1819 $template .= $suffix;
1820
1821 my ($fh, $path, $errstr);
1822 croak "Error in mkstemps using $template: $errstr"
1823 unless (($fh, $path) = _gettemp($template,
1824 "open" => 1,
1825 "mkdir"=> 0 ,
1826 "suffixlen" => length($suffix),
1827 "ErrStr" => \$errstr,
1828 ) );
1829
1830 if (wantarray()) {
1831 return ($fh, $path);
1832 } else {
1833 return $fh;
1834 }
1835
1836}
1837
1838#pod =item B<mkdtemp>
1839#pod
1840#pod Create a directory from a template. The template must end in
1841#pod X's that are replaced by the routine.
1842#pod
1843#pod $tmpdir_name = mkdtemp($template);
1844#pod
1845#pod Returns the name of the temporary directory created.
1846#pod
1847#pod Directory must be removed by the caller.
1848#pod
1849#pod Will croak() if there is an error.
1850#pod
1851#pod Current API available since 0.05.
1852#pod
1853#pod =cut
1854
1855#' # for emacs
1856
1857sub mkdtemp {
1858
1859 croak "Usage: mkdtemp(template)"
1860 if scalar(@_) != 1;
1861
1862 my $template = shift;
1863 my $suffixlen = 0;
1864 if ($^O eq 'VMS') { # dir names can end in delimiters
1865 $template =~ m/([\.\]:>]+)$/;
1866 $suffixlen = length($1);
1867 }
1868 if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
1869 # dir name has a trailing ':'
1870 ++$suffixlen;
1871 }
1872 my ($junk, $tmpdir, $errstr);
1873 croak "Error creating temp directory from template $template\: $errstr"
1874 unless (($junk, $tmpdir) = _gettemp($template,
1875 "open" => 0,
1876 "mkdir"=> 1 ,
1877 "suffixlen" => $suffixlen,
1878 "ErrStr" => \$errstr,
1879 ) );
1880
1881 return $tmpdir;
1882
1883}
1884
1885#pod =item B<mktemp>
1886#pod
1887#pod Returns a valid temporary filename but does not guarantee
1888#pod that the file will not be opened by someone else.
1889#pod
1890#pod $unopened_file = mktemp($template);
1891#pod
1892#pod Template is the same as that required by mkstemp().
1893#pod
1894#pod Will croak() if there is an error.
1895#pod
1896#pod Current API available since 0.05.
1897#pod
1898#pod =cut
1899
1900sub mktemp {
1901
1902 croak "Usage: mktemp(template)"
1903 if scalar(@_) != 1;
1904
1905 my $template = shift;
1906
1907 my ($tmpname, $junk, $errstr);
1908 croak "Error getting name to temp file from template $template: $errstr"
1909 unless (($junk, $tmpname) = _gettemp($template,
1910 "open" => 0,
1911 "mkdir"=> 0 ,
1912 "suffixlen" => 0,
1913 "ErrStr" => \$errstr,
1914 ) );
1915
1916 return $tmpname;
1917}
1918
1919#pod =back
1920#pod
1921#pod =head1 POSIX FUNCTIONS
1922#pod
1923#pod This section describes the re-implementation of the tmpnam()
1924#pod and tmpfile() functions described in L<POSIX>
1925#pod using the mkstemp() from this module.
1926#pod
1927#pod Unlike the L<POSIX|POSIX> implementations, the directory used
1928#pod for the temporary file is not specified in a system include
1929#pod file (C<P_tmpdir>) but simply depends on the choice of tmpdir()
1930#pod returned by L<File::Spec|File::Spec>. On some implementations this
1931#pod location can be set using the C<TMPDIR> environment variable, which
1932#pod may not be secure.
1933#pod If this is a problem, simply use mkstemp() and specify a template.
1934#pod
1935#pod =over 4
1936#pod
1937#pod =item B<tmpnam>
1938#pod
1939#pod When called in scalar context, returns the full name (including path)
1940#pod of a temporary file (uses mktemp()). The only check is that the file does
1941#pod not already exist, but there is no guarantee that that condition will
1942#pod continue to apply.
1943#pod
1944#pod $file = tmpnam();
1945#pod
1946#pod When called in list context, a filehandle to the open file and
1947#pod a filename are returned. This is achieved by calling mkstemp()
1948#pod after constructing a suitable template.
1949#pod
1950#pod ($fh, $file) = tmpnam();
1951#pod
1952#pod If possible, this form should be used to prevent possible
1953#pod race conditions.
1954#pod
1955#pod See L<File::Spec/tmpdir> for information on the choice of temporary
1956#pod directory for a particular operating system.
1957#pod
1958#pod Will croak() if there is an error.
1959#pod
1960#pod Current API available since 0.05.
1961#pod
1962#pod =cut
1963
1964sub tmpnam {
1965
1966 # Retrieve the temporary directory name
1967 my $tmpdir = _wrap_file_spec_tmpdir();
1968
1969 # XXX I don't know under what circumstances this occurs, -- xdg 2016-04-02
1970 croak "Error temporary directory is not writable"
1971 if $tmpdir eq '';
1972
1973 # Use a ten character template and append to tmpdir
1974 my $template = File::Spec->catfile($tmpdir, TEMPXXX);
1975
1976 if (wantarray() ) {
1977 return mkstemp($template);
1978 } else {
1979 return mktemp($template);
1980 }
1981
1982}
1983
1984#pod =item B<tmpfile>
1985#pod
1986#pod Returns the filehandle of a temporary file.
1987#pod
1988#pod $fh = tmpfile();
1989#pod
1990#pod The file is removed when the filehandle is closed or when the program
1991#pod exits. No access to the filename is provided.
1992#pod
1993#pod If the temporary file can not be created undef is returned.
1994#pod Currently this command will probably not work when the temporary
1995#pod directory is on an NFS file system.
1996#pod
1997#pod Will croak() if there is an error.
1998#pod
1999#pod Available since 0.05.
2000#pod
2001#pod Returning undef if unable to create file added in 0.12.
2002#pod
2003#pod =cut
2004
2005sub tmpfile {
2006
2007 # Simply call tmpnam() in a list context
2008 my ($fh, $file) = tmpnam();
2009
2010 # Make sure file is removed when filehandle is closed
2011 # This will fail on NFS
2012 unlink0($fh, $file)
2013 or return undef;
2014
2015 return $fh;
2016
2017}
2018
2019#pod =back
2020#pod
2021#pod =head1 ADDITIONAL FUNCTIONS
2022#pod
2023#pod These functions are provided for backwards compatibility
2024#pod with common tempfile generation C library functions.
2025#pod
2026#pod They are not exported and must be addressed using the full package
2027#pod name.
2028#pod
2029#pod =over 4
2030#pod
2031#pod =item B<tempnam>
2032#pod
2033#pod Return the name of a temporary file in the specified directory
2034#pod using a prefix. The file is guaranteed not to exist at the time
2035#pod the function was called, but such guarantees are good for one
2036#pod clock tick only. Always use the proper form of C<sysopen>
2037#pod with C<O_CREAT | O_EXCL> if you must open such a filename.
2038#pod
2039#pod $filename = File::Temp::tempnam( $dir, $prefix );
2040#pod
2041#pod Equivalent to running mktemp() with $dir/$prefixXXXXXXXX
2042#pod (using unix file convention as an example)
2043#pod
2044#pod Because this function uses mktemp(), it can suffer from race conditions.
2045#pod
2046#pod Will croak() if there is an error.
2047#pod
2048#pod Current API available since 0.05.
2049#pod
2050#pod =cut
2051
2052sub tempnam {
2053
2054 croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2;
2055
2056 my ($dir, $prefix) = @_;
2057
2058 # Add a string to the prefix
2059 $prefix .= 'XXXXXXXX';
2060
2061 # Concatenate the directory to the file
2062 my $template = File::Spec->catfile($dir, $prefix);
2063
2064 return mktemp($template);
2065
2066}
2067
2068#pod =back
2069#pod
2070#pod =head1 UTILITY FUNCTIONS
2071#pod
2072#pod Useful functions for dealing with the filehandle and filename.
2073#pod
2074#pod =over 4
2075#pod
2076#pod =item B<unlink0>
2077#pod
2078#pod Given an open filehandle and the associated filename, make a safe
2079#pod unlink. This is achieved by first checking that the filename and
2080#pod filehandle initially point to the same file and that the number of
2081#pod links to the file is 1 (all fields returned by stat() are compared).
2082#pod Then the filename is unlinked and the filehandle checked once again to
2083#pod verify that the number of links on that file is now 0. This is the
2084#pod closest you can come to making sure that the filename unlinked was the
2085#pod same as the file whose descriptor you hold.
2086#pod
2087#pod unlink0($fh, $path)
2088#pod or die "Error unlinking file $path safely";
2089#pod
2090#pod Returns false on error but croaks() if there is a security
2091#pod anomaly. The filehandle is not closed since on some occasions this is
2092#pod not required.
2093#pod
2094#pod On some platforms, for example Windows NT, it is not possible to
2095#pod unlink an open file (the file must be closed first). On those
2096#pod platforms, the actual unlinking is deferred until the program ends and
2097#pod good status is returned. A check is still performed to make sure that
2098#pod the filehandle and filename are pointing to the same thing (but not at
2099#pod the time the end block is executed since the deferred removal may not
2100#pod have access to the filehandle).
2101#pod
2102#pod Additionally, on Windows NT not all the fields returned by stat() can
2103#pod be compared. For example, the C<dev> and C<rdev> fields seem to be
2104#pod different. Also, it seems that the size of the file returned by stat()
2105#pod does not always agree, with C<stat(FH)> being more accurate than
2106#pod C<stat(filename)>, presumably because of caching issues even when
2107#pod using autoflush (this is usually overcome by waiting a while after
2108#pod writing to the tempfile before attempting to C<unlink0> it).
2109#pod
2110#pod Finally, on NFS file systems the link count of the file handle does
2111#pod not always go to zero immediately after unlinking. Currently, this
2112#pod command is expected to fail on NFS disks.
2113#pod
2114#pod This function is disabled if the global variable $KEEP_ALL is true
2115#pod and an unlink on open file is supported. If the unlink is to be deferred
2116#pod to the END block, the file is still registered for removal.
2117#pod
2118#pod This function should not be called if you are using the object oriented
2119#pod interface since the it will interfere with the object destructor deleting
2120#pod the file.
2121#pod
2122#pod Available Since 0.05.
2123#pod
2124#pod If can not unlink open file, defer removal until later available since 0.06.
2125#pod
2126#pod =cut
2127
2128sub unlink0 {
2129
2130 croak 'Usage: unlink0(filehandle, filename)'
2131 unless scalar(@_) == 2;
2132
2133 # Read args
2134 my ($fh, $path) = @_;
2135
2136 cmpstat($fh, $path) or return 0;
2137
2138 # attempt remove the file (does not work on some platforms)
2139 if (_can_unlink_opened_file()) {
2140
2141 # return early (Without unlink) if we have been instructed to retain files.
2142 return 1 if $KEEP_ALL;
2143
2144 # XXX: do *not* call this on a directory; possible race
2145 # resulting in recursive removal
2146 croak "unlink0: $path has become a directory!" if -d $path;
2147 unlink($path) or return 0;
2148
2149 # Stat the filehandle
2150 my @fh = stat $fh;
2151
2152 print "Link count = $fh[3] \n" if $DEBUG;
2153
2154 # Make sure that the link count is zero
2155 # - Cygwin provides deferred unlinking, however,
2156 # on Win9x the link count remains 1
2157 # On NFS the link count may still be 1 but we can't know that
2158 # we are on NFS. Since we can't be sure, we'll defer it
2159
2160 return 1 if $fh[3] == 0 || $^O eq 'cygwin';
2161 }
2162 # fall-through if we can't unlink now
2163 _deferred_unlink($fh, $path, 0);
2164 return 1;
2165}
2166
2167#pod =item B<cmpstat>
2168#pod
2169#pod Compare C<stat> of filehandle with C<stat> of provided filename. This
2170#pod can be used to check that the filename and filehandle initially point
2171#pod to the same file and that the number of links to the file is 1 (all
2172#pod fields returned by stat() are compared).
2173#pod
2174#pod cmpstat($fh, $path)
2175#pod or die "Error comparing handle with file";
2176#pod
2177#pod Returns false if the stat information differs or if the link count is
2178#pod greater than 1. Calls croak if there is a security anomaly.
2179#pod
2180#pod On certain platforms, for example Windows, not all the fields returned by stat()
2181#pod can be compared. For example, the C<dev> and C<rdev> fields seem to be
2182#pod different in Windows. Also, it seems that the size of the file
2183#pod returned by stat() does not always agree, with C<stat(FH)> being more
2184#pod accurate than C<stat(filename)>, presumably because of caching issues
2185#pod even when using autoflush (this is usually overcome by waiting a while
2186#pod after writing to the tempfile before attempting to C<unlink0> it).
2187#pod
2188#pod Not exported by default.
2189#pod
2190#pod Current API available since 0.14.
2191#pod
2192#pod =cut
2193
2194sub cmpstat {
2195
2196 croak 'Usage: cmpstat(filehandle, filename)'
2197 unless scalar(@_) == 2;
2198
2199 # Read args
2200 my ($fh, $path) = @_;
2201
2202 warn "Comparing stat\n"
2203 if $DEBUG;
2204
2205 # Stat the filehandle - which may be closed if someone has manually
2206 # closed the file. Can not turn off warnings without using $^W
2207 # unless we upgrade to 5.006 minimum requirement
2208 my @fh;
2209 {
2210 local ($^W) = 0;
2211 @fh = stat $fh;
2212 }
2213 return unless @fh;
2214
2215 if ($fh[3] > 1 && $^W) {
2216 carp "unlink0: fstat found too many links; SB=@fh" if $^W;
2217 }
2218
2219 # Stat the path
2220 my @path = stat $path;
2221
2222 unless (@path) {
2223 carp "unlink0: $path is gone already" if $^W;
2224 return;
2225 }
2226
2227 # this is no longer a file, but may be a directory, or worse
2228 unless (-f $path) {
2229 confess "panic: $path is no longer a file: SB=@fh";
2230 }
2231
2232 # Do comparison of each member of the array
2233 # On WinNT dev and rdev seem to be different
2234 # depending on whether it is a file or a handle.
2235 # Cannot simply compare all members of the stat return
2236 # Select the ones we can use
2237 my @okstat = (0..$#fh); # Use all by default
2238 if ($^O eq 'MSWin32') {
2239 @okstat = (1,2,3,4,5,7,8,9,10);
2240 } elsif ($^O eq 'os2') {
2241 @okstat = (0, 2..$#fh);
2242 } elsif ($^O eq 'VMS') { # device and file ID are sufficient
2243 @okstat = (0, 1);
2244 } elsif ($^O eq 'dos') {
2245 @okstat = (0,2..7,11..$#fh);
2246 } elsif ($^O eq 'mpeix') {
2247 @okstat = (0..4,8..10);
2248 }
2249
2250 # Now compare each entry explicitly by number
2251 for (@okstat) {
2252 print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG;
2253 # Use eq rather than == since rdev, blksize, and blocks (6, 11,
2254 # and 12) will be '' on platforms that do not support them. This
2255 # is fine since we are only comparing integers.
2256 unless ($fh[$_] eq $path[$_]) {
2257 warn "Did not match $_ element of stat\n" if $DEBUG;
2258 return 0;
2259 }
2260 }
2261
2262 return 1;
2263}
2264
2265#pod =item B<unlink1>
2266#pod
2267#pod Similar to C<unlink0> except after file comparison using cmpstat, the
2268#pod filehandle is closed prior to attempting to unlink the file. This
2269#pod allows the file to be removed without using an END block, but does
2270#pod mean that the post-unlink comparison of the filehandle state provided
2271#pod by C<unlink0> is not available.
2272#pod
2273#pod unlink1($fh, $path)
2274#pod or die "Error closing and unlinking file";
2275#pod
2276#pod Usually called from the object destructor when using the OO interface.
2277#pod
2278#pod Not exported by default.
2279#pod
2280#pod This function is disabled if the global variable $KEEP_ALL is true.
2281#pod
2282#pod Can call croak() if there is a security anomaly during the stat()
2283#pod comparison.
2284#pod
2285#pod Current API available since 0.14.
2286#pod
2287#pod =cut
2288
2289sub unlink1 {
2290 croak 'Usage: unlink1(filehandle, filename)'
2291 unless scalar(@_) == 2;
2292
2293 # Read args
2294 my ($fh, $path) = @_;
2295
2296 cmpstat($fh, $path) or return 0;
2297
2298 # Close the file
2299 close( $fh ) or return 0;
2300
2301 # Make sure the file is writable (for windows)
2302 _force_writable( $path );
2303
2304 # return early (without unlink) if we have been instructed to retain files.
2305 return 1 if $KEEP_ALL;
2306
2307 # remove the file
2308 return unlink($path);
2309}
2310
2311#pod =item B<cleanup>
2312#pod
2313#pod Calling this function will cause any temp files or temp directories
2314#pod that are registered for removal to be removed. This happens automatically
2315#pod when the process exits but can be triggered manually if the caller is sure
2316#pod that none of the temp files are required. This method can be registered as
2317#pod an Apache callback.
2318#pod
2319#pod Note that if a temp directory is your current directory, it cannot be
2320#pod removed. C<chdir()> out of the directory first before calling
2321#pod C<cleanup()>. (For the cleanup at program exit when the CLEANUP flag
2322#pod is set, this happens automatically.)
2323#pod
2324#pod On OSes where temp files are automatically removed when the temp file
2325#pod is closed, calling this function will have no effect other than to remove
2326#pod temporary directories (which may include temporary files).
2327#pod
2328#pod File::Temp::cleanup();
2329#pod
2330#pod Not exported by default.
2331#pod
2332#pod Current API available since 0.15.
2333#pod
2334#pod =back
2335#pod
2336#pod =head1 PACKAGE VARIABLES
2337#pod
2338#pod These functions control the global state of the package.
2339#pod
2340#pod =over 4
2341#pod
2342#pod =item B<safe_level>
2343#pod
2344#pod Controls the lengths to which the module will go to check the safety of the
2345#pod temporary file or directory before proceeding.
2346#pod Options are:
2347#pod
2348#pod =over 8
2349#pod
2350#pod =item STANDARD
2351#pod
2352#pod Do the basic security measures to ensure the directory exists and is
2353#pod writable, that temporary files are opened only if they do not already
2354#pod exist, and that possible race conditions are avoided. Finally the
2355#pod L<unlink0|"unlink0"> function is used to remove files safely.
2356#pod
2357#pod =item MEDIUM
2358#pod
2359#pod In addition to the STANDARD security, the output directory is checked
2360#pod to make sure that it is owned either by root or the user running the
2361#pod program. If the directory is writable by group or by other, it is then
2362#pod checked to make sure that the sticky bit is set.
2363#pod
2364#pod Will not work on platforms that do not support the C<-k> test
2365#pod for sticky bit.
2366#pod
2367#pod =item HIGH
2368#pod
2369#pod In addition to the MEDIUM security checks, also check for the
2370#pod possibility of ``chown() giveaway'' using the L<POSIX|POSIX>
2371#pod sysconf() function. If this is a possibility, each directory in the
2372#pod path is checked in turn for safeness, recursively walking back to the
2373#pod root directory.
2374#pod
2375#pod For platforms that do not support the L<POSIX|POSIX>
2376#pod C<_PC_CHOWN_RESTRICTED> symbol (for example, Windows NT) it is
2377#pod assumed that ``chown() giveaway'' is possible and the recursive test
2378#pod is performed.
2379#pod
2380#pod =back
2381#pod
2382#pod The level can be changed as follows:
2383#pod
2384#pod File::Temp->safe_level( File::Temp::HIGH );
2385#pod
2386#pod The level constants are not exported by the module.
2387#pod
2388#pod Currently, you must be running at least perl v5.6.0 in order to
2389#pod run with MEDIUM or HIGH security. This is simply because the
2390#pod safety tests use functions from L<Fcntl|Fcntl> that are not
2391#pod available in older versions of perl. The problem is that the version
2392#pod number for Fcntl is the same in perl 5.6.0 and in 5.005_03 even though
2393#pod they are different versions.
2394#pod
2395#pod On systems that do not support the HIGH or MEDIUM safety levels
2396#pod (for example Win NT or OS/2) any attempt to change the level will
2397#pod be ignored. The decision to ignore rather than raise an exception
2398#pod allows portable programs to be written with high security in mind
2399#pod for the systems that can support this without those programs failing
2400#pod on systems where the extra tests are irrelevant.
2401#pod
2402#pod If you really need to see whether the change has been accepted
2403#pod simply examine the return value of C<safe_level>.
2404#pod
2405#pod $newlevel = File::Temp->safe_level( File::Temp::HIGH );
2406#pod die "Could not change to high security"
2407#pod if $newlevel != File::Temp::HIGH;
2408#pod
2409#pod Available since 0.05.
2410#pod
2411#pod =cut
2412
2413{
2414 # protect from using the variable itself
24151200ns my $LEVEL = STANDARD;
2416 sub safe_level {
2417 my $self = shift;
2418 if (@_) {
2419 my $level = shift;
2420 if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) {
2421 carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W;
2422 } else {
2423 # Don't allow this on perl 5.005 or earlier
2424 if ($] < 5.006 && $level != STANDARD) {
2425 # Cant do MEDIUM or HIGH checks
2426 croak "Currently requires perl 5.006 or newer to do the safe checks";
2427 }
2428 # Check that we are allowed to change level
2429 # Silently ignore if we can not.
2430 $LEVEL = $level if _can_do_level($level);
2431 }
2432 }
2433 return $LEVEL;
2434 }
2435}
2436
2437#pod =item TopSystemUID
2438#pod
2439#pod This is the highest UID on the current system that refers to a root
2440#pod UID. This is used to make sure that the temporary directory is
2441#pod owned by a system UID (C<root>, C<bin>, C<sys> etc) rather than
2442#pod simply by root.
2443#pod
2444#pod This is required since on many unix systems C</tmp> is not owned
2445#pod by root.
2446#pod
2447#pod Default is to assume that any UID less than or equal to 10 is a root
2448#pod UID.
2449#pod
2450#pod File::Temp->top_system_uid(10);
2451#pod my $topid = File::Temp->top_system_uid;
2452#pod
2453#pod This value can be adjusted to reduce security checking if required.
2454#pod The value is only relevant when C<safe_level> is set to MEDIUM or higher.
2455#pod
2456#pod Available since 0.05.
2457#pod
2458#pod =cut
2459
2460{
24612300ns my $TopSystemUID = 10;
24621200ns $TopSystemUID = 197108 if $^O eq 'interix'; # "Administrator"
2463 sub top_system_uid {
2464 my $self = shift;
2465 if (@_) {
2466 my $newuid = shift;
2467 croak "top_system_uid: UIDs should be numeric"
2468 unless $newuid =~ /^\d+$/s;
2469 $TopSystemUID = $newuid;
2470 }
2471 return $TopSystemUID;
2472 }
2473}
2474
2475#pod =item B<$KEEP_ALL>
2476#pod
2477#pod Controls whether temporary files and directories should be retained
2478#pod regardless of any instructions in the program to remove them
2479#pod automatically. This is useful for debugging but should not be used in
2480#pod production code.
2481#pod
2482#pod $File::Temp::KEEP_ALL = 1;
2483#pod
2484#pod Default is for files to be removed as requested by the caller.
2485#pod
2486#pod In some cases, files will only be retained if this variable is true
2487#pod when the file is created. This means that you can not create a temporary
2488#pod file, set this variable and expect the temp file to still be around
2489#pod when the program exits.
2490#pod
2491#pod =item B<$DEBUG>
2492#pod
2493#pod Controls whether debugging messages should be enabled.
2494#pod
2495#pod $File::Temp::DEBUG = 1;
2496#pod
2497#pod Default is for debugging mode to be disabled.
2498#pod
2499#pod Available since 0.15.
2500#pod
2501#pod =back
2502#pod
2503#pod =head1 WARNING
2504#pod
2505#pod For maximum security, endeavour always to avoid ever looking at,
2506#pod touching, or even imputing the existence of the filename. You do not
2507#pod know that that filename is connected to the same file as the handle
2508#pod you have, and attempts to check this can only trigger more race
2509#pod conditions. It's far more secure to use the filehandle alone and
2510#pod dispense with the filename altogether.
2511#pod
2512#pod If you need to pass the handle to something that expects a filename
2513#pod then on a unix system you can use C<"/dev/fd/" . fileno($fh)> for
2514#pod arbitrary programs. Perl code that uses the 2-argument version of
2515#pod C<< open >> can be passed C<< "+<=&" . fileno($fh) >>. Otherwise you
2516#pod will need to pass the filename. You will have to clear the
2517#pod close-on-exec bit on that file descriptor before passing it to another
2518#pod process.
2519#pod
2520#pod use Fcntl qw/F_SETFD F_GETFD/;
2521#pod fcntl($tmpfh, F_SETFD, 0)
2522#pod or die "Can't clear close-on-exec flag on temp fh: $!\n";
2523#pod
2524#pod =head2 Temporary files and NFS
2525#pod
2526#pod Some problems are associated with using temporary files that reside
2527#pod on NFS file systems and it is recommended that a local filesystem
2528#pod is used whenever possible. Some of the security tests will most probably
2529#pod fail when the temp file is not local. Additionally, be aware that
2530#pod the performance of I/O operations over NFS will not be as good as for
2531#pod a local disk.
2532#pod
2533#pod =head2 Forking
2534#pod
2535#pod In some cases files created by File::Temp are removed from within an
2536#pod END block. Since END blocks are triggered when a child process exits
2537#pod (unless C<POSIX::_exit()> is used by the child) File::Temp takes care
2538#pod to only remove those temp files created by a particular process ID. This
2539#pod means that a child will not attempt to remove temp files created by the
2540#pod parent process.
2541#pod
2542#pod If you are forking many processes in parallel that are all creating
2543#pod temporary files, you may need to reset the random number seed using
2544#pod srand(EXPR) in each child else all the children will attempt to walk
2545#pod through the same set of random file names and may well cause
2546#pod themselves to give up if they exceed the number of retry attempts.
2547#pod
2548#pod =head2 Directory removal
2549#pod
2550#pod Note that if you have chdir'ed into the temporary directory and it is
2551#pod subsequently cleaned up (either in the END block or as part of object
2552#pod destruction), then you will get a warning from File::Path::rmtree().
2553#pod
2554#pod =head2 Taint mode
2555#pod
2556#pod If you need to run code under taint mode, updating to the latest
2557#pod L<File::Spec> is highly recommended. On Windows, if the directory
2558#pod given by L<File::Spec::tmpdir> isn't writable, File::Temp will attempt
2559#pod to fallback to the user's local application data directory or croak
2560#pod with an error.
2561#pod
2562#pod =head2 BINMODE
2563#pod
2564#pod The file returned by File::Temp will have been opened in binary mode
2565#pod if such a mode is available. If that is not correct, use the C<binmode()>
2566#pod function to change the mode of the filehandle.
2567#pod
2568#pod Note that you can modify the encoding of a file opened by File::Temp
2569#pod also by using C<binmode()>.
2570#pod
2571#pod =head1 HISTORY
2572#pod
2573#pod Originally began life in May 1999 as an XS interface to the system
2574#pod mkstemp() function. In March 2000, the OpenBSD mkstemp() code was
2575#pod translated to Perl for total control of the code's
2576#pod security checking, to ensure the presence of the function regardless of
2577#pod operating system and to help with portability. The module was shipped
2578#pod as a standard part of perl from v5.6.1.
2579#pod
2580#pod Thanks to Tom Christiansen for suggesting that this module
2581#pod should be written and providing ideas for code improvements and
2582#pod security enhancements.
2583#pod
2584#pod =head1 SEE ALSO
2585#pod
2586#pod L<POSIX/tmpnam>, L<POSIX/tmpfile>, L<File::Spec>, L<File::Path>
2587#pod
2588#pod See L<IO::File> and L<File::MkTemp>, L<Apache::TempFile> for
2589#pod different implementations of temporary file handling.
2590#pod
2591#pod See L<File::Tempdir> for an alternative object-oriented wrapper for
2592#pod the C<tempdir> function.
2593#pod
2594#pod =cut
2595
2596package ## hide from PAUSE
25971100ns File::Temp::Dir;
2598
25991100nsour $VERSION = '0.2311';
2600
2601218µs240µs
# spent 23µs (6+17) within File::Temp::Dir::BEGIN@2601 which was called: # once (6µs+17µs) by Archive::Zip::BEGIN@11 at line 2601
use File::Path qw/ rmtree /;
# spent 23µs making 1 call to File::Temp::Dir::BEGIN@2601 # spent 17µs making 1 call to Exporter::import
2602227µs27µs
# spent 5µs (4+2) within File::Temp::Dir::BEGIN@2602 which was called: # once (4µs+2µs) by Archive::Zip::BEGIN@11 at line 2602
use strict;
# spent 5µs making 1 call to File::Temp::Dir::BEGIN@2602 # spent 2µs making 1 call to strict::import
260315µs115µs
# spent 18µs (3+15) within File::Temp::Dir::BEGIN@2603 which was called: # once (3µs+15µs) by Archive::Zip::BEGIN@11 at line 2605
use overload '""' => "STRINGIFY",
# spent 15µs making 1 call to overload::import
2604 '0+' => \&File::Temp::NUMIFY,
26051148µs118µs fallback => 1;
# spent 18µs making 1 call to File::Temp::Dir::BEGIN@2603
2606
2607# private class specifically to support tempdir objects
2608# created by File::Temp->newdir
2609
2610# ostensibly the same method interface as File::Temp but without
2611# inheriting all the IO::Seekable methods and other cruft
2612
2613# Read-only - returns the name of the temp directory
2614
2615sub dirname {
2616 my $self = shift;
2617 return $self->{DIRNAME};
2618}
2619
2620sub STRINGIFY {
2621 my $self = shift;
2622 return $self->dirname;
2623}
2624
2625sub unlink_on_destroy {
2626 my $self = shift;
2627 if (@_) {
2628 $self->{CLEANUP} = shift;
2629 }
2630 return $self->{CLEANUP};
2631}
2632
2633sub DESTROY {
2634 my $self = shift;
2635 local($., $@, $!, $^E, $?);
2636 if ($self->unlink_on_destroy &&
2637 $$ == $self->{LAUNCHPID} && !$File::Temp::KEEP_ALL) {
2638 if (-d $self->{REALNAME}) {
2639 # Some versions of rmtree will abort if you attempt to remove
2640 # the directory you are sitting in. We protect that and turn it
2641 # into a warning. We do this because this occurs during object
2642 # destruction and so can not be caught by the user.
2643 eval { rmtree($self->{REALNAME}, $File::Temp::DEBUG, 0); };
2644 warn $@ if ($@ && $^W);
2645 }
2646 }
2647}
2648
2649114µs1;
2650
2651
2652# vim: ts=2 sts=2 sw=2 et:
2653
2654__END__
 
# spent 300ns within File::Temp::__ANON__ which was called: # once (300ns+0s) by File::Temp::BEGIN@147 at line 147
sub File::Temp::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 111)[XML-Twig-pm-1750]-228-line.html0000644000175000017500000004704114576335353024414 0ustar michamicha Profile of (eval 111)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 111)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 30 statements in 189µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
21112µs12µsXML::Twig::::__ANON__[:17]XML::Twig::__ANON__[:17] (merge of 2 subs)
1116µs17µsXML::Twig::::BEGIN@1.65XML::Twig::BEGIN@1.65
1116µs16µsXML::Twig::::BEGIN@1.55XML::Twig::BEGIN@1.55
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14169µs454µs
# spent 12µs within XML::Twig::__ANON__[(eval 111)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] which was called 2 times, avg 6µs/call: # (data for this subroutine includes 1 others that were merged with it) # 2 times (12µs+0s) by XML::Twig::_handler at line 2405 of XML/Twig.pm, avg 6µs/call # spent 17µs (6+11) within XML::Twig::BEGIN@1.65 which was called: # once (6µs+11µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 16µs (6+10) within XML::Twig::BEGIN@1.55 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1
sub { no warnings;
# spent 21µs making 2 calls to warnings::unimport, avg 10µs/call # spent 17µs making 1 call to XML::Twig::BEGIN@1.65 # spent 16µs making 1 call to XML::Twig::BEGIN@1.55
22600nsmy( $stack)= @_;
322µsmy @current_elts= (scalar @$stack);
42600nsmy @new_current_elts;
5my $elt;
6
721µsforeach my $current_elt (@current_elts)
82600ns { next if( !$current_elt);
92500ns $current_elt--;
102700ns $elt= $stack->[$current_elt];
1122µs if( ($elt->{'##tag'} eq "s:pageMargins")) { push @new_current_elts, $current_elt;}
12 }
132500nsunless( @new_current_elts) { return 0; }
142300ns@current_elts= @new_current_elts;
152300ns@new_current_elts=();
1626µsreturn q{s:pageMargins};
1725µs }
18;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 64)[XML-Twig-pm-7113]-181-line.html0000644000175000017500000004054114576335353024336 0ustar michamicha Profile of (eval 64)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 64)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 9 statements in 76µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs145µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1118µs20µsXML::Twig::Elt::::BEGIN@1.8XML::Twig::Elt::BEGIN@1.8
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1976µs5169µs
# spent 145µs (8+137) within XML::Twig::Elt::__ANON__[(eval 64)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (8µs+137µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 20µs (8+12) within XML::Twig::Elt::BEGIN@1.8 which was called: # once (8µs+12µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:fileVersion') } @results;return XML::Twig::_unique_elts( @results); }
# spent 129µs making 1 call to XML::Twig::descendants # spent 20µs making 1 call to XML::Twig::Elt::BEGIN@1.8 # spent 12µs making 1 call to warnings::unimport # spent 5µs making 1 call to XML::Twig::Elt::twig # spent 3µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 50)[JSON-PP-pm-692]-158-line.html0000644000175000017500000003205214576335353023776 0ustar michamicha Profile of (eval 50)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 50)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 1111111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/FileHandle-pm-97-line.html0000644000175000017500000007343314576335353022631 0ustar michamicha Profile of FileHandle.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/FileHandle.pm
StatementsExecuted 66 statements in 328µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs11µsFileHandle::::BEGIN@3FileHandle::BEGIN@3
1114µs8µsFileHandle::::BEGIN@46FileHandle::BEGIN@46
1114µs5µsFileHandle::::BEGIN@4FileHandle::BEGIN@4
0000s0sFileHandle::::importFileHandle::import
0000s0sFileHandle::::pipeFileHandle::pipe
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package FileHandle;
2
3228µs111µs
# spent 11µs within FileHandle::BEGIN@3 which was called: # once (11µs+0s) by Archive::Zip::BEGIN@12 at line 3
use 5.006;
# spent 11µs making 1 call to FileHandle::BEGIN@3
4270µs27µs
# spent 5µs (4+2) within FileHandle::BEGIN@4 which was called: # once (4µs+2µs) by Archive::Zip::BEGIN@12 at line 4
use strict;
# spent 5µs making 1 call to FileHandle::BEGIN@4 # spent 2µs making 1 call to strict::import
5our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
6
71300ns$VERSION = "2.05";
8
91400nsrequire IO::File;
1017µs@ISA = qw(IO::File);
11
121500ns@EXPORT = qw(_IOFBF _IOLBF _IONBF);
13
1411µs@EXPORT_OK = qw(
15 pipe
16
17 autoflush
18 output_field_separator
19 output_record_separator
20 input_record_separator
21 input_line_number
22 format_page_number
23 format_lines_per_page
24 format_lines_left
25 format_name
26 format_top_name
27 format_line_break_characters
28 format_formfeed
29
30 print
31 printf
32 getline
33 getlines
34);
35
36#
37# Everything we're willing to export, we must first import.
38#
39112µs170µsIO::Handle->import( grep { !defined(&$_) } @EXPORT, @EXPORT_OK );
# spent 70µs making 1 call to Exporter::import
40
41#
42# Some people call "FileHandle::function", so all the functions
43# that were in the old FileHandle class must be imported, too.
44#
45{
463168µs212µs
# spent 8µs (4+4) within FileHandle::BEGIN@46 which was called: # once (4µs+4µs) by Archive::Zip::BEGIN@12 at line 46
no strict 'refs';
# spent 8µs making 1 call to FileHandle::BEGIN@46 # spent 4µs making 1 call to strict::unimport
47
4812µs my %import = (
49 'IO::Handle' =>
50 [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets
51 eof flush error clearerr setbuf setvbuf _open_mode_string)],
52 'IO::Seekable' =>
53 [qw(seek tell getpos setpos)],
54 'IO::File' =>
55 [qw(new new_tmpfile open)]
56 );
5713µs for my $pkg (keys %import) {
583900ns for my $func (@{$import{$pkg}}) {
59 my $c = *{"${pkg}::$func"}{CODE}
60229µs or die "${pkg}::$func missing";
612216µs *$func = $c;
62 }
63 }
64}
65
66#
67# Specialized importer for Fcntl magic.
68#
69sub import {
70 my $pkg = shift;
71 my $callpkg = caller;
72 require Exporter;
73 Exporter::export($pkg, $callpkg, @_);
74
75 #
76 # If the Fcntl extension is available,
77 # export its constants.
78 #
79 eval {
80 require Fcntl;
81 Exporter::export('Fcntl', $callpkg);
82 };
83}
84
85################################################
86# This is the only exported function we define;
87# the rest come from other classes.
88#
89
90sub pipe {
91 my $r = IO::Handle->new;
92 my $w = IO::Handle->new;
93 CORE::pipe($r, $w) or return undef;
94 ($r, $w);
95}
96
97# Rebless standard file handles
981700nsbless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle";
991300nsbless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle";
1001200nsbless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle";
101
102110µs1;
103
104__END__










Spreadsheet-ParseXLSX-0.35/nytprof/packages-callgraph.dot0000644000175000017500000007051014576335353022366 0ustar michamichadigraph { graph [overlap=false] node [shape=doublecircle]; "XML::Parser" -> "XML::Parser::ExpatNB"; "warnings::register" -> "warnings"; "Archive::Zip::FileMember" -> "Archive::Zip::Member"; "Test2::Hub" -> "Test2::Event::V2"; "Test2::API::Stack" -> "Test2::API::Stack"; "Test2::EventFacet::Plan" -> "Test2::Util::HashBase"; "Spreadsheet::ParseXLSX" -> "Archive::Zip::DirectoryMember"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseXLSX"; "Test::Builder::Module" -> "Exporter"; "Test::Builder" -> "Test2::Util::HashBase"; "Test2::Event::Pass" -> "Test2::Util::HashBase"; "File::Temp" -> "CORE"; "overloading" -> "warnings"; "Test2::Event::Ok" -> "Test2::Event"; "Storable" -> "Exporter"; "Spreadsheet::ParseXLSX::Cell" -> "warnings"; "Exporter::Heavy" -> "warnings"; "Archive::Zip::ZipFileMember" -> "strict"; "URI::Escape" -> "warnings"; "Test::Builder" -> "strict"; "Test2::Util" -> "XSLoader"; "Spreadsheet::ParseExcel::FmtDefault" -> "warnings"; "Encode::Alias" -> "strict"; "Archive::Zip" -> "Carp::Heavy"; "Test2::Util" -> "CORE"; "Test2::EventFacet::Trace" -> "Test2::Util::HashBase"; "Archive::Zip" -> "XSLoader"; "Test2::API" -> "warnings"; "Spreadsheet::ParseXLSX" -> "XML::Twig::Notation"; "Archive::Zip" -> "FileHandle"; "JSON::PP::IncrParser" -> "bytes"; "Test2::Util::HashBase" -> "Test2::API::Context"; "vars" -> "CORE"; "Config" -> "warnings"; "File::Basename" -> "strict"; "Test2::API" -> "Test2::Hub::Interceptor"; "IO" -> "warnings"; "Test2::Hub::Subtest" -> "warnings"; "Test2::Util::HashBase" -> "strict"; "Test2::Event::Diag" -> "warnings"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseExcel::Cell"; "Test2::Event::V2" -> "Test2::Util::HashBase"; "Encode" -> "XSLoader"; "Encode::Encoding" -> "Encode::Encoding"; "main" -> "File::Temp"; "File::Glob" -> "strict"; "Test2::API" -> "Test2::Util"; "IO::File" -> "strict"; "Test2::Event::Plan" -> "CORE"; "Archive::Zip" -> "strict"; "XML::Parser::ExpatNB" -> "Exporter"; "Test2::API::Instance" -> "Test2::API::Stack"; "File::Temp" -> "Exporter"; "Archive::Zip" -> "Archive::Zip::Archive"; "Spreadsheet::ParseXLSX::Decryptor::Agile" -> "strict"; "Archive::Zip" -> "IO::File"; "Archive::Zip::Archive" -> "Archive::Zip::ZipFileMember"; "Test2::Util::Facets2Legacy" -> "Exporter"; "Archive::Zip::DirectoryMember" -> "Exporter"; "Archive::Zip" -> "File::Spec"; "XML::Twig" -> "URI"; "File::Glob" -> "warnings"; "Test2::API" -> "Test2::Event::Subtest"; "IO::File" -> "CORE"; "Test2::Event::Subtest" -> "strict"; "Archive::Zip::NewFileMember" -> "strict"; "Test2::Hub::Interceptor::Terminator" -> "warnings"; "XML::Twig" -> "XML::Parser"; "Test2::Util::HashBase" -> "Test2::Hub"; "Test2::Event::Diag" -> "Test2::Util::HashBase"; "Encode" -> "constant"; "OLE::Storage_Lite::PPS::Dir" -> "vars"; "Test2::Event" -> "Test2::EventFacet::Parent"; "IO::Seekable" -> "Exporter"; "Test2::EventFacet::Hub" -> "warnings"; "Test2::Util::HashBase" -> "XSLoader"; "Test::Builder::Formatter" -> "Test2::Formatter::TAP"; "base" -> "strict"; "Test2::EventFacet::About" -> "strict"; "Test2::Event::V2" -> "Test2::Util::Facets2Legacy"; "Archive::Zip::Archive" -> "Archive::Zip::Member"; "POSIX" -> "CORE"; "Test2::Event::Ok" -> "Test2::Util::HashBase"; "List::Util" -> "warnings"; "Archive::Zip::Archive" -> "Exporter"; "Storable" -> "CORE"; "Test2::Event::Fail" -> "strict"; "Test2::API" -> "Test2::Util::HashBase"; "Test2::API" -> "Time::HiRes"; "Test2::Formatter" -> "Test2::API"; "Test2::Event::Skip" -> "strict"; "mro" -> "strict"; "Test2::Formatter::TAP" -> "Test2::Formatter::TAP"; "Test2::EventFacet::Error" -> "strict"; "Test2::Event::Plan" -> "Test2::Util::HashBase"; "Test2::Hub::Subtest" -> "strict"; "Test2::Util::HashBase" -> "warnings"; "Test2::API" -> "Test2::Hub::Subtest"; "JSON::PP" -> "bytes"; "XML::Parser" -> "XML::Parser::ContentModel"; "Spreadsheet::ParseExcel::Worksheet" -> "warnings"; "Test::Builder" -> "Test2::API::Stack"; "File::Find" -> "warnings::register"; "FileHandle" -> "strict"; "Spreadsheet::ParseXLSX" -> "warnings"; "Archive::Zip" -> "Archive::Zip"; "Test::Builder::Formatter" -> "strict"; "Time::HiRes" -> "strict"; "Encode::Encoding" -> "constant"; "Test2::Util::ExternalMeta" -> "Exporter"; "Spreadsheet::ParseExcel::Cell" -> "strict"; "Test::Builder::Module" -> "Test::Builder::Module"; "Spreadsheet::ParseXLSX::Decryptor" -> "XSLoader"; "Cwd" -> "Exporter"; "Spreadsheet::ParseXLSX::Decryptor" -> "MIME::Base64"; "Spreadsheet::ParseXLSX::Decryptor::Agile" -> "warnings"; "Test2::API" -> "Test2::Event::Bail"; "Test::Builder::Module" -> "strict"; "Spreadsheet::ParseExcel" -> "Spreadsheet::ParseExcel::Font"; "Archive::Zip::DirectoryMember" -> "strict"; "Encode::utf8" -> "parent"; "XML::Twig" -> "vars"; "Archive::Zip::FileMember" -> "vars"; "File::Temp::Dir" -> "overload"; "XML::Twig::Elt" -> "utf8"; "File::Basename" -> "warnings"; "Test2::EventFacet::Control" -> "strict"; "MIME::Base64" -> "strict"; "Test2::Util" -> "Test2::Util"; "POSIX" -> "Fcntl"; "XML::Parser::Expat" -> "XML::Twig"; "JSON" -> "utf8"; "Test2::Util::HashBase" -> "Test2::API::Instance"; "Spreadsheet::ParseXLSX::Decryptor" -> "warnings"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseExcel::Font"; "Test2::Event::Fail" -> "warnings"; "Archive::Zip::FileMember" -> "strict"; "Test2::API" -> "strict"; "Archive::Zip::Member" -> "UNIVERSAL"; "Archive::Zip" -> "Exporter::Heavy"; "Test::More" -> "Test::Builder::Module"; "Test2::EventFacet::Parent" -> "Test2::Util::HashBase"; "Exporter::Heavy" -> "Exporter"; "File::Temp" -> "File::Path"; "Digest::SHA" -> "integer"; "File::Temp" -> "strict"; "Archive::Zip::FileMember" -> "Exporter"; "Test2::Hub" -> "Test2::Util::ExternalMeta"; "Test2::API" -> "Scalar::Util"; "Spreadsheet::ParseXLSX" -> "IO::Handle"; "IO::Seekable" -> "CORE"; "XML::Twig::Elt" -> "UNIVERSAL"; "Archive::Zip" -> "Errno"; "Test2::Hub::Interceptor" -> "Test2::Util::HashBase"; "Test2::API::Stack" -> "warnings"; "Test2::EventFacet::Plan" -> "warnings"; "vars" -> "warnings::register"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseExcel::Workbook"; "Archive::Zip" -> "File::Temp::Dir"; "Test2::API" -> "Test2::Util::Trace"; "XML::Parser" -> "strict"; "POSIX" -> "warnings"; "Test::Builder" -> "Exporter"; "Test2::Util::HashBase" -> "Test2::Event::V2"; "Symbol" -> "warnings"; "Test2::API::Context" -> "Exporter"; "Spreadsheet::ParseExcel::Font" -> "warnings"; "constant" -> "warnings::register"; "Archive::Zip::ZipFileMember" -> "IO::Seekable"; "Spreadsheet::ParseExcel" -> "warnings"; "Test::Builder" -> "UNIVERSAL"; "Test::Builder::TodoDiag" -> "strict"; "Test2::Hub" -> "warnings"; "Test2::API" -> "Test2::Event::Exception"; "Test2::EventFacet::Info" -> "Test2::Util::HashBase"; "Test2::Util::ExternalMeta" -> "warnings"; "main" -> "Test::More"; "Encode" -> "Encode::Alias"; "Digest::Perl::MD5" -> "vars"; "Test2::Hub" -> "strict"; "Test2::Hub::Interceptor" -> "warnings"; "URI" -> "overload"; "Test2::Hub::Interceptor" -> "strict"; "Test2::EventFacet" -> "Exporter"; "Spreadsheet::ParseExcel::FmtDefault" -> "strict"; "Archive::Zip" -> "IO::Handle"; "Test2::EventFacet" -> "warnings"; "Archive::Zip" -> "File::Spec::Unix"; "Test2::Hub" -> "Test2::Formatter::TAP"; "parent" -> "CORE"; "Test2::EventFacet::Amnesty" -> "Test2::Util::HashBase"; "Spreadsheet::ParseExcel::Utility" -> "warnings"; "Test::Builder::Module" -> "Test::More"; "Test2::Hub" -> "Test2::Event::Plan"; "Test2::Event::Pass" -> "warnings"; "Test2::Util::Facets2Legacy" -> "Test2::Util::Facets2Legacy"; "File::Temp" -> "constant"; "Test2::EventFacet::About" -> "Test2::Util::HashBase"; "Spreadsheet::ParseExcel::FmtDefault" -> "CORE"; "Spreadsheet::ParseExcel" -> "Spreadsheet::ParseExcel::Worksheet"; "File::Copy" -> "Config"; "IO" -> "strict"; "Archive::Zip::Member" -> "Exporter"; "Spreadsheet::ParseXLSX" -> "Archive::Zip::Archive"; "Test::Builder" -> "Test2::Hub"; "Test2::API::Instance" -> "strict"; "Test2::Hub" -> "Test::Builder"; "Test2::Util::Facets2Legacy" -> "strict"; "Archive::Zip::ZipFileMember" -> "Exporter"; "SelectSaver" -> "Exporter"; "Test2::Event" -> "Test2::EventFacet::Meta"; "File::Copy" -> "strict"; "Test2::Event::Subtest" -> "Test2::Util::HashBase"; "JSON::Backend::PP" -> "UNIVERSAL"; "Test2::Util" -> "strict"; "Test2::API::Instance" -> "Test2::EventFacet::Trace"; "Carp" -> "Carp"; "Archive::Zip::Archive" -> "vars"; "IO::File" -> "IO::Seekable"; "Test2::Event::V2" -> "Exporter"; "JSON::Backend::PP" -> "CORE"; "Digest::Perl::MD5" -> "strict"; "File::Copy" -> "builtin"; "Test2::Hub" -> "CORE"; "Encode::XS" -> "parent"; "IO::Seekable" -> "IO::Handle"; "Spreadsheet::ParseExcel" -> "Spreadsheet::ParseExcel::Cell"; "CryptX" -> "JSON"; "Test2::API" -> "Test2::API::Instance"; "Graphics::ColorUtils" -> "strict"; "Archive::Zip::Archive" -> "Encode::Config"; "Test::Builder" -> "Test2::Event::Fail"; "Test2::EventFacet::Plan" -> "strict"; "JSON::PP::IncrParser" -> "constant"; "File::Temp::Dir" -> "strict"; "Archive::Zip::Archive" -> "Archive::Zip::FileMember"; "Test::Builder::TodoDiag" -> "warnings"; "XML::Twig" -> "XML::Twig::Entity_list"; "Time::Local" -> "strict"; "Carp" -> "strict"; "Test2::API" -> "Test2::Event::Skip"; "Test2::Util::HashBase" -> "Test2::EventFacet::Trace"; "CryptX" -> "JSON::Backend::PP"; "Archive::Zip::Member" -> "Compress::Raw::Zlib::Inflate"; "Test2::EventFacet::Assert" -> "strict"; "CryptX" -> "strict"; "File::Basename" -> "CORE"; "CryptX" -> "Exporter"; "IO::Handle" -> "IO"; "Test2::Formatter::TAP" -> "Exporter"; "Test::Builder" -> "Test2::API"; "XML::Twig" -> "Spreadsheet::ParseXLSX"; "Test2::API::Stack" -> "strict"; "base" -> "base"; "Test2::EventFacet::Trace" -> "Time::HiRes"; "Test::Builder" -> "Test2::Util"; "Spreadsheet::ParseXLSX::Decryptor::Standard" -> "warnings"; "Test2::Event::Exception" -> "warnings"; "Test2::Hub::Interceptor" -> "Test2::Hub::Interceptor::Terminator"; "Scalar::Util" -> "warnings"; "Config" -> "CORE"; "Digest::base" -> "warnings"; "Archive::Zip::Archive" -> "Encode::utf8"; "Compress::Raw::Zlib::Inflate" -> "Compress::Raw::Zlib"; "POSIX" -> "strict"; "Test2::Hub" -> "Exporter"; "Archive::Zip" -> "Fcntl"; "Fcntl" -> "strict"; "mro" -> "warnings"; "Test2::Event::V2" -> "Scalar::Util"; "Time::Local" -> "constant"; "Spreadsheet::ParseExcel::Cell" -> "warnings"; "Spreadsheet::ParseXLSX" -> "Archive::Zip::FileMember"; "Test::Builder" -> "warnings"; "Spreadsheet::ParseXLSX" -> "Archive::Zip::ZipFileMember"; "Encode::Config" -> "strict"; "Test2::API::Instance" -> "Exporter"; "XML::Twig::Elt" -> "XML::Twig"; "Archive::Zip::Member" -> "Time::Local"; "Spreadsheet::ParseXLSX" -> "XML::Twig::Elt"; "IO::Handle" -> "Exporter"; "JSON" -> "strict"; "Spreadsheet::ParseXLSX" -> "Scalar::Util"; "OLE::Storage_Lite::PPS" -> "strict"; "Test2::API::Instance" -> "Test2::Util::HashBase"; "IO::File" -> "SelectSaver"; "constant" -> "strict"; "Spreadsheet::ParseExcel::Format" -> "warnings"; "Spreadsheet::ParseExcel::Workbook" -> "warnings"; "JSON::PP" -> "warnings"; "Crypt::Cipher" -> "UNIVERSAL"; "Spreadsheet::ParseXLSX" -> "strict"; "Test::More" -> "warnings"; "base" -> "utf8"; "Test::Builder" -> "Scalar::Util"; "Spreadsheet::ParseXLSX::Cell" -> "strict"; "Test2::Util::HashBase" -> "mro"; "Test2::Hub" -> "List::Util"; "Test2::EventFacet::Meta" -> "vars"; "Errno" -> "strict"; "POSIX" -> "XSLoader"; "Test2::Formatter::TAP" -> "Test2::Util"; "Test2::Event::V2" -> "warnings"; "Test2::API" -> "Test2::Event::Diag"; "XML::Twig" -> "Scalar::Util"; "Test2::Util" -> "Tie::Hash"; "Archive::Zip" -> "constant"; "Archive::Zip::Archive" -> "Archive::Zip"; "Spreadsheet::ParseExcel" -> "Spreadsheet::ParseExcel"; "OLE::Storage_Lite::PPS" -> "vars"; "Exporter" -> "Exporter::Heavy"; "parent" -> "Encode::Encoding"; "Test2::Event" -> "Test2::Util::HashBase"; "JSON" -> "JSON::PP::IncrParser"; "Encode" -> "Exporter"; "Storable" -> "warnings"; "Spreadsheet::ParseExcel" -> "OLE::Storage_Lite::PPS::File"; "Test2::Event::V2" -> "Test2::Event::V2"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseExcel::FmtDefault"; "Archive::Zip::Archive" -> "File::Find"; "Errno" -> "Errno"; "Digest::Perl::MD5" -> "Exporter"; "File::Spec::Unix" -> "strict"; "Test2::Event" -> "Test2::EventFacet::Amnesty"; "File::Spec" -> "strict"; "Crypt::Cipher" -> "warnings"; "Test2::Event::Pass" -> "strict"; "Encode" -> "strict"; "JSON" -> "JSON::Backend::PP"; "utf8" -> "warnings"; "XML::Twig" -> "XML::Twig::Notation_list"; "Test2::Util::HashBase" -> "Test2::Event::Plan"; "Test2::Event::Plan" -> "Test2::Event"; "Spreadsheet::ParseExcel" -> "Spreadsheet::ParseExcel::Workbook"; "Digest::SHA" -> "strict"; "Encode" -> "Storable"; "Graphics::ColorUtils" -> "Exporter"; "Spreadsheet::ParseXLSX::Decryptor::Agile" -> "base"; "Spreadsheet::ParseExcel::Worksheet" -> "strict"; "Test::Builder" -> "Test2::EventFacet::Trace"; "Test::Builder::Module" -> "Test::Builder"; "Compress::Raw::Zlib" -> "warnings"; "Test2::EventFacet::Trace" -> "warnings"; "URI" -> "CORE"; "Digest::SHA" -> "vars"; "Archive::Zip::Member" -> "strict"; "IO::Handle" -> "strict"; "Digest::Perl::MD5" -> "integer"; "Archive::Zip::Member" -> "Compress::Raw::Zlib"; "Test2::API::Context" -> "Test2::EventFacet::Trace"; "Test2::Formatter" -> "warnings"; "Storable" -> "XSLoader"; "Archive::Zip::Member" -> "constant"; "Test2::Util::HashBase" -> "Test::Builder::Formatter"; "Spreadsheet::ParseExcel::Workbook" -> "strict"; "Test2::Util" -> "POSIX"; "Spreadsheet::ParseXLSX" -> "Archive::Zip::NewFileMember"; "Test2::EventFacet::Meta" -> "strict"; "Test2::EventFacet" -> "Test2::Util::HashBase"; "File::Path" -> "Exporter"; "warnings" -> "CORE"; "Test::Builder" -> "List::Util"; "Test::Builder::Module" -> "Test2::API"; "Test2::Event" -> "Exporter"; "File::Path" -> "vars"; "Test2::Event::Bail" -> "warnings"; "constant" -> "Internals"; "File::Temp" -> "parent"; "Encode::UTF_EBCDIC" -> "parent"; "File::Find" -> "strict"; "Test2::API" -> "Test2::API"; "Test2::API::Stack" -> "Test2::Util::HashBase"; "Test2::Event::V2" -> "strict"; "constant" -> "CORE"; "Test2::Util::Trace" -> "strict"; "main" -> "strict"; "Spreadsheet::ParseExcel" -> "OLE::Storage_Lite::PPS::Dir"; "main" -> "Test2::API"; "Test2::Util" -> "PerlIO"; "Test2::Formatter::TAP" -> "CORE"; "Crypt::Mode::CBC" -> "strict"; "OLE::Storage_Lite::PPS::Root" -> "Exporter"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseExcel::Format"; "Archive::Zip" -> "UNIVERSAL"; "IO::Handle" -> "XSLoader"; "Test2::EventFacet::Info" -> "strict"; "IO" -> "Exporter"; "Test::Builder" -> "Test2::Event::V2"; "Test2::EventFacet::Error" -> "warnings"; "Test2::Event" -> "Test2::Util"; "Test2::API" -> "Test2::Event::Plan"; "main" -> "Test2::API::Instance"; "Digest::SHA" -> "Exporter"; "Encode" -> "CORE"; "XML::Twig" -> "File::Glob"; "Test2::EventFacet::Assert" -> "Test2::Util::HashBase"; "Test2::Event::Subtest" -> "warnings"; "Test2::Util" -> "Config"; "Test2::API" -> "Test2::Event::Waiting"; "XML::Twig" -> "XSLoader"; "XML::Twig::Elt" -> "CORE"; "JSON::PP" -> "Exporter"; "Encode::MIME::Name" -> "strict"; "XML::Twig" -> "XML::Parser::Expat"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseExcel"; "Scalar::Util" -> "strict"; "Archive::Zip::StringMember" -> "vars"; "Test2::Event" -> "warnings"; "Test2::Event" -> "Test2::Event"; "Test::Builder" -> "Test::Builder"; "Archive::Zip::Member" -> "Compress::Raw::Zlib::inflateStream"; "Archive::Zip::Archive" -> "File::Copy"; "URI::Escape" -> "strict"; "Archive::Zip::Member" -> "Archive::Zip::Member"; "Test2::Event::Bail" -> "Test2::Util::HashBase"; "Crypt::Cipher" -> "XSLoader"; "Test2::Hub" -> "Test2::API"; "JSON" -> "UNIVERSAL"; "Compress::Raw::Zlib::Inflate" -> "Compress::Raw::Zlib::Parameters"; "OLE::Storage_Lite" -> "Exporter"; "File::Temp::Dir" -> "Exporter"; "Symbol" -> "strict"; "Encode::Alias" -> "warnings"; "Tie::Hash" -> "Exporter"; "Test2::Event" -> "strict"; "File::Spec::Unix" -> "constant"; "Spreadsheet::ParseXLSX::Cell" -> "base"; "File::Temp" -> "Errno"; "Spreadsheet::ParseExcel" -> "OLE::Storage_Lite::PPS::Root"; "Spreadsheet::ParseExcel" -> "strict"; "Archive::Zip::ZipFileMember" -> "Archive::Zip"; "Archive::Zip::Archive" -> "IO::Handle"; "URI" -> "URI::Escape"; "Test2::Event::Fail" -> "Test2::Event::Fail"; "Encode::Encoding" -> "strict"; "Compress::Raw::Zlib" -> "strict"; "Test2::API" -> "Test2::Event::Note"; "Test2::Event::Waiting" -> "warnings"; "Test::Builder" -> "Test2::Util::ExternalMeta"; "Test2::Hub::Interceptor::Terminator" -> "strict"; "Test2::Event" -> "Test2::EventFacet::Control"; "Spreadsheet::ParseXLSX::Decryptor" -> "Digest::base"; "XML::Parser::ContentModel" -> "overload"; "IO::File" -> "Symbol"; "Test2::API" -> "Test2::Event::Ok"; "Spreadsheet::ParseXLSX::Decryptor" -> "UNIVERSAL"; "Test2::Util::HashBase" -> "UNIVERSAL"; "Test2::Formatter::TAP" -> "Test::Builder::Formatter"; "Test2::Event::Skip" -> "Test2::Util::HashBase"; "Test2::Event::Ok" -> "strict"; "File::Find" -> "Exporter"; "Test::More" -> "strict"; "Compress::Raw::Zlib" -> "bytes"; "Digest::SHA" -> "warnings"; "Test2::Event::Waiting" -> "Test2::Util::HashBase"; "Test2::API" -> "Test::Builder"; "IO::Handle" -> "Symbol"; "File::Temp" -> "UNIVERSAL"; "Archive::Zip::Archive" -> "Archive::Zip::Archive"; "Crypt::Cipher" -> "CryptX"; "bytes" -> "warnings"; "Spreadsheet::ParseXLSX::Decryptor" -> "Exporter"; "XML::Twig" -> "CORE"; "JSON::PP" -> "UNIVERSAL"; "Archive::Zip::Archive" -> "Encode"; "XML::Parser" -> "XML::Parser::Expat"; "File::Path" -> "File::Path"; "XML::Twig" -> "Config"; "XML::Parser" -> "XML::Twig"; "Archive::Zip::Member" -> "integer"; "Spreadsheet::ParseExcel::Utility" -> "strict"; "Archive::Zip::StringMember" -> "strict"; "Test2::Util" -> "Tie::StdHash"; "File::Copy" -> "File::Copy"; "XML::Twig::Elt" -> "XML::Twig::Elt"; "Test2::API::Instance" -> "Test2::Hub"; "Archive::Zip::ZipFileMember" -> "CORE"; "XML::Parser::Expat" -> "Exporter"; "Test2::API::Context" -> "strict"; "Spreadsheet::ParseExcel" -> "Spreadsheet::ParseExcel::Format"; "overload" -> "overloading"; "Archive::Zip" -> "File::Temp"; "File::Copy" -> "warnings"; "Test2::API::Instance" -> "Test::Builder"; "main" -> "Spreadsheet::ParseXLSX"; "Digest::Perl::MD5" -> "CORE"; "Test2::API" -> "Test2::API::Context"; "Spreadsheet::ParseXLSX" -> "Archive::Zip::Member"; "Archive::Zip::ZipFileMember" -> "Archive::Zip::Member"; "Test2::Formatter" -> "Test2::Util::HashBase"; "Test2::Util" -> "UNIVERSAL"; "Test2::Hub" -> "Test2::Formatter"; "Test2::EventFacet::Error" -> "Test2::Util::HashBase"; "Test2::API::Stack" -> "Test2::Formatter"; "Encode" -> "UNIVERSAL"; "File::Temp" -> "File::Temp"; "Archive::Zip::FileMember" -> "IO::Handle"; "Test2::API" -> "XSLoader"; "Digest::base" -> "strict"; "IO::File" -> "IO::Handle"; "base" -> "CORE"; "Tie::Hash" -> "Carp"; "Time::HiRes" -> "Exporter"; "XML::Parser" -> "XSLoader"; "Crypt::Cipher" -> "strict"; "Archive::Zip::FileMember" -> "Archive::Zip::FileMember"; "Test::Builder::Formatter" -> "warnings"; "Test2::Util" -> "version"; "XML::Parser::Expat" -> "UNIVERSAL"; "Spreadsheet::ParseXLSX::Decryptor::Standard" -> "base"; "Spreadsheet::ParseExcel::FmtDefault" -> "Exporter"; "Test2::Formatter::TAP" -> "warnings"; "Spreadsheet::ParseXLSX" -> "Graphics::ColorUtils"; "Time::HiRes" -> "Exporter::Heavy"; "Test2::Hub" -> "Test2::Event"; "Test2::EventFacet::Trace" -> "Exporter"; "Archive::Zip::ZipFileMember" -> "IO::Handle"; "Test2::Util::ExternalMeta" -> "Test2::Util::ExternalMeta"; "Encode::Config" -> "warnings"; "Spreadsheet::ParseExcel" -> "Crypt::RC4"; "Fcntl" -> "File::Temp"; "OLE::Storage_Lite::PPS::File" -> "strict"; "Test2::Event" -> "Test2::EventFacet::About"; "Crypt::Mode::ECB" -> "strict"; "CORE" -> "XML::Twig::Elt"; "Test2::EventFacet::Control" -> "Test2::Util::HashBase"; "main" -> "UNIVERSAL"; "XML::Twig::Elt" -> "warnings"; "MIME::Base64" -> "warnings"; "JSON::PP" -> "strict"; "Exporter" -> "strict"; "File::Temp" -> "Config"; "Spreadsheet::ParseExcel" -> "Spreadsheet::ParseExcel::FmtDefault"; "OLE::Storage_Lite::PPS::Root" -> "vars"; "Spreadsheet::ParseExcel" -> "constant"; "Archive::Zip::Archive" -> "Encode::UTF_EBCDIC"; "Test::Builder" -> "Test2::Formatter"; "Errno" -> "Config"; "Test2::Hub" -> "Test2::Util::HashBase"; "IO::Handle" -> "IO::Handle"; "Archive::Zip::ZipFileMember" -> "vars"; "Archive::Zip::NewFileMember" -> "vars"; "Test2::Event::Waiting" -> "strict"; "URI" -> "warnings"; "Compress::Raw::Zlib::Parameters" -> "Compress::Raw::Zlib::Parameters"; "Config" -> "Internals"; "Archive::Zip::Member" -> "Archive::Zip::ZipFileMember"; "Test2::API::Instance" -> "UNIVERSAL"; "URI::Escape" -> "Exporter"; "Test2::EventFacet::Meta" -> "warnings"; "Config" -> "strict"; "Exporter" -> "CORE"; "JSON::PP" -> "CORE"; "Test2::EventFacet::Parent" -> "strict"; "File::Temp" -> "overload"; "Tie::Hash" -> "warnings::register"; "Test2::EventFacet::Hub" -> "Test2::Util::HashBase"; "Test::Builder" -> "Test::Builder::Formatter"; "File::Path" -> "File::Basename"; "Test2::Event::Plan" -> "Exporter"; "Test2::Util::ExternalMeta" -> "strict"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseExcel::Worksheet"; "XML::Twig" -> "utf8"; "Test2::EventFacet::About" -> "warnings"; "Test::Builder" -> "Test2::API::Context"; "Archive::Zip::Archive" -> "strict"; "Archive::Zip::Archive" -> "IO::Seekable"; "Crypt::RC4" -> "vars"; "Encode::Alias" -> "Encode::Alias"; "Spreadsheet::ParseXLSX" -> "XML::Twig"; "Spreadsheet::ParseXLSX" -> "Archive::Zip::StringMember"; "Spreadsheet::ParseXLSX::Decryptor::Standard" -> "strict"; "Compress::Raw::Zlib" -> "constant"; "Spreadsheet::ParseExcel::FmtDefault" -> "Spreadsheet::ParseExcel::FmtDefault"; "URI::Escape" -> "UNIVERSAL"; "Cwd" -> "strict"; "OLE::Storage_Lite" -> "POSIX"; "Test2::Formatter::TAP" -> "strict"; "vars" -> "strict"; "XML::Twig" -> "warnings"; "XML::Twig::Elt" -> "Scalar::Util"; "Spreadsheet::ParseExcel" -> "Config"; "CryptX" -> "CORE"; "Test2::Event::Exception" -> "Test2::Util::HashBase"; "Crypt::Cipher" -> "Exporter"; "Archive::Zip::Member" -> "Archive::Zip::FileMember"; "Crypt::Mode::ECB" -> "UNIVERSAL"; "base" -> "UNIVERSAL"; "Test2::Hub" -> "Test2::Hub"; "Encode::Alias" -> "constant"; "Carp" -> "warnings"; "Archive::Zip::Archive" -> "Encode::XS"; "Test2::EventFacet::Hub" -> "strict"; "Archive::Zip" -> "Compress::Raw::Zlib"; "Test2::Event" -> "Test2::EventFacet::Info"; "Encode" -> "Encode"; "Archive::Zip" -> "Cwd"; "Test2::Formatter::TAP" -> "Test2::API"; "XML::Twig" -> "Exporter"; "Archive::Zip::DirectoryMember" -> "vars"; "XML::Parser" -> "Exporter"; "Test2::Event::Ok" -> "warnings"; "Test2::API::Instance" -> "Test2::API"; "builtin" -> "strict"; "Archive::Zip::StringMember" -> "Exporter"; "Compress::Raw::Zlib::Parameters" -> "CORE"; "overload" -> "warnings::register"; "main" -> "CORE"; "Test2::Event::Diag" -> "strict"; "Spreadsheet::ParseExcel" -> "OLE::Storage_Lite::PPS"; "Carp" -> "overloading"; "OLE::Storage_Lite" -> "strict"; "Exporter" -> "Exporter"; "Test2::Event::Plan" -> "strict"; "warnings" -> "warnings"; "Spreadsheet::ParseXLSX" -> "IO::File"; "Archive::Zip" -> "Exporter"; "XML::Parser" -> "CORE"; "XML::Twig::Elt" -> "Exporter"; "Test2::Event::Note" -> "Test2::Util::HashBase"; "Spreadsheet::ParseXLSX" -> "Exporter"; "Time::Local" -> "CORE"; "Test2::EventFacet::Amnesty" -> "strict"; "main" -> "main"; "JSON" -> "Exporter"; "Test2::API::Stack" -> "Exporter"; "Compress::Raw::Zlib" -> "CORE"; "Archive::Zip::Archive" -> "CORE"; "Test2::Util::Trace" -> "warnings"; "XML::Twig" -> "XML::Twig::Elt"; "Test2::Event" -> "Test2::EventFacet::Plan"; "Test2::API::Stack" -> "Test2::Hub"; "File::Copy" -> "overload"; "Encode" -> "warnings"; "builtin" -> "warnings"; "Archive::Zip::ZipFileMember" -> "Archive::Zip::ZipFileMember"; "parent" -> "strict"; "Test2::Util::Facets2Legacy" -> "base"; "XML::Parser::Expat" -> "XML::Parser::Expat"; "Test2::Event::Pass" -> "Test2::Event::Pass"; "OLE::Storage_Lite::PPS::File" -> "vars"; "XML::Parser::Expat" -> "strict"; "Archive::Zip" -> "vars"; "Graphics::ColorUtils" -> "warnings"; "Test2::Formatter::TAP" -> "Test2::Formatter"; "Test2::EventFacet::Control" -> "warnings"; "constant" -> "mro"; "Errno" -> "Exporter"; "Test2::API::Context" -> "Test2::Hub"; "Spreadsheet::ParseXLSX::Decryptor" -> "Spreadsheet::ParseXLSX::Decryptor::Standard"; "XML::Twig" -> "bytes"; "URI" -> "constant"; "Compress::Raw::Zlib" -> "Compress::Raw::Zlib::Parameters"; "Archive::Zip::ZipFileMember" -> "Archive::Zip::FileMember"; "Spreadsheet::ParseExcel" -> "CORE"; "OLE::Storage_Lite::PPS::Dir" -> "strict"; "Compress::Raw::Zlib" -> "Compress::Raw::Zlib"; "OLE::Storage_Lite" -> "List::Util"; "Spreadsheet::ParseExcel::Worksheet" -> "Scalar::Util"; "Spreadsheet::ParseExcel::Format" -> "strict"; "Exporter::Heavy" -> "Exporter::Heavy"; "Test2::API::Stack" -> "Test2::API"; "Spreadsheet::ParseExcel" -> "OLE::Storage_Lite"; "JSON::PP::IncrParser" -> "strict"; "Test2::Event" -> "Test2::EventFacet::Assert"; "Crypt::RC4" -> "strict"; "main" -> "Test::Builder"; "Spreadsheet::ParseExcel::FmtDefault" -> "Spreadsheet::ParseExcel::Utility"; "Test2::EventFacet::Parent" -> "warnings"; "Test::Builder" -> "Test2::Event::Pass"; "JSON" -> "JSON::PP"; "Test2::Event::Bail" -> "strict"; "Test::Builder" -> "XSLoader"; "Test2::EventFacet::Trace" -> "Test2::EventFacet"; "JSON::Backend::PP" -> "strict"; "Test::More" -> "Test::Builder"; "Time::HiRes" -> "Time::HiRes"; "main" -> "Test::Builder::Module"; "Test2::Event::Skip" -> "warnings"; "Spreadsheet::ParseExcel" -> "Exporter"; "Encode::MIME::Name" -> "warnings"; "Spreadsheet::ParseXLSX::Decryptor" -> "Digest::SHA"; "Test2::Event::Plan" -> "warnings"; "Test2::API::Context" -> "Test2::Util::HashBase"; "Encode::utf8" -> "bytes"; "JSON::PP" -> "constant"; "JSON" -> "JSON"; "Test2::API::Instance" -> "Test2::API::Instance"; "Spreadsheet::ParseXLSX::Decryptor" -> "Spreadsheet::ParseXLSX::Decryptor::Agile"; "Test2::Event::Note" -> "warnings"; "Encode::Alias" -> "Exporter"; "Test2::API::Instance" -> "Scalar::Util"; "Time::Local" -> "parent"; "Archive::Zip::Member" -> "vars"; "Encode::Alias" -> "CORE"; "IO::Handle" -> "CORE"; "Test2::API::Instance" -> "Test2::API::Context"; "Spreadsheet::ParseXLSX" -> "CORE"; "Test2::Event::Fail" -> "Test2::Util::HashBase"; "Archive::Zip::NewFileMember" -> "Exporter"; "Encode" -> "Encode::MIME::Name"; "Test2::Hub" -> "Test2::Util"; "Crypt::Mode::ECB" -> "warnings"; "Crypt::Mode::CBC" -> "UNIVERSAL"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseXLSX::Decryptor"; "Crypt::Mode::CBC" -> "warnings"; "Test2::Util" -> "warnings"; "Spreadsheet::ParseXLSX::Decryptor" -> "strict"; "File::Path" -> "strict"; "Spreadsheet::ParseXLSX::Decryptor" -> "Crypt::Mode::CBC"; "Spreadsheet::ParseExcel" -> "Digest::Perl::MD5"; "POSIX" -> "Exporter"; "IO::File" -> "IO::File"; "Test::Builder::Formatter" -> "Test2::Util::HashBase"; "Archive::Zip::Archive" -> "File::Spec::Unix"; "XML::Twig" -> "UNIVERSAL"; "Test2::Hub::Subtest" -> "Test2::Util::HashBase"; "Test2::API::Instance" -> "warnings"; "List::Util" -> "strict"; "JSON::PP" -> "overload"; "CryptX" -> "warnings"; "overload" -> "strict"; "Test::Builder::Formatter" -> "UNIVERSAL"; "main" -> "warnings"; "Fcntl" -> "Exporter"; "Exporter::Heavy" -> "strict"; "Test2::Event::V2" -> "Test2::Event"; "Spreadsheet::ParseExcel::Utility" -> "vars"; "Test2::EventFacet" -> "strict"; "Encode::Encoding" -> "warnings"; "Test2::API" -> "Test2::API::Stack"; "Test2::Event::Note" -> "strict"; "IO::Seekable" -> "strict"; "Test2::EventFacet::Info" -> "warnings"; "File::Copy" -> "Time::HiRes"; "Archive::Zip::FileMember" -> "Archive::Zip"; "overload" -> "warnings"; "Test2::EventFacet::Trace" -> "strict"; "OLE::Storage_Lite" -> "vars"; "POSIX" -> "POSIX"; "XML::Twig" -> "strict"; "URI" -> "strict"; "Test2::Formatter::TAP" -> "Test2::Util::HashBase"; "IO::File" -> "Exporter"; "JSON::PP::Boolean" -> "strict"; "Crypt::Mode::CBC" -> "Crypt::Cipher"; "Test2::Formatter" -> "strict"; "Test2::Event::Exception" -> "strict"; "Spreadsheet::ParseXLSX::Decryptor" -> "Crypt::Mode::ECB"; "Test2::EventFacet::Assert" -> "warnings"; "Test::Builder" -> "Test::Builder::TodoDiag"; "File::Find" -> "warnings"; "Archive::Zip" -> "CORE"; "OLE::Storage_Lite" -> "constant"; "Test2::EventFacet::Amnesty" -> "warnings"; "Spreadsheet::ParseXLSX" -> "Archive::Zip"; "Time::HiRes" -> "CORE"; "bytes" -> "strict"; "Test2::EventFacet::Parent" -> "Exporter"; "Spreadsheet::ParseXLSX" -> "Spreadsheet::ParseXLSX::Cell"; "Config" -> "Config"; "Test2::API" -> "Exporter"; "Compress::Raw::Zlib" -> "Exporter"; "Test2::Util::Facets2Legacy" -> "warnings"; "utf8" -> "strict"; "JSON::PP::Boolean" -> "warnings"; "Archive::Zip::Member" -> "CORE"; "Test2::Hub::Subtest" -> "Exporter"; "Spreadsheet::ParseExcel::Font" -> "strict"; "Exporter::Heavy" -> "CORE"; "OLE::Storage_Lite::PPS::Root" -> "strict"; "Test2::Event" -> "Test2::EventFacet::Hub"; "XML::Twig" -> "XML::Twig"; "Time::Local" -> "Exporter"; "overload" -> "overload"; "Spreadsheet::ParseXLSX" -> "UNIVERSAL"; "Test2::Util" -> "Exporter"; "Test2::API::Context" -> "warnings"; "JSON::PP" -> "JSON::PP::Boolean"; "Spreadsheet::ParseExcel::Worksheet" -> "Exporter"; "Test2::Event" -> "Test2::EventFacet::Error"; } Spreadsheet-ParseXLSX-0.35/nytprof/File-Basename-pm-89-line.html0000644000175000017500000022123014576335353023215 0ustar michamicha Profile of File/Basename.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Basename.pm
StatementsExecuted 32 statements in 918µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11120µs44µsFile::Basename::::fileparse_set_fstypeFile::Basename::fileparse_set_fstype
1116µs6µsFile::Basename::::BEGIN@42File::Basename::BEGIN@42
1115µs5µsFile::Basename::::BEGIN@51File::Basename::BEGIN@51
1114µs4µsFile::Basename::::BEGIN@371File::Basename::BEGIN@371
1114µs5µsFile::Basename::::BEGIN@50File::Basename::BEGIN@50
1113µs20µsFile::Basename::::BEGIN@52File::Basename::BEGIN@52
0000s0sFile::Basename::::_strip_trailing_sepFile::Basename::_strip_trailing_sep
0000s0sFile::Basename::::basenameFile::Basename::basename
0000s0sFile::Basename::::dirnameFile::Basename::dirname
0000s0sFile::Basename::::fileparseFile::Basename::fileparse
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1=head1 NAME
2
3File::Basename - Parse file paths into directory, filename and suffix.
4
5=head1 SYNOPSIS
6
7 use File::Basename;
8
9 my ($name, $path, $suffix) = fileparse($fullname, @suffixlist);
10 my $name = fileparse($fullname, @suffixlist);
11
12 my $basename = basename($fullname, @suffixlist);
13 my $dirname = dirname($fullname);
14
15
16=head1 DESCRIPTION
17
18These routines allow you to parse file paths into their directory, filename
19and suffix.
20
21B<NOTE>: C<dirname()> and C<basename()> emulate the behaviours, and
22quirks, of the shell and C functions of the same name. See each
23function's documentation for details. If your concern is just parsing
24paths it is safer to use L<File::Spec>'s C<splitpath()> and
25C<splitdir()> methods.
26
27It is guaranteed that
28
29 # Where $path_separator is / for Unix, \ for Windows, etc...
30 dirname($path) . $path_separator . basename($path);
31
32is equivalent to the original path for all systems but VMS.
33
34
35=cut
36
37
38package File::Basename;
39
40# File::Basename is used during the Perl build, when the re extension may
41# not be available, but we only actually need it if running under tainting.
42
# spent 6µs within File::Basename::BEGIN@42 which was called: # once (6µs+0s) by File::Path::BEGIN@7 at line 47
BEGIN {
43112µs if (${^TAINT}) {
44 require re;
45 re->import('taint');
46 }
47113µs16µs}
# spent 6µs making 1 call to File::Basename::BEGIN@42
48
49
50214µs27µs
# spent 5µs (4+1) within File::Basename::BEGIN@50 which was called: # once (4µs+1µs) by File::Path::BEGIN@7 at line 50
use strict;
# spent 5µs making 1 call to File::Basename::BEGIN@50 # spent 1µs making 1 call to strict::import
51224µs15µs
# spent 5µs within File::Basename::BEGIN@51 which was called: # once (5µs+0s) by File::Path::BEGIN@7 at line 51
use 5.006;
# spent 5µs making 1 call to File::Basename::BEGIN@51
522769µs236µs
# spent 20µs (3+16) within File::Basename::BEGIN@52 which was called: # once (3µs+16µs) by File::Path::BEGIN@7 at line 52
use warnings;
# spent 20µs making 1 call to File::Basename::BEGIN@52 # spent 16µs making 1 call to warnings::import
53our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase);
541500nsrequire Exporter;
5515µs@ISA = qw(Exporter);
561500ns@EXPORT = qw(fileparse fileparse_set_fstype basename dirname);
571200ns$VERSION = "2.86";
58
5911µs144µsfileparse_set_fstype($^O);
# spent 44µs making 1 call to File::Basename::fileparse_set_fstype
60
61
62=over 4
63
64=item C<fileparse>
65X<fileparse>
66
67 my($filename, $dirs, $suffix) = fileparse($path);
68 my($filename, $dirs, $suffix) = fileparse($path, @suffixes);
69 my $filename = fileparse($path, @suffixes);
70
71The C<fileparse()> routine divides a file path into its $dirs, $filename
72and (optionally) the filename $suffix.
73
74$dirs contains everything up to and including the last
75directory separator in the $path including the volume (if applicable).
76The remainder of the $path is the $filename.
77
78 # On Unix returns ("baz", "/foo/bar/", "")
79 fileparse("/foo/bar/baz");
80
81 # On Windows returns ("baz", 'C:\foo\bar\', "")
82 fileparse('C:\foo\bar\baz');
83
84 # On Unix returns ("", "/foo/bar/baz/", "")
85 fileparse("/foo/bar/baz/");
86
87If @suffixes are given each element is a pattern (either a string or a
88C<qr//>) matched against the end of the $filename. The matching
89portion is removed and becomes the $suffix.
90
91 # On Unix returns ("baz", "/foo/bar/", ".txt")
92 fileparse("/foo/bar/baz.txt", qr/\.[^.]*/);
93
94If type is non-Unix (see L</fileparse_set_fstype>) then the pattern
95matching for suffix removal is performed case-insensitively, since
96those systems are not case-sensitive when opening existing files.
97
98You are guaranteed that C<$dirs . $filename . $suffix> will
99denote the same location as the original $path.
100
101=cut
102
103
104sub fileparse {
105 my($fullname,@suffices) = @_;
106
107 unless (defined $fullname) {
108 require Carp;
109 Carp::croak("fileparse(): need a valid pathname");
110 }
111
112 my $orig_type = '';
113 my($type,$igncase) = ($Fileparse_fstype, $Fileparse_igncase);
114
115 my($taint) = substr($fullname,0,0); # Is $fullname tainted?
116
117 if ($type eq "VMS" and $fullname =~ m{/} ) {
118 # We're doing Unix emulation
119 $orig_type = $type;
120 $type = 'Unix';
121 }
122
123 my($dirpath, $basename);
124
125 if (grep { $type eq $_ } qw(MSDOS DOS MSWin32 Epoc)) {
126 ($dirpath,$basename) = ($fullname =~ /^((?:.*[:\\\/])?)(.*)/s);
127 $dirpath .= '.\\' unless $dirpath =~ /[\\\/]\z/;
128 }
129 elsif ($type eq "OS2") {
130 ($dirpath,$basename) = ($fullname =~ m#^((?:.*[:\\/])?)(.*)#s);
131 $dirpath = './' unless $dirpath; # Can't be 0
132 $dirpath .= '/' unless $dirpath =~ m#[\\/]\z#;
133 }
134 elsif ($type eq "MacOS") {
135 ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/s);
136 $dirpath = ':' unless $dirpath;
137 }
138 elsif ($type eq "AmigaOS") {
139 ($dirpath,$basename) = ($fullname =~ /(.*[:\/])?(.*)/s);
140 $dirpath = './' unless $dirpath;
141 }
142 elsif ($type eq 'VMS' ) {
143 ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/s);
144 $dirpath ||= ''; # should always be defined
145 }
146 else { # Default to Unix semantics.
147 ($dirpath,$basename) = ($fullname =~ m{^(.*/)?(.*)}s);
148 if ($orig_type eq 'VMS' and $fullname =~ m{^(/[^/]+/000000(/|$))(.*)}) {
149 # dev:[000000] is top of VMS tree, similar to Unix '/'
150 # so strip it off and treat the rest as "normal"
151 my $devspec = $1;
152 my $remainder = $3;
153 ($dirpath,$basename) = ($remainder =~ m{^(.*/)?(.*)}s);
154 $dirpath ||= ''; # should always be defined
155 $dirpath = $devspec.$dirpath;
156 }
157 $dirpath = './' unless $dirpath;
158 }
159
160
161 my $tail = '';
162 my $suffix = '';
163 if (@suffices) {
164 foreach $suffix (@suffices) {
165 my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$";
166 if ($basename =~ s/$pat//s) {
167 $taint .= substr($suffix,0,0);
168 $tail = $1 . $tail;
169 }
170 }
171 }
172
173 # Ensure taint is propagated from the path to its pieces.
174 $tail .= $taint;
175 wantarray ? ($basename .= $taint, $dirpath .= $taint, $tail)
176 : ($basename .= $taint);
177}
178
- -
181=item C<basename>
182X<basename> X<filename>
183
184 my $filename = basename($path);
185 my $filename = basename($path, @suffixes);
186
187This function is provided for compatibility with the Unix shell command
188C<basename(1)>. It does B<NOT> always return the file name portion of a
189path as you might expect. To be safe, if you want the file name portion of
190a path use C<fileparse()>.
191
192C<basename()> returns the last level of a filepath even if the last
193level is clearly directory. In effect, it is acting like C<pop()> for
194paths. This differs from C<fileparse()>'s behaviour.
195
196 # Both return "bar"
197 basename("/foo/bar");
198 basename("/foo/bar/");
199
200@suffixes work as in C<fileparse()> except all regex metacharacters are
201quoted.
202
203 # These two function calls are equivalent.
204 my $filename = basename("/foo/bar/baz.txt", ".txt");
205 my $filename = fileparse("/foo/bar/baz.txt", qr/\Q.txt\E/);
206
207Also note that in order to be compatible with the shell command,
208C<basename()> does not strip off a suffix if it is identical to the
209remaining characters in the filename.
210
211=cut
212
213
214sub basename {
215 my($path) = shift;
216
217 # From BSD basename(1)
218 # The basename utility deletes any prefix ending with the last slash '/'
219 # character present in string (after first stripping trailing slashes)
220 _strip_trailing_sep($path);
221
222 my($basename, $dirname, $suffix) = fileparse( $path, map("\Q$_\E",@_) );
223
224 # From BSD basename(1)
225 # The suffix is not stripped if it is identical to the remaining
226 # characters in string.
227 if( length $suffix and !length $basename ) {
228 $basename = $suffix;
229 }
230
231 # Ensure that basename '/' == '/'
232 if( !length $basename ) {
233 $basename = $dirname;
234 }
235
236 return $basename;
237}
238
- -
241=item C<dirname>
242X<dirname>
243
244This function is provided for compatibility with the Unix shell
245command C<dirname(1)> and has inherited some of its quirks. In spite of
246its name it does B<NOT> always return the directory name as you might
247expect. To be safe, if you want the directory name of a path use
248C<fileparse()>.
249
250Only on VMS (where there is no ambiguity between the file and directory
251portions of a path) and AmigaOS (possibly due to an implementation quirk in
252this module) does C<dirname()> work like C<fileparse($path)>, returning just the
253$dirs.
254
255 # On VMS and AmigaOS
256 my $dirs = dirname($path);
257
258When using Unix or MSDOS syntax this emulates the C<dirname(1)> shell function
259which is subtly different from how C<fileparse()> works. It returns all but
260the last level of a file path even if the last level is clearly a directory.
261In effect, it is not returning the directory portion but simply the path one
262level up acting like C<chop()> for file paths.
263
264Also unlike C<fileparse()>, C<dirname()> does not include a trailing slash on
265its returned path.
266
267 # returns /foo/bar. fileparse() would return /foo/bar/
268 dirname("/foo/bar/baz");
269
270 # also returns /foo/bar despite the fact that baz is clearly a
271 # directory. fileparse() would return /foo/bar/baz/
272 dirname("/foo/bar/baz/");
273
274 # returns '.'. fileparse() would return 'foo/'
275 dirname("foo/");
276
277Under VMS, if there is no directory information in the $path, then the
278current default device and directory is used.
279
280=cut
281
282
283sub dirname {
284 my $path = shift;
285
286 my($type) = $Fileparse_fstype;
287
288 if( $type eq 'VMS' and $path =~ m{/} ) {
289 # Parse as Unix
290 local($File::Basename::Fileparse_fstype) = '';
291 return dirname($path);
292 }
293
294 my($basename, $dirname) = fileparse($path);
295
296 if ($type eq 'VMS') {
297 $dirname ||= $ENV{DEFAULT};
298 }
299 elsif ($type eq 'MacOS') {
300 if( !length($basename) && $dirname !~ /^[^:]+:\z/) {
301 _strip_trailing_sep($dirname);
302 ($basename,$dirname) = fileparse $dirname;
303 }
304 $dirname .= ":" unless $dirname =~ /:\z/;
305 }
306 elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) {
307 _strip_trailing_sep($dirname);
308 unless( length($basename) ) {
309 ($basename,$dirname) = fileparse $dirname;
310 _strip_trailing_sep($dirname);
311 }
312 }
313 elsif ($type eq 'AmigaOS') {
314 if ( $dirname =~ /:\z/) { return $dirname }
315 chop $dirname;
316 $dirname =~ s{[^:/]+\z}{} unless length($basename);
317 }
318 else {
319 _strip_trailing_sep($dirname);
320 unless( length($basename) ) {
321 ($basename,$dirname) = fileparse $dirname;
322 _strip_trailing_sep($dirname);
323 }
324 }
325
326 $dirname;
327}
328
329
330# Strip the trailing path separator.
331sub _strip_trailing_sep {
332 my $type = $Fileparse_fstype;
333
334 if ($type eq 'MacOS') {
335 $_[0] =~ s/([^:]):\z/$1/s;
336 }
337 elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) {
338 $_[0] =~ s/([^:])[\\\/]*\z/$1/;
339 }
340 else {
341 $_[0] =~ s{(.)/*\z}{$1}s;
342 }
343}
344
345
346=item C<fileparse_set_fstype>
347X<filesystem>
348
349 my $type = fileparse_set_fstype();
350 my $previous_type = fileparse_set_fstype($type);
351
352Normally File::Basename will assume a file path type native to your current
353operating system (ie. /foo/bar style on Unix, \foo\bar on Windows, etc...).
354With this function you can override that assumption.
355
356Valid $types are "MacOS", "VMS", "AmigaOS", "OS2", "RISCOS",
357"MSWin32", "DOS" (also "MSDOS" for backwards bug compatibility),
358"Epoc" and "Unix" (all case-insensitive). If an unrecognized $type is
359given "Unix" will be assumed.
360
361If you've selected VMS syntax, and the file specification you pass to
362one of these routines contains a "/", they assume you are using Unix
363emulation and apply the Unix syntax rules instead, for that function
364call only.
365
366=back
367
368=cut
369
370
371
# spent 4µs within File::Basename::BEGIN@371 which was called: # once (4µs+0s) by File::Path::BEGIN@7 at line 394
BEGIN {
372
37311µsmy @Ignore_Case = qw(MacOS VMS AmigaOS OS2 RISCOS MSWin32 MSDOS DOS Epoc);
37416µsmy @Types = (@Ignore_Case, qw(Unix));
375
376
# spent 44µs (20+24) within File::Basename::fileparse_set_fstype which was called: # once (20µs+24µs) by File::Path::BEGIN@7 at line 59
sub fileparse_set_fstype {
3771200ns my $old = $Fileparse_fstype;
378
3791400ns if (@_) {
3801800ns my $new_type = shift;
381
3821200ns $Fileparse_fstype = 'Unix'; # default
3831500ns foreach my $type (@Types) {
3841039µs2024µs $Fileparse_fstype = $type if $new_type =~ /^$type/i;
# spent 22µs making 10 calls to CORE::regcomp, avg 2µs/call # spent 2µs making 10 calls to CORE::match, avg 200ns/call
385 }
386
387 $Fileparse_igncase =
38812µs (grep $Fileparse_fstype eq $_, @Ignore_Case) ? 1 : 0;
389 }
390
39111µs return $old;
392}
393
394123µs14µs}
# spent 4µs making 1 call to File::Basename::BEGIN@371
395
396
39714µs1;
398
399
400=head1 SEE ALSO
401
402L<dirname(1)>, L<basename(1)>, L<File::Spec>










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 114)[XML-Twig-pm-1750]-231-line.html0000644000175000017500000005277014576335353024416 0ustar michamicha Profile of (eval 114)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 114)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 624326 statements in 269ms
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3121611149ms149msXML::Twig::::__ANON__[:26]XML::Twig::__ANON__[:26] (merge of 2 subs)
1116µs17µsXML::Twig::::BEGIN@1.58XML::Twig::BEGIN@1.58
1116µs16µsXML::Twig::::BEGIN@1.68XML::Twig::BEGIN@1.68
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14226µs454µs
# spent 17µs (6+10) within XML::Twig::BEGIN@1.58 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 149ms within XML::Twig::__ANON__[(eval 114)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] which was called 31216 times, avg 5µs/call: # (data for this subroutine includes 1 others that were merged with it) # 31216 times (149ms+0s) by XML::Twig::_handler at line 2405 of XML/Twig.pm, avg 5µs/call # spent 16µs (6+10) within XML::Twig::BEGIN@1.68 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1
sub { no warnings;
# spent 21µs making 2 calls to warnings::unimport, avg 10µs/call # spent 17µs making 1 call to XML::Twig::BEGIN@1.58 # spent 16µs making 1 call to XML::Twig::BEGIN@1.68
2312163.50msmy( $stack)= @_;
33121611.1msmy @current_elts= (scalar @$stack);
4312163.57msmy @new_current_elts;
5my $elt;
6
7312168.67msforeach my $current_elt (@current_elts)
8312163.52ms { next if( !$current_elt);
9312163.64ms $current_elt--;
10312167.20ms $elt= $stack->[$current_elt];
113121623.0ms if( ($elt->{'##tag'} eq "s:row")) { push @new_current_elts, $current_elt;}
12 }
13312164.14msunless( @new_current_elts) { return 0; }
14312169.27ms@current_elts= @new_current_elts;
15312165.88ms@new_current_elts=();
16312166.21msforeach my $current_elt (@current_elts)
17312162.88ms { next if( !$current_elt);
18312162.44ms $current_elt--;
19312165.91ms $elt= $stack->[$current_elt];
203121612.5ms if( ($elt->{'##tag'} eq "s:sheetData")) { push @new_current_elts, $current_elt;}
21 }
22312163.09msunless( @new_current_elts) { return 0; }
23312165.37ms@current_elts= @new_current_elts;
24312163.88ms@new_current_elts=();
2531216143msreturn q{s:sheetData/s:row};
2626µs }
27;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 87)[XML-Twig-pm-7113]-204-line.html0000644000175000017500000004102114576335353024331 0ustar michamicha Profile of (eval 87)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 87)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 11 statements in 90µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11112µs362µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1115µs15µsXML::Twig::Elt::::BEGIN@1.31XML::Twig::Elt::BEGIN@1.31
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11190µs6376µs
# spent 15µs (5+10) within XML::Twig::Elt::BEGIN@1.31 which was called: # once (5µs+10µs) by XML::Twig::Elt::_install_xpath at line 1 # spent 362µs (12+351) within XML::Twig::Elt::__ANON__[(eval 87)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (12µs+351µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:fonts') } @results;@results= grep defined, map { $_->children( 's:font') } @results;return XML::Twig::_unique_elts( @results); }
# spent 184µs making 1 call to XML::Twig::descendants # spent 106µs making 1 call to XML::Twig::Elt::children # spent 57µs making 1 call to XML::Twig::_unique_elts # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.31 # spent 10µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Exporter-pm-7-line.html0000644000175000017500000014720414576335353022353 0ustar michamicha Profile of Exporter.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Exporter.pm
StatementsExecuted 1901 statements in 4.47ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
125124633.48ms4.71msExporter::::importExporter::import
17411.20ms1.27msExporter::::as_heavyExporter::as_heavy
122222µs88µsExporter::::exportExporter::export
11111µs12µsExporter::::BEGIN@3Exporter::BEGIN@3
3117µs1.20msExporter::::export_to_levelExporter::export_to_level
1114µs15µsExporter::::export_tagsExporter::export_tags
1114µs8µsExporter::::BEGIN@4Exporter::BEGIN@4
1113µs12µsExporter::::export_ok_tagsExporter::export_ok_tags
0000s0sExporter::::__ANON__[:61]Exporter::__ANON__[:61]
0000s0sExporter::::export_failExporter::export_fail
0000s0sExporter::::require_versionExporter::require_version
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Exporter;
2
3222µs214µs
# spent 12µs (11+2) within Exporter::BEGIN@3 which was called: # once (11µs+2µs) by Test::Builder::BEGIN@15 at line 3
use strict;
# spent 12µs making 1 call to Exporter::BEGIN@3 # spent 2µs making 1 call to strict::import
42402µs212µs
# spent 8µs (4+4) within Exporter::BEGIN@4 which was called: # once (4µs+4µs) by Test::Builder::BEGIN@15 at line 4
no strict 'refs';
# spent 8µs making 1 call to Exporter::BEGIN@4 # spent 4µs making 1 call to strict::unimport
5
61200nsour $Debug = 0;
71100nsour $ExportLevel = 0;
81100nsour $Verbose ||= 0;
91200nsour $VERSION = '5.78';
10our %Cache;
11
12
# spent 1.27ms (1.20+72µs) within Exporter::as_heavy which was called 17 times, avg 75µs/call: # 12 times (47µs+20µs) by Exporter::export at line 22, avg 6µs/call # 3 times (1.14ms+48µs) by Exporter::export_to_level at line 78, avg 396µs/call # once (8µs+3µs) by Exporter::export_tags at line 82 # once (6µs+2µs) by Exporter::export_ok_tags at line 86
sub as_heavy {
131760µs require Exporter::Heavy;
14 # Unfortunately, this does not work if the caller is aliased as *name = \&foo
15 # Thus the need to create a lot of identical subroutines
161726µs my $c = (caller(1))[3];
171756µs1732µs $c =~ s/.*:://;
# spent 32µs making 17 calls to CORE::subst, avg 2µs/call
181734µs \&{"Exporter::Heavy::heavy_$c"};
19}
20
21
# spent 88µs (22+66) within Exporter::export which was called 12 times, avg 7µs/call: # 9 times (17µs+55µs) by Exporter::import at line 59, avg 8µs/call # 3 times (5µs+11µs) by Exporter::Heavy::heavy_export_to_level at line 219 of Exporter/Heavy.pm, avg 5µs/call
sub export {
221229µs241.15ms goto &{as_heavy()};
# spent 1.08ms making 12 calls to Exporter::Heavy::heavy_export, avg 90µs/call # spent 66µs making 12 calls to Exporter::as_heavy, avg 6µs/call
23}
24
25
# spent 4.71ms (3.48+1.23) within Exporter::import which was called 125 times, avg 38µs/call: # 2 times (55µs+5µs) by OLE::Storage_Lite::BEGIN@831 or Test2::Hub::BEGIN@12 at line 39 of List/Util.pm, avg 30µs/call # once (527µs+31µs) by POSIX::import at line 192 of POSIX.pm # once (81µs+163µs) by Archive::Zip::Archive::BEGIN@21 at line 21 of Archive/Zip/Archive.pm # once (11µs+226µs) by Archive::Zip::Member::BEGIN@19 at line 19 of Archive/Zip/Member.pm # once (184µs+9µs) by POSIX::BEGIN@11 at line 11 of POSIX.pm # once (10µs+160µs) by Archive::Zip::ZipFileMember::BEGIN@11 at line 11 of Archive/Zip/ZipFileMember.pm # once (140µs+7µs) by OLE::Storage_Lite::PPS::Root::BEGIN@171 at line 171 of OLE/Storage_Lite.pm # once (12µs+129µs) by XML::Twig::BEGIN@1 at line 1 of (eval 14)[XML/Twig.pm:159] # once (112µs+7µs) by File::Temp::BEGIN@150 at line 150 of File/Temp.pm # once (10µs+108µs) by Archive::Zip::NewFileMember::BEGIN@11 at line 11 of Archive/Zip/NewFileMember.pm # once (80µs+5µs) by Test::Builder::Module::import at line 95 of Test/Builder/Module.pm # once (10µs+75µs) by Archive::Zip::StringMember::BEGIN@11 at line 11 of Archive/Zip/StringMember.pm # once (10µs+72µs) by Archive::Zip::DirectoryMember::BEGIN@13 at line 13 of Archive/Zip/DirectoryMember.pm # once (72µs+7µs) by Test::Builder::BEGIN@18 at line 18 of Test/Builder.pm # once (65µs+5µs) by Archive::Zip::BEGIN@12 at line 39 of FileHandle.pm # once (66µs+3µs) by Archive::Zip::BEGIN@7 at line 138 of IO/File.pm # once (63µs+4µs) by OLE::Storage_Lite::PPS::Root::BEGIN@169 at line 169 of OLE/Storage_Lite.pm # once (10µs+56µs) by Archive::Zip::FileMember::BEGIN@11 at line 11 of Archive/Zip/FileMember.pm # once (58µs+5µs) by Archive::Zip::Member::BEGIN@28 at line 28 of Archive/Zip/Member.pm # once (58µs+4µs) by OLE::Storage_Lite::BEGIN@830 at line 830 of OLE/Storage_Lite.pm # once (11µs+48µs) by Storable::BEGIN@83 at line 84 of Storable.pm # once (52µs+4µs) by Spreadsheet::ParseExcel::BEGIN@23 at line 23 of Spreadsheet/ParseExcel.pm # once (43µs+4µs) by Archive::Zip::Archive::BEGIN@12 at line 12 of Archive/Zip/Archive.pm # once (43µs+2µs) by Test2::Event::V2::BEGIN@12 at line 12 of Test2/Event/V2.pm # once (41µs+2µs) by Test2::Hub::BEGIN@14 at line 14 of Test2/Hub.pm # once (39µs+2µs) by Test::Builder::BEGIN@15 at line 15 of Test/Builder.pm # once (37µs+3µs) by Spreadsheet::ParseXLSX::BEGIN@12 at line 12 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (36µs+3µs) by Test::Builder::BEGIN@17 at line 17 of Test/Builder.pm # once (32µs+1µs) by Compress::Raw::Zlib::BEGIN@6 at line 6 of Compress/Raw/Zlib.pm # once (32µs+1µs) by Test2::Event::BEGIN@7 at line 7 of Test2/Event.pm # once (30µs+1µs) by Test2::EventFacet::Parent::BEGIN@7 at line 7 of Test2/EventFacet/Parent.pm # once (30µs+1µs) by Test2::API::Instance::BEGIN@11 at line 11 of Test2/API/Instance.pm # once (28µs+1000ns) by Archive::Zip::DirectoryMember::BEGIN@4 at line 4 of Archive/Zip/DirectoryMember.pm # once (25µs+2µs) by Test2::Util::BEGIN@9 at line 9 of Test2/Util.pm # once (26µs+800ns) by Test2::Hub::BEGIN@9 at line 9 of Test2/Hub.pm # once (24µs+1µs) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 at line 22 of Spreadsheet/ParseExcel/FmtDefault.pm # once (22µs+2µs) by File::Path::BEGIN@6 at line 6 of File/Path.pm # once (22µs+1µs) by Tie::Hash::BEGIN@190 at line 190 of Tie/Hash.pm # once (23µs+900ns) by OLE::Storage_Lite::BEGIN@829 at line 829 of OLE/Storage_Lite.pm # once (22µs+1µs) by XML::Twig::Elt::BEGIN@5082 at line 5082 of XML/Twig.pm # once (22µs+1µs) by IO::File::BEGIN@122 at line 122 of IO/File.pm # once (22µs+1µs) by File::Temp::BEGIN@146 at line 146 of File/Temp.pm # once (21µs+1µs) by Test2::Hub::BEGIN@8 at line 8 of Test2/Hub.pm # once (22µs+1µs) by IO::Handle::BEGIN@273 at line 273 of IO/Handle.pm # once (21µs+1µs) by Test2::API::BEGIN@102 at line 102 of Test2/API.pm # once (21µs+1µs) by File::Temp::BEGIN@149 at line 149 of File/Temp.pm # once (21µs+1µs) by Archive::Zip::Archive::BEGIN@10 at line 10 of Archive/Zip/Archive.pm # once (21µs+1µs) by XML::Parser::ExpatNB::BEGIN@600 at line 600 of XML/Parser/Expat.pm # once (20µs+1µs) by Storable::BEGIN@42 at line 42 of Storable.pm # once (20µs+1µs) by IO::File::BEGIN@121 at line 121 of IO/File.pm # once (20µs+1000ns) by XML::Parser::BEGIN@15 at line 15 of XML/Parser.pm # once (19µs+1µs) by Test2::API::Context::BEGIN@8 at line 8 of Test2/API/Context.pm # once (19µs+1µs) by IO::Seekable::BEGIN@103 at line 103 of IO/Seekable.pm # once (19µs+1000ns) by Crypt::Cipher::BEGIN@7 at line 7 of Crypt/Cipher.pm # once (19µs+1µs) by Test2::EventFacet::Trace::BEGIN@9 at line 9 of Test2/EventFacet/Trace.pm # once (19µs+1µs) by Test2::API::Context::BEGIN@25 at line 25 of Test2/API/Context.pm # once (19µs+800ns) by SelectSaver::BEGIN@38 at line 38 of SelectSaver.pm # once (19µs+800ns) by IO::BEGIN@6 at line 6 of IO.pm # once (19µs+1µs) by Test2::API::Instance::BEGIN@8 at line 8 of Test2/API/Instance.pm # once (19µs+900ns) by IO::Seekable::BEGIN@98 at line 98 of IO/Seekable.pm # once (19µs+1000ns) by Encode::BEGIN@56 at line 56 of Encode.pm # once (18µs+1µs) by Test2::Event::BEGIN@11 at line 11 of Test2/Event.pm # once (19µs+700ns) by XML::Twig::BEGIN@29 at line 29 of XML/Twig.pm # once (18µs+1µs) by Test2::API::Stack::BEGIN@10 at line 10 of Test2/API/Stack.pm # once (18µs+1µs) by Graphics::ColorUtils::BEGIN@8 at line 8 of Graphics/ColorUtils.pm # once (18µs+1µs) by JSON::PP::BEGIN@15 at line 15 of JSON/PP.pm # once (18µs+800ns) by IO::File::BEGIN@124 at line 124 of IO/File.pm # once (17µs+1000ns) by Test2::Util::Facets2Legacy::BEGIN@7 at line 7 of Test2/Util/Facets2Legacy.pm # once (17µs+1µs) by Archive::Zip::Archive::BEGIN@6 at line 6 of Archive/Zip/Archive.pm # once (17µs+1µs) by Spreadsheet::ParseExcel::BEGIN@22 at line 22 of Spreadsheet/ParseExcel.pm # once (17µs+1µs) by Test2::EventFacet::BEGIN@8 at line 8 of Test2/EventFacet.pm # once (17µs+800ns) by CryptX::BEGIN@10 at line 10 of CryptX.pm # once (17µs+900ns) by XML::Parser::Expat::BEGIN@8 at line 8 of XML/Parser/Expat.pm # once (16µs+1µs) by OLE::Storage_Lite::BEGIN@832 at line 832 of OLE/Storage_Lite.pm # once (16µs+1µs) by File::Temp::Dir::BEGIN@2601 at line 2601 of File/Temp.pm # once (16µs+700ns) by Archive::Zip::Archive::BEGIN@11 at line 11 of Archive/Zip/Archive.pm # once (16µs+700ns) by Spreadsheet::ParseExcel::BEGIN@26 at line 26 of Spreadsheet/ParseExcel.pm # once (16µs+1µs) by Test2::API::Context::BEGIN@10 at line 10 of Test2/API/Context.pm # once (16µs+700ns) by IO::Handle::BEGIN@274 at line 274 of IO/Handle.pm # once (16µs+1µs) by Test2::Event::V2::BEGIN@7 at line 7 of Test2/Event/V2.pm # once (16µs+700ns) by XML::Twig::BEGIN@31 at line 31 of XML/Twig.pm # once (16µs+1µs) by Test2::Event::Plan::BEGIN@11 at line 11 of Test2/Event/Plan.pm # once (16µs+700ns) by SelectSaver::BEGIN@39 at line 39 of SelectSaver.pm # once (16µs+500ns) by Digest::SHA::BEGIN@8 at line 8 of Digest/SHA.pm # once (15µs+800ns) by XML::Twig::Elt::BEGIN@5096 at line 5157 of XML/Twig.pm # once (15µs+900ns) by Test2::Hub::Subtest::BEGIN@9 at line 9 of Test2/Hub/Subtest.pm # once (15µs+800ns) by Test2::Util::ExternalMeta::BEGIN@8 at line 8 of Test2/Util/ExternalMeta.pm # once (14µs+700ns) by Archive::Zip::Member::BEGIN@30 at line 30 of Archive/Zip/Member.pm # once (14µs+800ns) by Test2::API::BEGIN@104 at line 104 of Test2/API.pm # once (14µs+800ns) by Spreadsheet::ParseExcel::Worksheet::BEGIN@21 at line 21 of Spreadsheet/ParseExcel/Worksheet.pm # once (14µs+800ns) by Test2::Formatter::TAP::BEGIN@7 at line 7 of Test2/Formatter/TAP.pm # once (14µs+700ns) by Test2::API::Context::BEGIN@9 at line 9 of Test2/API/Context.pm # once (14µs+800ns) by Test2::API::BEGIN@6 at line 6 of Test2/API.pm # once (14µs+400ns) by Digest::SHA::BEGIN@9 at line 9 of Digest/SHA.pm # once (14µs+600ns) by Test2::Event::BEGIN@8 at line 8 of Test2/Event.pm # once (13µs+600ns) by Test2::API::BEGIN@103 at line 103 of Test2/API.pm # once (13µs+1000ns) by File::Temp::BEGIN@153 at line 153 of File/Temp.pm # once (13µs+700ns) by File::Temp::BEGIN@151 at line 151 of File/Temp.pm # once (13µs+500ns) by Archive::Zip::Member::BEGIN@29 at line 29 of Archive/Zip/Member.pm # once (13µs+500ns) by Test2::EventFacet::Trace::BEGIN@11 at line 11 of Test2/EventFacet/Trace.pm # once (13µs+700ns) by XML::Twig::BEGIN@148 at line 168 of XML/Twig.pm # once (13µs+0s) by Cwd::BEGIN@3 at line 3 of Cwd.pm # once (12µs+600ns) by Test2::Event::V2::BEGIN@8 at line 8 of Test2/Event/V2.pm # once (12µs+500ns) by Test2::Event::BEGIN@12 at line 12 of Test2/Event.pm # once (12µs+0s) by File::Temp::BEGIN@152 at line 152 of File/Temp.pm # once (12µs+500ns) by Test2::API::Instance::BEGIN@9 at line 9 of Test2/API/Instance.pm # once (11µs+500ns) by Spreadsheet::ParseXLSX::BEGIN@13 at line 13 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (11µs+600ns) by Test2::Util::Facets2Legacy::BEGIN@8 at line 8 of Test2/Util/Facets2Legacy.pm # once (12µs+0s) by Spreadsheet::ParseExcel::BEGIN@27 at line 27 of Spreadsheet/ParseExcel.pm # once (11µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@16 at line 16 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm # once (10µs+400ns) by Test2::Hub::BEGIN@11 at line 11 of Test2/Hub.pm # once (10µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 11 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (9µs+0s) by Spreadsheet::ParseExcel::BEGIN@21 at line 21 of Spreadsheet/ParseExcel.pm # once (9µs+0s) by Time::Local::BEGIN@6 at line 6 of Time/Local.pm # once (8µs+0s) by Digest::Perl::MD5::BEGIN@4 at line 4 of Digest/Perl/MD5.pm # once (8µs+0s) by JSON::BEGIN@6 at line 6 of JSON.pm # once (7µs+0s) by OLE::Storage_Lite::PPS::Root::BEGIN@170 at line 170 of OLE/Storage_Lite.pm # once (5µs+0s) by Fcntl::BEGIN@60 at line 60 of Fcntl.pm # once (4µs+0s) by URI::Escape::BEGIN@147 at line 147 of URI/Escape.pm # once (4µs+0s) by Errno::BEGIN@8 at line 8 of Errno.pm # once (4µs+0s) by Encode::BEGIN@15 at line 15 of Encode.pm # once (4µs+0s) by File::Find::BEGIN@7 at line 7 of File/Find.pm # once (4µs+0s) by File::Temp::BEGIN@176 at line 176 of File/Temp.pm # once (4µs+0s) by Encode::Alias::BEGIN@7 at line 7 of Encode/Alias.pm
sub import {
2612532µs my $pkg = shift;
2712553µs my $callpkg = caller($ExportLevel);
28
2912538µs if ($pkg eq "Exporter" and @_ and $_[0] eq "import") {
30714µs *{$callpkg."::import"} = \&import;
31714µs return;
32 }
33
34 # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
35118122µs my $exports = \@{"$pkg\::EXPORT"};
36 # But, avoid creating things if they don't exist, which saves a couple of
37 # hundred bytes per package processed.
3811884µs my $fail = ${$pkg . '::'}{EXPORT_FAIL} && \@{"$pkg\::EXPORT_FAIL"};
3911861µs return export $pkg, $callpkg, @_
40 if $Verbose or $Debug or $fail && @$fail > 1;
4111846µs my $export_cache = ($Cache{$pkg} ||= {});
4211880µs my $args = @_ or @_ = @$exports;
43
4411831µs if ($args and not %$export_cache) {
45 s/^&//, $export_cache->{$_} = 1
46201.08ms135972µs foreach (@$exports, @{"$pkg\::EXPORT_OK"});
# spent 72µs making 1359 calls to CORE::subst, avg 53ns/call
47 }
4811810µs my $heavy;
49 # Try very hard not to use {} and hence have to enter scope on the foreach
50 # We bomb out of the loop with last as soon as heavy is set.
5111844µs if ($args or $fail) {
52 ($heavy = (/\W/ or $args and not exists $export_cache->{$_}
53 or $fail and @$fail and $_ eq $fail->[0])) and last
5491565µs368100µs foreach (@_);
# spent 100µs making 368 calls to CORE::match, avg 271ns/call
55 } else {
56 ($heavy = /\W/) and last
5727196µs21331µs foreach (@_);
# spent 31µs making 213 calls to CORE::match, avg 146ns/call
58 }
5911844µs972µs return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy;
# spent 72µs making 9 calls to Exporter::export, avg 8µs/call
60 local $SIG{__WARN__} =
61109264µs sub {require Carp; &Carp::carp} if not $SIG{__WARN__};
62 # shortcut for the common case of no type character
631091.04ms *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_;
64}
65
66# Default methods
67
68sub export_fail {
69 my $self = shift;
70 @_;
71}
72
73# Unfortunately, caller(1)[3] "does not work" if the caller is aliased as
74# *name = \&foo. Thus the need to create a lot of identical subroutines
75# Otherwise we could have aliased them to export().
76
77
# spent 1.20ms (7µs+1.19) within Exporter::export_to_level which was called 3 times, avg 399µs/call: # 3 times (7µs+1.19ms) by Time::HiRes::import at line 91 of Time/HiRes.pm, avg 399µs/call
sub export_to_level {
7839µs61.35ms goto &{as_heavy()};
# spent 1.19ms making 3 calls to Exporter::as_heavy, avg 396µs/call # spent 161µs making 3 calls to Exporter::Heavy::heavy_export_to_level, avg 54µs/call
79}
80
81
# spent 15µs (4+11) within Exporter::export_tags which was called: # once (4µs+11µs) by Archive::Zip::BEGIN@11 at line 205 of File/Temp.pm
sub export_tags {
8214µs224µs goto &{as_heavy()};
# spent 14µs making 1 call to Exporter::Heavy::heavy_export_tags # spent 11µs making 1 call to Exporter::as_heavy
83}
84
85
# spent 12µs (3+8) within Exporter::export_ok_tags which was called: # once (3µs+8µs) by Archive::Zip::BEGIN@37 at line 173 of Archive/Zip.pm
sub export_ok_tags {
8614µs232µs goto &{as_heavy()};
# spent 24µs making 1 call to Exporter::Heavy::heavy_export_ok_tags # spent 8µs making 1 call to Exporter::as_heavy
87}
88
89sub require_version {
90 goto &{as_heavy()};
91}
92
9313µs1;
94__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Crypt-Mode-ECB-pm-164-line.html0000644000175000017500000010355214576335353023257 0ustar michamicha Profile of Crypt/Mode/ECB.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Crypt/Mode/ECB.pm
StatementsExecuted 8 statements in 144µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs27µsCrypt::Mode::ECB::::BEGIN@6Crypt::Mode::ECB::BEGIN@6
1119µs11µsCrypt::Mode::ECB::::BEGIN@5Crypt::Mode::ECB::BEGIN@5
1115µs6µsCrypt::Mode::ECB::::BEGIN@9Crypt::Mode::ECB::BEGIN@9
0000s0sCrypt::Mode::ECB::::CLONE_SKIPCrypt::Mode::ECB::CLONE_SKIP
0000s0sCrypt::Mode::ECB::::decryptCrypt::Mode::ECB::decrypt
0000s0sCrypt::Mode::ECB::::encryptCrypt::Mode::ECB::encrypt
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Crypt::Mode::ECB;
2
3### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY!
4
5218µs212µs
# spent 11µs (9+2) within Crypt::Mode::ECB::BEGIN@5 which was called: # once (9µs+2µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 at line 5
use strict;
# spent 11µs making 1 call to Crypt::Mode::ECB::BEGIN@5 # spent 2µs making 1 call to strict::import
6223µs243µs
# spent 27µs (11+16) within Crypt::Mode::ECB::BEGIN@6 which was called: # once (11µs+16µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 at line 6
use warnings;
# spent 27µs making 1 call to Crypt::Mode::ECB::BEGIN@6 # spent 16µs making 1 call to warnings::import
71400nsour $VERSION = '0.080';
8
92100µs26µs
# spent 6µs (5+600ns) within Crypt::Mode::ECB::BEGIN@9 which was called: # once (5µs+600ns) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 at line 9
use Crypt::Cipher;
# spent 6µs making 1 call to Crypt::Mode::ECB::BEGIN@9 # spent 600ns making 1 call to UNIVERSAL::import
10
11sub encrypt {
12 my ($self, $pt) = (shift, shift);
13 local $SIG{__DIE__} = \&CryptX::_croak;
14 $self->start_encrypt(@_)->add($pt) . $self->finish;
15}
16
17sub decrypt {
18 my ($self, $ct) = (shift, shift);
19 local $SIG{__DIE__} = \&CryptX::_croak;
20 $self->start_decrypt(@_)->add($ct) . $self->finish;
21}
22
23sub CLONE_SKIP { 1 } # prevent cloning
24
2512µs1;
26
27=pod
28
29=head1 NAME
30
31Crypt::Mode::ECB - Block cipher mode ECB [Electronic codebook]
32
33=head1 SYNOPSIS
34
35 use Crypt::Mode::ECB;
36 my $m = Crypt::Mode::ECB->new('AES');
37
38 #(en|de)crypt at once
39 my $ciphertext = $m->encrypt($plaintext, $key);
40 my $plaintext = $m->decrypt($ciphertext, $key);
41
42 #encrypt more chunks
43 $m->start_encrypt($key);
44 my $ciphertext = $m->add('some data');
45 $ciphertext .= $m->add('more data');
46 $ciphertext .= $m->finish;
47
48 #decrypt more chunks
49 $m->start_decrypt($key);
50 my $plaintext = $m->add($some_ciphertext);
51 $plaintext .= $m->add($more_ciphertext);
52 $plaintext .= $m->finish;
53
54=head1 DESCRIPTION
55
56This module implements ECB cipher mode. B<NOTE:> it works only with ciphers from L<CryptX> (Crypt::Cipher::NNNN).
57B<BEWARE: ECB is inherently insecure>, if you are not sure go for L<Crypt::Mode::CBC>!
58
59=head1 METHODS
60
61=head2 new
62
63 my $m = Crypt::Mode::ECB->new($name);
64 #or
65 my $m = Crypt::Mode::ECB->new($name, $padding);
66 #or
67 my $m = Crypt::Mode::ECB->new($name, $padding, $cipher_rounds);
68
69 # $name ....... one of 'AES', 'Anubis', 'Blowfish', 'CAST5', 'Camellia', 'DES', 'DES_EDE',
70 # 'KASUMI', 'Khazad', 'MULTI2', 'Noekeon', 'RC2', 'RC5', 'RC6',
71 # 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64',
72 # 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent'
73 # simply any <NAME> for which there exists Crypt::Cipher::<NAME>
74 # $padding .... 0 no padding (plaintext size has to be multiple of block length)
75 # 1 PKCS5 padding, Crypt::CBC's "standard" - DEFAULT
76 # 2 Crypt::CBC's "oneandzeroes"
77 # 3 ANSI X.923 padding
78 # 4 zero padding
79 # 5 zero padding (+a block of zeros if the output length is divisible by the blocksize)
80 # $cipher_rounds ... optional num of rounds for given cipher
81
82=head2 encrypt
83
84 my $ciphertext = $m->encrypt($plaintext, $key);
85
86=head2 decrypt
87
88 my $plaintext = $m->decrypt($ciphertext, $key);
89
90=head2 start_encrypt
91
92 $m->start_encrypt($key);
93
94=head2 start_decrypt
95
96 $m->start_decrypt($key);
97
98=head2 add
99
100 # in encrypt mode
101 my $plaintext = $m->add($ciphertext);
102
103 # in decrypt mode
104 my $ciphertext = $m->add($plaintext);
105
106=head2 finish
107
108 #encrypt more chunks
109 $m->start_encrypt($key);
110 my $ciphertext = '';
111 $ciphertext .= $m->add('some data');
112 $ciphertext .= $m->add('more data');
113 $ciphertext .= $m->finish;
114
115 #decrypt more chunks
116 $m->start_decrypt($key);
117 my $plaintext = '';
118 $plaintext .= $m->add($some_ciphertext);
119 $plaintext .= $m->add($more_ciphertext);
120 $plaintext .= $m->finish;
121
122=head1 SEE ALSO
123
124=over
125
126=item * L<CryptX|CryptX>, L<Crypt::Cipher>
127
128=item * L<Crypt::Cipher::AES>, L<Crypt::Cipher::Blowfish>, ...
129
130=item * L<https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_.28ECB.29>
131
132=back
133
134=cut










Spreadsheet-ParseXLSX-0.35/nytprof/integer-pm-111-line.html0000644000175000017500000006642214576335353022336 0ustar michamicha Profile of integer.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/integer.pm
StatementsExecuted 7 statements in 17µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3334µs4µsinteger::::importinteger::import
1112µs2µsinteger::::unimportinteger::unimport
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package integer;
2
31300nsour $VERSION = '1.01';
4
5=head1 NAME
6
7integer - Perl pragma to use integer arithmetic instead of floating point
8
9=head1 SYNOPSIS
10
11 use integer;
12 $x = 10/3;
13 # $x is now 3, not 3.33333333333333333
14
15=head1 DESCRIPTION
16
17This tells the compiler to use integer operations from here to the end
18of the enclosing BLOCK. On many machines, this doesn't matter a great
19deal for most computations, but on those without floating point
20hardware, it can make a big difference in performance.
21
22Note that this only affects how most of the arithmetic and relational
23B<operators> handle their operands and results, and B<not> how all
24numbers everywhere are treated. Specifically, C<use integer;> has the
25effect that before computing the results of the arithmetic operators
26(+, -, *, /, %, +=, -=, *=, /=, %=, and unary minus), the comparison
27operators (<, <=, >, >=, ==, !=, <=>), and the bitwise operators (|, &,
28^, <<, >>, |=, &=, ^=, <<=, >>=), the operands have their fractional
29portions truncated (or floored), and the result will have its
30fractional portion truncated as well. In addition, the range of
31operands and results is restricted to that of familiar two's complement
32integers, i.e., -(2**31) .. (2**31-1) on 32-bit architectures, and
33-(2**63) .. (2**63-1) on 64-bit architectures. For example, this code
34
35 use integer;
36 $x = 5.8;
37 $y = 2.5;
38 $z = 2.7;
39 $a = 2**31 - 1; # Largest positive integer on 32-bit machines
40 $, = ", ";
41 print $x, -$x, $x+$y, $x-$y, $x/$y, $x*$y, $y==$z, $a, $a+1;
42
43will print: 5.8, -5, 7, 3, 2, 10, 1, 2147483647, -2147483648
44
45Note that $x is still printed as having its true non-integer value of
465.8 since it wasn't operated on. And note too the wrap-around from the
47largest positive integer to the largest negative one. Also, arguments
48passed to functions and the values returned by them are B<not> affected
49by C<use integer;>. E.g.,
50
51 srand(1.5);
52 $, = ", ";
53 print sin(.5), cos(.5), atan2(1,2), sqrt(2), rand(10);
54
55will give the same result with or without C<use integer;> The power
56operator C<**> is also not affected, so that 2 ** .5 is always the
57square root of 2. Now, it so happens that the pre- and post- increment
58and decrement operators, ++ and --, are not affected by C<use integer;>
59either. Some may rightly consider this to be a bug -- but at least it's
60a long-standing one.
61
62Finally, C<use integer;> also has an additional affect on the bitwise
63operators. Normally, the operands and results are treated as
64B<unsigned> integers, but with C<use integer;> the operands and results
65are B<signed>. This means, among other things, that ~0 is -1, and -2 &
66-5 is -6.
67
68Internally, native integer arithmetic (as provided by your C compiler)
69is used. This means that Perl's own semantics for arithmetic
70operations may not be preserved. One common source of trouble is the
71modulus of negative numbers, which Perl does one way, but your hardware
72may do another.
73
74 % perl -le 'print (4 % -3)'
75 -2
76 % perl -Minteger -le 'print (4 % -3)'
77 1
78
79See L<perlmodlib/"Pragmatic Modules">, L<perlop/"Integer Arithmetic">
80
81=cut
82
831100ns$integer::hint_bits = 0x1;
84
85
# spent 4µs within integer::import which was called 3 times, avg 1µs/call: # once (2µs+0s) by Archive::Zip::Member::BEGIN@1517 at line 1517 of Archive/Zip/Member.pm # once (2µs+0s) by Digest::SHA::BEGIN@10 at line 10 of Digest/SHA.pm # once (700ns+0s) by Digest::Perl::MD5::BEGIN@3 at line 3 of Digest/Perl/MD5.pm
sub import {
8639µs $^H |= $integer::hint_bits;
87}
88
89
# spent 2µs within integer::unimport which was called: # once (2µs+0s) by Digest::SHA::BEGIN@202 at line 202 of Digest/SHA.pm
sub unimport {
9015µs $^H &= ~$integer::hint_bits;
91}
92
9313µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Tie-Hash-pm-12-line.html0000644000175000017500000016257514576335353022231 0ustar michamicha Profile of Tie/Hash.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Tie/Hash.pm
StatementsExecuted 7 statements in 563µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.89ms3.53msTie::Hash::::BEGIN@190 Tie::Hash::BEGIN@190
111121µs141µsTie::Hash::::BEGIN@191 Tie::Hash::BEGIN@191
1112µs2µsTie::StdHash::::TIEHASH Tie::StdHash::TIEHASH
0000s0sTie::ExtraHash::::CLEARTie::ExtraHash::CLEAR
0000s0sTie::ExtraHash::::DELETETie::ExtraHash::DELETE
0000s0sTie::ExtraHash::::EXISTSTie::ExtraHash::EXISTS
0000s0sTie::ExtraHash::::FETCHTie::ExtraHash::FETCH
0000s0sTie::ExtraHash::::FIRSTKEYTie::ExtraHash::FIRSTKEY
0000s0sTie::ExtraHash::::NEXTKEYTie::ExtraHash::NEXTKEY
0000s0sTie::ExtraHash::::SCALARTie::ExtraHash::SCALAR
0000s0sTie::ExtraHash::::STORETie::ExtraHash::STORE
0000s0sTie::ExtraHash::::TIEHASHTie::ExtraHash::TIEHASH
0000s0sTie::Hash::::CLEAR Tie::Hash::CLEAR
0000s0sTie::Hash::::EXISTS Tie::Hash::EXISTS
0000s0sTie::Hash::::TIEHASH Tie::Hash::TIEHASH
0000s0sTie::Hash::::new Tie::Hash::new
0000s0sTie::StdHash::::CLEAR Tie::StdHash::CLEAR
0000s0sTie::StdHash::::DELETE Tie::StdHash::DELETE
0000s0sTie::StdHash::::EXISTS Tie::StdHash::EXISTS
0000s0sTie::StdHash::::FETCH Tie::StdHash::FETCH
0000s0sTie::StdHash::::FIRSTKEY Tie::StdHash::FIRSTKEY
0000s0sTie::StdHash::::NEXTKEY Tie::StdHash::NEXTKEY
0000s0sTie::StdHash::::SCALAR Tie::StdHash::SCALAR
0000s0sTie::StdHash::::STORE Tie::StdHash::STORE
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Tie::Hash;
2
31400nsour $VERSION = '1.06';
4
5=head1 NAME
6
7Tie::Hash, Tie::StdHash, Tie::ExtraHash - base class definitions for tied hashes
8
9=head1 SYNOPSIS
10
11 package NewHash;
12 require Tie::Hash;
13
14 @ISA = qw(Tie::Hash);
15
16 sub DELETE { ... } # Provides needed method
17 sub CLEAR { ... } # Overrides inherited method
18
19
20 package NewStdHash;
21 require Tie::Hash;
22
23 @ISA = qw(Tie::StdHash);
24
25 # All methods provided by default, define
26 # only those needing overrides
27 # Accessors access the storage in %{$_[0]};
28 # TIEHASH should return a reference to the actual storage
29 sub DELETE { ... }
30
31 package NewExtraHash;
32 require Tie::Hash;
33
34 @ISA = qw(Tie::ExtraHash);
35
36 # All methods provided by default, define
37 # only those needing overrides
38 # Accessors access the storage in %{$_[0][0]};
39 # TIEHASH should return an array reference with the first element
40 # being the reference to the actual storage
41 sub DELETE {
42 $_[0][1]->('del', $_[0][0], $_[1]); # Call the report writer
43 delete $_[0][0]->{$_[1]}; # $_[0]->SUPER::DELETE($_[1])
44 }
45
46
47 package main;
48
49 tie %new_hash, 'NewHash';
50 tie %new_std_hash, 'NewStdHash';
51 tie %new_extra_hash, 'NewExtraHash',
52 sub {warn "Doing \U$_[1]\E of $_[2].\n"};
53
54=head1 DESCRIPTION
55
56This module provides some skeletal methods for hash-tying classes. See
57L<perltie> for a list of the functions required in order to tie a hash
58to a package. The basic B<Tie::Hash> package provides a C<new> method, as well
59as methods C<TIEHASH>, C<EXISTS> and C<CLEAR>. The B<Tie::StdHash> and
60B<Tie::ExtraHash> packages
61provide most methods for hashes described in L<perltie> (the exceptions
62are C<UNTIE> and C<DESTROY>). They cause tied hashes to behave exactly like standard hashes,
63and allow for selective overwriting of methods. B<Tie::Hash> has legacy support for the
64C<new> method: it is used if C<TIEHASH> is not defined
65in the case a class forgets to include a C<TIEHASH> method.
66
67For developers wishing to write their own tied hashes, the required methods
68are briefly defined below. See the L<perltie> section for more detailed
69descriptive, as well as example code:
70
71=over 4
72
73=item TIEHASH classname, LIST
74
75The method invoked by the command C<tie %hash, classname>. Associates a new
76hash instance with the specified class. C<LIST> would represent additional
77arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
78complete the association.
79
80=item STORE this, key, value
81
82Store datum I<value> into I<key> for the tied hash I<this>.
83
84=item FETCH this, key
85
86Retrieve the datum in I<key> for the tied hash I<this>.
87
88=item FIRSTKEY this
89
90Return the first key in the hash.
91
92=item NEXTKEY this, lastkey
93
94Return the next key in the hash.
95
96=item EXISTS this, key
97
98Verify that I<key> exists with the tied hash I<this>.
99
100The B<Tie::Hash> implementation is a stub that simply croaks.
101
102=item DELETE this, key
103
104Delete the key I<key> from the tied hash I<this>.
105
106=item CLEAR this
107
108Clear all values from the tied hash I<this>.
109
110=item SCALAR this
111
112Returns what evaluating the hash in scalar context yields.
113
114B<Tie::Hash> does not implement this method (but B<Tie::StdHash>
115and B<Tie::ExtraHash> do).
116
117=back
118
119=head1 Inheriting from B<Tie::StdHash>
120
121The accessor methods assume that the actual storage for the data in the tied
122hash is in the hash referenced by C<tied(%tiedhash)>. Thus overwritten
123C<TIEHASH> method should return a hash reference, and the remaining methods
124should operate on the hash referenced by the first argument:
125
126 package ReportHash;
127 our @ISA = 'Tie::StdHash';
128
129 sub TIEHASH {
130 my $storage = bless {}, shift;
131 warn "New ReportHash created, stored in $storage.\n";
132 $storage
133 }
134 sub STORE {
135 warn "Storing data with key $_[1] at $_[0].\n";
136 $_[0]{$_[1]} = $_[2]
137 }
138
139
140=head1 Inheriting from B<Tie::ExtraHash>
141
142The accessor methods assume that the actual storage for the data in the tied
143hash is in the hash referenced by C<(tied(%tiedhash))-E<gt>[0]>. Thus overwritten
144C<TIEHASH> method should return an array reference with the first
145element being a hash reference, and the remaining methods should operate on the
146hash C<< %{ $_[0]->[0] } >>:
147
148 package ReportHash;
149 our @ISA = 'Tie::ExtraHash';
150
151 sub TIEHASH {
152 my $class = shift;
153 my $storage = bless [{}, @_], $class;
154 warn "New ReportHash created, stored in $storage.\n";
155 $storage;
156 }
157 sub STORE {
158 warn "Storing data with key $_[1] at $_[0].\n";
159 $_[0][0]{$_[1]} = $_[2]
160 }
161
162The default C<TIEHASH> method stores "extra" arguments to tie() starting
163from offset 1 in the array referenced by C<tied(%tiedhash)>; this is the
164same storage algorithm as in TIEHASH subroutine above. Hence, a typical
165package inheriting from B<Tie::ExtraHash> does not need to overwrite this
166method.
167
168=head1 C<SCALAR>, C<UNTIE> and C<DESTROY>
169
170The methods C<UNTIE> and C<DESTROY> are not defined in B<Tie::Hash>,
171B<Tie::StdHash>, or B<Tie::ExtraHash>. Tied hashes do not require
172presence of these methods, but if defined, the methods will be called in
173proper time, see L<perltie>.
174
175C<SCALAR> is only defined in B<Tie::StdHash> and B<Tie::ExtraHash>.
176
177If needed, these methods should be defined by the package inheriting from
178B<Tie::Hash>, B<Tie::StdHash>, or B<Tie::ExtraHash>. See L<perltie/"SCALAR">
179to find out what happens when C<SCALAR> does not exist.
180
181=head1 MORE INFORMATION
182
183The packages relating to various DBM-related implementations (F<DB_File>,
184F<NDBM_File>, etc.) show examples of general tied hashes, as does the
185L<Config> module. While these do not utilize B<Tie::Hash>, they serve as
186good working examples.
187
188=cut
189
190290µs23.55ms
# spent 3.53ms (2.89+637µs) within Tie::Hash::BEGIN@190 which was called: # once (2.89ms+637µs) by Test2::Util::BEGIN@7 at line 190
use Carp;
# spent 3.53ms making 1 call to Tie::Hash::BEGIN@190 # spent 24µs making 1 call to Exporter::import
1912466µs2161µs
# spent 141µs (121+20) within Tie::Hash::BEGIN@191 which was called: # once (121µs+20µs) by Test2::Util::BEGIN@7 at line 191
use warnings::register;
# spent 141µs making 1 call to Tie::Hash::BEGIN@191 # spent 20µs making 1 call to warnings::register::import
192
193sub new {
194 my $pkg = shift;
195 $pkg->TIEHASH(@_);
196}
197
198# Legacy support for new()
199
200sub TIEHASH {
201 my $pkg = shift;
202 my $pkg_new = $pkg -> can ('new');
203
204 if ($pkg_new and $pkg ne __PACKAGE__) {
205 my $my_new = __PACKAGE__ -> can ('new');
206 if ($pkg_new == $my_new) {
207 #
208 # Prevent recursion
209 #
210 croak "$pkg must define either a TIEHASH() or a new() method";
211 }
212
213 warnings::warnif ("WARNING: calling ${pkg}->new since " .
214 "${pkg}->TIEHASH is missing");
215 $pkg -> new (@_);
216 }
217 else {
218 croak "$pkg doesn't define a TIEHASH method";
219 }
220}
221
222sub EXISTS {
223 my $pkg = ref $_[0];
224 croak "$pkg doesn't define an EXISTS method";
225}
226
227sub CLEAR {
228 my $self = shift;
229 my $key = $self->FIRSTKEY(@_);
230 my @keys;
231
232 while (defined $key) {
233 push @keys, $key;
234 $key = $self->NEXTKEY(@_, $key);
235 }
236 foreach $key (@keys) {
237 $self->DELETE(@_, $key);
238 }
239}
240
241# The Tie::StdHash package implements standard perl hash behaviour.
242# It exists to act as a base class for classes which only wish to
243# alter some parts of their behaviour.
244
245package Tie::StdHash;
246# @ISA = qw(Tie::Hash); # would inherit new() only
247
24814µs
# spent 2µs within Tie::StdHash::TIEHASH which was called: # once (2µs+0s) by Test2::Util::BEGIN@7 at line 564 of POSIX.pm
sub TIEHASH { bless {}, $_[0] }
249sub STORE { $_[0]->{$_[1]} = $_[2] }
250sub FETCH { $_[0]->{$_[1]} }
251sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
252sub NEXTKEY { each %{$_[0]} }
253sub EXISTS { exists $_[0]->{$_[1]} }
254sub DELETE { delete $_[0]->{$_[1]} }
255sub CLEAR { %{$_[0]} = () }
256sub SCALAR { scalar %{$_[0]} }
257
258package Tie::ExtraHash;
259
260sub TIEHASH { my $p = shift; bless [{}, @_], $p }
261sub STORE { $_[0][0]{$_[1]} = $_[2] }
262sub FETCH { $_[0][0]{$_[1]} }
263sub FIRSTKEY { my $a = scalar keys %{$_[0][0]}; each %{$_[0][0]} }
264sub NEXTKEY { each %{$_[0][0]} }
265sub EXISTS { exists $_[0][0]->{$_[1]} }
266sub DELETE { delete $_[0][0]->{$_[1]} }
267sub CLEAR { %{$_[0][0]} = () }
268sub SCALAR { scalar %{$_[0][0]} }
269
27012µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 53)[JSON-PP-pm-692]-161-line.html0000644000175000017500000003205514576335353023776 0ustar michamicha Profile of (eval 53)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 53)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 400ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11400ns 1111111111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Cwd-pm-74-line.html0000644000175000017500000033630114576335353021342 0ustar michamicha Profile of Cwd.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Cwd.pm
StatementsExecuted 45 statements in 2.22ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs10µsCwd::::BEGIN@2Cwd::BEGIN@2
1117µs20µsCwd::::BEGIN@3Cwd::BEGIN@3
1117µs12µsCwd::::BEGIN@644Cwd::BEGIN@644
1112µs2µsCwd::::BEGIN@41Cwd::BEGIN@41
0000s0sCwd::::__ANON__[:222]Cwd::__ANON__[:222]
0000s0sCwd::::__ANON__[:231]Cwd::__ANON__[:231]
0000s0sCwd::::_backtick_pwdCwd::_backtick_pwd
0000s0sCwd::::_carpCwd::_carp
0000s0sCwd::::_croakCwd::_croak
0000s0sCwd::::_dos_cwdCwd::_dos_cwd
0000s0sCwd::::_os2_cwdCwd::_os2_cwd
0000s0sCwd::::_perl_abs_pathCwd::_perl_abs_path
0000s0sCwd::::_perl_getcwdCwd::_perl_getcwd
0000s0sCwd::::_qnx_abs_pathCwd::_qnx_abs_path
0000s0sCwd::::_qnx_cwdCwd::_qnx_cwd
0000s0sCwd::::_vms_abs_pathCwd::_vms_abs_path
0000s0sCwd::::_vms_cwdCwd::_vms_cwd
0000s0sCwd::::_vms_efsCwd::_vms_efs
0000s0sCwd::::_vms_unix_rptCwd::_vms_unix_rpt
0000s0sCwd::::_win32_cwdCwd::_win32_cwd
0000s0sCwd::::_win32_cwd_simpleCwd::_win32_cwd_simple
0000s0sCwd::::chdirCwd::chdir
0000s0sCwd::::chdir_initCwd::chdir_init
0000s0sCwd::::fast_abs_pathCwd::fast_abs_path
0000s0sCwd::::fastcwd_Cwd::fastcwd_
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Cwd;
2221µs211µs
# spent 10µs (8+1) within Cwd::BEGIN@2 which was called: # once (8µs+1µs) by Archive::Zip::BEGIN@6 at line 2
use strict;
# spent 10µs making 1 call to Cwd::BEGIN@2 # spent 1µs making 1 call to strict::import
32146µs233µs
# spent 20µs (7+13) within Cwd::BEGIN@3 which was called: # once (7µs+13µs) by Archive::Zip::BEGIN@6 at line 3
use Exporter;
# spent 20µs making 1 call to Cwd::BEGIN@3 # spent 13µs making 1 call to Exporter::import
4
5
61300nsour $VERSION = '3.89';
71200nsmy $xs_version = $VERSION;
81800ns$VERSION =~ tr/_//d;
9
1016µsour @ISA = qw/ Exporter /;
111600nsour @EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
121700nspush @EXPORT, qw(getdcwd) if $^O eq 'MSWin32';
131400nsour @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
14
15# sys_cwd may keep the builtin command
16
17# All the functionality of this module may provided by builtins,
18# there is no sense to process the rest of the file.
19# The best choice may be to have this in BEGIN, but how to return from BEGIN?
20
211200nsif ($^O eq 'os2') {
22 local $^W = 0;
23
24 *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd;
25 *getcwd = \&cwd;
26 *fastgetcwd = \&cwd;
27 *fastcwd = \&cwd;
28
29 *fast_abs_path = \&sys_abspath if defined &sys_abspath;
30 *abs_path = \&fast_abs_path;
31 *realpath = \&fast_abs_path;
32 *fast_realpath = \&fast_abs_path;
33
34 return 1;
35}
36
37# Need to look up the feature settings on VMS. The preferred way is to use the
38# VMS::Feature module, but that may not be available to dual life modules.
39
401100nsmy $use_vms_feature;
41
# spent 2µs within Cwd::BEGIN@41 which was called: # once (2µs+0s) by Archive::Zip::BEGIN@6 at line 50
BEGIN {
4214µs if ($^O eq 'VMS') {
43 if (eval { local $SIG{__DIE__};
44 local @INC = @INC;
45 pop @INC if $INC[-1] eq '.';
46 require VMS::Feature; }) {
47 $use_vms_feature = 1;
48 }
49 }
5011.76ms12µs}
# spent 2µs making 1 call to Cwd::BEGIN@41
51
52# Need to look up the UNIX report mode. This may become a dynamic mode
53# in the future.
54sub _vms_unix_rpt {
55 my $unix_rpt;
56 if ($use_vms_feature) {
57 $unix_rpt = VMS::Feature::current("filename_unix_report");
58 } else {
59 my $env_unix_rpt = $ENV{'DECC$FILENAME_UNIX_REPORT'} || '';
60 $unix_rpt = $env_unix_rpt =~ /^[ET1]/i;
61 }
62 return $unix_rpt;
63}
64
65# Need to look up the EFS character set mode. This may become a dynamic
66# mode in the future.
67sub _vms_efs {
68 my $efs;
69 if ($use_vms_feature) {
70 $efs = VMS::Feature::current("efs_charset");
71 } else {
72 my $env_efs = $ENV{'DECC$EFS_CHARSET'} || '';
73 $efs = $env_efs =~ /^[ET1]/i;
74 }
75 return $efs;
76}
77
78
79# If loading the XS stuff doesn't work, we can fall back to pure perl
8012µsif(! defined &getcwd && defined &DynaLoader::boot_DynaLoader) { # skipped on miniperl
811400ns require XSLoader;
821119µs1115µs XSLoader::load( __PACKAGE__, $xs_version);
# spent 115µs making 1 call to XSLoader::load
83}
84
85# Big nasty table of function aliases
8616µsmy %METHOD_MAP =
87 (
88 VMS =>
89 {
90 cwd => '_vms_cwd',
91 getcwd => '_vms_cwd',
92 fastcwd => '_vms_cwd',
93 fastgetcwd => '_vms_cwd',
94 abs_path => '_vms_abs_path',
95 fast_abs_path => '_vms_abs_path',
96 },
97
98 MSWin32 =>
99 {
100 # We assume that &_NT_cwd is defined as an XSUB or in the core.
101 cwd => '_NT_cwd',
102 getcwd => '_NT_cwd',
103 fastcwd => '_NT_cwd',
104 fastgetcwd => '_NT_cwd',
105 abs_path => 'fast_abs_path',
106 realpath => 'fast_abs_path',
107 },
108
109 dos =>
110 {
111 cwd => '_dos_cwd',
112 getcwd => '_dos_cwd',
113 fastgetcwd => '_dos_cwd',
114 fastcwd => '_dos_cwd',
115 abs_path => 'fast_abs_path',
116 },
117
118 # QNX4. QNX6 has a $os of 'nto'.
119 qnx =>
120 {
121 cwd => '_qnx_cwd',
122 getcwd => '_qnx_cwd',
123 fastgetcwd => '_qnx_cwd',
124 fastcwd => '_qnx_cwd',
125 abs_path => '_qnx_abs_path',
126 fast_abs_path => '_qnx_abs_path',
127 },
128
129 cygwin =>
130 {
131 getcwd => 'cwd',
132 fastgetcwd => 'cwd',
133 fastcwd => 'cwd',
134 abs_path => 'fast_abs_path',
135 realpath => 'fast_abs_path',
136 },
137
138 amigaos =>
139 {
140 getcwd => '_backtick_pwd',
141 fastgetcwd => '_backtick_pwd',
142 fastcwd => '_backtick_pwd',
143 abs_path => 'fast_abs_path',
144 }
145 );
146
1471600ns$METHOD_MAP{NT} = $METHOD_MAP{MSWin32};
148
149
150# Find the pwd command in the expected locations. We assume these
151# are safe. This prevents _backtick_pwd() consulting $ENV{PATH}
152# so everything works under taint mode.
1531100nsmy $pwd_cmd;
15411µsif($^O ne 'MSWin32') {
1551300ns foreach my $try ('/bin/pwd',
156 '/usr/bin/pwd',
157 '/QOpenSys/bin/pwd', # OS/400 PASE.
158 ) {
159112µs18µs if( -x $try ) {
# spent 8µs making 1 call to CORE::fteexec
1601200ns $pwd_cmd = $try;
1611700ns last;
162 }
163 }
164}
165
166# Android has a built-in pwd. Using $pwd_cmd will DTRT if
167# this perl was compiled with -Dd_useshellcmds, which is the
168# default for Android, but the block below is needed for the
169# miniperl running on the host when cross-compiling, and
170# potentially for native builds with -Ud_useshellcmds.
17112µs1400nsif ($^O =~ /android/) {
# spent 400ns making 1 call to CORE::match
172 # If targetsh is executable, then we're either a full
173 # perl, or a miniperl for a native build.
174 if ( exists($Config::Config{targetsh}) && -x $Config::Config{targetsh}) {
175 $pwd_cmd = "$Config::Config{targetsh} -c pwd"
176 }
177 else {
178 my $sh = $Config::Config{sh} || (-x '/system/bin/sh' ? '/system/bin/sh' : 'sh');
179 $pwd_cmd = "$sh -c pwd"
180 }
181}
182
1831300nsmy $found_pwd_cmd = defined($pwd_cmd);
184
185# Lazy-load Carp
186sub _carp { require Carp; Carp::carp(@_) }
187sub _croak { require Carp; Carp::croak(@_) }
188
189# The 'natural and safe form' for UNIX (pwd may be setuid root)
190sub _backtick_pwd {
191
192 # Localize %ENV entries in a way that won't create new hash keys.
193 # Under AmigaOS we don't want to localize as it stops perl from
194 # finding 'sh' in the PATH.
195 my @localize = grep exists $ENV{$_}, qw(IFS CDPATH ENV BASH_ENV) if $^O ne "amigaos";
196 local @ENV{@localize} if @localize;
197 # empty PATH is the same as "." on *nix, so localize it to /something/
198 # we won't *use* the path as code above turns $pwd_cmd into a specific
199 # executable, but it will blow up anyway under taint. We could set it to
200 # anything absolute. Perhaps "/" would be better.
201 local $ENV{PATH}= "/usr/bin"
202 if $^O ne "amigaos";
203
204 my $cwd = `$pwd_cmd`;
205 # Belt-and-suspenders in case someone said "undef $/".
206 local $/ = "\n";
207 # `pwd` may fail e.g. if the disk is full
208 chomp($cwd) if defined $cwd;
209 $cwd;
210}
211
212# Since some ports may predefine cwd internally (e.g., NT)
213# we take care not to override an existing definition for cwd().
214
21512µsunless ($METHOD_MAP{$^O}{cwd} or defined &cwd) {
216 if( $found_pwd_cmd )
217 {
218 *cwd = \&_backtick_pwd;
219 }
220 else {
221 # getcwd() might have an empty prototype
222 *cwd = sub { getcwd(); };
223 }
224}
225
2261300nsif ($^O eq 'cygwin') {
227 # We need to make sure cwd() is called with no args, because it's
228 # got an arg-less prototype and will die if args are present.
229 local $^W = 0;
230 my $orig_cwd = \&cwd;
231 *cwd = sub { &$orig_cwd() }
232}
233
234
235# set a reasonable (and very safe) default for fastgetcwd, in case it
236# isn't redefined later (20001212 rspier)
2371200ns*fastgetcwd = \&cwd;
238
239# A non-XS version of getcwd() - also used to bootstrap the perl build
240# process, when miniperl is running and no XS loading happens.
241sub _perl_getcwd
242{
243 abs_path('.');
244}
245
246# By John Bazik
247#
248# Usage: $cwd = &fastcwd;
249#
250# This is a faster version of getcwd. It's also more dangerous because
251# you might chdir out of a directory that you can't chdir back into.
252
253sub fastcwd_ {
254 my($odev, $oino, $cdev, $cino, $tdev, $tino);
255 my(@path, $path);
256 local(*DIR);
257
258 my($orig_cdev, $orig_cino) = stat('.');
259 ($cdev, $cino) = ($orig_cdev, $orig_cino);
260 for (;;) {
261 my $direntry;
262 ($odev, $oino) = ($cdev, $cino);
263 CORE::chdir('..') || return undef;
264 ($cdev, $cino) = stat('.');
265 last if $odev == $cdev && $oino eq $cino;
266 opendir(DIR, '.') || return undef;
267 for (;;) {
268 $direntry = readdir(DIR);
269 last unless defined $direntry;
270 next if $direntry eq '.';
271 next if $direntry eq '..';
272
273 ($tdev, $tino) = lstat($direntry);
274 last unless $tdev != $odev || $tino ne $oino;
275 }
276 closedir(DIR);
277 return undef unless defined $direntry; # should never happen
278 unshift(@path, $direntry);
279 }
280 $path = '/' . join('/', @path);
281 if ($^O eq 'apollo') { $path = "/".$path; }
282 # At this point $path may be tainted (if tainting) and chdir would fail.
283 # Untaint it then check that we landed where we started.
284 $path =~ /^(.*)\z/s # untaint
285 && CORE::chdir($1) or return undef;
286 ($cdev, $cino) = stat('.');
287 die "Unstable directory path, current directory changed unexpectedly"
288 if $cdev != $orig_cdev || $cino ne $orig_cino;
289 $path;
290}
2911200nsif (not defined &fastcwd) { *fastcwd = \&fastcwd_ }
292
293
294# Keeps track of current working directory in PWD environment var
295# Usage:
296# use Cwd 'chdir';
297# chdir $newdir;
298
2991200nsmy $chdir_init = 0;
300
301sub chdir_init {
302 if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') {
303 my($dd,$di) = stat('.');
304 my($pd,$pi) = stat($ENV{'PWD'});
305 if (!defined $dd or !defined $pd or $di ne $pi or $dd != $pd) {
306 $ENV{'PWD'} = cwd();
307 }
308 }
309 else {
310 my $wd = cwd();
311 $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32';
312 $ENV{'PWD'} = $wd;
313 }
314 # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar)
315 if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) {
316 my($pd,$pi) = stat($2);
317 my($dd,$di) = stat($1);
318 if (defined $pd and defined $dd and $di ne $pi and $dd == $pd) {
319 $ENV{'PWD'}="$2$3";
320 }
321 }
322 $chdir_init = 1;
323}
324
325sub chdir {
326 my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir)
327 if ($^O eq "cygwin") {
328 $newdir =~ s|\A///+|//|;
329 $newdir =~ s|(?<=[^/])//+|/|g;
330 }
331 elsif ($^O ne 'MSWin32') {
332 $newdir =~ s|///*|/|g;
333 }
334 chdir_init() unless $chdir_init;
335 my $newpwd;
336 if ($^O eq 'MSWin32') {
337 # get the full path name *before* the chdir()
338 $newpwd = Win32::GetFullPathName($newdir);
339 }
340
341 return 0 unless CORE::chdir $newdir;
342
343 if ($^O eq 'VMS') {
344 return $ENV{'PWD'} = $ENV{'DEFAULT'}
345 }
346 elsif ($^O eq 'MSWin32') {
347 $ENV{'PWD'} = $newpwd;
348 return 1;
349 }
350
351 if (ref $newdir eq 'GLOB') { # in case a file/dir handle is passed in
352 $ENV{'PWD'} = cwd();
353 } elsif ($newdir =~ m#^/#s) {
354 $ENV{'PWD'} = $newdir;
355 } else {
356 my @curdir = split(m#/#,$ENV{'PWD'});
357 @curdir = ('') unless @curdir;
358 my $component;
359 foreach $component (split(m#/#, $newdir)) {
360 next if $component eq '.';
361 pop(@curdir),next if $component eq '..';
362 push(@curdir,$component);
363 }
364 $ENV{'PWD'} = join('/',@curdir) || '/';
365 }
366 1;
367}
368
369
370sub _perl_abs_path
371{
372 my $start = @_ ? shift : '.';
373 my($dotdots, $cwd, @pst, @cst, $dir, @tst);
374
375 unless (@cst = stat( $start ))
376 {
377 return undef;
378 }
379
380 unless (-d _) {
381 # Make sure we can be invoked on plain files, not just directories.
382 # NOTE that this routine assumes that '/' is the only directory separator.
383
384 my ($dir, $file) = $start =~ m{^(.*)/(.+)$}
385 or return cwd() . '/' . $start;
386
387 # Can't use "-l _" here, because the previous stat was a stat(), not an lstat().
388 if (-l $start) {
389 my $link_target = readlink($start);
390 die "Can't resolve link $start: $!" unless defined $link_target;
391
392 require File::Spec;
393 $link_target = $dir . '/' . $link_target
394 unless File::Spec->file_name_is_absolute($link_target);
395
396 return abs_path($link_target);
397 }
398
399 return $dir ? abs_path($dir) . "/$file" : "/$file";
400 }
401
402 $cwd = '';
403 $dotdots = $start;
404 do
405 {
406 $dotdots .= '/..';
407 @pst = @cst;
408 local *PARENT;
409 unless (opendir(PARENT, $dotdots))
410 {
411 return undef;
412 }
413 unless (@cst = stat($dotdots))
414 {
415 my $e = $!;
416 closedir(PARENT);
417 $! = $e;
418 return undef;
419 }
420 if ($pst[0] == $cst[0] && $pst[1] eq $cst[1])
421 {
422 $dir = undef;
423 }
424 else
425 {
426 do
427 {
428 unless (defined ($dir = readdir(PARENT)))
429 {
430 closedir(PARENT);
431 require Errno;
432 $! = Errno::ENOENT();
433 return undef;
434 }
435 $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir"))
436 }
437 while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] ||
438 $tst[1] ne $pst[1]);
439 }
440 $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ;
441 closedir(PARENT);
442 } while (defined $dir);
443 chop($cwd) unless $cwd eq '/'; # drop the trailing /
444 $cwd;
445}
446
447
4481100nsmy $Curdir;
449sub fast_abs_path {
450 local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage
451 my $cwd = getcwd();
452 defined $cwd or return undef;
453 require File::Spec;
454 my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir);
455
456 # Detaint else we'll explode in taint mode. This is safe because
457 # we're not doing anything dangerous with it.
458 ($path) = $path =~ /(.*)/s;
459 ($cwd) = $cwd =~ /(.*)/s;
460
461 unless (-e $path) {
462 require Errno;
463 $! = Errno::ENOENT();
464 return undef;
465 }
466
467 unless (-d _) {
468 # Make sure we can be invoked on plain files, not just directories.
469
470 my ($vol, $dir, $file) = File::Spec->splitpath($path);
471 return File::Spec->catfile($cwd, $path) unless length $dir;
472
473 if (-l $path) {
474 my $link_target = readlink($path);
475 defined $link_target or return undef;
476
477 $link_target = File::Spec->catpath($vol, $dir, $link_target)
478 unless File::Spec->file_name_is_absolute($link_target);
479
480 return fast_abs_path($link_target);
481 }
482
483 return $dir eq File::Spec->rootdir
484 ? File::Spec->catpath($vol, $dir, $file)
485 : fast_abs_path(File::Spec->catpath($vol, $dir, '')) . '/' . $file;
486 }
487
488 if (!CORE::chdir($path)) {
489 return undef;
490 }
491 my $realpath = getcwd();
492 if (! ((-d $cwd) && (CORE::chdir($cwd)))) {
493 _croak("Cannot chdir back to $cwd: $!");
494 }
495 $realpath;
496}
497
498# added function alias to follow principle of least surprise
499# based on previous aliasing. --tchrist 27-Jan-00
5001200ns*fast_realpath = \&fast_abs_path;
501
502
503# --- PORTING SECTION ---
504
505# VMS: $ENV{'DEFAULT'} points to default directory at all times
506# 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu
507# Note: Use of Cwd::chdir() causes the logical name PWD to be defined
508# in the process logical name table as the default device and directory
509# seen by Perl. This may not be the same as the default device
510# and directory seen by DCL after Perl exits, since the effects
511# the CRTL chdir() function persist only until Perl exits.
512
513sub _vms_cwd {
514 return $ENV{'DEFAULT'};
515}
516
517sub _vms_abs_path {
518 return $ENV{'DEFAULT'} unless @_;
519 my $path = shift;
520
521 my $efs = _vms_efs;
522 my $unix_rpt = _vms_unix_rpt;
523
524 if (defined &VMS::Filespec::vmsrealpath) {
525 my $path_unix = 0;
526 my $path_vms = 0;
527
528 $path_unix = 1 if ($path =~ m#(?<=\^)/#);
529 $path_unix = 1 if ($path =~ /^\.\.?$/);
530 $path_vms = 1 if ($path =~ m#[\[<\]]#);
531 $path_vms = 1 if ($path =~ /^--?$/);
532
533 my $unix_mode = $path_unix;
534 if ($efs) {
535 # In case of a tie, the Unix report mode decides.
536 if ($path_vms == $path_unix) {
537 $unix_mode = $unix_rpt;
538 } else {
539 $unix_mode = 0 if $path_vms;
540 }
541 }
542
543 if ($unix_mode) {
544 # Unix format
545 return VMS::Filespec::unixrealpath($path);
546 }
547
548 # VMS format
549
550 my $new_path = VMS::Filespec::vmsrealpath($path);
551
552 # Perl expects directories to be in directory format
553 $new_path = VMS::Filespec::pathify($new_path) if -d $path;
554 return $new_path;
555 }
556
557 # Fallback to older algorithm if correct ones are not
558 # available.
559
560 if (-l $path) {
561 my $link_target = readlink($path);
562 die "Can't resolve link $path: $!" unless defined $link_target;
563
564 return _vms_abs_path($link_target);
565 }
566
567 # may need to turn foo.dir into [.foo]
568 my $pathified = VMS::Filespec::pathify($path);
569 $path = $pathified if defined $pathified;
570
571 return VMS::Filespec::rmsexpand($path);
572}
573
574sub _os2_cwd {
575 my $pwd = `cmd /c cd`;
576 chomp $pwd;
577 $pwd =~ s:\\:/:g ;
578 $ENV{'PWD'} = $pwd;
579 return $pwd;
580}
581
582sub _win32_cwd_simple {
583 my $pwd = `cd`;
584 chomp $pwd;
585 $pwd =~ s:\\:/:g ;
586 $ENV{'PWD'} = $pwd;
587 return $pwd;
588}
589
590sub _win32_cwd {
591 my $pwd;
592 $pwd = Win32::GetCwd();
593 $pwd =~ s:\\:/:g ;
594 $ENV{'PWD'} = $pwd;
595 return $pwd;
596}
597
5981400ns*_NT_cwd = defined &Win32::GetCwd ? \&_win32_cwd : \&_win32_cwd_simple;
599
600sub _dos_cwd {
601 my $pwd;
602 if (!defined &Dos::GetCwd) {
603 chomp($pwd = `command /c cd`);
604 $pwd =~ s:\\:/:g ;
605 } else {
606 $pwd = Dos::GetCwd();
607 }
608 $ENV{'PWD'} = $pwd;
609 return $pwd;
610}
611
612sub _qnx_cwd {
613 local $ENV{PATH} = '';
614 local $ENV{CDPATH} = '';
615 local $ENV{ENV} = '';
616 my $pwd = `/usr/bin/fullpath -t`;
617 chomp $pwd;
618 $ENV{'PWD'} = $pwd;
619 return $pwd;
620}
621
622sub _qnx_abs_path {
623 local $ENV{PATH} = '';
624 local $ENV{CDPATH} = '';
625 local $ENV{ENV} = '';
626 my $path = @_ ? shift : '.';
627 local *REALPATH;
628
629 defined( open(REALPATH, '-|') || exec '/usr/bin/fullpath', '-t', $path ) or
630 die "Can't open /usr/bin/fullpath: $!";
631 my $realpath = <REALPATH>;
632 close REALPATH;
633 chomp $realpath;
634 return $realpath;
635}
636
637# Now that all the base-level functions are set up, alias the
638# user-level functions to the right places
639
6401300nsif (exists $METHOD_MAP{$^O}) {
6411300ns my $map = $METHOD_MAP{$^O};
6421900ns foreach my $name (keys %$map) {
643 local $^W = 0; # assignments trigger 'subroutine redefined' warning
644296µs216µs
# spent 12µs (7+4) within Cwd::BEGIN@644 which was called: # once (7µs+4µs) by Archive::Zip::BEGIN@6 at line 644
no strict 'refs';
# spent 12µs making 1 call to Cwd::BEGIN@644 # spent 4µs making 1 call to strict::unimport
645 *{$name} = \&{$map->{$name}};
646 }
647}
648
649# built-in from 5.30
6501200ns*getcwd = \&Internals::getcwd
651 if !defined &getcwd && defined &Internals::getcwd;
652
653# In case the XS version doesn't load.
6541100ns*abs_path = \&_perl_abs_path unless defined &abs_path;
6551100ns*getcwd = \&_perl_getcwd unless defined &getcwd;
656
657# added function alias for those of us more
658# used to the libc function. --tchrist 27-Jan-00
6591200ns*realpath = \&abs_path;
660
661127µs1;
662__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Bail-pm-56-line.html0000644000175000017500000005750414576335353023557 0ustar michamicha Profile of Test2/Event/Bail.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Bail.pm
StatementsExecuted 10 statements in 175µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs12µsTest2::Event::Bail::::BEGIN@2Test2::Event::Bail::BEGIN@2
1116µs6µsTest2::Event::Bail::::BEGIN@8Test2::Event::Bail::BEGIN@8
1114µs52µsTest2::Event::Bail::::BEGIN@9Test2::Event::Bail::BEGIN@9
1113µs20µsTest2::Event::Bail::::BEGIN@3Test2::Event::Bail::BEGIN@3
0000s0sTest2::Event::Bail::::causes_failTest2::Event::Bail::causes_fail
0000s0sTest2::Event::Bail::::diagnosticsTest2::Event::Bail::diagnostics
0000s0sTest2::Event::Bail::::facet_dataTest2::Event::Bail::facet_data
0000s0sTest2::Event::Bail::::globalTest2::Event::Bail::global
0000s0sTest2::Event::Bail::::summaryTest2::Event::Bail::summary
0000s0sTest2::Event::Bail::::terminateTest2::Event::Bail::terminate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Bail;
2218µs213µs
# spent 12µs (10+2) within Test2::Event::Bail::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@96 at line 2
use strict;
# spent 12µs making 1 call to Test2::Event::Bail::BEGIN@2 # spent 2µs making 1 call to strict::import
3235µs237µs
# spent 20µs (3+17) within Test2::Event::Bail::BEGIN@3 which was called: # once (3µs+17µs) by Test2::API::BEGIN@96 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Event::Bail::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8221µs16µs
# spent 6µs within Test2::Event::Bail::BEGIN@8 which was called: # once (6µs+0s) by Test2::API::BEGIN@96 at line 8
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 6µs making 1 call to Test2::Event::Bail::BEGIN@8
9298µs2100µs
# spent 52µs (4+48) within Test2::Event::Bail::BEGIN@9 which was called: # once (4µs+48µs) by Test2::API::BEGIN@96 at line 9
use Test2::Util::HashBase qw{reason buffered};
# spent 52µs making 1 call to Test2::Event::Bail::BEGIN@9 # spent 48µs making 1 call to Test2::Util::HashBase::import
10
11# Make sure the tests terminate
12sub terminate { 255 };
13
14sub global { 1 };
15
16sub causes_fail { 1 }
17
18sub summary {
19 my $self = shift;
20 return "Bail out! " . $self->{+REASON}
21 if $self->{+REASON};
22
23 return "Bail out!";
24}
25
26sub diagnostics { 1 }
27
28sub facet_data {
29 my $self = shift;
30 my $out = $self->common_facet_data;
31
32 $out->{control} = {
33 global => 1,
34 halt => 1,
35 details => $self->{+REASON},
36 terminate => 255,
37 };
38
39 return $out;
40}
41
4212µs1;
43
44__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 96)[XML-Twig-pm-5871]-213-line.html0000644000175000017500000004115214576335353024347 0ustar michamicha Profile of (eval 96)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 96)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 17 statements in 43µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
142114µs18µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1115µs14µsXML::Twig::Elt::::BEGIN@1.40XML::Twig::Elt::BEGIN@1.40
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11743µs1627µs
# spent 18µs (14+4) within XML::Twig::Elt::__ANON__[(eval 96)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 14 times, avg 1µs/call: # 11 times (9µs+3µs) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 1µs/call # 3 times (5µs+1µs) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 2µs/call # spent 14µs (5+9) within XML::Twig::Elt::BEGIN@1.40 which was called: # once (5µs+9µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ( $_[0]->gi eq "s:strike") ? $_[0] : undef; }
# spent 14µs making 1 call to XML::Twig::Elt::BEGIN@1.40 # spent 9µs making 1 call to warnings::unimport # spent 4µs making 14 calls to XML::Twig::Elt::gi, avg 271ns/call
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test-Builder-Module-pm-4-line.html0000644000175000017500000013062114576335353024261 0ustar michamicha Profile of Test/Builder/Module.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:22 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder/Module.pm
StatementsExecuted 39 statements in 317µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115.89ms49.3msTest::Builder::Module::::BEGIN@5Test::Builder::Module::BEGIN@5
22223µs631µsTest::Builder::Module::::importTest::Builder::Module::import
11110µs12µsTest::Builder::Module::::BEGIN@3Test::Builder::Module::BEGIN@3
44210µs15µsTest::Builder::Module::::builderTest::Builder::Module::builder
1117µs7µsTest::Builder::Module::::_strip_importsTest::Builder::Module::_strip_imports
111300ns300nsTest::Builder::Module::::__ANON__Test::Builder::Module::__ANON__ (xsub)
0000s0sTest::Builder::Module::::import_extraTest::Builder::Module::import_extra
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test::Builder::Module;
2
3219µs213µs
# spent 12µs (10+2) within Test::Builder::Module::BEGIN@3 which was called: # once (10µs+2µs) by Test::More::BEGIN@22 at line 3
use strict;
# spent 12µs making 1 call to Test::Builder::Module::BEGIN@3 # spent 2µs making 1 call to strict::import
4
52255µs249.3ms
# spent 49.3ms (5.89+43.4) within Test::Builder::Module::BEGIN@5 which was called: # once (5.89ms+43.4ms) by Test::More::BEGIN@22 at line 5
use Test::Builder;
# spent 49.3ms making 1 call to Test::Builder::Module::BEGIN@5 # spent 300ns making 1 call to Test::Builder::Module::__ANON__
6
71400nsrequire Exporter;
815µsour @ISA = qw(Exporter);
9
101200nsour $VERSION = '1.302198';
11
12
13=head1 NAME
14
15Test::Builder::Module - Base class for test modules
16
17=head1 SYNOPSIS
18
19 # Emulates Test::Simple
20 package Your::Module;
21
22 my $CLASS = __PACKAGE__;
23
24 use parent 'Test::Builder::Module';
25 @EXPORT = qw(ok);
26
27 sub ok ($;$) {
28 my $tb = $CLASS->builder;
29 return $tb->ok(@_);
30 }
31
32 1;
33
34
35=head1 DESCRIPTION
36
37This is a superclass for L<Test::Builder>-based modules. It provides a
38handful of common functionality and a method of getting at the underlying
39L<Test::Builder> object.
40
41
42=head2 Importing
43
44Test::Builder::Module is a subclass of L<Exporter> which means your
45module is also a subclass of Exporter. @EXPORT, @EXPORT_OK, etc...
46all act normally.
47
48A few methods are provided to do the C<< use Your::Module tests => 23 >> part
49for you.
50
51=head3 import
52
53Test::Builder::Module provides an C<import()> method which acts in the
54same basic way as L<Test::More>'s, setting the plan and controlling
55exporting of functions and variables. This allows your module to set
56the plan independent of L<Test::More>.
57
58All arguments passed to C<import()> are passed onto
59C<< Your::Module->builder->plan() >> with the exception of
60C<< import =>[qw(things to import)] >>.
61
62 use Your::Module import => [qw(this that)], tests => 23;
63
64says to import the functions C<this()> and C<that()> as well as set the plan
65to be 23 tests.
66
67C<import()> also sets the C<exported_to()> attribute of your builder to be
68the caller of the C<import()> function.
69
70Additional behaviors can be added to your C<import()> method by overriding
71C<import_extra()>.
72
73=cut
74
75
# spent 631µs (23+608) within Test::Builder::Module::import which was called 2 times, avg 315µs/call: # once (5µs+489µs) by Test::More::BEGIN@22 at line 22 of Test/More.pm # once (18µs+120µs) by main::BEGIN@5 at line 5 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
sub import {
762900ns my($class) = shift;
77
7822µs4496µs Test2::API::test2_load() unless Test2::API::test2_in_preload();
# spent 486µs making 2 calls to Test2::API::test2_load, avg 243µs/call # spent 10µs making 2 calls to Test2::API::test2_in_preload, avg 5µs/call
79
80 # Don't run all this when loading ourself.
8122µs return 1 if $class eq 'Test::Builder::Module';
82
8312µs14µs my $test = $class->builder;
# spent 4µs making 1 call to Test::Builder::Module::builder
84
851500ns my $caller = caller;
86
871800ns12µs $test->exported_to($caller);
# spent 2µs making 1 call to Test::Builder::exported_to
88
891900ns113µs $class->import_extra( \@_ );
# spent 13µs making 1 call to Test::More::import_extra
9012µs17µs my(@imports) = $class->_strip_imports( \@_ );
# spent 7µs making 1 call to Test::Builder::Module::_strip_imports
91
9211µs11µs $test->plan(@_);
# spent 1µs making 1 call to Test::Builder::plan
93
941300ns local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
9514µs185µs $class->Exporter::import(@imports);
# spent 85µs making 1 call to Exporter::import
96}
97
98
# spent 7µs within Test::Builder::Module::_strip_imports which was called: # once (7µs+0s) by Test::Builder::Module::import at line 90
sub _strip_imports {
991100ns my $class = shift;
1001200ns my $list = shift;
101
1021100ns my @imports = ();
1031100ns my @other = ();
1041200ns my $idx = 0;
1051400ns while( $idx <= $#{$list} ) {
1061400ns my $item = $list->[$idx];
107
1081300ns if( defined $item and $item eq 'import' ) {
10912µs push @imports, @{ $list->[ $idx + 1 ] };
1101100ns $idx++;
111 }
112 else {
113 push @other, $item;
114 }
115
1161300ns $idx++;
117 }
118
1191900ns @$list = @other;
120
12113µs return @imports;
122}
123
124=head3 import_extra
125
126 Your::Module->import_extra(\@import_args);
127
128C<import_extra()> is called by C<import()>. It provides an opportunity for you
129to add behaviors to your module based on its import list.
130
131Any extra arguments which shouldn't be passed on to C<plan()> should be
132stripped off by this method.
133
134See L<Test::More> for an example of its use.
135
136B<NOTE> This mechanism is I<VERY ALPHA AND LIKELY TO CHANGE> as it
137feels like a bit of an ugly hack in its current form.
138
139=cut
140
141sub import_extra { }
142
143=head2 Builder
144
145Test::Builder::Module provides some methods of getting at the underlying
146Test::Builder object.
147
148=head3 builder
149
150 my $builder = Your::Class->builder;
151
152This method returns the L<Test::Builder> object associated with Your::Class.
153It is not a constructor so you can call it as often as you like.
154
155This is the preferred way to get the L<Test::Builder> object. You should
156I<not> get it via C<< Test::Builder->new >> as was previously
157recommended.
158
159The object returned by C<builder()> may change at runtime so you should
160call C<builder()> inside each function rather than store it in a global.
161
162 sub ok {
163 my $builder = Your::Class->builder;
164
165 return $builder->ok(@_);
166 }
167
168
169=cut
170
171
# spent 15µs (10+5) within Test::Builder::Module::builder which was called 4 times, avg 4µs/call: # once (4µs+2µs) by Test::More::ok at line 321 of Test/More.pm # once (3µs+900ns) by Test::Builder::Module::import at line 83 # once (2µs+1µs) by Test::More::done_testing at line 248 of Test/More.pm # once (1µs+600ns) by Test::More::import_extra at line 208 of Test/More.pm
sub builder {
172411µs45µs return Test::Builder->new;
# spent 5µs making 4 calls to Test::Builder::new, avg 1µs/call
173}
174
175=head1 SEE ALSO
176
177L<< Test2::Manual::Tooling::TestBuilder >> describes the improved
178options for writing testing modules provided by L<< Test2 >>.
179
180=cut
181
18213µs1;
 
# spent 300ns within Test::Builder::Module::__ANON__ which was called: # once (300ns+0s) by Test::Builder::Module::BEGIN@5 at line 5
sub Test::Builder::Module::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Formatter-pm-69-line.html0000644000175000017500000005433514576335353023577 0ustar michamicha Profile of Test2/Formatter.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Formatter.pm
StatementsExecuted 15 statements in 124µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsTest2::Formatter::::BEGIN@2Test2::Formatter::BEGIN@2
1114µs12µsTest2::Formatter::::importTest2::Formatter::import
1113µs18µsTest2::Formatter::::BEGIN@3Test2::Formatter::BEGIN@3
1112µs93µsTest2::Formatter::::new_rootTest2::Formatter::new_root
111700ns700nsTest2::Formatter::::finalizeTest2::Formatter::finalize
0000s0sTest2::Formatter::::hide_bufferedTest2::Formatter::hide_buffered
0000s0sTest2::Formatter::::supports_tablesTest2::Formatter::supports_tables
0000s0sTest2::Formatter::::terminateTest2::Formatter::terminate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Formatter;
2218µs212µs
# spent 11µs (9+2) within Test2::Formatter::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Formatter::TAP::BEGIN@17 at line 2
use strict;
# spent 11µs making 1 call to Test2::Formatter::BEGIN@2 # spent 2µs making 1 call to strict::import
3294µs234µs
# spent 18µs (3+15) within Test2::Formatter::BEGIN@3 which was called: # once (3µs+15µs) by Test2::Formatter::TAP::BEGIN@17 at line 3
use warnings;
# spent 18µs making 1 call to Test2::Formatter::BEGIN@3 # spent 15µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7
81200nsmy %ADDED;
9
# spent 12µs (4+7) within Test2::Formatter::import which was called: # once (4µs+7µs) by Test::Builder::BEGIN@36 at line 36 of Test/Builder.pm
sub import {
101300ns my $class = shift;
111400ns return if $class eq __PACKAGE__;
121800ns return if $ADDED{$class}++;
131500ns require Test2::API;
1412µs18µs Test2::API::test2_formatter_add($class);
# spent 8µs making 1 call to Test2::API::test2_formatter_add
15}
16
17
# spent 93µs (2+90) within Test2::Formatter::new_root which was called: # once (2µs+90µs) by Test2::API::Stack::new_hub at line 31 of Test2/API/Stack.pm
sub new_root {
181200ns my $class = shift;
1912µs190µs return $class->new(@_);
# spent 90µs making 1 call to Test2::Util::HashBase::_new
20}
21
22sub supports_tables { 0 }
23
24sub hide_buffered { 1 }
25
26sub terminate { }
27
2813µs
# spent 700ns within Test2::Formatter::finalize which was called: # once (700ns+0s) by Test2::Hub::finalize at line 461 of Test2/Hub.pm
sub finalize { }
29
3012µs1;
31
32__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-FileMember-pm-112-line.html0000644000175000017500000010127214576335353025021 0ustar michamicha Profile of Archive/Zip/FileMember.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip/FileMember.pm
StatementsExecuted 383 statements in 495µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
75111118µs554µsArchive::Zip::FileMember::::fhArchive::Zip::FileMember::fh
314285µs158µsArchive::Zip::FileMember::::endReadArchive::Zip::FileMember::endRead
71137µs409µsArchive::Zip::FileMember::::_openFileArchive::Zip::FileMember::_openFile
11110µs12µsArchive::Zip::FileMember::::BEGIN@3Archive::Zip::FileMember::BEGIN@3
14228µs8µsArchive::Zip::FileMember::::externalFileNameArchive::Zip::FileMember::externalFileName
1116µs6µsArchive::Zip::FileMember::::BEGIN@6Archive::Zip::FileMember::BEGIN@6
1114µs22µsArchive::Zip::FileMember::::BEGIN@4Archive::Zip::FileMember::BEGIN@4
1114µs69µsArchive::Zip::FileMember::::BEGIN@11Archive::Zip::FileMember::BEGIN@11
0000s0sArchive::Zip::FileMember::::_becomeArchive::Zip::FileMember::_become
0000s0sArchive::Zip::FileMember::::_usesFileNamedArchive::Zip::FileMember::_usesFileNamed
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip::FileMember;
2
3224µs214µs
# spent 12µs (10+2) within Archive::Zip::FileMember::BEGIN@3 which was called: # once (10µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 3
use strict;
# spent 12µs making 1 call to Archive::Zip::FileMember::BEGIN@3 # spent 2µs making 1 call to strict::import
4235µs240µs
# spent 22µs (4+18) within Archive::Zip::FileMember::BEGIN@4 which was called: # once (4µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 4
use vars qw( $VERSION @ISA );
# spent 22µs making 1 call to Archive::Zip::FileMember::BEGIN@4 # spent 18µs making 1 call to vars::import
5
6
# spent 6µs within Archive::Zip::FileMember::BEGIN@6 which was called: # once (6µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 9
BEGIN {
71200ns $VERSION = '1.68';
816µs @ISA = qw ( Archive::Zip::Member );
9114µs16µs}
# spent 6µs making 1 call to Archive::Zip::FileMember::BEGIN@6
10
1112µs166µs
# spent 69µs (4+66) within Archive::Zip::FileMember::BEGIN@11 which was called: # once (4µs+66µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 13
use Archive::Zip qw(
# spent 66µs making 1 call to Exporter::import
12 :UTILITY_METHODS
131158µs169µs);
# spent 69µs making 1 call to Archive::Zip::FileMember::BEGIN@11
14
15
# spent 8µs within Archive::Zip::FileMember::externalFileName which was called 14 times, avg 557ns/call: # 7 times (5µs+0s) by Archive::Zip::FileMember::_openFile at line 38, avg 686ns/call # 7 times (3µs+0s) by Archive::Zip::ZipFileMember::_seekToLocalHeader at line 70 of Archive/Zip/ZipFileMember.pm, avg 429ns/call
sub externalFileName {
161415µs shift->{'externalFileName'};
17}
18
19# Return true if I depend on the named file
20sub _usesFileNamed {
21 my $self = shift;
22 my $fileName = shift;
23 my $xfn = $self->externalFileName();
24 return undef if ref($xfn);
25 return $xfn eq $fileName;
26}
27
28
# spent 554µs (118+437) within Archive::Zip::FileMember::fh which was called 75 times, avg 7µs/call: # 10 times (18µs+5µs) by Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader at line 369 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # 7 times (16µs+409µs) by Archive::Zip::ZipFileMember::rewindData at line 443 of Archive/Zip/ZipFileMember.pm, avg 61µs/call # 7 times (19µs+2µs) by Archive::Zip::ZipFileMember::rewindData at line 458 of Archive/Zip/ZipFileMember.pm, avg 3µs/call # 7 times (12µs+6µs) by Archive::Zip::ZipFileMember::rewindData at line 445 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # 7 times (10µs+3µs) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 138 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # 7 times (8µs+3µs) by Archive::Zip::ZipFileMember::_readRawChunk at line 470 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # 7 times (8µs+2µs) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 157 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # 7 times (8µs+2µs) by Archive::Zip::ZipFileMember::_seekToLocalHeader at line 67 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # 7 times (8µs+2µs) by Archive::Zip::ZipFileMember::_seekToLocalHeader at line 70 of Archive/Zip/ZipFileMember.pm, avg 1µs/call # 7 times (8µs+2µs) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 178 of Archive/Zip/ZipFileMember.pm, avg 1µs/call # 2 times (2µs+500ns) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 165 of Archive/Zip/ZipFileMember.pm, avg 1µs/call
sub fh {
29756µs my $self = shift;
30 $self->_openFile()
317554µs75437µs if !defined($self->{'fh'}) || !$self->{'fh'}->opened();
# spent 409µs making 7 calls to Archive::Zip::FileMember::_openFile, avg 58µs/call # spent 28µs making 68 calls to IO::Handle::opened, avg 412ns/call
327565µs return $self->{'fh'};
33}
34
35# opens my file handle from my file name
36
# spent 409µs (37+372) within Archive::Zip::FileMember::_openFile which was called 7 times, avg 58µs/call: # 7 times (37µs+372µs) by Archive::Zip::FileMember::fh at line 31, avg 58µs/call
sub _openFile {
377900ns my $self = shift;
38712µs14310µs my ($status, $fh) = _newFileHandle($self->externalFileName(), 'r');
# spent 306µs making 7 calls to Archive::Zip::_newFileHandle, avg 44µs/call # spent 5µs making 7 calls to Archive::Zip::FileMember::externalFileName, avg 686ns/call
3971µs if (!$status) {
40 _ioError("Can't open", $self->externalFileName());
41 return undef;
42 }
4372µs $self->{'fh'} = $fh;
4476µs762µs _binmode($fh);
# spent 62µs making 7 calls to Archive::Zip::_binmode, avg 9µs/call
4578µs return $fh;
46}
47
48# Make sure I close my file handle
49
# spent 158µs (85+72) within Archive::Zip::FileMember::endRead which was called 31 times, avg 5µs/call: # 10 times (17µs+12µs) by Archive::Zip::Archive::readFromFileHandle at line 794 of Archive/Zip/Archive.pm, avg 3µs/call # 7 times (51µs+51µs) by Archive::Zip::Member::_inflateChunk at line 1185 of Archive/Zip/Member.pm, avg 15µs/call # 7 times (9µs+5µs) by Archive::Zip::Member::readChunk at line 1132 of Archive/Zip/Member.pm, avg 2µs/call # 7 times (9µs+5µs) by Archive::Zip::Member::contents at line 1308 of Archive/Zip/Member.pm, avg 2µs/call
sub endRead {
50313µs my $self = shift;
513142µs undef $self->{'fh'}; # _closeFile();
523140µs3172µs return $self->SUPER::endRead(@_);
# spent 72µs making 31 calls to Archive::Zip::Member::endRead, avg 2µs/call
53}
54
55sub _become {
56 my $self = shift;
57 my $newClass = shift;
58 return $self if ref($self) eq $newClass;
59 delete($self->{'externalFileName'});
60 delete($self->{'fh'});
61 return $self->SUPER::_become($newClass);
62}
63
6412µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 15)[XML-Twig-pm-167]-135-line.html0000644000175000017500000003015014576335353024246 0ustar michamicha Profile of (eval 15)[XML/Twig.pm:167]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 15)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:167]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 167
Line State
ments
Time
on line
Calls Time
in subs
Code
112µsrequire Scalar::Util
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 69)[XML-Twig-pm-5871]-186-line.html0000644000175000017500000004043314576335353024361 0ustar michamicha Profile of (eval 69)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 69)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 4 statements in 45µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116µs16µsXML::Twig::Elt::::BEGIN@1.13XML::Twig::Elt::BEGIN@1.13
1112µs2µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1445µs226µs
# spent 2µs within XML::Twig::Elt::__ANON__[(eval 69)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called: # once (2µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.13 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 59) ? $_[0] : undef; }
# spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.13 # spent 10µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/overloading-pm-16-line.html0000644000175000017500000005403414576335353023132 0ustar michamicha Profile of overloading.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/overloading.pm
StatementsExecuted 18 statements in 245µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
33216µs16µsoverloading::::unimportoverloading::unimport
1119µs26µsoverloading::::BEGIN@2overloading::BEGIN@2
0000s0soverloading::::_ops_to_numsoverloading::_ops_to_nums
0000s0soverloading::::importoverloading::import
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package overloading;
22213µs244µs
# spent 26µs (9+17) within overloading::BEGIN@2 which was called: # once (9µs+17µs) by Carp::BEGIN@169 at line 2
use warnings;
# spent 26µs making 1 call to overloading::BEGIN@2 # spent 17µs making 1 call to warnings::import
3
41400nsour $VERSION = '0.02';
5
61200nsmy $HINT_NO_AMAGIC = 0x01000000; # see perl.h
7
816µsrequire 5.010001;
9
10sub _ops_to_nums {
11 require overload::numbers;
12
13 map { exists $overload::numbers::names{"($_"}
14 ? $overload::numbers::names{"($_"}
15 : do { require Carp; Carp::croak("'$_' is not a valid overload") }
16 } @_;
17}
18
19sub import {
20 my ( $class, @ops ) = @_;
21
22 if ( @ops ) {
23 if ( $^H{overloading} ) {
24 vec($^H{overloading} , $_, 1) = 0 for _ops_to_nums(@ops);
25 }
26
27 if ( $^H{overloading} !~ /[^\0]/ ) {
28 delete $^H{overloading};
29 $^H &= ~$HINT_NO_AMAGIC;
30 }
31 } else {
32 delete $^H{overloading};
33 $^H &= ~$HINT_NO_AMAGIC;
34 }
35}
36
37
# spent 16µs within overloading::unimport which was called 3 times, avg 5µs/call: # once (6µs+0s) by overload::BEGIN@84 at line 84 of overload.pm # once (6µs+0s) by Carp::BEGIN@1 at line 1 of (eval 4)[Carp.pm:171] # once (4µs+0s) by overload::BEGIN@113 at line 113 of overload.pm
sub unimport {
3832µs my ( $class, @ops ) = @_;
39
4035µs if ( exists $^H{overloading} or not $^H & $HINT_NO_AMAGIC ) {
41 if ( @ops ) {
42 vec($^H{overloading} ||= '', $_, 1) = 1 for _ops_to_nums(@ops);
43 } else {
4435µs delete $^H{overloading};
45 }
46 }
47
48311µs $^H |= $HINT_NO_AMAGIC;
49}
50
5113µs1;
52__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-Utility-pm-128-line.html0000644000175000017500000066440614576335353026660 0ustar michamicha Profile of Spreadsheet/ParseExcel/Utility.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel/Utility.pm
StatementsExecuted 13 statements in 3.20ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs10µsSpreadsheet::ParseExcel::Utility::::BEGIN@19Spreadsheet::ParseExcel::Utility::BEGIN@19
1114µs21µsSpreadsheet::ParseExcel::Utility::::BEGIN@23Spreadsheet::ParseExcel::Utility::BEGIN@23
1113µs16µsSpreadsheet::ParseExcel::Utility::::BEGIN@20Spreadsheet::ParseExcel::Utility::BEGIN@20
0000s0sSpreadsheet::ParseExcel::Utility::::AddCommaSpreadsheet::ParseExcel::Utility::AddComma
0000s0sSpreadsheet::ParseExcel::Utility::::ExcelFmtSpreadsheet::ParseExcel::Utility::ExcelFmt
0000s0sSpreadsheet::ParseExcel::Utility::::ExcelLocaltimeSpreadsheet::ParseExcel::Utility::ExcelLocaltime
0000s0sSpreadsheet::ParseExcel::Utility::::LeapYearSpreadsheet::ParseExcel::Utility::LeapYear
0000s0sSpreadsheet::ParseExcel::Utility::::LocaltimeExcelSpreadsheet::ParseExcel::Utility::LocaltimeExcel
0000s0sSpreadsheet::ParseExcel::Utility::::MakeESpreadsheet::ParseExcel::Utility::MakeE
0000s0sSpreadsheet::ParseExcel::Utility::::MakeFractionSpreadsheet::ParseExcel::Utility::MakeFraction
0000s0sSpreadsheet::ParseExcel::Utility::::col2intSpreadsheet::ParseExcel::Utility::col2int
0000s0sSpreadsheet::ParseExcel::Utility::::int2colSpreadsheet::ParseExcel::Utility::int2col
0000s0sSpreadsheet::ParseExcel::Utility::::sheetRefSpreadsheet::ParseExcel::Utility::sheetRef
0000s0sSpreadsheet::ParseExcel::Utility::::xls2csvSpreadsheet::ParseExcel::Utility::xls2csv
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel::Utility;
2
3###############################################################################
4#
5# Spreadsheet::ParseExcel::Utility - Utility functions for ParseExcel.
6#
7# Used in conjunction with Spreadsheet::ParseExcel.
8#
9# Copyright (c) 2014 Douglas Wilson
10# Copyright (c) 2009-2013 John McNamara
11# Copyright (c) 2006-2008 Gabor Szabo
12# Copyright (c) 2000-2006 Kawai Takanori
13#
14# perltidy with standard settings.
15#
16# Documentation after __END__
17#
18
19216µs211µs
# spent 10µs (9+1) within Spreadsheet::ParseExcel::Utility::BEGIN@19 which was called: # once (9µs+1µs) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 at line 19
use strict;
# spent 10µs making 1 call to Spreadsheet::ParseExcel::Utility::BEGIN@19 # spent 1µs making 1 call to strict::import
20217µs228µs
# spent 16µs (3+12) within Spreadsheet::ParseExcel::Utility::BEGIN@20 which was called: # once (3µs+12µs) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 at line 20
use warnings;
# spent 16µs making 1 call to Spreadsheet::ParseExcel::Utility::BEGIN@20 # spent 12µs making 1 call to warnings::import
21
221500nsrequire Exporter;
2323.15ms238µs
# spent 21µs (4+17) within Spreadsheet::ParseExcel::Utility::BEGIN@23 which was called: # once (4µs+17µs) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 at line 23
use vars qw(@ISA @EXPORT_OK);
# spent 21µs making 1 call to Spreadsheet::ParseExcel::Utility::BEGIN@23 # spent 17µs making 1 call to vars::import
2415µs@ISA = qw(Exporter);
251700ns@EXPORT_OK = qw(ExcelFmt LocaltimeExcel ExcelLocaltime
26 col2int int2col sheetRef xls2csv);
27
281200nsour $VERSION = '0.66';
29
3015µs12µsmy $qrNUMBER = qr/(^[+-]?\d+(\.\d+)?$)|(^[+-]?\d+\.?(\d*)[eE][+-](\d+))$/;
# spent 2µs making 1 call to CORE::qr
31
32###############################################################################
33#
34# ExcelFmt()
35#
36# This function takes an Excel style number format and converts a number into
37# that format. for example: 'hh:mm:ss AM/PM' + 0.01023148 = '12:14:44 AM'.
38#
39# It does this with a type of templating mechanism. The format string is parsed
40# to identify tokens that need to be replaced and their position within the
41# string is recorded. These can be thought of as placeholders. The number is
42# then converted to the required formats and substituted into the placeholders.
43#
44# Interested parties should refer to the Excel documentation on cell formats for
45# more information: http://office.microsoft.com/en-us/excel/HP051995001033.aspx
46# The Microsoft documentation for the Excel Binary File Format, [MS-XLS].pdf,
47# also contains a ABNF grammar for number format strings.
48#
49# Maintainers notes:
50# ==================
51#
52# Note on format subsections:
53# A format string can contain 4 possible sub-sections separated by semi-colons:
54# Positive numbers, negative numbers, zero values, and text.
55# For example: _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
56#
57# Note on conditional formats.
58# A number format in Excel can have a conditional expression such as:
59# [>9999999](000)000-0000;000-0000
60# This is equivalent to the following in Perl:
61# $format = $number > 9999999 ? '(000)000-0000' : '000-0000';
62# Nested conditionals are also possible but we don't support them.
63#
64# Efficiency: The excessive use of substr() isn't very efficient. However,
65# it probably doesn't merit rewriting this function with a parser or regular
66# expressions and \G.
67#
68# TODO: I think the single quote handling may not be required. Check.
69#
70sub ExcelFmt {
71
72 my ( $format_str, $number, $is_1904, $number_type, $want_subformats ) = @_;
73
74 # Return text strings without further formatting.
75 return $number unless $number =~ $qrNUMBER;
76
77 # Handle OpenOffice.org GENERAL format.
78 $format_str = '@' if uc($format_str) eq "GENERAL";
79
80 # Check for a conditional at the start of the format. See notes above.
81 my $conditional_op;
82 my $conditional_value;
83 if ( $format_str =~ /^\[([<>=]+)([^\]]+)\](.*)$/ ) {
84 $conditional_op = $1;
85 $conditional_value = $2;
86 $format_str = $3;
87 }
88
89 # Ignore the underscore token which is used to indicate a padding space.
90 $format_str =~ s/_/ /g;
91
92 # Split the format string into 4 possible sub-sections: positive numbers,
93 # negative numbers, zero values, and text. See notes above.
94 my @formats;
95 my $section = 0;
96 my $double_quote = 0;
97 my $single_quote = 0;
98
99 # Initial parsing of the format string to remove escape characters. This
100 # also handles quoted strings. See note about single quotes above.
101 CHARACTER:
102 for my $char ( split //, $format_str ) {
103
104 if ( $double_quote or $single_quote ) {
105 $formats[$section] .= $char;
106 $double_quote = 0 if $char eq '"';
107 $single_quote = 0;
108 next CHARACTER;
109 }
110
111 if ( $char eq ';' ) {
112 $section++;
113 next CHARACTER;
114 }
115 elsif ( $char eq '"' ) {
116 $double_quote = 1;
117 }
118 elsif ( $char eq '!' ) {
119 $single_quote = 1;
120 }
121 elsif ( $char eq '\\' ) {
122 $single_quote = 1;
123 }
124 elsif ( $char eq '(' ) {
125 next CHARACTER; # Ignore.
126 }
127 elsif ( $char eq ')' ) {
128 next CHARACTER; # Ignore.
129 }
130
131 # Convert upper case OpenOffice.org date/time formats to lowercase..
132 $char = lc($char) if $char =~ /[DMYHS]/;
133
134 $formats[$section] .= $char;
135 }
136
137 # Select the appropriate format from the 4 possible sub-sections:
138 # positive numbers, negative numbers, zero values, and text.
139 # We ignore the Text section since non-numeric values are returned
140 # unformatted at the start of the function.
141 my $format;
142 $section = 0;
143
144 if ( @formats == 1 ) {
145 $section = 0;
146 }
147 elsif ( @formats == 2 ) {
148 if ( $number < 0 ) {
149 $section = 1;
150 }
151 else {
152 $section = 0;
153 }
154 }
155 elsif ( @formats == 3 ) {
156 if ( $number == 0 ) {
157 $section = 2;
158 }
159 elsif ( $number < 0 ) {
160 $section = 1;
161 }
162 else {
163 $section = 0;
164 }
165 }
166 else {
167 $section = 0;
168 }
169
170 # Override the previous choice if the format is conditional.
171 if ($conditional_op) {
172 if ($conditional_op eq '>') {
173 $section = $number > $conditional_value ? 0 : 1;
174 } elsif ($conditional_op eq '>=') {
175 $section = $number >= $conditional_value ? 0 : 1;
176 } elsif ($conditional_op eq '<') {
177 $section = $number < $conditional_value ? 0 : 1;
178 } elsif ($conditional_op eq '<=') {
179 $section = $number <= $conditional_value ? 0 : 1;
180 } elsif ($conditional_op eq '=') {
181 $section = $number == $conditional_value ? 0 : 1;
182 } elsif ($conditional_op eq '==') {
183 $section = $number == $conditional_value ? 0 : 1;
184 } elsif ($conditional_op eq '<>') {
185 $section = $number != $conditional_value ? 0 : 1;
186 }
187 }
188 # We now have the required format.
189 $format = $formats[$section];
190
191 # The format string can contain one of the following colours:
192 # [Black] [Blue] [Cyan] [Green] [Magenta] [Red] [White] [Yellow]
193 # or the string [ColorX] where x is a colour index from 1 to 56.
194 # We don't use the colour but we return it to the caller.
195 #
196 my $color = '';
197 if ( $format =~ s/^(\[[A-Za-z]{3,}(\d{1,2})?\])// ) {
198 $color = $1;
199 }
200
201 # Remove the locale, such as [$-409], from the format string.
202 my $locale = '';
203 if ( $format =~ s/^(\[\$?-F?\d+\])// ) {
204 $locale = $1;
205 }
206
207 # Replace currency locale, such as [$$-409], with $ in the format string.
208 # See the RT#60547 test cases in 21_number_format_user.t.
209 if ( $format =~ s/(\[\$([^-]+)(-\d+)?\])/$2/s ) {
210 $locale = $1;
211 }
212
213
214 # Remove leading # from '# ?/?', '# ??/??' fraction formats.
215 $format =~ s{# \?}{?}g;
216
217 # Parse the format string and create an AoA of placeholders that contain
218 # the parts of the string to be replaced. The format of the information
219 # stored is: [ $token, $start_pos, $end_pos, $option_info ].
220 #
221 my $format_mode = ''; # Either: '', 'number', 'date'
222 my $pos = 0; # Character position within format string.
223 my @placeholders = (); # Arefs with parts of the format to be replaced.
224 my $token = ''; # The actual format extracted from the total str.
225 my $start_pos; # A position variable. Initial parser position.
226 my $token_start = -1; # A position variable.
227 my $decimal_pos = -1; # Position of the punctuation char "." or ",".
228 my $comma_count = 0; # Count of the commas in the format.
229 my $is_fraction = 0; # Number format is a fraction.
230 my $is_currency = 0; # Number format is a currency.
231 my $is_percent = 0; # Number format is a percentage.
232 my $is_12_hour = 0; # Time format is using 12 hour clock.
233 my $seen_dot = 0; # Treat only the first "." as the decimal point.
234
235 # Parse the format.
236 PARSER:
237 while ( $pos < length $format ) {
238 $start_pos = $pos;
239 my $char = substr( $format, $pos, 1 );
240
241 # Ignore control format characters such as '#0+-.?eE,%'. However,
242 # only ignore '.' if it is the first one encountered. RT 45502.
243 if ( ( !$seen_dot && $char !~ /[#0\+\-\.\?eE\,\%]/ )
244 || $char !~ /[#0\+\-\?eE\,\%]/ )
245 {
246
247 if ( $token_start != -1 ) {
248 push @placeholders,
249 [
250 substr( $format, $token_start, $pos - $token_start ),
251 $decimal_pos, $pos - $token_start
252 ];
253 $token_start = -1;
254 }
255 }
256
257 # Processing for quoted strings within the format. See notes above.
258 if ( $char eq '"' ) {
259 $double_quote = $double_quote ? 0 : 1;
260 $pos++;
261 next PARSER;
262 }
263 elsif ( $char eq '!' ) {
264 $single_quote = 1;
265 $pos++;
266 next PARSER;
267 }
268 elsif ( $char eq '\\' ) {
269 if ( $single_quote != 1 ) {
270 $single_quote = 1;
271 $pos++;
272 next PARSER;
273 }
274 }
275
276 if ( ( defined($double_quote) and ($double_quote) )
277 or ( defined($single_quote) and ($single_quote) )
278 or ( $seen_dot && $char eq '.' ) )
279 {
280 $single_quote = 0;
281 if (
282 ( $format_mode ne 'date' )
283 and ( ( substr( $format, $pos, 2 ) eq "\x81\xA2" )
284 || ( substr( $format, $pos, 2 ) eq "\x81\xA3" )
285 || ( substr( $format, $pos, 2 ) eq "\xA2\xA4" )
286 || ( substr( $format, $pos, 2 ) eq "\xA2\xA5" ) )
287 )
288 {
289
290 # The above matches are currency symbols.
291 push @placeholders,
292 [ substr( $format, $pos, 2 ), length($token), 2 ];
293 $is_currency = 1;
294 $pos += 2;
295 }
296 else {
297 $pos++;
298 }
299 }
300 elsif (
301 ( $char =~ /[#0\+\.\?eE\,\%]/ )
302 || ( ( $format_mode ne 'date' )
303 and ( ( $char eq '-' ) || ( $char eq '(' ) || ( $char eq ')' ) )
304 )
305 )
306 {
307 $format_mode = 'number' unless $format_mode;
308 if ( substr( $format, $pos, 1 ) =~ /[#0]/ ) {
309 if (
310 substr( $format, $pos ) =~
311 /^([#0]+[\.]?[0#]*[eE][\+\-][0#]+)/ )
312 {
313 push @placeholders, [ $1, $pos, length($1) ];
314 $pos += length($1);
315 }
316 else {
317 if ( $token_start == -1 ) {
318 $token_start = $pos;
319 $decimal_pos = length($token);
320 }
321 }
322 }
323 elsif ( substr( $format, $pos, 1 ) eq '?' ) {
324
325 # Look for a fraction format like ?/? or ??/??
326 if ( $token_start != -1 ) {
327 push @placeholders,
328 [
329 substr(
330 $format, $token_start, $pos - $token_start + 1
331 ),
332 $decimal_pos,
333 $pos - $token_start + 1
334 ];
335 }
336 $token_start = $pos;
337
338 # Find the end of the fraction format.
339 FRACTION:
340 while ( $pos < length($format) ) {
341 if ( substr( $format, $pos, 1 ) eq '/' ) {
342 $is_fraction = 1;
343 }
344 elsif ( substr( $format, $pos, 1 ) eq '?' ) {
345 $pos++;
346 next FRACTION;
347 }
348 else {
349 if ( $is_fraction
350 && ( substr( $format, $pos, 1 ) =~ /[0-9]/ ) )
351 {
352
353 # TODO: Could invert if() logic and remove this.
354 $pos++;
355 next FRACTION;
356 }
357 else {
358 last FRACTION;
359 }
360 }
361 $pos++;
362 }
363 $pos--;
364
365 push @placeholders,
366 [
367 substr( $format, $token_start, $pos - $token_start + 1 ),
368 length($token), $pos - $token_start + 1
369 ];
370 $token_start = -1;
371 }
372 elsif ( substr( $format, $pos, 3 ) =~ /^[eE][\+\-][0#]$/ ) {
373 if ( substr( $format, $pos ) =~ /([eE][\+\-][0#]+)/ ) {
374 push @placeholders, [ $1, $pos, length($1) ];
375 $pos += length($1);
376 }
377 $token_start = -1;
378 }
379 else {
380 if ( $token_start != -1 ) {
381 push @placeholders,
382 [
383 substr( $format, $token_start, $pos - $token_start ),
384 $decimal_pos, $pos - $token_start
385 ];
386 $token_start = -1;
387 }
388 if ( substr( $format, $pos, 1 ) =~ /[\+\-]/ ) {
389 push @placeholders,
390 [ substr( $format, $pos, 1 ), length($token), 1 ];
391 $is_currency = 1;
392 }
393 elsif ( substr( $format, $pos, 1 ) eq '.' ) {
394 push @placeholders,
395 [ substr( $format, $pos, 1 ), length($token), 1 ];
396 $seen_dot = 1;
397 }
398 elsif ( substr( $format, $pos, 1 ) eq ',' ) {
399 $comma_count++;
400 push @placeholders,
401 [ substr( $format, $pos, 1 ), length($token), 1 ];
402 }
403 elsif ( substr( $format, $pos, 1 ) eq '%' ) {
404 $is_percent = 1;
405 }
406 elsif (( substr( $format, $pos, 1 ) eq '(' )
407 || ( substr( $format, $pos, 1 ) eq ')' ) )
408 {
409 push @placeholders,
410 [ substr( $format, $pos, 1 ), length($token), 1 ];
411 $is_currency = 1;
412 }
413 }
414 $pos++;
415 }
416 elsif ( $char =~ /[ymdhsapg]/i ) {
417 $format_mode = 'date' unless $format_mode;
418 if ( substr( $format, $pos, 5 ) =~ /am\/pm/i ) {
419 push @placeholders, [ 'am/pm', length($token), 5 ];
420 $is_12_hour = 1;
421 $pos += 5;
422 }
423 elsif ( substr( $format, $pos, 3 ) =~ /a\/p/i ) {
424 push @placeholders, [ 'a/p', length($token), 3 ];
425 $is_12_hour = 1;
426 $pos += 3;
427 }
428 elsif ( substr( $format, $pos, 5 ) eq 'mmmmm' ) {
429 push @placeholders, [ 'mmmmm', length($token), 5 ];
430 $pos += 5;
431 }
432 elsif (( substr( $format, $pos, 4 ) eq 'mmmm' )
433 || ( substr( $format, $pos, 4 ) eq 'dddd' )
434 || ( substr( $format, $pos, 4 ) eq 'yyyy' )
435 || ( substr( $format, $pos, 4 ) eq 'ggge' ) )
436 {
437 push @placeholders,
438 [ substr( $format, $pos, 4 ), length($token), 4 ];
439 $pos += 4;
440 }
441 elsif (( substr( $format, $pos, 3 ) eq 'ddd' )
442 || ( substr( $format, $pos, 3 ) eq 'mmm' )
443 || ( substr( $format, $pos, 3 ) eq 'yyy' ) )
444 {
445 push @placeholders,
446 [ substr( $format, $pos, 3 ), length($token), 3 ];
447 $pos += 3;
448 }
449 elsif (( substr( $format, $pos, 2 ) eq 'yy' )
450 || ( substr( $format, $pos, 2 ) eq 'mm' )
451 || ( substr( $format, $pos, 2 ) eq 'dd' )
452 || ( substr( $format, $pos, 2 ) eq 'hh' )
453 || ( substr( $format, $pos, 2 ) eq 'ss' )
454 || ( substr( $format, $pos, 2 ) eq 'ge' ) )
455 {
456 if (
457 ( substr( $format, $pos, 2 ) eq 'mm' )
458 && (@placeholders)
459 && ( ( $placeholders[-1]->[0] eq 'h' )
460 or ( $placeholders[-1]->[0] eq 'hh' ) )
461 )
462 {
463
464 # For this case 'm' is minutes not months.
465 push @placeholders, [ 'mm', length($token), 2, 'minutes' ];
466 }
467 else {
468 push @placeholders,
469 [ substr( $format, $pos, 2 ), length($token), 2 ];
470 }
471 if ( ( substr( $format, $pos, 2 ) eq 'ss' )
472 && ( @placeholders > 1 ) )
473 {
474 if ( ( $placeholders[-2]->[0] eq 'm' )
475 || ( $placeholders[-2]->[0] eq 'mm' ) )
476 {
477
478 # For this case 'm' is minutes not months.
479 push( @{ $placeholders[-2] }, 'minutes' );
480 }
481 }
482 $pos += 2;
483 }
484 elsif (( substr( $format, $pos, 1 ) eq 'm' )
485 || ( substr( $format, $pos, 1 ) eq 'd' )
486 || ( substr( $format, $pos, 1 ) eq 'h' )
487 || ( substr( $format, $pos, 1 ) eq 's' ) )
488 {
489 if (
490 ( substr( $format, $pos, 1 ) eq 'm' )
491 && (@placeholders)
492 && ( ( $placeholders[-1]->[0] eq 'h' )
493 or ( $placeholders[-1]->[0] eq 'hh' ) )
494 )
495 {
496
497 # For this case 'm' is minutes not months.
498 push @placeholders, [ 'm', length($token), 1, 'minutes' ];
499 }
500 else {
501 push @placeholders,
502 [ substr( $format, $pos, 1 ), length($token), 1 ];
503 }
504 if ( ( substr( $format, $pos, 1 ) eq 's' )
505 && ( @placeholders > 1 ) )
506 {
507 if ( ( $placeholders[-2]->[0] eq 'm' )
508 || ( $placeholders[-2]->[0] eq 'mm' ) )
509 {
510
511 # For this case 'm' is minutes not months.
512 push( @{ $placeholders[-2] }, 'minutes' );
513 }
514 }
515 $pos += 1;
516 }
517 }
518 elsif ( ( substr( $format, $pos, 3 ) eq '[h]' ) ) {
519 $format_mode = 'date' unless $format_mode;
520 push @placeholders, [ '[h]', length($token), 3 ];
521 $pos += 3;
522 }
523 elsif ( ( substr( $format, $pos, 4 ) eq '[mm]' ) ) {
524 $format_mode = 'date' unless $format_mode;
525 push @placeholders, [ '[mm]', length($token), 4 ];
526 $pos += 4;
527 }
528 elsif ( $char eq '@' ) {
529 push @placeholders, [ '@', length($token), 1 ];
530 $pos++;
531 }
532 elsif ( $char eq '*' ) {
533 push @placeholders,
534 [ substr( $format, $pos, 1 ), length($token), 1 ];
535 }
536 else {
537 $pos++;
538 }
539 $pos++ if ( $pos == $start_pos ); #No Format match
540 $token .= substr( $format, $start_pos, $pos - $start_pos );
541
542 } # End of parsing.
543
544 # Copy the located format string to a result string that we will perform
545 # the substitutions on and return to the user.
546 my $result = $token;
547
548 # Add a placeholder between the decimal/comma and end of the token, if any.
549 if ( $token_start != -1 ) {
550 push @placeholders,
551 [
552 substr( $format, $token_start, $pos - $token_start + 1 ),
553 $decimal_pos, $pos - $token_start + 1
554 ];
555 }
556
557 #
558 # In the next sections we process date, number and text formats. We take a
559 # format such as yyyy/mm/dd and replace it with something like 2008/12/25.
560 #
561 if ( ( $format_mode eq 'date' ) && ( $number =~ $qrNUMBER ) ) {
562
563 # The maximum allowable date in Excel is 9999-12-31T23:59:59.000 which
564 # equates to 2958465.999+ in the 1900 epoch and 2957003.999+ in the
565 # 1904 epoch. We use 0 as the minimum in both epochs. The 1904 system
566 # actually supports negative numbers but that isn't worth the effort.
567 my $min_date = 0;
568 my $max_date = 2958466;
569 $max_date = 2957004 if $is_1904;
570
571 if ( $number < $min_date || $number >= $max_date ) {
572 return $number; # Return unformatted number.
573 }
574
575 # Process date formats.
576 my @time = ExcelLocaltime( $number, $is_1904 );
577
578 # 0 1 2 3 4 5 6 7
579 my ( $sec, $min, $hour, $day, $month, $year, $wday, $msec ) = @time;
580
581 $month++; # localtime() zero indexed month.
582 $year += 1900; # localtime() year.
583
584 my @full_month_name = qw(
585 None January February March April May June July
586 August September October November December
587 );
588 my @short_month_name = qw(
589 None Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
590 );
591 my @full_day_name = qw(
592 Sunday Monday Tuesday Wednesday Thursday Friday Saturday
593 );
594 my @short_day_name = qw(
595 Sun Mon Tue Wed Thu Fri Sat
596 );
597
598 # Replace the placeholders in the template such as yyyy mm dd with
599 # actual numbers or strings.
600 my $replacement;
601 for my $placeholder ( reverse @placeholders ) {
602
603 if ( $placeholder->[-1] eq 'minutes' ) {
604
605 # For this case 'm/mm' is minutes not months.
606 if ( $placeholder->[0] eq 'mm' ) {
607 $replacement = sprintf( "%02d", $min );
608 }
609 else {
610 $replacement = sprintf( "%d", $min );
611 }
612 }
613 elsif ( $placeholder->[0] eq 'yyyy' ) {
614
615 # 4 digit Year. 2000 -> 2000.
616 $replacement = sprintf( '%04d', $year );
617 }
618 elsif ( $placeholder->[0] eq 'yy' ) {
619
620 # 2 digit Year. 2000 -> 00.
621 $replacement = sprintf( '%02d', $year % 100 );
622 }
623 elsif ( $placeholder->[0] eq 'mmmmm' ) {
624
625 # First character of the month name. 1 -> J.
626 $replacement = substr( $short_month_name[$month], 0, 1 );
627 }
628 elsif ( $placeholder->[0] eq 'mmmm' ) {
629
630 # Full month name. 1 -> January.
631 $replacement = $full_month_name[$month];
632 }
633 elsif ( $placeholder->[0] eq 'mmm' ) {
634
635 # Short month name. 1 -> Jan.
636 $replacement = $short_month_name[$month];
637 }
638 elsif ( $placeholder->[0] eq 'mm' ) {
639
640 # 2 digit month. 1 -> 01.
641 $replacement = sprintf( '%02d', $month );
642 }
643 elsif ( $placeholder->[0] eq 'm' ) {
644
645 # 1 digit month. 1 -> 1.
646 $replacement = sprintf( '%d', $month );
647 }
648 elsif ( $placeholder->[0] eq 'dddd' ) {
649
650 # Full day name. Wednesday (for example.)
651 $replacement = $full_day_name[$wday];
652 }
653 elsif ( $placeholder->[0] eq 'ddd' ) {
654
655 # Short day name. Wed (for example.)
656 $replacement = $short_day_name[$wday];
657 }
658 elsif ( $placeholder->[0] eq 'dd' ) {
659
660 # 2 digit day. 1 -> 01.
661 $replacement = sprintf( '%02d', $day );
662 }
663 elsif ( $placeholder->[0] eq 'd' ) {
664
665 # 1 digit day. 1 -> 1.
666 $replacement = sprintf( '%d', $day );
667 }
668 elsif ( $placeholder->[0] eq 'hh' ) {
669
670 # 2 digit hour.
671 if ($is_12_hour) {
672 my $hour_tmp = $hour % 12;
673 $hour_tmp = 12 if $hour % 12 == 0;
674 $replacement = sprintf( '%d', $hour_tmp );
675 }
676 else {
677 $replacement = sprintf( '%02d', $hour );
678 }
679 }
680 elsif ( $placeholder->[0] eq 'h' ) {
681
682 # 1 digit hour.
683 if ($is_12_hour) {
684 my $hour_tmp = $hour % 12;
685 $hour_tmp = 12 if $hour % 12 == 0;
686 $replacement = sprintf( '%2d', $hour_tmp );
687 }
688 else {
689 $replacement = sprintf( '%d', $hour );
690 }
691 }
692 elsif ( $placeholder->[0] eq 'ss' ) {
693
694 # 2 digit seconds.
695 $replacement = sprintf( '%02d', $sec );
696 }
697 elsif ( $placeholder->[0] eq 's' ) {
698
699 # 1 digit seconds.
700 $replacement = sprintf( '%d', $sec );
701 }
702 elsif ( $placeholder->[0] eq 'am/pm' ) {
703
704 # AM/PM.
705 $replacement = ( $hour >= 12 ) ? 'PM' : 'AM';
706 }
707 elsif ( $placeholder->[0] eq 'a/p' ) {
708
709 # AM/PM.
710 $replacement = ( $hour >= 12 ) ? 'P' : 'A';
711 }
712 elsif ( $placeholder->[0] eq '.' ) {
713
714 # Decimal point for seconds.
715 $replacement = '.';
716 }
717 elsif ( $placeholder->[0] =~ /(^0+$)/ ) {
718
719 # Milliseconds. For example h:ss.000.
720 my $length = length($1);
721 $replacement =
722 substr( sprintf( "%.${length}f", $msec / 1000 ), 2, $length );
723 }
724 elsif ( $placeholder->[0] eq '[h]' ) {
725
726 # Hours modulus 24. 25 displays as 25 not as 1.
727 $replacement = sprintf( '%d', int($number) * 24 + $hour );
728 }
729 elsif ( $placeholder->[0] eq '[mm]' ) {
730
731 # Mins modulus 60. 72 displays as 72 not as 12.
732 $replacement =
733 sprintf( '%d', ( int($number) * 24 + $hour ) * 60 + $min );
734 }
735 elsif ( $placeholder->[0] eq 'ge' ) {
736 require Spreadsheet::ParseExcel::FmtJapan;
737 # Japanese Nengo (aka Gengo) in initialism (abbr. name)
738 $replacement =
739 Spreadsheet::ParseExcel::FmtJapan::CnvNengo( abbr_name => @time );
740 }
741 elsif ( $placeholder->[0] eq 'ggge' ) {
742 require Spreadsheet::ParseExcel::FmtJapan;
743 # Japanese Nengo (aka Gengo) in Kanji (full name)
744 $replacement =
745 Spreadsheet::ParseExcel::FmtJapan::CnvNengo( name => @time );
746 }
747 elsif ( $placeholder->[0] eq '@' ) {
748
749 # Text format.
750 $replacement = $number;
751 }
752 elsif ( $placeholder->[0] eq ',' ) {
753 next;
754 }
755
756 # Substitute the replacement string back into the template.
757 substr( $result, $placeholder->[1], $placeholder->[2],
758 $replacement );
759 }
760 }
761 elsif ( ( $format_mode eq 'number' ) && ( $number =~ $qrNUMBER ) ) {
762
763 # Process non date formats.
764 if (@placeholders) {
765 while ( $placeholders[-1]->[0] eq ',' ) {
766 $comma_count--;
767 substr(
768 $result,
769 $placeholders[-1]->[1],
770 $placeholders[-1]->[2], ''
771 );
772 $number /= 1000;
773 pop @placeholders;
774 }
775
776 my $number_format = join( '', map { $_->[0] } @placeholders );
777 my $number_result;
778 my $str_length = 0;
779 my $engineering = 0;
780 my $is_decimal = 0;
781 my $is_integer = 0;
782 my $after_decimal = undef;
783
784 for my $token ( split //, $number_format ) {
785 if ( $token eq '.' ) {
786 $str_length++;
787 $is_decimal = 1;
788 }
789 elsif ( ( $token eq 'E' ) || ( $token eq 'e' ) ) {
790 $engineering = 1;
791 }
792 elsif ( $token eq '0' ) {
793 $str_length++;
794 $after_decimal++ if $is_decimal;
795 $is_integer = 1;
796 }
797 elsif ( $token eq '#' ) {
798 $after_decimal++ if $is_decimal;
799 $is_integer = 1;
800 }
801 elsif ( $token eq '?' ) {
802 $after_decimal++ if $is_decimal;
803 }
804 }
805
806 $number *= 100.0 if $is_percent;
807
808 my $data = ($is_currency) ? abs($number) : $number + 0;
809
810 if ($is_fraction) {
811 $number_result = sprintf( "%0${str_length}d", int($data) );
812 }
813 else {
814 if ($is_decimal) {
815
816 if ( defined $after_decimal ) {
817 $number_result =
818 sprintf "%0${str_length}.${after_decimal}f", $data;
819 }
820 else {
821 $number_result = sprintf "%0${str_length}f", $data;
822 }
823
824 # Fix for Perl and sprintf not rounding up like Excel.
825 # http://rt.cpan.org/Public/Bug/Display.html?id=45626
826 if ( $data =~ /^${number_result}5/ ) {
827 $number_result =
828 sprintf "%0${str_length}.${after_decimal}f",
829 $data . '1';
830 }
831 }
832 else {
833 $number_result = sprintf( "%0${str_length}.0f", $data );
834 }
835 }
836
837 $number_result = AddComma($number_result) if $comma_count > 0;
838
839 my $number_length = length($number_result);
840 my $decimal_pos = -1;
841 my $replacement;
842
843 for ( my $i = @placeholders - 1 ; $i >= 0 ; $i-- ) {
844 my $placeholder = $placeholders[$i];
845
846 if ( $placeholder->[0] =~
847 /([#0]*)([\.]?)([0#]*)([eE])([\+\-])([0#]+)/ )
848 {
849 substr( $result, $placeholder->[1], $placeholder->[2],
850 MakeE( $placeholder->[0], $number ) );
851 }
852 elsif ( $placeholder->[0] =~ /\// ) {
853 substr( $result, $placeholder->[1], $placeholder->[2],
854 MakeFraction( $placeholder->[0], $number, $is_integer )
855 );
856 }
857 elsif ( $placeholder->[0] eq '.' ) {
858 $number_length--;
859 $decimal_pos = $number_length;
860 }
861 elsif ( $placeholder->[0] eq '+' ) {
862 substr( $result, $placeholder->[1], $placeholder->[2],
863 ( $number > 0 )
864 ? '+'
865 : ( ( $number == 0 ) ? '+' : '-' ) );
866 }
867 elsif ( $placeholder->[0] eq '-' ) {
868 substr( $result, $placeholder->[1], $placeholder->[2],
869 ( $number > 0 )
870 ? ''
871 : ( ( $number == 0 ) ? '' : '-' ) );
872 }
873 elsif ( $placeholder->[0] eq '@' ) {
874 substr( $result, $placeholder->[1], $placeholder->[2],
875 $number );
876 }
877 elsif ( $placeholder->[0] eq '*' ) {
878 substr( $result, $placeholder->[1], $placeholder->[2], '' );
879 }
880 elsif (( $placeholder->[0] eq "\xA2\xA4" )
881 or ( $placeholder->[0] eq "\xA2\xA5" )
882 or ( $placeholder->[0] eq "\x81\xA2" )
883 or ( $placeholder->[0] eq "\x81\xA3" ) )
884 {
885 substr(
886 $result, $placeholder->[1],
887 $placeholder->[2], $placeholder->[0]
888 );
889 }
890 elsif (( $placeholder->[0] eq '(' )
891 or ( $placeholder->[0] eq ')' ) )
892 {
893 substr(
894 $result, $placeholder->[1],
895 $placeholder->[2], $placeholder->[0]
896 );
897 }
898 else {
899 if ( $number_length > 0 ) {
900 if ( $i <= 0 ) {
901 $replacement =
902 substr( $number_result, 0, $number_length );
903 $number_length = 0;
904 }
905 else {
906 my $real_part_length = length( $placeholder->[0] );
907 if ( $decimal_pos >= 0 ) {
908 my $format = $placeholder->[0];
909 $format =~ s/^#+//;
910 $real_part_length = length $format;
911 $real_part_length =
912 ( $number_length <= $real_part_length )
913 ? $number_length
914 : $real_part_length;
915 }
916 else {
917 $real_part_length =
918 ( $number_length <= $real_part_length )
919 ? $number_length
920 : $real_part_length;
921 }
922 $replacement =
923 substr( $number_result,
924 $number_length - $real_part_length,
925 $real_part_length );
926 $number_length -= $real_part_length;
927 }
928 }
929 else {
930 $replacement = '';
931 }
932 substr( $result, $placeholder->[1], $placeholder->[2],
933 "\x00" . $replacement );
934 }
935 }
936 $replacement =
937 ( $number_length > 0 )
938 ? substr( $number_result, 0, $number_length )
939 : '';
940 $result =~ s/\x00/$replacement/;
941 $result =~ s/\x00//g;
942 }
943 }
944 else {
945
946 # Process text formats
947 my $is_text = 0;
948 for ( my $i = @placeholders - 1 ; $i >= 0 ; $i-- ) {
949 my $placeholder = $placeholders[$i];
950 if ( $placeholder->[0] eq '@' ) {
951 substr( $result, $placeholder->[1], $placeholder->[2],
952 $number );
953 $is_text++;
954 }
955 else {
956 substr( $result, $placeholder->[1], $placeholder->[2], '' );
957 }
958 }
959
960 $result = $number unless $is_text;
961
962 } # End of placeholder substitutions.
963
964 # Trim the leading and trailing whitespace from the results.
965 $result =~ s/^\s+//;
966 $result =~ s/\s+$//;
967
968 # Fix for negative currency.
969 $result =~ s/^\$\-/\-\$/;
970 $result =~ s/^\$ \-/\-\$ /;
971
972 # Return color and locale strings if required.
973 if ($want_subformats) {
974 return ( $result, $color, $locale );
975 }
976 else {
977 return $result;
978 }
979}
980
981#------------------------------------------------------------------------------
982# AddComma (for Spreadsheet::ParseExcel::Utility)
983#------------------------------------------------------------------------------
984sub AddComma {
985 my ($sNum) = @_;
986
987 if ( $sNum =~ /^([^\d]*)(\d\d\d\d+)(\.*.*)$/ ) {
988 my ( $sPre, $sObj, $sAft ) = ( $1, $2, $3 );
989 for ( my $i = length($sObj) - 3 ; $i > 0 ; $i -= 3 ) {
990 substr( $sObj, $i, 0, ',' );
991 }
992 return $sPre . $sObj . $sAft;
993 }
994 else {
995 return $sNum;
996 }
997}
998
999#------------------------------------------------------------------------------
1000# MakeFraction (for Spreadsheet::ParseExcel::Utility)
1001#------------------------------------------------------------------------------
1002sub MakeFraction {
1003 my ( $sFmt, $iData, $iFlg ) = @_;
1004 my $iBunbo;
1005 my $iShou;
1006
1007 #1. Init
1008 # print "FLG: $iFlg\n";
1009 if ($iFlg) {
1010 $iShou = $iData - int($iData);
1011 return '' if ( $iShou == 0 );
1012 }
1013 else {
1014 $iShou = $iData;
1015 }
1016 $iShou = abs($iShou);
1017 my $sSWk;
1018
1019 #2.Calc BUNBO
1020 #2.1 BUNBO defined
1021 if ( $sFmt =~ /\/(\d+)$/ ) {
1022 $iBunbo = $1;
1023 return sprintf( "%d/%d", $iShou * $iBunbo, $iBunbo );
1024 }
1025 else {
1026
1027 #2.2 Calc BUNBO
1028 $sFmt =~ /\/(\?+)$/;
1029 my $iKeta = length($1);
1030 my $iSWk = 1;
1031 my $sSWk = '';
1032 my $iBunsi;
1033 for ( my $iBunbo = 2 ; $iBunbo < 10**$iKeta ; $iBunbo++ ) {
1034 $iBunsi = int( $iShou * $iBunbo + 0.5 );
1035 my $iCmp = abs( $iShou - ( $iBunsi / $iBunbo ) );
1036 if ( $iCmp < $iSWk ) {
1037 $iSWk = $iCmp;
1038 $sSWk = sprintf( "%d/%d", $iBunsi, $iBunbo );
1039 last if ( $iSWk == 0 );
1040 }
1041 }
1042 return $sSWk;
1043 }
1044}
1045
1046#------------------------------------------------------------------------------
1047# MakeE (for Spreadsheet::ParseExcel::Utility)
1048#------------------------------------------------------------------------------
1049sub MakeE {
1050 my ( $sFmt, $iData ) = @_;
1051
1052 $sFmt =~ /(([#0]*)[\.]?[#0]*)([eE])([\+\-][0#]+)/;
1053 my ( $sKari, $iKeta, $sE, $sSisu ) = ( $1, length($2), $3, $4 );
1054 $iKeta = 1 if ( $iKeta <= 0 );
1055
1056 my $iLog10 = 0;
1057 $iLog10 = ( $iData == 0 ) ? 0 : ( log( abs($iData) ) / log(10) );
1058 $iLog10 = (
1059 int( $iLog10 / $iKeta ) +
1060 ( ( ( $iLog10 - int( $iLog10 / $iKeta ) ) < 0 ) ? -1 : 0 ) ) * $iKeta;
1061
1062 my $sUe = ExcelFmt( $sKari, $iData * ( 10**( $iLog10 * -1 ) ), 0 );
1063 my $sShita = ExcelFmt( $sSisu, $iLog10, 0 );
1064 return $sUe . $sE . $sShita;
1065}
1066
1067#------------------------------------------------------------------------------
1068# LeapYear (for Spreadsheet::ParseExcel::Utility)
1069#------------------------------------------------------------------------------
1070sub LeapYear {
1071 my ($iYear) = @_;
1072 return 1 if ( $iYear == 1900 ); #Special for Excel
1073 return ( ( ( $iYear % 4 ) == 0 )
1074 && ( ( $iYear % 100 ) || ( $iYear % 400 ) == 0 ) )
1075 ? 1
1076 : 0;
1077}
1078
1079#------------------------------------------------------------------------------
1080# LocaltimeExcel (for Spreadsheet::ParseExcel::Utility)
1081#------------------------------------------------------------------------------
1082sub LocaltimeExcel {
1083 my ( $iSec, $iMin, $iHour, $iDay, $iMon, $iYear, $iwDay, $iMSec, $flg1904 )
1084 = @_;
1085
1086 #0. Init
1087 $iMon++;
1088 $iYear += 1900;
1089
1090 #1. Calc Time
1091 my $iTime;
1092 $iTime = $iHour;
1093 $iTime *= 60;
1094 $iTime += $iMin;
1095 $iTime *= 60;
1096 $iTime += $iSec;
1097 $iTime += $iMSec / 1000.0 if ( defined($iMSec) );
1098 $iTime /= 86400.0; #3600*24(1day in seconds)
1099 my $iY;
1100 my $iYDays;
1101
1102 #2. Calc Days
1103 if ($flg1904) {
1104 $iY = 1904;
1105 $iTime--; #Start from Jan 1st
1106 $iYDays = 366;
1107 }
1108 else {
1109 $iY = 1900;
1110 $iYDays = 366; #In Excel 1900 is leap year (That's not TRUE!)
1111 }
1112 while ( $iY < $iYear ) {
1113 $iTime += $iYDays;
1114 $iY++;
1115 $iYDays = ( LeapYear($iY) ) ? 366 : 365;
1116 }
1117 for ( my $iM = 1 ; $iM < $iMon ; $iM++ ) {
1118 if ( $iM == 1
1119 || $iM == 3
1120 || $iM == 5
1121 || $iM == 7
1122 || $iM == 8
1123 || $iM == 10
1124 || $iM == 12 )
1125 {
1126 $iTime += 31;
1127 }
1128 elsif ( $iM == 4 || $iM == 6 || $iM == 9 || $iM == 11 ) {
1129 $iTime += 30;
1130 }
1131 elsif ( $iM == 2 ) {
1132 $iTime += ( LeapYear($iYear) ) ? 29 : 28;
1133 }
1134 }
1135 $iTime += $iDay;
1136 return $iTime;
1137}
1138
11391800nsmy @month_days = qw(
1140 0 31 28 31 30 31 30 31 31 30 31 30 31
1141);
1142
1143#------------------------------------------------------------------------------
1144# ExcelLocaltime (for Spreadsheet::ParseExcel::Utility)
1145#------------------------------------------------------------------------------
1146sub ExcelLocaltime {
1147
1148 my ( $dObj, $flg1904 ) = @_;
1149 my ( $iSec, $iMin, $iHour, $iDay, $iMon, $iYear, $iwDay, $iMSec );
1150 my ( $iDt, $iTime, $iYDays, $iMD );
1151
1152 $iDt = int($dObj);
1153 $iTime = $dObj - $iDt;
1154
1155 #1. Calc Days
1156 if ($flg1904) {
1157 $iYear = 1904;
1158 $iDt++; #Start from Jan 1st
1159 $iYDays = 366;
1160 $iwDay = ( ( $iDt + 4 ) % 7 );
1161 }
1162 else {
1163 $iYear = 1900;
1164 $iYDays = 366; #In Excel 1900 is leap year (That's not TRUE!)
1165 $iwDay = ( ( $iDt + 6 ) % 7 );
1166 }
1167 while ( $iDt > $iYDays ) {
1168 $iDt -= $iYDays;
1169 $iYear++;
1170 $iYDays =
1171 ( ( ( $iYear % 4 ) == 0 )
1172 && ( ( $iYear % 100 ) || ( $iYear % 400 ) == 0 ) ) ? 366 : 365;
1173 }
1174 $iYear -= 1900; # Localtime year is relative to 1900.
1175
1176 for ( $iMon = 1 ; $iMon <= 12 ; $iMon++ ) {
1177 $iMD = $month_days[$iMon];
1178 $iMD++ if $iMon == 2 and $iYear % 4 == 0;
1179
1180 last if ( $iDt <= $iMD );
1181 $iDt -= $iMD;
1182 }
1183
1184 #2. Calc Time
1185 $iDay = $iDt;
1186 $iTime += ( 0.0005 / 86400.0 );
1187 if ($iTime >= 1.0)
1188 {
1189 $iTime -= int($iTime);
1190 $iwDay = ($iwDay == 6) ? 0 : $iwDay + 1;
1191 if ($iDay == $iMD)
1192 {
1193 if ($iMon == 12)
1194 {
1195 $iMon = 1;
1196 $iYear++;
1197 }
1198 else
1199 {
1200 $iMon++;
1201 }
1202 $iDay = 1;
1203 }
1204 else
1205 {
1206 $iDay++;
1207 }
1208 }
1209
1210 # Localtime month is 0 based.
1211 $iMon -= 1;
1212 $iTime *= 24.0;
1213 $iHour = int($iTime);
1214 $iTime -= $iHour;
1215 $iTime *= 60.0;
1216 $iMin = int($iTime);
1217 $iTime -= $iMin;
1218 $iTime *= 60.0;
1219 $iSec = int($iTime);
1220 $iTime -= $iSec;
1221 $iTime *= 1000.0;
1222 $iMSec = int($iTime);
1223
1224 return ( $iSec, $iMin, $iHour, $iDay, $iMon, $iYear, $iwDay, $iMSec );
1225}
1226
1227# -----------------------------------------------------------------------------
1228# col2int (for Spreadsheet::ParseExcel::Utility)
1229#------------------------------------------------------------------------------
1230# converts a excel row letter into an int for use in an array
1231sub col2int {
1232 my $result = 0;
1233 my $str = shift;
1234 my $incr = 0;
1235
1236 for ( my $i = length($str) ; $i > 0 ; $i-- ) {
1237 my $char = substr( $str, $i - 1 );
1238 my $curr += ord( lc($char) ) - ord('a') + 1;
1239 $curr *= $incr if ($incr);
1240 $result += $curr;
1241 $incr += 26;
1242 }
1243
1244 # this is one out as we range 0..x-1 not 1..x
1245 $result--;
1246
1247 return $result;
1248}
1249
1250# -----------------------------------------------------------------------------
1251# int2col (for Spreadsheet::ParseExcel::Utility)
1252#------------------------------------------------------------------------------
1253### int2col
1254# convert a column number into column letters
1255# @note this is quite a brute force coarse method
1256# does not manage values over 701 (ZZ)
1257# @arg number, to convert
1258# @returns string, column name
1259#
1260sub int2col {
1261 my $out = "";
1262 my $val = shift;
1263
1264 do {
1265 $out .= chr( ( $val % 26 ) + ord('A') );
1266 $val = int( $val / 26 ) - 1;
1267 } while ( $val >= 0 );
1268
1269 return scalar reverse $out;
1270}
1271
1272# -----------------------------------------------------------------------------
1273# sheetRef (for Spreadsheet::ParseExcel::Utility)
1274#------------------------------------------------------------------------------
1275# -----------------------------------------------------------------------------
1276### sheetRef
1277# convert an excel letter-number address into a useful array address
1278# @note that also Excel uses X-Y notation, we normally use Y-X in arrays
1279# @args $str, excel coord eg. A2
1280# @returns an array - 2 elements - column, row, or undefined
1281#
1282sub sheetRef {
1283 my $str = shift;
1284 my @ret;
1285
1286 $str =~ m/^(\D+)(\d+)$/;
1287
1288 if ( $1 && $2 ) {
1289 push( @ret, $2 - 1, col2int($1) );
1290 }
1291 if ( $ret[0] < 0 ) {
1292 undef @ret;
1293 }
1294
1295 return @ret;
1296}
1297
1298# -----------------------------------------------------------------------------
1299# xls2csv (for Spreadsheet::ParseExcel::Utility)
1300#------------------------------------------------------------------------------
1301### xls2csv
1302# convert a chunk of an excel file into csv text chunk
1303# @args $param, sheet-colrow:colrow (1-A1:B2 or A1:B2 for sheet 1
1304# @args $rotate, 0 or 1 decides if output should be rotated or not
1305# @returns string containing a chunk of csv
1306#
1307sub xls2csv {
1308 my ( $filename, $regions, $rotate ) = @_;
1309 my $sheet = 0;
1310
1311 # We need Text::CSV_XS for proper CSV handling.
1312 require Text::CSV_XS;
1313
1314 # extract any sheet number from the region string
1315 $regions =~ m/^(\d+)-(.*)/;
1316
1317 if ($2) {
1318 $sheet = $1 - 1;
1319 $regions = $2;
1320 }
1321
1322 # now extract the start and end regions
1323 $regions =~ m/(.*):(.*)/;
1324
1325 if ( !$1 || !$2 ) {
1326 print STDERR "Bad Params";
1327 return "";
1328 }
1329
1330 my @start = sheetRef($1);
1331 my @end = sheetRef($2);
1332 if ( !@start ) {
1333 print STDERR "Bad coorinates - $1";
1334 return "";
1335 }
1336 if ( !@end ) {
1337 print STDERR "Bad coorinates - $2";
1338 return "";
1339 }
1340
1341 if ( $start[1] > $end[1] ) {
1342 print STDERR "Bad COLUMN ordering\n";
1343 print STDERR "Start column " . int2col( $start[1] );
1344 print STDERR " after end column " . int2col( $end[1] ) . "\n";
1345 return "";
1346 }
1347 if ( $start[0] > $end[0] ) {
1348 print STDERR "Bad ROW ordering\n";
1349 print STDERR "Start row " . ( $start[0] + 1 );
1350 print STDERR " after end row " . ( $end[0] + 1 ) . "\n";
1351 exit;
1352 }
1353
1354 # start the excel object now
1355 my $oExcel = new Spreadsheet::ParseExcel;
1356 my $oBook = $oExcel->Parse($filename);
1357
1358 # open the sheet
1359 my $oWkS = $oBook->{Worksheet}[$sheet];
1360
1361 # now check that the region exists in the file
1362 # if not truncate to the possible region
1363 # output a warning msg
1364 if ( $start[1] < $oWkS->{MinCol} ) {
1365 print STDERR int2col( $start[1] )
1366 . " < min col "
1367 . int2col( $oWkS->{MinCol} )
1368 . " Resetting\n";
1369 $start[1] = $oWkS->{MinCol};
1370 }
1371 if ( $end[1] > $oWkS->{MaxCol} ) {
1372 print STDERR int2col( $end[1] )
1373 . " > max col "
1374 . int2col( $oWkS->{MaxCol} )
1375 . " Resetting\n";
1376 $end[1] = $oWkS->{MaxCol};
1377 }
1378 if ( $start[0] < $oWkS->{MinRow} ) {
1379 print STDERR ""
1380 . ( $start[0] + 1 )
1381 . " < min row "
1382 . ( $oWkS->{MinRow} + 1 )
1383 . " Resetting\n";
1384 $start[0] = $oWkS->{MinCol};
1385 }
1386 if ( $end[0] > $oWkS->{MaxRow} ) {
1387 print STDERR ""
1388 . ( $end[0] + 1 )
1389 . " > max row "
1390 . ( $oWkS->{MaxRow} + 1 )
1391 . " Resetting\n";
1392 $end[0] = $oWkS->{MaxRow};
1393
1394 }
1395
1396 my $x1 = $start[1];
1397 my $y1 = $start[0];
1398 my $x2 = $end[1];
1399 my $y2 = $end[0];
1400
1401 my @cell_data;
1402 my $row = 0;
1403
1404 if ( !$rotate ) {
1405 for ( my $y = $y1 ; $y <= $y2 ; $y++ ) {
1406 for ( my $x = $x1 ; $x <= $x2 ; $x++ ) {
1407 my $cell = $oWkS->{Cells}[$y][$x];
1408
1409 my $value;
1410 if ( defined $cell ) {
1411 $value .= $cell->value();
1412 }
1413 else {
1414 $value = '';
1415 }
1416
1417 push @{ $cell_data[$row] }, $value;
1418 }
1419 $row++;
1420 }
1421 }
1422 else {
1423 for ( my $x = $x1 ; $x <= $x2 ; $x++ ) {
1424 for ( my $y = $y1 ; $y <= $y2 ; $y++ ) {
1425 my $cell = $oWkS->{Cells}[$y][$x];
1426
1427 my $value;
1428 if ( defined $cell ) {
1429 $value .= $cell->value();
1430 }
1431 else {
1432 $value = '';
1433 }
1434
1435 push @{ $cell_data[$row] }, $value;
1436 }
1437 $row++;
1438 }
1439 }
1440
1441 # Create the CSV output string.
1442 my $csv = Text::CSV_XS->new( { binary => 1, eol => $/ } );
1443 my $output = "";
1444
1445 for my $row (@cell_data) {
1446 $csv->combine(@$row);
1447 $output .= $csv->string();
1448 }
1449
1450 return $output;
1451}
1452
145314µs1;
1454
1455__END__










Spreadsheet-ParseXLSX-0.35/nytprof/parent-pm-94-line.html0000644000175000017500000004724614576335353022127 0ustar michamicha Profile of parent.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/parent.pm
StatementsExecuted 48 statements in 250µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
553426µs514µsparent::::importparent::import
1118µs10µsparent::::BEGIN@2parent::BEGIN@2
1115µs9µsparent::::BEGIN@21parent::BEGIN@21
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package parent;
2275µs212µs
# spent 10µs (8+2) within parent::BEGIN@2 which was called: # once (8µs+2µs) by File::Temp::BEGIN@167 at line 2
use strict;
# spent 10µs making 1 call to parent::BEGIN@2 # spent 2µs making 1 call to strict::import
3
41300nsour $VERSION = '0.241';
5
6
# spent 514µs (426+88) within parent::import which was called 5 times, avg 103µs/call: # once (385µs+77µs) by Encode::UTF_EBCDIC::BEGIN@178 at line 178 of Encode.pm # once (12µs+5µs) by File::Temp::BEGIN@167 at line 167 of File/Temp.pm # once (11µs+2µs) by Encode::utf8::BEGIN@215 at line 215 of Encode.pm # once (10µs+3µs) by Encode::XS::BEGIN@210 at line 210 of Encode.pm # once (8µs+1000ns) by Time::Local::BEGIN@10 at line 10 of Time/Local.pm
sub import {
751µs my $class = shift;
8
952µs my $inheritor = caller(0);
10
1153µs if ( @_ and $_[0] eq '-norequire' ) {
12 shift @_;
13 } else {
1455µs for ( my @filename = @_ ) {
15626µs615µs s{::|'}{/}g;
# spent 15µs making 6 calls to CORE::subst, avg 2µs/call
16659µs require "$_.pm"; # dies if the file is not found
17 }
18 }
19
20 {
21754µs213µs
# spent 9µs (5+4) within parent::BEGIN@21 which was called: # once (5µs+4µs) by File::Temp::BEGIN@167 at line 21
no strict 'refs';
# spent 9µs making 1 call to parent::BEGIN@21 # spent 4µs making 1 call to strict::unimport
22523µs push @{"$inheritor\::ISA"}, @_; # dies if a loop is detected
23 };
24};
25
2612µs1;
27
28__END__










Spreadsheet-ParseXLSX-0.35/nytprof/index.html0000644000175000017500000023441014576335353020143 0ustar michamicha NYTProf bug-md-11.t
Performance Profile Index
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Profile of t/bug-md-11.t for 70.9s (of 158s), executing 109009069 statements and 19682587 subroutine calls in 141 source files and 84 string evals.
SVG not supported

The Flame Graph above is a visualization of the time spent in distinct call stacks. The colors and x-axis position are not meaningful.

Top 15 Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
364369329.97s35.2sXML::Twig::::_twig_start XML::Twig::_twig_start
1095679216.34s15.8sXML::Twig::::_ns_info XML::Twig::_ns_info
398167215.90s22.1sXML::Twig::::_replace_ns XML::Twig::_replace_ns
364369225.66s25.4sXML::Twig::::_twig_end XML::Twig::_twig_end
15608115.52s12.9sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]
380001215.08s7.90sXML::Twig::::_a_proper_ns_prefix XML::Twig::_a_proper_ns_prefix
67598523.07s3.36sXML::Parser::Expat::::setHandlers XML::Parser::Expat::setHandlers
7112.57s70.4sXML::Parser::Expat::::ParseString XML::Parser::Expat::ParseString (xsub)
364369112.12s2.69sXML::Twig::::_replace_prefix XML::Twig::_replace_prefix
1460048211.73s1.73sXML::Parser::Expat::::namespace XML::Parser::Expat::namespace
364369111.71s1.82sXML::Twig::Elt::::new XML::Twig::Elt::new
4215601421.66s2.08sXML::Twig::Elt::::first_child XML::Twig::Elt::first_child
364369111.56s1.69sXML::Twig::Elt::::set_atts XML::Twig::Elt::set_atts
380001111.51s1.51sXML::Parser::Expat::::current_ns_prefixes XML::Parser::Expat::current_ns_prefixes
1520689211.31s1.31sXML::Parser::Expat::::expand_ns_prefix XML::Parser::Expat::expand_ns_prefix

You can view a treemap of subroutine exclusive time, grouped by package.
NYTProf also generates call-graph files in Graphviz format: inter-package calls, all inter-subroutine calls (probably too complex to render easily).

You can hover over some table cells and headings to view extra information.
Some table column headings can be clicked on to sort the table by that column.
Source Code Files — ordered by exclusive time then name
StmtsExclusive
Time
ReportsSource File
7596058944.4slineXML/Twig.pm (including 52 string evals)
2195026219.7slineXML/Parser/Expat.pm
91867784.67sline/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
12691001.21slineSpreadsheet/ParseExcel/FmtDefault.pm
608731733mslineSpreadsheet/ParseExcel/Cell.pm
559822.9mslineArchive/Zip/Member.pm
767.43mslineSpreadsheet/ParseExcel.pm
2866.59mslineTest/Builder.pm
2636.48mslineJSON/PP.pm (including 18 string evals)
1374.63mslineFile/Temp.pm
19014.47mslineExporter.pm
3754.26mslineArchive/Zip/Archive.pm
544.25mslineOLE/Storage_Lite.pm
3453.95mslineTest2/API.pm (including 1 string eval)
53193.69mslineconstant.pm
52033.51mslinewarnings.pm
5443.46mslineArchive/Zip.pm
203.38mslineGraphics/ColorUtils.pm
23363.26mslineTest2/Util/HashBase.pm
133.20mslineSpreadsheet/ParseExcel/Utility.pm
20003.16mslineCompress/Raw/Zlib.pm (including 1 string eval)
923.14mslineCarp.pm (including 4 string evals)
402.99mslineTest/More.pm
382.91mslinePOSIX.pm
7252.65mslineDigest/Perl/MD5.pm
292.65mslineFile/Find.pm
142.63msline/home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
3682.32mslineIO/Handle.pm
11192.23mslineExporter/Heavy.pm
1432.23mslineTest2/API/Instance.pm (including 1 string eval)
462.22mslineCwd.pm
2212.09mslineTest2/Hub.pm
332.08mslineFile/Path.pm (including 1 string eval)
1211.98mslineTest2/Formatter/TAP.pm
1721.92mslineTest2/API/Context.pm
651.89mslineTest2/Event.pm
1161.84mslineTest2/Util.pm
351.69mslineStorable.pm
451.61mslineConfig_heavy.pl
271.58mslineURI.pm
1241.54mslineEncode.pm
11581.52mslineXML/Parser.pm
4531.41mslineEncode/Alias.pm
6261.39mslineArchive/Zip/ZipFileMember.pm
241.31mslineFile/Spec/Unix.pm
301.25mslineDigest/SHA.pm
771.30mslineJSON.pm (including 2 string evals)
321.17mslineFile/Copy.pm (including 1 string eval)
1601.06mslinebase.pm
23974µsline/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm
34918µslineFile/Basename.pm
161875µslineoverload.pm
324874µslinevars.pm
37810µslineTime/Local.pm
130808µslineIO/File.pm
15785µslineCryptX.pm
21773µslineSpreadsheet/ParseExcel/Worksheet.pm
274707µslineURI/Escape.pm
57619µslineSymbol.pm
23617µslineList/Util.pm
288612µslineErrno.pm (including 2 string evals)
15608µslineTest2/Util/Facets2Legacy.pm
41592µslineTime/HiRes.pm (including 1 string eval)
38584µslineTest2/EventFacet/Trace.pm
7563µslineTie/Hash.pm
64555µslineConfig.pm
384495µslineArchive/Zip/FileMember.pm
38474µslineTest2/API/Stack.pm
41472µslineTest2/Event/V2.pm
14464µslineTest2/Hub/Interceptor.pm
13442µslineTest2/Event/Subtest.pm
13424µslineTest2/Event/Ok.pm
89420µslineIO/Seekable.pm
25416µslineTest2/Event/Plan.pm
15392µslineFile/Glob.pm
21391µslineTest/Builder/Formatter.pm
22379µslineTest2/Hub/Subtest.pm
11377µslineFcntl.pm
7371µsline/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm
18353µslineEncode/Encoding.pm
11339µslineEncode/Config.pm
7338µsline/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm
13336µslineSpreadsheet/ParseExcel/Workbook.pm
43334µslineTest2/Util/ExternalMeta.pm
66328µslineFileHandle.pm
11320µslineIO.pm
39317µslineTest/Builder/Module.pm
15306µslineTest2/EventFacet/Meta.pm
12304µslineScalar/Util.pm
10298µslineCrypt/RC4.pm
12291µslineArchive/Zip/DirectoryMember.pm
14291µslineTest2/Event/Fail.pm
14287µslineTest2/Event/Pass.pm
10287µslineArchive/Zip/NewFileMember.pm
14277µslineMIME/Base64.pm
11268µslineEncode/MIME/Name.pm
8260µslinemro.pm
48250µslineparent.pm
6246µslineDigest/base.pm
18245µslineoverloading.pm
10240µslineArchive/Zip/StringMember.pm
12222µslineTest2/EventFacet/Parent.pm
11209µslineTest2/EventFacet.pm
10197µslineTest2/Event/Exception.pm
10189µslineTest2/Event/Skip.pm
8182µslineCrypt/Mode/CBC.pm
10175µslineTest2/Event/Bail.pm
10171µslineTest2/Event/Diag.pm
10169µslineTest2/Event/Note.pm
11169µslineCrypt/Cipher.pm
12164µslinebytes.pm
10145µslineTest2/Event/Waiting.pm
8144µslineCrypt/Mode/ECB.pm
9143µsline/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Cell.pm
9143µslineFile/Spec.pm
15124µslineTest2/Formatter.pm
8120µslineTest/Builder/TodoDiag.pm
51117µslineSpreadsheet/ParseExcel/Format.pm
11115µslineutf8.pm
10113µslineTest2/EventFacet/Hub.pm
10112µslineJSON/PP/Boolean.pm
10110µslineTest2/EventFacet/Plan.pm
10107µslineTest2/EventFacet/Control.pm
10106µslineTest2/EventFacet/Error.pm
1098µslineTest2/EventFacet/Amnesty.pm
1096µslineTest2/EventFacet/Info.pm
1095µslineTest2/EventFacet/About.pm
1095µslineTest2/EventFacet/Assert.pm
791µslineSelectSaver.pm
685µslineCarp/Heavy.pm
1570µslineSpreadsheet/ParseExcel/Font.pm
857µslineTest2/Util/Trace.pm
2157µslineUNIVERSAL.pm
651µslineTest2/Hub/Interceptor/Terminator.pm
535µslinebuiltin.pm
2725µslinewarnings/register.pm
717µslineinteger.pm
23µslinePerlIO.pm
13µslineConfig_git.pl
00slinestrict.pm
00slineXSLoader.pm
10900913870.9sTotal (-69 statements are unaccounted for)
773114503msAverage
464µsMedian
0.00036Deviation










Spreadsheet-ParseXLSX-0.35/nytprof/Cell-pm-170-line.html0000644000175000017500000006236614576335353021570 0ustar michamicha Profile of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Cell.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Cell.pm
StatementsExecuted 9 statements in 143µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs12µsSpreadsheet::ParseXLSX::Cell::::BEGIN@3Spreadsheet::ParseXLSX::Cell::BEGIN@3
1113µs19µsSpreadsheet::ParseXLSX::Cell::::BEGIN@4Spreadsheet::ParseXLSX::Cell::BEGIN@4
1113µs34µsSpreadsheet::ParseXLSX::Cell::::BEGIN@11Spreadsheet::ParseXLSX::Cell::BEGIN@11
1112µs2µsSpreadsheet::ParseXLSX::Cell::::BEGIN@10Spreadsheet::ParseXLSX::Cell::BEGIN@10
0000s0sSpreadsheet::ParseXLSX::Cell::::DESTROYSpreadsheet::ParseXLSX::Cell::DESTROY
0000s0sSpreadsheet::ParseXLSX::Cell::::is_mergedSpreadsheet::ParseXLSX::Cell::is_merged
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseXLSX::Cell;
2
3218µs213µs
# spent 12µs (10+1) within Spreadsheet::ParseXLSX::Cell::BEGIN@3 which was called: # once (10µs+1µs) by Spreadsheet::ParseXLSX::BEGIN@18 at line 3
use strict;
# spent 12µs making 1 call to Spreadsheet::ParseXLSX::Cell::BEGIN@3 # spent 2µs making 1 call to strict::import
4216µs234µs
# spent 19µs (3+15) within Spreadsheet::ParseXLSX::Cell::BEGIN@4 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@18 at line 4
use warnings;
# spent 19µs making 1 call to Spreadsheet::ParseXLSX::Cell::BEGIN@4 # spent 15µs making 1 call to warnings::import
5
6# VERSION
7
8# ABSTRACT: wrapper class around L<Spreadsheet::ParseExcel::Cell>
9
10212µs12µs
# spent 2µs within Spreadsheet::ParseXLSX::Cell::BEGIN@10 which was called: # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@18 at line 10
use Spreadsheet::ParseXLSX ();
# spent 2µs making 1 call to Spreadsheet::ParseXLSX::Cell::BEGIN@10
11295µs264µs
# spent 34µs (3+31) within Spreadsheet::ParseXLSX::Cell::BEGIN@11 which was called: # once (3µs+31µs) by Spreadsheet::ParseXLSX::BEGIN@18 at line 11
use base 'Spreadsheet::ParseExcel::Cell';
# spent 34µs making 1 call to Spreadsheet::ParseXLSX::Cell::BEGIN@11 # spent 31µs making 1 call to base::import
12
13
14=head1 SYNOPSIS
15
16 use Spreadsheet::ParseXLSX::Cell;
17
18 my $cell = Spreadsheet::ParseXLSX::Cell->new(
19 Sheet => $sheet,
20 Row => $row,
21 Col => $row,
22 ...
23 );
24
25 my $isMerged = $cell->is_merged();
26 # see Spreadsheet::ParseExcel::Cell for further documentation
27
28=cut
29
30sub DESTROY {
31 my $self = shift;
32
33 #$self->SUPER::DESTROY();
34
35 undef $self->{Sheet}; # break circular dependencies
36}
37
38=method is_merged($sheet, $row, $col)
39
40Returns true if the cell is merged being part of the given sheet, located at
41the given row and column. Returns undef if the current cell is not connected to
42any sheet:
43
44C<$sheet> defaults to the cell's C<{Sheet}> property,
45C<$row> to C<{Row}> and
46C<$col> to the C<{Col}.
47
48
49=cut
50
51sub is_merged {
52 my ($self, $sheet, $row, $col) = @_;
53
54 return $self->{Merged} if defined $self->{Merged};
55
56 $sheet //= $self->{Sheet};
57 $row //= $self->{Row};
58 $col //= $self->{Col};
59
60 return unless defined $sheet && defined $row && defined $col;
61
62 return $self->{Merged} = Spreadsheet::ParseXLSX::_is_merged(undef, $sheet, $row, $col);
63}
64
6512µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 74)[XML-Twig-pm-5871]-191-line.html0000644000175000017500000004453214576335353024355 0ustar michamicha Profile of (eval 74)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 74)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 22 statements in 125µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

NOTE!
The data used to generate this report page was merged from 3 of the 37 executions
of the string eval on line 5871 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs17µsXML::Twig::Elt::::BEGIN@1.36XML::Twig::Elt::BEGIN@1.36
13317µs7µsXML::Twig::Elt::::__ANON__[(eval 130)[XML/Twig.pm:5871]:1]XML::Twig::Elt::__ANON__[(eval 130)[XML/Twig.pm:5871]:1] (merge of 3 subs)
1117µs18µsXML::Twig::Elt::::BEGIN@1.74XML::Twig::Elt::BEGIN@1.74
1116µs16µsXML::Twig::Elt::::BEGIN@1.18XML::Twig::Elt::BEGIN@1.18
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
122125µs681µs
# spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.18 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 18µs (7+11) within XML::Twig::Elt::BEGIN@1.74 which was called: # once (7µs+11µs) by XML::Twig::Elt::_install_cond at line 1 # spent 7µs within XML::Twig::Elt::__ANON__[(eval 130)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 13 times, avg 569ns/call: # (data for this subroutine includes 2 others that were merged with it) # 11 times (4µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 409ns/call # once (3µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm # once (300ns+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm # spent 17µs (8+9) within XML::Twig::Elt::BEGIN@1.36 which was called: # once (8µs+9µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 34) ? $_[0] : undef; }
# spent 30µs making 3 calls to warnings::unimport, avg 10µs/call # spent 18µs making 1 call to XML::Twig::Elt::BEGIN@1.74 # spent 17µs making 1 call to XML::Twig::Elt::BEGIN@1.36 # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.18
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 59)[XML-Twig-pm-5871]-176-line.html0000644000175000017500000004047314576335353024363 0ustar michamicha Profile of (eval 59)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 59)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 9 statements in 45µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
6117µs7µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs18µsXML::Twig::Elt::::BEGIN@1.3XML::Twig::Elt::BEGIN@1.3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1945µs229µs
# spent 7µs within XML::Twig::Elt::__ANON__[(eval 59)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 6 times, avg 1µs/call: # 6 times (7µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm, avg 1µs/call # spent 18µs (6+11) within XML::Twig::Elt::BEGIN@1.3 which was called: # once (6µs+11µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 7) ? $_[0] : undef; }
# spent 18µs making 1 call to XML::Twig::Elt::BEGIN@1.3 # spent 11µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 86)[XML-Twig-pm-5871]-203-line.html0000644000175000017500000004114714576335353024351 0ustar michamicha Profile of (eval 86)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 86)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 106 statements in 120µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1032191µs120µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1115µs15µsXML::Twig::Elt::::BEGIN@1.30XML::Twig::Elt::BEGIN@1.30
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1106120µs10554µs
# spent 120µs (91+30) within XML::Twig::Elt::__ANON__[(eval 86)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 103 times, avg 1µs/call: # 102 times (88µs+27µs) by XML::Twig::Elt::next_elt at line 6460 of XML/Twig.pm, avg 1µs/call # once (3µs+2µs) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm # spent 15µs (5+10) within XML::Twig::Elt::BEGIN@1.30 which was called: # once (5µs+10µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ( $_[0]->gi eq "s:numFmts") ? $_[0] : undef; }
# spent 30µs making 103 calls to XML::Twig::Elt::gi, avg 286ns/call # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.30 # spent 10µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Hub-pm-34-line.html0000644000175000017500000033563614576335353022350 0ustar michamicha Profile of Test2/Hub.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Hub.pm
StatementsExecuted 221 statements in 2.09ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111364µs463µsTest2::Hub::::BEGIN@14Test2::Hub::BEGIN@14
31145µs257µsTest2::Hub::::processTest2::Hub::process
33342µs332µsTest2::Hub::::sendTest2::Hub::send
11132µs186µsTest2::Hub::::finalizeTest2::Hub::finalize
33313µs16µsTest2::Hub::::is_passingTest2::Hub::is_passing
11110µs11µsTest2::Hub::::BEGIN@2Test2::Hub::BEGIN@2
1119µs62µsTest2::Hub::::BEGIN@12Test2::Hub::BEGIN@12
1119µs13µsTest2::Hub::::initTest2::Hub::init
6629µs10µsTest2::Hub::::planTest2::Hub::plan
1116µs301µsTest2::Hub::::BEGIN@15Test2::Hub::BEGIN@15
5425µs5µsTest2::Hub::::formatTest2::Hub::format
1114µs4µsTest2::Hub::::pre_filterTest2::Hub::pre_filter
1114µs26µsTest2::Hub::::BEGIN@8Test2::Hub::BEGIN@8
1114µs30µsTest2::Hub::::BEGIN@9Test2::Hub::BEGIN@9
1113µs13µsTest2::Hub::::BEGIN@11Test2::Hub::BEGIN@11
1113µs20µsTest2::Hub::::BEGIN@3Test2::Hub::BEGIN@3
1112µs2µsTest2::Hub::::cullTest2::Hub::cull
111900ns900nsTest2::Hub::::is_subtestTest2::Hub::is_subtest
0000s0sTest2::Hub::::DESTROYTest2::Hub::DESTROY
0000s0sTest2::Hub::::_tb_resetTest2::Hub::_tb_reset
0000s0sTest2::Hub::::add_context_acquireTest2::Hub::add_context_acquire
0000s0sTest2::Hub::::add_context_initTest2::Hub::add_context_init
0000s0sTest2::Hub::::add_context_releaseTest2::Hub::add_context_release
0000s0sTest2::Hub::::check_planTest2::Hub::check_plan
0000s0sTest2::Hub::::filterTest2::Hub::filter
0000s0sTest2::Hub::::follow_upTest2::Hub::follow_up
0000s0sTest2::Hub::::inheritTest2::Hub::inherit
0000s0sTest2::Hub::::is_localTest2::Hub::is_local
0000s0sTest2::Hub::::listenTest2::Hub::listen
0000s0sTest2::Hub::::pre_unfilterTest2::Hub::pre_unfilter
0000s0sTest2::Hub::::remove_context_acquireTest2::Hub::remove_context_acquire
0000s0sTest2::Hub::::remove_context_initTest2::Hub::remove_context_init
0000s0sTest2::Hub::::remove_context_releaseTest2::Hub::remove_context_release
0000s0sTest2::Hub::::reset_stateTest2::Hub::reset_state
0000s0sTest2::Hub::::terminateTest2::Hub::terminate
0000s0sTest2::Hub::::unfilterTest2::Hub::unfilter
0000s0sTest2::Hub::::unlistenTest2::Hub::unlisten
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Hub;
2222µs213µs
# spent 11µs (10+1) within Test2::Hub::BEGIN@2 which was called: # once (10µs+1µs) by Test2::API::Stack::BEGIN@8 at line 2
use strict;
# spent 11µs making 1 call to Test2::Hub::BEGIN@2 # spent 2µs making 1 call to strict::import
3224µs236µs
# spent 20µs (3+16) within Test2::Hub::BEGIN@3 which was called: # once (3µs+16µs) by Test2::API::Stack::BEGIN@8 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Hub::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8221µs249µs
# spent 26µs (4+23) within Test2::Hub::BEGIN@8 which was called: # once (4µs+23µs) by Test2::API::Stack::BEGIN@8 at line 8
use Carp qw/carp croak confess/;
# spent 26µs making 1 call to Test2::Hub::BEGIN@8 # spent 23µs making 1 call to Exporter::import
9216µs256µs
# spent 30µs (4+26) within Test2::Hub::BEGIN@9 which was called: # once (4µs+26µs) by Test2::API::Stack::BEGIN@8 at line 9
use Test2::Util qw/get_tid gen_uid/;
# spent 30µs making 1 call to Test2::Hub::BEGIN@9 # spent 26µs making 1 call to Exporter::import
10
11213µs223µs
# spent 13µs (3+10) within Test2::Hub::BEGIN@11 which was called: # once (3µs+10µs) by Test2::API::Stack::BEGIN@8 at line 11
use Scalar::Util qw/weaken/;
# spent 13µs making 1 call to Test2::Hub::BEGIN@11 # spent 10µs making 1 call to Exporter::import
12218µs266µs
# spent 62µs (9+53) within Test2::Hub::BEGIN@12 which was called: # once (9µs+53µs) by Test2::API::Stack::BEGIN@8 at line 12
use List::Util qw/first/;
# spent 62µs making 1 call to Test2::Hub::BEGIN@12 # spent 4µs making 1 call to List::Util::import
13
142102µs2505µs
# spent 463µs (364+99) within Test2::Hub::BEGIN@14 which was called: # once (364µs+99µs) by Test2::API::Stack::BEGIN@8 at line 14
use Test2::Util::ExternalMeta qw/meta get_meta set_meta delete_meta/;
# spent 463µs making 1 call to Test2::Hub::BEGIN@14 # spent 43µs making 1 call to Exporter::import
1513µs1295µs
# spent 301µs (6+295) within Test2::Hub::BEGIN@15 which was called: # once (6µs+295µs) by Test2::API::Stack::BEGIN@8 at line 37
use Test2::Util::HashBase qw{
# spent 295µs making 1 call to Test2::Util::HashBase::import
16 pid tid hid ipc
17 nested buffered
18 no_ending
19 _filters
20 _pre_filters
21 _listeners
22 _follow_ups
23 _formatter
24 _context_acquire
25 _context_init
26 _context_release
27
28 uuid
29 active
30 count
31 failed
32 ended
33 bailed_out
34 _passing
35 _plan
36 skip_reason
3711.70ms1301µs};
# spent 301µs making 1 call to Test2::Hub::BEGIN@15
38
391200nsmy $UUID_VIA;
40
41
# spent 13µs (9+4) within Test2::Hub::init which was called: # once (9µs+4µs) by Test2::Util::HashBase::_new at line 155 of Test2/Util/HashBase.pm
sub init {
421100ns my $self = shift;
43
4412µs $self->{+PID} = $$;
451300ns $self->{+TID} = get_tid();
4611µs13µs $self->{+HID} = gen_uid();
# spent 3µs making 1 call to Test2::Util::gen_uid
47
481700ns1700ns $UUID_VIA ||= Test2::API::_add_uuid_via_ref();
# spent 700ns making 1 call to Test2::API::_add_uuid_via_ref
491300ns $self->{+UUID} = ${$UUID_VIA}->('hub') if $$UUID_VIA;
50
511500ns $self->{+NESTED} = 0 unless defined $self->{+NESTED};
521400ns $self->{+BUFFERED} = 0 unless defined $self->{+BUFFERED};
53
541200ns $self->{+COUNT} = 0;
551200ns $self->{+FAILED} = 0;
561700ns $self->{+_PASSING} = 1;
57
581400ns if (my $formatter = delete $self->{formatter}) {
59 $self->format($formatter);
60 }
61
6212µs if (my $ipc = $self->{+IPC}) {
63 $ipc->add_hub($self->{+HID});
64 }
65}
66
6712µs
# spent 900ns within Test2::Hub::is_subtest which was called: # once (900ns+0s) by Test2::Hub::finalize at line 461
sub is_subtest { 0 }
68
69sub _tb_reset {
70 my $self = shift;
71
72 # Nothing to do
73 return if $self->{+PID} == $$ && $self->{+TID} == get_tid();
74
75 $self->{+PID} = $$;
76 $self->{+TID} = get_tid();
77 $self->{+HID} = gen_uid();
78
79 if (my $ipc = $self->{+IPC}) {
80 $ipc->add_hub($self->{+HID});
81 }
82}
83
84sub reset_state {
85 my $self = shift;
86
87 $self->{+COUNT} = 0;
88 $self->{+FAILED} = 0;
89 $self->{+_PASSING} = 1;
90
91 delete $self->{+_PLAN};
92 delete $self->{+ENDED};
93 delete $self->{+BAILED_OUT};
94 delete $self->{+SKIP_REASON};
95}
96
97sub inherit {
98 my $self = shift;
99 my ($from, %params) = @_;
100
101 $self->{+NESTED} ||= 0;
102
103 $self->{+_FORMATTER} = $from->{+_FORMATTER}
104 unless $self->{+_FORMATTER} || exists($params{formatter});
105
106 if ($from->{+IPC} && !$self->{+IPC} && !exists($params{ipc})) {
107 my $ipc = $from->{+IPC};
108 $self->{+IPC} = $ipc;
109 $ipc->add_hub($self->{+HID});
110 }
111
112 if (my $ls = $from->{+_LISTENERS}) {
113 push @{$self->{+_LISTENERS}} => grep { $_->{inherit} } @$ls;
114 }
115
116 if (my $pfs = $from->{+_PRE_FILTERS}) {
117 push @{$self->{+_PRE_FILTERS}} => grep { $_->{inherit} } @$pfs;
118 }
119
120 if (my $fs = $from->{+_FILTERS}) {
121 push @{$self->{+_FILTERS}} => grep { $_->{inherit} } @$fs;
122 }
123}
124
125
# spent 5µs within Test2::Hub::format which was called 5 times, avg 1µs/call: # 2 times (3µs+0s) by Test2::API::Stack::new_hub at line 31 of Test2/API/Stack.pm, avg 1µs/call # once (1µs+0s) by Test::Builder::reset at line 468 of Test/Builder.pm # once (800ns+0s) by Test::Builder::use_numbers at line 1221 of Test/Builder.pm # once (700ns+0s) by Test::Builder::reset_outputs at line 1410 of Test/Builder.pm
sub format {
1265400ns my $self = shift;
127
1285900ns my $old = $self->{+_FORMATTER};
12951µs ($self->{+_FORMATTER}) = @_ if @_;
130
13155µs return $old;
132}
133
134sub is_local {
135 my $self = shift;
136 return $$ == $self->{+PID}
137 && get_tid() == $self->{+TID};
138}
139
140sub listen {
141 my $self = shift;
142 my ($sub, %params) = @_;
143
144 carp "Useless addition of a listener in a child process or thread!"
145 if $$ != $self->{+PID} || get_tid() != $self->{+TID};
146
147 croak "listen only takes coderefs for arguments, got '$sub'"
148 unless ref $sub && ref $sub eq 'CODE';
149
150 push @{$self->{+_LISTENERS}} => { %params, code => $sub };
151
152 $sub; # Intentional return.
153}
154
155sub unlisten {
156 my $self = shift;
157
158 carp "Useless removal of a listener in a child process or thread!"
159 if $$ != $self->{+PID} || get_tid() != $self->{+TID};
160
161 my %subs = map {$_ => $_} @_;
162
163 @{$self->{+_LISTENERS}} = grep { !$subs{$_->{code}} } @{$self->{+_LISTENERS}};
164}
165
166sub filter {
167 my $self = shift;
168 my ($sub, %params) = @_;
169
170 carp "Useless addition of a filter in a child process or thread!"
171 if $$ != $self->{+PID} || get_tid() != $self->{+TID};
172
173 croak "filter only takes coderefs for arguments, got '$sub'"
174 unless ref $sub && ref $sub eq 'CODE';
175
176 push @{$self->{+_FILTERS}} => { %params, code => $sub };
177
178 $sub; # Intentional Return
179}
180
181sub unfilter {
182 my $self = shift;
183 carp "Useless removal of a filter in a child process or thread!"
184 if $$ != $self->{+PID} || get_tid() != $self->{+TID};
185 my %subs = map {$_ => $_} @_;
186 @{$self->{+_FILTERS}} = grep { !$subs{$_->{code}} } @{$self->{+_FILTERS}};
187}
188
189
# spent 4µs within Test2::Hub::pre_filter which was called: # once (4µs+0s) by Test::Builder::_add_ts_hooks at line 127 of Test/Builder.pm
sub pre_filter {
1901100ns my $self = shift;
1911900ns my ($sub, %params) = @_;
192
1931800ns croak "pre_filter only takes coderefs for arguments, got '$sub'"
194 unless ref $sub && ref $sub eq 'CODE';
195
19612µs push @{$self->{+_PRE_FILTERS}} => { %params, code => $sub };
197
19812µs $sub; # Intentional Return
199}
200
201sub pre_unfilter {
202 my $self = shift;
203 my %subs = map {$_ => $_} @_;
204 @{$self->{+_PRE_FILTERS}} = grep { !$subs{$_->{code}} } @{$self->{+_PRE_FILTERS}};
205}
206
207sub follow_up {
208 my $self = shift;
209 my ($sub) = @_;
210
211 carp "Useless addition of a follow-up in a child process or thread!"
212 if $$ != $self->{+PID} || get_tid() != $self->{+TID};
213
214 croak "follow_up only takes coderefs for arguments, got '$sub'"
215 unless ref $sub && ref $sub eq 'CODE';
216
217 push @{$self->{+_FOLLOW_UPS}} => $sub;
218}
219
22011µs*add_context_aquire = \&add_context_acquire;
221sub add_context_acquire {
222 my $self = shift;
223 my ($sub) = @_;
224
225 croak "add_context_acquire only takes coderefs for arguments, got '$sub'"
226 unless ref $sub && ref $sub eq 'CODE';
227
228 push @{$self->{+_CONTEXT_ACQUIRE}} => $sub;
229
230 $sub; # Intentional return.
231}
232
2331200ns*remove_context_aquire = \&remove_context_acquire;
234sub remove_context_acquire {
235 my $self = shift;
236 my %subs = map {$_ => $_} @_;
237 @{$self->{+_CONTEXT_ACQUIRE}} = grep { !$subs{$_} == $_ } @{$self->{+_CONTEXT_ACQUIRE}};
238}
239
240sub add_context_init {
241 my $self = shift;
242 my ($sub) = @_;
243
244 croak "add_context_init only takes coderefs for arguments, got '$sub'"
245 unless ref $sub && ref $sub eq 'CODE';
246
247 push @{$self->{+_CONTEXT_INIT}} => $sub;
248
249 $sub; # Intentional return.
250}
251
252sub remove_context_init {
253 my $self = shift;
254 my %subs = map {$_ => $_} @_;
255 @{$self->{+_CONTEXT_INIT}} = grep { !$subs{$_} == $_ } @{$self->{+_CONTEXT_INIT}};
256}
257
258sub add_context_release {
259 my $self = shift;
260 my ($sub) = @_;
261
262 croak "add_context_release only takes coderefs for arguments, got '$sub'"
263 unless ref $sub && ref $sub eq 'CODE';
264
265 push @{$self->{+_CONTEXT_RELEASE}} => $sub;
266
267 $sub; # Intentional return.
268}
269
270sub remove_context_release {
271 my $self = shift;
272 my %subs = map {$_ => $_} @_;
273 @{$self->{+_CONTEXT_RELEASE}} = grep { !$subs{$_} == $_ } @{$self->{+_CONTEXT_RELEASE}};
274}
275
276
# spent 332µs (42+290) within Test2::Hub::send which was called 3 times, avg 110µs/call: # once (21µs+118µs) by Test::Builder::ok at line 729 of Test/Builder.pm # once (10µs+101µs) by Test2::Hub::finalize at line 435 # once (11µs+71µs) by Test2::API::Context::send_ev2 at line 232 of Test2/API/Context.pm
sub send {
2773500ns my $self = shift;
2783900ns my ($e) = @_;
279
28037µs314µs $e->eid;
# spent 14µs making 3 calls to Test2::Event::eid, avg 5µs/call
281
282 $e->add_hub(
283 {
284 details => ref($self),
285
286 buffered => $self->{+BUFFERED},
287 hid => $self->{+HID},
288 nested => $self->{+NESTED},
289 pid => $self->{+PID},
290 tid => $self->{+TID},
291 uuid => $self->{+UUID},
292
293313µs36µs ipc => $self->{+IPC} ? 1 : 0,
# spent 6µs making 3 calls to Test2::Event::add_hub, avg 2µs/call
294 }
295 );
296
2973600ns $e->set_uuid(${$UUID_VIA}->('event')) if $$UUID_VIA;
298
29931µs if ($self->{+_PRE_FILTERS}) {
30032µs for (@{$self->{+_PRE_FILTERS}}) {
30133µs314µs $e = $_->{code}->($self, $e);
# spent 14µs making 3 calls to Test::Builder::__ANON__[Test/Builder.pm:88], avg 5µs/call
30231µs return unless $e;
303 }
304 }
305
30638µs3257µs my $ipc = $self->{+IPC} || return $self->process($e);
# spent 257µs making 3 calls to Test2::Hub::process, avg 86µs/call
307
308 if($e->global) {
309 $ipc->send($self->{+HID}, $e, 'GLOBAL');
310 return $self->process($e);
311 }
312
313 return $ipc->send($self->{+HID}, $e)
314 if $$ != $self->{+PID} || get_tid() != $self->{+TID};
315
316 $self->process($e);
317}
318
319
# spent 257µs (45+212) within Test2::Hub::process which was called 3 times, avg 86µs/call: # 3 times (45µs+212µs) by Test2::Hub::send at line 306, avg 86µs/call
sub process {
3203400ns my $self = shift;
3213500ns my ($e) = @_;
322
3233600ns if ($self->{+_FILTERS}) {
324 for (@{$self->{+_FILTERS}}) {
325 $e = $_->{code}->($self, $e);
326 return unless $e;
327 }
328 }
329
330 # Optimize the most common case
3313900ns my $type = ref($e);
332312µs if ($type eq 'Test2::Event::Pass' || ($type eq 'Test2::Event::Ok' && $e->{pass})) {
3331300ns my $count = ++($self->{+COUNT});
33415µs193µs $self->{+_FORMATTER}->write($e, $count) if $self->{+_FORMATTER};
# spent 93µs making 1 call to Test2::Formatter::TAP::write
335
3361300ns if ($self->{+_LISTENERS}) {
337 $_->{code}->($self, $e, $count) for @{$self->{+_LISTENERS}};
338 }
339
34012µs return $e;
341 }
342
34324µs262µs my $f = $e->facet_data;
# spent 34µs making 1 call to Test2::Event::Plan::facet_data # spent 28µs making 1 call to Test2::Event::V2::facet_data
344
3452400ns my $fail = 0;
3462600ns $fail = 1 if $f->{assert} && !$f->{assert}->{pass};
3472500ns $fail = 1 if $f->{errors} && grep { $_->{fail} } @{$f->{errors}};
3482400ns $fail = 0 if $f->{amnesty};
349
3502300ns $self->{+COUNT}++ if $f->{assert};
3512400ns $self->{+FAILED}++ if $fail && $f->{assert};
3522400ns $self->{+_PASSING} = 0 if $fail;
353
35421µs my $code = $f->{control} ? $f->{control}->{terminate} : undef;
3552400ns my $count = $self->{+COUNT};
356
3572600ns if (my $plan = $f->{plan}) {
3581700ns if ($plan->{skip}) {
359 $self->plan('SKIP');
360 $self->set_skip_reason($plan->{details} || 1);
361 $code ||= 0;
362 }
363 elsif ($plan->{none}) {
364 $self->plan('NO PLAN');
365 }
366 else {
3671900ns16µs $self->plan($plan->{count});
# spent 6µs making 1 call to Test2::Hub::plan
368 }
369 }
370
37121µs $e->callback($self) if $f->{control} && $f->{control}->{has_callback};
372
37323µs251µs $self->{+_FORMATTER}->write($e, $count, $f) if $self->{+_FORMATTER};
# spent 51µs making 2 calls to Test2::Formatter::TAP::write, avg 26µs/call
374
3752500ns if ($self->{+_LISTENERS}) {
376 $_->{code}->($self, $e, $count, $f) for @{$self->{+_LISTENERS}};
377 }
378
3792700ns if ($f->{control} && $f->{control}->{halt}) {
380 $code ||= 255;
381 $self->set_bailed_out($e);
382 }
383
3842700ns if (defined $code) {
385 $self->{+_FORMATTER}->terminate($e, $f) if $self->{+_FORMATTER};
386 $self->terminate($code, $e, $f);
387 }
388
38925µs return $e;
390}
391
392sub terminate {
393 my $self = shift;
394 my ($code) = @_;
395 exit($code);
396}
397
398
# spent 2µs within Test2::Hub::cull which was called: # once (2µs+0s) by Test2::Hub::finalize at line 412
sub cull {
3991300ns my $self = shift;
400
40112µs my $ipc = $self->{+IPC} || return;
402 return if $self->{+PID} != $$ || $self->{+TID} != get_tid();
403
404 # No need to do IPC checks on culled events
405 $self->process($_) for $ipc->cull($self->{+HID});
406}
407
408
# spent 186µs (32+154) within Test2::Hub::finalize which was called: # once (32µs+154µs) by Test::Builder::done_testing at line 618 of Test/Builder.pm
sub finalize {
4091200ns my $self = shift;
4101300ns my ($trace, $do_plan) = @_;
411
41212µs12µs $self->cull();
# spent 2µs making 1 call to Test2::Hub::cull
413
4141400ns my $plan = $self->{+_PLAN};
4151300ns my $count = $self->{+COUNT};
4161400ns my $failed = $self->{+FAILED};
4171300ns my $active = $self->{+ACTIVE};
418
419 # return if NOTHING was done.
4201600ns unless ($active || $do_plan || defined($plan) || $count || $failed) {
421 $self->{+_FORMATTER}->finalize($plan, $count, $failed, 0, $self->is_subtest) if $self->{+_FORMATTER};
422 return;
423 }
424
4251600ns unless ($self->{+ENDED}) {
4261500ns if ($self->{+_FOLLOW_UPS}) {
427 $_->($trace, $self) for reverse @{$self->{+_FOLLOW_UPS}};
428 }
429
430 # These need to be refreshed now
4311200ns $plan = $self->{+_PLAN};
4321200ns $count = $self->{+COUNT};
4331200ns $failed = $self->{+FAILED};
434
43519µs2141µs if ((defined($plan) && $plan eq 'NO PLAN') || ($do_plan && !defined($plan))) {
# spent 111µs making 1 call to Test2::Hub::send # spent 30µs making 1 call to Test2::Util::HashBase::_new
436 $self->send(
437 Test2::Event::Plan->new(
438 trace => $trace,
439 max => $count,
440 )
441 );
442 }
4431700ns $plan = $self->{+_PLAN};
444 }
445
44612µs11µs my $frame = $trace->frame;
4471300ns if($self->{+ENDED}) {
448 my (undef, $ffile, $fline) = @{$self->{+ENDED}};
449 my (undef, $sfile, $sline) = @$frame;
450
451 die <<" EOT"
452Test already ended!
453First End: $ffile line $fline
454Second End: $sfile line $sline
455 EOT
456 }
457
4581500ns $self->{+ENDED} = $frame;
45912µs19µs my $pass = $self->is_passing(); # Generate the final boolean.
# spent 9µs making 1 call to Test2::Hub::is_passing
460
46115µs22µs $self->{+_FORMATTER}->finalize($plan, $count, $failed, $pass, $self->is_subtest) if $self->{+_FORMATTER};
# spent 900ns making 1 call to Test2::Hub::is_subtest # spent 700ns making 1 call to Test2::Formatter::finalize
462
46312µs return $pass;
464}
465
466
# spent 16µs (13+3) within Test2::Hub::is_passing which was called 3 times, avg 5µs/call: # once (7µs+1µs) by Test2::Hub::finalize at line 459 # once (3µs+2µs) by Test::Builder::_ending at line 1669 of Test/Builder.pm # once (2µs+400ns) by Test2::API::Instance::set_exit at line 556 of Test2/API/Instance.pm
sub is_passing {
4673400ns my $self = shift;
468
4693600ns ($self->{+_PASSING}) = @_ if @_;
470
471 # If we already failed just return 0.
47231µs my $pass = $self->{+_PASSING} or return 0;
4733500ns return $self->{+_PASSING} = 0 if $self->{+FAILED};
474
4753600ns my $count = $self->{+COUNT};
4763400ns my $ended = $self->{+ENDED};
4773700ns my $plan = $self->{+_PLAN};
478
4793600ns return $pass if !$count && $plan && $plan =~ m/^SKIP$/;
480
48131µs return $self->{+_PASSING} = 0
482 if $ended && (!$count || !$plan);
483
48437µs33µs return $pass unless $plan && $plan =~ m/^\d+$/;
# spent 3µs making 3 calls to CORE::match, avg 1µs/call
485
4863900ns if ($ended) {
487 return $self->{+_PASSING} = 0 if $count != $plan;
488 }
489 else {
490 return $self->{+_PASSING} = 0 if $count > $plan;
491 }
492
49334µs return $pass;
494}
495
496
# spent 10µs (9+1) within Test2::Hub::plan which was called 6 times, avg 2µs/call: # once (5µs+1µs) by Test2::Hub::process at line 367 # once (2µs+0s) by Test::Builder::done_testing at line 597 of Test/Builder.pm # once (900ns+0s) by Test::Builder::_ending at line 1666 of Test/Builder.pm # once (700ns+0s) by Test::Builder::expected_tests at line 555 of Test/Builder.pm # once (500ns+0s) by Test::Builder::_ending at line 1673 of Test/Builder.pm # once (400ns+0s) by Test::Builder::done_testing at line 616 of Test/Builder.pm
sub plan {
4976700ns my $self = shift;
498
499610µs return $self->{+_PLAN} unless @_;
500
5011400ns my ($plan) = @_;
502
5031200ns confess "You cannot unset the plan"
504 unless defined $plan;
505
506 confess "You cannot change the plan"
5071300ns if $self->{+_PLAN} && $self->{+_PLAN} !~ m/^NO PLAN$/;
508
50913µs11µs confess "'$plan' is not a valid plan! Plan must be an integer greater than 0, 'NO PLAN', or 'SKIP'"
# spent 1µs making 1 call to CORE::match
510 unless $plan =~ m/^(\d+|NO PLAN|SKIP)$/;
511
51212µs $self->{+_PLAN} = $plan;
513}
514
515sub check_plan {
516 my $self = shift;
517
518 return undef unless $self->{+ENDED};
519 my $plan = $self->{+_PLAN} || return undef;
520
521 return 1 if $plan !~ m/^\d+$/;
522
523 return 1 if $plan == $self->{+COUNT};
524 return 0;
525}
526
527sub DESTROY {
528 my $self = shift;
529 my $ipc = $self->{+IPC} || return;
530 return unless $$ == $self->{+PID};
531 return unless get_tid() == $self->{+TID};
532 $ipc->drop_hub($self->{+HID});
533}
534
53513µs1;
536
537__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 47)[JSON-PP-pm-692]-155-line.html0000644000175000017500000003204714576335353024005 0ustar michamicha Profile of (eval 47)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 47)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 1111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-API-Instance-pm-28-line.html0000644000175000017500000037071014576335353024000 0ustar michamicha Profile of Test2/API/Instance.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm
StatementsExecuted 140 statements in 2.22ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111541µs2.30msTest2::API::Instance::::BEGIN@13Test2::API::Instance::BEGIN@13
111400µs3.31msTest2::API::Instance::::BEGIN@14Test2::API::Instance::BEGIN@14
31136µs485µsTest2::API::Instance::::loadTest2::API::Instance::load
11133µs113µsTest2::API::Instance::::set_exitTest2::API::Instance::set_exit
11111µs13µsTest2::API::Instance::::_finalizeTest2::API::Instance::_finalize
11111µs13µsTest2::API::Instance::::BEGIN@2Test2::API::Instance::BEGIN@2
11110µs11µsTest2::API::Instance::::resetTest2::API::Instance::reset
11110µs12µsTest2::API::Instance::::BEGIN@53Test2::API::Instance::BEGIN@53
1118µs12µsTest2::API::Instance::::BEGIN@62Test2::API::Instance::BEGIN@62
1117µs232µsTest2::API::Instance::::BEGIN@16Test2::API::Instance::BEGIN@16
2216µs21µsTest2::API::Instance::::__ANON__[:60]Test2::API::Instance::__ANON__[:60]
1115µs8µsTest2::API::Instance::::add_post_load_callbackTest2::API::Instance::add_post_load_callback
1114µs35µsTest2::API::Instance::::BEGIN@11Test2::API::Instance::BEGIN@11
1114µs24µsTest2::API::Instance::::BEGIN@8Test2::API::Instance::BEGIN@8
1114µs28µsTest2::API::Instance::::BEGIN@63Test2::API::Instance::BEGIN@63
1114µs22µsTest2::API::Instance::::BEGIN@3Test2::API::Instance::BEGIN@3
1114µs16µsTest2::API::Instance::::BEGIN@9Test2::API::Instance::BEGIN@9
1114µs26µsTest2::API::Instance::::importTest2::API::Instance::import
1113µs3µsTest2::API::Instance::::add_formatterTest2::API::Instance::add_formatter
1112µs3µsTest2::API::Instance::::add_context_acquire_callbackTest2::API::Instance::add_context_acquire_callback
1112µs3µsTest2::API::Instance::::add_exit_callbackTest2::API::Instance::add_exit_callback
1112µs13µsTest2::API::Instance::::initTest2::API::Instance::init
1112µs2µsTest2::API::Instance::::pidTest2::API::Instance::pid
1111µs1µsTest2::API::Instance::::tidTest2::API::Instance::tid
1111µs1µsTest2::API::Instance::::has_ipcTest2::API::Instance::has_ipc
0000s0sTest2::API::Instance::::__ANON__[:195]Test2::API::Instance::__ANON__[:195]
0000s0sTest2::API::Instance::::__ANON__[:215]Test2::API::Instance::__ANON__[:215]
0000s0sTest2::API::Instance::::__ANON__[:375]Test2::API::Instance::__ANON__[:375]
0000s0sTest2::API::Instance::::__ANON__[:418]Test2::API::Instance::__ANON__[:418]
0000s0sTest2::API::Instance::::_check_pidTest2::API::Instance::_check_pid
0000s0sTest2::API::Instance::::_ipc_waitTest2::API::Instance::_ipc_wait
0000s0sTest2::API::Instance::::add_context_init_callbackTest2::API::Instance::add_context_init_callback
0000s0sTest2::API::Instance::::add_context_release_callbackTest2::API::Instance::add_context_release_callback
0000s0sTest2::API::Instance::::add_ipc_driverTest2::API::Instance::add_ipc_driver
0000s0sTest2::API::Instance::::add_pre_subtest_callbackTest2::API::Instance::add_pre_subtest_callback
0000s0sTest2::API::Instance::::disable_ipc_pollingTest2::API::Instance::disable_ipc_polling
0000s0sTest2::API::Instance::::enable_ipc_pollingTest2::API::Instance::enable_ipc_polling
0000s0sTest2::API::Instance::::formatter_setTest2::API::Instance::formatter_set
0000s0sTest2::API::Instance::::get_ipc_pendingTest2::API::Instance::get_ipc_pending
0000s0sTest2::API::Instance::::ipc_disableTest2::API::Instance::ipc_disable
0000s0sTest2::API::Instance::::post_preload_resetTest2::API::Instance::post_preload_reset
0000s0sTest2::API::Instance::::set_ipc_pendingTest2::API::Instance::set_ipc_pending
0000s0sTest2::API::Instance::::start_preloadTest2::API::Instance::start_preload
0000s0sTest2::API::Instance::::stop_preloadTest2::API::Instance::stop_preload
0000s0sTest2::API::Instance::::test2_disable_trace_stampsTest2::API::Instance::test2_disable_trace_stamps
0000s0sTest2::API::Instance::::test2_enable_trace_stampsTest2::API::Instance::test2_enable_trace_stamps
0000s0sTest2::API::Instance::::test2_trace_stamps_enabledTest2::API::Instance::test2_trace_stamps_enabled
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::API::Instance;
2226µs214µs
# spent 13µs (11+2) within Test2::API::Instance::BEGIN@2 which was called: # once (11µs+2µs) by Test2::API::BEGIN@51 at line 2
use strict;
# spent 13µs making 1 call to Test2::API::Instance::BEGIN@2 # spent 2µs making 1 call to strict::import
3235µs240µs
# spent 22µs (4+18) within Test2::API::Instance::BEGIN@3 which was called: # once (4µs+18µs) by Test2::API::BEGIN@51 at line 3
use warnings;
# spent 22µs making 1 call to Test2::API::Instance::BEGIN@3 # spent 18µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
71900nsour @CARP_NOT = qw/Test2::API Test2::API::Instance Test2::IPC::Driver Test2::Formatter/;
8217µs244µs
# spent 24µs (4+20) within Test2::API::Instance::BEGIN@8 which was called: # once (4µs+20µs) by Test2::API::BEGIN@51 at line 8
use Carp qw/confess carp/;
# spent 24µs making 1 call to Test2::API::Instance::BEGIN@8 # spent 20µs making 1 call to Exporter::import
9221µs228µs
# spent 16µs (4+12) within Test2::API::Instance::BEGIN@9 which was called: # once (4µs+12µs) by Test2::API::BEGIN@51 at line 9
use Scalar::Util qw/reftype/;
# spent 16µs making 1 call to Test2::API::Instance::BEGIN@9 # spent 12µs making 1 call to Exporter::import
10
11217µs266µs
# spent 35µs (4+31) within Test2::API::Instance::BEGIN@11 which was called: # once (4µs+31µs) by Test2::API::BEGIN@51 at line 11
use Test2::Util qw/get_tid USE_THREADS CAN_FORK pkg_to_file try CAN_SIGSYS/;
# spent 35µs making 1 call to Test2::API::Instance::BEGIN@11 # spent 31µs making 1 call to Exporter::import
12
13282µs12.30ms
# spent 2.30ms (541µs+1.76) within Test2::API::Instance::BEGIN@13 which was called: # once (541µs+1.76ms) by Test2::API::BEGIN@51 at line 13
use Test2::EventFacet::Trace();
# spent 2.30ms making 1 call to Test2::API::Instance::BEGIN@13
14288µs13.31ms
# spent 3.31ms (400µs+2.91) within Test2::API::Instance::BEGIN@14 which was called: # once (400µs+2.91ms) by Test2::API::BEGIN@51 at line 14
use Test2::API::Stack();
# spent 3.31ms making 1 call to Test2::API::Instance::BEGIN@14
15
1613µs1225µs
# spent 232µs (7+225) within Test2::API::Instance::BEGIN@16 which was called: # once (7µs+225µs) by Test2::API::BEGIN@51 at line 41
use Test2::Util::HashBase qw{
# spent 225µs making 1 call to Test2::Util::HashBase::import
17 _pid _tid
18 no_wait
19 finalized loaded
20 ipc stack formatter
21 contexts
22
23 add_uuid_via
24
25 -preload
26
27 ipc_disabled
28 ipc_polling
29 ipc_drivers
30 ipc_timeout
31 formatters
32
33 exit_callbacks
34 post_load_callbacks
35 context_acquire_callbacks
36 context_init_callbacks
37 context_release_callbacks
38 pre_subtest_callbacks
39
40 trace_stamps
411139µs1232µs};
# spent 232µs making 1 call to Test2::API::Instance::BEGIN@16
42
43sub DEFAULT_IPC_TIMEOUT() { 30 }
44
45sub test2_enable_trace_stamps { $_[0]->{+TRACE_STAMPS} = 1 }
46sub test2_disable_trace_stamps { $_[0]->{+TRACE_STAMPS} = 0 }
47sub test2_trace_stamps_enabled { $_[0]->{+TRACE_STAMPS} }
48
4912µs
# spent 2µs within Test2::API::Instance::pid which was called: # once (2µs+0s) by Test2::API::test2_set_is_end at line 35 of Test2/API.pm
sub pid { $_[0]->{+_PID} }
5011µs
# spent 1µs within Test2::API::Instance::tid which was called: # once (1µs+0s) by Test2::API::test2_set_is_end at line 36 of Test2/API.pm
sub tid { $_[0]->{+_TID} }
51
52# Wrap around the getters that should call _finalize.
53
# spent 12µs (10+2) within Test2::API::Instance::BEGIN@53 which was called: # once (10µs+2µs) by Test2::API::BEGIN@51 at line 66
BEGIN {
5412µs for my $finalizer (IPC, FORMATTER) {
5526µs22µs my $orig = __PACKAGE__->can($finalizer);
# spent 2µs making 2 calls to UNIVERSAL::can, avg 1µs/call
56
# spent 21µs (6+14) within Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60] which was called 2 times, avg 10µs/call: # once (4µs+14µs) by Test2::API::test2_formatter at line 305 of Test2/API.pm # once (2µs+700ns) by Test2::API::test2_ipc at line 282 of Test2/API.pm
my $new = sub {
572200ns my $self = shift;
5821µs113µs $self->_finalize unless $self->{+FINALIZED};
# spent 13µs making 1 call to Test2::API::Instance::_finalize
5925µs21µs $self->$orig;
# spent 1µs making 2 calls to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84], avg 700ns/call
6022µs };
61
62248µs217µs
# spent 12µs (8+5) within Test2::API::Instance::BEGIN@62 which was called: # once (8µs+5µs) by Test2::API::BEGIN@51 at line 62
no strict 'refs';
# spent 12µs making 1 call to Test2::API::Instance::BEGIN@62 # spent 5µs making 1 call to strict::unimport
63227µs251µs
# spent 28µs (4+24) within Test2::API::Instance::BEGIN@63 which was called: # once (4µs+24µs) by Test2::API::BEGIN@51 at line 63
no warnings 'redefine';
# spent 28µs making 1 call to Test2::API::Instance::BEGIN@63 # spent 24µs making 1 call to warnings::unimport
6422µs *{$finalizer} = $new;
65 }
6611.57ms112µs}
# spent 12µs making 1 call to Test2::API::Instance::BEGIN@53
67
6812µs
# spent 1µs within Test2::API::Instance::has_ipc which was called: # once (1µs+0s) by Test2::API::test2_has_ipc at line 283 of Test2/API.pm
sub has_ipc { !!$_[0]->{+IPC} }
69
70
# spent 26µs (4+23) within Test2::API::Instance::import which was called: # once (4µs+23µs) by Test2::API::BEGIN@51 at line 51 of Test2/API.pm
sub import {
711300ns my $class = shift;
721300ns return unless @_;
731300ns my ($ref) = @_;
7412µs123µs $$ref = $class->new;
# spent 23µs making 1 call to Test2::Util::HashBase::_new
75}
76
7712µs111µs
# spent 13µs (2+11) within Test2::API::Instance::init which was called: # once (2µs+11µs) by Test2::Util::HashBase::_new at line 155 of Test2/Util/HashBase.pm
sub init { $_[0]->reset }
# spent 11µs making 1 call to Test2::API::Instance::reset
78
79sub start_preload {
80 my $self = shift;
81
82 confess "preload cannot be started, Test2::API has already been initialized"
83 if $self->{+FINALIZED} || $self->{+LOADED};
84
85 return $self->{+PRELOAD} = 1;
86}
87
88sub stop_preload {
89 my $self = shift;
90
91 return 0 unless $self->{+PRELOAD};
92 $self->{+PRELOAD} = 0;
93
94 $self->post_preload_reset();
95
96 return 1;
97}
98
99sub post_preload_reset {
100 my $self = shift;
101
102 delete $self->{+_PID};
103 delete $self->{+_TID};
104
105 $self->{+ADD_UUID_VIA} = undef unless exists $self->{+ADD_UUID_VIA};
106
107 $self->{+CONTEXTS} = {};
108
109 $self->{+FORMATTERS} = [];
110
111 $self->{+FINALIZED} = undef;
112 $self->{+IPC} = undef;
113 $self->{+IPC_DISABLED} = $ENV{T2_NO_IPC} ? 1 : 0;
114
115 $self->{+IPC_TIMEOUT} = DEFAULT_IPC_TIMEOUT() unless defined $self->{+IPC_TIMEOUT};
116
117 $self->{+LOADED} = 0;
118
119 $self->{+STACK} ||= Test2::API::Stack->new;
120}
121
122
# spent 11µs (10+1) within Test2::API::Instance::reset which was called: # once (10µs+1µs) by Test2::API::Instance::init at line 77
sub reset {
1231100ns my $self = shift;
124
12511µs delete $self->{+_PID};
1261100ns delete $self->{+_TID};
127
1281600ns $self->{+TRACE_STAMPS} = $ENV{T2_TRACE_STAMPS} || 0;
129
1301300ns $self->{+ADD_UUID_VIA} = undef;
131
1321400ns $self->{+CONTEXTS} = {};
133
1341200ns $self->{+IPC_DRIVERS} = [];
1351200ns $self->{+IPC_POLLING} = undef;
136
1371200ns $self->{+FORMATTERS} = [];
1381500ns $self->{+FORMATTER} = undef;
139
1401200ns $self->{+FINALIZED} = undef;
1411200ns $self->{+IPC} = undef;
1421300ns $self->{+IPC_DISABLED} = $ENV{T2_NO_IPC} ? 1 : 0;
143
1441900ns $self->{+IPC_TIMEOUT} = DEFAULT_IPC_TIMEOUT() unless defined $self->{+IPC_TIMEOUT};
145
1461100ns $self->{+NO_WAIT} = 0;
1471200ns $self->{+LOADED} = 0;
148
1491200ns $self->{+EXIT_CALLBACKS} = [];
1501100ns $self->{+POST_LOAD_CALLBACKS} = [];
1511100ns $self->{+CONTEXT_ACQUIRE_CALLBACKS} = [];
1521200ns $self->{+CONTEXT_INIT_CALLBACKS} = [];
1531100ns $self->{+CONTEXT_RELEASE_CALLBACKS} = [];
1541200ns $self->{+PRE_SUBTEST_CALLBACKS} = [];
155
15612µs11µs $self->{+STACK} = Test2::API::Stack->new;
# spent 1µs making 1 call to Test2::API::Stack::new
157}
158
159
# spent 13µs (11+2) within Test2::API::Instance::_finalize which was called: # once (11µs+2µs) by Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60] at line 58
sub _finalize {
1601100ns my $self = shift;
1611300ns my ($caller) = @_;
16213µs $caller ||= [caller(1)];
163
164 confess "Attempt to initialize Test2::API during preload"
1651200ns if $self->{+PRELOAD};
166
1671200ns $self->{+FINALIZED} = $caller;
168
1691300ns $self->{+_PID} = $$ unless defined $self->{+_PID};
1701200ns $self->{+_TID} = get_tid() unless defined $self->{+_TID};
171
1721300ns unless ($self->{+FORMATTER}) {
1731200ns my ($formatter, $source);
17412µs if ($ENV{T2_FORMATTER}) {
175 $source = "set by the 'T2_FORMATTER' environment variable";
176
177 if ($ENV{T2_FORMATTER} =~ m/^(\+)?(.*)$/) {
178 $formatter = $1 ? $2 : "Test2::Formatter::$2"
179 }
180 else {
181 $formatter = '';
182 }
183 }
184 elsif (@{$self->{+FORMATTERS}}) {
1851600ns ($formatter) = @{$self->{+FORMATTERS}};
1861200ns $source = "Most recently added";
187 }
188 else {
189 $formatter = 'Test2::Formatter::TAP';
190 $source = 'default formatter';
191 }
192
19315µs12µs unless (ref($formatter) || $formatter->can('write')) {
# spent 2µs making 1 call to UNIVERSAL::can
194 my $file = pkg_to_file($formatter);
195 my ($ok, $err) = try { require $file };
196 unless ($ok) {
197 my $line = "* COULD NOT LOAD FORMATTER '$formatter' ($source) *";
198 my $border = '*' x length($line);
199 die "\n\n $border\n $line\n $border\n\n$err";
200 }
201 }
202
2031400ns $self->{+FORMATTER} = $formatter;
204 }
205
206 # Turn on IPC if threads are on, drivers are registered, or the Test2::IPC
207 # module is loaded.
2081200ns return if $self->{+IPC_DISABLED};
20912µs return unless USE_THREADS || $INC{'Test2/IPC.pm'} || @{$self->{+IPC_DRIVERS}};
210
211 # Turn on polling by default, people expect it.
212 $self->enable_ipc_polling;
213
214 unless (@{$self->{+IPC_DRIVERS}}) {
215 my ($ok, $error) = try { require Test2::IPC::Driver::Files };
216 die $error unless $ok;
217 push @{$self->{+IPC_DRIVERS}} => 'Test2::IPC::Driver::Files';
218 }
219
220 for my $driver (@{$self->{+IPC_DRIVERS}}) {
221 next unless $driver->can('is_viable') && $driver->is_viable;
222 $self->{+IPC} = $driver->new or next;
223 return;
224 }
225
226 die "IPC has been requested, but no viable drivers were found. Aborting...\n";
227}
228
229sub formatter_set { $_[0]->{+FORMATTER} ? 1 : 0 }
230
231
# spent 3µs within Test2::API::Instance::add_formatter which was called: # once (3µs+0s) by Test2::API::test2_formatter_add at line 309 of Test2/API.pm
sub add_formatter {
2321100ns my $self = shift;
2331400ns my ($formatter) = @_;
2341900ns unshift @{$self->{+FORMATTERS}} => $formatter;
235
23614µs return unless $self->{+FINALIZED};
237
238 # Why is the @CARP_NOT entry not enough?
239 local %Carp::Internal = %Carp::Internal;
240 $Carp::Internal{'Test2::Formatter'} = 1;
241
242 carp "Formatter $formatter loaded too late to be used as the global formatter";
243}
244
245
# spent 3µs (2+300ns) within Test2::API::Instance::add_context_acquire_callback which was called: # once (2µs+300ns) by Test2::API::test2_add_callback_context_aquire at line 263 of Test2/API.pm
sub add_context_acquire_callback {
2461200ns my $self = shift;
2471100ns my ($code) = @_;
248
24912µs1300ns my $rtype = reftype($code) || "";
# spent 300ns making 1 call to Scalar::Util::reftype
250
2511200ns confess "Context-acquire callbacks must be coderefs"
252 unless $code && $rtype eq 'CODE';
253
25412µs push @{$self->{+CONTEXT_ACQUIRE_CALLBACKS}} => $code;
255}
256
257sub add_context_init_callback {
258 my $self = shift;
259 my ($code) = @_;
260
261 my $rtype = reftype($code) || "";
262
263 confess "Context-init callbacks must be coderefs"
264 unless $code && $rtype eq 'CODE';
265
266 push @{$self->{+CONTEXT_INIT_CALLBACKS}} => $code;
267}
268
269sub add_context_release_callback {
270 my $self = shift;
271 my ($code) = @_;
272
273 my $rtype = reftype($code) || "";
274
275 confess "Context-release callbacks must be coderefs"
276 unless $code && $rtype eq 'CODE';
277
278 push @{$self->{+CONTEXT_RELEASE_CALLBACKS}} => $code;
279}
280
281
# spent 8µs (5+3) within Test2::API::Instance::add_post_load_callback which was called: # once (5µs+3µs) by Test2::API::test2_add_callback_post_load at line 267 of Test2/API.pm
sub add_post_load_callback {
2821200ns my $self = shift;
2831200ns my ($code) = @_;
284
28516µs13µs my $rtype = reftype($code) || "";
# spent 3µs making 1 call to Scalar::Util::reftype
286
2871500ns confess "Post-load callbacks must be coderefs"
288 unless $code && $rtype eq 'CODE';
289
2901800ns push @{$self->{+POST_LOAD_CALLBACKS}} => $code;
29112µs $code->() if $self->{+LOADED};
292}
293
294sub add_pre_subtest_callback {
295 my $self = shift;
296 my ($code) = @_;
297
298 my $rtype = reftype($code) || "";
299
300 confess "Pre-subtest callbacks must be coderefs"
301 unless $code && $rtype eq 'CODE';
302
303 push @{$self->{+PRE_SUBTEST_CALLBACKS}} => $code;
304}
305
306
# spent 485µs (36+449) within Test2::API::Instance::load which was called 3 times, avg 162µs/call: # 3 times (36µs+449µs) by Test2::API::test2_load at line 204 of Test2/API.pm, avg 162µs/call
sub load {
3073800ns my $self = shift;
30831µs unless ($self->{+LOADED}) {
309 confess "Attempt to initialize Test2::API during preload"
3101300ns if $self->{+PRELOAD};
311
31212µs $self->{+_PID} = $$ unless defined $self->{+_PID};
3131500ns $self->{+_TID} = get_tid() unless defined $self->{+_TID};
314
315 # This is for https://github.com/Test-More/test-more/issues/16
316 # and https://rt.perl.org/Public/Bug/Display.html?id=127774
317 # END blocks run in reverse order. This insures the END block is loaded
318 # as late as possible. It will not solve all cases, but it helps.
319121µs eval "END { Test2::API::test2_set_is_end() }; 1" or die $@;
# spent 3µs executing statements in string eval
# includes 2µs spent executing 1 call to 1 sub defined therein.
320
32112µs $self->{+LOADED} = 1;
32212µs1449µs $_->() for @{$self->{+POST_LOAD_CALLBACKS}};
# spent 449µs making 1 call to Test::Builder::__ANON__[Test/Builder.pm:148]
323 }
32434µs return $self->{+LOADED};
325}
326
327
# spent 3µs (2+200ns) within Test2::API::Instance::add_exit_callback which was called: # once (2µs+200ns) by Test2::API::test2_add_callback_exit at line 266 of Test2/API.pm
sub add_exit_callback {
3281100ns my $self = shift;
3291100ns my ($code) = @_;
33012µs1200ns my $rtype = reftype($code) || "";
# spent 200ns making 1 call to Scalar::Util::reftype
331
3321500ns confess "End callbacks must be coderefs"
333 unless $code && $rtype eq 'CODE';
334
33511µs push @{$self->{+EXIT_CALLBACKS}} => $code;
336}
337
338sub ipc_disable {
339 my $self = shift;
340
341 confess "Attempt to disable IPC after it has been initialized"
342 if $self->{+IPC};
343
344 $self->{+IPC_DISABLED} = 1;
345}
346
347sub add_ipc_driver {
348 my $self = shift;
349 my ($driver) = @_;
350 unshift @{$self->{+IPC_DRIVERS}} => $driver;
351
352 return unless $self->{+FINALIZED};
353
354 # Why is the @CARP_NOT entry not enough?
355 local %Carp::Internal = %Carp::Internal;
356 $Carp::Internal{'Test2::IPC::Driver'} = 1;
357
358 carp "IPC driver $driver loaded too late to be used as the global ipc driver";
359}
360
361sub enable_ipc_polling {
362 my $self = shift;
363
364 $self->{+_PID} = $$ unless defined $self->{+_PID};
365 $self->{+_TID} = get_tid() unless defined $self->{+_TID};
366
367 $self->add_context_init_callback(
368 # This is called every time a context is created, it needs to be fast.
369 # $_[0] is a context object
370 sub {
371 return unless $self->{+IPC_POLLING};
372 return unless $self->{+IPC};
373 return unless $self->{+IPC}->pending();
374 return $_[0]->{hub}->cull;
375 }
376 ) unless defined $self->ipc_polling;
377
378 $self->set_ipc_polling(1);
379}
380
381sub get_ipc_pending {
382 my $self = shift;
383 return -1 unless $self->{+IPC};
384 $self->{+IPC}->pending();
385}
386
387sub _check_pid {
388 my $self = shift;
389 my ($pid) = @_;
390 return kill(0, $pid);
391}
392
393sub set_ipc_pending {
394 my $self = shift;
395 return unless $self->{+IPC};
396 my ($val) = @_;
397
398 confess "value is required for set_ipc_pending"
399 unless $val;
400
401 $self->{+IPC}->set_pending($val);
402}
403
404sub disable_ipc_polling {
405 my $self = shift;
406 return unless defined $self->{+IPC_POLLING};
407 $self->{+IPC_POLLING} = 0;
408}
409
410sub _ipc_wait {
411 my ($timeout) = @_;
412 my $fail = 0;
413
414 $timeout = DEFAULT_IPC_TIMEOUT() unless defined $timeout;
415
416 my $ok = eval {
417 if (CAN_FORK) {
418 local $SIG{ALRM} = sub { die "Timeout waiting on child processes" };
419 alarm $timeout;
420
421 while (1) {
422 my $pid = CORE::wait();
423 my $err = $?;
424 last if $pid == -1;
425 next unless $err;
426 $fail++;
427
428 my $sig = $err & 127;
429 my $exit = $err >> 8;
430 warn "Process $pid did not exit cleanly (wstat: $err, exit: $exit, sig: $sig)\n";
431 }
432
433 alarm 0;
434 }
435
436 if (USE_THREADS) {
437 my $start = time;
438
439 while (1) {
440 last unless threads->list();
441 die "Timeout waiting on child thread" if time - $start >= $timeout;
442 sleep 1;
443 for my $t (threads->list) {
444 # threads older than 1.34 do not have this :-(
445 next if $t->can('is_joinable') && !$t->is_joinable;
446 $t->join;
447 # In older threads we cannot check if a thread had an error unless
448 # we control it and its return.
449 my $err = $t->can('error') ? $t->error : undef;
450 next unless $err;
451 my $tid = $t->tid();
452 $fail++;
453 chomp($err);
454 warn "Thread $tid did not end cleanly: $err\n";
455 }
456 }
457 }
458
459 1;
460 };
461 my $error = $@;
462
463 return 0 if $ok && !$fail;
464 warn $error unless $ok;
465 return 255;
466}
467
468
# spent 113µs (33+80) within Test2::API::Instance::set_exit which was called: # once (33µs+80µs) by Test2::API::END at line 56 of Test2/API.pm
sub set_exit {
4691300ns my $self = shift;
470
4711400ns return if $self->{+PRELOAD};
472
4731600ns my $exit = $?;
4741300ns my $new_exit = $exit;
475
47611µs if ($INC{'Test/Builder.pm'} && $Test::Builder::VERSION ne $Test2::API::VERSION) {
477 print STDERR <<" EOT";
478
479********************************************************************************
480* *
481* Test::Builder -- Test2::API version mismatch detected *
482* *
483********************************************************************************
484 Test2::API Version: $Test2::API::VERSION
485Test::Builder Version: $Test::Builder::VERSION
486
487This is not a supported configuration, you will have problems.
488
489 EOT
490 }
491
49212µs for my $ctx (values %{$self->{+CONTEXTS}}) {
493 next unless $ctx;
494
495 next if $ctx->_aborted && ${$ctx->_aborted};
496
497 # Only worry about contexts in this PID
498 my $trace = $ctx->trace || next;
499 next unless $trace->pid && $trace->pid == $$;
500
501 # Do not worry about contexts that have no hub
502 my $hub = $ctx->hub || next;
503
504 # Do not worry if the state came to a sudden end.
505 next if $hub->bailed_out;
506 next if defined $hub->skip_reason;
507
508 # now we worry
509 $trace->alert("context object was never released! This means a testing tool is behaving very badly");
510
511 $exit = 255;
512 $new_exit = 255;
513 }
514
51513µs if (!defined($self->{+_PID}) or !defined($self->{+_TID}) or $self->{+_PID} != $$ or $self->{+_TID} != get_tid()) {
516 $? = $exit;
517 return;
518 }
519
52012µs12µs my @hubs = $self->{+STACK} ? $self->{+STACK}->all : ();
# spent 2µs making 1 call to Test2::API::Stack::all
521
5221700ns if (@hubs and $self->{+IPC} and !$self->{+NO_WAIT}) {
523 local $?;
524 my %seen;
525 for my $hub (reverse @hubs) {
526 my $ipc = $hub->ipc or next;
527 next if $seen{$ipc}++;
528 $ipc->waiting();
529 }
530
531 my $ipc_exit = _ipc_wait($self->{+IPC_TIMEOUT});
532 $new_exit ||= $ipc_exit;
533 }
534
535 # None of this is necessary if we never got a root hub
5361800ns if(my $root = shift @hubs) {
53713µs17µs my $trace = Test2::EventFacet::Trace->new(
# spent 7µs making 1 call to Test2::Util::HashBase::_new
538 frame => [__PACKAGE__, __FILE__, 0, __PACKAGE__ . '::END'],
539 detail => __PACKAGE__ . ' END Block finalization',
540 );
5411800ns18µs my $ctx = Test2::API::Context->new(
# spent 8µs making 1 call to Test2::Util::HashBase::_new
542 trace => $trace,
543 hub => $root,
544 );
545
5461300ns if (@hubs) {
547 $ctx->diag("Test ended with extra hubs on the stack!");
548 $new_exit = 255;
549 }
550
55114µs22µs unless ($root->no_ending) {
# spent 1µs making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84] # spent 600ns making 1 call to Test2::API::Context::DESTROY
5521600ns local $?;
55312µs11µs $root->finalize($trace) unless $root->ended;
554114µs158µs $_->($ctx, $exit, \$new_exit) for @{$self->{+EXIT_CALLBACKS}};
# spent 58µs making 1 call to Test::Builder::__ANON__[Test/Builder.pm:156]
55511µs1300ns $new_exit ||= $root->failed;
55611µs12µs $new_exit ||= 255 unless $root->is_passing;
# spent 2µs making 1 call to Test2::Hub::is_passing
557 }
558 }
559
5601300ns $new_exit = 255 if $new_exit > 255;
561
5621300ns if ($new_exit && eval { require Test2::API::Breakage; 1 }) {
563 my @warn = Test2::API::Breakage->report();
564
565 if (@warn) {
566 print STDERR "\nYou have loaded versions of test modules known to have problems with Test2.\nThis could explain some test failures.\n";
567 print STDERR "$_\n" for @warn;
568 print STDERR "\n";
569 }
570 }
571
57212µs $? = $new_exit;
573}
574
57513µs1;
576
577__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Carp-pm-13-line.html0000644000175000017500000044140514576335353021505 0ustar michamicha Profile of Carp.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm
StatementsExecuted 77 statements in 3.11ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111331µs371µsCarp::::BEGIN@169 Carp::BEGIN@169
11143µs43µsCarp::::BEGIN@95 Carp::BEGIN@95
11121µs33µsCarp::::BEGIN@6 Carp::BEGIN@6
11120µs20µsCarp::::BEGIN@574 Carp::BEGIN@574
33115µs15µsCarp::::_fetch_sub Carp::_fetch_sub
11111µs11µsCarp::::BEGIN@3 Carp::BEGIN@3
1118µs14µsCarp::::BEGIN@61 Carp::BEGIN@61
1117µs15µsCarp::::BEGIN@137 Carp::BEGIN@137
1117µs12µsCarp::::BEGIN@730 Carp::BEGIN@730
1116µs11µsCarp::::BEGIN@256 Carp::BEGIN@256
1116µs11µsCarp::::BEGIN@188 Carp::BEGIN@188
1116µs8µsCarp::::BEGIN@4 Carp::BEGIN@4
1116µs11µsCarp::::BEGIN@73 Carp::BEGIN@73
1115µs5µsCarp::::BEGIN@296 Carp::BEGIN@296
1115µs5µsCarp::::BEGIN@49 Carp::BEGIN@49
1115µs8µsCarp::::BEGIN@751 Carp::BEGIN@751
1114µs16µsCarp::::BEGIN@744 Carp::BEGIN@744
1114µs4µsCarp::::_univ_mod_loaded Carp::_univ_mod_loaded
1113µs19µsCarp::::BEGIN@5 Carp::BEGIN@5
0000s0sCarp::::__ANON__[:103] Carp::__ANON__[:103]
0000s0sCarp::::__ANON__[:115] Carp::__ANON__[:115]
0000s0sCarp::::__ANON__[:139] Carp::__ANON__[:139]
0000s0sCarp::::__ANON__[:185] Carp::__ANON__[:185]
0000s0sCarp::::__ANON__[:189] Carp::__ANON__[:189]
0000s0sCarp::::__ANON__[:191] Carp::__ANON__[:191]
0000s0sCarp::::__ANON__[:193] Carp::__ANON__[:193]
0000s0sCarp::::__ANON__[:209] Carp::__ANON__[:209]
0000s0sCarp::::__ANON__[:408] Carp::__ANON__[:408]
0000s0sCarp::::__ANON__[:419] Carp::__ANON__[:419]
0000s0sCarp::::__ANON__[:66] Carp::__ANON__[:66]
0000s0sCarp::::__ANON__[:86] Carp::__ANON__[:86]
0000s0sCarp::::_cgc Carp::_cgc
0000s0sCarp::::caller_info Carp::caller_info
0000s0sCarp::::carp Carp::carp
0000s0sCarp::::cluck Carp::cluck
0000s0sCarp::::confess Carp::confess
0000s0sCarp::::croak Carp::croak
0000s0sCarp::::export_fail Carp::export_fail
0000s0sCarp::::format_arg Carp::format_arg
0000s0sCarp::::get_status Carp::get_status
0000s0sCarp::::get_subname Carp::get_subname
0000s0sCarp::::long_error_loc Carp::long_error_loc
0000s0sCarp::::longmess Carp::longmess
0000s0sCarp::::longmess_heavy Carp::longmess_heavy
0000s0sCarp::::ret_backtrace Carp::ret_backtrace
0000s0sCarp::::ret_summary Carp::ret_summary
0000s0sCarp::::short_error_loc Carp::short_error_loc
0000s0sCarp::::shortmess Carp::shortmess
0000s0sCarp::::shortmess_heavy Carp::shortmess_heavy
0000s0sCarp::::str_len_trim Carp::str_len_trim
0000s0sCarp::::trusts Carp::trusts
0000s0sCarp::::trusts_directly Carp::trusts_directly
0000s0sRegexp::::CARP_TRACERegexp::CARP_TRACE
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Carp;
2
3246µs111µs
# spent 11µs within Carp::BEGIN@3 which was called: # once (11µs+0s) by Tie::Hash::BEGIN@190 at line 3
{ use 5.006; }
# spent 11µs making 1 call to Carp::BEGIN@3
4319µs210µs
# spent 8µs (6+2) within Carp::BEGIN@4 which was called: # once (6µs+2µs) by Tie::Hash::BEGIN@190 at line 4
use strict;
# spent 8µs making 1 call to Carp::BEGIN@4 # spent 2µs making 1 call to strict::import
5246µs235µs
# spent 19µs (3+16) within Carp::BEGIN@5 which was called: # once (3µs+16µs) by Tie::Hash::BEGIN@190 at line 5
use warnings;
# spent 19µs making 1 call to Carp::BEGIN@5 # spent 16µs making 1 call to warnings::import
6
# spent 33µs (21+12) within Carp::BEGIN@6 which was called: # once (21µs+12µs) by Tie::Hash::BEGIN@190 at line 26
BEGIN {
7 # Very old versions of warnings.pm load Carp. This can go wrong due
8 # to the circular dependency. If warnings is invoked before Carp,
9 # then warnings starts by loading Carp, then Carp (above) tries to
10 # invoke warnings, and gets nothing because warnings is in the process
11 # of loading and hasn't defined its import method yet. If we were
12 # only turning on warnings ("use warnings" above) this wouldn't be too
13 # bad, because Carp would just gets the state of the -w switch and so
14 # might not get some warnings that it wanted. The real problem is
15 # that we then want to turn off Unicode warnings, but "no warnings
16 # 'utf8'" won't be effective if we're in this circular-dependency
17 # situation. So, if warnings.pm is an affected version, we turn
18 # off all warnings ourselves by directly setting ${^WARNING_BITS}.
19 # On unaffected versions, we turn off just Unicode warnings, via
20 # the proper API.
21117µs if(!defined($warnings::VERSION) || eval($warnings::VERSION) < 1.06) {
# spent 2µs executing statements in string eval
22 ${^WARNING_BITS} = "";
23 } else {
2412µs112µs "warnings"->unimport("utf8");
# spent 12µs making 1 call to warnings::unimport
25 }
261111µs133µs}
# spent 33µs making 1 call to Carp::BEGIN@6
27
28
# spent 15µs within Carp::_fetch_sub which was called 3 times, avg 5µs/call: # once (6µs+0s) by Carp::BEGIN@61 at line 62 # once (5µs+0s) by Carp::BEGIN@73 at line 74 # once (4µs+0s) by Carp::BEGIN@137 at line 144
sub _fetch_sub { # fetch sub without autovivifying
2932µs my($pack, $sub) = @_;
3031µs $pack .= '::';
31 # only works with top-level packages
3231µs return unless exists($::{$pack});
3331µs for ($::{$pack}) {
3434µs return unless ref \$_ eq 'GLOB' && *$_{HASH} && exists $$_{$sub};
353900ns for ($$_{$sub}) {
36 return ref \$_ eq 'GLOB' ? *$_{CODE} : undef
37311µs }
38 }
39}
40
41# UTF8_REGEXP_PROBLEM is a compile-time constant indicating whether Carp
42# must avoid applying a regular expression to an upgraded (is_utf8)
43# string. There are multiple problems, on different Perl versions,
44# that require this to be avoided. All versions prior to 5.13.8 will
45# load utf8_heavy.pl for the swash system, even if the regexp doesn't
46# use character classes. Perl 5.6 and Perls [5.11.2, 5.13.11) exhibit
47# specific problems when Carp is being invoked in the aftermath of a
48# syntax error.
49
# spent 5µs within Carp::BEGIN@49 which was called: # once (5µs+0s) by Tie::Hash::BEGIN@190 at line 55
BEGIN {
5015µs if("$]" < 5.013011) {
51 *UTF8_REGEXP_PROBLEM = sub () { 1 };
52 } else {
531800ns *UTF8_REGEXP_PROBLEM = sub () { 0 };
54 }
55156µs15µs}
# spent 5µs making 1 call to Carp::BEGIN@49
56
57# is_utf8() is essentially the utf8::is_utf8() function, which indicates
58# whether a string is represented in the upgraded form (using UTF-8
59# internally). As utf8::is_utf8() is only available from Perl 5.8
60# onwards, extra effort is required here to make it work on Perl 5.6.
61
# spent 14µs (8+6) within Carp::BEGIN@61 which was called: # once (8µs+6µs) by Tie::Hash::BEGIN@190 at line 68
BEGIN {
6213µs16µs if(defined(my $sub = _fetch_sub utf8 => 'is_utf8')) {
# spent 6µs making 1 call to Carp::_fetch_sub
63 *is_utf8 = $sub;
64 } else {
65 # black magic for perl 5.6
66 *is_utf8 = sub { unpack("C", "\xaa".$_[0]) != 170 };
67 }
68193µs114µs}
# spent 14µs making 1 call to Carp::BEGIN@61
69
70# The downgrade() function defined here is to be used for attempts to
71# downgrade where it is acceptable to fail. It must be called with a
72# second argument that is a true value.
73
# spent 11µs (6+5) within Carp::BEGIN@73 which was called: # once (6µs+5µs) by Tie::Hash::BEGIN@190 at line 88
BEGIN {
7413µs15µs if(defined(my $sub = _fetch_sub utf8 => 'downgrade')) {
# spent 5µs making 1 call to Carp::_fetch_sub
75 *downgrade = \&{"utf8::downgrade"};
76 } else {
77 *downgrade = sub {
78 my $r = "";
79 my $l = length($_[0]);
80 for(my $i = 0; $i != $l; $i++) {
81 my $o = ord(substr($_[0], $i, 1));
82 return if $o > 255;
83 $r .= chr($o);
84 }
85 $_[0] = $r;
86 };
87 }
88172µs111µs}
# spent 11µs making 1 call to Carp::BEGIN@73
89
90# is_safe_printable_codepoint() indicates whether a character, specified
91# by integer codepoint, is OK to output literally in a trace. Generally
92# this is if it is a printable character in the ancestral character set
93# (ASCII or EBCDIC). This is used on some Perls in situations where a
94# regexp can't be used.
95
# spent 43µs within Carp::BEGIN@95 which was called: # once (43µs+0s) by Tie::Hash::BEGIN@190 at line 117
BEGIN {
96 *is_safe_printable_codepoint =
97 "$]" >= 5.007_003 ?
98 eval(q(sub ($) {
99 my $u = utf8::native_to_unicode($_[0]);
100 $u >= 0x20 && $u <= 0x7e;
101 }))
102 : ord("A") == 65 ?
103 sub ($) { $_[0] >= 0x20 && $_[0] <= 0x7e }
104 :
105 sub ($) {
106 # Early EBCDIC
107 # 3 EBCDIC code pages supported then; all controls but one
108 # are the code points below SPACE. The other one is 0x5F on
109 # POSIX-BC; FF on the other two.
110 # FIXME: there are plenty of unprintable codepoints other
111 # than those that this code and the comment above identifies
112 # as "controls".
113 $_[0] >= ord(" ") && $_[0] <= 0xff &&
114 $_[0] != (ord ("^") == 106 ? 0x5f : 0xff);
115 }
116141µs ;
# spent 3µs executing statements in string eval
1171121µs143µs}
# spent 43µs making 1 call to Carp::BEGIN@95
118
119
# spent 4µs within Carp::_univ_mod_loaded which was called: # once (4µs+0s) by Carp::BEGIN@137 at line 138
sub _univ_mod_loaded {
1201400ns return 0 unless exists($::{"UNIVERSAL::"});
1211600ns for ($::{"UNIVERSAL::"}) {
12215µs return 0 unless ref \$_ eq "GLOB" && *$_{HASH} && exists $$_{"$_[0]::"};
123 for ($$_{"$_[0]::"}) {
124 return 0 unless ref \$_ eq "GLOB" && *$_{HASH} && exists $$_{"VERSION"};
125 for ($$_{"VERSION"}) {
126 return 0 unless ref \$_ eq "GLOB";
127 return ${*$_{SCALAR}};
128 }
129 }
130 }
131}
132
133# _maybe_isa() is usually the UNIVERSAL::isa function. We have to avoid
134# the latter if the UNIVERSAL::isa module has been loaded, to avoid infi-
135# nite recursion; in that case _maybe_isa simply returns true.
1361200nsmy $isa;
137
# spent 15µs (7+8) within Carp::BEGIN@137 which was called: # once (7µs+8µs) by Tie::Hash::BEGIN@190 at line 146
BEGIN {
13812µs14µs if (_univ_mod_loaded('isa')) {
# spent 4µs making 1 call to Carp::_univ_mod_loaded
139 *_maybe_isa = sub { 1 }
140 }
141 else {
142 # Since we have already done the check, record $isa for use below
143 # when defining _StrVal.
14411µs14µs *_maybe_isa = $isa = _fetch_sub(UNIVERSAL => "isa");
# spent 4µs making 1 call to Carp::_fetch_sub
145 }
146185µs115µs}
# spent 15µs making 1 call to Carp::BEGIN@137
147
148
149# We need an overload::StrVal or equivalent function, but we must avoid
150# loading any modules on demand, as Carp is used from __DIE__ handlers and
151# may be invoked after a syntax error.
152# We can copy recent implementations of overload::StrVal and use
153# overloading.pm, which is the fastest implementation, so long as
154# overloading is available. If it is not available, we use our own pure-
155# Perl StrVal. We never actually use overload::StrVal, for various rea-
156# sons described below.
157# overload versions are as follows:
158# undef-1.00 (up to perl 5.8.0) uses bless (avoid!)
159# 1.01-1.17 (perl 5.8.1 to 5.14) uses Scalar::Util
160# 1.18+ (perl 5.16+) uses overloading
161# The ancient 'bless' implementation (that inspires our pure-Perl version)
162# blesses unblessed references and must be avoided. Those using
163# Scalar::Util use refaddr, possibly the pure-Perl implementation, which
164# has the same blessing bug, and must be avoided. Also, Scalar::Util is
165# loaded on demand. Since we avoid the Scalar::Util implementations, we
166# end up having to implement our own overloading.pm-based version for perl
167# 5.10.1 to 5.14. Since it also works just as well in more recent ver-
168# sions, we use it there, too.
169
# spent 371µs (331+40) within Carp::BEGIN@169 which was called: # once (331µs+40µs) by Tie::Hash::BEGIN@190 at line 211
BEGIN {
170275µs if (eval { require "overloading.pm" }) {
171122µs *_StrVal = eval 'sub { no overloading; "$_[0]" }'
# spent 25µs executing statements in string eval
# includes 7µs spent executing 1 call to 2 subs defined therein.
172 }
173 else {
174 # Work around the UNIVERSAL::can/isa modules to avoid recursion.
175
176 # _mycan is either UNIVERSAL::can, or, in the presence of an
177 # override, overload::mycan.
178 *_mycan = _univ_mod_loaded('can')
179 ? do { require "overload.pm"; _fetch_sub overload => 'mycan' }
180 : \&UNIVERSAL::can;
181
182 # _blessed is either UNIVERSAL::isa(...), or, in the presence of an
183 # override, a hideous, but fairly reliable, workaround.
184 *_blessed = $isa
185 ? sub { &$isa($_[0], "UNIVERSAL") }
186 : sub {
187 my $probe = "UNIVERSAL::Carp_probe_" . rand;
1882129µs215µs
# spent 11µs (6+5) within Carp::BEGIN@188 which was called: # once (6µs+5µs) by Tie::Hash::BEGIN@190 at line 188
no strict 'refs';
# spent 11µs making 1 call to Carp::BEGIN@188 # spent 5µs making 1 call to strict::unimport
189 local *$probe = sub { "unlikely string" };
190 local $@;
191 local $SIG{__DIE__} = sub{};
192 (eval { $_[0]->$probe } || '') eq 'unlikely string'
193 };
194
195 *_StrVal = sub {
196 my $pack = ref $_[0];
197 # Perl's overload mechanism uses the presence of a special
198 # "method" named "((" or "()" to signal it is in effect.
199 # This test seeks to see if it has been set up. "((" post-
200 # dates overloading.pm, so we can skip it.
201 return "$_[0]" unless _mycan($pack, "()");
202 # Even at this point, the invocant may not be blessed, so
203 # check for that.
204 return "$_[0]" if not _blessed($_[0]);
205 bless $_[0], "Carp";
206 my $str = "$_[0]";
207 bless $_[0], $pack;
208 $pack . substr $str, index $str, "=";
209 }
210 }
2111131µs1371µs}
# spent 371µs making 1 call to Carp::BEGIN@169
212
213
2141400nsour $VERSION = '1.54';
2151800ns$VERSION =~ tr/_//d;
216
2171200nsour $MaxEvalLen = 0;
21810sour $Verbose = 0;
21910sour $CarpLevel = 0;
2201100nsour $MaxArgLen = 64; # How much of each argument to print. 0 = all.
2211100nsour $MaxArgNums = 8; # How many arguments to print. 0 = all.
2221200nsour $RefArgFormatter = undef; # allow caller to format reference arguments
223
2241400nsrequire Exporter;
22516µsour @ISA = ('Exporter');
2261500nsour @EXPORT = qw(confess croak carp);
2271400nsour @EXPORT_OK = qw(cluck verbose longmess shortmess);
2281200nsour @EXPORT_FAIL = qw(verbose); # hook to enable verbose mode
229
230# The members of %Internal are packages that are internal to perl.
231# Carp will not report errors from within these packages if it
232# can. The members of %CarpInternal are internal to Perl's warning
233# system. Carp will not report errors from within these packages
234# either, and will not report calls *to* these packages for carp and
235# croak. They replace $CarpLevel, which is deprecated. The
236# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval
237# text and function arguments should be formatted when printed.
238
239our %CarpInternal;
240our %Internal;
241
242# disable these by default, so they can live w/o require Carp
2431600ns$CarpInternal{Carp}++;
2441200ns$CarpInternal{warnings}++;
2451200ns$Internal{Exporter}++;
2461100ns$Internal{'Exporter::Heavy'}++;
247
248# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl")
249# then the following method will be called by the Exporter which knows
250# to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word
251# 'verbose'.
252
253sub export_fail { shift; $Verbose = shift if $_[0] eq 'verbose'; @_ }
254
255sub _cgc {
2562248µs216µs
# spent 11µs (6+5) within Carp::BEGIN@256 which was called: # once (6µs+5µs) by Tie::Hash::BEGIN@190 at line 256
no strict 'refs';
# spent 11µs making 1 call to Carp::BEGIN@256 # spent 5µs making 1 call to strict::unimport
257 return \&{"CORE::GLOBAL::caller"} if defined &{"CORE::GLOBAL::caller"};
258 return;
259}
260
261sub longmess {
262 local($!, $^E);
263 # Icky backwards compatibility wrapper. :-(
264 #
265 # The story is that the original implementation hard-coded the
266 # number of call levels to go back, so calls to longmess were off
267 # by one. Other code began calling longmess and expecting this
268 # behaviour, so the replacement has to emulate that behaviour.
269 my $cgc = _cgc();
270 my $call_pack = $cgc ? $cgc->() : caller();
271 if ( $Internal{$call_pack} or $CarpInternal{$call_pack} ) {
272 return longmess_heavy(@_);
273 }
274 else {
275 local $CarpLevel = $CarpLevel + 1;
276 return longmess_heavy(@_);
277 }
278}
279
280our @CARP_NOT;
281
282sub shortmess {
283 local($!, $^E);
284 my $cgc = _cgc();
285
286 # Icky backwards compatibility wrapper. :-(
287 local @CARP_NOT = scalar( $cgc ? $cgc->() : caller() );
288 shortmess_heavy(@_);
289}
290
291sub croak { die shortmess @_ }
292sub confess { die longmess @_ }
293sub carp { warn shortmess @_ }
294sub cluck { warn longmess @_ }
295
296
# spent 5µs within Carp::BEGIN@296 which was called: # once (5µs+0s) by Tie::Hash::BEGIN@190 at line 303
BEGIN {
29716µs if("$]" >= 5.015002 || ("$]" >= 5.014002 && "$]" < 5.015) ||
298 ("$]" >= 5.012005 && "$]" < 5.013)) {
299 *CALLER_OVERRIDE_CHECK_OK = sub () { 1 };
300 } else {
301 *CALLER_OVERRIDE_CHECK_OK = sub () { 0 };
302 }
30311.01ms15µs}
# spent 5µs making 1 call to Carp::BEGIN@296
304
305sub caller_info {
306 my $i = shift(@_) + 1;
307 my %call_info;
308 my $cgc = _cgc();
309 {
310 # Some things override caller() but forget to implement the
311 # @DB::args part of it, which we need. We check for this by
312 # pre-populating @DB::args with a sentinel which no-one else
313 # has the address of, so that we can detect whether @DB::args
314 # has been properly populated. However, on earlier versions
315 # of perl this check tickles a bug in CORE::caller() which
316 # leaks memory. So we only check on fixed perls.
317 @DB::args = \$i if CALLER_OVERRIDE_CHECK_OK;
318 package DB;
319
- -
324 unless ( defined $call_info{file} ) {
325 return ();
326 }
327
328 my $sub_name = Carp::get_subname( \%call_info );
329 if ( $call_info{has_args} ) {
330 # Guard our serialization of the stack from stack refcounting bugs
331 # NOTE this is NOT a complete solution, we cannot 100% guard against
332 # these bugs. However in many cases Perl *is* capable of detecting
333 # them and throws an error when it does. Unfortunately serializing
334 # the arguments on the stack is a perfect way of finding these bugs,
335 # even when they would not affect normal program flow that did not
336 # poke around inside the stack. Inside of Carp.pm it makes little
337 # sense reporting these bugs, as Carp's job is to report the callers
338 # errors, not the ones it might happen to tickle while doing so.
339 # See: https://rt.perl.org/Public/Bug/Display.html?id=131046
340 # and: https://rt.perl.org/Public/Bug/Display.html?id=52610
341 # for more details and discussion. - Yves
342 my @args = map {
343 my $arg;
344 local $@= $@;
345 eval {
346 $arg = $_;
347 1;
348 } or do {
349 $arg = '** argument not available anymore **';
350 };
351 $arg;
352 } @DB::args;
353 if (CALLER_OVERRIDE_CHECK_OK && @args == 1
354 && ref $args[0] eq ref \$i
355 && $args[0] == \$i ) {
356 @args = (); # Don't let anyone see the address of $i
357 local $@;
358 my $where = eval {
359 my $func = $cgc or return '';
360 my $gv =
361 (_fetch_sub B => 'svref_2object' or return '')
362 ->($func)->GV;
363 my $package = $gv->STASH->NAME;
364 my $subname = $gv->NAME;
365 return unless defined $package && defined $subname;
366
367 # returning CORE::GLOBAL::caller isn't useful for tracing the cause:
368 return if $package eq 'CORE::GLOBAL' && $subname eq 'caller';
369 " in &${package}::$subname";
370 } || '';
371 @args
372 = "** Incomplete caller override detected$where; \@DB::args were not set **";
373 }
374 else {
375 my $overflow;
376 if ( $MaxArgNums and @args > $MaxArgNums )
377 { # More than we want to show?
378 $#args = $MaxArgNums - 1;
379 $overflow = 1;
380 }
381
382 @args = map { Carp::format_arg($_) } @args;
383
384 if ($overflow) {
385 push @args, '...';
386 }
387 }
388
389 # Push the args onto the subroutine
390 $sub_name .= '(' . join( ', ', @args ) . ')';
391 }
392 $call_info{sub_name} = $sub_name;
393 return wantarray() ? %call_info : \%call_info;
394}
395
396# Transform an argument to a function into a string.
397our $in_recurse;
398sub format_arg {
399 my $arg = shift;
400
401 if ( my $pack= ref($arg) ) {
402
403 # legitimate, let's not leak it.
404 if (!$in_recurse && _maybe_isa( $arg, 'UNIVERSAL' ) &&
405 do {
406 local $@;
407 local $in_recurse = 1;
408 local $SIG{__DIE__} = sub{};
409 eval {$arg->can('CARP_TRACE') }
410 })
411 {
412 return $arg->CARP_TRACE();
413 }
414 elsif (!$in_recurse &&
415 defined($RefArgFormatter) &&
416 do {
417 local $@;
418 local $in_recurse = 1;
419 local $SIG{__DIE__} = sub{};
420 eval {$arg = $RefArgFormatter->($arg); 1}
421 })
422 {
423 return $arg;
424 }
425 else
426 {
427 # Argument may be blessed into a class with overloading, and so
428 # might have an overloaded stringification. We don't want to
429 # risk getting the overloaded stringification, so we need to
430 # use _StrVal, our overload::StrVal()-equivalent.
431 return _StrVal $arg;
432 }
433 }
434 return "undef" if !defined($arg);
435 downgrade($arg, 1);
436 return $arg if !(UTF8_REGEXP_PROBLEM && is_utf8($arg)) &&
437 $arg =~ /\A-?[0-9]+(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?\z/;
438 my $suffix = "";
439 if ( 2 < $MaxArgLen and $MaxArgLen < length($arg) ) {
440 substr ( $arg, $MaxArgLen - 3 ) = "";
441 $suffix = "...";
442 }
443 if(UTF8_REGEXP_PROBLEM && is_utf8($arg)) {
444 for(my $i = length($arg); $i--; ) {
445 my $c = substr($arg, $i, 1);
446 my $x = substr($arg, 0, 0); # work around bug on Perl 5.8.{1,2}
447 if($c eq "\"" || $c eq "\\" || $c eq "\$" || $c eq "\@") {
448 substr $arg, $i, 0, "\\";
449 next;
450 }
451 my $o = ord($c);
452 substr $arg, $i, 1, sprintf("\\x{%x}", $o)
453 unless is_safe_printable_codepoint($o);
454 }
455 } else {
456 $arg =~ s/([\"\\\$\@])/\\$1/g;
457 # This is all the ASCII printables spelled-out. It is portable to all
458 # Perl versions and platforms (such as EBCDIC). There are other more
459 # compact ways to do this, but may not work everywhere every version.
460 $arg =~ s/([^ !"#\$\%\&'()*+,\-.\/0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz\{|}~])/sprintf("\\x{%x}",ord($1))/eg;
461 }
462 downgrade($arg, 1);
463 return "\"".$arg."\"".$suffix;
464}
465
466sub Regexp::CARP_TRACE {
467 my $arg = "$_[0]";
468 downgrade($arg, 1);
469 if(UTF8_REGEXP_PROBLEM && is_utf8($arg)) {
470 for(my $i = length($arg); $i--; ) {
471 my $o = ord(substr($arg, $i, 1));
472 my $x = substr($arg, 0, 0); # work around bug on Perl 5.8.{1,2}
473 substr $arg, $i, 1, sprintf("\\x{%x}", $o)
474 unless is_safe_printable_codepoint($o);
475 }
476 } else {
477 # See comment in format_arg() about this same regex.
478 $arg =~ s/([^ !"#\$\%\&'()*+,\-.\/0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz\{|}~])/sprintf("\\x{%x}",ord($1))/eg;
479 }
480 downgrade($arg, 1);
481 my $suffix = "";
482 if($arg =~ /\A\(\?\^?([a-z]*)(?:-[a-z]*)?:(.*)\)\z/s) {
483 ($suffix, $arg) = ($1, $2);
484 }
485 if ( 2 < $MaxArgLen and $MaxArgLen < length($arg) ) {
486 substr ( $arg, $MaxArgLen - 3 ) = "";
487 $suffix = "...".$suffix;
488 }
489 return "qr($arg)$suffix";
490}
491
492# Takes an inheritance cache and a package and returns
493# an anon hash of known inheritances and anon array of
494# inheritances which consequences have not been figured
495# for.
496sub get_status {
497 my $cache = shift;
498 my $pkg = shift;
499 $cache->{$pkg} ||= [ { $pkg => $pkg }, [ trusts_directly($pkg) ] ];
500 return @{ $cache->{$pkg} };
501}
502
503# Takes the info from caller() and figures out the name of
504# the sub/require/eval
505sub get_subname {
506 my $info = shift;
507 if ( defined( $info->{evaltext} ) ) {
508 my $eval = $info->{evaltext};
509 if ( $info->{is_require} ) {
510 return "require $eval";
511 }
512 else {
513 $eval =~ s/([\\\'])/\\$1/g;
514 return "eval '" . str_len_trim( $eval, $MaxEvalLen ) . "'";
515 }
516 }
517
518 # this can happen on older perls when the sub (or the stash containing it)
519 # has been deleted
520 if ( !defined( $info->{sub} ) ) {
521 return '__ANON__::__ANON__';
522 }
523
524 return ( $info->{sub} eq '(eval)' ) ? 'eval {...}' : $info->{sub};
525}
526
527# Figures out what call (from the point of view of the caller)
528# the long error backtrace should start at.
529sub long_error_loc {
530 my $i;
531 my $lvl = $CarpLevel;
532 {
533 ++$i;
534 my $cgc = _cgc();
535 my @caller = $cgc ? $cgc->($i) : caller($i);
536 my $pkg = $caller[0];
537 unless ( defined($pkg) ) {
538
539 # This *shouldn't* happen.
540 if (%Internal) {
541 local %Internal;
542 $i = long_error_loc();
543 last;
544 }
545 elsif (defined $caller[2]) {
546 # this can happen when the stash has been deleted
547 # in that case, just assume that it's a reasonable place to
548 # stop (the file and line data will still be intact in any
549 # case) - the only issue is that we can't detect if the
550 # deleted package was internal (so don't do that then)
551 # -doy
552 redo unless 0 > --$lvl;
553 last;
554 }
555 else {
556 return 2;
557 }
558 }
559 redo if $CarpInternal{$pkg};
560 redo unless 0 > --$lvl;
561 redo if $Internal{$pkg};
562 }
563 return $i - 1;
564}
565
566sub longmess_heavy {
567 if ( ref( $_[0] ) ) { # don't break references as exceptions
568 return wantarray ? @_ : $_[0];
569 }
570 my $i = long_error_loc();
571 return ret_backtrace( $i, @_ );
572}
573
574
# spent 20µs within Carp::BEGIN@574 which was called: # once (20µs+0s) by Tie::Hash::BEGIN@190 at line 581
BEGIN {
57516µs if("$]" >= 5.017004) {
576 # The LAST_FH constant is a reference to the variable.
577114µs $Carp::{LAST_FH} = \eval '\${^LAST_FH}';
# spent 2µs executing statements in string eval
578 } else {
579 eval '*LAST_FH = sub () { 0 }';
580 }
5811514µs120µs}
# spent 20µs making 1 call to Carp::BEGIN@574
582
583# Returns a full stack backtrace starting from where it is
584# told.
585sub ret_backtrace {
586 my ( $i, @error ) = @_;
587 my $mess;
588 my $err = join '', @error;
589 $i++;
590
591 my $tid_msg = '';
592 if ( defined &threads::tid ) {
593 my $tid = threads->tid;
594 $tid_msg = " thread $tid" if $tid;
595 }
596
597 my %i = caller_info($i);
598 $mess = "$err at $i{file} line $i{line}$tid_msg";
599 if( $. ) {
600 # Use ${^LAST_FH} if available.
601 if (LAST_FH) {
602 if (${+LAST_FH}) {
603 $mess .= sprintf ", <%s> %s %d",
604 *${+LAST_FH}{NAME},
605 ($/ eq "\n" ? "line" : "chunk"), $.
606 }
607 }
608 else {
609 local $@ = '';
610 local $SIG{__DIE__};
611 eval {
612 CORE::die;
613 };
614 if($@ =~ /^Died at .*(, <.*?> (?:line|chunk) \d+).$/ ) {
615 $mess .= $1;
616 }
617 }
618 }
619 $mess .= "\.\n";
620
621 while ( my %i = caller_info( ++$i ) ) {
622 $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n";
623 }
624
625 return $mess;
626}
627
628sub ret_summary {
629 my ( $i, @error ) = @_;
630 my $err = join '', @error;
631 $i++;
632
633 my $tid_msg = '';
634 if ( defined &threads::tid ) {
635 my $tid = threads->tid;
636 $tid_msg = " thread $tid" if $tid;
637 }
638
639 my %i = caller_info($i);
640 return "$err at $i{file} line $i{line}$tid_msg\.\n";
641}
642
643sub short_error_loc {
644 # You have to create your (hash)ref out here, rather than defaulting it
645 # inside trusts *on a lexical*, as you want it to persist across calls.
646 # (You can default it on $_[2], but that gets messy)
647 my $cache = {};
648 my $i = 1;
649 my $lvl = $CarpLevel;
650 {
651 my $cgc = _cgc();
652 my $called = $cgc ? $cgc->($i) : caller($i);
653 $i++;
654 my $caller = $cgc ? $cgc->($i) : caller($i);
655
656 if (!defined($caller)) {
657 my @caller = $cgc ? $cgc->($i) : caller($i);
658 if (@caller) {
659 # if there's no package but there is other caller info, then
660 # the package has been deleted - treat this as a valid package
661 # in this case
662 redo if defined($called) && $CarpInternal{$called};
663 redo unless 0 > --$lvl;
664 last;
665 }
666 else {
667 return 0;
668 }
669 }
670 redo if $Internal{$caller};
671 redo if $CarpInternal{$caller};
672 redo if $CarpInternal{$called};
673 redo if trusts( $called, $caller, $cache );
674 redo if trusts( $caller, $called, $cache );
675 redo unless 0 > --$lvl;
676 }
677 return $i - 1;
678}
679
680sub shortmess_heavy {
681 return longmess_heavy(@_) if $Verbose;
682 return @_ if ref( $_[0] ); # don't break references as exceptions
683 my $i = short_error_loc();
684 if ($i) {
685 ret_summary( $i, @_ );
686 }
687 else {
688 longmess_heavy(@_);
689 }
690}
691
692# If a string is too long, trims it with ...
693sub str_len_trim {
694 my $str = shift;
695 my $max = shift || 0;
696 if ( 2 < $max and $max < length($str) ) {
697 substr( $str, $max - 3 ) = '...';
698 }
699 return $str;
700}
701
702# Takes two packages and an optional cache. Says whether the
703# first inherits from the second.
704#
705# Recursive versions of this have to work to avoid certain
706# possible endless loops, and when following long chains of
707# inheritance are less efficient.
708sub trusts {
709 my $child = shift;
710 my $parent = shift;
711 my $cache = shift;
712 my ( $known, $partial ) = get_status( $cache, $child );
713
714 # Figure out consequences until we have an answer
715 while ( @$partial and not exists $known->{$parent} ) {
716 my $anc = shift @$partial;
717 next if exists $known->{$anc};
718 $known->{$anc}++;
719 my ( $anc_knows, $anc_partial ) = get_status( $cache, $anc );
720 my @found = keys %$anc_knows;
721 @$known{@found} = ();
722 push @$partial, @$anc_partial;
723 }
724 return exists $known->{$parent};
725}
726
727# Takes a package and gives a list of those trusted directly
728sub trusts_directly {
729 my $class = shift;
730294µs217µs
# spent 12µs (7+5) within Carp::BEGIN@730 which was called: # once (7µs+5µs) by Tie::Hash::BEGIN@190 at line 730
no strict 'refs';
# spent 12µs making 1 call to Carp::BEGIN@730 # spent 5µs making 1 call to strict::unimport
731 my $stash = \%{"$class\::"};
732 for my $var (qw/ CARP_NOT ISA /) {
733 # Don't try using the variable until we know it exists,
734 # to avoid polluting the caller's namespace.
735 if ( $stash->{$var} && ref \$stash->{$var} eq 'GLOB'
736 && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) {
737 return @{$stash->{$var}}
738 }
739 }
740 return;
741}
742
7431500nsif(!defined($warnings::VERSION) ||
744327µs228µs
# spent 16µs (4+12) within Carp::BEGIN@744 which was called: # once (4µs+12µs) by Tie::Hash::BEGIN@190 at line 744
do { no warnings "numeric"; $warnings::VERSION < 1.03 }) {
# spent 16µs making 1 call to Carp::BEGIN@744 # spent 12µs making 1 call to warnings::unimport
745 # Very old versions of warnings.pm import from Carp. This can go
746 # wrong due to the circular dependency. If Carp is invoked before
747 # warnings, then Carp starts by loading warnings, then warnings
748 # tries to import from Carp, and gets nothing because Carp is in
749 # the process of loading and hasn't defined its import method yet.
750 # So we work around that by manually exporting to warnings here.
751261µs212µs
# spent 8µs (5+4) within Carp::BEGIN@751 which was called: # once (5µs+4µs) by Tie::Hash::BEGIN@190 at line 751
no strict "refs";
# spent 8µs making 1 call to Carp::BEGIN@751 # spent 4µs making 1 call to strict::unimport
752 *{"warnings::$_"} = \&$_ foreach @EXPORT;
753}
754
75517µs1;
756
757__END__










Spreadsheet-ParseXLSX-0.35/nytprof/vars-pm-49-line.html0000644000175000017500000006505114576335353021603 0ustar michamicha Profile of vars.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/vars.pm
StatementsExecuted 324 statements in 874µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
242416357µs440µsvars::::importvars::import
11114µs14µsvars::::BEGIN@3vars::BEGIN@3
1114µs19µsvars::::BEGIN@7vars::BEGIN@7
1114µs8µsvars::::BEGIN@8vars::BEGIN@8
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package vars;
2
3253µs114µs
# spent 14µs within vars::BEGIN@3 which was called: # once (14µs+0s) by Test2::EventFacet::Meta::BEGIN@8 at line 3
use 5.006;
# spent 14µs making 1 call to vars::BEGIN@3
4
51400nsour $VERSION = '1.05';
6
7216µs234µs
# spent 19µs (4+15) within vars::BEGIN@7 which was called: # once (4µs+15µs) by Test2::EventFacet::Meta::BEGIN@8 at line 7
use warnings::register;
# spent 19µs making 1 call to vars::BEGIN@7 # spent 15µs making 1 call to warnings::register::import
82337µs211µs
# spent 8µs (4+4) within vars::BEGIN@8 which was called: # once (4µs+4µs) by Test2::EventFacet::Meta::BEGIN@8 at line 8
use strict qw(vars subs);
# spent 8µs making 1 call to vars::BEGIN@8 # spent 4µs making 1 call to strict::import
9
10
# spent 440µs (357+83) within vars::import which was called 24 times, avg 18µs/call: # once (24µs+5µs) by Digest::Perl::MD5::BEGIN@5 at line 5 of Digest/Perl/MD5.pm # once (22µs+5µs) by File::Path::BEGIN@20 at line 20 of File/Path.pm # once (22µs+5µs) by Digest::SHA::BEGIN@7 at line 7 of Digest/SHA.pm # once (20µs+5µs) by XML::Twig::BEGIN@27 at line 27 of XML/Twig.pm # once (19µs+5µs) by Crypt::RC4::BEGIN@16 at line 16 of Crypt/RC4.pm # once (17µs+4µs) by OLE::Storage_Lite::PPS::BEGIN@13 at line 13 of OLE/Storage_Lite.pm # once (16µs+3µs) by Test2::EventFacet::Meta::BEGIN@8 at line 8 of Test2/EventFacet/Meta.pm # once (14µs+4µs) by Archive::Zip::FileMember::BEGIN@4 at line 4 of Archive/Zip/FileMember.pm # once (14µs+3µs) by OLE::Storage_Lite::BEGIN@834 at line 834 of OLE/Storage_Lite.pm # once (14µs+4µs) by Archive::Zip::Member::BEGIN@6 at line 6 of Archive/Zip/Member.pm # once (14µs+3µs) by Archive::Zip::NewFileMember::BEGIN@4 at line 4 of Archive/Zip/NewFileMember.pm # once (14µs+3µs) by Archive::Zip::StringMember::BEGIN@4 at line 4 of Archive/Zip/StringMember.pm # once (14µs+3µs) by Archive::Zip::ZipFileMember::BEGIN@4 at line 4 of Archive/Zip/ZipFileMember.pm # once (14µs+3µs) by OLE::Storage_Lite::PPS::File::BEGIN@714 at line 714 of OLE/Storage_Lite.pm # once (14µs+3µs) by Spreadsheet::ParseExcel::Utility::BEGIN@23 at line 23 of Spreadsheet/ParseExcel/Utility.pm # once (13µs+3µs) by Archive::Zip::BEGIN@14 at line 14 of Archive/Zip.pm # once (13µs+3µs) by Archive::Zip::DirectoryMember::BEGIN@6 at line 6 of Archive/Zip/DirectoryMember.pm # once (13µs+3µs) by OLE::Storage_Lite::PPS::Dir::BEGIN@802 at line 802 of OLE/Storage_Lite.pm # once (13µs+3µs) by Archive::Zip::Archive::BEGIN@14 at line 14 of Archive/Zip/Archive.pm # once (13µs+3µs) by OLE::Storage_Lite::PPS::Root::BEGIN@172 at line 172 of OLE/Storage_Lite.pm # once (11µs+2µs) by Archive::Zip::BEGIN@35 at line 35 of Archive/Zip.pm # once (10µs+3µs) by XML::Twig::BEGIN@439 at line 439 of XML/Twig.pm # once (11µs+2µs) by Archive::Zip::BEGIN@23 at line 23 of Archive/Zip.pm # once (7µs+2µs) by XML::Twig::BEGIN@38 at line 38 of XML/Twig.pm
sub import {
112410µs my $callpack = caller;
122419µs my (undef, @imports) = @_;
13244µs my ($sym, $ch);
142452µs foreach (@imports) {
1555155µs5558µs if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) {
# spent 58µs making 55 calls to CORE::match, avg 1µs/call
165551µs5514µs if ($sym =~ /\W/) {
# spent 14µs making 55 calls to CORE::match, avg 251ns/call
17 # time for a more-detailed check-up
18 if ($sym =~ /^\w+[[{].*[]}]$/) {
19 require Carp;
20 Carp::croak("Can't declare individual elements of hash or array");
21 } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
22 warnings::warn("No need to declare built-in vars");
23 } elsif (($^H & strict::bits('vars'))) {
24 require Carp;
25 Carp::croak("'$_' is not a valid variable name under strict vars");
26 }
27 }
285563µs5512µs $sym = "${callpack}::$sym" unless $sym =~ /::/;
# spent 12µs making 55 calls to CORE::match, avg 209ns/call
29 *$sym =
30 ( $ch eq "\$" ? \$$sym
31 : $ch eq "\@" ? \@$sym
32 : $ch eq "\%" ? \%$sym
33 : $ch eq "\*" ? \*$sym
34 : $ch eq "\&" ? \&$sym
3555110µs : do {
36 require Carp;
37 Carp::croak("'$_' is not a valid variable name");
38 });
39 } else {
40 require Carp;
41 Carp::croak("'$_' is not a valid variable name");
42 }
43 }
44};
45
4612µs1;
47__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Standard-pm-168-line.html0000644000175000017500000007310714576335353022453 0ustar michamicha Profile of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm
StatementsExecuted 7 statements in 338µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11112µs13µsSpreadsheet::ParseXLSX::Decryptor::Standard::::BEGIN@3Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3
1115µs52µsSpreadsheet::ParseXLSX::Decryptor::Standard::::BEGIN@10Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10
1113µs18µsSpreadsheet::ParseXLSX::Decryptor::Standard::::BEGIN@4Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4
0000s0sSpreadsheet::ParseXLSX::Decryptor::Standard::::_generateDecryptionKeySpreadsheet::ParseXLSX::Decryptor::Standard::_generateDecryptionKey
0000s0sSpreadsheet::ParseXLSX::Decryptor::Standard::::decryptSpreadsheet::ParseXLSX::Decryptor::Standard::decrypt
0000s0sSpreadsheet::ParseXLSX::Decryptor::Standard::::decryptFileSpreadsheet::ParseXLSX::Decryptor::Standard::decryptFile
0000s0sSpreadsheet::ParseXLSX::Decryptor::Standard::::verifyPasswordSpreadsheet::ParseXLSX::Decryptor::Standard::verifyPassword
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseXLSX::Decryptor::Standard;
2
3217µs214µs
# spent 13µs (12+1) within Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3 which was called: # once (12µs+1µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 at line 3
use strict;
# spent 13µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3 # spent 1µs making 1 call to strict::import
4216µs233µs
# spent 18µs (3+15) within Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 at line 4
use warnings;
# spent 18µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4 # spent 15µs making 1 call to warnings::import
5
6# VERSION
7
8# ABSTRACT: standard decryption
9
102304µs299µs
# spent 52µs (5+47) within Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10 which was called: # once (5µs+47µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 at line 10
use base 'Spreadsheet::ParseXLSX::Decryptor';
# spent 52µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10 # spent 47µs making 1 call to base::import
11
12sub decrypt {
13 my $self = shift;
14 my ($encryptedValue) = @_;
15
16 my $key = $self->_generateDecryptionKey("\x00" x 4);
17 my $ecb = Crypt::Mode::ECB->new($self->{cipherAlgorithm}, 0);
18 return $ecb->decrypt($encryptedValue, $key);
19}
20
21sub decryptFile {
22 my $self = shift;
23 my ($inFile, $outFile, $bufferLength, $fileSize) = @_;
24
25 my $key = $self->_generateDecryptionKey("\x00" x 4);
26 my $ecb = Crypt::Mode::ECB->new($self->{cipherAlgorithm}, 0);
27
28 my $inbuf;
29 my $i = 0;
30
31 while (($fileSize > 0) && (my $inlen = $inFile->read($inbuf, $bufferLength))) {
32 if ($inlen < $bufferLength) {
33 $inbuf .= "\x00" x ($bufferLength - $inlen);
34 }
35
36 my $outbuf = $ecb->decrypt($inbuf, $key);
37 if ($fileSize < $inlen) {
38 $inlen = $fileSize;
39 }
40
41 $outFile->write($outbuf, $inlen);
42 $i++;
43 $fileSize -= $inlen;
44 }
45}
46
47sub _generateDecryptionKey {
48 my $self = shift;
49 my ($blockKey) = @_;
50
51 my $hash;
52 unless ($self->{pregeneratedKey}) {
53 $hash = $self->{hashProc}->($self->{salt} . Encode::encode('UTF-16LE', $self->{password}));
54 for (my $i = 0 ; $i < $self->{spinCount} ; $i++) {
55 $hash = $self->{hashProc}->(pack('L<', $i) . $hash);
56 }
57 $self->{pregeneratedKey} = $hash;
58 }
59
60 $hash = $self->{hashProc}->($self->{pregeneratedKey} . $blockKey);
61
62 my $x1 = $self->{hashProc}->(("\x36" x 64) ^ $hash);
63 if (length($x1) >= $self->{keyLength}) {
64 $hash = substr($x1, 0, $self->{keyLength});
65 } else {
66 my $x2 = $self->{hashProc}->(("\x5C" x 64) ^ $hash);
67 $hash = substr($x1 . $x2, 0, $self->{keyLength});
68 }
69
70 return $hash;
71}
72
73sub verifyPassword {
74 my $self = shift;
75 my ($encryptedVerifier, $encryptedVerifierHash) = @_;
76
77 my $verifier = $self->decrypt($encryptedVerifier);
78 my $verifierHash = $self->decrypt($encryptedVerifierHash);
79
80 my $verifierHash0 = $self->{hashProc}->($verifier);
81
82 die "Wrong password: $self" unless ($verifierHash0 eq substr($verifierHash, 0, length($verifierHash0)));
83}
84
85=begin Pod::Coverage
86
87 decrypt
88 decryptFile
89 verifyPassword
90
91=end Pod::Coverage
92
93=cut
94
9512µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-API-pm-24-line.html0000644000175000017500000056371214576335353022240 0ustar michamicha Profile of Test2/API.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API.pm
StatementsExecuted 341 statements in 3.95ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.99ms8.02msTest2::API::::BEGIN@51Test2::API::BEGIN@51
111475µs631µsTest2::API::::BEGIN@100Test2::API::BEGIN@100
111456µs1.89msTest2::API::::BEGIN@5Test2::API::BEGIN@5
111429µs660µsTest2::API::::BEGIN@89Test2::API::BEGIN@89
111419µs535µsTest2::API::::BEGIN@95Test2::API::BEGIN@95
111403µs5.20msTest2::API::::BEGIN@92Test2::API::BEGIN@92
111397µs586µsTest2::API::::BEGIN@88Test2::API::BEGIN@88
111230µs333µsTest2::API::::BEGIN@97Test2::API::BEGIN@97
111224µs306µsTest2::API::::BEGIN@99Test2::API::BEGIN@99
811221µs400µsTest2::API::::contextTest2::API::context
111206µs296µsTest2::API::::BEGIN@96Test2::API::BEGIN@96
111202µs284µsTest2::API::::BEGIN@93Test2::API::BEGIN@93
111200µs281µsTest2::API::::BEGIN@94Test2::API::BEGIN@94
111176µs239µsTest2::API::::BEGIN@98Test2::API::BEGIN@98
111110µs145µsTest2::API::::BEGIN@86Test2::API::BEGIN@86
33331µs188µsTest2::API::::test2_set_is_endTest2::API::test2_set_is_end
11125µs25µsTest2::API::::INITTest2::API::INIT
43214µs18µsTest2::API::::test2_in_preloadTest2::API::test2_in_preload
11110µs12µsTest2::API::::BEGIN@2Test2::API::BEGIN@2
3317µs18µsTest2::API::::releaseTest2::API::release
1117µs7µsTest2::API::::BEGIN@179Test2::API::BEGIN@179
1117µs7µsTest2::API::::BEGIN@8Test2::API::BEGIN@8
3226µs491µsTest2::API::::test2_loadTest2::API::test2_load
1115µs27µsTest2::API::::BEGIN@102Test2::API::BEGIN@102
1115µs18µsTest2::API::::BEGIN@71Test2::API::BEGIN@71
1115µs6µsTest2::API::::_context_release_callbacks_refTest2::API::_context_release_callbacks_ref
1115µs8µsTest2::API::::test2_formatter_addTest2::API::test2_formatter_add
1115µs6µsTest2::API::::test2_stackTest2::API::test2_stack
1114µs18µsTest2::API::::BEGIN@103Test2::API::BEGIN@103
1114µs18µsTest2::API::::BEGIN@6Test2::API::BEGIN@6
1114µs14µsTest2::API::::BEGIN@76Test2::API::BEGIN@76
1114µs21µsTest2::API::::BEGIN@3Test2::API::BEGIN@3
1114µs18µsTest2::API::::BEGIN@104Test2::API::BEGIN@104
1114µs5µsTest2::API::::test2_init_doneTest2::API::test2_init_done
1113µs21µsTest2::API::::test2_formatterTest2::API::test2_formatter
1113µs3µsTest2::API::::BEGIN@75Test2::API::BEGIN@75
1113µs11µsTest2::API::::test2_add_callback_post_loadTest2::API::test2_add_callback_post_load
1112µs3µsTest2::API::::_contexts_refTest2::API::_contexts_ref
1112µs2µsTest2::API::::BEGIN@90Test2::API::BEGIN@90
1112µs5µsTest2::API::::test2_add_callback_context_aquireTest2::API::test2_add_callback_context_aquire
1112µs3µsTest2::API::::test2_has_ipcTest2::API::test2_has_ipc
1112µs4µsTest2::API::::test2_add_callback_exitTest2::API::test2_add_callback_exit
1112µs4µsTest2::API::::test2_ipcTest2::API::test2_ipc
1112µs2µsTest2::API::::BEGIN@85Test2::API::BEGIN@85
2222µs2µsTest2::API::::_add_uuid_via_refTest2::API::_add_uuid_via_ref
1111µs2µsTest2::API::::test2_load_doneTest2::API::test2_load_done
111700ns700nsTest2::API::::test2_unset_is_endTest2::API::test2_unset_is_end
111600ns600nsTest2::API::::test2_stdoutTest2::API::test2_stdout
111500ns500nsTest2::API::::test2_stderrTest2::API::test2_stderr
0000s0sTest2::API::::CLONETest2::API::CLONE
0000s0sTest2::API::::__ANON__[:257]Test2::API::__ANON__[:257]
0000s0sTest2::API::::__ANON__[:613]Test2::API::__ANON__[:613]
0000s0sTest2::API::::__ANON__[:679]Test2::API::__ANON__[:679]
0000s0sTest2::API::::__ANON__[:698]Test2::API::__ANON__[:698]
0000s0sTest2::API::::_canon_errorTest2::API::_canon_error
0000s0sTest2::API::::_context_acquire_callbacks_refTest2::API::_context_acquire_callbacks_ref
0000s0sTest2::API::::_context_init_callbacks_refTest2::API::_context_init_callbacks_ref
0000s0sTest2::API::::_depth_errorTest2::API::_depth_error
0000s0sTest2::API::::_existing_errorTest2::API::_existing_error
0000s0sTest2::API::::_interceptTest2::API::_intercept
0000s0sTest2::API::::_set_ipcTest2::API::_set_ipc
0000s0sTest2::API::::context_doTest2::API::context_do
0000s0sTest2::API::::interceptTest2::API::intercept
0000s0sTest2::API::::intercept_deepTest2::API::intercept_deep
0000s0sTest2::API::::no_contextTest2::API::no_context
0000s0sTest2::API::::run_subtestTest2::API::run_subtest
0000s0sTest2::API::::test2_add_callback_context_acquireTest2::API::test2_add_callback_context_acquire
0000s0sTest2::API::::test2_add_callback_context_initTest2::API::test2_add_callback_context_init
0000s0sTest2::API::::test2_add_callback_context_releaseTest2::API::test2_add_callback_context_release
0000s0sTest2::API::::test2_add_callback_pre_subtestTest2::API::test2_add_callback_pre_subtest
0000s0sTest2::API::::test2_add_callback_testing_doneTest2::API::test2_add_callback_testing_done
0000s0sTest2::API::::test2_add_uuid_viaTest2::API::test2_add_uuid_via
0000s0sTest2::API::::test2_disable_trace_stampsTest2::API::test2_disable_trace_stamps
0000s0sTest2::API::::test2_enable_trace_stampsTest2::API::test2_enable_trace_stamps
0000s0sTest2::API::::test2_formatter_setTest2::API::test2_formatter_set
0000s0sTest2::API::::test2_formattersTest2::API::test2_formatters
0000s0sTest2::API::::test2_get_is_endTest2::API::test2_get_is_end
0000s0sTest2::API::::test2_ipc_add_driverTest2::API::test2_ipc_add_driver
0000s0sTest2::API::::test2_ipc_disableTest2::API::test2_ipc_disable
0000s0sTest2::API::::test2_ipc_disable_pollingTest2::API::test2_ipc_disable_polling
0000s0sTest2::API::::test2_ipc_disabledTest2::API::test2_ipc_disabled
0000s0sTest2::API::::test2_ipc_driversTest2::API::test2_ipc_drivers
0000s0sTest2::API::::test2_ipc_enable_pollingTest2::API::test2_ipc_enable_polling
0000s0sTest2::API::::test2_ipc_enable_shmTest2::API::test2_ipc_enable_shm
0000s0sTest2::API::::test2_ipc_get_pendingTest2::API::test2_ipc_get_pending
0000s0sTest2::API::::test2_ipc_get_timeoutTest2::API::test2_ipc_get_timeout
0000s0sTest2::API::::test2_ipc_pollingTest2::API::test2_ipc_polling
0000s0sTest2::API::::test2_ipc_set_pendingTest2::API::test2_ipc_set_pending
0000s0sTest2::API::::test2_ipc_set_timeoutTest2::API::test2_ipc_set_timeout
0000s0sTest2::API::::test2_ipc_wait_disableTest2::API::test2_ipc_wait_disable
0000s0sTest2::API::::test2_ipc_wait_enableTest2::API::test2_ipc_wait_enable
0000s0sTest2::API::::test2_ipc_wait_enabledTest2::API::test2_ipc_wait_enabled
0000s0sTest2::API::::test2_is_testing_doneTest2::API::test2_is_testing_done
0000s0sTest2::API::::test2_list_context_acquire_callbacksTest2::API::test2_list_context_acquire_callbacks
0000s0sTest2::API::::test2_list_context_aquire_callbacksTest2::API::test2_list_context_aquire_callbacks
0000s0sTest2::API::::test2_list_context_init_callbacksTest2::API::test2_list_context_init_callbacks
0000s0sTest2::API::::test2_list_context_release_callbacksTest2::API::test2_list_context_release_callbacks
0000s0sTest2::API::::test2_list_exit_callbacksTest2::API::test2_list_exit_callbacks
0000s0sTest2::API::::test2_list_post_load_callbacksTest2::API::test2_list_post_load_callbacks
0000s0sTest2::API::::test2_list_pre_subtest_callbacksTest2::API::test2_list_pre_subtest_callbacks
0000s0sTest2::API::::test2_no_waitTest2::API::test2_no_wait
0000s0sTest2::API::::test2_pidTest2::API::test2_pid
0000s0sTest2::API::::test2_post_preload_resetTest2::API::test2_post_preload_reset
0000s0sTest2::API::::test2_reset_ioTest2::API::test2_reset_io
0000s0sTest2::API::::test2_start_preloadTest2::API::test2_start_preload
0000s0sTest2::API::::test2_stop_preloadTest2::API::test2_stop_preload
0000s0sTest2::API::::test2_tidTest2::API::test2_tid
0000s0sTest2::API::::test2_trace_stamps_enabledTest2::API::test2_trace_stamps_enabled
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::API;
2221µs214µs
# spent 12µs (10+2) within Test2::API::BEGIN@2 which was called: # once (10µs+2µs) by Test::Builder::BEGIN@18 at line 2
use strict;
# spent 12µs making 1 call to Test2::API::BEGIN@2 # spent 2µs making 1 call to strict::import
3218µs238µs
# spent 21µs (4+17) within Test2::API::BEGIN@3 which was called: # once (4µs+17µs) by Test::Builder::BEGIN@18 at line 3
use warnings;
# spent 21µs making 1 call to Test2::API::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
5280µs23.18ms
# spent 1.89ms (456µs+1.44) within Test2::API::BEGIN@5 which was called: # once (456µs+1.44ms) by Test::Builder::BEGIN@18 at line 5
use Time::HiRes qw/time/;
# spent 1.89ms making 1 call to Test2::API::BEGIN@5 # spent 1.28ms making 1 call to Time::HiRes::import
6232µs233µs
# spent 18µs (4+14) within Test2::API::BEGIN@6 which was called: # once (4µs+14µs) by Test::Builder::BEGIN@18 at line 6
use Test2::Util qw/USE_THREADS/;
# spent 18µs making 1 call to Test2::API::BEGIN@6 # spent 14µs making 1 call to Exporter::import
7
8
# spent 7µs within Test2::API::BEGIN@8 which was called: # once (7µs+0s) by Test::Builder::BEGIN@18 at line 11
BEGIN {
913µs $ENV{TEST_ACTIVE} ||= 1;
1014µs $ENV{TEST2_ACTIVE} = 1;
111130µs17µs}
# spent 7µs making 1 call to Test2::API::BEGIN@8
12
131400nsour $VERSION = '1.302198';
14
15
161200nsmy $INST;
171100nsmy $ENDING = 0;
1813µs
# spent 700ns within Test2::API::test2_unset_is_end which was called: # once (700ns+0s) by Test::Builder::reset at line 434 of Test/Builder.pm
sub test2_unset_is_end { $ENDING = 0 }
19sub test2_get_is_end { $ENDING }
20
21
# spent 188µs (31+156) within Test2::API::test2_set_is_end which was called 3 times, avg 63µs/call: # once (30µs+156µs) by Test2::API::END at line 1 of (eval 56)[Test2/API.pm:72] # once (800ns+0s) by Test2::API::Instance::END at line 1 of (eval 7)[Test2/API/Instance.pm:319] # once (400ns+0s) by Test2::API::END at line 55
sub test2_set_is_end {
223500ns my $before = $ENDING;
2331µs ($ENDING) = @_ ? @_ : (1);
24
25 # Only send the event in a transition from false to true
2632µs return if $before;
271200ns return unless $ENDING;
28
291200ns return unless $INST;
3012µs11µs my $stack = $INST->stack or return;
3112µs12µs my $root = $stack->root or return;
# spent 2µs making 1 call to Test2::API::Stack::root
32
331800ns1500ns return unless $root->count;
34
3513µs12µs return unless $$ == $INST->pid;
# spent 2µs making 1 call to Test2::API::Instance::pid
3615µs22µs return unless get_tid() == $INST->tid;
# spent 1µs making 1 call to Test2::API::Instance::tid # spent 800ns making 1 call to Test2::Util::__ANON__
37
3814µs112µs my $trace = Test2::EventFacet::Trace->new(
# spent 12µs making 1 call to Test2::Util::HashBase::_new
39 frame => [__PACKAGE__, __FILE__, __LINE__, __PACKAGE__ . '::test2_set_is_end'],
40 );
4111µs121µs my $ctx = Test2::API::Context->new(
# spent 21µs making 1 call to Test2::Util::HashBase::_new
42 trace => $trace,
43 hub => $root,
44 );
45
4613µs1116µs $ctx->send_ev2(control => { phase => 'END', details => 'Transition to END phase' });
# spent 116µs making 1 call to Test2::API::Context::send_ev2
47
4814µs1700ns 1;
# spent 700ns making 1 call to Test2::API::Context::DESTROY
49}
50
512137µs28.05ms
# spent 8.02ms (1.99+6.04) within Test2::API::BEGIN@51 which was called: # once (1.99ms+6.04ms) by Test::Builder::BEGIN@18 at line 51
use Test2::API::Instance(\$INST);
# spent 8.02ms making 1 call to Test2::API::BEGIN@51 # spent 26µs making 1 call to Test2::API::Instance::import
52
53# Set the exit status
54END {
551400ns1400ns test2_set_is_end(); # See gh #16
# spent 400ns making 1 call to Test2::API::test2_set_is_end
5613µs1113µs $INST->set_exit();
# spent 113µs making 1 call to Test2::API::Instance::set_exit
57}
58
59sub CLONE {
60 my $init = test2_init_done();
61 my $load = test2_load_done();
62
63 return if $init && $load;
64
65 require Carp;
66 Carp::croak "Test2 must be fully loaded before you start a new thread!\n";
67}
68
69# See gh #16
70{
71234µs232µs
# spent 18µs (5+13) within Test2::API::BEGIN@71 which was called: # once (5µs+13µs) by Test::Builder::BEGIN@18 at line 71
no warnings;
# spent 18µs making 1 call to Test2::API::BEGIN@71 # spent 13µs making 1 call to warnings::unimport
72125µs
# spent 25µs within Test2::API::INIT which was called: # once (25µs+0s) by main::RUNTIME at line 0 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
INIT { eval 'END { test2_set_is_end() }; 1' or die $@ }
# spent 4µs executing statements in string eval
# includes 8µs spent executing 2 calls to 1 sub defined therein.
73}
74
751400ns
# spent 3µs within Test2::API::BEGIN@75 which was called: # once (3µs+0s) by Test::Builder::BEGIN@18 at line 83
BEGIN {
76245µs224µs
# spent 14µs (4+10) within Test2::API::BEGIN@76 which was called: # once (4µs+10µs) by Test::Builder::BEGIN@18 at line 76
no warnings 'once';
# spent 14µs making 1 call to Test2::API::BEGIN@76 # spent 10µs making 1 call to warnings::unimport
7713µs if($] ge '5.014' || $ENV{T2_CHECK_DEPTH} || $Test2::API::DO_DEPTH_CHECK) {
78 *DO_DEPTH_CHECK = sub() { 1 };
79 }
80 else {
81 *DO_DEPTH_CHECK = sub() { 0 };
82 }
83113µs13µs}
# spent 3µs making 1 call to Test2::API::BEGIN@75
84
85210µs12µs
# spent 2µs within Test2::API::BEGIN@85 which was called: # once (2µs+0s) by Test::Builder::BEGIN@18 at line 85
use Test2::EventFacet::Trace();
# spent 2µs making 1 call to Test2::API::BEGIN@85
86282µs1145µs
# spent 145µs (110+34) within Test2::API::BEGIN@86 which was called: # once (110µs+34µs) by Test::Builder::BEGIN@18 at line 86
use Test2::Util::Trace(); # Legacy
# spent 145µs making 1 call to Test2::API::BEGIN@86
87
88268µs1586µs
# spent 586µs (397+188) within Test2::API::BEGIN@88 which was called: # once (397µs+188µs) by Test::Builder::BEGIN@18 at line 88
use Test2::Hub::Subtest();
# spent 586µs making 1 call to Test2::API::BEGIN@88
89268µs1660µs
# spent 660µs (429+231) within Test2::API::BEGIN@89 which was called: # once (429µs+231µs) by Test::Builder::BEGIN@18 at line 89
use Test2::Hub::Interceptor();
# spent 660µs making 1 call to Test2::API::BEGIN@89
90210µs12µs
# spent 2µs within Test2::API::BEGIN@90 which was called: # once (2µs+0s) by Test::Builder::BEGIN@18 at line 90
use Test2::Hub::Interceptor::Terminator();
# spent 2µs making 1 call to Test2::API::BEGIN@90
91
922102µs15.20ms
# spent 5.20ms (403µs+4.80) within Test2::API::BEGIN@92 which was called: # once (403µs+4.80ms) by Test::Builder::BEGIN@18 at line 92
use Test2::Event::Ok();
# spent 5.20ms making 1 call to Test2::API::BEGIN@92
93268µs1284µs
# spent 284µs (202+83) within Test2::API::BEGIN@93 which was called: # once (202µs+83µs) by Test::Builder::BEGIN@18 at line 93
use Test2::Event::Diag();
# spent 284µs making 1 call to Test2::API::BEGIN@93
94269µs1281µs
# spent 281µs (200+81) within Test2::API::BEGIN@94 which was called: # once (200µs+81µs) by Test::Builder::BEGIN@18 at line 94
use Test2::Event::Note();
# spent 281µs making 1 call to Test2::API::BEGIN@94
95274µs1535µs
# spent 535µs (419+116) within Test2::API::BEGIN@95 which was called: # once (419µs+116µs) by Test::Builder::BEGIN@18 at line 95
use Test2::Event::Plan();
# spent 535µs making 1 call to Test2::API::BEGIN@95
96268µs1296µs
# spent 296µs (206+90) within Test2::API::BEGIN@96 which was called: # once (206µs+90µs) by Test::Builder::BEGIN@18 at line 96
use Test2::Event::Bail();
# spent 296µs making 1 call to Test2::API::BEGIN@96
97272µs1333µs
# spent 333µs (230+103) within Test2::API::BEGIN@97 which was called: # once (230µs+103µs) by Test::Builder::BEGIN@18 at line 97
use Test2::Event::Exception();
# spent 333µs making 1 call to Test2::API::BEGIN@97
98268µs1239µs
# spent 239µs (176+63) within Test2::API::BEGIN@98 which was called: # once (176µs+63µs) by Test::Builder::BEGIN@18 at line 98
use Test2::Event::Waiting();
# spent 239µs making 1 call to Test2::API::BEGIN@98
99271µs1306µs
# spent 306µs (224+83) within Test2::API::BEGIN@99 which was called: # once (224µs+83µs) by Test::Builder::BEGIN@18 at line 99
use Test2::Event::Skip();
# spent 306µs making 1 call to Test2::API::BEGIN@99
100280µs1631µs
# spent 631µs (475+156) within Test2::API::BEGIN@100 which was called: # once (475µs+156µs) by Test::Builder::BEGIN@18 at line 100
use Test2::Event::Subtest();
# spent 631µs making 1 call to Test2::API::BEGIN@100
101
102219µs250µs
# spent 27µs (5+22) within Test2::API::BEGIN@102 which was called: # once (5µs+22µs) by Test::Builder::BEGIN@18 at line 102
use Carp qw/carp croak confess/;
# spent 27µs making 1 call to Test2::API::BEGIN@102 # spent 22µs making 1 call to Exporter::import
103216µs232µs
# spent 18µs (4+14) within Test2::API::BEGIN@103 which was called: # once (4µs+14µs) by Test::Builder::BEGIN@18 at line 103
use Scalar::Util qw/blessed weaken/;
# spent 18µs making 1 call to Test2::API::BEGIN@103 # spent 14µs making 1 call to Exporter::import
104273µs233µs
# spent 18µs (4+15) within Test2::API::BEGIN@104 which was called: # once (4µs+15µs) by Test::Builder::BEGIN@18 at line 104
use Test2::Util qw/get_tid clone_io pkg_to_file gen_uid/;
# spent 18µs making 1 call to Test2::API::BEGIN@104 # spent 15µs making 1 call to Exporter::import
105
10614µsour @EXPORT_OK = qw{
107 context release
108 context_do
109 no_context
110 intercept intercept_deep
111 run_subtest
112
113 test2_init_done
114 test2_load_done
115 test2_load
116 test2_start_preload
117 test2_stop_preload
118 test2_in_preload
119 test2_is_testing_done
120
121 test2_set_is_end
122 test2_unset_is_end
123 test2_get_is_end
124
125 test2_pid
126 test2_tid
127 test2_stack
128 test2_no_wait
129 test2_ipc_wait_enable
130 test2_ipc_wait_disable
131 test2_ipc_wait_enabled
132
133 test2_add_uuid_via
134
135 test2_add_callback_testing_done
136
137 test2_add_callback_context_aquire
138 test2_add_callback_context_acquire
139 test2_add_callback_context_init
140 test2_add_callback_context_release
141 test2_add_callback_exit
142 test2_add_callback_post_load
143 test2_add_callback_pre_subtest
144 test2_list_context_aquire_callbacks
145 test2_list_context_acquire_callbacks
146 test2_list_context_init_callbacks
147 test2_list_context_release_callbacks
148 test2_list_exit_callbacks
149 test2_list_post_load_callbacks
150 test2_list_pre_subtest_callbacks
151
152 test2_ipc
153 test2_has_ipc
154 test2_ipc_disable
155 test2_ipc_disabled
156 test2_ipc_drivers
157 test2_ipc_add_driver
158 test2_ipc_polling
159 test2_ipc_disable_polling
160 test2_ipc_enable_polling
161 test2_ipc_get_pending
162 test2_ipc_set_pending
163 test2_ipc_get_timeout
164 test2_ipc_set_timeout
165
166 test2_formatter
167 test2_formatters
168 test2_formatter_add
169 test2_formatter_set
170
171 test2_stdout
172 test2_stderr
173 test2_reset_io
174
175 test2_enable_trace_stamps
176 test2_disable_trace_stamps
177 test2_trace_stamps_enabled
178};
17921.97ms17µs
# spent 7µs within Test2::API::BEGIN@179 which was called: # once (7µs+0s) by Test::Builder::BEGIN@18 at line 179
BEGIN { require Exporter; our @ISA = qw(Exporter) }
# spent 7µs making 1 call to Test2::API::BEGIN@179
180
18112µs12µsmy $STACK = $INST->stack;
1821600ns1500nsmy $CONTEXTS = $INST->contexts;
1831400ns1500nsmy $INIT_CBS = $INST->context_init_callbacks;
1841500ns1400nsmy $ACQUIRE_CBS = $INST->context_acquire_callbacks;
185
18611µs148µsmy $STDOUT = clone_io(\*STDOUT);
# spent 48µs making 1 call to Test2::Util::clone_io
1871800ns122µsmy $STDERR = clone_io(\*STDERR);
# spent 22µs making 1 call to Test2::Util::clone_io
18811µs
# spent 600ns within Test2::API::test2_stdout which was called: # once (600ns+0s) by Test2::Formatter::TAP::_open_handles at line 57 of Test2/Formatter/TAP.pm
sub test2_stdout { $STDOUT ||= clone_io(\*STDOUT) }
18916µs
# spent 500ns within Test2::API::test2_stderr which was called: # once (500ns+0s) by Test2::Formatter::TAP::_open_handles at line 58 of Test2/Formatter/TAP.pm
sub test2_stderr { $STDERR ||= clone_io(\*STDERR) }
190
191sub test2_post_preload_reset {
192 test2_reset_io();
193 $INST->post_preload_reset;
194}
195
196sub test2_reset_io {
197 $STDOUT = clone_io(\*STDOUT);
198 $STDERR = clone_io(\*STDERR);
199}
200
20113µs11µs
# spent 5µs (4+1) within Test2::API::test2_init_done which was called: # once (4µs+1µs) by Test::Builder::BEGIN@20 at line 21 of Test/Builder.pm
sub test2_init_done { $INST->finalized }
20211µs1700ns
# spent 2µs (1+700ns) within Test2::API::test2_load_done which was called: # once (1µs+700ns) by Test::Builder::BEGIN@20 at line 21 of Test/Builder.pm
sub test2_load_done { $INST->loaded }
203
20436µs3485µs
# spent 491µs (6+485) within Test2::API::test2_load which was called 3 times, avg 164µs/call: # 2 times (3µs+483µs) by Test::Builder::Module::import at line 78 of Test/Builder/Module.pm, avg 243µs/call # once (3µs+2µs) by Test::Builder::INIT at line 134 of Test/Builder.pm
sub test2_load { $INST->load }
# spent 485µs making 3 calls to Test2::API::Instance::load, avg 162µs/call
205sub test2_start_preload { $ENV{T2_IN_PRELOAD} = 1; $INST->start_preload }
206sub test2_stop_preload { $ENV{T2_IN_PRELOAD} = 0; $INST->stop_preload }
207410µs44µs
# spent 18µs (14+4) within Test2::API::test2_in_preload which was called 4 times, avg 5µs/call: # 2 times (8µs+2µs) by Test::Builder::Module::import at line 78 of Test/Builder/Module.pm, avg 5µs/call # once (4µs+2µs) by Test::Builder::INIT at line 134 of Test/Builder.pm # once (2µs+600ns) by Test::Builder::reset at line 443 of Test/Builder.pm
sub test2_in_preload { $INST->preload }
# spent 4µs making 4 calls to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84], avg 1µs/call
208
209sub test2_pid { $INST->pid }
210sub test2_tid { $INST->tid }
21113µs11µs
# spent 6µs (5+1) within Test2::API::test2_stack which was called: # once (5µs+1µs) by Test::Builder::create at line 168 of Test/Builder.pm
sub test2_stack { $INST->stack }
212sub test2_ipc_wait_enable { $INST->set_no_wait(0) }
213sub test2_ipc_wait_disable { $INST->set_no_wait(1) }
214sub test2_ipc_wait_enabled { !$INST->no_wait }
215
216sub test2_enable_trace_stamps { $INST->test2_enable_trace_stamps }
217sub test2_disable_trace_stamps { $INST->test2_disable_trace_stamps }
218sub test2_trace_stamps_enabled { $INST->test2_trace_stamps_enabled }
219
220sub test2_is_testing_done {
221 # No instance? VERY DONE!
222 return 1 unless $INST;
223
224 # No stack? tests must be done, it is created pretty early
225 my $stack = $INST->stack or return 1;
226
227 # Nothing on the stack, no root hub yet, likely have not started testing
228 return 0 unless @$stack;
229
230 # Stack has a slot for the root hub (see above) but it is undefined, likely
231 # garbage collected, test is done
232 my $root_hub = $stack->[0] or return 1;
233
234 # If the root hub is ended than testing is done.
235 return 1 if $root_hub->ended;
236
237 # Looks like we are still testing!
238 return 0;
239}
240
241sub test2_no_wait {
242 $INST->set_no_wait(@_) if @_;
243 $INST->no_wait;
244}
245
246sub test2_add_callback_testing_done {
247 my $cb = shift;
248
249 test2_add_callback_post_load(sub {
250 my $stack = test2_stack();
251 $stack->top; # Ensure we have a hub
252 my ($hub) = Test2::API::test2_stack->all;
253
254 $hub->set_active(1);
255
256 $hub->follow_up($cb);
257 });
258
259 return;
260}
261
262sub test2_add_callback_context_acquire { $INST->add_context_acquire_callback(@_) }
26312µs13µs
# spent 5µs (2+3) within Test2::API::test2_add_callback_context_aquire which was called: # once (2µs+3µs) by Test::Builder::new at line 154 of Test/Builder.pm
sub test2_add_callback_context_aquire { $INST->add_context_acquire_callback(@_) }
264sub test2_add_callback_context_init { $INST->add_context_init_callback(@_) }
265sub test2_add_callback_context_release { $INST->add_context_release_callback(@_) }
26612µs13µs
# spent 4µs (2+3) within Test2::API::test2_add_callback_exit which was called: # once (2µs+3µs) by Test::Builder::new at line 156 of Test/Builder.pm
sub test2_add_callback_exit { $INST->add_exit_callback(@_) }
# spent 3µs making 1 call to Test2::API::Instance::add_exit_callback
26712µs18µs
# spent 11µs (3+8) within Test2::API::test2_add_callback_post_load which was called: # once (3µs+8µs) by Test::Builder::new at line 149 of Test/Builder.pm
sub test2_add_callback_post_load { $INST->add_post_load_callback(@_) }
# spent 8µs making 1 call to Test2::API::Instance::add_post_load_callback
268sub test2_add_callback_pre_subtest { $INST->add_pre_subtest_callback(@_) }
269sub test2_list_context_aquire_callbacks { @{$INST->context_acquire_callbacks} }
270sub test2_list_context_acquire_callbacks { @{$INST->context_acquire_callbacks} }
271sub test2_list_context_init_callbacks { @{$INST->context_init_callbacks} }
272sub test2_list_context_release_callbacks { @{$INST->context_release_callbacks} }
273sub test2_list_exit_callbacks { @{$INST->exit_callbacks} }
274sub test2_list_post_load_callbacks { @{$INST->post_load_callbacks} }
275sub test2_list_pre_subtest_callbacks { @{$INST->pre_subtest_callbacks} }
276
277sub test2_add_uuid_via {
278 $INST->set_add_uuid_via(@_) if @_;
279 $INST->add_uuid_via();
280}
281
28212µs13µs
# spent 4µs (2+3) within Test2::API::test2_ipc which was called: # once (2µs+3µs) by Test2::API::Stack::new_hub at line 33 of Test2/API/Stack.pm
sub test2_ipc { $INST->ipc }
28312µs11µs
# spent 3µs (2+1) within Test2::API::test2_has_ipc which was called: # once (2µs+1µs) by Test::Builder::new at line 158 of Test/Builder.pm
sub test2_has_ipc { $INST->has_ipc }
# spent 1µs making 1 call to Test2::API::Instance::has_ipc
284sub test2_ipc_disable { $INST->ipc_disable }
285sub test2_ipc_disabled { $INST->ipc_disabled }
286sub test2_ipc_add_driver { $INST->add_ipc_driver(@_) }
287sub test2_ipc_drivers { @{$INST->ipc_drivers} }
288sub test2_ipc_polling { $INST->ipc_polling }
289sub test2_ipc_enable_polling { $INST->enable_ipc_polling }
290sub test2_ipc_disable_polling { $INST->disable_ipc_polling }
291sub test2_ipc_get_pending { $INST->get_ipc_pending }
292sub test2_ipc_set_pending { $INST->set_ipc_pending(@_) }
293sub test2_ipc_set_timeout { $INST->set_ipc_timeout(@_) }
294sub test2_ipc_get_timeout { $INST->ipc_timeout() }
295sub test2_ipc_enable_shm { 0 }
296
297
# spent 21µs (3+18) within Test2::API::test2_formatter which was called: # once (3µs+18µs) by Test2::API::Stack::new_hub at line 31 of Test2/API/Stack.pm
sub test2_formatter {
2981300ns if ($ENV{T2_FORMATTER} && $ENV{T2_FORMATTER} =~ m/^(\+)?(.*)$/) {
299 my $formatter = $1 ? $2 : "Test2::Formatter::$2";
300 my $file = pkg_to_file($formatter);
301 require $file;
302 return $formatter;
303 }
304
30512µs118µs return $INST->formatter;
306}
307
308sub test2_formatters { @{$INST->formatters} }
30913µs13µs
# spent 8µs (5+3) within Test2::API::test2_formatter_add which was called: # once (5µs+3µs) by Test2::Formatter::import at line 14 of Test2/Formatter.pm
sub test2_formatter_add { $INST->add_formatter(@_) }
# spent 3µs making 1 call to Test2::API::Instance::add_formatter
310sub test2_formatter_set {
311 my ($formatter) = @_;
312 croak "No formatter specified" unless $formatter;
313 croak "Global Formatter already set" if $INST->formatter_set;
314 $INST->set_formatter($formatter);
315}
316
317# Private, for use in Test2::API::Context
31812µs1500ns
# spent 3µs (2+500ns) within Test2::API::_contexts_ref which was called: # once (2µs+500ns) by Test::Builder::BEGIN@18 at line 34 of Test2/API/Context.pm
sub _contexts_ref { $INST->contexts }
319sub _context_acquire_callbacks_ref { $INST->context_acquire_callbacks }
320sub _context_init_callbacks_ref { $INST->context_init_callbacks }
32113µs11µs
# spent 6µs (5+1) within Test2::API::_context_release_callbacks_ref which was called: # once (5µs+1µs) by Test::Builder::BEGIN@18 at line 33 of Test2/API/Context.pm
sub _context_release_callbacks_ref { $INST->context_release_callbacks }
32226µs
# spent 2µs within Test2::API::_add_uuid_via_ref which was called 2 times, avg 800ns/call: # once (900ns+0s) by Test::Builder::BEGIN@18 at line 370 # once (700ns+0s) by Test2::Hub::init at line 48 of Test2/Hub.pm
sub _add_uuid_via_ref { \($INST->{Test2::API::Instance::ADD_UUID_VIA()}) }
323
324# Private, for use in Test2::IPC
325sub _set_ipc { $INST->set_ipc(@_) }
326
327sub context_do(&;@) {
328 my $code = shift;
329 my @args = @_;
330
331 my $ctx = context(level => 1);
332
333 my $want = wantarray;
334
335 my @out;
336 my $ok = eval {
337 $want ? @out = $code->($ctx, @args) :
338 defined($want) ? $out[0] = $code->($ctx, @args) :
339 $code->($ctx, @args) ;
340 1;
341 };
342 my $err = $@;
343
344 $ctx->release;
345
346 die $err unless $ok;
347
348 return @out if $want;
349 return $out[0] if defined $want;
350 return;
351}
352
353sub no_context(&;$) {
354 my ($code, $hid) = @_;
355 $hid ||= $STACK->top->hid;
356
357 my $ctx = $CONTEXTS->{$hid};
358 delete $CONTEXTS->{$hid};
359 my $ok = eval { $code->(); 1 };
360 my $err = $@;
361
362 $CONTEXTS->{$hid} = $ctx;
363 weaken($CONTEXTS->{$hid});
364
365 die $err unless $ok;
366
367 return;
368};
369
3701700ns1900nsmy $UUID_VIA = _add_uuid_via_ref();
# spent 900ns making 1 call to Test2::API::_add_uuid_via_ref
371
# spent 400µs (221+179) within Test2::API::context which was called 8 times, avg 50µs/call: # 8 times (221µs+179µs) by Test::Builder::ctx at line 193 of Test/Builder.pm, avg 50µs/call
sub context {
372 # We need to grab these before anything else to ensure they are not
373 # changed.
374812µs my ($errno, $eval_error, $child_error, $extended_error) = (0 + $!, $@, $?, $^E);
375
376814µs my %params = (level => 0, wrapped => 0, @_);
377
378 # If something is getting a context then the sync system needs to be
379 # considered loaded...
38082µs $INST->load unless $INST->{loaded};
381
38281µs croak "context() called, but return value is ignored"
383 unless defined wantarray;
384
38583µs my $stack = $params{stack} || $STACK;
38685µs1157µs my $hub = $params{hub} || (@$stack ? $stack->[-1] : $stack->top);
# spent 157µs making 1 call to Test2::API::Stack::top
387
388 # Catch an edge case where we try to get context after the root hub has
389 # been garbage collected resulting in a stack that has a single undef
390 # hub
39184µs if (!($hub && $hub->{hid}) && !exists($params{hub}) && @$stack) {
392 my $msg;
393
394 if ($hub && !$hub->{hid}) {
395 $msg = Carp::longmess("$hub has no hid! (did you attempt a testing event after done_testing?). You may be relying on a tool or plugin that was based off an old Test2 that did not require hids.");
396 }
397 else {
398 $msg = Carp::longmess("Attempt to get Test2 context after testing has completed (did you attempt a testing event after done_testing?)");
399 }
400
401 # The error message is usually masked by the global destruction, so we have to print to STDER
402 print STDERR $msg;
403
404 # Make sure this is a failure, we are probably already in END, so set $? to change the exit code
405 $? = 1;
406
407 # Now we actually die to interrupt the program flow and avoid undefined his warnings
408 die $msg;
409 }
410
41182µs my $hid = $hub->{hid};
41282µs my $current = $CONTEXTS->{$hid};
413
414811µs87µs $_->(\%params) for @$ACQUIRE_CBS;
# spent 7µs making 8 calls to Test::Builder::__ANON__[Test/Builder.pm:154], avg 862ns/call
41582µs map $_->(\%params), @{$hub->{_context_acquire}} if $hub->{_context_acquire};
416
417 # This is for https://github.com/Test-More/test-more/issues/16
418 # and https://rt.perl.org/Public/Bug/Display.html?id=127774
41985µs my $phase = ${^GLOBAL_PHASE} || 'NA';
42084µs my $end_phase = $ENDING || $phase eq 'END' || $phase eq 'DESTRUCT';
421
42282µs my $level = 1 + $params{level};
423820µs my ($pkg, $file, $line, $sub, @other) = $end_phase ? caller(0) : caller($level);
4248900ns unless ($pkg || $end_phase) {
425 confess "Could not find context at depth $level" unless $params{fudge};
426 ($pkg, $file, $line, $sub, @other) = caller(--$level) while ($level >= 0 && !$pkg);
427 }
428
42981µs my $depth = $level;
430816µs $depth++ while DO_DEPTH_CHECK && !$end_phase && (!$current || $depth <= $current->{_depth} + $params{wrapped}) && caller($depth + 1);
43182µs $depth -= $params{wrapped};
43282µs my $depth_ok = !DO_DEPTH_CHECK || $end_phase || !$current || $current->{_depth} < $depth;
433
43481µs if ($current && $params{on_release} && $depth_ok) {
435 $current->{_on_release} ||= [];
436 push @{$current->{_on_release}} => $params{on_release};
437 }
438
439 # I know this is ugly....
440825µs ($!, $@, $?, $^E) = ($errno, $eval_error, $child_error, $extended_error) and return bless(
441 {
442 %$current,
443 _is_canon => undef,
444 errno => $errno,
445 eval_error => $eval_error,
446 child_error => $child_error,
447 _is_spawn => [$pkg, $file, $line, $sub],
448 },
449 'Test2::API::Context'
450 ) if $current && $depth_ok;
451
452 # Handle error condition of bad level
4534700ns if ($current) {
454 unless (${$current->{_aborted}}) {
455 _canon_error($current, [$pkg, $file, $line, $sub, $depth])
456 unless $current->{_is_canon};
457
458 _depth_error($current, [$pkg, $file, $line, $sub, $depth])
459 unless $depth_ok;
460 }
461
462 $current->release if $current->{_is_canon};
463
464 delete $CONTEXTS->{$hid};
465 }
466
467 # Directly bless the object here, calling new is a noticeable performance
468 # hit with how often this needs to be called.
469 my $trace = bless(
470 {
471 frame => [$pkg, $file, $line, $sub],
472 pid => $$,
473 tid => get_tid(),
474 cid => gen_uid(),
475 hid => $hid,
476 nested => $hub->{nested},
477 buffered => $hub->{buffered},
478
479 full_caller => [$pkg, $file, $line, $sub, @other],
480
481 $INST->{trace_stamps} ? (stamp => time()) : (),
482
483 $$UUID_VIA ? (
484 huuid => $hub->{uuid},
485428µs410µs uuid => ${$UUID_VIA}->('context'),
# spent 10µs making 4 calls to Test2::Util::gen_uid, avg 2µs/call
486 ) : (),
487 },
488 'Test2::EventFacet::Trace'
489 );
490
491 # Directly bless the object here, calling new is a noticeable performance
492 # hit with how often this needs to be called.
4934700ns my $aborted = 0;
494 $current = bless(
495 {
496 _aborted => \$aborted,
497 stack => $stack,
498 hub => $hub,
499 trace => $trace,
500 _is_canon => 1,
501 _depth => $depth,
502 errno => $errno,
503 eval_error => $eval_error,
504 child_error => $child_error,
505411µs $params{on_release} ? (_on_release => [$params{on_release}]) : (),
506 },
507 'Test2::API::Context'
508 );
509
51042µs $CONTEXTS->{$hid} = $current;
511419µs45µs weaken($CONTEXTS->{$hid});
# spent 5µs making 4 calls to Scalar::Util::weaken, avg 1µs/call
512
51342µs $_->($current) for @$INIT_CBS;
51441µs map $_->($current), @{$hub->{_context_init}} if $hub->{_context_init};
515
5164900ns $params{on_init}->($current) if $params{on_init};
517
51847µs ($!, $@, $?, $^E) = ($errno, $eval_error, $child_error, $extended_error);
519
52049µs return $current;
521}
522
523sub _depth_error {
524 _existing_error(@_, <<" EOT");
525context() was called to retrieve an existing context, however the existing
526context was created in a stack frame at the same, or deeper level. This usually
527means that a tool failed to release the context when it was finished.
528 EOT
529}
530
531sub _canon_error {
532 _existing_error(@_, <<" EOT");
533context() was called to retrieve an existing context, however the existing
534context has an invalid internal state (!_canon_count). This should not normally
535happen unless something is mucking about with internals...
536 EOT
537}
538
539sub _existing_error {
540 my ($ctx, $details, $msg) = @_;
541 my ($pkg, $file, $line, $sub, $depth) = @$details;
542
543 my $oldframe = $ctx->{trace}->frame;
544 my $olddepth = $ctx->{_depth};
545
546 # Older versions of Carp do not export longmess() function, so it needs to be called with package name
547 my $mess = Carp::longmess();
548
549 warn <<" EOT";
550$msg
551Old context details:
552 File: $oldframe->[1]
553 Line: $oldframe->[2]
554 Tool: $oldframe->[3]
555 Depth: $olddepth
556
557New context details:
558 File: $file
559 Line: $line
560 Tool: $sub
561 Depth: $depth
562
563Trace: $mess
564
565Removing the old context and creating a new one...
566 EOT
567}
568
569
# spent 18µs (7+10) within Test2::API::release which was called 3 times, avg 6µs/call: # once (2µs+5µs) by Test::Builder::done_testing at line 620 of Test/Builder.pm # once (3µs+3µs) by Test::Builder::current_test at line 1464 of Test/Builder.pm # once (2µs+2µs) by Test::Builder::use_numbers at line 1229 of Test/Builder.pm
sub release($;$) {
57032µs310µs $_[0]->release;
# spent 10µs making 3 calls to Test2::API::Context::release, avg 3µs/call
57134µs return $_[1];
572}
573
574sub intercept(&) {
575 my $code = shift;
576 my $ctx = context();
577
578 my $events = _intercept($code, deep => 0);
579
580 $ctx->release;
581
582 return $events;
583}
584
585sub intercept_deep(&) {
586 my $code = shift;
587 my $ctx = context();
588
589 my $events = _intercept($code, deep => 1);
590
591 $ctx->release;
592
593 return $events;
594}
595
596sub _intercept {
597 my $code = shift;
598 my %params = @_;
599 my $ctx = context();
600
601 my $ipc;
602 if (my $global_ipc = test2_ipc()) {
603 my $driver = blessed($global_ipc);
604 $ipc = $driver->new;
605 }
606
607 my $hub = Test2::Hub::Interceptor->new(
608 ipc => $ipc,
609 no_ending => 1,
610 );
611
612 my @events;
613 $hub->listen(sub { push @events => $_[1] }, inherit => $params{deep});
614
615 $ctx->stack->top; # Make sure there is a top hub before we begin.
616 $ctx->stack->push($hub);
617
618 my $trace = $ctx->trace;
619 my $state = {};
620 $hub->clean_inherited(trace => $trace, state => $state);
621
622 my ($ok, $err) = (1, undef);
623 T2_SUBTEST_WRAPPER: {
624 # Do not use 'try' cause it localizes __DIE__
625 $ok = eval { $code->(hub => $hub, context => $ctx->snapshot); 1 };
626 $err = $@;
627
628 # They might have done 'BEGIN { skip_all => "whatever" }'
629 if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && $err->isa('Test2::Hub::Interceptor::Terminator'))) {
630 $ok = 1;
631 $err = undef;
632 }
633 }
634
635 $hub->cull;
636 $ctx->stack->pop($hub);
637
638 $hub->restore_inherited(trace => $trace, state => $state);
639
640 $ctx->release;
641
642 die $err unless $ok;
643
644 $hub->finalize($trace, 1)
645 if $ok
646 && !$hub->no_ending
647 && !$hub->ended;
648
649 require Test2::API::InterceptResult;
650 return Test2::API::InterceptResult->new_from_ref(\@events);
651}
652
653sub run_subtest {
654 my ($name, $code, $params, @args) = @_;
655
656 $_->($name,$code,@args)
657 for Test2::API::test2_list_pre_subtest_callbacks();
658
659 $params = {buffered => $params} unless ref $params;
660 my $inherit_trace = delete $params->{inherit_trace};
661
662 my $ctx = context();
663
664 my $parent = $ctx->hub;
665
666 # If a parent is buffered then the child must be as well.
667 my $buffered = $params->{buffered} || $parent->{buffered};
668
669 $ctx->note($name) unless $buffered;
670
671 my $stack = $ctx->stack || $STACK;
672 my $hub = $stack->new_hub(
673 class => 'Test2::Hub::Subtest',
674 %$params,
675 buffered => $buffered,
676 );
677
678 my @events;
679 $hub->listen(sub { push @events => $_[1] });
680
681 if ($buffered) {
682 if (my $format = $hub->format) {
683 my $hide = $format->can('hide_buffered') ? $format->hide_buffered : 1;
684 $hub->format(undef) if $hide;
685 }
686 }
687
688 if ($inherit_trace) {
689 my $orig = $code;
690 $code = sub {
691 my $base_trace = $ctx->trace;
692 my $trace = $base_trace->snapshot(nested => 1 + $base_trace->nested);
693 my $st_ctx = Test2::API::Context->new(
694 trace => $trace,
695 hub => $hub,
696 );
697 $st_ctx->do_in_context($orig, @args);
698 };
699 }
700
701 my $start_stamp = time;
702
703 my ($ok, $err, $finished);
704 T2_SUBTEST_WRAPPER: {
705 # Do not use 'try' cause it localizes __DIE__
706 $ok = eval { $code->(@args); 1 };
707 $err = $@;
708
709 # They might have done 'BEGIN { skip_all => "whatever" }'
710 if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && blessed($err) eq 'Test::Builder::Exception')) {
711 $ok = undef;
712 $err = undef;
713 }
714 else {
715 $finished = 1;
716 }
717 }
718
719 my $stop_stamp = time;
720
721 if ($params->{no_fork}) {
722 if ($$ != $ctx->trace->pid) {
723 warn $ok ? "Forked inside subtest, but subtest never finished!\n" : $err;
724 exit 255;
725 }
726
727 if (get_tid() != $ctx->trace->tid) {
728 warn $ok ? "Started new thread inside subtest, but thread never finished!\n" : $err;
729 exit 255;
730 }
731 }
732 elsif (!$parent->is_local && !$parent->ipc) {
733 warn $ok ? "A new process or thread was started inside subtest, but IPC is not enabled!\n" : $err;
734 exit 255;
735 }
736
737 $stack->pop($hub);
738
739 my $trace = $ctx->trace;
740
741 my $bailed = $hub->bailed_out;
742
743 if (!$finished) {
744 if ($bailed && !$buffered) {
745 $ctx->bail($bailed->reason);
746 }
747 elsif ($bailed && $buffered) {
748 $ok = 1;
749 }
750 else {
751 my $code = $hub->exit_code;
752 $ok = !$code;
753 $err = "Subtest ended with exit code $code" if $code;
754 }
755 }
756
757 $hub->finalize($trace->snapshot(huuid => $hub->uuid, hid => $hub->hid, nested => $hub->nested, buffered => $buffered), 1)
758 if $ok
759 && !$hub->no_ending
760 && !$hub->ended;
761
762 my $pass = $ok && $hub->is_passing;
763 my $e = $ctx->build_event(
764 'Subtest',
765 pass => $pass,
766 name => $name,
767 subtest_id => $hub->id,
768 subtest_uuid => $hub->uuid,
769 buffered => $buffered,
770 subevents => \@events,
771 start_stamp => $start_stamp,
772 stop_stamp => $stop_stamp,
773 );
774
775 my $plan_ok = $hub->check_plan;
776
777 $ctx->hub->send($e);
778
779 $ctx->failure_diag($e) unless $e->pass;
780
781 $ctx->diag("Caught exception in subtest: $err") unless $ok;
782
783 $ctx->diag("Bad subtest plan, expected " . $hub->plan . " but ran " . $hub->count)
784 if defined($plan_ok) && !$plan_ok;
785
786 $ctx->bail($bailed->reason) if $bailed && $buffered;
787
788 $ctx->release;
789 return $pass;
790}
791
792# There is a use-cycle between API and API/Context. Context needs to use some
793# API functions as the package is compiling. Test2::API::context() needs
794# Test2::API::Context to be loaded, but we cannot 'require' the module there as
795# it causes a very noticeable performance impact with how often context() is
796# called.
797182µsrequire Test2::API::Context;
798
79916µs1;
800
801__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 49)[JSON-PP-pm-692]-157-line.html0000644000175000017500000003205114576335353024004 0ustar michamicha Profile of (eval 49)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 49)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 400ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11400ns 111111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Fail-pm-63-line.html0000644000175000017500000007360014576335353023554 0ustar michamicha Profile of Test2/Event/Fail.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Fail.pm
StatementsExecuted 13 statements in 291µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs12µsTest2::Event::Fail::::BEGIN@2Test2::Event::Fail::BEGIN@2
1118µs8µsTest2::Event::Fail::::BEGIN@9Test2::Event::Fail::BEGIN@9
1116µs7µsTest2::Event::Fail::::BEGIN@7Test2::Event::Fail::BEGIN@7
1114µs57µsTest2::Event::Fail::::BEGIN@15Test2::Event::Fail::BEGIN@15
1114µs20µsTest2::Event::Fail::::BEGIN@3Test2::Event::Fail::BEGIN@3
111400ns400nsTest2::Event::Fail::::__ANON__Test2::Event::Fail::__ANON__ (xsub)
0000s0sTest2::Event::Fail::::add_infoTest2::Event::Fail::add_info
0000s0sTest2::Event::Fail::::causes_failTest2::Event::Fail::causes_fail
0000s0sTest2::Event::Fail::::diagnosticsTest2::Event::Fail::diagnostics
0000s0sTest2::Event::Fail::::facet_dataTest2::Event::Fail::facet_data
0000s0sTest2::Event::Fail::::globalTest2::Event::Fail::global
0000s0sTest2::Event::Fail::::increments_countTest2::Event::Fail::increments_count
0000s0sTest2::Event::Fail::::no_displayTest2::Event::Fail::no_display
0000s0sTest2::Event::Fail::::sets_planTest2::Event::Fail::sets_plan
0000s0sTest2::Event::Fail::::subtest_idTest2::Event::Fail::subtest_id
0000s0sTest2::Event::Fail::::summaryTest2::Event::Fail::summary
0000s0sTest2::Event::Fail::::terminateTest2::Event::Fail::terminate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Fail;
2220µs214µs
# spent 12µs (11+2) within Test2::Event::Fail::BEGIN@2 which was called: # once (11µs+2µs) by Test::Builder::BEGIN@18 at line 2
use strict;
# spent 12µs making 1 call to Test2::Event::Fail::BEGIN@2 # spent 2µs making 1 call to strict::import
3222µs237µs
# spent 20µs (4+17) within Test2::Event::Fail::BEGIN@3 which was called: # once (4µs+17µs) by Test::Builder::BEGIN@18 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Event::Fail::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7241µs27µs
# spent 7µs (6+400ns) within Test2::Event::Fail::BEGIN@7 which was called: # once (6µs+400ns) by Test::Builder::BEGIN@18 at line 7
use Test2::EventFacet::Info;
# spent 7µs making 1 call to Test2::Event::Fail::BEGIN@7 # spent 400ns making 1 call to Test2::Event::Fail::__ANON__
8
9
# spent 8µs within Test2::Event::Fail::BEGIN@9 which was called: # once (8µs+0s) by Test::Builder::BEGIN@18 at line 13
BEGIN {
101400ns require Test2::Event;
1116µs our @ISA = qw(Test2::Event);
1213µs *META_KEY = \&Test2::Util::ExternalMeta::META_KEY;
13115µs18µs}
# spent 8µs making 1 call to Test2::Event::Fail::BEGIN@9
14
152181µs2111µs
# spent 57µs (4+53) within Test2::Event::Fail::BEGIN@15 which was called: # once (4µs+53µs) by Test::Builder::BEGIN@18 at line 15
use Test2::Util::HashBase qw{ -name -info };
# spent 57µs making 1 call to Test2::Event::Fail::BEGIN@15 # spent 53µs making 1 call to Test2::Util::HashBase::import
16
17#############
18# Old API
19sub summary { "fail" }
20sub increments_count { 1 }
21sub diagnostics { 0 }
22sub no_display { 0 }
23sub subtest_id { undef }
24sub terminate { () }
25sub global { () }
26sub sets_plan { () }
27
28sub causes_fail {
29 my $self = shift;
30 return 0 if $self->{+AMNESTY} && @{$self->{+AMNESTY}};
31 return 1;
32}
33
34#############
35# New API
36
37sub add_info {
38 my $self = shift;
39
40 for my $in (@_) {
41 $in = {%$in} if ref($in) ne 'ARRAY';
42 $in = Test2::EventFacet::Info->new($in);
43
44 push @{$self->{+INFO}} => $in;
45 }
46}
47
48sub facet_data {
49 my $self = shift;
50 my $out = $self->common_facet_data;
51
52 $out->{about}->{details} = 'fail';
53
54 $out->{assert} = {pass => 0, details => $self->{+NAME}};
55
56 $out->{info} = [map {{ %{$_} }} @{$self->{+INFO}}] if $self->{+INFO};
57
58 return $out;
59}
60
6112µs1;
62
63__END__
 
# spent 400ns within Test2::Event::Fail::__ANON__ which was called: # once (400ns+0s) by Test2::Event::Fail::BEGIN@7 at line 7
sub Test2::Event::Fail::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-Archive-pm-98-line.html0000644000175000017500000075715714576335353024353 0ustar michamicha Profile of Archive/Zip/Archive.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip/Archive.pm
StatementsExecuted 374 statements in 4.26ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.68ms2.75msArchive::Zip::Archive::::BEGIN@7Archive::Zip::Archive::BEGIN@7
1111.50ms6.08msArchive::Zip::Archive::::BEGIN@12Archive::Zip::Archive::BEGIN@12
1111.11ms1.40msArchive::Zip::Archive::::BEGIN@9Archive::Zip::Archive::BEGIN@9
711203µs303µsArchive::Zip::Archive::::membersMatchingArchive::Zip::Archive::membersMatching
111115µs797µsArchive::Zip::Archive::::readFromFileHandleArchive::Zip::Archive::readFromFileHandle
11125µs49µsArchive::Zip::Archive::::_readEndOfCentralDirectoryArchive::Zip::Archive::_readEndOfCentralDirectory
11117µs25µsArchive::Zip::Archive::::memberNamedArchive::Zip::Archive::memberNamed
11116µs31µsArchive::Zip::Archive::::_findEndOfCentralDirectoryArchive::Zip::Archive::_findEndOfCentralDirectory
11112µs12µsArchive::Zip::Archive::::newArchive::Zip::Archive::new
11111µs12µsArchive::Zip::Archive::::BEGIN@5Archive::Zip::Archive::BEGIN@5
11110µs851µsArchive::Zip::Archive::::readArchive::Zip::Archive::read
8219µs9µsArchive::Zip::Archive::::membersArchive::Zip::Archive::members
1117µs7µsArchive::Zip::Archive::::BEGIN@16Archive::Zip::Archive::BEGIN@16
1116µs28µsArchive::Zip::Archive::::BEGIN@10Archive::Zip::Archive::BEGIN@10
1115µs21µsArchive::Zip::Archive::::BEGIN@14Archive::Zip::Archive::BEGIN@14
1114µs249µsArchive::Zip::Archive::::BEGIN@21Archive::Zip::Archive::BEGIN@21
11114µs4µsArchive::Zip::Archive::::eocdOffsetArchive::Zip::Archive::eocdOffset
1114µs21µsArchive::Zip::Archive::::BEGIN@11Archive::Zip::Archive::BEGIN@11
1114µs22µsArchive::Zip::Archive::::BEGIN@6Archive::Zip::Archive::BEGIN@6
1112µs2µsArchive::Zip::Archive::::BEGIN@8Archive::Zip::Archive::BEGIN@8
1112µs2µsArchive::Zip::Archive::::zip64Archive::Zip::Archive::zip64
2211µs1µsArchive::Zip::Archive::::centralDirectorySizeArchive::Zip::Archive::centralDirectorySize
1111µs1µsArchive::Zip::Archive::::centralDirectoryOffsetWRTStartingDiskNumberArchive::Zip::Archive::centralDirectoryOffsetWRTStartingDiskNumber
0000s0sArchive::Zip::Archive::::__ANON__[:1087]Archive::Zip::Archive::__ANON__[:1087]
0000s0sArchive::Zip::Archive::::__ANON__[:1109]Archive::Zip::Archive::__ANON__[:1109]
0000s0sArchive::Zip::Archive::::__ANON__[:1166]Archive::Zip::Archive::__ANON__[:1166]
0000s0sArchive::Zip::Archive::::__ANON__[:1334]Archive::Zip::Archive::__ANON__[:1334]
0000s0sArchive::Zip::Archive::::__ANON__[:1355]Archive::Zip::Archive::__ANON__[:1355]
0000s0sArchive::Zip::Archive::::_extractionNameIsSafeArchive::Zip::Archive::_extractionNameIsSafe
0000s0sArchive::Zip::Archive::::_untaintDirArchive::Zip::Archive::_untaintDir
0000s0sArchive::Zip::Archive::::_writeCentralDirectoryOffsetArchive::Zip::Archive::_writeCentralDirectoryOffset
0000s0sArchive::Zip::Archive::::_writeEOCDOffsetArchive::Zip::Archive::_writeEOCDOffset
0000s0sArchive::Zip::Archive::::_writeEndOfCentralDirectoryArchive::Zip::Archive::_writeEndOfCentralDirectory
0000s0sArchive::Zip::Archive::::addDirectoryArchive::Zip::Archive::addDirectory
0000s0sArchive::Zip::Archive::::addFileArchive::Zip::Archive::addFile
0000s0sArchive::Zip::Archive::::addFileOrDirectoryArchive::Zip::Archive::addFileOrDirectory
0000s0sArchive::Zip::Archive::::addMemberArchive::Zip::Archive::addMember
0000s0sArchive::Zip::Archive::::addStringArchive::Zip::Archive::addString
0000s0sArchive::Zip::Archive::::addTreeArchive::Zip::Archive::addTree
0000s0sArchive::Zip::Archive::::addTreeMatchingArchive::Zip::Archive::addTreeMatching
0000s0sArchive::Zip::Archive::::contentsArchive::Zip::Archive::contents
0000s0sArchive::Zip::Archive::::desiredZip64ModeArchive::Zip::Archive::desiredZip64Mode
0000s0sArchive::Zip::Archive::::diskNumberArchive::Zip::Archive::diskNumber
0000s0sArchive::Zip::Archive::::diskNumberWithStartOfCentralDirectoryArchive::Zip::Archive::diskNumberWithStartOfCentralDirectory
0000s0sArchive::Zip::Archive::::extractMemberArchive::Zip::Archive::extractMember
0000s0sArchive::Zip::Archive::::extractMemberWithoutPathsArchive::Zip::Archive::extractMemberWithoutPaths
0000s0sArchive::Zip::Archive::::extractTreeArchive::Zip::Archive::extractTree
0000s0sArchive::Zip::Archive::::fileNameArchive::Zip::Archive::fileName
0000s0sArchive::Zip::Archive::::memberNamesArchive::Zip::Archive::memberNames
0000s0sArchive::Zip::Archive::::numberOfCentralDirectoriesArchive::Zip::Archive::numberOfCentralDirectories
0000s0sArchive::Zip::Archive::::numberOfCentralDirectoriesOnThisDiskArchive::Zip::Archive::numberOfCentralDirectoriesOnThisDisk
0000s0sArchive::Zip::Archive::::numberOfMembersArchive::Zip::Archive::numberOfMembers
0000s0sArchive::Zip::Archive::::overwriteArchive::Zip::Archive::overwrite
0000s0sArchive::Zip::Archive::::overwriteAsArchive::Zip::Archive::overwriteAs
0000s0sArchive::Zip::Archive::::removeMemberArchive::Zip::Archive::removeMember
0000s0sArchive::Zip::Archive::::replaceMemberArchive::Zip::Archive::replaceMember
0000s0sArchive::Zip::Archive::::storeSymbolicLinkArchive::Zip::Archive::storeSymbolicLink
0000s0sArchive::Zip::Archive::::updateMemberArchive::Zip::Archive::updateMember
0000s0sArchive::Zip::Archive::::updateTreeArchive::Zip::Archive::updateTree
0000s0sArchive::Zip::Archive::::versionMadeByArchive::Zip::Archive::versionMadeBy
0000s0sArchive::Zip::Archive::::versionNeededToExtractArchive::Zip::Archive::versionNeededToExtract
0000s0sArchive::Zip::Archive::::writeCentralDirectoryArchive::Zip::Archive::writeCentralDirectory
0000s0sArchive::Zip::Archive::::writeToFileHandleArchive::Zip::Archive::writeToFileHandle
0000s0sArchive::Zip::Archive::::writeToFileNamedArchive::Zip::Archive::writeToFileNamed
0000s0sArchive::Zip::Archive::::zipfileCommentArchive::Zip::Archive::zipfileComment
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip::Archive;
2
3# Represents a generic ZIP archive
4
5220µs214µs
# spent 12µs (11+2) within Archive::Zip::Archive::BEGIN@5 which was called: # once (11µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 5
use strict;
# spent 12µs making 1 call to Archive::Zip::Archive::BEGIN@5 # spent 2µs making 1 call to strict::import
6214µs240µs
# spent 22µs (4+18) within Archive::Zip::Archive::BEGIN@6 which was called: # once (4µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 6
use File::Path;
# spent 22µs making 1 call to Archive::Zip::Archive::BEGIN@6 # spent 18µs making 1 call to Exporter::import
7294µs12.75ms
# spent 2.75ms (2.68+67µs) within Archive::Zip::Archive::BEGIN@7 which was called: # once (2.68ms+67µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 7
use File::Find ();
# spent 2.75ms making 1 call to Archive::Zip::Archive::BEGIN@7
8210µs12µs
# spent 2µs within Archive::Zip::Archive::BEGIN@8 which was called: # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 8
use File::Spec ();
# spent 2µs making 1 call to Archive::Zip::Archive::BEGIN@8
9281µs11.40ms
# spent 1.40ms (1.11+292µs) within Archive::Zip::Archive::BEGIN@9 which was called: # once (1.11ms+292µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 9
use File::Copy ();
# spent 1.40ms making 1 call to Archive::Zip::Archive::BEGIN@9
10216µs250µs
# spent 28µs (6+22) within Archive::Zip::Archive::BEGIN@10 which was called: # once (6µs+22µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 10
use File::Basename;
# spent 28µs making 1 call to Archive::Zip::Archive::BEGIN@10 # spent 22µs making 1 call to Exporter::import
11216µs238µs
# spent 21µs (4+17) within Archive::Zip::Archive::BEGIN@11 which was called: # once (4µs+17µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 11
use Cwd;
# spent 21µs making 1 call to Archive::Zip::Archive::BEGIN@11 # spent 17µs making 1 call to Exporter::import
12272µs26.13ms
# spent 6.08ms (1.50+4.58) within Archive::Zip::Archive::BEGIN@12 which was called: # once (1.50ms+4.58ms) by Spreadsheet::ParseXLSX::BEGIN@11 at line 12
use Encode qw(encode_utf8 decode_utf8);
# spent 6.08ms making 1 call to Archive::Zip::Archive::BEGIN@12 # spent 47µs making 1 call to Exporter::import
13
14225µs236µs
# spent 21µs (5+16) within Archive::Zip::Archive::BEGIN@14 which was called: # once (5µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 14
use vars qw( $VERSION @ISA );
# spent 21µs making 1 call to Archive::Zip::Archive::BEGIN@14 # spent 16µs making 1 call to vars::import
15
16
# spent 7µs within Archive::Zip::Archive::BEGIN@16 which was called: # once (7µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 19
BEGIN {
171200ns $VERSION = '1.68';
1817µs @ISA = qw( Archive::Zip );
19115µs17µs}
# spent 7µs making 1 call to Archive::Zip::Archive::BEGIN@16
20
2113µs1244µs
# spent 249µs (4+244) within Archive::Zip::Archive::BEGIN@21 which was called: # once (4µs+244µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 26
use Archive::Zip qw(
# spent 244µs making 1 call to Exporter::import
22 :CONSTANTS
23 :ERROR_CODES
24 :PKZIP_CONSTANTS
25 :UTILITY_METHODS
2613.47ms1249µs);
# spent 249µs making 1 call to Archive::Zip::Archive::BEGIN@21
27
28our $UNICODE;
2915µs11µsour $UNTAINT = qr/\A(.+)\z/;
# spent 1µs making 1 call to CORE::qr
30
31# Note that this returns undef on read errors, else new zip object.
32
33
# spent 12µs within Archive::Zip::Archive::new which was called: # once (12µs+0s) by Archive::Zip::new at line 343 of Archive/Zip.pm
sub new {
341200ns my $class = shift;
35 # Info-Zip 3.0 (I guess) seems to use the following values
36 # for the version fields in the zip64 EOCD record:
37 #
38 # version made by:
39 # 30 (plus upper byte indicating host system)
40 #
41 # version needed to extract:
42 # 45
4316µs my $self = bless(
44 {
45 'zip64' => 0,
46 'desiredZip64Mode' => ZIP64_AS_NEEDED,
47 'versionMadeBy' => 0,
48 'versionNeededToExtract' => 0,
49 'diskNumber' => 0,
50 'diskNumberWithStartOfCentralDirectory' =>
51 0,
52 'numberOfCentralDirectoriesOnThisDisk' =>
53 0, # should be # of members
54 'numberOfCentralDirectories' => 0, # should be # of members
55 'centralDirectorySize' => 0, # must re-compute on write
56 'centralDirectoryOffsetWRTStartingDiskNumber' =>
57 0, # must re-compute
58 'writeEOCDOffset' => 0,
59 'writeCentralDirectoryOffset' => 0,
60 'zipfileComment' => '',
61 'eocdOffset' => 0,
62 'fileName' => ''
63 },
64 $class
65 );
6613µs $self->{'members'} = [];
671900ns my $fileName = (ref($_[0]) eq 'HASH') ? shift->{filename} : shift;
681200ns if ($fileName) {
69 my $status = $self->read($fileName);
70 return $status == AZ_OK ? $self : undef;
71 }
7212µs return $self;
73}
74
75sub storeSymbolicLink {
76 my $self = shift;
77 $self->{'storeSymbolicLink'} = shift;
78}
79
80
# spent 9µs within Archive::Zip::Archive::members which was called 8 times, avg 1µs/call: # 7 times (8µs+0s) by Archive::Zip::Archive::membersMatching at line 106, avg 1µs/call # once (2µs+0s) by Archive::Zip::Archive::memberNamed at line 97
sub members {
81814µs @{shift->{'members'}};
82}
83
84sub numberOfMembers {
85 scalar(shift->members());
86}
87
88sub memberNames {
89 my $self = shift;
90 return map { $_->fileName() } $self->members();
91}
92
93# return ref to member with given name or undef
94
# spent 25µs (17+8) within Archive::Zip::Archive::memberNamed which was called: # once (17µs+8µs) by Spreadsheet::ParseXLSX::_extract_files at line 1004 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub memberNamed {
951200ns my $self = shift;
9611µs my $fileName = (ref($_[0]) eq 'HASH') ? shift->{zipName} : shift;
9712µs12µs foreach my $member ($self->members()) {
# spent 2µs making 1 call to Archive::Zip::Archive::members
98106µs106µs return $member if $member->fileName() eq $fileName;
# spent 6µs making 10 calls to Archive::Zip::Member::fileName, avg 650ns/call
99 }
10012µs return undef;
101}
102
103
# spent 303µs (203+100) within Archive::Zip::Archive::membersMatching which was called 7 times, avg 43µs/call: # 7 times (203µs+100µs) by Spreadsheet::ParseXLSX::_zip_file_member at line 1042 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 43µs/call
sub membersMatching {
10471µs my $self = shift;
10575µs my $pattern = (ref($_[0]) eq 'HASH') ? shift->{regex} : shift;
10677225µs217100µs return grep { $_->fileName() =~ /$pattern/ } $self->members();
# spent 37µs making 70 calls to Archive::Zip::Member::fileName, avg 530ns/call # spent 31µs making 70 calls to CORE::match, avg 439ns/call # spent 24µs making 70 calls to CORE::regcomp, avg 350ns/call # spent 8µs making 7 calls to Archive::Zip::Archive::members, avg 1µs/call
107}
108
109
# spent 2µs within Archive::Zip::Archive::zip64 which was called: # once (2µs+0s) by Archive::Zip::Archive::readFromFileHandle at line 768
sub zip64 {
11012µs shift->{'zip64'};
111}
112
113sub desiredZip64Mode {
114 my $self = shift;
115 my $desiredZip64Mode = $self->{'desiredZip64Mode'};
116 if (@_) {
117 $self->{'desiredZip64Mode'} =
118 ref($_[0]) eq 'HASH' ? shift->{desiredZip64Mode} : shift;
119 }
120 return $desiredZip64Mode;
121}
122
123sub versionMadeBy {
124 shift->{'versionMadeBy'};
125}
126
127sub versionNeededToExtract {
128 shift->{'versionNeededToExtract'};
129}
130
131sub diskNumber {
132 shift->{'diskNumber'};
133}
134
135sub diskNumberWithStartOfCentralDirectory {
136 shift->{'diskNumberWithStartOfCentralDirectory'};
137}
138
139sub numberOfCentralDirectoriesOnThisDisk {
140 shift->{'numberOfCentralDirectoriesOnThisDisk'};
141}
142
143sub numberOfCentralDirectories {
144 shift->{'numberOfCentralDirectories'};
145}
146
147
# spent 1µs within Archive::Zip::Archive::centralDirectorySize which was called 2 times, avg 650ns/call: # once (1µs+0s) by Archive::Zip::Archive::readFromFileHandle at line 770 # once (200ns+0s) by Archive::Zip::Archive::readFromFileHandle at line 776
sub centralDirectorySize {
14822µs shift->{'centralDirectorySize'};
149}
150
151
# spent 1µs within Archive::Zip::Archive::centralDirectoryOffsetWRTStartingDiskNumber which was called: # once (1µs+0s) by Archive::Zip::Archive::readFromFileHandle at line 776
sub centralDirectoryOffsetWRTStartingDiskNumber {
15211µs shift->{'centralDirectoryOffsetWRTStartingDiskNumber'};
153}
154
155sub zipfileComment {
156 my $self = shift;
157 my $comment = $self->{'zipfileComment'};
158 if (@_) {
159 my $new_comment = (ref($_[0]) eq 'HASH') ? shift->{comment} : shift;
160 $self->{'zipfileComment'} = pack('C0a*', $new_comment); # avoid Unicode
161 }
162 return $comment;
163}
164
165
# spent 4µs within Archive::Zip::Archive::eocdOffset which was called 11 times, avg 400ns/call: # 11 times (4µs+0s) by Archive::Zip::Archive::readFromFileHandle at line 780, avg 400ns/call
sub eocdOffset {
166119µs shift->{'eocdOffset'};
167}
168
169# Return the name of the file last read.
170sub fileName {
171 shift->{'fileName'};
172}
173
174sub removeMember {
175 my $self = shift;
176 my $member = (ref($_[0]) eq 'HASH') ? shift->{memberOrZipName} : shift;
177 $member = $self->memberNamed($member) unless ref($member);
178 return undef unless $member;
179 my @newMembers = grep { $_ != $member } $self->members();
180 $self->{'members'} = \@newMembers;
181 return $member;
182}
183
184sub replaceMember {
185 my $self = shift;
186
187 my ($oldMember, $newMember);
188 if (ref($_[0]) eq 'HASH') {
189 $oldMember = $_[0]->{memberOrZipName};
190 $newMember = $_[0]->{newMember};
191 } else {
192 ($oldMember, $newMember) = @_;
193 }
194
195 $oldMember = $self->memberNamed($oldMember) unless ref($oldMember);
196 return undef unless $oldMember;
197 return undef unless $newMember;
198 my @newMembers =
199 map { ($_ == $oldMember) ? $newMember : $_ } $self->members();
200 $self->{'members'} = \@newMembers;
201 return $oldMember;
202}
203
204sub extractMember {
205 my $self = shift;
206
207 my ($member, $name);
208 if (ref($_[0]) eq 'HASH') {
209 $member = $_[0]->{memberOrZipName};
210 $name = $_[0]->{name};
211 } else {
212 ($member, $name) = @_;
213 }
214
215 $member = $self->memberNamed($member) unless ref($member);
216 return _error('member not found') unless $member;
217 my $originalSize = $member->compressedSize();
218 my ($volumeName, $dirName, $fileName);
219 if (defined($name)) {
220 ($volumeName, $dirName, $fileName) = File::Spec->splitpath($name);
221 $dirName = File::Spec->catpath($volumeName, $dirName, '');
222 } else {
223 $name = $member->fileName();
224 if ((my $ret = _extractionNameIsSafe($name))
225 != AZ_OK) { return $ret; }
226 ($dirName = $name) =~ s{[^/]*$}{};
227 $dirName = Archive::Zip::_asLocalName($dirName);
228 $name = Archive::Zip::_asLocalName($name);
229 }
230 if ($dirName && !-d $dirName) {
231 mkpath($dirName);
232 return _ioError("can't create dir $dirName") if (!-d $dirName);
233 }
234 my $rc = $member->extractToFileNamed($name, @_);
235
236 # TODO refactor this fix into extractToFileNamed()
237 $member->{'compressedSize'} = $originalSize;
238 return $rc;
239}
240
241sub extractMemberWithoutPaths {
242 my $self = shift;
243
244 my ($member, $name);
245 if (ref($_[0]) eq 'HASH') {
246 $member = $_[0]->{memberOrZipName};
247 $name = $_[0]->{name};
248 } else {
249 ($member, $name) = @_;
250 }
251
252 $member = $self->memberNamed($member) unless ref($member);
253 return _error('member not found') unless $member;
254 my $originalSize = $member->compressedSize();
255 return AZ_OK if $member->isDirectory();
256 unless ($name) {
257 $name = $member->fileName();
258 $name =~ s{.*/}{}; # strip off directories, if any
259 if ((my $ret = _extractionNameIsSafe($name))
260 != AZ_OK) { return $ret; }
261 $name = Archive::Zip::_asLocalName($name);
262 }
263 my $rc = $member->extractToFileNamed($name, @_);
264 $member->{'compressedSize'} = $originalSize;
265 return $rc;
266}
267
268sub addMember {
269 my $self = shift;
270 my $newMember = (ref($_[0]) eq 'HASH') ? shift->{member} : shift;
271 push(@{$self->{'members'}}, $newMember) if $newMember;
272 if($newMember && ($newMember->{bitFlag} & 0x800)
273 && !utf8::is_utf8($newMember->{fileName})){
274 $newMember->{fileName} = Encode::decode_utf8($newMember->{fileName});
275 }
276 return $newMember;
277}
278
279sub addFile {
280 my $self = shift;
281
282 my ($fileName, $newName, $compressionLevel);
283 if (ref($_[0]) eq 'HASH') {
284 $fileName = $_[0]->{filename};
285 $newName = $_[0]->{zipName};
286 $compressionLevel = $_[0]->{compressionLevel};
287 } else {
288 ($fileName, $newName, $compressionLevel) = @_;
289 }
290
291 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
292 $fileName = Win32::GetANSIPathName($fileName);
293 }
294
295 my $newMember = Archive::Zip::Member->newFromFile($fileName, $newName);
296 $newMember->desiredCompressionLevel($compressionLevel);
297 if ($self->{'storeSymbolicLink'} && -l $fileName) {
298 my $newMember =
299 Archive::Zip::Member->newFromString(readlink $fileName, $newName);
300
301 # For symbolic links, External File Attribute is set to 0xA1FF0000 by Info-ZIP
302 $newMember->{'externalFileAttributes'} = 0xA1FF0000;
303 $self->addMember($newMember);
304 } else {
305 $self->addMember($newMember);
306 }
307
308 return $newMember;
309}
310
311sub addString {
312 my $self = shift;
313
314 my ($stringOrStringRef, $name, $compressionLevel);
315 if (ref($_[0]) eq 'HASH') {
316 $stringOrStringRef = $_[0]->{string};
317 $name = $_[0]->{zipName};
318 $compressionLevel = $_[0]->{compressionLevel};
319 } else {
320 ($stringOrStringRef, $name, $compressionLevel) = @_;
321 }
322
323 my $newMember =
324 Archive::Zip::Member->newFromString($stringOrStringRef, $name);
325 $newMember->desiredCompressionLevel($compressionLevel);
326 return $self->addMember($newMember);
327}
328
329sub addDirectory {
330 my $self = shift;
331
332 my ($name, $newName);
333 if (ref($_[0]) eq 'HASH') {
334 $name = $_[0]->{directoryName};
335 $newName = $_[0]->{zipName};
336 } else {
337 ($name, $newName) = @_;
338 }
339
340 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
341 $name = Win32::GetANSIPathName($name);
342 }
343
344 my $newMember = Archive::Zip::Member->newDirectoryNamed($name, $newName);
345 if ($self->{'storeSymbolicLink'} && -l $name) {
346 my $link = readlink $name;
347 ($newName =~ s{/$}{}) if $newName; # Strip trailing /
348 my $newMember = Archive::Zip::Member->newFromString($link, $newName);
349
350 # For symbolic links, External File Attribute is set to 0xA1FF0000 by Info-ZIP
351 $newMember->{'externalFileAttributes'} = 0xA1FF0000;
352 $self->addMember($newMember);
353 } else {
354 $self->addMember($newMember);
355 }
356
357 return $newMember;
358}
359
360# add either a file or a directory.
361
362sub addFileOrDirectory {
363 my $self = shift;
364
365 my ($name, $newName, $compressionLevel);
366 if (ref($_[0]) eq 'HASH') {
367 $name = $_[0]->{name};
368 $newName = $_[0]->{zipName};
369 $compressionLevel = $_[0]->{compressionLevel};
370 } else {
371 ($name, $newName, $compressionLevel) = @_;
372 }
373
374 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
375 $name = Win32::GetANSIPathName($name);
376 }
377
378 $name =~ s{/$}{};
379 if ($newName) {
380 $newName =~ s{/$}{};
381 } else {
382 $newName = $name;
383 }
384 if (-f $name) {
385 return $self->addFile($name, $newName, $compressionLevel);
386 } elsif (-d $name) {
387 return $self->addDirectory($name, $newName);
388 } else {
389 return _error("$name is neither a file nor a directory");
390 }
391}
392
393sub contents {
394 my $self = shift;
395
396 my ($member, $newContents);
397 if (ref($_[0]) eq 'HASH') {
398 $member = $_[0]->{memberOrZipName};
399 $newContents = $_[0]->{contents};
400 } else {
401 ($member, $newContents) = @_;
402 }
403
404 my ($contents, $status) = (undef, AZ_OK);
405 if ($status == AZ_OK) {
406 $status = _error('No member name given') unless defined($member);
407 }
408 if ($status == AZ_OK && ! ref($member)) {
409 my $memberName = $member;
410 $member = $self->memberNamed($memberName);
411 $status = _error('No member named $memberName') unless defined($member);
412 }
413 if ($status == AZ_OK) {
414 ($contents, $status) = $member->contents($newContents);
415 }
416
417 return
418 wantarray
419 ? ($contents, $status)
420 : $contents;
421}
422
423sub writeToFileNamed {
424 my $self = shift;
425 my $fileName =
426 (ref($_[0]) eq 'HASH') ? shift->{filename} : shift; # local FS format
427 foreach my $member ($self->members()) {
428 if ($member->_usesFileNamed($fileName)) {
429 return _error("$fileName is needed by member "
430 . $member->fileName()
431 . "; consider using overwrite() or overwriteAs() instead.");
432 }
433 }
434 my ($status, $fh) = _newFileHandle($fileName, 'w');
435 return _ioError("Can't open $fileName for write") unless $status;
436 $status = $self->writeToFileHandle($fh, 1);
437 $fh->close();
438 $fh = undef;
439
440 return $status;
441}
442
443# It is possible to write data to the FH before calling this,
444# perhaps to make a self-extracting archive.
445sub writeToFileHandle {
446 my $self = shift;
447
448 my ($fh, $fhIsSeekable);
449 if (ref($_[0]) eq 'HASH') {
450 $fh = $_[0]->{fileHandle};
451 $fhIsSeekable =
452 exists($_[0]->{seek}) ? $_[0]->{seek} : _isSeekable($fh);
453 } else {
454 $fh = shift;
455 $fhIsSeekable = @_ ? shift : _isSeekable($fh);
456 }
457
458 return _error('No filehandle given') unless $fh;
459 return _ioError('filehandle not open') unless $fh->opened();
460 _binmode($fh);
461
462 # Find out where the current position is.
463 my $offset = $fhIsSeekable ? $fh->tell() : 0;
464 $offset = 0 if $offset < 0;
465
466 # (Re-)set the "was-successfully-written" flag so that the
467 # contract advertised in the documentation ("that member and
468 # *all following it* will return false from wasWritten()")
469 # also holds for members written more than once.
470 #
471 # Not sure whether that mechanism works, anyway. If method
472 # $member->_writeToFileHandle fails with an error below and
473 # user continues with calling $zip->writeCentralDirectory
474 # manually, we should end up with the following picture
475 # unless the user seeks back to writeCentralDirectoryOffset:
476 #
477 # ...
478 # [last successfully written member]
479 # <- writeCentralDirectoryOffset points here
480 # [half-written member junk with unknown size]
481 # [central directory entry 0]
482 # ...
483 foreach my $member ($self->members()) {
484 $member->{'wasWritten'} = 0;
485 }
486
487 foreach my $member ($self->members()) {
488
489 # (Re-)set object member zip64 flag. Here is what
490 # happens next to that flag:
491 #
492 # $member->_writeToFileHandle
493 # Determines a local flag value depending on
494 # necessity and user desire and ors it to
495 # the object member
496 # $member->_writeLocalFileHeader
497 # Queries the object member to write appropriate
498 # local header
499 # $member->_writeDataDescriptor
500 # Queries the object member to write appropriate
501 # data descriptor
502 # $member->_writeCentralDirectoryFileHeader
503 # Determines a local flag value depending on
504 # necessity and user desire. Writes a central
505 # directory header appropriate to the local flag.
506 # Ors the local flag to the object member.
507 $member->{'zip64'} = 0;
508
509 my ($status, $memberSize) =
510 $member->_writeToFileHandle($fh, $fhIsSeekable, $offset,
511 $self->desiredZip64Mode());
512 $member->endRead();
513 return $status if $status != AZ_OK;
514
515 $offset += $memberSize;
516
517 # Change this so it reflects write status and last
518 # successful position
519 $member->{'wasWritten'} = 1;
520 $self->{'writeCentralDirectoryOffset'} = $offset;
521 }
522
523 return $self->writeCentralDirectory($fh);
524}
525
526# Write zip back to the original file,
527# as safely as possible.
528# Returns AZ_OK if successful.
529sub overwrite {
530 my $self = shift;
531 return $self->overwriteAs($self->{'fileName'});
532}
533
534# Write zip to the specified file,
535# as safely as possible.
536# Returns AZ_OK if successful.
537sub overwriteAs {
538 my $self = shift;
539 my $zipName = (ref($_[0]) eq 'HASH') ? $_[0]->{filename} : shift;
540 return _error("no filename in overwriteAs()") unless defined($zipName);
541
542 my ($fh, $tempName) = Archive::Zip::tempFile();
543 return _error("Can't open temp file", $!) unless $fh;
544
545 (my $backupName = $zipName) =~ s{(\.[^.]*)?$}{.zbk};
546
547 my $status = $self->writeToFileHandle($fh);
548 $fh->close();
549 $fh = undef;
550
551 if ($status != AZ_OK) {
552 unlink($tempName);
553 _printError("Can't write to $tempName");
554 return $status;
555 }
556
557 my $err;
558
559 # rename the zip
560 if (-f $zipName && !rename($zipName, $backupName)) {
561 $err = $!;
562 unlink($tempName);
563 return _error("Can't rename $zipName as $backupName", $err);
564 }
565
566 # move the temp to the original name (possibly copying)
567 unless (File::Copy::move($tempName, $zipName)
568 || File::Copy::copy($tempName, $zipName)) {
569 $err = $!;
570 rename($backupName, $zipName);
571 unlink($tempName);
572 return _error("Can't move $tempName to $zipName", $err);
573 }
574
575 # unlink the backup
576 if (-f $backupName && !unlink($backupName)) {
577 $err = $!;
578 return _error("Can't unlink $backupName", $err);
579 }
580
581 return AZ_OK;
582}
583
584# Used only during writing
585sub _writeCentralDirectoryOffset {
586 shift->{'writeCentralDirectoryOffset'};
587}
588
589sub _writeEOCDOffset {
590 shift->{'writeEOCDOffset'};
591}
592
593# Expects to have _writeEOCDOffset() set
594sub _writeEndOfCentralDirectory {
595 my ($self, $fh, $membersZip64) = @_;
596
597 my $zip64 = 0;
598 my $versionMadeBy = $self->versionMadeBy();
599 my $versionNeededToExtract = $self->versionNeededToExtract();
600 my $diskNumber = 0;
601 my $diskNumberWithStartOfCentralDirectory = 0;
602 my $numberOfCentralDirectoriesOnThisDisk = $self->numberOfMembers();
603 my $numberOfCentralDirectories = $self->numberOfMembers();
604 my $centralDirectorySize =
605 $self->_writeEOCDOffset() - $self->_writeCentralDirectoryOffset();
606 my $centralDirectoryOffsetWRTStartingDiskNumber =
607 $self->_writeCentralDirectoryOffset();
608 my $zipfileCommentLength = length($self->zipfileComment());
609
610 my $eocdDataZip64 = 0;
611 $eocdDataZip64 ||= $numberOfCentralDirectoriesOnThisDisk > 0xffff;
612 $eocdDataZip64 ||= $numberOfCentralDirectories > 0xffff;
613 $eocdDataZip64 ||= $centralDirectorySize > 0xffffffff;
614 $eocdDataZip64 ||= $centralDirectoryOffsetWRTStartingDiskNumber > 0xffffffff;
615
616 if ( $membersZip64
617 || $eocdDataZip64
618 || $self->desiredZip64Mode() == ZIP64_EOCD) {
619 return _zip64NotSupported() unless ZIP64_SUPPORTED;
620
621 $zip64 = 1;
622 $versionMadeBy = 45 if ($versionMadeBy == 0);
623 $versionNeededToExtract = 45 if ($versionNeededToExtract < 45);
624
625 $self->_print($fh, ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE_STRING)
626 or return _ioError('writing zip64 EOCD record signature');
627
628 my $record = pack(
629 ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_FORMAT,
630 ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_LENGTH +
631 SIGNATURE_LENGTH - 12,
632 $versionMadeBy,
633 $versionNeededToExtract,
634 $diskNumber,
635 $diskNumberWithStartOfCentralDirectory,
636 $numberOfCentralDirectoriesOnThisDisk,
637 $numberOfCentralDirectories,
638 $centralDirectorySize,
639 $centralDirectoryOffsetWRTStartingDiskNumber
640 );
641 $self->_print($fh, $record)
642 or return _ioError('writing zip64 EOCD record');
643
644 $self->_print($fh, ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE_STRING)
645 or return _ioError('writing zip64 EOCD locator signature');
646
647 my $locator = pack(
648 ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_FORMAT,
649 0,
650 $self->_writeEOCDOffset(),
651 1
652 );
653 $self->_print($fh, $locator)
654 or return _ioError('writing zip64 EOCD locator');
655 }
656
657 $self->_print($fh, END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING)
658 or return _ioError('writing EOCD Signature');
659
660 my $header = pack(
661 END_OF_CENTRAL_DIRECTORY_FORMAT,
662 $diskNumber,
663 $diskNumberWithStartOfCentralDirectory,
664 $numberOfCentralDirectoriesOnThisDisk > 0xffff
665 ? 0xffff : $numberOfCentralDirectoriesOnThisDisk,
666 $numberOfCentralDirectories > 0xffff
667 ? 0xffff : $numberOfCentralDirectories,
668 $centralDirectorySize > 0xffffffff
669 ? 0xffffffff : $centralDirectorySize,
670 $centralDirectoryOffsetWRTStartingDiskNumber > 0xffffffff
671 ? 0xffffffff : $centralDirectoryOffsetWRTStartingDiskNumber,
672 $zipfileCommentLength
673 );
674 $self->_print($fh, $header)
675 or return _ioError('writing EOCD header');
676 if ($zipfileCommentLength) {
677 $self->_print($fh, $self->zipfileComment())
678 or return _ioError('writing zipfile comment');
679 }
680
681 # Adjust object members related to zip64 format
682 $self->{'zip64'} = $zip64;
683 $self->{'versionMadeBy'} = $versionMadeBy;
684 $self->{'versionNeededToExtract'} = $versionNeededToExtract;
685
686 return AZ_OK;
687}
688
689# $offset can be specified to truncate a zip file.
690sub writeCentralDirectory {
691 my $self = shift;
692
693 my ($fh, $offset);
694 if (ref($_[0]) eq 'HASH') {
695 $fh = $_[0]->{fileHandle};
696 $offset = $_[0]->{offset};
697 } else {
698 ($fh, $offset) = @_;
699 }
700
701 if (defined($offset)) {
702 $self->{'writeCentralDirectoryOffset'} = $offset;
703 $fh->seek($offset, IO::Seekable::SEEK_SET)
704 or return _ioError('seeking to write central directory');
705 } else {
706 $offset = $self->_writeCentralDirectoryOffset();
707 }
708
709 my $membersZip64 = 0;
710 foreach my $member ($self->members()) {
711 my ($status, $headerSize) =
712 $member->_writeCentralDirectoryFileHeader($fh, $self->desiredZip64Mode());
713 return $status if $status != AZ_OK;
714 $membersZip64 ||= $member->zip64();
715 $offset += $headerSize;
716 $self->{'writeEOCDOffset'} = $offset;
717 }
718
719 return $self->_writeEndOfCentralDirectory($fh, $membersZip64);
720}
721
722
# spent 851µs (10+841) within Archive::Zip::Archive::read which was called: # once (10µs+841µs) by Spreadsheet::ParseXLSX::parse at line 100 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub read {
7231300ns my $self = shift;
7241600ns my $fileName = (ref($_[0]) eq 'HASH') ? shift->{filename} : shift;
7251200ns return _error('No filename given') unless $fileName;
72612µs138µs my ($status, $fh) = _newFileHandle($fileName, 'r');
# spent 38µs making 1 call to Archive::Zip::_newFileHandle
7271200ns return _ioError("opening $fileName for read") unless $status;
728
72912µs1797µs $status = $self->readFromFileHandle($fh, $fileName);
# spent 797µs making 1 call to Archive::Zip::Archive::readFromFileHandle
7301300ns return $status if $status != AZ_OK;
731
7321900ns16µs $fh->close();
# spent 6µs making 1 call to IO::Handle::close
7331500ns $self->{'fileName'} = $fileName;
73412µs return AZ_OK;
735}
736
737
# spent 797µs (115+682) within Archive::Zip::Archive::readFromFileHandle which was called: # once (115µs+682µs) by Archive::Zip::Archive::read at line 729
sub readFromFileHandle {
7381200ns my $self = shift;
739
7401200ns my ($fh, $fileName);
7411900ns if (ref($_[0]) eq 'HASH') {
742 $fh = $_[0]->{fileHandle};
743 $fileName = $_[0]->{filename};
744 } else {
7451600ns ($fh, $fileName) = @_;
746 }
747
7481400ns $fileName = $fh unless defined($fileName);
7491300ns return _error('No filehandle given') unless $fh;
75012µs12µs return _ioError('filehandle not open') unless $fh->opened();
# spent 2µs making 1 call to IO::Handle::opened
751
75211µs118µs _binmode($fh);
# spent 18µs making 1 call to Archive::Zip::_binmode
75311µs $self->{'fileName'} = "$fh";
754
755 # TODO: how to support non-seekable zips?
75612µs120µs return _error('file not seekable')
# spent 20µs making 1 call to Archive::Zip::_isSeekable
757 unless _isSeekable($fh);
758
75912µs15µs $fh->seek(0, 0); # rewind the file
# spent 5µs making 1 call to IO::Seekable::seek
760
76112µs131µs my $status = $self->_findEndOfCentralDirectory($fh);
7621700ns return $status if $status != AZ_OK;
763
7641100ns my $eocdPosition;
76512µs149µs ($status, $eocdPosition) = $self->_readEndOfCentralDirectory($fh, $fileName);
7661300ns return $status if $status != AZ_OK;
767
76812µs12µs my $zip64 = $self->zip64();
# spent 2µs making 1 call to Archive::Zip::Archive::zip64
769
77012µs23µs $fh->seek($eocdPosition - $self->centralDirectorySize(),
# spent 2µs making 1 call to IO::Seekable::seek # spent 1µs making 1 call to Archive::Zip::Archive::centralDirectorySize
771 IO::Seekable::SEEK_SET)
772 or return _ioError("Can't seek $fileName");
773
774 # Try to detect garbage at beginning of archives
775 # This should be 0
77612µs21µs $self->{'eocdOffset'} = $eocdPosition - $self->centralDirectorySize() # here
777 - $self->centralDirectoryOffsetWRTStartingDiskNumber();
778
7791200ns for (; ;) {
7801114µs22271µs my $newMember =
# spent 266µs making 11 calls to Archive::Zip::Member::_newFromZipFile, avg 24µs/call # spent 4µs making 11 calls to Archive::Zip::Archive::eocdOffset, avg 400ns/call
781 Archive::Zip::Member->_newFromZipFile($fh, $fileName, $zip64,
782 $self->eocdOffset());
78311800ns my $signature;
784117µs1156µs ($status, $signature) = _readSignature($fh, $fileName);
# spent 56µs making 11 calls to Archive::Zip::_readSignature, avg 5µs/call
785111µs return $status if $status != AZ_OK;
786113µs if (! $zip64) {
787117µs last if $signature == END_OF_CENTRAL_DIRECTORY_SIGNATURE;
788 }
789 else {
790 last if $signature == ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE;
791 }
792106µs10178µs $status = $newMember->_readCentralDirectoryFileHeader();
# spent 178µs making 10 calls to Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader, avg 18µs/call
793101µs return $status if $status != AZ_OK;
794107µs1028µs $status = $newMember->endRead();
# spent 28µs making 10 calls to Archive::Zip::FileMember::endRead, avg 3µs/call
795101µs return $status if $status != AZ_OK;
796
797105µs1019µs if ($newMember->isDirectory()) {
# spent 19µs making 10 calls to Archive::Zip::ZipFileMember::isDirectory, avg 2µs/call
798 $newMember->_become('Archive::Zip::DirectoryMember');
799 # Ensure above call suceeded to avoid future trouble
800 $newMember->_ISA('Archive::Zip::DirectoryMember') or
801 return $self->_error('becoming Archive::Zip::DirectoryMember');
802 }
803
804102µs if(($newMember->{bitFlag} & 0x800) && !utf8::is_utf8($newMember->{fileName})){
805 $newMember->{fileName} = Encode::decode_utf8($newMember->{fileName});
806 }
807
808106µs push(@{$self->{'members'}}, $newMember);
809 }
810
81112µs return AZ_OK;
812}
813
814# Read EOCD, starting from position before signature.
815# Checks for a zip64 EOCD record and uses that if present.
816#
817# Return AZ_OK (in scalar context) or a pair (AZ_OK,
818# $eocdPosition) (in list context) on success:
819# ( $status, $eocdPosition ) = $zip->_readEndOfCentralDirectory( $fh, $fileName );
820# where the returned EOCD position either points to the beginning
821# of the EOCD or to the beginning of the zip64 EOCD record.
822#
823# APPNOTE.TXT as of version 6.3.6 is a bit vague on the
824# "ZIP64(tm) format". It has a lot of conditions like "if an
825# archive is in ZIP64 format", but never explicitly mentions
826# *when* an archive is in that format. (Or at least I haven't
827# found it.)
828#
829# So I decided that an archive is in ZIP64 format if zip64 EOCD
830# locator and zip64 EOCD record are present before the EOCD with
831# the format given in the specification.
832
# spent 49µs (25+24) within Archive::Zip::Archive::_readEndOfCentralDirectory which was called: # once (25µs+24µs) by Archive::Zip::Archive::readFromFileHandle at line 765
sub _readEndOfCentralDirectory {
8331200ns my $self = shift;
8341200ns my $fh = shift;
8351200ns my $fileName = shift;
836
837 # Remember current position, which is just before the EOCD
838 # signature
8391700ns11µs my $eocdPosition = $fh->tell();
# spent 1µs making 1 call to IO::Seekable::tell
840
841 # Reset the zip64 format flag
8421700ns $self->{'zip64'} = 0;
8431300ns my $zip64EOCDPosition;
844
845 # Check for zip64 EOCD locator and zip64 EOCD record. Be
846 # extra careful here to not interpret any random data as
847 # zip64 data structures. If in doubt, silently continue
848 # reading the regular EOCD.
849 NOZIP64:
850 {
851 # Do not even start looking for any zip64 structures if
852 # that would not be supported.
8531100ns if (! ZIP64_SUPPORTED) {
854 last NOZIP64;
855 }
856
8571400ns if ($eocdPosition < ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_LENGTH + SIGNATURE_LENGTH) {
858 last NOZIP64;
859 }
860
861 # Skip to before potential zip64 EOCD locator
8621700ns12µs $fh->seek(-(ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_LENGTH) - SIGNATURE_LENGTH,
# spent 2µs making 1 call to IO::Seekable::seek
863 IO::Seekable::SEEK_CUR)
864 or return _ioError("seeking to before zip 64 EOCD locator");
8651700ns my $zip64EOCDLocatorPosition =
866 $eocdPosition - ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_LENGTH - SIGNATURE_LENGTH;
867
8681200ns my $status;
869 my $bytesRead;
870
871 # Read potential zip64 EOCD locator signature
87211µs113µs $status =
# spent 13µs making 1 call to Archive::Zip::_readSignature
873 _readSignature($fh, $fileName,
874 ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE, 1);
8751300ns return $status if $status == AZ_IO_ERROR;
8761400ns if ($status == AZ_FORMAT_ERROR) {
877 $fh->seek($eocdPosition, IO::Seekable::SEEK_SET)
878 or return _ioError("seeking to EOCD");
879 last NOZIP64;
880 }
881
882 # Read potential zip64 EOCD locator and verify it
8831300ns my $locator = '';
8841900ns12µs $bytesRead = $fh->read($locator, ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_LENGTH);
# spent 2µs making 1 call to IO::Handle::read
8851300ns if ($bytesRead != ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_LENGTH) {
886 return _ioError("reading zip64 EOCD locator");
887 }
88813µs1800ns (undef, $zip64EOCDPosition, undef) =
# spent 800ns making 1 call to CORE::unpack
889 unpack(ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_FORMAT, $locator);
8901600ns if ($zip64EOCDPosition >
891 ($zip64EOCDLocatorPosition - ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_LENGTH - SIGNATURE_LENGTH)) {
892 # No need to seek to EOCD since we're already there
8931800ns last NOZIP64;
894 }
895
896 # Skip to potential zip64 EOCD record
897 $fh->seek($zip64EOCDPosition, IO::Seekable::SEEK_SET)
898 or return _ioError("seeking to zip64 EOCD record");
899
900 # Read potential zip64 EOCD record signature
901 $status =
902 _readSignature($fh, $fileName,
903 ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIGNATURE, 1);
904 return $status if $status == AZ_IO_ERROR;
905 if ($status == AZ_FORMAT_ERROR) {
906 $fh->seek($eocdPosition, IO::Seekable::SEEK_SET)
907 or return _ioError("seeking to EOCD");
908 last NOZIP64;
909 }
910
911 # Read potential zip64 EOCD record. Ignore the zip64
912 # extensible data sector.
913 my $record = '';
914 $bytesRead = $fh->read($record, ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_LENGTH);
915 if ($bytesRead != ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_LENGTH) {
916 return _ioError("reading zip64 EOCD record");
917 }
918
919 # Perform one final check, hoping that all implementors
920 # follow the recommendation of the specification
921 # regarding the size of the zip64 EOCD record
922 my ($zip64EODCRecordSize) = unpack("Q<", $record);
923 if ($zip64EOCDPosition + 12 + $zip64EODCRecordSize != $zip64EOCDLocatorPosition) {
924 $fh->seek($eocdPosition, IO::Seekable::SEEK_SET)
925 or return _ioError("seeking to EOCD");
926 last NOZIP64;
927 }
928
929 $self->{'zip64'} = 1;
930 (
931 undef,
932 $self->{'versionMadeBy'},
933 $self->{'versionNeededToExtract'},
934 $self->{'diskNumber'},
935 $self->{'diskNumberWithStartOfCentralDirectory'},
936 $self->{'numberOfCentralDirectoriesOnThisDisk'},
937 $self->{'numberOfCentralDirectories'},
938 $self->{'centralDirectorySize'},
939 $self->{'centralDirectoryOffsetWRTStartingDiskNumber'}
940 ) = unpack(ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_FORMAT, $record);
941
942 # Don't just happily bail out, we still need to read the
943 # zip file comment!
944 $fh->seek($eocdPosition, IO::Seekable::SEEK_SET)
945 or return _ioError("seeking to EOCD");
946 }
947
948 # Skip past signature
9491900ns13µs $fh->seek(SIGNATURE_LENGTH, IO::Seekable::SEEK_CUR)
# spent 3µs making 1 call to IO::Seekable::seek
950 or return _ioError("seeking past EOCD signature");
951
9521400ns my $header = '';
9531800ns12µs my $bytesRead = $fh->read($header, END_OF_CENTRAL_DIRECTORY_LENGTH);
# spent 2µs making 1 call to IO::Handle::read
9541200ns if ($bytesRead != END_OF_CENTRAL_DIRECTORY_LENGTH) {
955 return _ioError("reading end of central directory");
956 }
957
9581300ns my $zipfileCommentLength;
9591600ns if (! $self->{'zip64'}) {
960 (
961 $self->{'diskNumber'},
962 $self->{'diskNumberWithStartOfCentralDirectory'},
963 $self->{'numberOfCentralDirectoriesOnThisDisk'},
964 $self->{'numberOfCentralDirectories'},
965 $self->{'centralDirectorySize'},
96613µs1600ns $self->{'centralDirectoryOffsetWRTStartingDiskNumber'},
# spent 600ns making 1 call to CORE::unpack
967 $zipfileCommentLength
968 ) = unpack(END_OF_CENTRAL_DIRECTORY_FORMAT, $header);
969
97012µs if ( $self->{'diskNumber'} == 0xffff
971 || $self->{'diskNumberWithStartOfCentralDirectory'} == 0xffff
972 || $self->{'numberOfCentralDirectoriesOnThisDisk'} == 0xffff
973 || $self->{'numberOfCentralDirectories'} == 0xffff
974 || $self->{'centralDirectorySize'} == 0xffffffff
975 || $self->{'centralDirectoryOffsetWRTStartingDiskNumber'} == 0xffffffff) {
976 if (ZIP64_SUPPORTED) {
977 return _formatError("unexpected zip64 marker values in EOCD");
978 }
979 else {
980 return _zip64NotSupported();
981 }
982 }
983 }
984 else {
985 (
986 undef,
987 undef,
988 undef,
989 undef,
990 undef,
991 undef,
992 $zipfileCommentLength
993 ) = unpack(END_OF_CENTRAL_DIRECTORY_FORMAT, $header);
994 }
995
9961300ns if ($zipfileCommentLength) {
997 my $zipfileComment = '';
998 $bytesRead = $fh->read($zipfileComment, $zipfileCommentLength);
999 if ($bytesRead != $zipfileCommentLength) {
1000 return _ioError("reading zipfile comment");
1001 }
1002 $self->{'zipfileComment'} = $zipfileComment;
1003 }
1004
100513µs if (! $self->{'zip64'}) {
1006 return
1007 wantarray
1008 ? (AZ_OK, $eocdPosition)
1009 : AZ_OK;
1010 }
1011 else {
1012 return
1013 wantarray
1014 ? (AZ_OK, $zip64EOCDPosition)
1015 : AZ_OK;
1016 }
1017}
1018
1019# Seek in my file to the end, then read backwards until we find the
1020# signature of the central directory record. Leave the file positioned right
1021# before the signature. Returns AZ_OK if success.
1022
# spent 31µs (16+15) within Archive::Zip::Archive::_findEndOfCentralDirectory which was called: # once (16µs+15µs) by Archive::Zip::Archive::readFromFileHandle at line 761
sub _findEndOfCentralDirectory {
10231200ns my $self = shift;
10241200ns my $fh = shift;
10251500ns my $data = '';
10261900ns12µs $fh->seek(0, IO::Seekable::SEEK_END)
# spent 2µs making 1 call to IO::Seekable::seek
1027 or return _ioError("seeking to end");
1028
102912µs14µs my $fileLength = $fh->tell();
# spent 4µs making 1 call to IO::Seekable::tell
10301500ns if ($fileLength < END_OF_CENTRAL_DIRECTORY_LENGTH + 4) {
1031 return _formatError("file is too short");
1032 }
1033
10341300ns my $seekOffset = 0;
10351200ns my $pos = -1;
10361200ns for (; ;) {
10371300ns $seekOffset += 512;
10381300ns $seekOffset = $fileLength if ($seekOffset > $fileLength);
103911µs12µs $fh->seek(-$seekOffset, IO::Seekable::SEEK_END)
# spent 2µs making 1 call to IO::Seekable::seek
1040 or return _ioError("seek failed");
10411700ns15µs my $bytesRead = $fh->read($data, $seekOffset);
# spent 5µs making 1 call to IO::Handle::read
10421200ns if ($bytesRead != $seekOffset) {
1043 return _ioError("read failed");
1044 }
104511µs $pos = rindex($data, END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING);
1046 last
10471700ns if ( $pos >= 0
1048 or $seekOffset == $fileLength
1049 or $seekOffset >= $Archive::Zip::ChunkSize);
1050 }
1051
10521400ns if ($pos >= 0) {
105311µs12µs $fh->seek($pos - $seekOffset, IO::Seekable::SEEK_CUR)
# spent 2µs making 1 call to IO::Seekable::seek
1054 or return _ioError("seeking to EOCD");
105512µs return AZ_OK;
1056 } else {
1057 return _formatError("can't find EOCD signature");
1058 }
1059}
1060
1061# Used to avoid taint problems when chdir'ing.
1062# Not intended to increase security in any way; just intended to shut up the -T
1063# complaints. If your Cwd module is giving you unreliable returns from cwd()
1064# you have bigger problems than this.
1065sub _untaintDir {
1066 my $dir = shift;
1067 $dir =~ m/$UNTAINT/s;
1068 return $1;
1069}
1070
1071sub addTree {
1072 my $self = shift;
1073
1074 my ($root, $dest, $pred, $compressionLevel);
1075 if (ref($_[0]) eq 'HASH') {
1076 $root = $_[0]->{root};
1077 $dest = $_[0]->{zipName};
1078 $pred = $_[0]->{select};
1079 $compressionLevel = $_[0]->{compressionLevel};
1080 } else {
1081 ($root, $dest, $pred, $compressionLevel) = @_;
1082 }
1083
1084 return _error("root arg missing in call to addTree()")
1085 unless defined($root);
1086 $dest = '' unless defined($dest);
1087 $pred = sub { -r }
1088 unless defined($pred);
1089
1090 my @files;
1091 my $startDir = _untaintDir(cwd());
1092
1093 return _error('undef returned by _untaintDir on cwd ', cwd())
1094 unless $startDir;
1095
1096 # This avoids chdir'ing in Find, in a way compatible with older
1097 # versions of File::Find.
1098 my $wanted = sub {
1099 local $main::_ = $File::Find::name;
1100 my $dir = _untaintDir($File::Find::dir);
1101 chdir($startDir);
1102 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
1103 push(@files, Win32::GetANSIPathName($File::Find::name)) if (&$pred);
1104 $dir = Win32::GetANSIPathName($dir);
1105 } else {
1106 push(@files, $File::Find::name) if (&$pred);
1107 }
1108 chdir($dir);
1109 };
1110
1111 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
1112 $root = Win32::GetANSIPathName($root);
1113 }
1114 # File::Find will not untaint unless you explicitly pass the flag and regex pattern.
1115 File::Find::find({ wanted => $wanted, untaint => 1, untaint_pattern => $UNTAINT }, $root);
1116
1117 my $rootZipName = _asZipDirName($root, 1); # with trailing slash
1118 my $pattern = $rootZipName eq './' ? '^' : "^\Q$rootZipName\E";
1119
1120 $dest = _asZipDirName($dest, 1); # with trailing slash
1121
1122 foreach my $fileName (@files) {
1123 my $isDir;
1124 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
1125 $isDir = -d Win32::GetANSIPathName($fileName);
1126 } else {
1127 $isDir = -d $fileName;
1128 }
1129
1130 # normalize, remove leading ./
1131 my $archiveName = _asZipDirName($fileName, $isDir);
1132 if ($archiveName eq $rootZipName) { $archiveName = $dest }
1133 else { $archiveName =~ s{$pattern}{$dest} }
1134 next if $archiveName =~ m{^\.?/?$}; # skip current dir
1135 my $member =
1136 $isDir
1137 ? $self->addDirectory($fileName, $archiveName)
1138 : $self->addFile($fileName, $archiveName);
1139 $member->desiredCompressionLevel($compressionLevel);
1140
1141 return _error("add $fileName failed in addTree()") if !$member;
1142 }
1143 return AZ_OK;
1144}
1145
1146sub addTreeMatching {
1147 my $self = shift;
1148
1149 my ($root, $dest, $pattern, $pred, $compressionLevel);
1150 if (ref($_[0]) eq 'HASH') {
1151 $root = $_[0]->{root};
1152 $dest = $_[0]->{zipName};
1153 $pattern = $_[0]->{pattern};
1154 $pred = $_[0]->{select};
1155 $compressionLevel = $_[0]->{compressionLevel};
1156 } else {
1157 ($root, $dest, $pattern, $pred, $compressionLevel) = @_;
1158 }
1159
1160 return _error("root arg missing in call to addTreeMatching()")
1161 unless defined($root);
1162 $dest = '' unless defined($dest);
1163 return _error("pattern missing in call to addTreeMatching()")
1164 unless defined($pattern);
1165 my $matcher =
1166 $pred ? sub { m{$pattern} && &$pred } : sub { m{$pattern} && -r };
1167 return $self->addTree($root, $dest, $matcher, $compressionLevel);
1168}
1169
1170# Check if one of the components of a path to the file or the file name
1171# itself is an already existing symbolic link. If yes then return an
1172# error. Continuing and writing to a file traversing a link posseses
1173# a security threat, especially if the link was extracted from an
1174# attacker-supplied archive. This would allow writing to an arbitrary
1175# file. The same applies when using ".." to escape from a working
1176# directory. <https://bugzilla.redhat.com/show_bug.cgi?id=1591449>
1177sub _extractionNameIsSafe {
1178 my $name = shift;
1179 my ($volume, $directories) = File::Spec->splitpath($name, 1);
1180 my @directories = File::Spec->splitdir($directories);
1181 if (grep '..' eq $_, @directories) {
1182 return _error(
1183 "Could not extract $name safely: a parent directory is used");
1184 }
1185 my @path;
1186 my $path;
1187 for my $directory (@directories) {
1188 push @path, $directory;
1189 $path = File::Spec->catpath($volume, File::Spec->catdir(@path), '');
1190 if (-l $path) {
1191 return _error(
1192 "Could not extract $name safely: $path is an existing symbolic link");
1193 }
1194 if (!-e $path) {
1195 last;
1196 }
1197 }
1198 return AZ_OK;
1199}
1200
1201# $zip->extractTree( $root, $dest [, $volume] );
1202#
1203# $root and $dest are Unix-style.
1204# $volume is in local FS format.
1205#
1206sub extractTree {
1207 my $self = shift;
1208
1209 my ($root, $dest, $volume);
1210 if (ref($_[0]) eq 'HASH') {
1211 $root = $_[0]->{root};
1212 $dest = $_[0]->{zipName};
1213 $volume = $_[0]->{volume};
1214 } else {
1215 ($root, $dest, $volume) = @_;
1216 }
1217
1218 $root = '' unless defined($root);
1219 if (defined $dest) {
1220 if ($dest !~ m{/$}) {
1221 $dest .= '/';
1222 }
1223 } else {
1224 $dest = './';
1225 }
1226
1227 my $pattern = "^\Q$root";
1228 my @members = $self->membersMatching($pattern);
1229
1230 foreach my $member (@members) {
1231 my $fileName = $member->fileName(); # in Unix format
1232 $fileName =~ s{$pattern}{$dest}; # in Unix format
1233 # convert to platform format:
1234 $fileName = Archive::Zip::_asLocalName($fileName, $volume);
1235 if ((my $ret = _extractionNameIsSafe($fileName))
1236 != AZ_OK) { return $ret; }
1237 my $status = $member->extractToFileNamed($fileName);
1238 return $status if $status != AZ_OK;
1239 }
1240 return AZ_OK;
1241}
1242
1243# $zip->updateMember( $memberOrName, $fileName );
1244# Returns (possibly updated) member, if any; undef on errors.
1245
1246sub updateMember {
1247 my $self = shift;
1248
1249 my ($oldMember, $fileName);
1250 if (ref($_[0]) eq 'HASH') {
1251 $oldMember = $_[0]->{memberOrZipName};
1252 $fileName = $_[0]->{name};
1253 } else {
1254 ($oldMember, $fileName) = @_;
1255 }
1256
1257 if (!defined($fileName)) {
1258 _error("updateMember(): missing fileName argument");
1259 return undef;
1260 }
1261
1262 my @newStat = stat($fileName);
1263 if (!@newStat) {
1264 _ioError("Can't stat $fileName");
1265 return undef;
1266 }
1267
1268 my $isDir = -d _;
1269
1270 my $memberName;
1271
1272 if (ref($oldMember)) {
1273 $memberName = $oldMember->fileName();
1274 } else {
1275 $oldMember = $self->memberNamed($memberName = $oldMember)
1276 || $self->memberNamed($memberName =
1277 _asZipDirName($oldMember, $isDir));
1278 }
1279
1280 unless (defined($oldMember)
1281 && $oldMember->lastModTime() == $newStat[9]
1282 && $oldMember->isDirectory() == $isDir
1283 && ($isDir || ($oldMember->uncompressedSize() == $newStat[7]))) {
1284
1285 # create the new member
1286 my $newMember =
1287 $isDir
1288 ? Archive::Zip::Member->newDirectoryNamed($fileName, $memberName)
1289 : Archive::Zip::Member->newFromFile($fileName, $memberName);
1290
1291 unless (defined($newMember)) {
1292 _error("creation of member $fileName failed in updateMember()");
1293 return undef;
1294 }
1295
1296 # replace old member or append new one
1297 if (defined($oldMember)) {
1298 $self->replaceMember($oldMember, $newMember);
1299 } else {
1300 $self->addMember($newMember);
1301 }
1302
1303 return $newMember;
1304 }
1305
1306 return $oldMember;
1307}
1308
1309# $zip->updateTree( $root, [ $dest, [ $pred [, $mirror]]] );
1310#
1311# This takes the same arguments as addTree, but first checks to see
1312# whether the file or directory already exists in the zip file.
1313#
1314# If the fourth argument $mirror is true, then delete all my members
1315# if corresponding files were not found.
1316
1317sub updateTree {
1318 my $self = shift;
1319
1320 my ($root, $dest, $pred, $mirror, $compressionLevel);
1321 if (ref($_[0]) eq 'HASH') {
1322 $root = $_[0]->{root};
1323 $dest = $_[0]->{zipName};
1324 $pred = $_[0]->{select};
1325 $mirror = $_[0]->{mirror};
1326 $compressionLevel = $_[0]->{compressionLevel};
1327 } else {
1328 ($root, $dest, $pred, $mirror, $compressionLevel) = @_;
1329 }
1330
1331 return _error("root arg missing in call to updateTree()")
1332 unless defined($root);
1333 $dest = '' unless defined($dest);
1334 $pred = sub { -r }
1335 unless defined($pred);
1336
1337 $dest = _asZipDirName($dest, 1);
1338 my $rootZipName = _asZipDirName($root, 1); # with trailing slash
1339 my $pattern = $rootZipName eq './' ? '^' : "^\Q$rootZipName\E";
1340
1341 my @files;
1342 my $startDir = _untaintDir(cwd());
1343
1344 return _error('undef returned by _untaintDir on cwd ', cwd())
1345 unless $startDir;
1346
1347 # This avoids chdir'ing in Find, in a way compatible with older
1348 # versions of File::Find.
1349 my $wanted = sub {
1350 local $main::_ = $File::Find::name;
1351 my $dir = _untaintDir($File::Find::dir);
1352 chdir($startDir);
1353 push(@files, $File::Find::name) if (&$pred);
1354 chdir($dir);
1355 };
1356
1357 File::Find::find($wanted, $root);
1358
1359 # Now @files has all the files that I could potentially be adding to
1360 # the zip. Only add the ones that are necessary.
1361 # For each file (updated or not), add its member name to @done.
1362 my %done;
1363 foreach my $fileName (@files) {
1364 my @newStat = stat($fileName);
1365 my $isDir = -d _;
1366
1367 # normalize, remove leading ./
1368 my $memberName = _asZipDirName($fileName, $isDir);
1369 if ($memberName eq $rootZipName) { $memberName = $dest }
1370 else { $memberName =~ s{$pattern}{$dest} }
1371 next if $memberName =~ m{^\.?/?$}; # skip current dir
1372
1373 $done{$memberName} = 1;
1374 my $changedMember = $self->updateMember($memberName, $fileName);
1375 $changedMember->desiredCompressionLevel($compressionLevel);
1376 return _error("updateTree failed to update $fileName")
1377 unless ref($changedMember);
1378 }
1379
1380 # @done now has the archive names corresponding to all the found files.
1381 # If we're mirroring, delete all those members that aren't in @done.
1382 if ($mirror) {
1383 foreach my $member ($self->members()) {
1384 $self->removeMember($member)
1385 unless $done{$member->fileName()};
1386 }
1387 }
1388
1389 return AZ_OK;
1390}
1391
139213µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Symbol-pm-76-line.html0000644000175000017500000012747214576335353022103 0ustar michamicha Profile of Symbol.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Symbol.pm
StatementsExecuted 57 statements in 619µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
91132µs32µsSymbol::::gensymSymbol::gensym
1118µs10µsSymbol::::BEGIN@3Symbol::BEGIN@3
1118µs23µsSymbol::::BEGIN@4Symbol::BEGIN@4
1116µs10µsSymbol::::BEGIN@137Symbol::BEGIN@137
1116µs10µsSymbol::::BEGIN@156Symbol::BEGIN@156
1115µs11µsSymbol::::BEGIN@103Symbol::BEGIN@103
1115µs7µsSymbol::::BEGIN@167Symbol::BEGIN@167
0000s0sSymbol::::delete_packageSymbol::delete_package
0000s0sSymbol::::geniosymSymbol::geniosym
0000s0sSymbol::::qualifySymbol::qualify
0000s0sSymbol::::qualify_to_refSymbol::qualify_to_ref
0000s0sSymbol::::ungensymSymbol::ungensym
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Symbol;
2
3216µs211µs
# spent 10µs (8+1) within Symbol::BEGIN@3 which was called: # once (8µs+1µs) by IO::File::BEGIN@122 at line 3
use strict;
# spent 10µs making 1 call to Symbol::BEGIN@3 # spent 1µs making 1 call to strict::import
4294µs239µs
# spent 23µs (8+15) within Symbol::BEGIN@4 which was called: # once (8µs+15µs) by IO::File::BEGIN@122 at line 4
use warnings;
# spent 23µs making 1 call to Symbol::BEGIN@4 # spent 15µs making 1 call to warnings::import
5
6=head1 NAME
7
8Symbol - manipulate Perl symbols and their names
9
10=head1 SYNOPSIS
11
12 use Symbol;
13
14 $sym = gensym;
15 open($sym, '<', "filename");
16 $_ = <$sym>;
17 # etc.
18
19 ungensym $sym; # no effect
20
21 # replace *FOO{IO} handle but not $FOO, %FOO, etc.
22 *FOO = geniosym;
23
24 print qualify("x"), "\n"; # "main::x"
25 print qualify("x", "FOO"), "\n"; # "FOO::x"
26 print qualify("BAR::x"), "\n"; # "BAR::x"
27 print qualify("BAR::x", "FOO"), "\n"; # "BAR::x"
28 print qualify("STDOUT", "FOO"), "\n"; # "main::STDOUT" (global)
29 print qualify(\*x), "\n"; # returns \*x
30 print qualify(\*x, "FOO"), "\n"; # returns \*x
31
32 use strict refs;
33 print { qualify_to_ref $fh } "foo!\n";
34 $ref = qualify_to_ref $name, $pkg;
35
36 use Symbol qw(delete_package);
37 delete_package('Foo::Bar');
38 print "deleted\n" unless exists $Foo::{'Bar::'};
39
40=head1 DESCRIPTION
41
42C<Symbol::gensym> creates an anonymous glob and returns a reference
43to it. Such a glob reference can be used as a file or directory
44handle.
45
46For backward compatibility with older implementations that didn't
47support anonymous globs, C<Symbol::ungensym> is also provided.
48But it doesn't do anything.
49
50C<Symbol::geniosym> creates an anonymous IO handle. This can be
51assigned into an existing glob without affecting the non-IO portions
52of the glob.
53
54C<Symbol::qualify> turns unqualified symbol names into qualified
55variable names (e.g. "myvar" -E<gt> "MyPackage::myvar"). If it is given a
56second parameter, C<qualify> uses it as the default package;
57otherwise, it uses the package of its caller. Regardless, global
58variable names (e.g. "STDOUT", "ENV", "SIG") are always qualified with
59"main::".
60
61Qualification applies only to symbol names (strings). References are
62left unchanged under the assumption that they are glob references,
63which are qualified by their nature.
64
65C<Symbol::qualify_to_ref> is just like C<Symbol::qualify> except that it
66returns a glob ref rather than a symbol name, so you can use the result
67even if C<use strict 'refs'> is in effect.
68
69C<Symbol::delete_package> wipes out a whole package namespace. Note
70this routine is not exported by default--you may want to import it
71explicitly.
72
73=head1 BUGS
74
75C<Symbol::delete_package> is a bit too powerful. It undefines every symbol that
76lives in the specified package. Since perl, for performance reasons, does not
77perform a symbol table lookup each time a function is called or a global
78variable is accessed, some code that has already been loaded and that makes use
79of symbols in package C<Foo> may stop working after you delete C<Foo>, even if
80you reload the C<Foo> module afterwards.
81
82=cut
83
841300nsrequire Exporter;
8515µsour @ISA = qw(Exporter);
861500nsour @EXPORT = qw(gensym ungensym qualify qualify_to_ref);
871200nsour @EXPORT_OK = qw(delete_package geniosym);
88
891200nsour $VERSION = '1.09';
90
911200nsmy $genpkg = "Symbol::";
921100nsmy $genseq = 0;
93
9413µsmy %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT);
95
96#
97# Note that we never _copy_ the glob; we just make a ref to it.
98# If we did copy it, then SVf_FAKE would be set on the copy, and
99# glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work.
100#
101
# spent 32µs within Symbol::gensym which was called 9 times, avg 4µs/call: # 9 times (32µs+0s) by IO::Handle::new at line 333 of IO/Handle.pm, avg 4µs/call
sub gensym () {
10295µs my $name = "GEN" . $genseq++;
1032199µs217µs
# spent 11µs (5+6) within Symbol::BEGIN@103 which was called: # once (5µs+6µs) by IO::File::BEGIN@122 at line 103
no strict 'refs';
# spent 11µs making 1 call to Symbol::BEGIN@103 # spent 6µs making 1 call to strict::unimport
104916µs my $ref = \*{$genpkg . $name};
10595µs delete $$genpkg{$name};
106911µs $ref;
107}
108
109sub geniosym () {
110 my $sym = gensym();
111 # force the IO slot to be filled
112 select(select $sym);
113 *$sym{IO};
114}
115
116sub ungensym ($) {}
117
118sub qualify ($;$) {
119 my ($name) = @_;
120 if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) {
121 my $pkg;
122 # Global names: special character, "^xyz", or other.
123 if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) {
124 # RGS 2001-11-05 : translate leading ^X to control-char
125 $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei;
126 $pkg = "main";
127 }
128 else {
129 $pkg = (@_ > 1) ? $_[1] : caller;
130 }
131 $name = $pkg . "::" . $name;
132 }
133 $name;
134}
135
136sub qualify_to_ref ($;$) {
1372160µs214µs
# spent 10µs (6+4) within Symbol::BEGIN@137 which was called: # once (6µs+4µs) by IO::File::BEGIN@122 at line 137
no strict 'refs';
# spent 10µs making 1 call to Symbol::BEGIN@137 # spent 4µs making 1 call to strict::unimport
138 return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller };
139}
140
141#
142# of Safe.pm lineage
143#
144sub delete_package ($) {
145 my $pkg = shift;
146
147 # expand to full symbol table name if needed
148
149 unless ($pkg =~ /^main::.*::$/) {
150 $pkg = "main$pkg" if $pkg =~ /^::/;
151 $pkg = "main::$pkg" unless $pkg =~ /^main::/;
152 $pkg .= '::' unless $pkg =~ /::$/;
153 }
154
155 my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
156250µs214µs
# spent 10µs (6+4) within Symbol::BEGIN@156 which was called: # once (6µs+4µs) by IO::File::BEGIN@122 at line 156
no strict 'refs';
# spent 10µs making 1 call to Symbol::BEGIN@156 # spent 4µs making 1 call to strict::unimport
157 my $stem_symtab = *{$stem}{HASH};
158 return unless defined $stem_symtab and exists $stem_symtab->{$leaf};
159
160
161 # free all the symbols in the package
162
163 my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH};
164 foreach my $name (keys %$leaf_symtab) {
165 undef *{$pkg . $name};
166 }
167250µs210µs
# spent 7µs (5+3) within Symbol::BEGIN@167 which was called: # once (5µs+3µs) by IO::File::BEGIN@122 at line 167
use strict 'refs';
# spent 7µs making 1 call to Symbol::BEGIN@167 # spent 3µs making 1 call to strict::import
168
169 # delete the symbol table
170
171 %$leaf_symtab = ();
172 delete $stem_symtab->{$leaf};
173}
174
17514µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-API-Stack-pm-33-line.html0000644000175000017500000011176314576335353023276 0ustar michamicha Profile of Test2/API/Stack.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Stack.pm
StatementsExecuted 38 statements in 474µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.89ms2.81msTest2::API::Stack::::BEGIN@8Test2::API::Stack::BEGIN@8
11122µs41µsTest2::API::Stack::::BEGIN@3Test2::API::Stack::BEGIN@3
11114µs155µsTest2::API::Stack::::new_hubTest2::API::Stack::new_hub
11111µs13µsTest2::API::Stack::::BEGIN@2Test2::API::Stack::BEGIN@2
1116µs25µsTest2::API::Stack::::BEGIN@10Test2::API::Stack::BEGIN@10
1116µs20µsTest2::API::Stack::::BEGIN@81Test2::API::Stack::BEGIN@81
2223µs158µsTest2::API::Stack::::topTest2::API::Stack::top
1112µs2µsTest2::API::Stack::::rootTest2::API::Stack::root
1112µs2µsTest2::API::Stack::::allTest2::API::Stack::all
1111µs1µsTest2::API::Stack::::newTest2::API::Stack::new
0000s0sTest2::API::Stack::::__ANON__[:100]Test2::API::Stack::__ANON__[:100]
0000s0sTest2::API::Stack::::__ANON__[:88]Test2::API::Stack::__ANON__[:88]
0000s0sTest2::API::Stack::::clearTest2::API::Stack::clear
0000s0sTest2::API::Stack::::cullTest2::API::Stack::cull
0000s0sTest2::API::Stack::::peekTest2::API::Stack::peek
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::API::Stack;
2227µs214µs
# spent 13µs (11+2) within Test2::API::Stack::BEGIN@2 which was called: # once (11µs+2µs) by Test2::API::Instance::BEGIN@14 at line 2
use strict;
# spent 13µs making 1 call to Test2::API::Stack::BEGIN@2 # spent 2µs making 1 call to strict::import
3239µs261µs
# spent 41µs (22+19) within Test2::API::Stack::BEGIN@3 which was called: # once (22µs+19µs) by Test2::API::Instance::BEGIN@14 at line 3
use warnings;
# spent 41µs making 1 call to Test2::API::Stack::BEGIN@3 # spent 19µs making 1 call to warnings::import
4
51400nsour $VERSION = '1.302198';
6
7
8288µs12.81ms
# spent 2.81ms (1.89+927µs) within Test2::API::Stack::BEGIN@8 which was called: # once (1.89ms+927µs) by Test2::API::Instance::BEGIN@14 at line 8
use Test2::Hub();
# spent 2.81ms making 1 call to Test2::API::Stack::BEGIN@8
9
102200µs244µs
# spent 25µs (6+19) within Test2::API::Stack::BEGIN@10 which was called: # once (6µs+19µs) by Test2::API::Instance::BEGIN@14 at line 10
use Carp qw/confess/;
# spent 25µs making 1 call to Test2::API::Stack::BEGIN@10 # spent 19µs making 1 call to Exporter::import
11
12
# spent 1µs within Test2::API::Stack::new which was called: # once (1µs+0s) by Test2::API::Instance::reset at line 156 of Test2/API/Instance.pm
sub new {
131200ns my $class = shift;
1412µs return bless [], $class;
15}
16
17
# spent 155µs (14+140) within Test2::API::Stack::new_hub which was called: # once (14µs+140µs) by Test2::API::Stack::top at line 47
sub new_hub {
181100ns my $self = shift;
191200ns my %params = @_;
20
211400ns my $class = delete $params{class} || 'Test2::Hub';
22
2311µs120µs my $hub = $class->new(%params);
# spent 20µs making 1 call to Test2::Util::HashBase::_new
24
251500ns if (@$self) {
26 $hub->inherit($self->[-1], %params);
27 }
28 else {
291500ns require Test2::API;
30 $hub->format(Test2::API::test2_formatter()->new_root)
3115µs4116µs unless $hub->format || exists($params{formatter});
# spent 93µs making 1 call to Test2::Formatter::new_root # spent 21µs making 1 call to Test2::API::test2_formatter # spent 3µs making 2 calls to Test2::Hub::format, avg 1µs/call
32
331700ns14µs my $ipc = Test2::API::test2_ipc();
# spent 4µs making 1 call to Test2::API::test2_ipc
341400ns if ($ipc && !$hub->ipc && !exists($params{ipc})) {
35 $hub->set_ipc($ipc);
36 $ipc->add_hub($hub->hid);
37 }
38 }
39
401400ns push @$self => $hub;
41
4212µs $hub;
43}
44
45
# spent 158µs (3+155) within Test2::API::Stack::top which was called 2 times, avg 79µs/call: # once (2µs+155µs) by Test2::API::context at line 386 of Test2/API.pm # once (900ns+0s) by Test::Builder::_add_ts_hooks at line 45 of Test/Builder.pm
sub top {
462300ns my $self = shift;
4722µs1155µs return $self->new_hub unless @$self;
# spent 155µs making 1 call to Test2::API::Stack::new_hub
4811µs return $self->[-1];
49}
50
51sub peek {
52 my $self = shift;
53 return @$self ? $self->[-1] : undef;
54}
55
56sub cull {
57 my $self = shift;
58 $_->cull for reverse @$self;
59}
60
61
# spent 2µs within Test2::API::Stack::all which was called: # once (2µs+0s) by Test2::API::Instance::set_exit at line 520 of Test2/API/Instance.pm
sub all {
621300ns my $self = shift;
6312µs return @$self;
64}
65
66
# spent 2µs within Test2::API::Stack::root which was called: # once (2µs+0s) by Test2::API::test2_set_is_end at line 31 of Test2/API.pm
sub root {
671300ns my $self = shift;
681300ns return unless @$self;
6912µs return $self->[0];
70}
71
72sub clear {
73 my $self = shift;
74 @$self = ();
75}
76
77# Do these last without keywords in order to prevent them from getting used
78# when we want the real push/pop.
79
80{
81392µs234µs
# spent 20µs (6+14) within Test2::API::Stack::BEGIN@81 which was called: # once (6µs+14µs) by Test2::API::Instance::BEGIN@14 at line 81
no warnings 'once';
# spent 20µs making 1 call to Test2::API::Stack::BEGIN@81 # spent 14µs making 1 call to warnings::unimport
82
83 *push = sub {
84 my $self = shift;
85 my ($hub) = @_;
86 $hub->inherit($self->[-1]) if @$self;
87 push @$self => $hub;
8812µs };
89
90 *pop = sub {
91 my $self = shift;
92 my ($hub) = @_;
93 confess "No hubs on the stack"
94 unless @$self;
95 confess "You cannot pop the root hub"
96 if 1 == @$self;
97 confess "Hub stack mismatch, attempted to pop incorrect hub"
98 unless $self->[-1] == $hub;
99 pop @$self;
1001700ns };
101}
102
10313µs1;
104
105__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Plan-pm-51-line.html0000644000175000017500000004443314576335353024535 0ustar michamicha Profile of Test2/EventFacet/Plan.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Plan.pm
StatementsExecuted 10 statements in 110µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11116µs18µsTest2::EventFacet::Plan::::BEGIN@2Test2::EventFacet::Plan::BEGIN@2
1117µs7µsTest2::EventFacet::Plan::::BEGIN@7Test2::EventFacet::Plan::BEGIN@7
1114µs68µsTest2::EventFacet::Plan::::BEGIN@8Test2::EventFacet::Plan::BEGIN@8
1114µs21µsTest2::EventFacet::Plan::::BEGIN@3Test2::EventFacet::Plan::BEGIN@3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Plan;
2225µs220µs
# spent 18µs (16+2) within Test2::EventFacet::Plan::BEGIN@2 which was called: # once (16µs+2µs) by Test2::Event::BEGIN@22 at line 2
use strict;
# spent 18µs making 1 call to Test2::EventFacet::Plan::BEGIN@2 # spent 2µs making 1 call to strict::import
3239µs239µs
# spent 21µs (4+18) within Test2::EventFacet::Plan::BEGIN@3 which was called: # once (4µs+18µs) by Test2::Event::BEGIN@22 at line 3
use warnings;
# spent 21µs making 1 call to Test2::EventFacet::Plan::BEGIN@3 # spent 18µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7227µs17µs
# spent 7µs within Test2::EventFacet::Plan::BEGIN@7 which was called: # once (7µs+0s) by Test2::Event::BEGIN@22 at line 7
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 7µs making 1 call to Test2::EventFacet::Plan::BEGIN@7
8218µs2133µs
# spent 68µs (4+64) within Test2::EventFacet::Plan::BEGIN@8 which was called: # once (4µs+64µs) by Test2::Event::BEGIN@22 at line 8
use Test2::Util::HashBase qw{ -count -skip -none };
# spent 68µs making 1 call to Test2::EventFacet::Plan::BEGIN@8 # spent 64µs making 1 call to Test2::Util::HashBase::import
9
1012µs1;
11
12__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Exporter-Heavy-pm-27-line.html0000644000175000017500000016655414576335353023520 0ustar michamicha Profile of Exporter/Heavy.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Exporter/Heavy.pm
StatementsExecuted 1119 statements in 2.23ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1211959µs1.08msExporter::Heavy::::heavy_exportExporter::Heavy::heavy_export
11151µs57µsExporter::Heavy::::_rebuild_cacheExporter::Heavy::_rebuild_cache
22130µs30µsExporter::Heavy::::_push_tagsExporter::Heavy::_push_tags
31115µs161µsExporter::Heavy::::heavy_export_to_levelExporter::Heavy::heavy_export_to_level
11110µs12µsExporter::Heavy::::BEGIN@3Exporter::Heavy::BEGIN@3
1116µs21µsExporter::Heavy::::BEGIN@202Exporter::Heavy::BEGIN@202
1114µs8µsExporter::Heavy::::BEGIN@4Exporter::Heavy::BEGIN@4
1114µs14µsExporter::Heavy::::heavy_export_tagsExporter::Heavy::heavy_export_tags
1114µs24µsExporter::Heavy::::heavy_export_ok_tagsExporter::Heavy::heavy_export_ok_tags
0000s0sExporter::Heavy::::__ANON__[:57]Exporter::Heavy::__ANON__[:57]
0000s0sExporter::Heavy::::__ANON__[:63]Exporter::Heavy::__ANON__[:63]
0000s0sExporter::Heavy::::heavy_require_versionExporter::Heavy::heavy_require_version
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Exporter::Heavy;
2
3222µs213µs
# spent 12µs (10+2) within Exporter::Heavy::BEGIN@3 which was called: # once (10µs+2µs) by Exporter::as_heavy at line 3
use strict;
# spent 12µs making 1 call to Exporter::Heavy::BEGIN@3 # spent 2µs making 1 call to strict::import
42757µs212µs
# spent 8µs (4+4) within Exporter::Heavy::BEGIN@4 which was called: # once (4µs+4µs) by Exporter::as_heavy at line 4
no strict 'refs';
# spent 8µs making 1 call to Exporter::Heavy::BEGIN@4 # spent 4µs making 1 call to strict::unimport
5
6# On one line so MakeMaker will see it.
71400nsour $VERSION = '5.78';
8
9=head1 NAME
10
11Exporter::Heavy - Exporter guts
12
13=head1 SYNOPSIS
14
15(internal use only)
16
17=head1 DESCRIPTION
18
19No user-serviceable parts inside.
20
21=cut
22
23#
24# We go to a lot of trouble not to 'require Carp' at file scope,
25# because Carp requires Exporter, and something has to give.
26#
27
28
# spent 57µs (51+6) within Exporter::Heavy::_rebuild_cache which was called: # once (51µs+6µs) by Exporter::Heavy::heavy_export at line 72
sub _rebuild_cache {
291300ns my ($pkg, $exports, $cache) = @_;
301700ns s/^&// foreach @$exports;
311800ns @{$cache}{@$exports} = (1) x @$exports;
321900ns my $ok = \@{"${pkg}::EXPORT_OK"};
3312µs if (@$ok) {
34141µs616µs s/^&// foreach @$ok;
# spent 6µs making 61 calls to CORE::subst, avg 97ns/call
35112µs @{$cache}{@$ok} = (1) x @$ok;
36 }
37}
38
39
# spent 1.08ms (959µs+121µs) within Exporter::Heavy::heavy_export which was called 12 times, avg 90µs/call: # 12 times (959µs+121µs) by Exporter::Heavy::heavy_export_to_level or Exporter::import at line 22 of Exporter.pm, avg 90µs/call
sub heavy_export {
40
41 # Save the old __WARN__ handler in case it was defined
42124µs my $oldwarn = $SIG{__WARN__};
43
44 # First make import warnings look like they're coming from the "use".
45 local $SIG{__WARN__} = sub {
46 # restore it back so proper stacking occurs
47 local $SIG{__WARN__} = $oldwarn;
48 my $text = shift;
49 if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) {
50 require Carp;
51 local $Carp::CarpLevel = 1; # ignore package calling us too.
52 Carp::carp($text);
53 }
54 else {
55 warn $text;
56 }
571233µs };
58 local $SIG{__DIE__} = sub {
59 require Carp;
60 local $Carp::CarpLevel = 1; # ignore package calling us too.
61 Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT")
62 if $_[0] =~ /^Unable to create sub named "(.*?)::"/;
631220µs };
64
65128µs my($pkg, $callpkg, @imports) = @_;
66122µs my($type, $sym, $cache_is_current, $oops);
67 my($exports, $export_cache) = (\@{"${pkg}::EXPORT"},
681213µs $Exporter::Cache{$pkg} ||= {});
69
70123µs if (@imports) {
71123µs if (!%$export_cache) {
721900ns157µs _rebuild_cache ($pkg, $exports, $export_cache);
# spent 57µs making 1 call to Exporter::Heavy::_rebuild_cache
731200ns $cache_is_current = 1;
74 }
75
761241µs2710µs if (grep m{^[/!:]}, @imports) {
# spent 10µs making 27 calls to CORE::match, avg 381ns/call
7796µs my $tagsref = \%{"${pkg}::EXPORT_TAGS"};
7891µs my $tagdata;
79 my %imports;
80 my($remove, $spec, @names, @allexports);
81 # negated first item implies starting with default set:
82911µs92µs unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/;
# spent 2µs making 9 calls to CORE::match, avg 233ns/call
8393µs foreach $spec (@imports){
842320µs233µs $remove = $spec =~ s/^!//;
# spent 3µs making 23 calls to CORE::subst, avg 126ns/call
85
862326µs239µs if ($spec =~ s/^://){
# spent 9µs making 23 calls to CORE::subst, avg 374ns/call
872340µs if ($spec eq 'DEFAULT'){
88 @names = @$exports;
89 }
90 elsif ($tagdata = $tagsref->{$spec}) {
91 @names = @$tagdata;
92 }
93 else {
94 warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS];
95 ++$oops;
96 next;
97 }
98 }
99 elsif ($spec =~ m:^/(.*)/$:){
100 my $patn = $1;
101 @allexports = keys %$export_cache unless @allexports; # only do keys once
102 @names = grep(/$patn/, @allexports); # not anchored by default
103 }
104 else {
105 @names = ($spec); # is a normal symbol name
106 }
107
108232µs warn "Import ".($remove ? "del":"add").": @names "
109 if $Exporter::Verbose;
110
1112310µs if ($remove) {
112 foreach $sym (@names) { delete $imports{$sym} }
113 }
114 else {
1152359µs @imports{@names} = (1) x @names;
116 }
117 }
118934µs @imports = keys %imports;
119 }
120
121122µs my @carp;
122123µs foreach $sym (@imports) {
12335053µs if (!$export_cache->{$sym}) {
124 if ($sym =~ m/^\d/) {
125 $pkg->VERSION($sym); # inherit from UNIVERSAL
126 # If the version number was the only thing specified
127 # then we should act as if nothing was specified:
128 if (@imports == 1) {
129 @imports = @$exports;
130 last;
131 }
132 # We need a way to emulate 'use Foo ()' but still
133 # allow an easy version check: "use Foo 1.23, ''";
134 if (@imports == 2 and !$imports[1]) {
135 @imports = ();
136 last;
137 }
138 } elsif ($sym !~ s/^&// || !$export_cache->{$sym}) {
139 # Last chance - see if they've updated EXPORT_OK since we
140 # cached it.
141
142 unless ($cache_is_current) {
143 %$export_cache = ();
144 _rebuild_cache ($pkg, $exports, $export_cache);
145 $cache_is_current = 1;
146 }
147
148 if (!$export_cache->{$sym}) {
149 # accumulate the non-exports
150 push @carp,
151 qq["$sym" is not exported by the $pkg module];
152 $oops++;
153 }
154 }
155 }
156 }
157123µs if ($oops) {
158 require Carp;
159 Carp::croak(join("\n", @carp, "Can't continue after import errors"));
160 }
161 }
162 else {
163 @imports = @$exports;
164 }
165
166 my($fail, $fail_cache) = (\@{"${pkg}::EXPORT_FAIL"},
1671215µs $Exporter::FailCache{$pkg} ||= {});
168
169122µs if (@$fail) {
170 if (!%$fail_cache) {
171 # Build cache of symbols. Optimise the lookup by adding
172 # barewords twice... both with and without a leading &.
173 # (Technique could be applied to $export_cache at cost of memory)
174 my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @$fail;
175 warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Exporter::Verbose;
176 @{$fail_cache}{@expanded} = (1) x @expanded;
177 }
178 my @failed;
179 foreach $sym (@imports) { push(@failed, $sym) if $fail_cache->{$sym} }
180 if (@failed) {
181 @failed = $pkg->export_fail(@failed);
182 foreach $sym (@failed) {
183 require Carp;
184 Carp::carp(qq["$sym" is not implemented by the $pkg module ],
185 "on this architecture");
186 }
187 if (@failed) {
188 require Carp;
189 Carp::croak("Can't continue after import errors");
190 }
191 }
192 }
193
194122µs warn "Importing into $callpkg from $pkg: ",
195 join(", ",sort @imports) if $Exporter::Verbose;
196
1971288µs foreach $sym (@imports) {
198 # shortcut for the common case of no type character
199350523µs35040µs (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next)
# spent 40µs making 350 calls to CORE::subst, avg 115ns/call
200 unless $sym =~ s/^(\W)//;
201 $type = $1;
2022311µs236µs
# spent 21µs (6+15) within Exporter::Heavy::BEGIN@202 which was called: # once (6µs+15µs) by Exporter::as_heavy at line 202
no warnings 'once';
# spent 21µs making 1 call to Exporter::Heavy::BEGIN@202 # spent 15µs making 1 call to warnings::unimport
203 *{"${callpkg}::$sym"} =
204 $type eq '&' ? \&{"${pkg}::$sym"} :
205 $type eq '$' ? \${"${pkg}::$sym"} :
206 $type eq '@' ? \@{"${pkg}::$sym"} :
207 $type eq '%' ? \%{"${pkg}::$sym"} :
208 $type eq '*' ? *{"${pkg}::$sym"} :
209 do { require Carp; Carp::croak("Can't export symbol: $type$sym") };
210 }
211}
212
213sub heavy_export_to_level
214
# spent 161µs (15+145) within Exporter::Heavy::heavy_export_to_level which was called 3 times, avg 54µs/call: # 3 times (15µs+145µs) by Time::HiRes::import at line 78 of Exporter.pm, avg 54µs/call
{
2153700ns my $pkg = shift;
2163400ns my $level = shift;
21731µs (undef) = shift; # XXX redundant arg
2183900ns my $callpkg = caller($level);
21938µs316µs $pkg->export($callpkg, @_);
# spent 16µs making 3 calls to Exporter::export, avg 5µs/call
220}
221
222# Utility functions
223
224
# spent 30µs within Exporter::Heavy::_push_tags which was called 2 times, avg 15µs/call: # once (21µs+0s) by Exporter::Heavy::heavy_export_ok_tags at line 250 # once (10µs+0s) by Exporter::Heavy::heavy_export_tags at line 246
sub _push_tags {
22521µs my($pkg, $var, $syms) = @_;
2262500ns my @nontag = ();
22722µs my $export_tags = \%{"${pkg}::EXPORT_TAGS"};
228 push(@{"${pkg}::$var"},
229224µs map { $export_tags->{$_} ? @{$export_tags->{$_}}
230 : scalar(push(@nontag,$_),$_) }
231 (@$syms) ? @$syms : keys %$export_tags);
23224µs if (@nontag and $^W) {
233 # This may change to a die one day
234 require Carp;
235 Carp::carp(join(", ", @nontag)." are not tags of $pkg");
236 }
237}
238
239sub heavy_require_version {
240 my($self, $wanted) = @_;
241 my $pkg = ref $self || $self;
242 return ${pkg}->VERSION($wanted);
243}
244
245
# spent 14µs (4+10) within Exporter::Heavy::heavy_export_tags which was called: # once (4µs+10µs) by Archive::Zip::BEGIN@11 at line 82 of Exporter.pm
sub heavy_export_tags {
24614µs110µs _push_tags((caller)[0], "EXPORT", \@_);
# spent 10µs making 1 call to Exporter::Heavy::_push_tags
247}
248
249
# spent 24µs (4+21) within Exporter::Heavy::heavy_export_ok_tags which was called: # once (4µs+21µs) by Archive::Zip::BEGIN@37 at line 86 of Exporter.pm
sub heavy_export_ok_tags {
25014µs121µs _push_tags((caller)[0], "EXPORT_OK", \@_);
# spent 21µs making 1 call to Exporter::Heavy::_push_tags
251}
252
25312µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-Format-pm-125-line.html0000644000175000017500000005007114576335353026425 0ustar michamicha Profile of Spreadsheet/ParseExcel/Format.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel/Format.pm
StatementsExecuted 51 statements in 117µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
151144µs44µsSpreadsheet::ParseExcel::Format::::newSpreadsheet::ParseExcel::Format::new
1119µs10µsSpreadsheet::ParseExcel::Format::::BEGIN@19Spreadsheet::ParseExcel::Format::BEGIN@19
1113µs18µsSpreadsheet::ParseExcel::Format::::BEGIN@20Spreadsheet::ParseExcel::Format::BEGIN@20
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel::Format;
2
3###############################################################################
4#
5# Spreadsheet::ParseExcel::Format - A class for Cell formats.
6#
7# Used in conjunction with Spreadsheet::ParseExcel.
8#
9# Copyright (c) 2014 Douglas Wilson
10# Copyright (c) 2009-2013 John McNamara
11# Copyright (c) 2006-2008 Gabor Szabo
12# Copyright (c) 2000-2006 Kawai Takanori
13#
14# perltidy with standard settings.
15#
16# Documentation after __END__
17#
18
19219µs211µs
# spent 10µs (9+1) within Spreadsheet::ParseExcel::Format::BEGIN@19 which was called: # once (9µs+1µs) by Spreadsheet::ParseExcel::BEGIN@34 at line 19
use strict;
# spent 10µs making 1 call to Spreadsheet::ParseExcel::Format::BEGIN@19 # spent 1µs making 1 call to strict::import
20245µs232µs
# spent 18µs (3+14) within Spreadsheet::ParseExcel::Format::BEGIN@20 which was called: # once (3µs+14µs) by Spreadsheet::ParseExcel::BEGIN@34 at line 20
use warnings;
# spent 18µs making 1 call to Spreadsheet::ParseExcel::Format::BEGIN@20 # spent 14µs making 1 call to warnings::import
21
221300nsour $VERSION = '0.66';
23
24
# spent 44µs within Spreadsheet::ParseExcel::Format::new which was called 15 times, avg 3µs/call: # 15 times (44µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 946 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 3µs/call
sub new {
251530µs my ( $class, %rhIni ) = @_;
26155µs my $self = \%rhIni;
27
281516µs bless $self, $class;
29}
30
3112µs1;
32
33__END__










Spreadsheet-ParseXLSX-0.35/nytprof/overload-pm-95-line.html0000644000175000017500000014075514576335353022451 0ustar michamicha Profile of overload.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/overload.pm
StatementsExecuted 161 statements in 875µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
61170µs70µsoverload::::OVERLOADoverload::OVERLOAD
66526µs96µsoverload::::importoverload::import
11112µs12µsoverload::::unimportoverload::unimport
1119µs10µsoverload::::BEGIN@3overload::BEGIN@3
1117µs14µsoverload::::BEGIN@84overload::BEGIN@84
1115µs9µsoverload::::BEGIN@113overload::BEGIN@113
1114µs17µsoverload::::BEGIN@102overload::BEGIN@102
1114µs18µsoverload::::BEGIN@143overload::BEGIN@143
1113µs7µsoverload::::BEGIN@4overload::BEGIN@4
0000s0soverload::::AddrRefoverload::AddrRef
0000s0soverload::::Methodoverload::Method
0000s0soverload::::Overloadedoverload::Overloaded
0000s0soverload::::OverloadedStringifyoverload::OverloadedStringify
0000s0soverload::::constantoverload::constant
0000s0soverload::::mycanoverload::mycan
0000s0soverload::::niloverload::nil
0000s0soverload::::ov_methodoverload::ov_method
0000s0soverload::::remove_constantoverload::remove_constant
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package overload;
2
3218µs212µs
# spent 10µs (9+1) within overload::BEGIN@3 which was called: # once (9µs+1µs) by File::Temp::BEGIN@168 at line 3
use strict;
# spent 10µs making 1 call to overload::BEGIN@3 # spent 2µs making 1 call to strict::import
42307µs210µs
# spent 7µs (3+3) within overload::BEGIN@4 which was called: # once (3µs+3µs) by File::Temp::BEGIN@168 at line 4
no strict 'refs';
# spent 7µs making 1 call to overload::BEGIN@4 # spent 3µs making 1 call to strict::unimport
5
61300nsour $VERSION = '1.37';
7
814µsour %ops = (
9 with_assign => "+ - * / % ** << >> x .",
10 assign => "+= -= *= /= %= **= <<= >>= x= .=",
11 num_comparison => "< <= > >= == !=",
12 '3way_comparison' => "<=> cmp",
13 str_comparison => "lt le gt ge eq ne",
14 binary => '& &= | |= ^ ^= &. &.= |. |.= ^. ^.=',
15 unary => "neg ! ~ ~.",
16 mutators => '++ --',
17 func => "atan2 cos sin exp abs log sqrt int",
18 conversion => 'bool "" 0+ qr',
19 iterators => '<>',
20 filetest => "-X",
21 dereferencing => '${} @{} %{} &{} *{}',
22 matching => '~~',
23 special => 'nomethod fallback =',
24);
25
261200nsmy %ops_seen;
27123µs@ops_seen{ map split(/ /), values %ops } = ();
28
29sub nil {}
30
31
# spent 70µs within overload::OVERLOAD which was called 6 times, avg 12µs/call: # 6 times (70µs+0s) by overload::import at line 60, avg 12µs/call
sub OVERLOAD {
3261µs my $package = shift;
3366µs my %arg = @_;
346900ns my $sub;
35612µs *{$package . "::(("} = \&nil; # Make it findable via fetchmethod.
36621µs for (keys %arg) {
37167µs if ($_ eq 'fallback') {
3846µs for my $sym (*{$package . "::()"}) {
3942µs *$sym = \&nil; # Make it findable via fetchmethod.
4042µs $$sym = $arg{$_};
41 }
42 } else {
43 warnings::warnif("overload arg '$_' is invalid")
44123µs unless exists $ops_seen{$_};
45123µs $sub = $arg{$_};
46122µs if (not ref $sub) {
4733µs $ {$package . "::(" . $_} = $sub;
483700ns $sub = \&nil;
49 }
50 #print STDERR "Setting '$ {'package'}::\cO$_' to \\&'$sub'.\n";
511210µs *{$package . "::(" . $_} = \&{ $sub };
52 }
53 }
54}
55
56
# spent 96µs (26+70) within overload::import which was called 6 times, avg 16µs/call: # once (5µs+17µs) by URI::BEGIN@43 at line 46 of URI.pm # once (5µs+14µs) by File::Temp::BEGIN@168 at line 168 of File/Temp.pm # once (5µs+14µs) by JSON::PP::BEGIN@12 at line 11 of JSON/PP/Boolean.pm # once (5µs+10µs) by XML::Parser::ContentModel::BEGIN@512 at line 512 of XML/Parser/Expat.pm # once (3µs+12µs) by File::Temp::Dir::BEGIN@2603 at line 2603 of File/Temp.pm # once (3µs+4µs) by File::Copy::BEGIN@15 at line 15 of File/Copy.pm
sub import {
5764µs my $package = caller();
58 # *{$package . "::OVERLOAD"} = \&OVERLOAD;
5961µs shift;
60616µs670µs $package->overload::OVERLOAD(@_);
# spent 70µs making 6 calls to overload::OVERLOAD, avg 12µs/call
61}
62
63
# spent 12µs within overload::unimport which was called: # once (12µs+0s) by JSON::PP::BEGIN@12 at line 6 of JSON/PP/Boolean.pm
sub unimport {
641600ns my $package = caller();
651200ns shift;
6613µs *{$package . "::(("} = \&nil;
6714µs for (@_) {
68 warnings::warnif("overload arg '$_' is invalid")
6942µs unless exists $ops_seen{$_};
7043µs delete $ {$package . "::"}{$_ eq 'fallback' ? '()' : "(" .$_};
71 }
72}
73
74sub Overloaded {
75 my $package = shift;
76 $package = ref $package if ref $package;
77 mycan ($package, '()') || mycan ($package, '((');
78}
79
80sub ov_method {
81 my $globref = shift;
82 return undef unless $globref;
83 my $sub = \&{*$globref};
84298µs220µs
# spent 14µs (7+6) within overload::BEGIN@84 which was called: # once (7µs+6µs) by File::Temp::BEGIN@168 at line 84
no overloading;
# spent 14µs making 1 call to overload::BEGIN@84 # spent 6µs making 1 call to overloading::unimport
85 return $sub if $sub != \&nil;
86 return shift->can($ {*$globref});
87}
88
89sub OverloadedStringify {
90 my $package = shift;
91 $package = ref $package if ref $package;
92 #$package->can('(""')
93 ov_method mycan($package, '(""'), $package
94 or ov_method mycan($package, '(0+'), $package
95 or ov_method mycan($package, '(bool'), $package
96 or ov_method mycan($package, '(nomethod'), $package;
97}
98
99sub Method {
100 my $package = shift;
101 if (ref $package) {
102247µs230µs
# spent 17µs (4+13) within overload::BEGIN@102 which was called: # once (4µs+13µs) by File::Temp::BEGIN@168 at line 102
no warnings 'experimental::builtin';
# spent 17µs making 1 call to overload::BEGIN@102 # spent 13µs making 1 call to warnings::unimport
103 $package = builtin::blessed($package);
104 return undef if !defined $package;
105 }
106 #my $meth = $package->can('(' . shift);
107 ov_method mycan($package, '(' . shift), $package;
108 #return $meth if $meth ne \&nil;
109 #return $ {*{$meth}};
110}
111
112sub AddrRef {
113293µs214µs
# spent 9µs (5+4) within overload::BEGIN@113 which was called: # once (5µs+4µs) by File::Temp::BEGIN@168 at line 113
no overloading;
# spent 9µs making 1 call to overload::BEGIN@113 # spent 4µs making 1 call to overloading::unimport
114 "$_[0]";
115}
116
11711µs*StrVal = *AddrRef;
118
119sub mycan { # Real can would leave stubs.
120 my ($package, $meth) = @_;
121
122 local $@;
123 local $!;
124 require mro;
125
126 my $mro = mro::get_linear_isa($package);
127 foreach my $p (@$mro) {
128 my $fqmeth = $p . q{::} . $meth;
129 return \*{$fqmeth} if defined &{$fqmeth};
130 }
131
132 return undef;
133}
134
13511µsmy %constants = (
136 'integer' => 0x1000, # HINT_NEW_INTEGER
137 'float' => 0x2000, # HINT_NEW_FLOAT
138 'binary' => 0x4000, # HINT_NEW_BINARY
139 'q' => 0x8000, # HINT_NEW_STRING
140 'qr' => 0x10000, # HINT_NEW_RE
141);
142
1432163µs233µs
# spent 18µs (4+14) within overload::BEGIN@143 which was called: # once (4µs+14µs) by File::Temp::BEGIN@168 at line 143
use warnings::register;
# spent 18µs making 1 call to overload::BEGIN@143 # spent 14µs making 1 call to warnings::register::import
144sub constant {
145 # Arguments: what, sub
146 while (@_) {
147 if (@_ == 1) {
148 warnings::warnif ("Odd number of arguments for overload::constant");
149 last;
150 }
151 elsif (!exists $constants {$_ [0]}) {
152 warnings::warnif ("'$_[0]' is not an overloadable type");
153 }
154 elsif (!ref $_ [1] || "$_[1]" !~ /(^|=)CODE\(0x[0-9a-f]+\)$/) {
155 # Can't use C<ref $_[1] eq "CODE"> above as code references can be
156 # blessed, and C<ref> would return the package the ref is blessed into.
157 if (warnings::enabled) {
158 $_ [1] = "undef" unless defined $_ [1];
159 warnings::warn ("'$_[1]' is not a code reference");
160 }
161 }
162 else {
163 $^H{$_[0]} = $_[1];
164 $^H |= $constants{$_[0]};
165 }
166 shift, shift;
167 }
168}
169
170sub remove_constant {
171 # Arguments: what, sub
172 while (@_) {
173 delete $^H{$_[0]};
174 $^H &= ~ $constants{$_[0]};
175 shift, shift;
176 }
177}
178
17916µs1;
180
181__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Fcntl-pm-11-line.html0000644000175000017500000012266114576335353021664 0ustar michamicha Profile of Fcntl.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Fcntl.pm
StatementsExecuted 11 statements in 377µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsFcntl::::BEGIN@58Fcntl::BEGIN@58
1114µs9µsFcntl::::BEGIN@60Fcntl::BEGIN@60
1113µs3µsFcntl::::O_NOFOLLOWFcntl::O_NOFOLLOW (xsub)
1112µs2µsFcntl::::O_BINARYFcntl::O_BINARY (xsub)
1112µs2µsFcntl::::O_LARGEFILEFcntl::O_LARGEFILE (xsub)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Fcntl;
2
3=head1 NAME
4
5Fcntl - load the C Fcntl.h defines
6
7=head1 SYNOPSIS
8
9 use Fcntl;
10 use Fcntl qw(:DEFAULT :flock);
11
12=head1 DESCRIPTION
13
14This module is just a translation of the C F<fcntl.h> file.
15Unlike the old mechanism of requiring a translated F<fcntl.ph>
16file, this uses the B<h2xs> program (see the Perl source distribution)
17and your native C compiler. This means that it has a
18far more likely chance of getting the numbers right.
19
20=head1 NOTE
21
22Only C<#define> symbols get translated; you must still correctly
23pack up your own arguments to pass as args for locking functions, etc.
24
25=head1 EXPORTED SYMBOLS
26
27By default your system's F_* and O_* constants (eg, F_DUPFD and
28O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
29
30You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
31and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
32
33You can request that the old constants (FAPPEND, FASYNC, FCREAT,
34FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
35compatibility reasons by using the tag C<:Fcompat>. For new
36applications the newer versions of these constants are suggested
37(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
38O_SYNC, O_TRUNC).
39
40For ease of use also the SEEK_* constants (for seek() and sysseek(),
41e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
42available for import. They can be imported either separately or using
43the tags C<:seek> and C<:mode>.
44
45Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
46(equal to Perl's seek() and sysseek(), respectively), and chmod(2)
47documentation to see what constants are implemented in your system.
48
49See L<perlopentut> to learn about the uses of the O_* constants
50with sysopen().
51
52See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
53
54See L<perlfunc/stat> about the S_I* constants.
55
56=cut
57
58223µs213µs
# spent 11µs (10+2) within Fcntl::BEGIN@58 which was called: # once (10µs+2µs) by POSIX::BEGIN@11 at line 58
use strict;
# spent 11µs making 1 call to Fcntl::BEGIN@58 # spent 2µs making 1 call to strict::import
59
602154µs214µs
# spent 9µs (4+5) within Fcntl::BEGIN@60 which was called: # once (4µs+5µs) by POSIX::BEGIN@11 at line 60
use Exporter 'import';
# spent 9µs making 1 call to Fcntl::BEGIN@60 # spent 5µs making 1 call to Exporter::import
611400nsrequire XSLoader;
621400nsour $VERSION = '1.15';
63
641172µs1166µsXSLoader::load();
# spent 166µs making 1 call to XSLoader::load
65
66# Named groups of exports
6716µsour %EXPORT_TAGS = (
68 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
69 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
70 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
71 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
72 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
73 _S_IFMT S_IFREG S_IFDIR S_IFLNK
74 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
75 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
76 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
77 S_IROTH S_IWOTH S_IXOTH S_IRWXO
78 S_IREAD S_IWRITE S_IEXEC
79 S_ISREG S_ISDIR S_ISLNK S_ISSOCK
80 S_ISBLK S_ISCHR S_ISFIFO
81 S_ISWHT S_ISENFMT
82 S_IFMT S_IMODE
83 )],
84);
85
86# Items to export into callers namespace by default
87# (move infrequently used names to @EXPORT_OK below)
8817µsour @EXPORT =
89 qw(
90 FD_CLOEXEC
91 F_ALLOCSP
92 F_ALLOCSP64
93 F_COMPAT
94 F_DUP2FD
95 F_DUPFD
96 F_EXLCK
97 F_FREESP
98 F_FREESP64
99 F_FSYNC
100 F_FSYNC64
101 F_GETFD
102 F_GETFL
103 F_GETLK
104 F_GETLK64
105 F_GETOWN
106 F_NODNY
107 F_POSIX
108 F_RDACC
109 F_RDDNY
110 F_RDLCK
111 F_RWACC
112 F_RWDNY
113 F_SETFD
114 F_SETFL
115 F_SETLK
116 F_SETLK64
117 F_SETLKW
118 F_SETLKW64
119 F_SETOWN
120 F_SHARE
121 F_SHLCK
122 F_UNLCK
123 F_UNSHARE
124 F_WRACC
125 F_WRDNY
126 F_WRLCK
127 O_ACCMODE
128 O_ALIAS
129 O_APPEND
130 O_ASYNC
131 O_BINARY
132 O_CREAT
133 O_DEFER
134 O_DIRECT
135 O_DIRECTORY
136 O_DSYNC
137 O_EXCL
138 O_EXLOCK
139 O_LARGEFILE
140 O_NDELAY
141 O_NOCTTY
142 O_NOFOLLOW
143 O_NOINHERIT
144 O_NONBLOCK
145 O_RANDOM
146 O_RAW
147 O_RDONLY
148 O_RDWR
149 O_RSRC
150 O_RSYNC
151 O_SEQUENTIAL
152 O_SHLOCK
153 O_SYNC
154 O_TEMPORARY
155 O_TEXT
156 O_TRUNC
157 O_WRONLY
158 );
159
160# Other items we are prepared to export if requested
161our @EXPORT_OK = (qw(
162 DN_ACCESS
163 DN_ATTRIB
164 DN_CREATE
165 DN_DELETE
166 DN_MODIFY
167 DN_MULTISHOT
168 DN_RENAME
169 F_GETLEASE
170 F_GETPIPE_SZ
171 F_GETSIG
172 F_NOTIFY
173 F_SETLEASE
174 F_SETPIPE_SZ
175 F_SETSIG
176 LOCK_MAND
177 LOCK_READ
178 LOCK_RW
179 LOCK_WRITE
180 O_ALT_IO
181 O_EVTONLY
182 O_IGNORE_CTTY
183 O_NOATIME
184 O_NOLINK
185 O_NOSIGPIPE
186 O_NOTRANS
187 O_SYMLINK
188 O_TTY_INIT
18916µs), map {@{$_}} values %EXPORT_TAGS);
190
19119µs1;
 
# spent 2µs within Fcntl::O_BINARY which was called: # once (2µs+0s) by Archive::Zip::BEGIN@11 at line 246 of File/Temp.pm
sub Fcntl::O_BINARY; # xsub
# spent 2µs within Fcntl::O_LARGEFILE which was called: # once (2µs+0s) by Archive::Zip::BEGIN@11 at line 246 of File/Temp.pm
sub Fcntl::O_LARGEFILE; # xsub
# spent 3µs within Fcntl::O_NOFOLLOW which was called: # once (3µs+0s) by Archive::Zip::BEGIN@11 at line 246 of File/Temp.pm
sub Fcntl::O_NOFOLLOW; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 102)[XML-Twig-pm-1750]-219-line.html0000644000175000017500000004473614576335353024424 0ustar michamicha Profile of (eval 102)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 102)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 183 statements in 146µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
151141µs41µsXML::Twig::::__ANON__[:17]XML::Twig::__ANON__[:17]
1116µs17µsXML::Twig::::BEGIN@1.46XML::Twig::BEGIN@1.46
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1286µs228µs
# spent 17µs (6+11) within XML::Twig::BEGIN@1.46 which was called: # once (6µs+11µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 41µs within XML::Twig::__ANON__[(eval 102)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] which was called 15 times, avg 3µs/call: # 15 times (41µs+0s) by XML::Twig::_handler at line 2405 of XML/Twig.pm, avg 3µs/call
sub { no warnings;
# spent 17µs making 1 call to XML::Twig::BEGIN@1.46 # spent 11µs making 1 call to warnings::unimport
2152µsmy( $stack)= @_;
3155µsmy @current_elts= (scalar @$stack);
4151µsmy @new_current_elts;
5my $elt;
6
7154µsforeach my $current_elt (@current_elts)
8151µs { next if( !$current_elt);
9151µs $current_elt--;
10153µs $elt= $stack->[$current_elt];
11158µs if( ($elt->{'##tag'} eq "s:si")) { push @new_current_elts, $current_elt;}
12 }
13152µsunless( @new_current_elts) { return 0; }
14153µs@current_elts= @new_current_elts;
15152µs@new_current_elts=();
161526µsreturn q{s:si};
1713µs }
18;










Spreadsheet-ParseXLSX-0.35/nytprof/flamegraph_subattr.txt0000644000175000017500000033124714576335353022567 0ustar michamichaXML::Twig::BEGIN@3619 href=XML-Twig-pm-129-line.html#3619 Spreadsheet::ParseExcel::BEGIN@17 href=Spreadsheet-ParseExcel-pm-118-line.html#17 Encode::Alias::BEGIN@2 href=Encode-Alias-pm-104-line.html#2 JSON::_load_xs href=JSON-pm-142-line.html#289 Test2::Formatter::finalize href=Test2-Formatter-pm-69-line.html#28 Test2::API::Instance::set_exit href=Test2-API-Instance-pm-28-line.html#468 Archive::Zip::BEGIN@12 href=Archive-Zip-pm-73-line.html#12 Archive::Zip::Member::BEGIN@33 href=Archive-Zip-Member-pm-109-line.html#33 Test2::API::BEGIN@104 href=Test2-API-pm-24-line.html#104 Test2::Event::Plan::BEGIN@2 href=Test2-Event-Plan-pm-55-line.html#2 Archive::Zip::Member::new href=Archive-Zip-Member-pm-109-line.html#99 OLE::Storage_Lite::BEGIN@831 href=OLE-Storage_Lite-pm-119-line.html#831 Test2::Hub::BEGIN@3 href=Test2-Hub-pm-34-line.html#3 Storable::BEGIN@42 href=Storable-pm-106-line.html#42 Archive::Zip::Archive::memberNamed href=Archive-Zip-Archive-pm-98-line.html#94 utf8::BEGIN@3 href=utf8-pm-131-line.html#3 Encode::BEGIN@11 href=Storable-pm-106-line.html#11 Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] href=ParseXLSX-pm-72-line.html#973 File::Temp::BEGIN@153 href=File-Temp-pm-87-line.html#153 File::Temp::BEGIN@219 href=File-Temp-pm-87-line.html#219 Test2::API::Context::BEGIN@8 href=Test2-API-Context-pm-61-line.html#8 Spreadsheet::ParseXLSX::Decryptor::BEGIN@13 href=Decryptor-pm-138-line.html#13 Archive::Zip::Archive::BEGIN@6 href=Archive-Zip-Archive-pm-98-line.html#6 CORE::tell href=bug-md-11-t-1-line.html#CORE__tell File::Temp::cleanup href=File-Temp-pm-87-line.html#880 Carp::Heavy::BEGIN@3 href=Carp-Heavy-pm-96-line.html#3 Archive::Zip::BEGIN@203 href=Archive-Zip-pm-73-line.html#203 Spreadsheet::ParseXLSX::_xml_boolean href=ParseXLSX-pm-72-line.html#1120 Compress::Raw::Zlib::BEGIN@154 href=Compress-Raw-Zlib-pm-81-line.html#154 Test2::Util::ExternalMeta::validate_key href=Test2-Util-ExternalMeta-pm-35-line.html#65 Test2::Util::HashBase::_new href=Test2-Util-HashBase-pm-31-line.html#121 Spreadsheet::ParseExcel::Font::BEGIN@20 href=Spreadsheet-ParseExcel-Font-pm-124-line.html#20 Test2::Event::V2::init href=Test2-Event-V2-pm-64-line.html#26 XML::Twig::root href=XML-Twig-pm-129-line.html#3572 XML::Twig::Elt::__ANON__[(eval 85)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 85)[XML-Twig-pm-7113]-202-line.html#1 XML::Parser::Expat::expand_ns_prefix href=XML-Parser-Expat-pm-133-line.html#281 JSON::PP::BEGIN@688 href=JSON-PP-pm-145-line.html#688 JSON::PP::BEGIN@32 href=JSON-PP-pm-145-line.html#32 Archive::Zip::BEGIN@272 href=Archive-Zip-pm-73-line.html#272 File::Path::BEGIN@20 href=File-Path-pm-88-line.html#20 Spreadsheet::ParseExcel::BEGIN@22 href=Spreadsheet-ParseExcel-pm-118-line.html#22 JSON::PP::BEGIN@36 href=JSON-PP-pm-145-line.html#36 File::Copy::BEGIN@12 href=File-Copy-pm-100-line.html#12 URI::BEGIN@4 href=URI-pm-173-line.html#4 CORE::substcont href=bug-md-11-t-1-line.html#CORE__substcont XML::Twig::set_output_filter href=XML-Twig-pm-129-line.html#3895 OLE::Storage_Lite::PPS::File::BEGIN@714 href=OLE-Storage_Lite-pm-119-line.html#714 XML::Twig::Elt::BEGIN@1.16 href=(eval 72)[XML-Twig-pm-5871]-189-line.html#1 XML::Parser::BEGIN@15 href=XML-Parser-pm-132-line.html#15 Archive::Zip::Archive::BEGIN@10 href=Archive-Zip-Archive-pm-98-line.html#10 Graphics::ColorUtils::BEGIN@4 href=Graphics-ColorUtils-pm-117-line.html#4 Test2::Event::Fail::BEGIN@15 href=Test2-Event-Fail-pm-63-line.html#15 Test2::Util::ExternalMeta::BEGIN@2 href=Test2-Util-ExternalMeta-pm-35-line.html#2 Config::BEGIN@6 href=Config_heavy-pl-22-line.html#6 XML::Twig::_a_proper_ns_prefix href=XML-Twig-pm-129-line.html#2228 POSIX::BEGIN@2 href=POSIX-pm-10-line.html#2 XML::Parser::Expat::release href=XML-Parser-Expat-pm-133-line.html#429 Spreadsheet::ParseXLSX::Decryptor::BEGIN@3 href=Decryptor-pm-138-line.html#3 Spreadsheet::ParseExcel::Font::new href=Spreadsheet-ParseExcel-Font-pm-124-line.html#24 XML::Twig::Elt::__ANON__[(eval 128)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 128)[XML-Twig-pm-5871]-245-line.html#1 Test2::EventFacet::Error::BEGIN@10 href=Test2-EventFacet-Error-pm-46-line.html#10 Spreadsheet::ParseExcel::BEGIN@61 href=Spreadsheet-ParseExcel-pm-118-line.html#61 XML::Twig::BEGIN@1.54 href=(eval 110)[XML-Twig-pm-1750]-227-line.html#1 JSON::BEGIN@6 href=JSON-pm-142-line.html#6 File::Path::BEGIN@6 href=File-Path-pm-88-line.html#6 Spreadsheet::ParseExcel::Worksheet::BEGIN@20 href=Spreadsheet-ParseExcel-Worksheet-pm-123-line.html#20 IO::Handle::BEGIN@276 href=IO-Handle-pm-79-line.html#276 Test2::Formatter::new_root href=Test2-Formatter-pm-69-line.html#17 XML::Twig::BEGIN@1.63 href=(eval 109)[XML-Twig-pm-1750]-226-line.html#1 Test2::Event::Ok::BEGIN@9 href=Test2-Event-Ok-pm-40-line.html#9 File::Basename::BEGIN@50 href=File-Basename-pm-89-line.html#50 File::Spec::Unix::BEGIN@3 href=File-Spec-Unix-pm-86-line.html#3 Spreadsheet::ParseXLSX::BEGIN@3 href=ParseXLSX-pm-72-line.html#3 Test2::Util::BEGIN@40 href=Test2-Util-pm-9-line.html#40 XML::Parser::Expat::depth href=XML-Parser-Expat-pm-133-line.html#233 Spreadsheet::ParseExcel::BEGIN@77 href=Spreadsheet-ParseExcel-pm-118-line.html#77 Crypt::Mode::ECB::BEGIN@5 href=Crypt-Mode-ECB-pm-164-line.html#5 Test::Builder::BEGIN@103 href=Test-Builder-pm-5-line.html#103 XML::Twig::Elt::BEGIN@1.27 href=(eval 73)[XML-Twig-pm-5871]-190-line.html#1 XML::Twig::Elt::BEGIN@1.44 href=(eval 78)[XML-Twig-pm-5871]-195-line.html#1 Test2::Hub::Interceptor::BEGIN@11 href=Test2-Hub-Interceptor-pm-38-line.html#11 Carp::_univ_mod_loaded href=Carp-pm-13-line.html#119 Archive::Zip::ZipFileMember::BEGIN@4 href=Archive-Zip-ZipFileMember-pm-114-line.html#4 Test2::Hub::BEGIN@14 href=Test2-Hub-pm-34-line.html#14 Archive::Zip::BEGIN@302 href=Archive-Zip-pm-73-line.html#302 XML::Twig::Elt::__ANON__[(eval 127)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 127)[XML-Twig-pm-5871]-244-line.html#1 Archive::Zip::BEGIN@228 href=Archive-Zip-pm-73-line.html#228 OLE::Storage_Lite::BEGIN@829 href=OLE-Storage_Lite-pm-119-line.html#829 Test2::Event::Skip::BEGIN@3 href=Test2-Event-Skip-pm-59-line.html#3 Test2::EventFacet::Trace::BEGIN@9 href=Test2-EventFacet-Trace-pm-29-line.html#9 Spreadsheet::ParseXLSX::BEGIN@4 href=ParseXLSX-pm-72-line.html#4 Fcntl::O_NOINHERIT href=bug-md-11-t-1-line.html#Fcntl__O_NOINHERIT IO::Handle::BEGIN@617 href=IO-Handle-pm-79-line.html#617 Archive::Zip::StringMember::BEGIN@11 href=Archive-Zip-StringMember-pm-116-line.html#11 Test2::Event::Diag::BEGIN@2 href=Test2-Event-Diag-pm-53-line.html#2 POSIX::BEGIN@225 href=POSIX-pm-10-line.html#225 Compress::Raw::Zlib::BEGIN@8 href=Compress-Raw-Zlib-pm-81-line.html#8 XML::Twig::Elt::__ANON__[(eval 91)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 91)[XML-Twig-pm-5871]-208-line.html#1 Test2::Util::Facets2Legacy::BEGIN@10 href=Test2-Util-Facets2Legacy-pm-65-line.html#10 Encode::BEGIN@56 href=Encode-pm-103-line.html#56 utf8::unimport href=utf8-pm-131-line.html#15 File::Path::BEGIN@8 href=File-Path-pm-88-line.html#8 List::Util::BEGIN@9 href=List-Util-pm-8-line.html#9 Test2::API::test2_init_done href=Test2-API-pm-24-line.html#201 Archive::Zip::Member::desiredCompressionMethod href=Archive-Zip-Member-pm-109-line.html#213 JSON::PP::IncrParser::BEGIN@1491 href=JSON-PP-pm-145-line.html#1491 XML::Parser::Expat::setHandlers href=XML-Parser-Expat-pm-133-line.html#107 Spreadsheet::ParseExcel::BEGIN@58 href=Spreadsheet-ParseExcel-pm-118-line.html#58 Archive::Zip::BEGIN@278 href=Archive-Zip-pm-73-line.html#278 XML::Twig::Elt::set_keep_atts_order href=XML-Twig-pm-129-line.html#8394 Crypt::Cipher::BEGIN@7 href=Crypt-Cipher-pm-140-line.html#7 XML::Twig::Elt::descendants href=XML-Twig-pm-129-line.html#6830 Time::HiRes::BEGIN@70 href=Time-HiRes-pm-25-line.html#70 XML::Parser::Expat::parse href=XML-Parser-Expat-pm-133-line.html#439 XML::Twig::Notation_list::new href=XML-Twig-pm-129-line.html#4931 XML::Twig::Elt::BEGIN@1.6 href=(eval 62)[XML-Twig-pm-7113]-179-line.html#1 IO::File::BEGIN@123 href=IO-File-pm-75-line.html#123 XML::Twig::Elt::BEGIN@1.26 href=(eval 72)[XML-Twig-pm-5871]-189-line.html#1 File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:274] href=File-Temp-pm-87-line.html#274 overload::BEGIN@113 href=overload-pm-95-line.html#113 IO::Handle::BEGIN@271 href=IO-Handle-pm-79-line.html#271 XML::Parser::Expat::NamespaceStart href=XML-Parser-Expat-pm-133-line.html#312 Archive::Zip::_CAN href=Archive-Zip-pm-73-line.html#333 Compress::Raw::Zlib::BEGIN@157 href=Compress-Raw-Zlib-pm-81-line.html#157 constant::BEGIN@4 href=constant-pm-83-line.html#4 Spreadsheet::ParseExcel::FmtDefault::ValFmt href=Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html#142 Archive::Zip::BEGIN@5 href=Archive-Zip-pm-73-line.html#5 IO::File::BEGIN@120 href=IO-File-pm-75-line.html#120 Spreadsheet::ParseExcel::BEGIN@67 href=Spreadsheet-ParseExcel-pm-118-line.html#67 Spreadsheet::ParseExcel::BEGIN@59 href=Spreadsheet-ParseExcel-pm-118-line.html#59 Test::Builder::reset_outputs href=Test-Builder-pm-5-line.html#1406 Spreadsheet::ParseExcel::BEGIN@60 href=Spreadsheet-ParseExcel-pm-118-line.html#60 Test::Builder::exported_to href=Test-Builder-pm-5-line.html#664 List::Util::BEGIN@10 href=List-Util-pm-8-line.html#10 XML::Twig::_twig_start_check_roots href=XML-Twig-pm-129-line.html#4125 Test2::API::BEGIN@99 href=Test2-API-pm-24-line.html#99 Test2::Event::Exception::BEGIN@3 href=Test2-Event-Exception-pm-57-line.html#3 XML::Twig::Elt::BEGIN@6961 href=XML-Twig-pm-129-line.html#6961 Digest::SHA::BEGIN@8 href=Digest-SHA-pm-165-line.html#8 Test2::Hub::Interceptor::Terminator::BEGIN@2 href=Test2-Hub-Interceptor-Terminator-pm-39-line.html#2 JSON::PP::BEGIN@41 href=JSON-PP-pm-145-line.html#41 XML::Twig::Elt::__ANON__[(eval 66)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 66)[XML-Twig-pm-7113]-183-line.html#1 Test::Builder::BEGIN@120 href=Test-Builder-pm-5-line.html#120 Test2::API::BEGIN@85 href=Test2-API-pm-24-line.html#85 Compress::Raw::Zlib::BEGIN@114 href=Compress-Raw-Zlib-pm-81-line.html#114 Test2::API::BEGIN@51 href=Test2-API-pm-24-line.html#51 Test2::EventFacet::Info::BEGIN@9 href=Test2-EventFacet-Info-pm-47-line.html#9 Test2::API::BEGIN@179 href=Test2-API-pm-24-line.html#179 Test2::Event::Fail::BEGIN@7 href=Test2-Event-Fail-pm-63-line.html#7 Test2::Formatter::TAP::_autoflush href=Test2-Formatter-TAP-pm-68-line.html#32 Archive::Zip::BEGIN@201 href=Archive-Zip-pm-73-line.html#201 Test2::EventFacet::Meta::BEGIN@7 href=Test2-EventFacet-Meta-pm-48-line.html#7 XML::Twig::Elt::__ANON__[(eval 126)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 126)[XML-Twig-pm-5871]-243-line.html#1 Test2::Util::BEGIN@206 href=Test2-Util-pm-9-line.html#206 Test2::API::Instance::BEGIN@3 href=Test2-API-Instance-pm-28-line.html#3 XML::Twig::Elt::_gi_test href=XML-Twig-pm-129-line.html#5879 IO::File::open href=IO-File-pm-75-line.html#163 Test2::API::BEGIN@76 href=Test2-API-pm-24-line.html#76 Spreadsheet::ParseXLSX::_parse_workbook href=ParseXLSX-pm-72-line.html#130 Test::Builder::Module::BEGIN@3 href=Test-Builder-Module-pm-4-line.html#3 Archive::Zip::BEGIN@308 href=Archive-Zip-pm-73-line.html#308 URI::BEGIN@43 href=URI-pm-173-line.html#43 Test::Builder::BEGIN@1557 href=Test-Builder-pm-5-line.html#1557 Test2::Formatter::TAP::plan_tap href=Test2-Formatter-TAP-pm-68-line.html#223 Fcntl::O_EXLOCK href=bug-md-11-t-1-line.html#Fcntl__O_EXLOCK Test2::API::Instance::BEGIN@16 href=Test2-API-Instance-pm-28-line.html#16 Archive::Zip::BEGIN@222 href=Archive-Zip-pm-73-line.html#222 warnings::import href=warnings-pm-2-line.html#383 JSON::PP::IncrParser::BEGIN@1493 href=JSON-PP-pm-145-line.html#1493 XML::Twig::set_remove_cdata href=XML-Twig-pm-129-line.html#3892 FileHandle::BEGIN@4 href=FileHandle-pm-97-line.html#4 JSON::PP::IncrParser::BEGIN@1492 href=JSON-PP-pm-145-line.html#1492 Test2::API::Instance::add_post_load_callback href=Test2-API-Instance-pm-28-line.html#281 Crypt::RC4::BEGIN@15 href=Crypt-RC4-pm-120-line.html#15 Encode::Alias::BEGIN@7 href=Encode-Alias-pm-104-line.html#7 Spreadsheet::ParseExcel::BEGIN@35 href=Spreadsheet-ParseExcel-pm-118-line.html#35 XML::Twig::_set_regexp_handler href=XML-Twig-pm-129-line.html#1603 IO::Handle::BEGIN@272 href=IO-Handle-pm-79-line.html#272 Test2::Event::Waiting::BEGIN@3 href=Test2-Event-Waiting-pm-58-line.html#3 Archive::Zip::Member::isEncrypted href=Archive-Zip-Member-pm-109-line.html#506 Test::More::BEGIN@4 href=Test-More-pm-3-line.html#4 Test2::EventFacet::Parent::BEGIN@9 href=Test2-EventFacet-Parent-pm-50-line.html#9 main::BEGIN@7 href=bug-md-11-t-1-line.html#7 Test2::Hub::cull href=Test2-Hub-pm-34-line.html#398 XML::Parser::parse href=XML-Parser-pm-132-line.html#161 Test2::Hub::send href=Test2-Hub-pm-34-line.html#276 File::Path::BEGIN@4 href=File-Path-pm-88-line.html#4 Compress::Raw::Zlib::BEGIN@10 href=Compress-Raw-Zlib-pm-81-line.html#10 Test2::API::Context::BEGIN@12 href=Test2-API-Context-pm-61-line.html#12 Test2::EventFacet::Trace::BEGIN@2 href=Test2-EventFacet-Trace-pm-29-line.html#2 XML::Parser::Expat::SetDoctypeHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetDoctypeHandler File::Copy::__ANON__ href=File-Copy-pm-100-line.html#File__Copy____ANON__ Archive::Zip::FileMember::BEGIN@11 href=Archive-Zip-FileMember-pm-112-line.html#11 Archive::Zip::BEGIN@206 href=Archive-Zip-pm-73-line.html#206 XML::Twig::Elt::BEGIN@1.49 href=(eval 77)[XML-Twig-pm-5871]-194-line.html#1 XML::Twig::descendants href=XML-Twig-pm-129-line.html#3757 Spreadsheet::ParseXLSX::_cell_to_row_col href=ParseXLSX-pm-72-line.html#1102 File::Find::BEGIN@3 href=File-Find-pm-99-line.html#3 Test2::Formatter::TAP::OUT_ERR href=Test2-Formatter-TAP-pm-68-line.html#Test2__Formatter__TAP__OUT_ERR Test2::Event::Subtest::BEGIN@7 href=Test2-Event-Subtest-pm-60-line.html#7 Encode::BEGIN@15 href=Encode-pm-103-line.html#15 Carp::BEGIN@1 href=(eval 4)[Carp-pm-171]-17-line.html#1 URI::BEGIN@3 href=URI-pm-173-line.html#3 Test2::EventFacet::Control::BEGIN@7 href=Test2-EventFacet-Control-pm-45-line.html#7 Test2::Formatter::import href=Test2-Formatter-pm-69-line.html#9 Archive::Zip::Member::readIsDone href=Archive-Zip-Member-pm-109-line.html#1262 XML::Twig::BEGIN@1.66 href=(eval 112)[XML-Twig-pm-1750]-229-line.html#1 XML::Twig::BEGIN@29 href=XML-Twig-pm-129-line.html#29 File::Spec::Unix::BEGIN@124 href=File-Spec-Unix-pm-86-line.html#124 Spreadsheet::ParseExcel::BEGIN@63 href=Spreadsheet-ParseExcel-pm-118-line.html#63 IO::Handle::BEGIN@273 href=IO-Handle-pm-79-line.html#273 File::Copy::BEGIN@1 href=(eval 12)[File-Copy-pm-19]-102-line.html#1 JSON::PP::IncrParser::BEGIN@1547 href=JSON-PP-pm-145-line.html#1547 Encode::__ANON__ href=Encode-pm-103-line.html#Encode____ANON__ XML::Twig::Elt::__ANON__[(eval 90)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 90)[XML-Twig-pm-5871]-207-line.html#1 Spreadsheet::ParseXLSX::BEGIN@18 href=ParseXLSX-pm-72-line.html#18 Archive::Zip::FileMember::endRead href=Archive-Zip-FileMember-pm-112-line.html#49 Test2::Util::Trace::BEGIN@4 href=Test2-Util-Trace-pm-36-line.html#4 Spreadsheet::ParseExcel::BEGIN@75 href=Spreadsheet-ParseExcel-pm-118-line.html#75 XML::Twig::Elt::set_quote href=XML-Twig-pm-129-line.html#8282 Cwd::BEGIN@2 href=Cwd-pm-74-line.html#2 Test2::Event::Pass::BEGIN@3 href=Test2-Event-Pass-pm-62-line.html#3 Test2::Formatter::TAP::BEGIN@17 href=Test2-Formatter-TAP-pm-68-line.html#17 XML::Twig::BEGIN@1.57 href=(eval 106)[XML-Twig-pm-1750]-223-line.html#1 Archive::Zip::BEGIN@306 href=Archive-Zip-pm-73-line.html#306 Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246] href=ParseXLSX-pm-72-line.html#235 Archive::Zip::Archive::BEGIN@9 href=Archive-Zip-Archive-pm-98-line.html#9 Digest::base::BEGIN@3 href=Digest-base-pm-166-line.html#3 File::Copy::BEGIN@12.1 href=File-Copy-pm-100-line.html#12 Test2::Event::Bail::BEGIN@8 href=Test2-Event-Bail-pm-56-line.html#8 File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:244] href=File-Temp-pm-87-line.html#244 IO::BEGIN@8 href=IO-pm-80-line.html#8 File::Temp::Dir::BEGIN@2601 href=File-Temp-pm-87-line.html#2601 IO::File::BEGIN@124 href=IO-File-pm-75-line.html#124 main::BEGIN@5 href=bug-md-11-t-1-line.html#5 List::Util::BEGIN@35 href=List-Util-pm-8-line.html#35 Digest::SHA::BEGIN@7 href=Digest-SHA-pm-165-line.html#7 Config::fetch_string href=Config_heavy-pl-22-line.html#1456 JSON::Backend::PP::BEGIN@342 href=JSON-pm-142-line.html#342 Test2::API::Instance::BEGIN@53 href=Test2-API-Instance-pm-28-line.html#53 UNIVERSAL::VERSION href=UNIVERSAL-pm-130-line.html#UNIVERSAL__VERSION XML::Twig::Elt::__ANON__[(eval 73)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 73)[XML-Twig-pm-5871]-190-line.html#1 Test2::API::Stack::new href=Test2-API-Stack-pm-33-line.html#12 Test2::Event::Plan::BEGIN@8 href=Test2-Event-Plan-pm-55-line.html#8 Archive::Zip::BEGIN@8 href=Archive-Zip-pm-73-line.html#8 JSON::PP::BEGIN@48 href=JSON-PP-pm-145-line.html#48 JSON::BEGIN@2 href=(eval 17)[JSON-pm-274]-143-line.html#2 XML::Twig::BEGIN@1 href=(eval 14)[XML-Twig-pm-159]-134-line.html#1 Test2::API::Stack::BEGIN@10 href=Test2-API-Stack-pm-33-line.html#10 Time::Local::BEGIN@10 href=Time-Local-pm-110-line.html#10 Test2::EventFacet::Amnesty::BEGIN@3 href=Test2-EventFacet-Amnesty-pm-43-line.html#3 Test2::Event::Bail::BEGIN@3 href=Test2-Event-Bail-pm-56-line.html#3 XML::Parser::Expat::SetExternalEntityRefHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetExternalEntityRefHandler Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 href=Decryptor-pm-138-line.html#11 Spreadsheet::ParseExcel::BEGIN@68 href=Spreadsheet-ParseExcel-pm-118-line.html#68 Archive::Zip::BEGIN@208 href=Archive-Zip-pm-73-line.html#208 Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 href=Decryptor-pm-138-line.html#10 XML::Twig::_ns_info href=XML-Twig-pm-129-line.html#2215 Archive::Zip::Member::compressedSize href=Archive-Zip-Member-pm-109-line.html#498 File::Find::BEGIN@4 href=File-Find-pm-99-line.html#4 Archive::Zip::Member::unixFileAttributes href=Archive-Zip-Member-pm-109-line.html#391 Archive::Zip::BEGIN@10 href=Archive-Zip-pm-73-line.html#10 Test2::API::BEGIN@71 href=Test2-API-pm-24-line.html#71 JSON::__load_xs href=JSON-pm-142-line.html#268 XML::Twig::Elt::cmp href=XML-Twig-pm-129-line.html#9717 Spreadsheet::ParseExcel::BEGIN@81 href=Spreadsheet-ParseExcel-pm-118-line.html#81 Spreadsheet::ParseXLSX::BEGIN@13 href=ParseXLSX-pm-72-line.html#13 Spreadsheet::ParseExcel::Cell::BEGIN@19 href=Spreadsheet-ParseExcel-Cell-pm-126-line.html#19 Test2::Util::BEGIN@11 href=Test2-Util-pm-9-line.html#11 Carp::BEGIN@3 href=Carp-pm-13-line.html#3 File::Temp::BEGIN@167 href=File-Temp-pm-87-line.html#167 Archive::Zip::BEGIN@301 href=Archive-Zip-pm-73-line.html#301 File::Path::BEGIN@3 href=File-Path-pm-88-line.html#3 Test2::EventFacet::Amnesty::BEGIN@10 href=Test2-EventFacet-Amnesty-pm-43-line.html#10 CORE::read href=bug-md-11-t-1-line.html#CORE__read Test2::Event::V2::BEGIN@10 href=Test2-Event-V2-pm-64-line.html#10 Spreadsheet::ParseExcel::BEGIN@23 href=Spreadsheet-ParseExcel-pm-118-line.html#23 XML::Twig::Elt::__ANON__[(eval 80)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 80)[XML-Twig-pm-5871]-197-line.html#1 Test2::Event::Diag::BEGIN@9 href=Test2-Event-Diag-pm-53-line.html#9 Config::launcher href=Config_heavy-pl-22-line.html#1522 Test::More::BEGIN@3 href=Test-More-pm-3-line.html#3 XML::Twig::Elt::BEGIN@1.28 href=(eval 75)[XML-Twig-pm-5871]-192-line.html#1 Test2::Event::Note::BEGIN@3 href=Test2-Event-Note-pm-54-line.html#3 URI::BEGIN@41 href=URI-pm-173-line.html#41 JSON::PP::IncrParser::BEGIN@1494 href=JSON-PP-pm-145-line.html#1494 Spreadsheet::ParseExcel::BEGIN@24 href=Spreadsheet-ParseExcel-pm-118-line.html#24 Test2::EventFacet::Meta::BEGIN@3 href=Test2-EventFacet-Meta-pm-48-line.html#3 FileHandle::BEGIN@3 href=FileHandle-pm-97-line.html#3 utf8::encode href=utf8-pm-131-line.html#utf8__encode Spreadsheet::ParseXLSX::_color href=ParseXLSX-pm-72-line.html#1126 Test2::Event::Waiting::BEGIN@2 href=Test2-Event-Waiting-pm-58-line.html#2 JSON::BEGIN@4 href=JSON-pm-142-line.html#4 CryptX::BEGIN@4 href=CryptX-pm-141-line.html#4 Archive::Zip::DirectoryMember::BEGIN@8 href=Archive-Zip-DirectoryMember-pm-113-line.html#8 OLE::Storage_Lite::PPS::Root::BEGIN@172 href=OLE-Storage_Lite-pm-119-line.html#172 Spreadsheet::ParseExcel::Utility::BEGIN@20 href=Spreadsheet-ParseExcel-Utility-pm-128-line.html#20 Test2::EventFacet::BEGIN@8 href=Test2-EventFacet-pm-30-line.html#8 JSON::PP::BEGIN@49 href=JSON-PP-pm-145-line.html#49 Test2::API::Instance::BEGIN@2 href=Test2-API-Instance-pm-28-line.html#2 Compress::Raw::Zlib::BEGIN@6 href=Compress-Raw-Zlib-pm-81-line.html#6 Test::More::import_extra href=Test-More-pm-3-line.html#176 XML::Twig::set_do_not_escape_amp_in_atts href=XML-Twig-pm-129-line.html#3934 Archive::Zip::NewFileMember::BEGIN@4 href=Archive-Zip-NewFileMember-pm-115-line.html#4 File::Copy::BEGIN@19 href=File-Copy-pm-100-line.html#19 Test2::API::Instance::reset href=Test2-API-Instance-pm-28-line.html#122 XML::Twig::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:265] href=XML-Twig-pm-129-line.html#265 Carp::BEGIN@296 href=Carp-pm-13-line.html#296 Archive::Zip::BEGIN@37 href=Archive-Zip-pm-73-line.html#37 Test2::Formatter::TAP::BEGIN@2 href=Test2-Formatter-TAP-pm-68-line.html#2 Spreadsheet::ParseExcel::BEGIN@76 href=Spreadsheet-ParseExcel-pm-118-line.html#76 Spreadsheet::ParseExcel::Workbook::BEGIN@189 href=Spreadsheet-ParseExcel-Workbook-pm-122-line.html#189 overloading::unimport href=overloading-pm-16-line.html#37 File::Temp::BEGIN@151 href=File-Temp-pm-87-line.html#151 Compress::Raw::Zlib::inflateStream::DESTROY href=Compress-Raw-Zlib-pm-81-line.html#Compress__Raw__Zlib__inflateStream__DESTROY XML::Twig::BEGIN@3229 href=XML-Twig-pm-129-line.html#3229 Test2::API::_contexts_ref href=Test2-API-pm-24-line.html#318 Test::Builder::BEGIN@1232 href=Test-Builder-pm-5-line.html#1232 Time::Local::BEGIN@36 href=Time-Local-pm-110-line.html#36 Spreadsheet::ParseXLSX::Cell::BEGIN@11 href=Cell-pm-170-line.html#11 Spreadsheet::ParseXLSX::Decryptor::BEGIN@16 href=Decryptor-pm-138-line.html#16 Storable::BEGIN@44 href=Storable-pm-106-line.html#44 Spreadsheet::ParseXLSX::BEGIN@11.2 href=XML-Twig-pm-129-line.html#11 Archive::Zip::BEGIN@273 href=Archive-Zip-pm-73-line.html#273 Test::Builder::BEGIN@34 href=Test-Builder-pm-5-line.html#34 Spreadsheet::ParseExcel::BEGIN@36 href=Spreadsheet-ParseExcel-pm-118-line.html#36 XML::Parser::Expat::BEGIN@3 href=XML-Parser-Expat-pm-133-line.html#3 Archive::Zip::BEGIN@230 href=Archive-Zip-pm-73-line.html#230 CORE::seek href=bug-md-11-t-1-line.html#CORE__seek XML::Parser::Expat::new href=XML-Parser-Expat-pm-133-line.html#52 Archive::Zip::BEGIN@202 href=Archive-Zip-pm-73-line.html#202 Test2::Formatter::TAP::write href=Test2-Formatter-TAP-pm-68-line.html#92 XML::Twig::Elt::__ANON__[(eval 76)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 76)[XML-Twig-pm-7113]-193-line.html#1 File::Spec::Unix::BEGIN@231 href=File-Spec-Unix-pm-86-line.html#231 Digest::SHA::BEGIN@202 href=Digest-SHA-pm-165-line.html#202 JSON::PP::BEGIN@26 href=JSON-PP-pm-145-line.html#26 Test2::Util::Facets2Legacy::BEGIN@8 href=Test2-Util-Facets2Legacy-pm-65-line.html#8 Archive::Zip::Archive::read href=Archive-Zip-Archive-pm-98-line.html#722 Test::Builder::expected_tests href=Test-Builder-pm-5-line.html#538 Archive::Zip::Member::BEGIN@5 href=Archive-Zip-Member-pm-109-line.html#5 JSON::PP::BEGIN@34 href=JSON-PP-pm-145-line.html#34 JSON::PP::BEGIN@1285 href=JSON-PP-pm-145-line.html#1285 Archive::Zip::BEGIN@265 href=Archive-Zip-pm-73-line.html#265 Test2::Event::Waiting::BEGIN@8 href=Test2-Event-Waiting-pm-58-line.html#8 XML::Twig::BEGIN@1.62 href=(eval 108)[XML-Twig-pm-1750]-225-line.html#1 XML::Twig::set_output_text_filter href=XML-Twig-pm-129-line.html#3898 Exporter::export_ok_tags href=Exporter-pm-7-line.html#85 Test2::Event::Fail::BEGIN@9 href=Test2-Event-Fail-pm-63-line.html#9 IO::Seekable::BEGIN@103 href=IO-Seekable-pm-78-line.html#103 Archive::Zip::_binmode href=Archive-Zip-pm-73-line.html#430 version::(bool href=bug-md-11-t-1-line.html#version___bool overload::import href=overload-pm-95-line.html#56 Archive::Zip::ZipFileMember::rewindData href=Archive-Zip-ZipFileMember-pm-114-line.html#437 Archive::Zip::Member::BEGIN@35 href=Archive-Zip-Member-pm-109-line.html#35 XML::Twig::_add_handler href=XML-Twig-pm-129-line.html#1549 File::Spec::Unix::curdir href=File-Spec-Unix-pm-86-line.html#114 XML::Parser::Expat::SetCommentHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetCommentHandler Test2::EventFacet::Info::BEGIN@10 href=Test2-EventFacet-Info-pm-47-line.html#10 Spreadsheet::ParseExcel::__ANON__ href=Spreadsheet-ParseExcel-pm-118-line.html#Spreadsheet__ParseExcel____ANON__ Spreadsheet::ParseExcel::FmtDefault::TextFmt href=Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html#79 XML::Twig::Elt::__ANON__[(eval 68)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 68)[XML-Twig-pm-7113]-185-line.html#1 File::Temp::BEGIN@149 href=File-Temp-pm-87-line.html#149 XML::Twig::get_xpath href=XML-Twig-pm-129-line.html#3685 Test2::Hub::BEGIN@8 href=Test2-Hub-pm-34-line.html#8 Archive::Zip::BEGIN@235 href=Archive-Zip-pm-73-line.html#235 Test2::Event::V2::BEGIN@7 href=Test2-Event-V2-pm-64-line.html#7 Test2::API::Context::init href=Test2-API-Context-pm-61-line.html#36 XML::Twig::_handler href=XML-Twig-pm-129-line.html#2398 Archive::Zip::Member::_newFromZipFile href=Archive-Zip-Member-pm-109-line.html#45 XML::Twig::Elt::BEGIN@1.45 href=(eval 101)[XML-Twig-pm-5871]-218-line.html#1 XML::Twig::BEGIN@1.61 href=(eval 107)[XML-Twig-pm-1750]-224-line.html#1 Test2::Util::BEGIN@80 href=Test2-Util-pm-9-line.html#80 JSON::PP::BEGIN@1471 href=JSON-PP-pm-145-line.html#1471 CORE::close href=bug-md-11-t-1-line.html#CORE__close File::Temp::BEGIN@223 href=File-Temp-pm-87-line.html#223 File::Find::BEGIN@13 href=File-Find-pm-99-line.html#13 XML::Twig::_parse_xpath_handler href=XML-Twig-pm-129-line.html#1625 Test2::Event::Fail::BEGIN@3 href=Test2-Event-Fail-pm-63-line.html#3 Test2::API::Stack::BEGIN@3 href=Test2-API-Stack-pm-33-line.html#3 XML::Twig::BEGIN@31 href=XML-Twig-pm-129-line.html#31 XML::Twig::Elt::BEGIN@1.10 href=(eval 66)[XML-Twig-pm-7113]-183-line.html#1 Spreadsheet::ParseXLSX::_rels_for href=ParseXLSX-pm-72-line.html#1048 Archive::Zip::Member::BEGIN@34 href=Archive-Zip-Member-pm-109-line.html#34 XML::Twig::Elt::__ANON__[(eval 103)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 103)[XML-Twig-pm-7113]-220-line.html#1 Spreadsheet::ParseXLSX::_base_path_for href=ParseXLSX-pm-72-line.html#1061 constant::BEGIN@40 href=constant-pm-83-line.html#40 XML::Twig::Elt::BEGIN@1.14 href=(eval 70)[XML-Twig-pm-7113]-187-line.html#1 integer::unimport href=integer-pm-111-line.html#89 Crypt::Mode::ECB::BEGIN@6 href=Crypt-Mode-ECB-pm-164-line.html#6 XML::Parser::Expat::ParserFree href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__ParserFree overload::BEGIN@3 href=overload-pm-95-line.html#3 JSON::PP::BEGIN@11 href=JSON-PP-pm-145-line.html#11 Test::Builder::Formatter::BEGIN@7 href=Test-Builder-Formatter-pm-67-line.html#7 Test2::API::BEGIN@92 href=Test2-API-pm-24-line.html#92 XML::Twig::Elt::BEGIN@1.5 href=(eval 61)[XML-Twig-pm-7113]-178-line.html#1 Archive::Zip::BEGIN@221 href=Archive-Zip-pm-73-line.html#221 XML::Parser::Expat::ParseString href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__ParseString XML::Twig::Elt::__ANON__[(eval 70)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 70)[XML-Twig-pm-7113]-187-line.html#1 Symbol::BEGIN@156 href=Symbol-pm-76-line.html#156 Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:85] href=Test2-Util-HashBase-pm-31-line.html#85 Archive::Zip::BEGIN@260 href=Archive-Zip-pm-73-line.html#260 XML::Twig::_unique_elts href=XML-Twig-pm-129-line.html#3696 Compress::Raw::Zlib::BEGIN@144 href=Compress-Raw-Zlib-pm-81-line.html#144 File::Temp::BEGIN@152 href=File-Temp-pm-87-line.html#152 JSON::PP::BEGIN@30 href=JSON-PP-pm-145-line.html#30 warnings::_expand_bits href=warnings-pm-2-line.html#327 Scalar::Util::BEGIN@9 href=Scalar-Util-pm-6-line.html#9 Archive::Zip::Member::BEGIN@27 href=Archive-Zip-Member-pm-109-line.html#27 Test2::API::Context::BEGIN@2 href=Test2-API-Context-pm-61-line.html#2 Test2::API::Instance::_finalize href=Test2-API-Instance-pm-28-line.html#159 XML::Twig::Elt::gi href=XML-Twig-pm-129-line.html#5313 Spreadsheet::ParseXLSX::parse href=ParseXLSX-pm-72-line.html#71 Archive::Zip::BEGIN@268 href=Archive-Zip-pm-73-line.html#268 Compress::Raw::Zlib::BEGIN@128 href=Compress-Raw-Zlib-pm-81-line.html#128 Carp::BEGIN@73 href=Carp-pm-13-line.html#73 Test2::EventFacet::Meta::BEGIN@8 href=Test2-EventFacet-Meta-pm-48-line.html#8 Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3 href=Standard-pm-168-line.html#3 Encode::Alias::BEGIN@3 href=Encode-Alias-pm-104-line.html#3 IO::BEGIN@6 href=IO-pm-80-line.html#6 Test2::EventFacet::Meta::BEGIN@30 href=Test2-EventFacet-Meta-pm-48-line.html#30 Archive::Zip::BEGIN@289 href=Archive-Zip-pm-73-line.html#289 Test::Builder::TodoDiag::BEGIN@2 href=Test-Builder-TodoDiag-pm-70-line.html#2 Test2::Hub::Interceptor::BEGIN@10 href=Test2-Hub-Interceptor-pm-38-line.html#10 Test2::API::release href=Test2-API-pm-24-line.html#569 strict::import href=strict-pm-249-line.html#60 Compress::Raw::Zlib::BEGIN@158 href=Compress-Raw-Zlib-pm-81-line.html#158 Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156] href=Test-Builder-pm-5-line.html#156 XML::Twig::Elt::BEGIN@1.22 href=(eval 78)[XML-Twig-pm-5871]-195-line.html#1 Spreadsheet::ParseExcel::Cell::BEGIN@20 href=Spreadsheet-ParseExcel-Cell-pm-126-line.html#20 Test2::Event::Note::BEGIN@9 href=Test2-Event-Note-pm-54-line.html#9 XML::Twig::Elt::__ANON__[(eval 64)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 64)[XML-Twig-pm-7113]-181-line.html#1 Compress::Raw::Zlib::ParseParameters href=Compress-Raw-Zlib-pm-81-line.html#163 Crypt::Mode::ECB::BEGIN@9 href=Crypt-Mode-ECB-pm-164-line.html#9 Test2::Hub::is_passing href=Test2-Hub-pm-34-line.html#466 OLE::Storage_Lite::PPS::Root::BEGIN@168 href=OLE-Storage_Lite-pm-119-line.html#168 XML::Twig::Elt::ancestors href=XML-Twig-pm-129-line.html#6337 XML::Twig::Elt::BEGIN@1.29 href=(eval 85)[XML-Twig-pm-7113]-202-line.html#1 Compress::Raw::Zlib::_inflateInit href=Compress-Raw-Zlib-pm-81-line.html#Compress__Raw__Zlib___inflateInit base::import href=base-pm-66-line.html#80 Spreadsheet::ParseXLSX::_parse_shared_strings href=ParseXLSX-pm-72-line.html#638 Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313] href=ParseXLSX-pm-72-line.html#304 Archive::Zip::Member::BEGIN@6 href=Archive-Zip-Member-pm-109-line.html#6 XML::Twig::_add_or_discard_stored_spaces href=XML-Twig-pm-129-line.html#2015 Spreadsheet::ParseXLSX::_parse_styles href=ParseXLSX-pm-72-line.html#682 Spreadsheet::ParseXLSX::BEGIN@17 href=ParseXLSX-pm-72-line.html#17 XML::Twig::_set_special_handler href=XML-Twig-pm-129-line.html#1529 Compress::Raw::Zlib::Parameters::_checkType href=Compress-Raw-Zlib-pm-81-line.html#296 Compress::Raw::Zlib::BEGIN@121 href=Compress-Raw-Zlib-pm-81-line.html#121 Errno::_tie_it href=Errno-pm-91-line.html#227 JSON::BEGIN@11 href=JSON-pm-142-line.html#11 JSON::PP::BEGIN@68 href=JSON-PP-pm-145-line.html#68 Test::Builder::BEGIN@62 href=Test-Builder-pm-5-line.html#62 Archive::Zip::Member::BEGIN@29 href=Archive-Zip-Member-pm-109-line.html#29 XML::Twig::Elt::_op href=XML-Twig-pm-129-line.html#5965 Test2::Hub::Subtest::BEGIN@7 href=Test2-Hub-Subtest-pm-37-line.html#7 Test2::Util::BEGIN@7 href=Test2-Util-pm-9-line.html#7 Test::More::BEGIN@1408 href=Test-More-pm-3-line.html#1408 XML::Twig::BEGIN@1.55 href=(eval 111)[XML-Twig-pm-1750]-228-line.html#1 Archive::Zip::BEGIN@204 href=Archive-Zip-pm-73-line.html#204 Test2::API::BEGIN@5 href=Test2-API-pm-24-line.html#5 XML::Twig::_set_level_handler href=XML-Twig-pm-129-line.html#1588 CORE::symlink href=bug-md-11-t-1-line.html#CORE__symlink Test2::API::Instance::add_context_acquire_callback href=Test2-API-Instance-pm-28-line.html#245 XML::Twig::Elt::__ANON__[(eval 104)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 75)[XML-Twig-pm-5871]-192-line.html#1 XML::Twig::BEGIN@1.69 href=(eval 115)[XML-Twig-pm-1750]-232-line.html#1 Archive::Zip::BEGIN@247 href=Archive-Zip-pm-73-line.html#247 version::(cmp href=bug-md-11-t-1-line.html#version___cmp Test::Builder::reset href=Test-Builder-pm-5-line.html#431 Test2::API::test2_stdout href=Test2-API-pm-24-line.html#188 XML::Twig::Elt::BEGIN@1.12 href=(eval 68)[XML-Twig-pm-7113]-185-line.html#1 Test2::Util::ExternalMeta::meta href=Test2-Util-ExternalMeta-pm-35-line.html#45 Encode::Encoding::__ANON__ href=Encode-Encoding-pm-107-line.html#Encode__Encoding____ANON__ Test2::Event::meta_facet_data href=Test2-Event-pm-41-line.html#155 Test2::EventFacet::Info::BEGIN@2 href=Test2-EventFacet-Info-pm-47-line.html#2 Test::Builder::done_testing href=Test-Builder-pm-5-line.html#581 XML::Twig::Notation::BEGIN@5023 href=XML-Twig-pm-129-line.html#5023 warnings::_bits href=warnings-pm-2-line.html#346 Archive::Zip::BEGIN@199 href=Archive-Zip-pm-73-line.html#199 Crypt::Cipher::BEGIN@3 href=Crypt-Cipher-pm-140-line.html#3 Archive::Zip::BEGIN@189 href=Archive-Zip-pm-73-line.html#189 Encode::Encoding::BEGIN@10 href=Encode-Encoding-pm-107-line.html#10 Carp::BEGIN@137 href=Carp-pm-13-line.html#137 Exporter::export_to_level href=Exporter-pm-7-line.html#77 Test2::Event::V2::BEGIN@8 href=Test2-Event-V2-pm-64-line.html#8 IO::BEGIN@7 href=IO-pm-80-line.html#7 Digest::Perl::MD5::BEGIN@2 href=Digest-Perl-MD5-pm-121-line.html#2 Archive::Zip::BEGIN@23 href=Archive-Zip-pm-73-line.html#23 Archive::Zip::BEGIN@238 href=Archive-Zip-pm-73-line.html#238 Test2::Event::Plan::facet_data href=Test2-Event-Plan-pm-55-line.html#71 Test2::Hub::Subtest::BEGIN@47 href=Test2-Hub-Subtest-pm-37-line.html#47 Encode::Alias::define_alias href=Encode-Alias-pm-104-line.html#78 constant::BEGIN@90 href=constant-pm-83-line.html#90 Test2::Formatter::TAP::summary_tap href=Test2-Formatter-TAP-pm-68-line.html#412 Spreadsheet::ParseXLSX::new href=ParseXLSX-pm-72-line.html#52 XML::Twig::purge href=XML-Twig-pm-129-line.html#3528 XML::Twig::_replace_prefix href=XML-Twig-pm-129-line.html#2424 Test2::API::Stack::all href=Test2-API-Stack-pm-33-line.html#61 Test2::EventFacet::BEGIN@2 href=Test2-EventFacet-pm-30-line.html#2 Compress::Raw::Zlib::BEGIN@9 href=Compress-Raw-Zlib-pm-81-line.html#9 File::Path::BEGIN@29 href=File-Path-pm-88-line.html#29 Spreadsheet::ParseXLSX::_parse_sheet href=ParseXLSX-pm-72-line.html#211 File::Temp::__ANON__ href=File-Temp-pm-87-line.html#File__Temp____ANON__ XML::Twig::BEGIN@27 href=XML-Twig-pm-129-line.html#27 File::Copy::BEGIN@16 href=File-Copy-pm-100-line.html#16 Exporter::Heavy::_push_tags href=Exporter-Heavy-pm-27-line.html#224 Encode::BEGIN@5 href=Encode-pm-103-line.html#5 Archive::Zip::BEGIN@16 href=Archive-Zip-pm-73-line.html#16 Test2::Event::BEGIN@15 href=Test2-Event-pm-41-line.html#15 Archive::Zip::Archive::BEGIN@5 href=Archive-Zip-Archive-pm-98-line.html#5 IO::Seekable::seek href=IO-Seekable-pm-78-line.html#111 Carp::BEGIN@730 href=Carp-pm-13-line.html#730 JSON::PP::IncrParser::BEGIN@1488 href=JSON-PP-pm-145-line.html#1488 Test2::API::test2_ipc href=Test2-API-pm-24-line.html#282 XML::Twig::BEGIN@1327 href=XML-Twig-pm-129-line.html#1327 File::Temp::BEGIN@146 href=File-Temp-pm-87-line.html#146 IO::Seekable::BEGIN@97 href=IO-Seekable-pm-78-line.html#97 Test::Builder::BEGIN@133 href=Test-Builder-pm-5-line.html#133 XML::Twig::Elt::BEGIN@1.8 href=(eval 64)[XML-Twig-pm-7113]-181-line.html#1 File::Temp::BEGIN@270 href=File-Temp-pm-87-line.html#270 XML::Twig::set_quote href=XML-Twig-pm-129-line.html#3922 Test2::Util::_can_thread href=Test2-Util-pm-9-line.html#46 Test2::Event::Ok::BEGIN@2 href=Test2-Event-Ok-pm-40-line.html#2 Time::HiRes::BEGIN@7 href=Time-HiRes-pm-25-line.html#7 Spreadsheet::ParseExcel::FmtDefault::BEGIN@19 href=Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html#19 XML::Twig::BEGIN@4211 href=XML-Twig-pm-129-line.html#4211 MIME::Base64::BEGIN@4 href=MIME-Base64-pm-167-line.html#4 XML::Twig::_set_fh_to_twig_output_fh href=XML-Twig-pm-129-line.html#4390 Carp::BEGIN@61 href=Carp-pm-13-line.html#61 Spreadsheet::ParseExcel::FmtDefault::BEGIN@20 href=Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html#20 Test2::Util::HashBase::BEGIN@37 href=Test2-Util-HashBase-pm-31-line.html#37 XML::Twig::Elt::__ANON__[(eval 96)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 96)[XML-Twig-pm-5871]-213-line.html#1 CORE::pack href=bug-md-11-t-1-line.html#CORE__pack Test::Builder::BEGIN@693 href=Test-Builder-pm-5-line.html#693 CryptX::BEGIN@13 href=CryptX-pm-141-line.html#13 JSON::PP::BEGIN@515 href=JSON-PP-pm-145-line.html#515 Compress::Raw::Zlib::Parameters::value href=Compress-Raw-Zlib-pm-81-line.html#371 Archive::Zip::BEGIN@205 href=Archive-Zip-pm-73-line.html#205 Test2::EventFacet::Assert::BEGIN@3 href=Test2-EventFacet-Assert-pm-44-line.html#3 OLE::Storage_Lite::BEGIN@834 href=OLE-Storage_Lite-pm-119-line.html#834 XML::Twig::BEGIN@1.50 href=(eval 106)[XML-Twig-pm-1750]-223-line.html#1 XML::Twig::Elt::BEGIN@1.72 href=(eval 128)[XML-Twig-pm-5871]-245-line.html#1 Graphics::ColorUtils::BEGIN@492 href=Graphics-ColorUtils-pm-117-line.html#492 Encode::Config::BEGIN@8 href=Encode-Config-pm-108-line.html#8 Test2::Util::__ANON__ href=Test2-Util-pm-9-line.html#Test2__Util____ANON__ Archive::Zip::FileMember::_openFile href=Archive-Zip-FileMember-pm-112-line.html#36 Fcntl::O_BINARY href=Fcntl-pm-11-line.html#Fcntl__O_BINARY XML::Twig::Elt::__ANON__[(eval 71)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 71)[XML-Twig-pm-5871]-188-line.html#1 Archive::Zip::_newFileHandle href=Archive-Zip-pm-73-line.html#476 URI::BEGIN@180 href=URI-pm-173-line.html#180 Archive::Zip::ZipFileMember::BEGIN@6 href=Archive-Zip-ZipFileMember-pm-114-line.html#6 Archive::Zip::BEGIN@197 href=Archive-Zip-pm-73-line.html#197 Archive::Zip::StringMember::BEGIN@4 href=Archive-Zip-StringMember-pm-116-line.html#4 Test2::Hub::Subtest::BEGIN@9 href=Test2-Hub-Subtest-pm-37-line.html#9 XML::Twig::Elt::att href=XML-Twig-pm-129-line.html#6169 XML::Twig::parse href=XML-Twig-pm-129-line.html#757 JSON::PP::BEGIN@15 href=JSON-PP-pm-145-line.html#15 Spreadsheet::ParseXLSX::BEGIN@5 href=ParseXLSX-pm-72-line.html#5 Time::Local::BEGIN@6 href=Time-Local-pm-110-line.html#6 Archive::Zip::BEGIN@262 href=Archive-Zip-pm-73-line.html#262 Test2::Hub::Interceptor::BEGIN@3 href=Test2-Hub-Interceptor-pm-38-line.html#3 Test2::Event::BEGIN@11 href=Test2-Event-pm-41-line.html#11 File::Glob::BEGIN@50 href=File-Glob-pm-136-line.html#50 JSON::PP::BEGIN@493 href=JSON-PP-pm-145-line.html#493 XML::Twig::Entity_list::new href=XML-Twig-pm-129-line.html#4763 Test2::Event::BEGIN@2 href=Test2-Event-pm-41-line.html#2 Test2::Event::Fail::BEGIN@2 href=Test2-Event-Fail-pm-63-line.html#2 XML::Twig::Elt::__ANON__[(eval 86)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 86)[XML-Twig-pm-5871]-203-line.html#1 File::Temp::BEGIN@176 href=File-Temp-pm-87-line.html#176 Archive::Zip::BEGIN@4 href=Archive-Zip-pm-73-line.html#4 XML::Twig::_use href=XML-Twig-pm-129-line.html#1319 Time::HiRes::BEGIN@4 href=Time-HiRes-pm-25-line.html#4 Errno::TIEHASH href=Errno-pm-91-line.html#196 POSIX::BEGIN@11 href=POSIX-pm-10-line.html#11 File::Temp::BEGIN@240 href=File-Temp-pm-87-line.html#240 Archive::Zip::DirectoryMember::BEGIN@13 href=Archive-Zip-DirectoryMember-pm-113-line.html#13 Test2::API::test2_add_callback_context_aquire href=Test2-API-pm-24-line.html#263 IO::File::__ANON__ href=IO-File-pm-75-line.html#IO__File____ANON__ Internals::SvREADONLY href=bug-md-11-t-1-line.html#Internals__SvREADONLY Test2::Event::BEGIN@21 href=Test2-Event-pm-41-line.html#21 Archive::Zip::BEGIN@200 href=Archive-Zip-pm-73-line.html#200 XML::Twig::__ANON__[(eval 111)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] href=(eval 111)[XML-Twig-pm-1750]-228-line.html#1 XML::Twig::Elt::BEGIN@1.73 href=(eval 129)[XML-Twig-pm-7113]-246-line.html#1 Test2::EventFacet::BEGIN@3 href=Test2-EventFacet-pm-30-line.html#3 Storable::BEGIN@487 href=Storable-pm-106-line.html#487 Archive::Zip::BEGIN@297 href=Archive-Zip-pm-73-line.html#297 Cwd::BEGIN@3 href=Cwd-pm-74-line.html#3 Test2::EventFacet::Assert::BEGIN@8 href=Test2-EventFacet-Assert-pm-44-line.html#8 Test2::API::BEGIN@88 href=Test2-API-pm-24-line.html#88 Test2::Hub::Interceptor::BEGIN@93 href=Test2-Hub-Interceptor-pm-38-line.html#93 CORE::ftdir href=bug-md-11-t-1-line.html#CORE__ftdir Spreadsheet::ParseExcel::BEGIN@21 href=Spreadsheet-ParseExcel-pm-118-line.html#21 Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 href=Decryptor-pm-138-line.html#12 POSIX::BEGIN@3 href=POSIX-pm-10-line.html#3 Spreadsheet::ParseXLSX::BEGIN@11 href=ParseXLSX-pm-72-line.html#11 Archive::Zip::Member::compressionMethod href=Archive-Zip-Member-pm-109-line.html#209 XML::Twig::setTwigRoots href=XML-Twig-pm-129-line.html#1927 Test2::Event::Skip::BEGIN@2 href=Test2-Event-Skip-pm-59-line.html#2 Archive::Zip::StringMember::BEGIN@3 href=Archive-Zip-StringMember-pm-116-line.html#3 Test2::EventFacet::Plan::BEGIN@3 href=Test2-EventFacet-Plan-pm-51-line.html#3 XML::Twig::Elt::is_elt href=XML-Twig-pm-129-line.html#5418 Digest::SHA::BEGIN@5 href=Digest-SHA-pm-165-line.html#5 Test2::Util::HashBase::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/HashBase.pm:84] href=Test2-Util-HashBase-pm-31-line.html#84 OLE::Storage_Lite::BEGIN@843 href=OLE-Storage_Lite-pm-119-line.html#843 Archive::Zip::Archive::BEGIN@21 href=Archive-Zip-Archive-pm-98-line.html#21 URI::BEGIN@40 href=URI-pm-173-line.html#40 CORE::open href=bug-md-11-t-1-line.html#CORE__open XML::Parser::Expat::new_ns_prefixes href=XML-Parser-Expat-pm-133-line.html#273 XML::Twig::Elt::BEGIN@1.33 href=(eval 73)[XML-Twig-pm-5871]-190-line.html#1 JSON::PP::BEGIN@33 href=JSON-PP-pm-145-line.html#33 Compress::Raw::Zlib::BEGIN@113 href=Compress-Raw-Zlib-pm-81-line.html#113 Archive::Zip::Member::endRead href=Archive-Zip-Member-pm-109-line.html#1253 Test2::API::BEGIN@90 href=Test2-API-pm-24-line.html#90 Test2::EventFacet::Plan::BEGIN@2 href=Test2-EventFacet-Plan-pm-51-line.html#2 XML::Twig::Elt::__ANON__[(eval 79)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 79)[XML-Twig-pm-5871]-196-line.html#1 Test::Builder::__ANON__ href=Test-Builder-pm-5-line.html#Test__Builder____ANON__ Test::Builder::BEGIN@3 href=Test-Builder-pm-5-line.html#3 XML::Parser::new href=XML-Parser-pm-132-line.html#26 JSON::PP::BEGIN@53 href=JSON-PP-pm-145-line.html#53 XML::Twig::_normalize_args href=XML-Twig-pm-129-line.html#1481 Spreadsheet::ParseExcel::Format::new href=Spreadsheet-ParseExcel-Format-pm-125-line.html#24 XML::Twig::Elt::BEGIN@7340 href=XML-Twig-pm-129-line.html#7340 Test2::API::BEGIN@100 href=Test2-API-pm-24-line.html#100 parent::BEGIN@2 href=parent-pm-94-line.html#2 Archive::Zip::Member::_inflater href=Archive-Zip-Member-pm-109-line.html#743 Config::BEGIN@10 href=Config-pm-20-line.html#10 XML::Twig::Elt::__ANON__[(eval 61)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 61)[XML-Twig-pm-7113]-178-line.html#1 XML::Twig::BEGIN@4181 href=XML-Twig-pm-129-line.html#4181 Test2::Hub::Subtest::BEGIN@2 href=Test2-Hub-Subtest-pm-37-line.html#2 PerlIO::get_layers href=PerlIO-pm-21-line.html#PerlIO__get_layers Archive::Zip::BEGIN@257 href=Archive-Zip-pm-73-line.html#257 Storable::BEGIN@66 href=Storable-pm-106-line.html#66 XML::Twig::Elt::set_keep_encoding href=XML-Twig-pm-129-line.html#8313 Test::Builder::BEGIN@20 href=Test-Builder-pm-5-line.html#20 CORE::subst href=bug-md-11-t-1-line.html#CORE__subst Symbol::BEGIN@167 href=Symbol-pm-76-line.html#167 XML::Twig::BEGIN@4159 href=XML-Twig-pm-129-line.html#4159 Test2::Hub::Interceptor::BEGIN@8 href=Test2-Hub-Interceptor-pm-38-line.html#8 Time::HiRes::import href=Time-HiRes-pm-25-line.html#76 XML::Twig::Elt::passes href=XML-Twig-pm-129-line.html#5972 Test2::API::test2_unset_is_end href=Test2-API-pm-24-line.html#18 XML::Parser::BEGIN@17 href=XML-Parser-pm-132-line.html#17 XML::Twig::_reset_handlers href=XML-Twig-pm-129-line.html#1851 Test::Builder::BEGIN@61 href=Test-Builder-pm-5-line.html#61 Test2::API::Instance::add_exit_callback href=Test2-API-Instance-pm-28-line.html#327 XML::Parser::Expat::SetEntityDeclHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetEntityDeclHandler File::Copy::BEGIN@10 href=File-Copy-pm-100-line.html#10 Archive::Zip::BEGIN@300 href=Archive-Zip-pm-73-line.html#300 XML::Twig::Elt::new href=XML-Twig-pm-129-line.html#5171 Test2::Formatter::TAP::BEGIN@113 href=Test2-Formatter-TAP-pm-68-line.html#113 Test::More::BEGIN@22 href=Test-More-pm-3-line.html#22 Test2::Util::BEGIN@3 href=Test2-Util-pm-9-line.html#3 Archive::Zip::Member::uncompressedSize href=Archive-Zip-Member-pm-109-line.html#502 XML::Twig::_insert_pcdata href=XML-Twig-pm-129-line.html#2761 Archive::Zip::BEGIN@275 href=Archive-Zip-pm-73-line.html#275 XML::Twig::Elt::__ANON__[(eval 58)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 58)[XML-Twig-pm-7113]-175-line.html#1 Symbol::BEGIN@103 href=Symbol-pm-76-line.html#103 XML::Twig::Elt::BEGIN@1.35 href=(eval 91)[XML-Twig-pm-5871]-208-line.html#1 Test2::Hub::format href=Test2-Hub-pm-34-line.html#125 Test2::API::Instance::END href=(eval 7)[Test2-API-Instance-pm-319]-71-line.html#1 XML::Twig::Elt::BEGIN@1.42 href=(eval 77)[XML-Twig-pm-5871]-194-line.html#1 Test2::Event::BEGIN@14 href=Test2-Event-pm-41-line.html#14 Test::Builder::BEGIN@36 href=Test-Builder-pm-5-line.html#36 Test2::Event::Ok::BEGIN@22 href=Test2-Event-Ok-pm-40-line.html#22 Test2::Event::BEGIN@24 href=Test2-Event-pm-41-line.html#24 Test2::EventFacet::Amnesty::BEGIN@2 href=Test2-EventFacet-Amnesty-pm-43-line.html#2 XML::Twig::Elt::BEGIN@1.20 href=(eval 76)[XML-Twig-pm-7113]-193-line.html#1 XML::Twig::_twig_final href=XML-Twig-pm-129-line.html#2724 Fcntl::O_LARGEFILE href=Fcntl-pm-11-line.html#Fcntl__O_LARGEFILE Cwd::BEGIN@41 href=Cwd-pm-74-line.html#41 Test2::Util::_check_for_sig_sys href=Test2-Util-pm-9-line.html#166 Archive::Zip::Archive::BEGIN@8 href=Archive-Zip-Archive-pm-98-line.html#8 Test2::API::Instance::load href=Test2-API-Instance-pm-28-line.html#306 Test::Builder::BEGIN@17 href=Test-Builder-pm-5-line.html#17 Archive::Zip::Archive::_readEndOfCentralDirectory href=Archive-Zip-Archive-pm-98-line.html#832 Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 href=Decryptor-pm-138-line.html#18 JSON::PP::BEGIN@5 href=JSON-PP-pm-145-line.html#5 XML::Twig::Elt::set_output_filter href=XML-Twig-pm-129-line.html#8351 mro::method_changed_in href=mro-pm-32-line.html#mro__method_changed_in File::Temp::BEGIN@216 href=File-Temp-pm-87-line.html#216 Test2::Event::BEGIN@3 href=Test2-Event-pm-41-line.html#3 IO::Seekable::BEGIN@100 href=IO-Seekable-pm-78-line.html#100 Test2::Hub::BEGIN@2 href=Test2-Hub-pm-34-line.html#2 Archive::Zip::ZipFileMember::BEGIN@3 href=Archive-Zip-ZipFileMember-pm-114-line.html#3 CORE::binmode href=bug-md-11-t-1-line.html#CORE__binmode Archive::Zip::_isSeekable href=Archive-Zip-pm-73-line.html#438 XML::Twig::Elt::BEGIN@1.9 href=(eval 65)[XML-Twig-pm-5871]-182-line.html#1 Test2::API::test2_formatter_add href=Test2-API-pm-24-line.html#309 Archive::Zip::Archive::BEGIN@12 href=Archive-Zip-Archive-pm-98-line.html#12 XML::Parser::Expat::SetEndElementHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetEndElementHandler Spreadsheet::ParseXLSX::_zip_file_member href=ParseXLSX-pm-72-line.html#1038 Time::HiRes::AUTOLOAD href=Time-HiRes-pm-25-line.html#58 Archive::Zip::BEGIN@305 href=Archive-Zip-pm-73-line.html#305 Test::Builder::_ending href=Test-Builder-pm-5-line.html#1646 File::Temp::Dir::BEGIN@2602 href=File-Temp-pm-87-line.html#2602 Encode::BEGIN@7 href=Encode-pm-103-line.html#7 Archive::Zip::Member::_readDataRemaining href=Archive-Zip-Member-pm-109-line.html#739 vars::BEGIN@8 href=vars-pm-49-line.html#8 IO::File::BEGIN@119 href=IO-File-pm-75-line.html#119 Test2::API::Instance::add_formatter href=Test2-API-Instance-pm-28-line.html#231 Test::Builder::ok href=Test-Builder-pm-5-line.html#674 Test2::API::Instance::BEGIN@11 href=Test2-API-Instance-pm-28-line.html#11 Test2::Event::Exception::BEGIN@9 href=Test2-Event-Exception-pm-57-line.html#9 XML::Twig::Elt::BEGIN@1.21 href=(eval 77)[XML-Twig-pm-5871]-194-line.html#1 Test2::EventFacet::Assert::BEGIN@2 href=Test2-EventFacet-Assert-pm-44-line.html#2 Archive::Zip::BEGIN@220 href=Archive-Zip-pm-73-line.html#220 Compress::Raw::Zlib::AUTOLOAD href=Compress-Raw-Zlib-pm-81-line.html#116 Exporter::BEGIN@3 href=Exporter-pm-7-line.html#3 Test::Builder::current_test href=Test-Builder-pm-5-line.html#1434 POSIX::load_imports href=POSIX-pm-10-line.html#250 Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10 href=Standard-pm-168-line.html#10 XML::Twig::Elt::BEGIN@1.32 href=(eval 72)[XML-Twig-pm-5871]-189-line.html#1 Spreadsheet::ParseXLSX::Decryptor::BEGIN@14 href=Decryptor-pm-138-line.html#14 Test2::Event::Plan::BEGIN@11 href=Test2-Event-Plan-pm-55-line.html#11 Exporter::Heavy::heavy_export href=Exporter-Heavy-pm-27-line.html#39 XML::Twig::BEGIN@25 href=XML-Twig-pm-129-line.html#25 Archive::Zip::BEGIN@261 href=Archive-Zip-pm-73-line.html#261 Storable::BEGIN@83 href=Storable-pm-106-line.html#83 Test2::EventFacet::Trace::call href=Test2-EventFacet-Trace-pm-29-line.html#72 XSLoader::load href=XSLoader-pm-250-line.html#19 File::Temp::BEGIN@168 href=File-Temp-pm-87-line.html#168 Carp::BEGIN@5 href=Carp-pm-13-line.html#5 XML::Twig::Elt::BEGIN@1.71 href=(eval 127)[XML-Twig-pm-5871]-244-line.html#1 Archive::Zip::Member::localExtraField href=Archive-Zip-Member-pm-109-line.html#413 Config::FETCH href=Config-pm-20-line.html#66 Test2::Event::Waiting::BEGIN@9 href=Test2-Event-Waiting-pm-58-line.html#9 Test2::Formatter::TAP::BEGIN@89 href=Test2-Formatter-TAP-pm-68-line.html#89 XML::Twig::_twig_start href=XML-Twig-pm-129-line.html#2037 Test2::Formatter::BEGIN@3 href=Test2-Formatter-pm-69-line.html#3 IO::Handle::clearerr href=IO-Handle-pm-79-line.html#IO__Handle__clearerr XML::Twig::set_expand_external_entities href=XML-Twig-pm-129-line.html#3778 SelectSaver::BEGIN@39 href=SelectSaver-pm-77-line.html#39 Spreadsheet::ParseExcel::BEGIN@33 href=Spreadsheet-ParseExcel-pm-118-line.html#33 XML::Twig::setTwigHandlers href=XML-Twig-pm-129-line.html#1876 Test2::API::Context::BEGIN@3 href=Test2-API-Context-pm-61-line.html#3 Test2::Event::BEGIN@19 href=Test2-Event-pm-41-line.html#19 IO::File::new href=IO-File-pm-75-line.html#146 Test2::Event::BEGIN@18 href=Test2-Event-pm-41-line.html#18 FileHandle::BEGIN@46 href=FileHandle-pm-97-line.html#46 XML::Twig::Elt::__ANON__[(eval 101)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 101)[XML-Twig-pm-5871]-218-line.html#1 XML::Twig::set_root href=XML-Twig-pm-129-line.html#2286 Test2::Event::Pass::BEGIN@15 href=Test2-Event-Pass-pm-62-line.html#15 Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10 href=Agile-pm-169-line.html#10 Test2::API::test2_add_callback_exit href=Test2-API-pm-24-line.html#266 Archive::Zip::Member::_inflateChunk href=Archive-Zip-Member-pm-109-line.html#1181 Carp::BEGIN@95 href=Carp-pm-13-line.html#95 Archive::Zip::BEGIN@236 href=Archive-Zip-pm-73-line.html#236 Test2::Util::ExternalMeta::BEGIN@8 href=Test2-Util-ExternalMeta-pm-35-line.html#8 XML::Twig::__ANON__[(eval 109)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] href=(eval 109)[XML-Twig-pm-1750]-226-line.html#1 XML::Twig::_twig_xmldecl href=XML-Twig-pm-129-line.html#2895 Test2::EventFacet::Error::BEGIN@3 href=Test2-EventFacet-Error-pm-46-line.html#3 Test2::EventFacet::Trace::BEGIN@13 href=Test2-EventFacet-Trace-pm-29-line.html#13 Symbol::BEGIN@3 href=Symbol-pm-76-line.html#3 Test2::Hub::BEGIN@15 href=Test2-Hub-pm-34-line.html#15 Test::Builder::INIT href=Test-Builder-pm-5-line.html#132 XML::Parser::Expat::SetProcessingInstructionHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetProcessingInstructionHandler File::Find::BEGIN@2 href=File-Find-pm-99-line.html#2 Encode::BEGIN@9 href=Encode-pm-103-line.html#9 CORE::select href=bug-md-11-t-1-line.html#CORE__select Archive::Zip::Member::BEGIN@19 href=Archive-Zip-Member-pm-109-line.html#19 Compress::Raw::Zlib::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Compress/Raw/Zlib.pm:122] href=Compress-Raw-Zlib-pm-81-line.html#122 Test2::API::BEGIN@96 href=Test2-API-pm-24-line.html#96 Errno::BEGIN@21 href=Errno-pm-91-line.html#21 Spreadsheet::ParseExcel::Utility::BEGIN@23 href=Spreadsheet-ParseExcel-Utility-pm-128-line.html#23 XML::Twig::Elt::set_do_not_escape_amp_in_atts href=XML-Twig-pm-129-line.html#8341 Archive::Zip::ZipFileMember::dataOffset href=Archive-Zip-ZipFileMember-pm-114-line.html#129 Test2::EventFacet::Meta::BEGIN@2 href=Test2-EventFacet-Meta-pm-48-line.html#2 XML::Twig::BEGIN@1.58 href=(eval 114)[XML-Twig-pm-1750]-231-line.html#1 XML::Parser::Expat::RecognizedString href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__RecognizedString XML::Parser::Expat::NamespaceEnd href=XML-Parser-Expat-pm-133-line.html#331 Archive::Zip::BEGIN@266 href=Archive-Zip-pm-73-line.html#266 UNIVERSAL::import href=UNIVERSAL-pm-130-line.html#11 Encode::UTF_EBCDIC::BEGIN@178 href=Encode-pm-103-line.html#178 Archive::Zip::ZipFileMember::localHeaderRelativeOffset href=Archive-Zip-ZipFileMember-pm-114-line.html#125 Carp::BEGIN@256 href=Carp-pm-13-line.html#256 XML::Twig::BEGIN@3648 href=XML-Twig-pm-129-line.html#3648 utf8::import href=utf8-pm-131-line.html#11 IO::File::BEGIN@122 href=IO-File-pm-75-line.html#122 Digest::Perl::MD5::BEGIN@5 href=Digest-Perl-MD5-pm-121-line.html#5 Test2::API::test2_has_ipc href=Test2-API-pm-24-line.html#283 Test2::Hub::pre_filter href=Test2-Hub-pm-34-line.html#189 bytes::import href=bytes-pm-82-line.html#10 Test2::API::Context::BEGIN@72 href=Test2-API-Context-pm-61-line.html#72 Test2::Util::BEGIN@8 href=Test2-Util-pm-9-line.html#8 Exporter::import href=Exporter-pm-7-line.html#25 Digest::Perl::MD5::BEGIN@3 href=Digest-Perl-MD5-pm-121-line.html#3 XML::Twig::Elt::BEGIN@1.4 href=(eval 60)[XML-Twig-pm-7113]-177-line.html#1 File::Temp::BEGIN@229 href=File-Temp-pm-87-line.html#229 Exporter::as_heavy href=Exporter-pm-7-line.html#12 Spreadsheet::ParseXLSX::__ANON__ href=XML-Twig-pm-129-line.html#Spreadsheet__ParseXLSX____ANON__ XML::Twig::set_keep_atts_order href=XML-Twig-pm-129-line.html#3928 bytes::BEGIN@4 href=bytes-pm-82-line.html#4 Archive::Zip::Archive::BEGIN@14 href=Archive-Zip-Archive-pm-98-line.html#14 Spreadsheet::ParseXLSX::_new_twig href=ParseXLSX-pm-72-line.html#1173 XML::Twig::BEGIN@2455 href=XML-Twig-pm-129-line.html#2455 Test2::Util::Facets2Legacy::BEGIN@3 href=Test2-Util-Facets2Legacy-pm-65-line.html#3 XML::Twig::Elt::BEGIN@1.24 href=(eval 80)[XML-Twig-pm-5871]-197-line.html#1 Archive::Zip::new href=Archive-Zip-pm-73-line.html#341 Test::Builder::BEGIN@33 href=Test-Builder-pm-5-line.html#33 Archive::Zip::BEGIN@274 href=Archive-Zip-pm-73-line.html#274 Test2::EventFacet::Meta::BEGIN@12 href=Test2-EventFacet-Meta-pm-48-line.html#12 Time::HiRes::BEGIN@3 href=Time-HiRes-pm-25-line.html#3 Archive::Zip::BEGIN@7 href=Archive-Zip-pm-73-line.html#7 XML::Twig::__ANON__[(eval 110)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] href=(eval 110)[XML-Twig-pm-1750]-227-line.html#1 JSON::PP::BEGIN@45 href=JSON-PP-pm-145-line.html#45 XML::Twig::_check_illegal_twig_roots_handlers href=XML-Twig-pm-129-line.html#1943 Test2::API::Stack::top href=Test2-API-Stack-pm-33-line.html#45 Test2::Util::Facets2Legacy::BEGIN@7 href=Test2-Util-Facets2Legacy-pm-65-line.html#7 File::Copy::BEGIN@11 href=File-Copy-pm-100-line.html#11 main::BEGIN@3 href=bug-md-11-t-1-line.html#3 Test2::EventFacet::Hub::BEGIN@2 href=Test2-EventFacet-Hub-pm-52-line.html#2 Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148] href=Test-Builder-pm-5-line.html#144 Spreadsheet::ParseExcel::BEGIN@27 href=Spreadsheet-ParseExcel-pm-118-line.html#27 Test2::Event::Pass::BEGIN@9 href=Test2-Event-Pass-pm-62-line.html#9 File::Basename::BEGIN@42 href=File-Basename-pm-89-line.html#42 Test2::Util::BEGIN@171 href=Test2-Util-pm-9-line.html#171 XML::Twig::BEGIN@3587 href=XML-Twig-pm-129-line.html#3587 Compress::Raw::Zlib::Parameters::parse href=Compress-Raw-Zlib-pm-81-line.html#205 Test2::Event::BEGIN@12 href=Test2-Event-pm-41-line.html#12 Test2::API::BEGIN@102 href=Test2-API-pm-24-line.html#102 Test2::Event::Pass::__ANON__ href=Test2-Event-Pass-pm-62-line.html#Test2__Event__Pass____ANON__ XML::Twig::parser href=XML-Twig-pm-129-line.html#3094 Spreadsheet::ParseExcel::Format::BEGIN@19 href=Spreadsheet-ParseExcel-Format-pm-125-line.html#19 XML::Twig::_join_n href=XML-Twig-pm-129-line.html#1759 XML::Twig::Elt::BEGIN@1.37 href=(eval 77)[XML-Twig-pm-5871]-194-line.html#1 Archive::Zip::BEGIN@185 href=Archive-Zip-pm-73-line.html#185 JSON::PP::BEGIN@6 href=JSON-PP-pm-145-line.html#6 IO::Handle::close href=IO-Handle-pm-79-line.html#389 Crypt::Mode::CBC::BEGIN@5 href=Crypt-Mode-CBC-pm-139-line.html#5 File::Path::BEGIN@19 href=File-Path-pm-88-line.html#19 XML::Twig::BEGIN@1125 href=XML-Twig-pm-129-line.html#1125 Test2::API::Stack::BEGIN@81 href=Test2-API-Stack-pm-33-line.html#81 File::Spec::Unix::BEGIN@133 href=File-Spec-Unix-pm-86-line.html#133 XML::Twig::Elt::__ANON__[(eval 62)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 62)[XML-Twig-pm-7113]-179-line.html#1 Encode::Encoding::BEGIN@12 href=Encode-Encoding-pm-107-line.html#12 Test2::Hub::BEGIN@12 href=Test2-Hub-pm-34-line.html#12 File::Basename::fileparse_set_fstype href=File-Basename-pm-89-line.html#376 XML::Twig::__ANON__[(eval 114)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] href=(eval 114)[XML-Twig-pm-1750]-231-line.html#1 XML::Twig::Elt::BEGIN@1.25 href=(eval 71)[XML-Twig-pm-5871]-188-line.html#1 Spreadsheet::ParseExcel::Format::BEGIN@20 href=Spreadsheet-ParseExcel-Format-pm-125-line.html#20 XML::Twig::BEGIN@1.51 href=(eval 107)[XML-Twig-pm-1750]-224-line.html#1 File::Temp::BEGIN@145 href=File-Temp-pm-87-line.html#145 XML::Twig::Elt::BEGIN@1.17 href=(eval 73)[XML-Twig-pm-5871]-190-line.html#1 Test2::Util::gen_uid href=Test2-Util-pm-9-line.html#164 XML::Twig::Elt::next_elt href=XML-Twig-pm-129-line.html#6417 Carp::BEGIN@751 href=Carp-pm-13-line.html#751 Test2::Util::HashBase::BEGIN@3 href=Test2-Util-HashBase-pm-31-line.html#3 Test::Builder::BEGIN@1057 href=Test-Builder-pm-5-line.html#1057 Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] href=Test-Builder-pm-5-line.html#154 Crypt::Mode::CBC::BEGIN@6 href=Crypt-Mode-CBC-pm-139-line.html#6 XML::Twig::Elt::BEGIN@1.13 href=(eval 69)[XML-Twig-pm-5871]-186-line.html#1 Spreadsheet::ParseXLSX::_parse_themes href=ParseXLSX-pm-72-line.html#666 Test2::Event::Plan::BEGIN@9 href=Test2-Event-Plan-pm-55-line.html#9 Test2::API::Stack::BEGIN@8 href=Test2-API-Stack-pm-33-line.html#8 XML::Twig::Elt::BEGIN@1.34 href=(eval 90)[XML-Twig-pm-5871]-207-line.html#1 XML::Twig::Elt::__ANON__[(eval 94)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 94)[XML-Twig-pm-5871]-211-line.html#1 XML::Parser::Expat::DESTROY href=XML-Parser-Expat-pm-133-line.html#434 XML::Twig::Elt::__ANON__[(eval 72)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 72)[XML-Twig-pm-5871]-189-line.html#1 Config::BEGIN@9 href=Config-pm-20-line.html#9 Digest::SHA::BEGIN@9 href=Digest-SHA-pm-165-line.html#9 Test2::EventFacet::Error::BEGIN@11 href=Test2-EventFacet-Error-pm-46-line.html#11 Test2::API::BEGIN@98 href=Test2-API-pm-24-line.html#98 Test2::Hub::Subtest::BEGIN@8 href=Test2-Hub-Subtest-pm-37-line.html#8 Archive::Zip::BEGIN@207 href=Archive-Zip-pm-73-line.html#207 Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 href=Decryptor-pm-138-line.html#19 Fcntl::O_TEMPORARY href=bug-md-11-t-1-line.html#Fcntl__O_TEMPORARY XML::Twig::_set_pi_handler href=XML-Twig-pm-129-line.html#1572 Test2::EventFacet::Error::BEGIN@2 href=Test2-EventFacet-Error-pm-46-line.html#2 Spreadsheet::ParseExcel::FmtDefault::new href=Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html#69 Archive::Zip::DirectoryMember::BEGIN@3 href=Archive-Zip-DirectoryMember-pm-113-line.html#3 Symbol::gensym href=Symbol-pm-76-line.html#101 Test2::Hub::Interceptor::BEGIN@2 href=Test2-Hub-Interceptor-pm-38-line.html#2 XML::Twig::Elt::__ANON__[(eval 63)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 63)[XML-Twig-pm-7113]-180-line.html#1 XML::Parser::Expat::SetDefaultHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetDefaultHandler Test2::Event::Diag::BEGIN@3 href=Test2-Event-Diag-pm-53-line.html#3 XML::Twig::Elt::BEGIN@1.48 href=(eval 75)[XML-Twig-pm-5871]-192-line.html#1 Exporter::Heavy::BEGIN@202 href=Exporter-Heavy-pm-27-line.html#202 XML::Twig::Elt::keep_atts_order href=XML-Twig-pm-129-line.html#8401 XML::Twig::Elt::BEGIN@8108 href=XML-Twig-pm-129-line.html#8108 warnings::unimport href=warnings-pm-2-line.html#405 XML::Twig::BEGIN@1.52 href=(eval 108)[XML-Twig-pm-1750]-225-line.html#1 Digest::Perl::MD5::gen_code href=Digest-Perl-MD5-pm-121-line.html#38 Test2::Event::V2::facet_data href=Test2-Event-V2-pm-64-line.html#54 File::Copy::BEGIN@14 href=File-Copy-pm-100-line.html#14 Config::TIEHASH href=Config-pm-20-line.html#73 Archive::Zip::BEGIN@190 href=Archive-Zip-pm-73-line.html#190 Archive::Zip::Member::_revbe href=Archive-Zip-Member-pm-109-line.html#1508 Test::Builder::BEGIN@121 href=Test-Builder-pm-5-line.html#121 Exporter::Heavy::_rebuild_cache href=Exporter-Heavy-pm-27-line.html#28 JSON::PP::BEGIN@46 href=JSON-PP-pm-145-line.html#46 Test2::Formatter::TAP::BEGIN@9 href=Test2-Formatter-TAP-pm-68-line.html#9 File::Copy::BEGIN@17 href=File-Copy-pm-100-line.html#17 IO::Handle::binmode href=IO-Handle-pm-79-line.html#643 Archive::Zip::ZipFileMember::_skipLocalFileHeader href=Archive-Zip-ZipFileMember-pm-114-line.html#135 JSON::PP::BEGIN@42 href=JSON-PP-pm-145-line.html#42 Archive::Zip::FileMember::BEGIN@4 href=Archive-Zip-FileMember-pm-112-line.html#4 Test::Builder::BEGIN@1519 href=Test-Builder-pm-5-line.html#1519 Archive::Zip::BEGIN@295 href=Archive-Zip-pm-73-line.html#295 Archive::Zip::BEGIN@285 href=Archive-Zip-pm-73-line.html#285 Test2::Event::Ok::BEGIN@8 href=Test2-Event-Ok-pm-40-line.html#8 XML::Twig::_replace_ns href=XML-Twig-pm-129-line.html#2160 Spreadsheet::ParseExcel::Workbook::BEGIN@20 href=Spreadsheet-ParseExcel-Workbook-pm-122-line.html#20 File::Spec::BEGIN@3 href=File-Spec-pm-85-line.html#3 JSON::Backend::PP::init href=JSON-pm-142-line.html#336 Archive::Zip::ZipFileMember::_seekToLocalHeader href=Archive-Zip-ZipFileMember-pm-114-line.html#53 JSON::PP::Boolean::BEGIN@4 href=JSON-PP-Boolean-pm-146-line.html#4 Test2::Event::BEGIN@22 href=Test2-Event-pm-41-line.html#22 Compress::Raw::Zlib::Inflate::new href=Compress-Raw-Zlib-pm-81-line.html#456 Test2::EventFacet::About::BEGIN@8 href=Test2-EventFacet-About-pm-42-line.html#8 XML::Twig::BEGIN@3842 href=XML-Twig-pm-129-line.html#3842 Archive::Zip::Archive::eocdOffset href=Archive-Zip-Archive-pm-98-line.html#165 Compress::Raw::Zlib::BEGIN@127 href=Compress-Raw-Zlib-pm-81-line.html#127 Archive::Zip::ZipFileMember::_newFromZipFile href=Archive-Zip-ZipFileMember-pm-114-line.html#21 Test2::Event::add_hub href=Test2-Event-pm-41-line.html#107 XML::Twig::Elt::root href=XML-Twig-pm-129-line.html#5775 Test2::API::Instance::has_ipc href=Test2-API-Instance-pm-28-line.html#68 Test2::API::Instance::import href=Test2-API-Instance-pm-28-line.html#70 Test::Builder::new href=Test-Builder-pm-5-line.html#138 OLE::Storage_Lite::PPS::Dir::BEGIN@802 href=OLE-Storage_Lite-pm-119-line.html#802 Spreadsheet::ParseExcel::Font::BEGIN@19 href=Spreadsheet-ParseExcel-Font-pm-124-line.html#19 XML::Twig::Elt::BEGIN@1.15 href=(eval 71)[XML-Twig-pm-5871]-188-line.html#1 XML::Twig::Elt::BEGIN@1.70 href=(eval 126)[XML-Twig-pm-5871]-243-line.html#1 File::Spec::Unix::BEGIN@209 href=File-Spec-Unix-pm-86-line.html#209 XML::Twig::Elt::delete href=XML-Twig-pm-129-line.html#8086 Encode::MIME::Name::BEGIN@2 href=Encode-MIME-Name-pm-105-line.html#2 Test2::EventFacet::Control::BEGIN@3 href=Test2-EventFacet-Control-pm-45-line.html#3 Test2::API::Stack::BEGIN@2 href=Test2-API-Stack-pm-33-line.html#2 JSON::PP::IncrParser::BEGIN@1487 href=JSON-PP-pm-145-line.html#1487 vars::BEGIN@3 href=vars-pm-49-line.html#3 Test2::Event::V2::BEGIN@17 href=Test2-Event-V2-pm-64-line.html#17 XML::Twig::DESTROY href=XML-Twig-pm-129-line.html#3962 Spreadsheet::ParseExcel::BEGIN@78 href=Spreadsheet-ParseExcel-pm-118-line.html#78 JSON::PP::BEGIN@9 href=JSON-PP-pm-145-line.html#9 Spreadsheet::ParseXLSX::Decryptor::BEGIN@4 href=Decryptor-pm-138-line.html#4 constant::import href=constant-pm-83-line.html#55 main::BEGIN@4 href=bug-md-11-t-1-line.html#4 Digest::SHA::BEGIN@10 href=Digest-SHA-pm-165-line.html#10 CORE::sort href=bug-md-11-t-1-line.html#CORE__sort JSON::PP::BEGIN@14 href=JSON-PP-pm-145-line.html#14 JSON::PP::BEGIN@27 href=JSON-PP-pm-145-line.html#27 Archive::Zip::Archive::membersMatching href=Archive-Zip-Archive-pm-98-line.html#103 XML::Twig::Elt::__ANON__[(eval 95)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 95)[XML-Twig-pm-5871]-212-line.html#1 JSON::PP::BEGIN@29 href=JSON-PP-pm-145-line.html#29 Archive::Zip::BEGIN@294 href=Archive-Zip-pm-73-line.html#294 OLE::Storage_Lite::PPS::Root::BEGIN@169 href=OLE-Storage_Lite-pm-119-line.html#169 Archive::Zip::DirectoryMember::BEGIN@6 href=Archive-Zip-DirectoryMember-pm-113-line.html#6 Test2::EventFacet::Parent::BEGIN@2 href=Test2-EventFacet-Parent-pm-50-line.html#2 Test2::API::BEGIN@2 href=Test2-API-pm-24-line.html#2 Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4 href=Standard-pm-168-line.html#4 File::Basename::BEGIN@51 href=File-Basename-pm-89-line.html#51 File::Find::BEGIN@7 href=File-Find-pm-99-line.html#7 Archive::Zip::BEGIN@240 href=Archive-Zip-pm-73-line.html#240 Errno::BEGIN@11 href=Errno-pm-91-line.html#11 Spreadsheet::ParseXLSX::BEGIN@2 href=XML-Twig-pm-129-line.html#2 Archive::Zip::StringMember::BEGIN@6 href=Archive-Zip-StringMember-pm-116-line.html#6 Test2::API::BEGIN@93 href=Test2-API-pm-24-line.html#93 Exporter::Heavy::heavy_export_tags href=Exporter-Heavy-pm-27-line.html#245 Test2::Util::BEGIN@89 href=Test2-Util-pm-9-line.html#89 Test::Builder::plan href=Test-Builder-pm-5-line.html#493 JSON::__load_pp href=JSON-pm-142-line.html#302 Archive::Zip::ZipFileMember::isDirectory href=Archive-Zip-ZipFileMember-pm-114-line.html#42 XML::Twig::BEGIN@30 href=XML-Twig-pm-129-line.html#30 UNIVERSAL::isa href=UNIVERSAL-pm-130-line.html#UNIVERSAL__isa IO::Handle::_open_mode_string href=IO-Handle-pm-79-line.html#360 Crypt::Mode::CBC::BEGIN@9 href=Crypt-Mode-CBC-pm-139-line.html#9 File::Basename::BEGIN@52 href=File-Basename-pm-89-line.html#52 Archive::Zip::BEGIN@310 href=Archive-Zip-pm-73-line.html#310 CryptX::BEGIN@3 href=CryptX-pm-141-line.html#3 CORE::unpack href=bug-md-11-t-1-line.html#CORE__unpack XML::Twig::Elt::__ANON__[(eval 65)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 65)[XML-Twig-pm-5871]-182-line.html#1 XML::Twig::Elt::BEGIN@1.3 href=(eval 59)[XML-Twig-pm-5871]-176-line.html#1 Test2::Event::Note::BEGIN@8 href=Test2-Event-Note-pm-54-line.html#8 Fcntl::BEGIN@58 href=Fcntl-pm-11-line.html#58 XML::Twig::Elt::__ANON__[(eval 60)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 60)[XML-Twig-pm-7113]-177-line.html#1 XML::Twig::BEGIN@1.56 href=(eval 112)[XML-Twig-pm-1750]-229-line.html#1 Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3 href=Agile-pm-169-line.html#3 Test2::API::test2_load href=Test2-API-pm-24-line.html#204 Test2::Event::BEGIN@17 href=Test2-Event-pm-41-line.html#17 Cwd::BEGIN@644 href=Cwd-pm-74-line.html#644 XML::Twig::BEGIN@33 href=XML-Twig-pm-129-line.html#33 Carp::BEGIN@744 href=Carp-pm-13-line.html#744 XML::Twig::Elt::BEGIN@8906 href=XML-Twig-pm-129-line.html#8906 JSON::BEGIN@5 href=JSON-pm-142-line.html#5 XML::Twig::BEGIN@4649 href=XML-Twig-pm-129-line.html#4649 Test::More::BEGIN@5 href=Test-More-pm-3-line.html#5 Archive::Zip::BEGIN@245 href=Archive-Zip-pm-73-line.html#245 IO::Handle::BEGIN@274 href=IO-Handle-pm-79-line.html#274 JSON::PP::BEGIN@31 href=JSON-PP-pm-145-line.html#31 JSON::PP::BEGIN@28 href=JSON-PP-pm-145-line.html#28 XML::Twig::BEGIN@1.67 href=(eval 106)[XML-Twig-pm-1750]-223-line.html#1 XML::Twig::_set_xpath_handler href=XML-Twig-pm-129-line.html#1539 base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] href=base-pm-66-line.html#71 Test2::Event::Subtest::BEGIN@2 href=Test2-Event-Subtest-pm-60-line.html#2 Test2::Util::Trace::BEGIN@5 href=Test2-Util-Trace-pm-36-line.html#5 Archive::Zip::BEGIN@209 href=Archive-Zip-pm-73-line.html#209 File::Glob::GLOB_CSH href=File-Glob-pm-136-line.html#File__Glob__GLOB_CSH Test2::API::test2_in_preload href=Test2-API-pm-24-line.html#207 JSON::PP::IncrParser::BEGIN@1489 href=JSON-PP-pm-145-line.html#1489 constant::BEGIN@3 href=constant-pm-83-line.html#3 Spreadsheet::ParseXLSX::_dimensions href=ParseXLSX-pm-72-line.html#1071 Digest::base::BEGIN@4 href=Digest-base-pm-166-line.html#4 Test2::API::Instance::init href=Test2-API-Instance-pm-28-line.html#77 Spreadsheet::ParseExcel::BEGIN@26 href=Spreadsheet-ParseExcel-pm-118-line.html#26 Test2::Event::Skip::BEGIN@8 href=Test2-Event-Skip-pm-59-line.html#8 Test2::EventFacet::About::BEGIN@7 href=Test2-EventFacet-About-pm-42-line.html#7 Fcntl::BEGIN@60 href=Fcntl-pm-11-line.html#60 Spreadsheet::ParseXLSX::BEGIN@14 href=ParseXLSX-pm-72-line.html#14 Crypt::RC4::BEGIN@16 href=Crypt-RC4-pm-120-line.html#16 Time::HiRes::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Time/HiRes.pm:71] href=Time-HiRes-pm-25-line.html#71 File::Temp::Dir::BEGIN@2603 href=File-Temp-pm-87-line.html#2603 Test2::API::Context::BEGIN@9 href=Test2-API-Context-pm-61-line.html#9 XML::Twig::BEGIN@4175 href=XML-Twig-pm-129-line.html#4175 Test2::Event::common_facet_data href=Test2-Event-pm-41-line.html#125 File::Copy::BEGIN@13 href=File-Copy-pm-100-line.html#13 Test2::Event::V2::BEGIN@2 href=Test2-Event-V2-pm-64-line.html#2 File::Path::BEGIN@7 href=File-Path-pm-88-line.html#7 XML::Parser::Expat::BEGIN@7 href=XML-Parser-Expat-pm-133-line.html#7 Archive::Zip::BEGIN@309 href=Archive-Zip-pm-73-line.html#309 Test2::Event::Pass::BEGIN@2 href=Test2-Event-Pass-pm-62-line.html#2 Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338] href=ParseXLSX-pm-72-line.html#327 Compress::Raw::Zlib::BEGIN@126 href=Compress-Raw-Zlib-pm-81-line.html#126 File::Glob::BEGIN@3 href=File-Glob-pm-136-line.html#3 Test::Builder::Module::import href=Test-Builder-Module-pm-4-line.html#75 JSON::BEGIN@7 href=JSON-pm-142-line.html#7 Test2::Event::BEGIN@8 href=Test2-Event-pm-41-line.html#8 XML::Twig::Elt::get_xpath href=XML-Twig-pm-129-line.html#7139 Compress::Raw::Zlib::constant href=Compress-Raw-Zlib-pm-81-line.html#Compress__Raw__Zlib__constant warnings::register::import href=warnings-register-pm-19-line.html#17 Test2::API::Instance::BEGIN@62 href=Test2-API-Instance-pm-28-line.html#62 XML::Twig::_twig_default href=XML-Twig-pm-129-line.html#3016 Test2::API::BEGIN@75 href=Test2-API-pm-24-line.html#75 XML::Twig::BEGIN@38 href=XML-Twig-pm-129-line.html#38 Test::Builder::Formatter::BEGIN@2 href=Test-Builder-Formatter-pm-67-line.html#2 JSON::PP::BEGIN@12 href=JSON-PP-pm-145-line.html#12 Test2::Event::BEGIN@20 href=Test2-Event-pm-41-line.html#20 JSON::PP::BEGIN@39 href=JSON-PP-pm-145-line.html#39 Archive::Zip::BEGIN@210 href=Archive-Zip-pm-73-line.html#210 OLE::Storage_Lite::PPS::BEGIN@13 href=OLE-Storage_Lite-pm-119-line.html#13 Compress::Raw::Zlib::Parameters::new href=Compress-Raw-Zlib-pm-81-line.html#177 Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268] href=ParseXLSX-pm-72-line.html#260 Time::Local::BEGIN@34 href=Time-Local-pm-110-line.html#34 overload::unimport href=overload-pm-95-line.html#63 overload::BEGIN@102 href=overload-pm-95-line.html#102 XML::Twig::Elt::BEGIN@1.74 href=(eval 74)[XML-Twig-pm-5871]-191-line.html#1 Test2::API::Instance::BEGIN@8 href=Test2-API-Instance-pm-28-line.html#8 Archive::Zip::Member::BEGIN@30 href=Archive-Zip-Member-pm-109-line.html#30 XML::Twig::Elt::_and href=XML-Twig-pm-129-line.html#9827 Encode::Encoding::BEGIN@4 href=Encode-Encoding-pm-107-line.html#4 File::Find::BEGIN@5 href=File-Find-pm-99-line.html#5 XML::Twig::Elt::set_remove_cdata href=XML-Twig-pm-129-line.html#8290 Archive::Zip::FileMember::externalFileName href=Archive-Zip-FileMember-pm-112-line.html#15 Test2::EventFacet::Control::BEGIN@8 href=Test2-EventFacet-Control-pm-45-line.html#8 Archive::Zip::BEGIN@9 href=Archive-Zip-pm-73-line.html#9 JSON::PP::BEGIN@790 href=JSON-PP-pm-145-line.html#790 Test2::Event::BEGIN@10 href=Test2-Event-pm-41-line.html#10 Test2::Hub::is_subtest href=Test2-Hub-pm-34-line.html#67 XML::Twig::__ANON__[(eval 102)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] href=(eval 102)[XML-Twig-pm-1750]-219-line.html#1 Test2::Formatter::TAP::BEGIN@7 href=Test2-Formatter-TAP-pm-68-line.html#7 Test2::API::BEGIN@86 href=Test2-API-pm-24-line.html#86 XML::Parser::Expat::BEGIN@14 href=XML-Parser-Expat-pm-133-line.html#14 Archive::Zip::Member::readChunk href=Archive-Zip-Member-pm-109-line.html#1102 Archive::Zip::Archive::BEGIN@11 href=Archive-Zip-Archive-pm-98-line.html#11 Archive::Zip::BEGIN@279 href=Archive-Zip-pm-73-line.html#279 File::Spec::Unix::BEGIN@115 href=File-Spec-Unix-pm-86-line.html#115 Test2::Event::Subtest::BEGIN@20 href=Test2-Event-Subtest-pm-60-line.html#20 XML::Twig::Elt::__ANON__[(eval 105)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 77)[XML-Twig-pm-5871]-194-line.html#1 XML::Parser::Expat::BEGIN@8 href=XML-Parser-Expat-pm-133-line.html#8 Encode::onBOOT href=Encode-pm-103-line.html#Encode__onBOOT CORE::match href=bug-md-11-t-1-line.html#CORE__match constant::BEGIN@2 href=constant-pm-83-line.html#2 Test2::EventFacet::Trace::BEGIN@10 href=Test2-EventFacet-Trace-pm-29-line.html#10 XML::Twig::_set_handlers href=XML-Twig-pm-129-line.html#1860 Archive::Zip::BEGIN@215 href=Archive-Zip-pm-73-line.html#215 File::Temp::BEGIN@227 href=File-Temp-pm-87-line.html#227 Scalar::Util::openhandle href=Scalar-Util-pm-6-line.html#Scalar__Util__openhandle Archive::Zip::Member::BEGIN@578 href=Archive-Zip-Member-pm-109-line.html#578 Archive::Zip::Member::fileName href=Archive-Zip-Member-pm-109-line.html#247 XML::Parser::Expat::SetAttListDeclHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetAttListDeclHandler XML::Parser::Expat::SetStartElementHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetStartElementHandler Carp::BEGIN@188 href=Carp-pm-13-line.html#188 Spreadsheet::ParseExcel::Workbook::BEGIN@19 href=Spreadsheet-ParseExcel-Workbook-pm-122-line.html#19 Spreadsheet::ParseExcel::Cell::new href=Spreadsheet-ParseExcel-Cell-pm-126-line.html#30 Archive::Zip::Member::BEGIN@1517 href=Archive-Zip-Member-pm-109-line.html#1517 XML::Twig::Elt::BEGIN@1.18 href=(eval 74)[XML-Twig-pm-5871]-191-line.html#1 Test2::EventFacet::Amnesty::BEGIN@9 href=Test2-EventFacet-Amnesty-pm-43-line.html#9 Test2::Event::Skip::BEGIN@9 href=Test2-Event-Skip-pm-59-line.html#9 JSON::PP::BEGIN@38 href=JSON-PP-pm-145-line.html#38 Archive::Zip::BEGIN@227 href=Archive-Zip-pm-73-line.html#227 Test::Builder::BEGIN@1540 href=Test-Builder-pm-5-line.html#1540 Spreadsheet::ParseExcel::BEGIN@19 href=Spreadsheet-ParseExcel-pm-118-line.html#19 Spreadsheet::ParseXLSX::Cell::BEGIN@4 href=Cell-pm-170-line.html#4 Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell href=ParseXLSX-pm-72-line.html#563 mro::BEGIN@10 href=mro-pm-32-line.html#10 XML::Twig::Elt::set_gi href=XML-Twig-pm-129-line.html#5303 Spreadsheet::ParseExcel::BEGIN@66 href=Spreadsheet-ParseExcel-pm-118-line.html#66 IO::Handle::read href=IO-Handle-pm-79-line.html#447 Test::Builder::Module::__ANON__ href=Test-Builder-Module-pm-4-line.html#Test__Builder__Module____ANON__ Test2::Event::Plan::BEGIN@3 href=Test2-Event-Plan-pm-55-line.html#3 Test2::EventFacet::Trace::init href=Test2-EventFacet-Trace-pm-29-line.html#22 Spreadsheet::ParseXLSX::_extract_files href=ParseXLSX-pm-72-line.html#956 XML::Twig::Elt::_install_xpath href=XML-Twig-pm-129-line.html#6976 Archive::Zip::BEGIN@277 href=Archive-Zip-pm-73-line.html#277 Test2::API::BEGIN@94 href=Test2-API-pm-24-line.html#94 XML::Twig::Elt::BEGIN@1.39 href=(eval 95)[XML-Twig-pm-5871]-212-line.html#1 XML::Twig::Elt::text href=XML-Twig-pm-129-line.html#8991 File::Path::__ANON__ href=File-Path-pm-88-line.html#File__Path____ANON__ Test2::Util::HashBase::BEGIN@2 href=Test2-Util-HashBase-pm-31-line.html#2 XML::Twig::Elt::first_child href=XML-Twig-pm-129-line.html#5996 Test2::Util::BEGIN@113 href=Test2-Util-pm-9-line.html#113 Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4 href=Agile-pm-169-line.html#4 Test::Builder::BEGIN@1251 href=Test-Builder-pm-5-line.html#1251 Encode::Alias::BEGIN@111 href=Encode-Alias-pm-104-line.html#111 Archive::Zip::Member::_mapPermissionsFromUnix href=Archive-Zip-Member-pm-109-line.html#293 File::Temp::BEGIN@148 href=File-Temp-pm-87-line.html#148 Test2::Util::clone_io href=Test2-Util-pm-9-line.html#185 Spreadsheet::ParseExcel::BEGIN@32 href=Spreadsheet-ParseExcel-pm-118-line.html#32 Exporter::Heavy::BEGIN@4 href=Exporter-Heavy-pm-27-line.html#4 XML::Twig::Elt::BEGIN@1.31 href=(eval 87)[XML-Twig-pm-7113]-204-line.html#1 Test2::Util::ExternalMeta::BEGIN@13 href=Test2-Util-ExternalMeta-pm-35-line.html#13 Test2::Util::Facets2Legacy::BEGIN@2 href=Test2-Util-Facets2Legacy-pm-65-line.html#2 XML::Twig::BEGIN@151 href=XML-Twig-pm-129-line.html#151 Test2::API::BEGIN@97 href=Test2-API-pm-24-line.html#97 IO::File::BEGIN@121 href=IO-File-pm-75-line.html#121 Tie::StdHash::TIEHASH href=Tie-Hash-pm-12-line.html#248 Spreadsheet::ParseExcel::BEGIN@34 href=Spreadsheet-ParseExcel-pm-118-line.html#34 Internals::V href=bug-md-11-t-1-line.html#Internals__V Archive::Zip::FileMember::fh href=Archive-Zip-FileMember-pm-112-line.html#28 Test2::EventFacet::Control::BEGIN@2 href=Test2-EventFacet-Control-pm-45-line.html#2 XML::Parser::ExpatNB::BEGIN@600 href=XML-Parser-Expat-pm-133-line.html#600 XML::Twig::BEGIN@1.53 href=(eval 109)[XML-Twig-pm-1750]-226-line.html#1 overload::BEGIN@4 href=overload-pm-95-line.html#4 XML::Twig::BEGIN@1.64 href=(eval 110)[XML-Twig-pm-1750]-227-line.html#1 Spreadsheet::ParseExcel::BEGIN@64 href=Spreadsheet-ParseExcel-pm-118-line.html#64 JSON::PP::IncrParser::BEGIN@1490 href=JSON-PP-pm-145-line.html#1490 XML::Twig::_set_fh_to_selected_fh href=XML-Twig-pm-129-line.html#4403 Archive::Zip::BEGIN@229 href=Archive-Zip-pm-73-line.html#229 XML::Twig::Elt::__ANON__[(eval 100)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 78)[XML-Twig-pm-5871]-195-line.html#1 Archive::Zip::BEGIN@214 href=Archive-Zip-pm-73-line.html#214 IO::Seekable::BEGIN@99 href=IO-Seekable-pm-78-line.html#99 File::Spec::Unix::BEGIN@4 href=File-Spec-Unix-pm-86-line.html#4 IO::Seekable::BEGIN@98 href=IO-Seekable-pm-78-line.html#98 XML::Twig::Elt::BEGIN@1.43 href=(eval 75)[XML-Twig-pm-5871]-192-line.html#1 XML::Parser::setHandlers href=XML-Parser-pm-132-line.html#111 Compress::Raw::Zlib::BEGIN@129 href=Compress-Raw-Zlib-pm-81-line.html#129 Spreadsheet::ParseExcel::Worksheet::BEGIN@21 href=Spreadsheet-ParseExcel-Worksheet-pm-123-line.html#21 Test2::API::_add_uuid_via_ref href=Test2-API-pm-24-line.html#322 warnings::register_categories href=warnings-pm-2-line.html#551 Spreadsheet::ParseExcel::BEGIN@72 href=Spreadsheet-ParseExcel-pm-118-line.html#72 XML::Twig::Elt::BEGIN@1.23 href=(eval 79)[XML-Twig-pm-5871]-196-line.html#1 IO::Seekable::tell href=IO-Seekable-pm-78-line.html#121 File::Glob::BEGIN@54 href=File-Glob-pm-136-line.html#54 Errno::BEGIN@9 href=Errno-pm-91-line.html#9 Encode::Alias::undef_aliases href=Encode-Alias-pm-104-line.html#132 Symbol::BEGIN@137 href=Symbol-pm-76-line.html#137 XML::Twig::Elt::BEGIN@6232 href=XML-Twig-pm-129-line.html#6232 Encode::Encoding::BEGIN@14 href=Encode-Encoding-pm-107-line.html#14 Test2::Hub::Subtest::BEGIN@3 href=Test2-Hub-Subtest-pm-37-line.html#3 Archive::Zip::BEGIN@307 href=Archive-Zip-pm-73-line.html#307 Time::Local::BEGIN@3 href=Time-Local-pm-110-line.html#3 Test::Builder::BEGIN@131 href=Test-Builder-pm-5-line.html#131 Test::Builder::BEGIN@116 href=Test-Builder-pm-5-line.html#116 overload::BEGIN@143 href=overload-pm-95-line.html#143 XML::Twig::Elt::_install_cond href=XML-Twig-pm-129-line.html#5817 XML::Twig::Elt::BEGIN@1.36 href=(eval 74)[XML-Twig-pm-5871]-191-line.html#1 Test2::Util::BEGIN@123 href=Test2-Util-pm-9-line.html#123 base::has_fields href=base-pm-66-line.html#24 Test2::Event::Ok::BEGIN@3 href=Test2-Event-Ok-pm-40-line.html#3 Test2::API::BEGIN@103 href=Test2-API-pm-24-line.html#103 XML::Twig::Elt::set_output_text_filter href=XML-Twig-pm-129-line.html#8369 Exporter::Heavy::BEGIN@3 href=Exporter-Heavy-pm-27-line.html#3 JSON::PP::IncrParser::BEGIN@1485 href=JSON-PP-pm-145-line.html#1485 XML::Twig::BEGIN@4246 href=XML-Twig-pm-129-line.html#4246 XML::Parser::ContentModel::BEGIN@512 href=XML-Parser-Expat-pm-133-line.html#512 XML::Twig::Elt::cut href=XML-Twig-pm-129-line.html#7168 Test::Builder::BEGIN@797 href=Test-Builder-pm-5-line.html#797 Test2::Formatter::BEGIN@2 href=Test2-Formatter-pm-69-line.html#2 Test::Builder::BEGIN@15 href=Test-Builder-pm-5-line.html#15 Test2::Hub::Subtest::BEGIN@66 href=Test2-Hub-Subtest-pm-37-line.html#66 builtin::BEGIN@3 href=builtin-pm-101-line.html#3 builtin::BEGIN@4 href=builtin-pm-101-line.html#4 Config::BEGIN@5 href=Config_heavy-pl-22-line.html#5 Archive::Zip::Member::_dataEnded href=Archive-Zip-Member-pm-109-line.html#735 Spreadsheet::ParseXLSX::Cell::BEGIN@10 href=Cell-pm-170-line.html#10 Test2::Event::Plan::init href=Test2-Event-Plan-pm-55-line.html#18 XML::Twig::Elt::__ANON__[(eval 69)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 69)[XML-Twig-pm-5871]-186-line.html#1 constant::BEGIN@141 href=constant-pm-83-line.html#141 XML::Parser::Expat::SetElementDeclHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetElementDeclHandler Symbol::BEGIN@4 href=Symbol-pm-76-line.html#4 Spreadsheet::ParseXLSX::BEGIN@12 href=ParseXLSX-pm-72-line.html#12 List::Util::import href=List-Util-pm-8-line.html#30 Scalar::Util::BEGIN@10 href=Scalar-Util-pm-6-line.html#10 Spreadsheet::ParseExcel::Worksheet::BEGIN@625 href=Spreadsheet-ParseExcel-Worksheet-pm-123-line.html#625 Test2::API::Context::send_ev2 href=Test2-API-Context-pm-61-line.html#216 OLE::Storage_Lite::PPS::BEGIN@12 href=OLE-Storage_Lite-pm-119-line.html#12 Archive::Zip::BEGIN@6 href=Archive-Zip-pm-73-line.html#6 Archive::Zip::BEGIN@25 href=Archive-Zip-pm-73-line.html#25 Test::Builder::BEGIN@1556 href=Test-Builder-pm-5-line.html#1556 Archive::Zip::Archive::BEGIN@7 href=Archive-Zip-Archive-pm-98-line.html#7 overload::BEGIN@84 href=overload-pm-95-line.html#84 Carp::BEGIN@4 href=Carp-pm-13-line.html#4 Encode::Encoding::BEGIN@11 href=Encode-Encoding-pm-107-line.html#11 Test2::API::Instance::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:60] href=Test2-API-Instance-pm-28-line.html#56 Test2::API::Context::DESTROY href=Test2-API-Context-pm-61-line.html#59 Archive::Zip::BEGIN@286 href=Archive-Zip-pm-73-line.html#286 Test2::EventFacet::About::BEGIN@3 href=Test2-EventFacet-About-pm-42-line.html#3 IO::Handle::new href=IO-Handle-pm-79-line.html#319 Test2::Util::BEGIN@2 href=Test2-Util-pm-9-line.html#2 Test2::Util::BEGIN@132 href=Test2-Util-pm-9-line.html#132 XML::Parser::BEGIN@11 href=XML-Parser-pm-132-line.html#11 Archive::Zip::Member::BEGIN@37 href=Archive-Zip-Member-pm-109-line.html#37 Scalar::Util::reftype href=Scalar-Util-pm-6-line.html#Scalar__Util__reftype Archive::Zip::BEGIN@191 href=Archive-Zip-pm-73-line.html#191 CORE::fteexec href=bug-md-11-t-1-line.html#CORE__fteexec XML::Twig::BEGIN@1.68 href=(eval 114)[XML-Twig-pm-1750]-231-line.html#1 XML::Twig::Elt::set_expand_external_entities href=XML-Twig-pm-129-line.html#8387 Test2::API::BEGIN@8 href=Test2-API-pm-24-line.html#8 Test2::EventFacet::About::BEGIN@2 href=Test2-EventFacet-About-pm-42-line.html#2 File::Temp::BEGIN@144 href=File-Temp-pm-87-line.html#144 Archive::Zip::BEGIN@313 href=Archive-Zip-pm-73-line.html#313 XML::Parser::Expat::SetCharacterDataHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetCharacterDataHandler JSON::PP::BEGIN@25 href=JSON-PP-pm-145-line.html#25 Graphics::ColorUtils::BEGIN@5 href=Graphics-ColorUtils-pm-117-line.html#5 Test2::API::test2_formatter href=Test2-API-pm-24-line.html#297 XML::Parser::Expat::ParserRelease href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__ParserRelease Encode::XS::BEGIN@210 href=Encode-pm-103-line.html#210 Test2::EventFacet::Parent::BEGIN@3 href=Test2-EventFacet-Parent-pm-50-line.html#3 URI::Escape::BEGIN@3 href=URI-Escape-pm-174-line.html#3 XML::Twig::Elt::__ANON__[(eval 130)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 74)[XML-Twig-pm-5871]-191-line.html#1 File::Temp::END href=File-Temp-pm-87-line.html#873 Scalar::Util::weaken href=Scalar-Util-pm-6-line.html#Scalar__Util__weaken Test2::API::test2_load_done href=Test2-API-pm-24-line.html#202 Test::Builder::create href=Test-Builder-pm-5-line.html#163 Test::Builder::BEGIN@1167 href=Test-Builder-pm-5-line.html#1167 File::Path::BEGIN@10 href=File-Path-pm-88-line.html#10 Exporter::Heavy::heavy_export_ok_tags href=Exporter-Heavy-pm-27-line.html#249 Spreadsheet::ParseExcel::BEGIN@2705 href=Spreadsheet-ParseExcel-pm-118-line.html#2705 Test::Builder::ctx href=Test-Builder-pm-5-line.html#185 Archive::Zip::BEGIN@291 href=Archive-Zip-pm-73-line.html#291 XML::Twig::Elt::__ANON__[(eval 129)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 129)[XML-Twig-pm-7113]-246-line.html#1 Test2::API::test2_add_callback_post_load href=Test2-API-pm-24-line.html#267 Test2::EventFacet::Plan::BEGIN@7 href=Test2-EventFacet-Plan-pm-51-line.html#7 Test::Builder::BEGIN@18 href=Test-Builder-pm-5-line.html#18 Test2::Event::Diag::BEGIN@8 href=Test2-Event-Diag-pm-53-line.html#8 Test2::API::BEGIN@95 href=Test2-API-pm-24-line.html#95 Test2::Util::Facets2Legacy::BEGIN@1 href=base-pm-66-line.html#1 JSON::PP::BEGIN@8 href=JSON-PP-pm-145-line.html#8 Test2::EventFacet::Info::BEGIN@3 href=Test2-EventFacet-Info-pm-47-line.html#3 Spreadsheet::ParseXLSX::BEGIN@7 href=XML-Twig-pm-129-line.html#7 Encode::BEGIN@53 href=Encode-pm-103-line.html#53 Encode::BEGIN@54 href=Encode-pm-103-line.html#54 JSON::PP::BEGIN@40 href=JSON-PP-pm-145-line.html#40 Archive::Zip::NewFileMember::BEGIN@3 href=Archive-Zip-NewFileMember-pm-115-line.html#3 Graphics::ColorUtils::BEGIN@8 href=Graphics-ColorUtils-pm-117-line.html#8 Carp::BEGIN@574 href=Carp-pm-13-line.html#574 XML::Twig::Elt::BEGIN@1.7 href=(eval 63)[XML-Twig-pm-7113]-180-line.html#1 Test2::API::BEGIN@89 href=Test2-API-pm-24-line.html#89 CORE::readline href=bug-md-11-t-1-line.html#CORE__readline Archive::Zip::BEGIN@212 href=Archive-Zip-pm-73-line.html#212 XML::Twig::Elt::BEGIN@8119 href=XML-Twig-pm-129-line.html#8119 Archive::Zip::NewFileMember::BEGIN@6 href=Archive-Zip-NewFileMember-pm-115-line.html#6 Spreadsheet::ParseExcel::Worksheet::BEGIN@19 href=Spreadsheet-ParseExcel-Worksheet-pm-123-line.html#19 Test2::Util::HashBase::BEGIN@29 href=Test2-Util-HashBase-pm-31-line.html#29 XML::Parser::Expat::current_ns_prefixes href=XML-Parser-Expat-pm-133-line.html#292 Test2::Event::BEGIN@23 href=Test2-Event-pm-41-line.html#23 POSIX::import href=POSIX-pm-10-line.html#174 Test::Builder::Formatter::plan_tap href=Test-Builder-Formatter-pm-67-line.html#25 Test2::API::_context_release_callbacks_ref href=Test2-API-pm-24-line.html#321 IO::BEGIN@5 href=IO-pm-80-line.html#5 XML::Twig::Elt::BEGIN@1.41 href=(eval 97)[XML-Twig-pm-7113]-214-line.html#1 URI::Escape::BEGIN@147 href=URI-Escape-pm-174-line.html#147 Encode::Alias::BEGIN@5 href=Encode-Alias-pm-104-line.html#5 Test::Builder::BEGIN@1539 href=Test-Builder-pm-5-line.html#1539 Archive::Zip::Member::__ANON__ href=Archive-Zip-Member-pm-109-line.html#Archive__Zip__Member____ANON__ Storable::BEGIN@30 href=Storable-pm-106-line.html#30 Test2::Event::BEGIN@16 href=Test2-Event-pm-41-line.html#16 Digest::SHA::BEGIN@56 href=Digest-SHA-pm-165-line.html#56 Archive::Zip::BEGIN@246 href=Archive-Zip-pm-73-line.html#246 Test2::API::Instance::BEGIN@14 href=Test2-API-Instance-pm-28-line.html#14 Compress::Raw::Zlib::BEGIN@156 href=Compress-Raw-Zlib-pm-81-line.html#156 Test::Builder::Formatter::BEGIN@3 href=Test-Builder-Formatter-pm-67-line.html#3 Test2::EventFacet::Trace::BEGIN@16 href=Test2-EventFacet-Trace-pm-29-line.html#16 XML::Twig::Elt::children href=XML-Twig-pm-129-line.html#6269 mro::get_linear_isa href=mro-pm-32-line.html#mro__get_linear_isa Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] href=ParseXLSX-pm-72-line.html#348 Archive::Zip::FileMember::BEGIN@3 href=Archive-Zip-FileMember-pm-112-line.html#3 Compress::Raw::Zlib::BEGIN@145 href=Compress-Raw-Zlib-pm-81-line.html#145 Test::Builder::Formatter::BEGIN@9 href=Test-Builder-Formatter-pm-67-line.html#9 URI::Escape::BEGIN@153 href=URI-Escape-pm-174-line.html#153 Carp::BEGIN@169 href=Carp-pm-13-line.html#169 Test::Builder::BEGIN@5 href=Test-Builder-pm-5-line.html#5 Test2::Hub::finalize href=Test2-Hub-pm-34-line.html#408 XML::Twig::_twig_init href=XML-Twig-pm-129-line.html#1956 XML::Twig::Elt::_join_defined href=XML-Twig-pm-129-line.html#9828 Test2::Util::BEGIN@42 href=Test2-Util-pm-9-line.html#42 Test::Builder::Module::_strip_imports href=Test-Builder-Module-pm-4-line.html#98 Test2::API::Instance::BEGIN@63 href=Test2-API-Instance-pm-28-line.html#63 XML::Parser::Expat::SetEndCdataHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetEndCdataHandler Test2::Util::BEGIN@72 href=Test2-Util-pm-9-line.html#72 Archive::Zip::Archive::BEGIN@16 href=Archive-Zip-Archive-pm-98-line.html#16 XML::Twig::Elt::__ANON__[(eval 87)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 87)[XML-Twig-pm-7113]-204-line.html#1 Archive::Zip::BEGIN@252 href=Archive-Zip-pm-73-line.html#252 Test2::EventFacet::Assert::BEGIN@7 href=Test2-EventFacet-Assert-pm-44-line.html#7 Archive::Zip::NewFileMember::BEGIN@11 href=Archive-Zip-NewFileMember-pm-115-line.html#11 Test::More::BEGIN@1783 href=Test-More-pm-3-line.html#1783 Archive::Zip::BEGIN@311 href=Archive-Zip-pm-73-line.html#311 Spreadsheet::ParseExcel::FmtDefault::BEGIN@22 href=Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html#22 Test2::EventFacet::BEGIN@7 href=Test2-EventFacet-pm-30-line.html#7 JSON::PP::Boolean::BEGIN@3 href=JSON-PP-Boolean-pm-146-line.html#3 base::BEGIN@4 href=base-pm-66-line.html#4 Test2::API::INIT href=Test2-API-pm-24-line.html#72 Archive::Zip::ZipFileMember::BEGIN@11 href=Archive-Zip-ZipFileMember-pm-114-line.html#11 Encode::BEGIN@17 href=Encode-pm-103-line.html#17 Archive::Zip::BEGIN@11 href=Archive-Zip-pm-73-line.html#11 Test::Builder::Formatter::BEGIN@11 href=Test-Builder-Formatter-pm-67-line.html#11 CORE::regcomp href=bug-md-11-t-1-line.html#CORE__regcomp JSON::PP::BEGIN@43 href=JSON-PP-pm-145-line.html#43 Encode::Alias::init_aliases href=Encode-Alias-pm-104-line.html#137 XML::Twig::Elt::BEGIN@7919 href=XML-Twig-pm-129-line.html#7919 Test2::Util::ExternalMeta::BEGIN@3 href=Test2-Util-ExternalMeta-pm-35-line.html#3 Config::AUTOLOAD href=Config-pm-20-line.html#79 Test2::Util::HashBase::BEGIN@33 href=Test2-Util-HashBase-pm-31-line.html#33 Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:88] href=Test-Builder-pm-5-line.html#55 Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] href=ParseXLSX-pm-72-line.html#289 Archive::Zip::Archive::centralDirectoryOffsetWRTStartingDiskNumber href=Archive-Zip-Archive-pm-98-line.html#151 base::has_attr href=base-pm-66-line.html#30 Spreadsheet::ParseExcel::BEGIN@2628 href=Spreadsheet-ParseExcel-pm-118-line.html#2628 Archive::Zip::BEGIN@283 href=Archive-Zip-pm-73-line.html#283 File::Spec::Unix::BEGIN@167 href=File-Spec-Unix-pm-86-line.html#167 Exporter::Heavy::heavy_export_to_level href=Exporter-Heavy-pm-27-line.html#214 parent::BEGIN@21 href=parent-pm-94-line.html#21 Test2::API::Instance::pid href=Test2-API-Instance-pm-28-line.html#49 XML::Twig::_twig_end href=XML-Twig-pm-129-line.html#2296 Test2::Util::BEGIN@71 href=Test2-Util-pm-9-line.html#71 Config::BEGIN@47 href=Config-pm-20-line.html#47 Test2::Event::Bail::BEGIN@2 href=Test2-Event-Bail-pm-56-line.html#2 XML::Twig::Elt::__ANON__[(eval 59)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 59)[XML-Twig-pm-5871]-176-line.html#1 builtin::import href=builtin-pm-101-line.html#builtin__import Archive::Zip::_ISA href=Archive-Zip-pm-73-line.html#326 Test::More::ok href=Test-More-pm-3-line.html#319 IO::Handle::__ANON__ href=IO-Handle-pm-79-line.html#IO__Handle____ANON__ CORE::print href=bug-md-11-t-1-line.html#CORE__print Test2::API::Instance::BEGIN@13 href=Test2-API-Instance-pm-28-line.html#13 Test::Builder::TodoDiag::BEGIN@3 href=Test-Builder-TodoDiag-pm-70-line.html#3 URI::BEGIN@9 href=URI-pm-173-line.html#9 Test2::API::Stack::new_hub href=Test2-API-Stack-pm-33-line.html#17 XML::Twig::BEGIN@4636 href=XML-Twig-pm-129-line.html#4636 Test2::Event::Fail::__ANON__ href=Test2-Event-Fail-pm-63-line.html#Test2__Event__Fail____ANON__ Spreadsheet::ParseXLSX::BEGIN@15 href=ParseXLSX-pm-72-line.html#15 XML::Parser::Expat::SetStartCdataHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetStartCdataHandler warnings::_mkMask href=warnings-pm-2-line.html#542 mro::BEGIN@11 href=mro-pm-32-line.html#11 Test2::API::BEGIN@6 href=Test2-API-pm-24-line.html#6 IO::Handle::BEGIN@275 href=IO-Handle-pm-79-line.html#275 File::Temp::BEGIN@150 href=File-Temp-pm-87-line.html#150 Test2::API::Instance::BEGIN@9 href=Test2-API-Instance-pm-28-line.html#9 Test::Builder::_add_ts_hooks href=Test-Builder-pm-5-line.html#42 Test2::Hub::Subtest::BEGIN@24 href=Test2-Hub-Subtest-pm-37-line.html#24 overloading::BEGIN@2 href=overloading-pm-16-line.html#2 Test2::API::Stack::root href=Test2-API-Stack-pm-33-line.html#66 Test2::API::END href=(eval 56)[Test2-API-pm-72]-171-line.html#1 Archive::Zip::Archive::readFromFileHandle href=Archive-Zip-Archive-pm-98-line.html#737 Archive::Zip::BEGIN@192 href=Archive-Zip-pm-73-line.html#192 Archive::Zip::BEGIN@267 href=Archive-Zip-pm-73-line.html#267 Exporter::export_tags href=Exporter-pm-7-line.html#81 Test::Builder::BEGIN@684 href=Test-Builder-pm-5-line.html#684 OLE::Storage_Lite::PPS::File::BEGIN@713 href=OLE-Storage_Lite-pm-119-line.html#713 Test2::Hub::plan href=Test2-Hub-pm-34-line.html#496 URI::Escape::BEGIN@4 href=URI-Escape-pm-174-line.html#4 Test2::Formatter::TAP::BEGIN@3 href=Test2-Formatter-TAP-pm-68-line.html#3 Archive::Zip::BEGIN@253 href=Archive-Zip-pm-73-line.html#253 XML::Twig::_tag_cond href=XML-Twig-pm-129-line.html#1763 Archive::Zip::_readSignature href=Archive-Zip-pm-73-line.html#509 Test2::Event::Subtest::BEGIN@3 href=Test2-Event-Subtest-pm-60-line.html#3 XML::Twig::Elt::BEGIN@5096 href=XML-Twig-pm-129-line.html#5096 Spreadsheet::ParseXLSX::_check_signature href=ParseXLSX-pm-72-line.html#110 Test::Builder::Formatter::init href=Test-Builder-Formatter-pm-67-line.html#19 Archive::Zip::Member::BEGIN@28 href=Archive-Zip-Member-pm-109-line.html#28 Test::More::BEGIN@209 href=Test-More-pm-3-line.html#209 XML::Twig::BEGIN@1.46 href=(eval 102)[XML-Twig-pm-1750]-219-line.html#1 Spreadsheet::ParseExcel::Cell::BEGIN@169 href=Spreadsheet-ParseExcel-Cell-pm-126-line.html#169 Test2::EventFacet::Trace::BEGIN@7 href=Test2-EventFacet-Trace-pm-29-line.html#7 Carp::BEGIN@6 href=Carp-pm-13-line.html#6 XML::Twig::Elt::set_destroy href=XML-Twig-pm-129-line.html#8108 Errno::BEGIN@8 href=Errno-pm-91-line.html#8 Compress::Raw::Zlib::inflateStream::inflate href=Compress-Raw-Zlib-pm-81-line.html#Compress__Raw__Zlib__inflateStream__inflate Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader href=Archive-Zip-ZipFileMember-pm-114-line.html#367 Time::Local::BEGIN@35 href=Time-Local-pm-110-line.html#35 XML::Twig::Elt::BEGIN@1.19 href=(eval 75)[XML-Twig-pm-5871]-192-line.html#1 Test2::Hub::BEGIN@9 href=Test2-Hub-pm-34-line.html#9 JSON::PP::Boolean::BEGIN@5 href=JSON-PP-Boolean-pm-146-line.html#5 Test2::Formatter::TAP::_open_handles href=Test2-Formatter-TAP-pm-68-line.html#53 Graphics::ColorUtils::BEGIN@242 href=Graphics-ColorUtils-pm-117-line.html#242 Archive::Zip::BEGIN@14 href=Archive-Zip-pm-73-line.html#14 Archive::Zip::Member::BEGIN@36 href=Archive-Zip-Member-pm-109-line.html#36 Time::Local::_daygm href=Time-Local-pm-110-line.html#97 Archive::Zip::Archive::_findEndOfCentralDirectory href=Archive-Zip-Archive-pm-98-line.html#1022 Test2::Util::HashBase::import href=Test2-Util-HashBase-pm-31-line.html#55 parent::import href=parent-pm-94-line.html#6 Test::Builder::TodoDiag::BEGIN@7 href=Test-Builder-TodoDiag-pm-70-line.html#7 Digest::SHA::BEGIN@6 href=Digest-SHA-pm-165-line.html#6 Test2::EventFacet::Trace::BEGIN@11 href=Test2-EventFacet-Trace-pm-29-line.html#11 Archive::Zip::Member::contents href=Archive-Zip-Member-pm-109-line.html#1267 Archive::Zip::Archive::new href=Archive-Zip-Archive-pm-98-line.html#33 Spreadsheet::ParseXLSX::BEGIN@1 href=XML-Twig-pm-129-line.html#1 Compress::Raw::Zlib::BEGIN@155 href=Compress-Raw-Zlib-pm-81-line.html#155 XML::Twig::Elt::twig href=XML-Twig-pm-129-line.html#5787 Compress::Raw::Zlib::BEGIN@146 href=Compress-Raw-Zlib-pm-81-line.html#146 OLE::Storage_Lite::BEGIN@1383 href=OLE-Storage_Lite-pm-119-line.html#1383 Archive::Zip::BEGIN@211 href=Archive-Zip-pm-73-line.html#211 Test2::API::Instance::tid href=Test2-API-Instance-pm-28-line.html#50 Test::Builder::BEGIN@9 href=Test-Builder-pm-5-line.html#9 XML::Twig::BEGIN@3852 href=XML-Twig-pm-129-line.html#3852 Archive::Zip::DirectoryMember::BEGIN@4 href=Archive-Zip-DirectoryMember-pm-113-line.html#4 Spreadsheet::ParseExcel::BEGIN@18 href=Spreadsheet-ParseExcel-pm-118-line.html#18 XML::Twig::Elt::BEGIN@8404 href=XML-Twig-pm-129-line.html#8404 Time::Local::BEGIN@5 href=Time-Local-pm-110-line.html#5 XML::Parser::Expat::BEGIN@460 href=XML-Parser-Expat-pm-133-line.html#460 CORE::qr href=bug-md-11-t-1-line.html#CORE__qr Crypt::Cipher::BEGIN@4 href=Crypt-Cipher-pm-140-line.html#4 Spreadsheet::ParseExcel::BEGIN@31 href=Spreadsheet-ParseExcel-pm-118-line.html#31 XML::Twig::BEGIN@1.60 href=(eval 106)[XML-Twig-pm-1750]-223-line.html#1 XML::Twig::Elt::BEGIN@1.38 href=(eval 94)[XML-Twig-pm-5871]-211-line.html#1 utf8::BEGIN@4 href=utf8-pm-131-line.html#4 XML::Twig::set_keep_encoding href=XML-Twig-pm-129-line.html#3771 Archive::Zip::Archive::centralDirectorySize href=Archive-Zip-Archive-pm-98-line.html#147 vars::import href=vars-pm-49-line.html#10 Test2::Formatter::TAP::print_optimal_pass href=Test2-Formatter-TAP-pm-68-line.html#130 Test2::Event::Exception::BEGIN@2 href=Test2-Event-Exception-pm-57-line.html#2 Test::Builder::BEGIN@102 href=Test-Builder-pm-5-line.html#102 OLE::Storage_Lite::PPS::Root::BEGIN@171 href=OLE-Storage_Lite-pm-119-line.html#171 Carp::BEGIN@49 href=Carp-pm-13-line.html#49 Carp::_fetch_sub href=Carp-pm-13-line.html#28 Archive::Zip::Member::rewindData href=Archive-Zip-Member-pm-109-line.html#1196 Test2::API::Context::BEGIN@10 href=Test2-API-Context-pm-61-line.html#10 Archive::Zip::Member::_mapPermissionsToUnix href=Archive-Zip-Member-pm-109-line.html#319 XML::Twig::Elt::BEGIN@1.11 href=(eval 67)[XML-Twig-pm-5871]-184-line.html#1 Archive::Zip::BEGIN@3 href=Archive-Zip-pm-73-line.html#3 Test2::Util::HashBase::BEGIN@94 href=Test2-Util-HashBase-pm-31-line.html#94 Tie::Hash::BEGIN@190 href=Tie-Hash-pm-12-line.html#190 Test::Builder::Module::builder href=Test-Builder-Module-pm-4-line.html#171 Test2::Util::BEGIN@9 href=Test2-Util-pm-9-line.html#9 constant::BEGIN@65 href=constant-pm-83-line.html#65 Archive::Zip::BEGIN@237 href=Archive-Zip-pm-73-line.html#237 Test2::Hub::process href=Test2-Hub-pm-34-line.html#319 XML::Twig::Elt::__ANON__[(eval 97)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] href=(eval 97)[XML-Twig-pm-7113]-214-line.html#1 Test2::EventFacet::Parent::BEGIN@10 href=Test2-EventFacet-Parent-pm-50-line.html#10 Spreadsheet::ParseExcel::BEGIN@70 href=Spreadsheet-ParseExcel-pm-118-line.html#70 UNIVERSAL::can href=UNIVERSAL-pm-130-line.html#UNIVERSAL__can bytes::BEGIN@3 href=bytes-pm-82-line.html#3 MIME::Base64::BEGIN@3 href=MIME-Base64-pm-167-line.html#3 XML::Twig::Elt::in href=XML-Twig-pm-129-line.html#6589 Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS href=Archive-Zip-Member-pm-109-line.html#Archive__Zip__Member__DEFAULT_FILE_PERMISSIONS overload::OVERLOAD href=overload-pm-95-line.html#31 Encode::utf8::BEGIN@215 href=Encode-pm-103-line.html#215 XML::Twig::_twig_char href=XML-Twig-pm-129-line.html#2445 Archive::Zip::BEGIN@282 href=Archive-Zip-pm-73-line.html#282 Test2::EventFacet::Trace::BEGIN@3 href=Test2-EventFacet-Trace-pm-29-line.html#3 Archive::Zip::BEGIN@292 href=Archive-Zip-pm-73-line.html#292 File::Path::BEGIN@27 href=File-Path-pm-88-line.html#27 integer::import href=integer-pm-111-line.html#85 XML::Twig::BEGIN@812 href=XML-Twig-pm-129-line.html#812 XML::Twig::Elt::set_atts href=XML-Twig-pm-129-line.html#6136 Archive::Zip::Archive::members href=Archive-Zip-Archive-pm-98-line.html#80 XML::Twig::Elt::next_sibling href=XML-Twig-pm-129-line.html#6067 Spreadsheet::ParseExcel::Worksheet::new href=Spreadsheet-ParseExcel-Worksheet-pm-123-line.html#29 File::Temp::BEGIN@147 href=File-Temp-pm-87-line.html#147 XML::Twig::Elt::__ANON__[(eval 67)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] href=(eval 67)[XML-Twig-pm-5871]-184-line.html#1 Time::HiRes::constant href=Time-HiRes-pm-25-line.html#Time__HiRes__constant IO::Handle::opened href=IO-Handle-pm-79-line.html#403 Test2::Event::Bail::BEGIN@9 href=Test2-Event-Bail-pm-56-line.html#9 JSON::PP::BEGIN@62 href=JSON-PP-pm-145-line.html#62 Test2::EventFacet::Hub::BEGIN@10 href=Test2-EventFacet-Hub-pm-52-line.html#10 JSON::PP::BEGIN@209 href=JSON-PP-pm-145-line.html#209 XML::Parser::Expat::SetXMLDeclHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetXMLDeclHandler Test2::Event::V2::non_facet_keys href=Test2-Event-V2-pm-64-line.html#19 Test2::Event::Exception::BEGIN@8 href=Test2-Event-Exception-pm-57-line.html#8 Archive::Zip::BEGIN@251 href=Archive-Zip-pm-73-line.html#251 JSON::BEGIN@1 href=(eval 18)[JSON-pm-308]-144-line.html#1 constant::BEGIN@24 href=constant-pm-83-line.html#24 XML::Twig::Elt::BEGIN@1.40 href=(eval 96)[XML-Twig-pm-5871]-213-line.html#1 Compress::Raw::Zlib::BEGIN@147 href=Compress-Raw-Zlib-pm-81-line.html#147 Fcntl::O_NOFOLLOW href=Fcntl-pm-11-line.html#Fcntl__O_NOFOLLOW vars::BEGIN@7 href=vars-pm-49-line.html#7 Tie::Hash::BEGIN@191 href=Tie-Hash-pm-12-line.html#191 Test2::EventFacet::Plan::BEGIN@8 href=Test2-EventFacet-Plan-pm-51-line.html#8 Archive::Zip::BEGIN@312 href=Archive-Zip-pm-73-line.html#312 XML::Twig::_set_handler href=XML-Twig-pm-129-line.html#1493 XML::Twig::Elt::BEGIN@1 href=(eval 58)[XML-Twig-pm-7113]-175-line.html#1 Test2::Event::Pass::BEGIN@7 href=Test2-Event-Pass-pm-62-line.html#7 XML::Twig::Elt::BEGIN@1.30 href=(eval 86)[XML-Twig-pm-5871]-203-line.html#1 Test2::Formatter::TAP::init href=Test2-Formatter-TAP-pm-68-line.html#44 Test2::Util::HashBase::BEGIN@18 href=Test2-Util-HashBase-pm-31-line.html#18 Archive::Zip::Archive::zip64 href=Archive-Zip-Archive-pm-98-line.html#109 Archive::Zip::Member::BEGIN@8 href=Archive-Zip-Member-pm-109-line.html#8 Test2::Event::V2::BEGIN@3 href=Test2-Event-V2-pm-64-line.html#3 Graphics::ColorUtils::BEGIN@6 href=Graphics-ColorUtils-pm-117-line.html#6 Storable::BEGIN@109 href=Storable-pm-106-line.html#109 File::Copy::BEGIN@15 href=File-Copy-pm-100-line.html#15 strict::unimport href=strict-pm-249-line.html#65 Test2::Hub::init href=Test2-Hub-pm-34-line.html#41 Encode::define_encoding href=Encode-pm-103-line.html#98 Encode::Config::BEGIN@7 href=Encode-Config-pm-108-line.html#7 XML::Twig::BEGIN@1.59 href=(eval 115)[XML-Twig-pm-1750]-232-line.html#1 Compress::Raw::Zlib::BEGIN@153 href=Compress-Raw-Zlib-pm-81-line.html#153 Encode::MIME::Name::BEGIN@3 href=Encode-MIME-Name-pm-105-line.html#3 Spreadsheet::ParseExcel::BEGIN@62 href=Spreadsheet-ParseExcel-pm-118-line.html#62 Archive::Zip::BEGIN@239 href=Archive-Zip-pm-73-line.html#239 JSON::PP::BEGIN@35 href=JSON-PP-pm-145-line.html#35 Test2::Event::Note::BEGIN@2 href=Test2-Event-Note-pm-54-line.html#2 Test2::API::Context::BEGIN@13 href=Test2-API-Context-pm-61-line.html#13 XML::Twig::BEGIN@148 href=XML-Twig-pm-129-line.html#148 XML::Twig::BEGIN@1.65 href=(eval 111)[XML-Twig-pm-1750]-228-line.html#1 Test2::API::context href=Test2-API-pm-24-line.html#371 Archive::Zip::BEGIN@188 href=Archive-Zip-pm-73-line.html#188 Archive::Zip::BEGIN@198 href=Archive-Zip-pm-73-line.html#198 Encode::utf8::BEGIN@229 href=Encode-pm-103-line.html#229 File::Temp::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Temp.pm:252] href=File-Temp-pm-87-line.html#252 Test::Builder::use_numbers href=Test-Builder-pm-5-line.html#1217 Spreadsheet::ParseExcel::Utility::BEGIN@19 href=Spreadsheet-ParseExcel-Utility-pm-128-line.html#19 Exporter::export href=Exporter-pm-7-line.html#21 Test2::API::test2_stack href=Test2-API-pm-24-line.html#211 Test2::EventFacet::Hub::BEGIN@3 href=Test2-EventFacet-Hub-pm-52-line.html#3 Encode::Encoding::BEGIN@5 href=Encode-Encoding-pm-107-line.html#5 Test2::API::test2_stderr href=Test2-API-pm-24-line.html#189 Archive::Zip::FileMember::BEGIN@6 href=Archive-Zip-FileMember-pm-112-line.html#6 Test2::EventFacet::Trace::snapshot href=Test2-EventFacet-Trace-pm-29-line.html#34 File::Temp::BEGIN@228 href=File-Temp-pm-87-line.html#228 Test2::API::Context::BEGIN@26 href=Test2-API-Context-pm-61-line.html#26 XML::Parser::Expat::SetNotationDeclHandler href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__SetNotationDeclHandler Archive::Zip::BEGIN@256 href=Archive-Zip-pm-73-line.html#256 Archive::Zip::BEGIN@269 href=Archive-Zip-pm-73-line.html#269 Encode::BEGIN@6 href=Encode-pm-103-line.html#6 XML::Parser::Expat::recognized_string href=XML-Parser-Expat-pm-133-line.html#164 XML::Parser::Expat::namespace href=XML-Parser-Expat-pm-133-line.html#249 Test2::Hub::Interceptor::Terminator::BEGIN@3 href=Test2-Hub-Interceptor-Terminator-pm-39-line.html#3 XML::Twig::_twig_end_check_roots href=XML-Twig-pm-129-line.html#4188 Crypt::Cipher::BEGIN@9 href=Crypt-Cipher-pm-140-line.html#9 Spreadsheet::ParseExcel::Workbook::new href=Spreadsheet-ParseExcel-Workbook-pm-122-line.html#30 Archive::Zip::BEGIN@288 href=Archive-Zip-pm-73-line.html#288 OLE::Storage_Lite::BEGIN@830 href=OLE-Storage_Lite-pm-119-line.html#830 Test2::API::test2_set_is_end href=Test2-API-pm-24-line.html#21 Archive::Zip::BEGIN@298 href=Archive-Zip-pm-73-line.html#298 XML::Parser::Expat::ParserCreate href=XML-Parser-Expat-pm-133-line.html#XML__Parser__Expat__ParserCreate URI::Escape::BEGIN@191 href=URI-Escape-pm-174-line.html#191 Test::Builder::BEGIN@1518 href=Test-Builder-pm-5-line.html#1518 XML::Twig::_checked_parse_result href=XML-Twig-pm-129-line.html#789 Test2::Event::Subtest::BEGIN@8 href=Test2-Event-Subtest-pm-60-line.html#8 Exporter::BEGIN@4 href=Exporter-pm-7-line.html#4 Digest::Perl::MD5::BEGIN@4 href=Digest-Perl-MD5-pm-121-line.html#4 XML::Twig::__ANON__[(eval 106)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:17] href=(eval 106)[XML-Twig-pm-1750]-223-line.html#1 Test2::Hub::BEGIN@11 href=Test2-Hub-pm-34-line.html#11 Test::Builder::Module::BEGIN@5 href=Test-Builder-Module-pm-4-line.html#5 Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655] href=ParseXLSX-pm-72-line.html#648 OLE::Storage_Lite::BEGIN@832 href=OLE-Storage_Lite-pm-119-line.html#832 Test::Builder::BEGIN@4 href=Test-Builder-pm-5-line.html#4 Test::More::BEGIN@1494 href=Test-More-pm-3-line.html#1494 Archive::Zip::BEGIN@213 href=Archive-Zip-pm-73-line.html#213 XML::Twig::BEGIN@439 href=XML-Twig-pm-129-line.html#439 Spreadsheet::ParseXLSX::Cell::BEGIN@3 href=Cell-pm-170-line.html#3 OLE::Storage_Lite::PPS::Dir::BEGIN@801 href=OLE-Storage_Lite-pm-119-line.html#801 XML::Twig::Elt::BEGIN@5082 href=XML-Twig-pm-129-line.html#5082 Compress::Raw::Zlib::BEGIN@130 href=Compress-Raw-Zlib-pm-81-line.html#130 Spreadsheet::ParseXLSX::_parse_xml href=ParseXLSX-pm-72-line.html#1028 OLE::Storage_Lite::BEGIN@828 href=OLE-Storage_Lite-pm-119-line.html#828 Test::More::done_testing href=Test-More-pm-3-line.html#247 Archive::Zip::BEGIN@35 href=Archive-Zip-pm-73-line.html#35 JSON::_load_pp href=JSON-pm-142-line.html#323 Test2::Formatter::TAP::event_tap href=Test2-Formatter-TAP-pm-68-line.html#162 Test2::EventFacet::Parent::BEGIN@7 href=Test2-EventFacet-Parent-pm-50-line.html#7 Test::Builder::BEGIN@117 href=Test-Builder-pm-5-line.html#117 OLE::Storage_Lite::PPS::Root::BEGIN@170 href=OLE-Storage_Lite-pm-119-line.html#170 Spreadsheet::ParseXLSX::Decryptor::BEGIN@15 href=Decryptor-pm-138-line.html#15 XML::Twig::Elt::BEGIN@1.47 href=(eval 103)[XML-Twig-pm-7113]-220-line.html#1 Archive::Zip::ZipFileMember::_readRawChunk href=Archive-Zip-ZipFileMember-pm-114-line.html#467 Config::import href=Config-pm-20-line.html#40 Test2::API::Context::release href=Test2-API-Context-pm-61-line.html#120 Test::Builder::BEGIN@37 href=Test-Builder-pm-5-line.html#37 CryptX::BEGIN@10 href=CryptX-pm-141-line.html#10 Test2::API::Context::BEGIN@25 href=Test2-API-Context-pm-61-line.html#25 Test2::Event::eid href=Test2-Event-pm-41-line.html#123 XML::Twig::new href=XML-Twig-pm-129-line.html#450 SelectSaver::BEGIN@38 href=SelectSaver-pm-77-line.html#38 Test2::Event::BEGIN@7 href=Test2-Event-pm-41-line.html#7 Test2::API::BEGIN@3 href=Test2-API-pm-24-line.html#3 Test2::EventFacet::Hub::BEGIN@11 href=Test2-EventFacet-Hub-pm-52-line.html#11 File::Basename::BEGIN@371 href=File-Basename-pm-89-line.html#371 Test2::Event::V2::BEGIN@12 href=Test2-Event-V2-pm-64-line.html#12 Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Util-ExternalMeta-pm-35-line.html0000644000175000017500000007264614576335353025136 0ustar michamicha Profile of Test2/Util/ExternalMeta.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/ExternalMeta.pm
StatementsExecuted 43 statements in 334µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
33114µs17µsTest2::Util::ExternalMeta::::metaTest2::Util::ExternalMeta::meta
11110µs11µsTest2::Util::ExternalMeta::::BEGIN@2Test2::Util::ExternalMeta::BEGIN@2
1117µs7µsTest2::Util::ExternalMeta::::BEGIN@13Test2::Util::ExternalMeta::BEGIN@13
3114µs4µsTest2::Util::ExternalMeta::::validate_keyTest2::Util::ExternalMeta::validate_key
1114µs19µsTest2::Util::ExternalMeta::::BEGIN@8Test2::Util::ExternalMeta::BEGIN@8
1113µs20µsTest2::Util::ExternalMeta::::BEGIN@3Test2::Util::ExternalMeta::BEGIN@3
0000s0sTest2::Util::ExternalMeta::::delete_metaTest2::Util::ExternalMeta::delete_meta
0000s0sTest2::Util::ExternalMeta::::get_metaTest2::Util::ExternalMeta::get_meta
0000s0sTest2::Util::ExternalMeta::::set_metaTest2::Util::ExternalMeta::set_meta
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Util::ExternalMeta;
2218µs213µs
# spent 11µs (10+2) within Test2::Util::ExternalMeta::BEGIN@2 which was called: # once (10µs+2µs) by Test2::Hub::BEGIN@14 at line 2
use strict;
# spent 11µs making 1 call to Test2::Util::ExternalMeta::BEGIN@2 # spent 2µs making 1 call to strict::import
3227µs236µs
# spent 20µs (3+16) within Test2::Util::ExternalMeta::BEGIN@3 which was called: # once (3µs+16µs) by Test2::Hub::BEGIN@14 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Util::ExternalMeta::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51400nsour $VERSION = '1.302198';
6
7
8246µs234µs
# spent 19µs (4+15) within Test2::Util::ExternalMeta::BEGIN@8 which was called: # once (4µs+15µs) by Test2::Hub::BEGIN@14 at line 8
use Carp qw/croak/;
# spent 19µs making 1 call to Test2::Util::ExternalMeta::BEGIN@8 # spent 15µs making 1 call to Exporter::import
9
10sub META_KEY() { '_meta' }
11
121800nsour @EXPORT = qw/meta set_meta get_meta delete_meta/;
132221µs17µs
# spent 7µs within Test2::Util::ExternalMeta::BEGIN@13 which was called: # once (7µs+0s) by Test2::Hub::BEGIN@14 at line 13
BEGIN { require Exporter; our @ISA = qw(Exporter) }
# spent 7µs making 1 call to Test2::Util::ExternalMeta::BEGIN@13
14
15sub set_meta {
16 my $self = shift;
17 my ($key, $value) = @_;
18
19 validate_key($key);
20
21 $self->{+META_KEY} ||= {};
22 $self->{+META_KEY}->{$key} = $value;
23}
24
25sub get_meta {
26 my $self = shift;
27 my ($key) = @_;
28
29 validate_key($key);
30
31 my $meta = $self->{+META_KEY} or return undef;
32 return $meta->{$key};
33}
34
35sub delete_meta {
36 my $self = shift;
37 my ($key) = @_;
38
39 validate_key($key);
40
41 my $meta = $self->{+META_KEY} or return undef;
42 delete $meta->{$key};
43}
44
45
# spent 17µs (14+4) within Test2::Util::ExternalMeta::meta which was called 3 times, avg 6µs/call: # once (6µs+2µs) by Test::Builder::done_testing at line 586 of Test/Builder.pm # once (5µs+1µs) by Test::Builder::reset at line 455 of Test/Builder.pm # once (3µs+900ns) by Test::Builder::_ending at line 1657 of Test/Builder.pm
sub meta {
463500ns my $self = shift;
4731µs my ($key, $default) = @_;
48
4933µs34µs validate_key($key);
# spent 4µs making 3 calls to Test2::Util::ExternalMeta::validate_key, avg 1µs/call
50
513900ns my $meta = $self->{+META_KEY};
523600ns return undef unless $meta || defined($default);
53
543600ns unless($meta) {
551200ns $meta = {};
561300ns $self->{+META_KEY} = $meta;
57 }
58
59 $meta->{$key} = $default
6032µs if defined($default) && !defined($meta->{$key});
61
6235µs return $meta->{$key};
63}
64
65
# spent 4µs within Test2::Util::ExternalMeta::validate_key which was called 3 times, avg 1µs/call: # 3 times (4µs+0s) by Test2::Util::ExternalMeta::meta at line 49, avg 1µs/call
sub validate_key {
663500ns my $key = shift;
67
6835µs return if $key && !ref($key);
69
70 my $render_key = defined($key) ? "'$key'" : 'undef';
71 croak "Invalid META key: $render_key, keys must be true, and may not be references";
72}
73
7412µs1;
75
76__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Crypt-Mode-CBC-pm-139-line.html0000644000175000017500000010334114576335353023253 0ustar michamicha Profile of Crypt/Mode/CBC.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Crypt/Mode/CBC.pm
StatementsExecuted 8 statements in 182µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111155µs9.64msCrypt::Mode::CBC::::BEGIN@9Crypt::Mode::CBC::BEGIN@9
1118µs10µsCrypt::Mode::CBC::::BEGIN@5Crypt::Mode::CBC::BEGIN@5
1113µs18µsCrypt::Mode::CBC::::BEGIN@6Crypt::Mode::CBC::BEGIN@6
0000s0sCrypt::Mode::CBC::::CLONE_SKIPCrypt::Mode::CBC::CLONE_SKIP
0000s0sCrypt::Mode::CBC::::decryptCrypt::Mode::CBC::decrypt
0000s0sCrypt::Mode::CBC::::encryptCrypt::Mode::CBC::encrypt
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Crypt::Mode::CBC;
2
3### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY!
4
5216µs211µs
# spent 10µs (8+1) within Crypt::Mode::CBC::BEGIN@5 which was called: # once (8µs+1µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 at line 5
use strict;
# spent 10µs making 1 call to Crypt::Mode::CBC::BEGIN@5 # spent 1µs making 1 call to strict::import
6220µs232µs
# spent 18µs (3+14) within Crypt::Mode::CBC::BEGIN@6 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 at line 6
use warnings;
# spent 18µs making 1 call to Crypt::Mode::CBC::BEGIN@6 # spent 14µs making 1 call to warnings::import
71300nsour $VERSION = '0.080';
8
92144µs29.64ms
# spent 9.64ms (155µs+9.48) within Crypt::Mode::CBC::BEGIN@9 which was called: # once (155µs+9.48ms) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 at line 9
use Crypt::Cipher;
# spent 9.64ms making 1 call to Crypt::Mode::CBC::BEGIN@9 # spent 1µs making 1 call to UNIVERSAL::import
10
11sub encrypt {
12 my ($self, $pt) = (shift, shift);
13 local $SIG{__DIE__} = \&CryptX::_croak;
14 $self->start_encrypt(@_)->add($pt) . $self->finish;
15}
16
17sub decrypt {
18 my ($self, $ct) = (shift, shift);
19 local $SIG{__DIE__} = \&CryptX::_croak;
20 $self->start_decrypt(@_)->add($ct) . $self->finish;
21}
22
23sub CLONE_SKIP { 1 } # prevent cloning
24
2512µs1;
26
27=pod
28
29=head1 NAME
30
31Crypt::Mode::CBC - Block cipher mode CBC [Cipher-block chaining]
32
33=head1 SYNOPSIS
34
35 use Crypt::Mode::CBC;
36 my $m = Crypt::Mode::CBC->new('AES');
37
38 #(en|de)crypt at once
39 my $ciphertext = $m->encrypt($plaintext, $key, $iv);
40 my $plaintext = $m->decrypt($ciphertext, $key, $iv);
41
42 #encrypt more chunks
43 $m->start_encrypt($key, $iv);
44 my $ciphertext = $m->add('some data');
45 $ciphertext .= $m->add('more data');
46 $ciphertext .= $m->finish;
47
48 #decrypt more chunks
49 $m->start_decrypt($key, $iv);
50 my $plaintext = $m->add($some_ciphertext);
51 $plaintext .= $m->add($more_ciphertext);
52 $plaintext .= $m->finish;
53
54=head1 DESCRIPTION
55
56This module implements CBC cipher mode. B<NOTE:> it works only with ciphers from L<CryptX> (Crypt::Cipher::NNNN).
57
58=head1 METHODS
59
60=head2 new
61
62 my $m = Crypt::Mode::CBC->new($name);
63 #or
64 my $m = Crypt::Mode::CBC->new($name, $padding);
65 #or
66 my $m = Crypt::Mode::CBC->new($name, $padding, $cipher_rounds);
67
68 # $name ....... one of 'AES', 'Anubis', 'Blowfish', 'CAST5', 'Camellia', 'DES', 'DES_EDE',
69 # 'KASUMI', 'Khazad', 'MULTI2', 'Noekeon', 'RC2', 'RC5', 'RC6',
70 # 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64',
71 # 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent'
72 # simply any <NAME> for which there exists Crypt::Cipher::<NAME>
73 # $padding .... 0 no padding (plaintext size has to be multiple of block length)
74 # 1 PKCS5 padding, Crypt::CBC's "standard" - DEFAULT
75 # 2 Crypt::CBC's "oneandzeroes"
76 # 3 ANSI X.923 padding
77 # 4 zero padding
78 # 5 zero padding (+a block of zeros if the output length is divisible by the blocksize)
79 # $cipher_rounds ... optional num of rounds for given cipher
80
81=head2 encrypt
82
83 my $ciphertext = $m->encrypt($plaintext, $key, $iv);
84
85=head2 decrypt
86
87 my $plaintext = $m->decrypt($ciphertext, $key, $iv);
88
89=head2 start_encrypt
90
91 $m->start_encrypt($key, $iv);
92
93=head2 start_decrypt
94
95 $m->start_decrypt($key, $iv);
96
97=head2 add
98
99 # in encrypt mode
100 my $plaintext = $m->add($ciphertext);
101
102 # in decrypt mode
103 my $ciphertext = $m->add($plaintext);
104
105=head2 finish
106
107 #encrypt more chunks
108 $m->start_encrypt($key, $iv);
109 my $ciphertext = '';
110 $ciphertext .= $m->add('some data');
111 $ciphertext .= $m->add('more data');
112 $ciphertext .= $m->finish;
113
114 #decrypt more chunks
115 $m->start_decrypt($key, $iv);
116 my $plaintext = '';
117 $plaintext .= $m->add($some_ciphertext);
118 $plaintext .= $m->add($more_ciphertext);
119 $plaintext .= $m->finish;
120
121=head1 SEE ALSO
122
123=over
124
125=item * L<CryptX|CryptX>, L<Crypt::Cipher>
126
127=item * L<Crypt::Cipher::AES>, L<Crypt::Cipher::Blowfish>, ...
128
129=item * L<https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29>
130
131=back
132
133=cut










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 97)[XML-Twig-pm-7113]-214-line.html0000644000175000017500000004102114576335353024333 0ustar michamicha Profile of (eval 97)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 97)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 11 statements in 92µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11116µs855µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs16µsXML::Twig::Elt::::BEGIN@1.41XML::Twig::Elt::BEGIN@1.41
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11192µs6865µs
# spent 855µs (16+840) within XML::Twig::Elt::__ANON__[(eval 97)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (16µs+840µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.41 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:cellXfs') } @results;@results= grep defined, map { $_->children( 's:xf') } @results;return XML::Twig::_unique_elts( @results); }
# spent 536µs making 1 call to XML::Twig::_unique_elts # spent 167µs making 1 call to XML::Twig::descendants # spent 132µs making 1 call to XML::Twig::Elt::children # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.41 # spent 10µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Pass-pm-62-line.html0000644000175000017500000007261214576335353023610 0ustar michamicha Profile of Test2/Event/Pass.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Pass.pm
StatementsExecuted 13 statements in 287µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11123µs23µsTest2::Event::Pass::::BEGIN@7Test2::Event::Pass::BEGIN@7
11111µs12µsTest2::Event::Pass::::BEGIN@2Test2::Event::Pass::BEGIN@2
1118µs8µsTest2::Event::Pass::::BEGIN@9Test2::Event::Pass::BEGIN@9
1114µs57µsTest2::Event::Pass::::BEGIN@15Test2::Event::Pass::BEGIN@15
1114µs20µsTest2::Event::Pass::::BEGIN@3Test2::Event::Pass::BEGIN@3
111400ns400nsTest2::Event::Pass::::__ANON__Test2::Event::Pass::__ANON__ (xsub)
0000s0sTest2::Event::Pass::::add_infoTest2::Event::Pass::add_info
0000s0sTest2::Event::Pass::::causes_failTest2::Event::Pass::causes_fail
0000s0sTest2::Event::Pass::::diagnosticsTest2::Event::Pass::diagnostics
0000s0sTest2::Event::Pass::::facet_dataTest2::Event::Pass::facet_data
0000s0sTest2::Event::Pass::::globalTest2::Event::Pass::global
0000s0sTest2::Event::Pass::::increments_countTest2::Event::Pass::increments_count
0000s0sTest2::Event::Pass::::no_displayTest2::Event::Pass::no_display
0000s0sTest2::Event::Pass::::sets_planTest2::Event::Pass::sets_plan
0000s0sTest2::Event::Pass::::subtest_idTest2::Event::Pass::subtest_id
0000s0sTest2::Event::Pass::::summaryTest2::Event::Pass::summary
0000s0sTest2::Event::Pass::::terminateTest2::Event::Pass::terminate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Pass;
2221µs214µs
# spent 12µs (11+2) within Test2::Event::Pass::BEGIN@2 which was called: # once (11µs+2µs) by Test::Builder::BEGIN@18 at line 2
use strict;
# spent 12µs making 1 call to Test2::Event::Pass::BEGIN@2 # spent 2µs making 1 call to strict::import
3227µs237µs
# spent 20µs (4+16) within Test2::Event::Pass::BEGIN@3 which was called: # once (4µs+16µs) by Test::Builder::BEGIN@18 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Event::Pass::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7255µs223µs
# spent 23µs (23+400ns) within Test2::Event::Pass::BEGIN@7 which was called: # once (23µs+400ns) by Test::Builder::BEGIN@18 at line 7
use Test2::EventFacet::Info;
# spent 23µs making 1 call to Test2::Event::Pass::BEGIN@7 # spent 400ns making 1 call to Test2::Event::Pass::__ANON__
8
9
# spent 8µs within Test2::Event::Pass::BEGIN@9 which was called: # once (8µs+0s) by Test::Builder::BEGIN@18 at line 13
BEGIN {
101300ns require Test2::Event;
1115µs our @ISA = qw(Test2::Event);
1213µs *META_KEY = \&Test2::Util::ExternalMeta::META_KEY;
13116µs18µs}
# spent 8µs making 1 call to Test2::Event::Pass::BEGIN@9
14
152159µs2110µs
# spent 57µs (4+53) within Test2::Event::Pass::BEGIN@15 which was called: # once (4µs+53µs) by Test::Builder::BEGIN@18 at line 15
use Test2::Util::HashBase qw{ -name -info };
# spent 57µs making 1 call to Test2::Event::Pass::BEGIN@15 # spent 53µs making 1 call to Test2::Util::HashBase::import
16
17##############
18# Old API
19sub summary { "pass" }
20sub increments_count { 1 }
21sub causes_fail { 0 }
22sub diagnostics { 0 }
23sub no_display { 0 }
24sub subtest_id { undef }
25sub terminate { () }
26sub global { () }
27sub sets_plan { () }
28
29##############
30# New API
31
32sub add_info {
33 my $self = shift;
34
35 for my $in (@_) {
36 $in = {%$in} if ref($in) ne 'ARRAY';
37 $in = Test2::EventFacet::Info->new($in);
38
39 push @{$self->{+INFO}} => $in;
40 }
41}
42
43sub facet_data {
44 my $self = shift;
45
46 my $out = $self->common_facet_data;
47
48 $out->{about}->{details} = 'pass';
49
50 $out->{assert} = {pass => 1, details => $self->{+NAME}};
51
52 $out->{info} = [map {{ %{$_} }} @{$self->{+INFO}}] if $self->{+INFO};
53
54 return $out;
55}
56
5712µs1;
58
59__END__
 
# spent 400ns within Test2::Event::Pass::__ANON__ which was called: # once (400ns+0s) by Test2::Event::Pass::BEGIN@7 at line 7
sub Test2::Event::Pass::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-DirectoryMember-pm-113-line.html0000644000175000017500000007466414576335353026125 0ustar michamicha Profile of Archive/Zip/DirectoryMember.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip/DirectoryMember.pm
StatementsExecuted 11 statements in 291µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsArchive::Zip::DirectoryMember::::BEGIN@3Archive::Zip::DirectoryMember::BEGIN@3
1116µs6µsArchive::Zip::DirectoryMember::::BEGIN@8Archive::Zip::DirectoryMember::BEGIN@8
1114µs32µsArchive::Zip::DirectoryMember::::BEGIN@4Archive::Zip::DirectoryMember::BEGIN@4
1114µs20µsArchive::Zip::DirectoryMember::::BEGIN@6Archive::Zip::DirectoryMember::BEGIN@6
1113µs85µsArchive::Zip::DirectoryMember::::BEGIN@13Archive::Zip::DirectoryMember::BEGIN@13
0000s0sArchive::Zip::DirectoryMember::::_newNamedArchive::Zip::DirectoryMember::_newNamed
0000s0sArchive::Zip::DirectoryMember::::contentsArchive::Zip::DirectoryMember::contents
0000s0sArchive::Zip::DirectoryMember::::externalFileNameArchive::Zip::DirectoryMember::externalFileName
0000s0sArchive::Zip::DirectoryMember::::extractToFileNamedArchive::Zip::DirectoryMember::extractToFileNamed
0000s0sArchive::Zip::DirectoryMember::::fileNameArchive::Zip::DirectoryMember::fileName
0000s0sArchive::Zip::DirectoryMember::::isDirectoryArchive::Zip::DirectoryMember::isDirectory
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip::DirectoryMember;
2
3218µs212µs
# spent 11µs (9+2) within Archive::Zip::DirectoryMember::BEGIN@3 which was called: # once (9µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 3
use strict;
# spent 11µs making 1 call to Archive::Zip::DirectoryMember::BEGIN@3 # spent 2µs making 1 call to strict::import
4217µs261µs
# spent 32µs (4+29) within Archive::Zip::DirectoryMember::BEGIN@4 which was called: # once (4µs+29µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 4
use File::Path;
# spent 32µs making 1 call to Archive::Zip::DirectoryMember::BEGIN@4 # spent 29µs making 1 call to Exporter::import
5
6227µs236µs
# spent 20µs (4+16) within Archive::Zip::DirectoryMember::BEGIN@6 which was called: # once (4µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 6
use vars qw( $VERSION @ISA );
# spent 20µs making 1 call to Archive::Zip::DirectoryMember::BEGIN@6 # spent 16µs making 1 call to vars::import
7
8
# spent 6µs within Archive::Zip::DirectoryMember::BEGIN@8 which was called: # once (6µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 11
BEGIN {
91200ns $VERSION = '1.68';
1017µs @ISA = qw( Archive::Zip::Member );
11125µs16µs}
# spent 6µs making 1 call to Archive::Zip::DirectoryMember::BEGIN@8
12
1312µs182µs
# spent 85µs (3+82) within Archive::Zip::DirectoryMember::BEGIN@13 which was called: # once (3µs+82µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 16
use Archive::Zip qw(
# spent 82µs making 1 call to Exporter::import
14 :ERROR_CODES
15 :UTILITY_METHODS
161193µs185µs);
# spent 85µs making 1 call to Archive::Zip::DirectoryMember::BEGIN@13
17
18sub _newNamed {
19 my $class = shift;
20 my $fileName = shift; # FS name
21 my $newName = shift; # Zip name
22 $newName = _asZipDirName($fileName) unless $newName;
23 my $self = $class->new(@_);
24 $self->{'externalFileName'} = $fileName;
25 $self->fileName($newName);
26
27 if (-e $fileName) {
28
29 # -e does NOT do a full stat, so we need to do one now
30 if (-d _ ) {
31 my @stat = stat(_);
32 $self->unixFileAttributes($stat[2]);
33 my $mod_t = $stat[9];
34 if ($^O eq 'MSWin32' and !$mod_t) {
35 $mod_t = time();
36 }
37 $self->setLastModFileDateTimeFromUnix($mod_t);
38
39 } else { # hmm.. trying to add a non-directory?
40 _error($fileName, ' exists but is not a directory');
41 return undef;
42 }
43 } else {
44 $self->unixFileAttributes($self->DEFAULT_DIRECTORY_PERMISSIONS);
45 $self->setLastModFileDateTimeFromUnix(time());
46 }
47 return $self;
48}
49
50sub externalFileName {
51 shift->{'externalFileName'};
52}
53
54sub isDirectory {
55 return 1;
56}
57
58sub extractToFileNamed {
59 my $self = shift;
60 my $name = shift; # local FS name
61 my $attribs = $self->unixFileAttributes() & 07777;
62 mkpath($name, 0, $attribs); # croaks on error
63 utime($self->lastModTime(), $self->lastModTime(), $name);
64 return AZ_OK;
65}
66
67sub fileName {
68 my $self = shift;
69 my $newName = shift;
70 $newName =~ s{/?$}{/} if defined($newName);
71 return $self->SUPER::fileName($newName);
72}
73
74# So people don't get too confused. This way it looks like the problem
75# is in their code...
76sub contents {
77 return wantarray ? (undef, AZ_OK) : undef;
78}
79
8012µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Util-Facets2Legacy-pm-65-line.html0000644000175000017500000016675114576335353025165 0ustar michamicha Profile of Test2/Util/Facets2Legacy.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/Facets2Legacy.pm
StatementsExecuted 15 statements in 608µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111940µs1.00msTest2::Util::Facets2Legacy::::BEGIN@10Test2::Util::Facets2Legacy::BEGIN@10
1119µs11µsTest2::Util::Facets2Legacy::::BEGIN@2Test2::Util::Facets2Legacy::BEGIN@2
1114µs19µsTest2::Util::Facets2Legacy::::BEGIN@3Test2::Util::Facets2Legacy::BEGIN@3
1114µs22µsTest2::Util::Facets2Legacy::::BEGIN@7Test2::Util::Facets2Legacy::BEGIN@7
1113µs15µsTest2::Util::Facets2Legacy::::BEGIN@8Test2::Util::Facets2Legacy::BEGIN@8
0000s0sTest2::Util::Facets2Legacy::::_get_facet_dataTest2::Util::Facets2Legacy::_get_facet_data
0000s0sTest2::Util::Facets2Legacy::::causes_failTest2::Util::Facets2Legacy::causes_fail
0000s0sTest2::Util::Facets2Legacy::::diagnosticsTest2::Util::Facets2Legacy::diagnostics
0000s0sTest2::Util::Facets2Legacy::::globalTest2::Util::Facets2Legacy::global
0000s0sTest2::Util::Facets2Legacy::::increments_countTest2::Util::Facets2Legacy::increments_count
0000s0sTest2::Util::Facets2Legacy::::no_displayTest2::Util::Facets2Legacy::no_display
0000s0sTest2::Util::Facets2Legacy::::sets_planTest2::Util::Facets2Legacy::sets_plan
0000s0sTest2::Util::Facets2Legacy::::subtest_idTest2::Util::Facets2Legacy::subtest_id
0000s0sTest2::Util::Facets2Legacy::::summaryTest2::Util::Facets2Legacy::summary
0000s0sTest2::Util::Facets2Legacy::::terminateTest2::Util::Facets2Legacy::terminate
0000s0sTest2::Util::Facets2Legacy::::uuidTest2::Util::Facets2Legacy::uuid
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Util::Facets2Legacy;
2220µs212µs
# spent 11µs (9+1) within Test2::Util::Facets2Legacy::BEGIN@2 which was called: # once (9µs+1µs) by Test2::Event::V2::BEGIN@12 at line 2
use strict;
# spent 11µs making 1 call to Test2::Util::Facets2Legacy::BEGIN@2 # spent 2µs making 1 call to strict::import
3223µs235µs
# spent 19µs (4+16) within Test2::Util::Facets2Legacy::BEGIN@3 which was called: # once (4µs+16µs) by Test2::Event::V2::BEGIN@12 at line 3
use warnings;
# spent 19µs making 1 call to Test2::Util::Facets2Legacy::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7219µs240µs
# spent 22µs (4+18) within Test2::Util::Facets2Legacy::BEGIN@7 which was called: # once (4µs+18µs) by Test2::Event::V2::BEGIN@12 at line 7
use Carp qw/croak confess/;
# spent 22µs making 1 call to Test2::Util::Facets2Legacy::BEGIN@7 # spent 18µs making 1 call to Exporter::import
8214µs226µs
# spent 15µs (3+12) within Test2::Util::Facets2Legacy::BEGIN@8 which was called: # once (3µs+12µs) by Test2::Event::V2::BEGIN@12 at line 8
use Scalar::Util qw/blessed/;
# spent 15µs making 1 call to Test2::Util::Facets2Legacy::BEGIN@8 # spent 12µs making 1 call to Exporter::import
9
102526µs21.04ms
# spent 1.00ms (940µs+61µs) within Test2::Util::Facets2Legacy::BEGIN@10 which was called: # once (940µs+61µs) by Test2::Event::V2::BEGIN@12 at line 10
use base 'Exporter';
# spent 1.00ms making 1 call to Test2::Util::Facets2Legacy::BEGIN@10 # spent 41µs making 1 call to base::import
1111µsour @EXPORT_OK = qw{
12 causes_fail
13 diagnostics
14 global
15 increments_count
16 no_display
17 sets_plan
18 subtest_id
19 summary
20 terminate
21 uuid
22};
2311µsour %EXPORT_TAGS = ( ALL => \@EXPORT_OK );
24
251100nsour $CYCLE_DETECT = 0;
26sub _get_facet_data {
27 my $in = shift;
28
29 if (blessed($in) && $in->isa('Test2::Event')) {
30 confess "Cycle between Facets2Legacy and $in\->facet_data() (Did you forget to override the facet_data() method?)"
31 if $CYCLE_DETECT;
32
33 local $CYCLE_DETECT = 1;
34 return $in->facet_data;
35 }
36
37 return $in if ref($in) eq 'HASH';
38
39 croak "'$in' Does not appear to be either a Test::Event or an EventFacet hashref";
40}
41
42sub causes_fail {
43 my $facet_data = _get_facet_data(shift @_);
44
45 return 1 if $facet_data->{errors} && grep { $_->{fail} } @{$facet_data->{errors}};
46
47 if (my $control = $facet_data->{control}) {
48 return 1 if $control->{halt};
49 return 1 if $control->{terminate};
50 }
51
52 return 0 if $facet_data->{amnesty} && @{$facet_data->{amnesty}};
53 return 1 if $facet_data->{assert} && !$facet_data->{assert}->{pass};
54 return 0;
55}
56
57sub diagnostics {
58 my $facet_data = _get_facet_data(shift @_);
59 return 1 if $facet_data->{errors} && @{$facet_data->{errors}};
60 return 0 unless $facet_data->{info} && @{$facet_data->{info}};
61 return (grep { $_->{debug} } @{$facet_data->{info}}) ? 1 : 0;
62}
63
64sub global {
65 my $facet_data = _get_facet_data(shift @_);
66 return 0 unless $facet_data->{control};
67 return $facet_data->{control}->{global};
68}
69
70sub increments_count {
71 my $facet_data = _get_facet_data(shift @_);
72 return $facet_data->{assert} ? 1 : 0;
73}
74
75sub no_display {
76 my $facet_data = _get_facet_data(shift @_);
77 return 0 unless $facet_data->{about};
78 return $facet_data->{about}->{no_display};
79}
80
81sub sets_plan {
82 my $facet_data = _get_facet_data(shift @_);
83 my $plan = $facet_data->{plan} or return;
84 my @out = ($plan->{count} || 0);
85
86 if ($plan->{skip}) {
87 push @out => 'SKIP';
88 push @out => $plan->{details} if defined $plan->{details};
89 }
90 elsif ($plan->{none}) {
91 push @out => 'NO PLAN'
92 }
93
94 return @out;
95}
96
97sub subtest_id {
98 my $facet_data = _get_facet_data(shift @_);
99 return undef unless $facet_data->{parent};
100 return $facet_data->{parent}->{hid};
101}
102
103sub summary {
104 my $facet_data = _get_facet_data(shift @_);
105 return '' unless $facet_data->{about} && $facet_data->{about}->{details};
106 return $facet_data->{about}->{details};
107}
108
109sub terminate {
110 my $facet_data = _get_facet_data(shift @_);
111 return undef unless $facet_data->{control};
112 return $facet_data->{control}->{terminate};
113}
114
115sub uuid {
116 my $in = shift;
117
118 if ($CYCLE_DETECT) {
119 if (blessed($in) && $in->isa('Test2::Event')) {
120 my $meth = $in->can('uuid');
121 $meth = $in->can('SUPER::uuid') if $meth == \&uuid;
122 my $uuid = $in->$meth if $meth && $meth != \&uuid;
123 return $uuid if $uuid;
124 }
125
126 return undef;
127 }
128
129 my $facet_data = _get_facet_data($in);
130 return $facet_data->{about}->{uuid} if $facet_data->{about} && $facet_data->{about}->{uuid};
131
132 return undef;
133}
134
13513µs1;
136
137=pod
138
139=encoding UTF-8
140
141=head1 NAME
142
143Test2::Util::Facets2Legacy - Convert facet data to the legacy event API.
144
145=head1 DESCRIPTION
146
147This module exports several subroutines from the older event API (see
148L<Test2::Event>). These subroutines can be used as methods on any object that
149provides a custom C<facet_data()> method. These subroutines can also be used as
150functions that take a facet data hashref as arguments.
151
152=head1 SYNOPSIS
153
154=head2 AS METHODS
155
156 package My::Event;
157
158 use Test2::Util::Facets2Legacy ':ALL';
159
160 sub facet_data { return { ... } }
161
162Then to use it:
163
164 my $e = My::Event->new(...);
165
166 my $causes_fail = $e->causes_fail;
167 my $summary = $e->summary;
168 ....
169
170=head2 AS FUNCTIONS
171
172 use Test2::Util::Facets2Legacy ':ALL';
173
174 my $f = {
175 assert => { ... },
176 info => [{...}, ...],
177 control => {...},
178 ...
179 };
180
181 my $causes_fail = causes_fail($f);
182 my $summary = summary($f);
183
184=head1 NOTE ON CYCLES
185
186When used as methods, all these subroutines call C<< $e->facet_data() >>. The
187default C<facet_data()> method in L<Test2::Event> relies on the legacy methods
188this module emulates in order to work. As a result of this it is very easy to
189create infinite recursion bugs.
190
191These methods have cycle detection and will throw an exception early if a cycle
192is detected. C<uuid()> is currently the only subroutine in this library that
193has a fallback behavior when cycles are detected.
194
195=head1 EXPORTS
196
197Nothing is exported by default. You must specify which methods to import, or
198use the ':ALL' tag.
199
200=over 4
201
202=item $bool = $e->causes_fail()
203
204=item $bool = causes_fail($f)
205
206Check if the event or facets result in a failing state.
207
208=item $bool = $e->diagnostics()
209
210=item $bool = diagnostics($f)
211
212Check if the event or facets contain any diagnostics information.
213
214=item $bool = $e->global()
215
216=item $bool = global($f)
217
218Check if the event or facets need to be globally processed.
219
220=item $bool = $e->increments_count()
221
222=item $bool = increments_count($f)
223
224Check if the event or facets make an assertion.
225
226=item $bool = $e->no_display()
227
228=item $bool = no_display($f)
229
230Check if the event or facets should be rendered or hidden.
231
232=item ($max, $directive, $reason) = $e->sets_plan()
233
234=item ($max, $directive, $reason) = sets_plan($f)
235
236Check if the event or facets set a plan, and return the plan details.
237
238=item $id = $e->subtest_id()
239
240=item $id = subtest_id($f)
241
242Get the subtest id, if any.
243
244=item $string = $e->summary()
245
246=item $string = summary($f)
247
248Get the summary of the event or facets hash, if any.
249
250=item $undef_or_int = $e->terminate()
251
252=item $undef_or_int = terminate($f)
253
254Check if the event or facets should result in process termination, if so the
255exit code is returned (which could be 0). undef is returned if no termination
256is requested.
257
258=item $uuid = $e->uuid()
259
260=item $uuid = uuid($f)
261
262Get the UUID of the facets or event.
263
264B<Note:> This will fall back to C<< $e->SUPER::uuid() >> if a cycle is
265detected and an event is used as the argument.
266
267=back
268
269=head1 SOURCE
270
271The source code repository for Test2 can be found at
272F<http://github.com/Test-More/test-more/>.
273
274=head1 MAINTAINERS
275
276=over 4
277
278=item Chad Granum E<lt>exodist@cpan.orgE<gt>
279
280=back
281
282=head1 AUTHORS
283
284=over 4
285
286=item Chad Granum E<lt>exodist@cpan.orgE<gt>
287
288=back
289
290=head1 COPYRIGHT
291
292Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>.
293
294This program is free software; you can redistribute it and/or
295modify it under the same terms as Perl itself.
296
297See F<http://dev.perl.org/licenses/>
298
299=cut










Spreadsheet-ParseXLSX-0.35/nytprof/JSON-pm-142-line.html0000644000175000017500000023611314576335353021452 0ustar michamicha Profile of JSON.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/JSON.pm
StatementsExecuted 72 statements in 1.18ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11138µs65µsJSON::::__load_xs JSON::__load_xs
11127µs7.36msJSON::::__load_pp JSON::__load_pp
11123µs26µsJSON::Backend::PP::::initJSON::Backend::PP::init
1119µs10µsJSON::::BEGIN@4 JSON::BEGIN@4
1117µs11µsJSON::Backend::PP::::BEGIN@342JSON::Backend::PP::BEGIN@342
1116µs6µsJSON::::BEGIN@7 JSON::BEGIN@7
1115µs7.39msJSON::::_load_pp JSON::_load_pp
1114µs68µsJSON::::_load_xs JSON::_load_xs
1113µs11µsJSON::::BEGIN@6 JSON::BEGIN@6
1112µs2µsJSON::::BEGIN@11 JSON::BEGIN@11
1111µs1µsJSON::::BEGIN@5 JSON::BEGIN@5
0000s0sJSON::Backend::PP::::__ANON__[:366]JSON::Backend::PP::__ANON__[:366]
0000s0sJSON::Backend::PP::::is_ppJSON::Backend::PP::is_pp
0000s0sJSON::Backend::PP::::is_xsJSON::Backend::PP::is_xs
0000s0sJSON::::backend JSON::backend
0000s0sJSON::::boolean JSON::boolean
0000s0sJSON::::false JSON::false
0000s0sJSON::::from_json JSON::from_json
0000s0sJSON::::import JSON::import
0000s0sJSON::::is_pp JSON::is_pp
0000s0sJSON::::is_xs JSON::is_xs
0000s0sJSON::::jsonToObj JSON::jsonToObj
0000s0sJSON::::null JSON::null
0000s0sJSON::::objToJson JSON::objToJson
0000s0sJSON::::property JSON::property
0000s0sJSON::::pureperl_only_methods JSON::pureperl_only_methods
0000s0sJSON::::require_xs_version JSON::require_xs_version
0000s0sJSON::::to_json JSON::to_json
0000s0sJSON::::true JSON::true
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package JSON;
2
3
4217µs211µs
# spent 10µs (9+1) within JSON::BEGIN@4 which was called: # once (9µs+1µs) by CryptX::BEGIN@13 at line 4
use strict;
# spent 10µs making 1 call to JSON::BEGIN@4 # spent 1µs making 1 call to strict::import
529µs11µs
# spent 1µs within JSON::BEGIN@5 which was called: # once (1µs+0s) by CryptX::BEGIN@13 at line 5
use Carp ();
# spent 1µs making 1 call to JSON::BEGIN@5
6217µs220µs
# spent 11µs (3+8) within JSON::BEGIN@6 which was called: # once (3µs+8µs) by CryptX::BEGIN@13 at line 6
use Exporter;
# spent 11µs making 1 call to JSON::BEGIN@6 # spent 8µs making 1 call to Exporter::import
7141µs16µs
# spent 6µs within JSON::BEGIN@7 which was called: # once (6µs+0s) by CryptX::BEGIN@13 at line 7
BEGIN { @JSON::ISA = 'Exporter' }
# spent 6µs making 1 call to JSON::BEGIN@7
8
911µs@JSON::EXPORT = qw(from_json to_json jsonToObj objToJson encode_json decode_json);
10
11
# spent 2µs within JSON::BEGIN@11 which was called: # once (2µs+0s) by CryptX::BEGIN@13 at line 15
BEGIN {
121200ns $JSON::VERSION = '4.10';
131200ns $JSON::DEBUG = 0 unless (defined $JSON::DEBUG);
1412µs $JSON::DEBUG = $ENV{ PERL_JSON_DEBUG } if exists $ENV{ PERL_JSON_DEBUG };
151800µs12µs}
# spent 2µs making 1 call to JSON::BEGIN@11
16
171900nsmy %RequiredVersion = (
18 'JSON::PP' => '2.27203',
19 'JSON::XS' => '2.34',
20);
21
22# XS and PP common methods
23
2411µsmy @PublicMethods = qw/
25 ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
26 allow_blessed convert_blessed filter_json_object filter_json_single_key_object
27 shrink max_depth max_size encode decode decode_prefix allow_unknown
28/;
29
3011µsmy @Properties = qw/
31 ascii latin1 utf8 indent space_before space_after relaxed canonical allow_nonref
32 allow_blessed convert_blessed shrink max_depth max_size allow_unknown
33/;
34
351200nsmy @XSOnlyMethods = qw//; # Currently nothing
36
371300nsmy @PublicMethodsSince4_0 = qw/allow_tags/;
381200nsmy @PropertiesSince4_0 = qw/allow_tags/;
39
401600nsmy @PPOnlyMethods = qw/
41 indent_length sort_by
42 allow_singlequote allow_bignum loose allow_barekey escape_slash as_nonblessed
43/; # JSON::PP specific
44
45
46# used in _load_xs and _load_pp ($INSTALL_ONLY is not used currently)
471100nsmy $_INSTALL_DONT_DIE = 1; # When _load_xs fails to load XS, don't die.
481100nsmy $_ALLOW_UNSUPPORTED = 0;
491100nsmy $_UNIV_CONV_BLESSED = 0;
50
51
52# Check the environment variable to decide worker module.
53
541300nsunless ($JSON::Backend) {
551100ns $JSON::DEBUG and Carp::carp("Check used worker module...");
56
571400ns my $backend = exists $ENV{PERL_JSON_BACKEND} ? $ENV{PERL_JSON_BACKEND} : 1;
58
591700ns if ($backend eq '1') {
60 $backend = 'JSON::XS,JSON::PP';
61 }
62 elsif ($backend eq '0') {
63 $backend = 'JSON::PP';
64 }
65 elsif ($backend eq '2') {
66 $backend = 'JSON::XS';
67 }
6815µs11µs $backend =~ s/\s+//g;
# spent 1µs making 1 call to CORE::subst
69
7011µs my @backend_modules = split /,/, $backend;
711900ns while(my $module = shift @backend_modules) {
7227µs57.46ms if ($module =~ /JSON::XS/) {
# spent 7.39ms making 1 call to JSON::_load_pp # spent 68µs making 1 call to JSON::_load_xs # spent 2µs making 3 calls to CORE::match, avg 800ns/call
73 _load_xs($module, @backend_modules ? $_INSTALL_DONT_DIE : 0);
74 }
75 elsif ($module =~ /JSON::PP/) {
76 _load_pp($module);
77 }
78 elsif ($module =~ /JSON::backportPP/) {
79 _load_pp($module);
80 }
81 else {
82 Carp::croak "The value of environmental variable 'PERL_JSON_BACKEND' is invalid.";
83 }
8421µs last if $JSON::Backend;
85 }
86}
87
88
89sub import {
90 my $pkg = shift;
91 my @what_to_export;
92 my $no_export;
93
94 for my $tag (@_) {
95 if ($tag eq '-support_by_pp') {
96 if (!$_ALLOW_UNSUPPORTED++) {
97 JSON::Backend::XS
98 ->support_by_pp(@PPOnlyMethods) if ($JSON::Backend->is_xs);
99 }
100 next;
101 }
102 elsif ($tag eq '-no_export') {
103 $no_export++, next;
104 }
105 elsif ( $tag eq '-convert_blessed_universally' ) {
106 my $org_encode = $JSON::Backend->can('encode');
107 eval q|
108 require B;
109 local $^W;
110 no strict 'refs';
111 *{"${JSON::Backend}\::encode"} = sub {
112 # only works with Perl 5.18+
113 local *UNIVERSAL::TO_JSON = sub {
114 my $b_obj = B::svref_2object( $_[0] );
115 return $b_obj->isa('B::HV') ? { %{ $_[0] } }
116 : $b_obj->isa('B::AV') ? [ @{ $_[0] } ]
117 : undef
118 ;
119 };
120 $org_encode->(@_);
121 };
122 | if ( !$_UNIV_CONV_BLESSED++ );
123 next;
124 }
125 push @what_to_export, $tag;
126 }
127
128 return if ($no_export);
129
130 __PACKAGE__->export_to_level(1, $pkg, @what_to_export);
131}
132
133
134# OBSOLETED
135
136sub jsonToObj {
137 my $alternative = 'from_json';
138 if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
139 shift @_; $alternative = 'decode';
140 }
141 Carp::carp "'jsonToObj' will be obsoleted. Please use '$alternative' instead.";
142 return JSON::from_json(@_);
143};
144
145sub objToJson {
146 my $alternative = 'to_json';
147 if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
148 shift @_; $alternative = 'encode';
149 }
150 Carp::carp "'objToJson' will be obsoleted. Please use '$alternative' instead.";
151 JSON::to_json(@_);
152};
153
154
155# INTERFACES
156
157sub to_json ($@) {
158 if (
159 ref($_[0]) eq 'JSON'
160 or (@_ > 2 and $_[0] eq 'JSON')
161 ) {
162 Carp::croak "to_json should not be called as a method.";
163 }
164 my $json = JSON->new;
165
166 if (@_ == 2 and ref $_[1] eq 'HASH') {
167 my $opt = $_[1];
168 for my $method (keys %$opt) {
169 $json->$method( $opt->{$method} );
170 }
171 }
172
173 $json->encode($_[0]);
174}
175
176
177sub from_json ($@) {
178 if ( ref($_[0]) eq 'JSON' or $_[0] eq 'JSON' ) {
179 Carp::croak "from_json should not be called as a method.";
180 }
181 my $json = JSON->new;
182
183 if (@_ == 2 and ref $_[1] eq 'HASH') {
184 my $opt = $_[1];
185 for my $method (keys %$opt) {
186 $json->$method( $opt->{$method} );
187 }
188 }
189
190 return $json->decode( $_[0] );
191}
192
- -
195sub true { $JSON::true }
196
197sub false { $JSON::false }
198
199sub boolean {
200 # might be called as method or as function, so pop() to get the last arg instead of shift() to get the first
201 pop() ? $JSON::true : $JSON::false
202}
203
204sub null { undef; }
205
206
207sub require_xs_version { $RequiredVersion{'JSON::XS'}; }
208
209sub backend {
210 my $proto = shift;
211 $JSON::Backend;
212}
213
214#*module = *backend;
215
216
217sub is_xs {
218 return $_[0]->backend->is_xs;
219}
220
221
222sub is_pp {
223 return $_[0]->backend->is_pp;
224}
225
226
227sub pureperl_only_methods { @PPOnlyMethods; }
228
229
230sub property {
231 my ($self, $name, $value) = @_;
232
233 if (@_ == 1) {
234 my %props;
235 for $name (@Properties) {
236 my $method = 'get_' . $name;
237 if ($name eq 'max_size') {
238 my $value = $self->$method();
239 $props{$name} = $value == 1 ? 0 : $value;
240 next;
241 }
242 $props{$name} = $self->$method();
243 }
244 return \%props;
245 }
246 elsif (@_ > 3) {
247 Carp::croak('property() can take only the option within 2 arguments.');
248 }
249 elsif (@_ == 2) {
250 if ( my $method = $self->can('get_' . $name) ) {
251 if ($name eq 'max_size') {
252 my $value = $self->$method();
253 return $value == 1 ? 0 : $value;
254 }
255 $self->$method();
256 }
257 }
258 else {
259 $self->$name($value);
260 }
261
262}
263
- -
266# INTERNAL
267
268
# spent 65µs (38+27) within JSON::__load_xs which was called: # once (38µs+27µs) by JSON::_load_xs at line 291
sub __load_xs {
2691200ns my ($module, $opt) = @_;
270
2711100ns $JSON::DEBUG and Carp::carp "Load $module.";
2721400ns my $required_version = $RequiredVersion{$module} || '';
273
274126µs eval qq|
# spent 37µs executing statements in string eval
# includes 27µs spent executing 1 call to 1 sub defined therein.
275 use $module $required_version ();
276 |;
277
2781200ns if ($@) {
2791500ns if (defined $opt and $opt & $_INSTALL_DONT_DIE) {
2801100ns $JSON::DEBUG and Carp::carp "Can't load $module...($@)";
28112µs return 0;
282 }
283 Carp::croak $@;
284 }
285 $JSON::BackendModuleXS = $module;
286 return 1;
287}
288
289
# spent 68µs (4+65) within JSON::_load_xs which was called: # once (4µs+65µs) by CryptX::BEGIN@13 at line 72
sub _load_xs {
2901400ns my ($module, $opt) = @_;
29112µs165µs __load_xs($module, $opt) or return;
# spent 65µs making 1 call to JSON::__load_xs
292
293 my $data = join("", <DATA>); # this code is from Jcode 2.xx.
294 close(DATA);
295 eval $data;
296 JSON::Backend::XS->init($module);
297
298 return 1;
299};
300
301
302
# spent 7.36ms (27µs+7.33) within JSON::__load_pp which was called: # once (27µs+7.33ms) by JSON::_load_pp at line 325
sub __load_pp {
3031300ns my ($module, $opt) = @_;
304
3051100ns $JSON::DEBUG and Carp::carp "Load $module.";
3061500ns my $required_version = $RequiredVersion{$module} || '';
307
308119µs eval qq| use $module $required_version () |;
# spent 84µs executing statements in string eval
# includes 5.24ms spent executing 1 call to 1 sub defined therein.
309
3101200ns if ($@) {
311 if ( $module eq 'JSON::PP' ) {
312 $JSON::DEBUG and Carp::carp "Can't load $module ($@), so try to load JSON::backportPP";
313 $module = 'JSON::backportPP';
314 local $^W; # if PP installed but invalid version, backportPP redefines methods.
315 eval qq| require $module |;
316 }
317 Carp::croak $@ if $@;
318 }
3191300ns $JSON::BackendModulePP = $module;
32012µs return 1;
321}
322
323
# spent 7.39ms (5µs+7.39) within JSON::_load_pp which was called: # once (5µs+7.39ms) by CryptX::BEGIN@13 at line 72
sub _load_pp {
3241400ns my ($module, $opt) = @_;
3251600ns17.36ms __load_pp($module, $opt);
# spent 7.36ms making 1 call to JSON::__load_pp
326
32712µs126µs JSON::Backend::PP->init($module);
# spent 26µs making 1 call to JSON::Backend::PP::init
328};
329
330#
331# Helper classes for Backend Module (PP)
332#
333
334package JSON::Backend::PP;
335
336
# spent 26µs (23+2) within JSON::Backend::PP::init which was called: # once (23µs+2µs) by JSON::_load_pp at line 327
sub init {
3371500ns my ($class, $module) = @_;
338
339 # name may vary, but the module should (always) be a JSON::PP
340
34111µs local $^W;
3422171µs215µs
# spent 11µs (7+4) within JSON::Backend::PP::BEGIN@342 which was called: # once (7µs+4µs) by CryptX::BEGIN@13 at line 342
no strict qw(refs); # this routine may be called after JSON::Backend::XS init was called.
# spent 11µs making 1 call to JSON::Backend::PP::BEGIN@342 # spent 4µs making 1 call to strict::unimport
34312µs *{"JSON::decode_json"} = \&{"JSON::PP::decode_json"};
3441800ns *{"JSON::encode_json"} = \&{"JSON::PP::encode_json"};
3451700ns *{"JSON::is_bool"} = \&{"JSON::PP::is_bool"};
346
3471500ns $JSON::true = ${"JSON::PP::true"};
3481300ns $JSON::false = ${"JSON::PP::false"};
349
35013µs push @JSON::Backend::PP::ISA, 'JSON::PP';
35113µs push @JSON::ISA, $class;
3521300ns $JSON::Backend = $class;
3531200ns $JSON::BackendModule = $module;
35416µs12µs my $version = ${"$class\::VERSION"} = $module->VERSION;
# spent 2µs making 1 call to UNIVERSAL::VERSION
35513µs1700ns $version =~ s/_//;
# spent 700ns making 1 call to CORE::subst
35612µs if ($version < 3.99) {
357 push @XSOnlyMethods, qw/allow_tags get_allow_tags/;
358 } else {
3591700ns push @Properties, 'allow_tags';
360 }
361
3621300ns for my $method (@XSOnlyMethods) {
363 *{"JSON::$method"} = sub {
364 Carp::carp("$method is not supported by $module $version.");
365 $_[0];
366 };
367 }
368
36912µs return 1;
370}
371
372sub is_xs { 0 };
373sub is_pp { 1 };
374
375#
376# To save memory, the below lines are read only when XS backend is used.
377#
378
379package JSON;
380
381115µs1;
382__DATA__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 16)[XML-Twig-pm-5157]-137-line.html0000644000175000017500000003015414576335353024341 0ustar michamicha Profile of (eval 16)[XML/Twig.pm:5157]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 16)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5157]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5157
Line State
ments
Time
on line
Calls Time
in subs
Code
112µsrequire Scalar::Util
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 55)[JSON-PP-pm-692]-163-line.html0000644000175000017500000003205714576335353024004 0ustar michamicha Profile of (eval 55)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 55)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 600ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11600ns 111111111111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 51)[JSON-PP-pm-692]-159-line.html0000644000175000017500000003205314576335353024001 0ustar michamicha Profile of (eval 51)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 51)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 11111111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/File-Find-pm-99-line.html0000644000175000017500000040344714576335353022377 0ustar michamicha Profile of File/Find.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Find.pm
StatementsExecuted 29 statements in 2.65ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs11µsFile::Find::::BEGIN@2File::Find::BEGIN@2
1114µs8µsFile::Find::::BEGIN@7File::Find::BEGIN@7
1114µs5µsFile::Find::::BEGIN@3File::Find::BEGIN@3
1114µs5µsFile::Find::::BEGIN@13File::Find::BEGIN@13
1113µs19µsFile::Find::::BEGIN@4File::Find::BEGIN@4
1113µs16µsFile::Find::::BEGIN@5File::Find::BEGIN@5
0000s0sFile::Find::::Follow_SymLinkFile::Find::Follow_SymLink
0000s0sFile::Find::::PathCombineFile::Find::PathCombine
0000s0sFile::Find::::_find_dirFile::Find::_find_dir
0000s0sFile::Find::::_find_dir_symlnkFile::Find::_find_dir_symlnk
0000s0sFile::Find::::_find_optFile::Find::_find_opt
0000s0sFile::Find::::_is_absoluteFile::Find::_is_absolute
0000s0sFile::Find::::_is_rootFile::Find::_is_root
0000s0sFile::Find::::contract_nameFile::Find::contract_name
0000s0sFile::Find::::findFile::Find::find
0000s0sFile::Find::::finddepthFile::Find::finddepth
0000s0sFile::Find::::is_tainted_ppFile::Find::is_tainted_pp
0000s0sFile::Find::::wrap_wantedFile::Find::wrap_wanted
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Find;
2226µs111µs
# spent 11µs within File::Find::BEGIN@2 which was called: # once (11µs+0s) by Archive::Zip::Archive::BEGIN@7 at line 2
use 5.006;
# spent 11µs making 1 call to File::Find::BEGIN@2
3214µs27µs
# spent 5µs (4+2) within File::Find::BEGIN@3 which was called: # once (4µs+2µs) by Archive::Zip::Archive::BEGIN@7 at line 3
use strict;
# spent 5µs making 1 call to File::Find::BEGIN@3 # spent 2µs making 1 call to strict::import
4212µs236µs
# spent 19µs (3+16) within File::Find::BEGIN@4 which was called: # once (3µs+16µs) by Archive::Zip::Archive::BEGIN@7 at line 4
use warnings;
# spent 19µs making 1 call to File::Find::BEGIN@4 # spent 16µs making 1 call to warnings::import
5224µs228µs
# spent 16µs (3+13) within File::Find::BEGIN@5 which was called: # once (3µs+13µs) by Archive::Zip::Archive::BEGIN@7 at line 5
use warnings::register;
# spent 16µs making 1 call to File::Find::BEGIN@5 # spent 13µs making 1 call to warnings::register::import
61300nsour $VERSION = '1.43';
7222µs212µs
# spent 8µs (4+4) within File::Find::BEGIN@7 which was called: # once (4µs+4µs) by Archive::Zip::Archive::BEGIN@7 at line 7
use Exporter 'import';
# spent 8µs making 1 call to File::Find::BEGIN@7 # spent 4µs making 1 call to Exporter::import
81400nsrequire Cwd;
9
101800nsour @EXPORT = qw(find finddepth);
11
12
1322.52ms26µs
# spent 5µs (4+1) within File::Find::BEGIN@13 which was called: # once (4µs+1µs) by Archive::Zip::Archive::BEGIN@7 at line 13
use strict;
# spent 5µs making 1 call to File::Find::BEGIN@13 # spent 1µs making 1 call to strict::import
1411µsmy $Is_VMS = $^O eq 'VMS';
151200nsmy $Is_Win32 = $^O eq 'MSWin32';
16
171300nsrequire File::Basename;
181200nsrequire File::Spec;
19
20# Should ideally be my() not our() but local() currently
21# refuses to operate on lexicals
22
23our %SLnkSeen;
24our ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow,
25 $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat,
26 $pre_process, $post_process, $dangling_symlinks);
27
28sub contract_name {
29 my ($cdir,$fn) = @_;
30
31 return substr($cdir,0,rindex($cdir,'/')) if $fn eq $File::Find::current_dir;
32
33 $cdir = substr($cdir,0,rindex($cdir,'/')+1);
34
35 $fn =~ s|^\./||;
36
37 my $abs_name= $cdir . $fn;
38
39 if (substr($fn,0,3) eq '../') {
40 1 while $abs_name =~ s!/[^/]*/\.\./+!/!;
41 }
42
43 return $abs_name;
44}
45
46sub _is_absolute {
47 return $_[0] =~ m|^(?:[A-Za-z]:)?/| if $Is_Win32;
48 return substr($_[0], 0, 1) eq '/';
49}
50
51sub _is_root {
52 return $_[0] =~ m|^(?:[A-Za-z]:)?/\z| if $Is_Win32;
53 return $_[0] eq '/';
54}
55
56sub PathCombine($$) {
57 my ($Base,$Name) = @_;
58 my $AbsName;
59
60 if (_is_absolute($Name)) {
61 $AbsName= $Name;
62 }
63 else {
64 $AbsName= contract_name($Base,$Name);
65 }
66
67 # (simple) check for recursion
68 my $newlen= length($AbsName);
69 if ($newlen <= length($Base)) {
70 if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/')
71 && $AbsName eq substr($Base,0,$newlen))
72 {
73 return undef;
74 }
75 }
76 return $AbsName;
77}
78
79sub Follow_SymLink($) {
80 my ($AbsName) = @_;
81
82 my ($NewName,$DEV, $INO);
83 ($DEV, $INO)= lstat $AbsName;
84
85 while (-l _) {
86 if ($SLnkSeen{$DEV, $INO}++) {
87 if ($follow_skip < 2) {
88 die "$AbsName is encountered a second time";
89 }
90 else {
91 return undef;
92 }
93 }
94 my $Link = readlink($AbsName);
95 # canonicalize directory separators
96 $Link =~ s|\\|/|g if $Is_Win32;
97 $NewName= PathCombine($AbsName, $Link);
98 unless(defined $NewName) {
99 if ($follow_skip < 2) {
100 die "$AbsName is a recursive symbolic link";
101 }
102 else {
103 return undef;
104 }
105 }
106 else {
107 $AbsName= $NewName;
108 }
109 ($DEV, $INO) = lstat($AbsName);
110 return undef unless defined $DEV; # dangling symbolic link
111 }
112
113 if ($full_check && defined $DEV && $SLnkSeen{$DEV, $INO}++) {
114 if ( ($follow_skip < 1) || ((-d _) && ($follow_skip < 2)) ) {
115 die "$AbsName encountered a second time";
116 }
117 else {
118 return undef;
119 }
120 }
121
122 return $AbsName;
123}
124
125our($dir, $name, $fullname, $prune);
126sub _find_dir_symlnk($$$);
127sub _find_dir($$$);
128
129# check whether or not a scalar variable is tainted
130# (code straight from the Camel, 3rd ed., page 561)
131sub is_tainted_pp {
132 my $arg = shift;
133 my $nada = substr($arg, 0, 0); # zero-length
134 local $@;
135 eval { eval "# $nada" };
136 return length($@) != 0;
137}
138
139
140sub _find_opt {
141 my $wanted = shift;
142 return unless @_;
143 die "invalid top directory" unless defined $_[0];
144
145 # This function must local()ize everything because callbacks may
146 # call find() or finddepth()
147
148 local %SLnkSeen;
149 local ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow,
150 $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat,
151 $pre_process, $post_process, $dangling_symlinks);
152 local($dir, $name, $fullname, $prune);
153 local *_ = \my $a;
154
155 my $cwd = $wanted->{bydepth} ? Cwd::fastcwd() : Cwd::getcwd();
156 if ($Is_VMS) {
157 # VMS returns this by default in VMS format which just doesn't
158 # work for the rest of this module.
159 $cwd = VMS::Filespec::unixpath($cwd);
160
161 # Apparently this is not expected to have a trailing space.
162 # To attempt to make VMS/UNIX conversions mostly reversible,
163 # a trailing slash is needed. The run-time functions ignore the
164 # resulting double slash, but it causes the perl tests to fail.
165 $cwd =~ s#/\z##;
166
167 # This comes up in upper case now, but should be lower.
168 # In the future this could be exact case, no need to change.
169 }
170 my $cwd_untainted = $cwd;
171 my $check_t_cwd = 1;
172 $wanted_callback = $wanted->{wanted};
173 $bydepth = $wanted->{bydepth};
174 $pre_process = $wanted->{preprocess};
175 $post_process = $wanted->{postprocess};
176 $no_chdir = $wanted->{no_chdir};
177 $full_check = $wanted->{follow};
178 $follow = $full_check || $wanted->{follow_fast};
179 $follow_skip = $wanted->{follow_skip};
180 $untaint = $wanted->{untaint};
181 $untaint_pat = $wanted->{untaint_pattern};
182 $untaint_skip = $wanted->{untaint_skip};
183 $dangling_symlinks = $wanted->{dangling_symlinks};
184
185 # for compatibility reasons (find.pl, find2perl)
186 local our ($topdir, $topdev, $topino, $topmode, $topnlink);
187
188 # a symbolic link to a directory doesn't increase the link count
189 $avoid_nlink = $follow || $File::Find::dont_use_nlink;
190
191 my ($abs_dir, $Is_Dir);
192
193 Proc_Top_Item:
194 foreach my $TOP (@_) {
195 my $top_item = $TOP;
196 $top_item = VMS::Filespec::unixify($top_item) if $Is_VMS;
197
198 ($topdev,$topino,$topmode,$topnlink) = $follow ? stat $top_item : lstat $top_item;
199
200 # canonicalize directory separators
201 $top_item =~ s|[/\\]|/|g if $Is_Win32;
202
203 # no trailing / unless path is root
204 $top_item =~ s|/\z|| unless _is_root($top_item);
205
206 $Is_Dir= 0;
207
208 if ($follow) {
209
210 if (_is_absolute($top_item)) {
211 $abs_dir = $top_item;
212 }
213 elsif ($top_item eq $File::Find::current_dir) {
214 $abs_dir = $cwd;
215 }
216 else { # care about any ../
217 $top_item =~ s/\.dir\z//i if $Is_VMS;
218 $abs_dir = contract_name("$cwd/",$top_item);
219 }
220 $abs_dir= Follow_SymLink($abs_dir);
221 unless (defined $abs_dir) {
222 if ($dangling_symlinks) {
223 if (ref $dangling_symlinks eq 'CODE') {
224 $dangling_symlinks->($top_item, $cwd);
225 } else {
226 warnings::warnif "$top_item is a dangling symbolic link\n";
227 }
228 }
229 next Proc_Top_Item;
230 }
231
232 if (-d _) {
233 $top_item =~ s/\.dir\z//i if $Is_VMS;
234 _find_dir_symlnk($wanted, $abs_dir, $top_item);
235 $Is_Dir= 1;
236 }
237 }
238 else { # no follow
239 $topdir = $top_item;
240 unless (defined $topnlink) {
241 warnings::warnif "Can't stat $top_item: $!\n";
242 next Proc_Top_Item;
243 }
244 if (-d _) {
245 $top_item =~ s/\.dir\z//i if $Is_VMS;
246 _find_dir($wanted, $top_item, $topnlink);
247 $Is_Dir= 1;
248 }
249 else {
250 $abs_dir= $top_item;
251 }
252 }
253
254 unless ($Is_Dir) {
255 unless (($_,$dir) = File::Basename::fileparse($abs_dir)) {
256 ($dir,$_) = ('./', $top_item);
257 }
258
259 $abs_dir = $dir;
260 if (( $untaint ) && (is_tainted($dir) )) {
261 ( $abs_dir ) = $dir =~ m|$untaint_pat|;
262 unless (defined $abs_dir) {
263 if ($untaint_skip == 0) {
264 die "directory $dir is still tainted";
265 }
266 else {
267 next Proc_Top_Item;
268 }
269 }
270 }
271
272 unless ($no_chdir || chdir $abs_dir) {
273 warnings::warnif "Couldn't chdir $abs_dir: $!\n";
274 next Proc_Top_Item;
275 }
276
277 $name = $abs_dir . $_; # $File::Find::name
278 $_ = $name if $no_chdir;
279
280 { $wanted_callback->() }; # protect against wild "next"
281
282 }
283
284 unless ( $no_chdir ) {
285 if ( ($check_t_cwd) && (($untaint) && (is_tainted($cwd) )) ) {
286 ( $cwd_untainted ) = $cwd =~ m|$untaint_pat|;
287 unless (defined $cwd_untainted) {
288 die "insecure cwd in find(depth)";
289 }
290 $check_t_cwd = 0;
291 }
292 unless (chdir $cwd_untainted) {
293 die "Can't cd to $cwd: $!\n";
294 }
295 }
296 }
297}
298
299# API:
300# $wanted
301# $p_dir : "parent directory"
302# $nlink : what came back from the stat
303# preconditions:
304# chdir (if not no_chdir) to dir
305
306sub _find_dir($$$) {
307 my ($wanted, $p_dir, $nlink) = @_;
308 my ($CdLvl,$Level) = (0,0);
309 my @Stack;
310 my @filenames;
311 my ($subcount,$sub_nlink);
312 my $SE= [];
313 my $dir_name= $p_dir;
314 my $dir_pref;
315 my $dir_rel = $File::Find::current_dir;
316 my $tainted = 0;
317 my $no_nlink;
318
319 if ($Is_VMS) {
320 # VMS is returning trailing .dir on directories
321 # and trailing . on files and symbolic links
322 # in UNIX syntax.
323 #
324
325 $p_dir =~ s/\.(dir)?$//i unless $p_dir eq '.';
326
327 $dir_pref = ($p_dir =~ m/[\]>]+$/ ? $p_dir : "$p_dir/" );
328 }
329 else {
330 $dir_pref = _is_root($p_dir) ? $p_dir : "$p_dir/";
331 }
332
333 local ($dir, $name, $prune);
334
335 unless ( $no_chdir || ($p_dir eq $File::Find::current_dir)) {
336 my $udir = $p_dir;
337 if (( $untaint ) && (is_tainted($p_dir) )) {
338 ( $udir ) = $p_dir =~ m|$untaint_pat|;
339 unless (defined $udir) {
340 if ($untaint_skip == 0) {
341 die "directory $p_dir is still tainted";
342 }
343 else {
344 return;
345 }
346 }
347 }
348 unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) {
349 warnings::warnif "Can't cd to $udir: $!\n";
350 return;
351 }
352 }
353
354 # push the starting directory
355 push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
356
357 while (defined $SE) {
358 unless ($bydepth) {
359 $dir= $p_dir; # $File::Find::dir
360 $name= $dir_name; # $File::Find::name
361 $_= ($no_chdir ? $dir_name : $dir_rel ); # $_
362 # prune may happen here
363 $prune= 0;
364 { $wanted_callback->() }; # protect against wild "next"
365 next if $prune;
366 }
367
368 # change to that directory
369 unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
370 my $udir= $dir_rel;
371 if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_rel) )) ) {
372 ( $udir ) = $dir_rel =~ m|$untaint_pat|;
373 unless (defined $udir) {
374 if ($untaint_skip == 0) {
375 die "directory (" . ($p_dir ne '/' ? $p_dir : '') . "/) $dir_rel is still tainted";
376 } else { # $untaint_skip == 1
377 next;
378 }
379 }
380 }
381 unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) {
382 warnings::warnif "Can't cd to (" .
383 ($p_dir ne '/' ? $p_dir : '') . "/) $udir: $!\n";
384 next;
385 }
386 $CdLvl++;
387 }
388
389 $dir= $dir_name; # $File::Find::dir
390
391 # Get the list of files in the current directory.
392 my $dh;
393 unless (opendir $dh, ($no_chdir ? $dir_name : $File::Find::current_dir)) {
394 warnings::warnif "Can't opendir($dir_name): $!\n";
395 next;
396 }
397 @filenames = readdir $dh;
398 closedir($dh);
399 @filenames = $pre_process->(@filenames) if $pre_process;
400 push @Stack,[$CdLvl,$dir_name,"",-2] if $post_process;
401
402 # default: use whatever was specified
403 # (if $nlink >= 2, and $avoid_nlink == 0, this will switch back)
404 $no_nlink = $avoid_nlink;
405 # if dir has wrong nlink count, force switch to slower stat method
406 $no_nlink = 1 if ($nlink < 2);
407
408 if ($nlink == 2 && !$no_nlink) {
409 # This dir has no subdirectories.
410 for my $FN (@filenames) {
411 if ($Is_VMS) {
412 # Big hammer here - Compensate for VMS trailing . and .dir
413 # No win situation until this is changed, but this
414 # will handle the majority of the cases with breaking the fewest
415
416 $FN =~ s/\.dir\z//i;
417 $FN =~ s#\.$## if ($FN ne '.');
418 }
419 next if $FN =~ $File::Find::skip_pattern;
420
421 $name = $dir_pref . $FN; # $File::Find::name
422 $_ = ($no_chdir ? $name : $FN); # $_
423 { $wanted_callback->() }; # protect against wild "next"
424 }
425
426 }
427 else {
428 # This dir has subdirectories.
429 $subcount = $nlink - 2;
430
431 # HACK: insert directories at this position, so as to preserve
432 # the user pre-processed ordering of files (thus ensuring
433 # directory traversal is in user sorted order, not at random).
434 my $stack_top = @Stack;
435
436 for my $FN (@filenames) {
437 next if $FN =~ $File::Find::skip_pattern;
438 if ($subcount > 0 || $no_nlink) {
439 # Seen all the subdirs?
440 # check for directoriness.
441 # stat is faster for a file in the current directory
442 $sub_nlink = (lstat ($no_chdir ? $dir_pref . $FN : $FN))[3];
443
444 if (-d _) {
445 --$subcount;
446 $FN =~ s/\.dir\z//i if $Is_VMS;
447 # HACK: replace push to preserve dir traversal order
448 #push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink];
449 splice @Stack, $stack_top, 0,
450 [$CdLvl,$dir_name,$FN,$sub_nlink];
451 }
452 else {
453 $name = $dir_pref . $FN; # $File::Find::name
454 $_= ($no_chdir ? $name : $FN); # $_
455 { $wanted_callback->() }; # protect against wild "next"
456 }
457 }
458 else {
459 $name = $dir_pref . $FN; # $File::Find::name
460 $_= ($no_chdir ? $name : $FN); # $_
461 { $wanted_callback->() }; # protect against wild "next"
462 }
463 }
464 }
465 }
466 continue {
467 while ( defined ($SE = pop @Stack) ) {
468 ($Level, $p_dir, $dir_rel, $nlink) = @$SE;
469 if ($CdLvl > $Level && !$no_chdir) {
470 my $tmp;
471 if ($Is_VMS) {
472 $tmp = '[' . ('-' x ($CdLvl-$Level)) . ']';
473 }
474 else {
475 $tmp = join('/',('..') x ($CdLvl-$Level));
476 }
477 die "Can't cd to $tmp from $dir_name: $!"
478 unless chdir ($tmp);
479 $CdLvl = $Level;
480 }
481
482 if ($^O eq 'VMS') {
483 if ($p_dir =~ m/[\]>]+$/) {
484 $dir_name = $p_dir;
485 $dir_name =~ s/([\]>]+)$/.$dir_rel$1/;
486 $dir_pref = $dir_name;
487 }
488 else {
489 $dir_name = "$p_dir/$dir_rel";
490 $dir_pref = "$dir_name/";
491 }
492 }
493 else {
494 $dir_name = _is_root($p_dir) ? "$p_dir$dir_rel" : "$p_dir/$dir_rel";
495 $dir_pref = "$dir_name/";
496 }
497
498 if ( $nlink == -2 ) {
499 $name = $dir = $p_dir; # $File::Find::name / dir
500 $_ = $File::Find::current_dir;
501 $post_process->(); # End-of-directory processing
502 }
503 elsif ( $nlink < 0 ) { # must be finddepth, report dirname now
504 $name = $dir_name;
505 if ( substr($name,-2) eq '/.' ) {
506 substr($name, length($name) == 2 ? -1 : -2) = '';
507 }
508 $dir = $p_dir;
509 $_ = ($no_chdir ? $dir_name : $dir_rel );
510 if ( substr($_,-2) eq '/.' ) {
511 substr($_, length($_) == 2 ? -1 : -2) = '';
512 }
513 { $wanted_callback->() }; # protect against wild "next"
514 }
515 else {
516 push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
517 last;
518 }
519 }
520 }
521}
522
523
524# API:
525# $wanted
526# $dir_loc : absolute location of a dir
527# $p_dir : "parent directory"
528# preconditions:
529# chdir (if not no_chdir) to dir
530
531sub _find_dir_symlnk($$$) {
532 my ($wanted, $dir_loc, $p_dir) = @_; # $dir_loc is the absolute directory
533 my @Stack;
534 my @filenames;
535 my $new_loc;
536 my $updir_loc = $dir_loc; # untainted parent directory
537 my $SE = [];
538 my $dir_name = $p_dir;
539 my $dir_pref;
540 my $loc_pref;
541 my $dir_rel = $File::Find::current_dir;
542 my $byd_flag; # flag for pending stack entry if $bydepth
543 my $tainted = 0;
544 my $ok = 1;
545
546 $dir_pref = _is_root($p_dir) ? $p_dir : "$p_dir/";
547 $loc_pref = _is_root($dir_loc) ? $dir_loc : "$dir_loc/";
548
549 local ($dir, $name, $fullname, $prune);
550
551 unless ($no_chdir) {
552 # untaint the topdir
553 if (( $untaint ) && (is_tainted($dir_loc) )) {
554 ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|; # parent dir, now untainted
555 # once untainted, $updir_loc is pushed on the stack (as parent directory);
556 # hence, we don't need to untaint the parent directory every time we chdir
557 # to it later
558 unless (defined $updir_loc) {
559 if ($untaint_skip == 0) {
560 die "directory $dir_loc is still tainted";
561 }
562 else {
563 return;
564 }
565 }
566 }
567 $ok = chdir($updir_loc) unless ($p_dir eq $File::Find::current_dir);
568 unless ($ok) {
569 warnings::warnif "Can't cd to $updir_loc: $!\n";
570 return;
571 }
572 }
573
574 push @Stack,[$dir_loc,$updir_loc,$p_dir,$dir_rel,-1] if $bydepth;
575
576 while (defined $SE) {
577
578 unless ($bydepth) {
579 # change (back) to parent directory (always untainted)
580 unless ($no_chdir) {
581 unless (chdir $updir_loc) {
582 warnings::warnif "Can't cd to $updir_loc: $!\n";
583 next;
584 }
585 }
586 $dir= $p_dir; # $File::Find::dir
587 $name= $dir_name; # $File::Find::name
588 $_= ($no_chdir ? $dir_name : $dir_rel ); # $_
589 $fullname= $dir_loc; # $File::Find::fullname
590 # prune may happen here
591 $prune= 0;
592 lstat($_); # make sure file tests with '_' work
593 { $wanted_callback->() }; # protect against wild "next"
594 next if $prune;
595 }
596
597 # change to that directory
598 unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
599 $updir_loc = $dir_loc;
600 if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_loc) )) ) {
601 # untaint $dir_loc, what will be pushed on the stack as (untainted) parent dir
602 ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|;
603 unless (defined $updir_loc) {
604 if ($untaint_skip == 0) {
605 die "directory $dir_loc is still tainted";
606 }
607 else {
608 next;
609 }
610 }
611 }
612 unless (chdir $updir_loc) {
613 warnings::warnif "Can't cd to $updir_loc: $!\n";
614 next;
615 }
616 }
617
618 $dir = $dir_name; # $File::Find::dir
619
620 # Get the list of files in the current directory.
621 my $dh;
622 unless (opendir $dh, ($no_chdir ? $dir_loc : $File::Find::current_dir)) {
623 warnings::warnif "Can't opendir($dir_loc): $!\n";
624 next;
625 }
626 @filenames = readdir $dh;
627 closedir($dh);
628
629 for my $FN (@filenames) {
630 if ($Is_VMS) {
631 # Big hammer here - Compensate for VMS trailing . and .dir
632 # No win situation until this is changed, but this
633 # will handle the majority of the cases with breaking the fewest.
634
635 $FN =~ s/\.dir\z//i;
636 $FN =~ s#\.$## if ($FN ne '.');
637 }
638 next if $FN =~ $File::Find::skip_pattern;
639
640 # follow symbolic links / do an lstat
641 $new_loc = Follow_SymLink($loc_pref.$FN);
642
643 # ignore if invalid symlink
644 unless (defined $new_loc) {
645 if (!defined -l _ && $dangling_symlinks) {
646 $fullname = undef;
647 if (ref $dangling_symlinks eq 'CODE') {
648 $dangling_symlinks->($FN, $dir_pref);
649 } else {
650 warnings::warnif "$dir_pref$FN is a dangling symbolic link\n";
651 }
652 }
653 else {
654 $fullname = $loc_pref . $FN;
655 }
656 $name = $dir_pref . $FN;
657 $_ = ($no_chdir ? $name : $FN);
658 { $wanted_callback->() };
659 next;
660 }
661
662 if (-d _) {
663 if ($Is_VMS) {
664 $FN =~ s/\.dir\z//i;
665 $FN =~ s#\.$## if ($FN ne '.');
666 $new_loc =~ s/\.dir\z//i;
667 $new_loc =~ s#\.$## if ($new_loc ne '.');
668 }
669 push @Stack,[$new_loc,$updir_loc,$dir_name,$FN,1];
670 }
671 else {
672 $fullname = $new_loc; # $File::Find::fullname
673 $name = $dir_pref . $FN; # $File::Find::name
674 $_ = ($no_chdir ? $name : $FN); # $_
675 { $wanted_callback->() }; # protect against wild "next"
676 }
677 }
678
679 }
680 continue {
681 while (defined($SE = pop @Stack)) {
682 ($dir_loc, $updir_loc, $p_dir, $dir_rel, $byd_flag) = @$SE;
683 $dir_name = _is_root($p_dir) ? "$p_dir$dir_rel" : "$p_dir/$dir_rel";
684 $dir_pref = "$dir_name/";
685 $loc_pref = "$dir_loc/";
686 if ( $byd_flag < 0 ) { # must be finddepth, report dirname now
687 unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
688 unless (chdir $updir_loc) { # $updir_loc (parent dir) is always untainted
689 warnings::warnif "Can't cd to $updir_loc: $!\n";
690 next;
691 }
692 }
693 $fullname = $dir_loc; # $File::Find::fullname
694 $name = $dir_name; # $File::Find::name
695 if ( substr($name,-2) eq '/.' ) {
696 substr($name, length($name) == 2 ? -1 : -2) = ''; # $File::Find::name
697 }
698 $dir = $p_dir; # $File::Find::dir
699 $_ = ($no_chdir ? $dir_name : $dir_rel); # $_
700 if ( substr($_,-2) eq '/.' ) {
701 substr($_, length($_) == 2 ? -1 : -2) = '';
702 }
703
704 lstat($_); # make sure file tests with '_' work
705 { $wanted_callback->() }; # protect against wild "next"
706 }
707 else {
708 push @Stack,[$dir_loc, $updir_loc, $p_dir, $dir_rel,-1] if $bydepth;
709 last;
710 }
711 }
712 }
713}
714
715
716sub wrap_wanted {
717 my $wanted = shift;
718 if ( ref($wanted) eq 'HASH' ) {
719 # RT #122547
720 my %valid_options = map {$_ => 1} qw(
721 wanted
722 bydepth
723 preprocess
724 postprocess
725 follow
726 follow_fast
727 follow_skip
728 dangling_symlinks
729 no_chdir
730 untaint
731 untaint_pattern
732 untaint_skip
733 );
734 my @invalid_options = ();
735 for my $v (keys %{$wanted}) {
736 push @invalid_options, $v unless exists $valid_options{$v};
737 }
738 warn "Invalid option(s): @invalid_options" if @invalid_options;
739
740 unless( exists $wanted->{wanted} and ref( $wanted->{wanted} ) eq 'CODE' ) {
741 die 'no &wanted subroutine given';
742 }
743 if ( $wanted->{follow} || $wanted->{follow_fast}) {
744 $wanted->{follow_skip} = 1 unless defined $wanted->{follow_skip};
745 }
746 if ( $wanted->{untaint} ) {
747 $wanted->{untaint_pattern} = $File::Find::untaint_pattern
748 unless defined $wanted->{untaint_pattern};
749 $wanted->{untaint_skip} = 0 unless defined $wanted->{untaint_skip};
750 }
751 return $wanted;
752 }
753 elsif( ref( $wanted ) eq 'CODE' ) {
754 return { wanted => $wanted };
755 }
756 else {
757 die 'no &wanted subroutine given';
758 }
759}
760
761sub find {
762 my $wanted = shift;
763 _find_opt(wrap_wanted($wanted), @_);
764}
765
766sub finddepth {
767 my $wanted = wrap_wanted(shift);
768 $wanted->{bydepth} = 1;
769 _find_opt($wanted, @_);
770}
771
772# default
77315µs12µs$File::Find::skip_pattern = qr/^\.{1,2}\z/;
# spent 2µs making 1 call to CORE::qr
77412µs1400ns$File::Find::untaint_pattern = qr|^([-+@\w./]+)$|;
# spent 400ns making 1 call to CORE::qr
775
776# this _should_ work properly on all platforms
777# where File::Find can be expected to work
77814µs11µs$File::Find::current_dir = File::Spec->curdir || '.';
# spent 1µs making 1 call to File::Spec::Unix::curdir
779
7801100ns$File::Find::dont_use_nlink = 1;
781
782# We need a function that checks if a scalar is tainted. Either use the
783# Scalar::Util module's tainted() function or our (slower) pure Perl
784# fallback is_tainted_pp()
785{
7862300ns local $@;
7872700ns eval { require Scalar::Util };
78811µs *is_tainted = $@ ? \&is_tainted_pp : \&Scalar::Util::tainted;
789}
790
79117µs1;
792
793__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 91)[XML-Twig-pm-5871]-208-line.html0000644000175000017500000004115014576335353024344 0ustar michamicha Profile of (eval 91)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 91)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 31 statements in 56µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
282126µs33µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs16µsXML::Twig::Elt::::BEGIN@1.35XML::Twig::Elt::BEGIN@1.35
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
13156µs3033µs
# spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.35 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 33µs (26+7) within XML::Twig::Elt::__ANON__[(eval 91)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 28 times, avg 1µs/call: # 22 times (18µs+6µs) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 1µs/call # 6 times (8µs+2µs) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 2µs/call
sub { no warnings; ; return ( $_[0]->gi eq "s:u") ? $_[0] : undef; }
# spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.35 # spent 10µs making 1 call to warnings::unimport # spent 8µs making 28 calls to XML::Twig::Elt::gi, avg 268ns/call
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-V2-pm-64-line.html0000644000175000017500000010160614576335353023167 0ustar michamicha Profile of Test2/Event/V2.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/V2.pm
StatementsExecuted 41 statements in 472µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111595µs1.71msTest2::Event::V2::::BEGIN@12Test2::Event::V2::BEGIN@12
11124µs28µsTest2::Event::V2::::facet_dataTest2::Event::V2::facet_data
11111µs12µsTest2::Event::V2::::BEGIN@2Test2::Event::V2::BEGIN@2
1117µs11µsTest2::Event::V2::::initTest2::Event::V2::init
1116µs6µsTest2::Event::V2::::BEGIN@10Test2::Event::V2::BEGIN@10
1116µs40µsTest2::Event::V2::::BEGIN@17Test2::Event::V2::BEGIN@17
1114µs21µsTest2::Event::V2::::BEGIN@7Test2::Event::V2::BEGIN@7
1114µs20µsTest2::Event::V2::::BEGIN@3Test2::Event::V2::BEGIN@3
1113µs15µsTest2::Event::V2::::BEGIN@8Test2::Event::V2::BEGIN@8
1111µs1µsTest2::Event::V2::::non_facet_keysTest2::Event::V2::non_facet_keys
0000s0sTest2::Event::V2::::set_uuidTest2::Event::V2::set_uuid
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::V2;
2220µs214µs
# spent 12µs (11+2) within Test2::Event::V2::BEGIN@2 which was called: # once (11µs+2µs) by Test::Builder::BEGIN@18 at line 2
use strict;
# spent 12µs making 1 call to Test2::Event::V2::BEGIN@2 # spent 2µs making 1 call to strict::import
3227µs237µs
# spent 20µs (4+17) within Test2::Event::V2::BEGIN@3 which was called: # once (4µs+17µs) by Test::Builder::BEGIN@18 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Event::V2::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7216µs237µs
# spent 21µs (4+17) within Test2::Event::V2::BEGIN@7 which was called: # once (4µs+17µs) by Test::Builder::BEGIN@18 at line 7
use Scalar::Util qw/reftype/;
# spent 21µs making 1 call to Test2::Event::V2::BEGIN@7 # spent 17µs making 1 call to Exporter::import
8229µs227µs
# spent 15µs (3+12) within Test2::Event::V2::BEGIN@8 which was called: # once (3µs+12µs) by Test::Builder::BEGIN@18 at line 8
use Carp qw/croak/;
# spent 15µs making 1 call to Test2::Event::V2::BEGIN@8 # spent 12µs making 1 call to Exporter::import
9
10224µs16µs
# spent 6µs within Test2::Event::V2::BEGIN@10 which was called: # once (6µs+0s) by Test::Builder::BEGIN@18 at line 10
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 6µs making 1 call to Test2::Event::V2::BEGIN@10
11
1215µs145µs
# spent 1.71ms (595µs+1.11) within Test2::Event::V2::BEGIN@12 which was called: # once (595µs+1.11ms) by Test::Builder::BEGIN@18 at line 15
use Test2::Util::Facets2Legacy qw{
# spent 45µs making 1 call to Exporter::import
13 causes_fail diagnostics global increments_count no_display sets_plan
14 subtest_id summary terminate
15182µs11.71ms};
# spent 1.71ms making 1 call to Test2::Event::V2::BEGIN@12
16
172234µs274µs
# spent 40µs (6+35) within Test2::Event::V2::BEGIN@17 which was called: # once (6µs+35µs) by Test::Builder::BEGIN@18 at line 17
use Test2::Util::HashBase qw/-about/;
# spent 40µs making 1 call to Test2::Event::V2::BEGIN@17 # spent 34µs making 1 call to Test2::Util::HashBase::import
18
19
# spent 1µs within Test2::Event::V2::non_facet_keys which was called: # once (1µs+0s) by Test2::Event::V2::facet_data at line 58
sub non_facet_keys {
20 return (
2112µs +UUID,
22 Test2::Util::ExternalMeta::META_KEY(),
23 );
24}
25
26
# spent 11µs (7+4) within Test2::Event::V2::init which was called: # once (7µs+4µs) by Test2::Util::HashBase::_new at line 155 of Test2/Util/HashBase.pm
sub init {
271300ns my $self = shift;
28
291400ns my $uuid;
3012µs if ($uuid = $self->{+UUID}) {
31 croak "uuid '$uuid' passed to constructor, but uuid '$self->{+ABOUT}->{uuid}' is already set in the 'about' facet"
32 if $self->{+ABOUT}->{uuid} && $self->{+ABOUT}->{uuid} ne $uuid;
33
34 $self->{+ABOUT}->{uuid} = $uuid;
35 }
36 elsif ($self->{+ABOUT} && $self->{+ABOUT}->{uuid}) {
37 $uuid = $self->{+ABOUT}->{uuid};
38 $self->SUPER::set_uuid($uuid);
39 }
40
41 # Clone the trace, make sure it is blessed
4214µs10s if (my $trace = $self->{+TRACE}) {
# spent 4µs making 1 call to Test2::Util::HashBase::_new, recursion: max depth 1, sum of overlapping time 4µs
43 $self->{+TRACE} = Test2::EventFacet::Trace->new(%$trace);
44 }
45}
46
47sub set_uuid {
48 my $self = shift;
49 my ($uuid) = @_;
50 $self->{+ABOUT}->{uuid} = $uuid;
51 $self->SUPER::set_uuid($uuid);
52}
53
54
# spent 28µs (24+4) within Test2::Event::V2::facet_data which was called: # once (24µs+4µs) by Test2::Hub::process at line 343 of Test2/Hub.pm
sub facet_data {
551400ns my $self = shift;
5611µs my $f = { %{$self} };
57
5813µs11µs delete $f->{$_} for $self->non_facet_keys;
# spent 1µs making 1 call to Test2::Event::V2::non_facet_keys
59
601200ns my %out;
6111µs for my $k (keys %$f) {
6242µs next if substr($k, 0, 1) eq '_';
63
643700ns my $data = $f->{$k} or next; # Key is there, but no facet
6536µs32µs my $is_list = 'ARRAY' eq (reftype($data) || '');
# spent 2µs making 3 calls to Scalar::Util::reftype, avg 600ns/call
6636µs $out{$k} = $is_list ? [ map { {%{$_}} } @$data ] : {%$data};
67 }
68
6912µs11µs if (my $meta = $self->meta_facet_data) {
# spent 1µs making 1 call to Test2::Event::meta_facet_data
70 $out{meta} = {%$meta, %{$out{meta} || {}}};
71 }
72
7312µs return \%out;
74}
75
7612µs1;
77
78__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 39)[JSON-PP-pm-692]-147-line.html0000644000175000017500000003203414576335353024003 0ustar michamicha Profile of (eval 39)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 39)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
112µs 11111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Formatter-TAP-pm-68-line.html0000644000175000017500000027525014576335353024221 0ustar michamicha Profile of Test2/Formatter/TAP.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Formatter/TAP.pm
StatementsExecuted 121 statements in 1.98ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111171µs200µsTest2::Formatter::TAP::::BEGIN@17Test2::Formatter::TAP::BEGIN@17
32126µs144µsTest2::Formatter::TAP::::writeTest2::Formatter::TAP::write
31118µs89µsTest2::Formatter::TAP::::print_optimal_passTest2::Formatter::TAP::print_optimal_pass
44117µs20µsTest2::Formatter::TAP::::_autoflushTest2::Formatter::TAP::_autoflush
21114µs25µsTest2::Formatter::TAP::::event_tapTest2::Formatter::TAP::event_tap
11113µs78µsTest2::Formatter::TAP::::_open_handlesTest2::Formatter::TAP::_open_handles
11111µs25µsTest2::Formatter::TAP::::BEGIN@89Test2::Formatter::TAP::BEGIN@89
1119µs11µsTest2::Formatter::TAP::::BEGIN@2Test2::Formatter::TAP::BEGIN@2
1117µs21µsTest2::Formatter::TAP::::BEGIN@3Test2::Formatter::TAP::BEGIN@3
1116µs77µsTest2::Formatter::TAP::::BEGIN@9Test2::Formatter::TAP::BEGIN@9
1114µs16µsTest2::Formatter::TAP::::BEGIN@113Test2::Formatter::TAP::BEGIN@113
1114µs19µsTest2::Formatter::TAP::::BEGIN@7Test2::Formatter::TAP::BEGIN@7
1114µs82µsTest2::Formatter::TAP::::initTest2::Formatter::TAP::init
1114µs4µsTest2::Formatter::TAP::::plan_tapTest2::Formatter::TAP::plan_tap
1112µs2µsTest2::Formatter::TAP::::summary_tapTest2::Formatter::TAP::summary_tap
111300ns300nsTest2::Formatter::TAP::::OUT_ERRTest2::Formatter::TAP::OUT_ERR (xsub)
0000s0sTest2::Formatter::TAP::::__ANON__[:90]Test2::Formatter::TAP::__ANON__[:90]
0000s0sTest2::Formatter::TAP::::assert_tapTest2::Formatter::TAP::assert_tap
0000s0sTest2::Formatter::TAP::::calc_table_sizeTest2::Formatter::TAP::calc_table_size
0000s0sTest2::Formatter::TAP::::debug_tapTest2::Formatter::TAP::debug_tap
0000s0sTest2::Formatter::TAP::::encodingTest2::Formatter::TAP::encoding
0000s0sTest2::Formatter::TAP::::error_tapTest2::Formatter::TAP::error_tap
0000s0sTest2::Formatter::TAP::::halt_tapTest2::Formatter::TAP::halt_tap
0000s0sTest2::Formatter::TAP::::hide_bufferedTest2::Formatter::TAP::hide_buffered
0000s0sTest2::Formatter::TAP::::info_tapTest2::Formatter::TAP::info_tap
0000s0sTest2::Formatter::TAP::::no_subtest_spaceTest2::Formatter::TAP::no_subtest_space
0000s0sTest2::Formatter::TAP::::supports_tablesTest2::Formatter::TAP::supports_tables
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Formatter::TAP;
2216µs212µs
# spent 11µs (9+1) within Test2::Formatter::TAP::BEGIN@2 which was called: # once (9µs+1µs) by Test::Builder::Formatter::BEGIN@7 at line 2
use strict;
# spent 11µs making 1 call to Test2::Formatter::TAP::BEGIN@2 # spent 1µs making 1 call to strict::import
3223µs236µs
# spent 21µs (7+14) within Test2::Formatter::TAP::BEGIN@3 which was called: # once (7µs+14µs) by Test::Builder::Formatter::BEGIN@7 at line 3
use warnings;
# spent 21µs making 1 call to Test2::Formatter::TAP::BEGIN@3 # spent 14µs making 1 call to warnings::import
4
51400nsour $VERSION = '1.302198';
6
7218µs234µs
# spent 19µs (4+15) within Test2::Formatter::TAP::BEGIN@7 which was called: # once (4µs+15µs) by Test::Builder::Formatter::BEGIN@7 at line 7
use Test2::Util qw/clone_io/;
# spent 19µs making 1 call to Test2::Formatter::TAP::BEGIN@7 # spent 15µs making 1 call to Exporter::import
8
912µs172µs
# spent 77µs (6+72) within Test2::Formatter::TAP::BEGIN@9 which was called: # once (6µs+72µs) by Test::Builder::Formatter::BEGIN@7 at line 12
use Test2::Util::HashBase qw{
# spent 72µs making 1 call to Test2::Util::HashBase::import
10 no_numbers handles _encoding _last_fh
11 -made_assertion
12138µs177µs};
# spent 77µs making 1 call to Test2::Formatter::TAP::BEGIN@9
13
14sub OUT_STD() { 0 }
15sub OUT_ERR() { 1 }
16
172304µs1200µs
# spent 200µs (171+29) within Test2::Formatter::TAP::BEGIN@17 which was called: # once (171µs+29µs) by Test::Builder::Formatter::BEGIN@7 at line 17
BEGIN { require Test2::Formatter; our @ISA = qw(Test2::Formatter) }
# spent 200µs making 1 call to Test2::Formatter::TAP::BEGIN@17
18
191100nsmy $supports_tables;
20sub supports_tables {
21 if (!defined $supports_tables) {
22 local $SIG{__DIE__} = 'DEFAULT';
23 local $@;
24 $supports_tables
25 = ($INC{'Term/Table.pm'} && $INC{'Term/Table/Util.pm'})
26 || eval { require Term::Table; require Term::Table::Util; 1 }
27 || 0;
28 }
29 return $supports_tables;
30}
31
32
# spent 20µs (17+2) within Test2::Formatter::TAP::_autoflush which was called 4 times, avg 5µs/call: # once (10µs+1µs) by Test::Builder::Formatter::BEGIN@7 at line 39 # once (3µs+600ns) by Test::Builder::Formatter::BEGIN@7 at line 40 # once (3µs+400ns) by Test2::Formatter::TAP::_open_handles at line 60 # once (2µs+100ns) by Test2::Formatter::TAP::_open_handles at line 61
sub _autoflush {
3341µs my($fh) = pop;
3449µs42µs my $old_fh = select $fh;
# spent 2µs making 4 calls to CORE::select, avg 400ns/call
3542µs $| = 1;
36411µs4700ns select $old_fh;
# spent 700ns making 4 calls to CORE::select, avg 175ns/call
37}
38
3912µs111µs_autoflush(\*STDOUT);
# spent 11µs making 1 call to Test2::Formatter::TAP::_autoflush
401600ns13µs_autoflush(\*STDERR);
# spent 3µs making 1 call to Test2::Formatter::TAP::_autoflush
41
42sub hide_buffered { 1 }
43
44
# spent 82µs (4+78) within Test2::Formatter::TAP::init which was called: # once (4µs+78µs) by Test::Builder::Formatter::init at line 21 of Test/Builder/Formatter.pm
sub init {
451100ns my $self = shift;
46
4712µs178µs $self->{+HANDLES} ||= $self->_open_handles;
# spent 78µs making 1 call to Test2::Formatter::TAP::_open_handles
4812µs if(my $enc = delete $self->{encoding}) {
49 $self->encoding($enc);
50 }
51}
52
53
# spent 78µs (13+65) within Test2::Formatter::TAP::_open_handles which was called: # once (13µs+65µs) by Test2::Formatter::TAP::init at line 47
sub _open_handles {
541100ns my $self = shift;
55
561300ns require Test2::API;
5711µs237µs my $out = clone_io(Test2::API::test2_stdout());
# spent 36µs making 1 call to Test2::Util::clone_io # spent 600ns making 1 call to Test2::API::test2_stdout
5811µs223µs my $err = clone_io(Test2::API::test2_stderr());
# spent 22µs making 1 call to Test2::Util::clone_io # spent 500ns making 1 call to Test2::API::test2_stderr
59
601600ns13µs _autoflush($out);
# spent 3µs making 1 call to Test2::Formatter::TAP::_autoflush
611300ns12µs _autoflush($err);
# spent 2µs making 1 call to Test2::Formatter::TAP::_autoflush
62
6312µs return [$out, $err];
64}
65
66sub encoding {
67 my $self = shift;
68
69 if ($] ge "5.007003" and @_) {
70 my ($enc) = @_;
71 my $handles = $self->{+HANDLES};
72
73 # https://rt.perl.org/Public/Bug/Display.html?id=31923
74 # If utf8 is requested we use ':utf8' instead of ':encoding(utf8)' in
75 # order to avoid the thread segfault.
76 if ($enc =~ m/^utf-?8$/i) {
77 binmode($_, ":utf8") for @$handles;
78 }
79 else {
80 binmode($_, ":encoding($enc)") for @$handles;
81 }
82 $self->{+_ENCODING} = $enc;
83 }
84
85 return $self->{+_ENCODING};
86}
87
881500nsif ($^C) {
892104µs238µs
# spent 25µs (11+14) within Test2::Formatter::TAP::BEGIN@89 which was called: # once (11µs+14µs) by Test::Builder::Formatter::BEGIN@7 at line 89
no warnings 'redefine';
# spent 25µs making 1 call to Test2::Formatter::TAP::BEGIN@89 # spent 14µs making 1 call to warnings::unimport
90 *write = sub {};
91}
92
# spent 144µs (26+119) within Test2::Formatter::TAP::write which was called 3 times, avg 48µs/call: # 2 times (20µs+32µs) by Test2::Hub::process at line 373 of Test2/Hub.pm, avg 26µs/call # once (6µs+87µs) by Test2::Hub::process at line 334 of Test2/Hub.pm
sub write {
9331µs my ($self, $e, $num, $f) = @_;
94
95 # The most common case, a pass event with no amnesty and a normal name.
9637µs389µs return if $self->print_optimal_pass($e, $num);
# spent 89µs making 3 calls to Test2::Formatter::TAP::print_optimal_pass, avg 30µs/call
97
982600ns $f ||= $e->facet_data;
99
1002700ns $self->encoding($f->{control}->{encoding}) if $f->{control}->{encoding};
101
10225µs225µs my @tap = $self->event_tap($f, $num) or return;
# spent 25µs making 2 calls to Test2::Formatter::TAP::event_tap, avg 12µs/call
103
1041300ns $self->{+MADE_ASSERTION} = 1 if $f->{assert};
105
1061500ns my $nesting = $f->{trace}->{nested} || 0;
1071300ns my $handles = $self->{+HANDLES};
1081800ns my $indent = ' ' x $nesting;
109
110 # Local is expensive! Only do it if we really need to.
1111700ns local($\, $,) = (undef, '') if $\ || $,;
11212µs for my $set (@tap) {
11321.30ms228µs
# spent 16µs (4+12) within Test2::Formatter::TAP::BEGIN@113 which was called: # once (4µs+12µs) by Test::Builder::Formatter::BEGIN@7 at line 113
no warnings 'uninitialized';
# spent 16µs making 1 call to Test2::Formatter::TAP::BEGIN@113 # spent 12µs making 1 call to warnings::unimport
1141700ns my ($hid, $msg) = @$set;
1151200ns next unless $msg;
1161500ns my $io = $handles->[$hid] or next;
117
118 print $io "\n"
119 if $ENV{HARNESS_ACTIVE}
120 && $hid == OUT_ERR
1211400ns && $self->{+_LAST_FH} != $io
122 && $msg =~ m/^#\s*Failed( \(TODO\))? test /;
123
1241200ns $msg =~ s/^/$indent/mg if $nesting;
12516µs15µs print $io $msg;
# spent 5µs making 1 call to CORE::print
1261800ns $self->{+_LAST_FH} = $io;
127 }
128}
129
130
# spent 89µs (18+71) within Test2::Formatter::TAP::print_optimal_pass which was called 3 times, avg 30µs/call: # 3 times (18µs+71µs) by Test2::Formatter::TAP::write at line 96, avg 30µs/call
sub print_optimal_pass {
1313800ns my ($self, $e, $num) = @_;
132
1333900ns my $type = ref($e);
134
135 # Only optimal if this is a Pass or a passing Ok
13633µs return unless $type eq 'Test2::Event::Pass' || ($type eq 'Test2::Event::Ok' && $e->{pass});
137
138 # Amnesty requires further processing (todo is a form of amnesty)
13911µs return if ($e->{amnesty} && @{$e->{amnesty}}) || defined($e->{todo});
140
141 # A name with a newline or hash symbol needs extra processing
1421300ns return if defined($e->{name}) && (-1 != index($e->{name}, "\n") || -1 != index($e->{name}, '#'));
143
1441400ns my $ok = 'ok';
14511µs $ok .= " $num" if $num && !$self->{+NO_NUMBERS};
1461700ns $ok .= defined($e->{name}) ? " - $e->{name}\n" : "\n";
147
1481500ns if (my $nesting = $e->{trace}->{nested}) {
149 my $indent = ' ' x $nesting;
150 $ok = "$indent$ok";
151 }
152
1531800ns my $io = $self->{+HANDLES}->[OUT_STD];
154
15511µs local($\, $,) = (undef, '') if $\ || $,;
156176µs171µs print $io $ok;
# spent 71µs making 1 call to CORE::print
1571800ns $self->{+_LAST_FH} = $io;
158
15913µs return 1;
160}
161
162
# spent 25µs (14+11) within Test2::Formatter::TAP::event_tap which was called 2 times, avg 12µs/call: # 2 times (14µs+11µs) by Test2::Formatter::TAP::write at line 102, avg 12µs/call
sub event_tap {
1632600ns my ($self, $f, $num) = @_;
164
1652400ns my @tap;
166
167 # If this IS the first event the plan should come first
168 # (plan must be before or after assertions, not in the middle)
16923µs19µs push @tap => $self->plan_tap($f) if $f->{plan} && !$self->{+MADE_ASSERTION};
# spent 9µs making 1 call to Test::Builder::Formatter::plan_tap
170
171 # The assertion is most important, if present.
1722500ns if ($f->{assert}) {
173 push @tap => $self->assert_tap($f, $num);
174 push @tap => $self->debug_tap($f, $num) unless $f->{assert}->{no_debug} || $f->{assert}->{pass};
175 }
176
177 # Almost as important as an assertion
1782400ns push @tap => $self->error_tap($f) if $f->{errors};
179
180 # Now lets see the diagnostics messages
1812400ns push @tap => $self->info_tap($f) if $f->{info};
182
183 # If this IS NOT the first event the plan should come last
184 # (plan must be before or after assertions, not in the middle)
1852400ns push @tap => $self->plan_tap($f) if $self->{+MADE_ASSERTION} && $f->{plan};
186
187 # Bail out
1882500ns push @tap => $self->halt_tap($f) if $f->{control}->{halt};
189
19023µs return @tap if @tap;
1911300ns return @tap if $f->{control}->{halt};
19211µs return @tap if grep { $f->{$_} } qw/assert plan info errors/;
193
194 # Use the summary as a fallback if nothing else is usable.
19514µs12µs return $self->summary_tap($f, $num);
# spent 2µs making 1 call to Test2::Formatter::TAP::summary_tap
196}
197
198sub error_tap {
199 my $self = shift;
200 my ($f) = @_;
201
202 my $IO = ($f->{amnesty} && @{$f->{amnesty}}) ? OUT_STD : OUT_ERR;
203
204 return map {
205 my $details = $_->{details};
206
207 my $msg;
208 if (ref($details)) {
209 require Data::Dumper;
210 my $dumper = Data::Dumper->new([$details])->Indent(2)->Terse(1)->Pad('# ')->Useqq(1)->Sortkeys(1);
211 chomp($msg = $dumper->Dump);
212 }
213 else {
214 chomp($msg = $details);
215 $msg =~ s/^/# /;
216 $msg =~ s/\n/\n# /g;
217 }
218
219 [$IO, "$msg\n"];
220 } @{$f->{errors}};
221}
222
223
# spent 4µs within Test2::Formatter::TAP::plan_tap which was called: # once (4µs+0s) by Test::Builder::Formatter::plan_tap at line 29 of Test/Builder/Formatter.pm
sub plan_tap {
2241200ns my $self = shift;
2251200ns my ($f) = @_;
2261500ns my $plan = $f->{plan} or return;
227
2281400ns return if $plan->{none};
229
2301300ns if ($plan->{skip}) {
231 my $reason = $plan->{details} or return [OUT_STD, "1..0 # SKIP\n"];
232 chomp($reason);
233 return [OUT_STD, '1..0 # SKIP ' . $reason . "\n"];
234 }
235
23613µs return [OUT_STD, "1.." . $plan->{count} . "\n"];
237}
238
239sub no_subtest_space { 0 }
240sub assert_tap {
241 my $self = shift;
242 my ($f, $num) = @_;
243
244 my $assert = $f->{assert} or return;
245 my $pass = $assert->{pass};
246 my $name = $assert->{details};
247
248 my $ok = $pass ? 'ok' : 'not ok';
249 $ok .= " $num" if $num && !$self->{+NO_NUMBERS};
250
251 # The regex form is ~250ms, the index form is ~50ms
252 my @extra;
253 defined($name) && (
254 (index($name, "\n") != -1 && (($name, @extra) = split(/\n\r?/, $name, -1))),
255 ((index($name, "#" ) != -1 || substr($name, -1) eq '\\') && (($name =~ s|\\|\\\\|g), ($name =~ s|#|\\#|g)))
256 );
257
258 my $extra_space = @extra ? ' ' x (length($ok) + 2) : '';
259 my $extra_indent = '';
260
261 my ($directives, $reason, $is_skip);
262 if ($f->{amnesty}) {
263 my %directives;
264
265 for my $am (@{$f->{amnesty}}) {
266 next if $am->{inherited};
267 my $tag = $am->{tag} or next;
268 $is_skip = 1 if $tag eq 'skip';
269
270 $directives{$tag} ||= $am->{details};
271 }
272
273 my %seen;
274
275 # Sort so that TODO comes before skip even on systems where lc sorts
276 # before uc, as other code depends on that ordering.
277 my @order = grep { !$seen{$_}++ } sort { lc $b cmp lc $a } keys %directives;
278
279 $directives = ' # ' . join ' & ' => @order;
280
281 for my $tag ('skip', @order) {
282 next unless defined($directives{$tag}) && length($directives{$tag});
283 $reason = $directives{$tag};
284 last;
285 }
286 }
287
288 $ok .= " - $name" if defined $name && !($is_skip && !$name);
289
290 my @subtap;
291 if ($f->{parent} && $f->{parent}->{buffered}) {
292 $ok .= ' {';
293
294 # In a verbose harness we indent the extra since they will appear
295 # inside the subtest braces. This helps readability. In a non-verbose
296 # harness we do not do this because it is less readable.
297 if ($ENV{HARNESS_IS_VERBOSE} || !$ENV{HARNESS_ACTIVE}) {
298 $extra_indent = " ";
299 $extra_space = ' ';
300 }
301
302 # Render the sub-events, we use our own counter for these.
303 my $count = 0;
304 @subtap = map {
305 my $f2 = $_;
306
307 # Bump the count for any event that should bump it.
308 $count++ if $f2->{assert};
309
310 # This indents all output lines generated for the sub-events.
311 # index 0 is the filehandle, index 1 is the message we want to indent.
312 map { $_->[1] =~ s/^(.*\S.*)$/ $1/mg; $_ } $self->event_tap($f2, $count);
313 } @{$f->{parent}->{children}};
314
315 push @subtap => [OUT_STD, "}\n"];
316 }
317
318 if ($directives) {
319 $directives = ' # TODO & SKIP' if $directives eq ' # TODO & skip';
320 $ok .= $directives;
321 $ok .= " $reason" if defined($reason);
322 }
323
324 $extra_space = ' ' if $self->no_subtest_space;
325
326 my @out = ([OUT_STD, "$ok\n"]);
327 push @out => map {[OUT_STD, "${extra_indent}#${extra_space}$_\n"]} @extra if @extra;
328 push @out => @subtap;
329
330 return @out;
331}
332
333sub debug_tap {
334 my ($self, $f, $num) = @_;
335
336 # Figure out the debug info, this is typically the file name and line
337 # number, but can also be a custom message. If no trace object is provided
338 # then we have nothing useful to display.
339 my $name = $f->{assert}->{details};
340 my $trace = $f->{trace};
341
342 my $debug = "[No trace info available]";
343 if ($trace->{details}) {
344 $debug = $trace->{details};
345 }
346 elsif ($trace->{frame}) {
347 my ($pkg, $file, $line) = @{$trace->{frame}};
348 $debug = "at $file line $line." if $file && $line;
349 }
350
351 my $amnesty = $f->{amnesty} && @{$f->{amnesty}}
352 ? ' (with amnesty)'
353 : '';
354
355 # Create the initial diagnostics. If the test has a name we put the debug
356 # info on a second line, this behavior is inherited from Test::Builder.
357 my $msg = defined($name)
358 ? qq[# Failed test${amnesty} '$name'\n# $debug\n]
359 : qq[# Failed test${amnesty} $debug\n];
360
361 my $IO = $f->{amnesty} && @{$f->{amnesty}} ? OUT_STD : OUT_ERR;
362
363 return [$IO, $msg];
364}
365
366sub halt_tap {
367 my ($self, $f) = @_;
368
369 return if $f->{trace}->{nested} && !$f->{trace}->{buffered};
370 my $details = $f->{control}->{details};
371
372 return [OUT_STD, "Bail out!\n"] unless defined($details) && length($details);
373 return [OUT_STD, "Bail out! $details\n"];
374}
375
376sub info_tap {
377 my ($self, $f) = @_;
378
379 return map {
380 my $details = $_->{details};
381 my $table = $_->{table};
382
383 my $IO = $_->{debug} && !($f->{amnesty} && @{$f->{amnesty}}) ? OUT_ERR : OUT_STD;
384
385 my $msg;
386 if ($table && $self->supports_tables) {
387 $msg = join "\n" => map { "# $_" } Term::Table->new(
388 header => $table->{header},
389 rows => $table->{rows},
390 collapse => $table->{collapse},
391 no_collapse => $table->{no_collapse},
392 sanitize => 1,
393 mark_tail => 1,
394 max_width => $self->calc_table_size($f),
395 )->render();
396 }
397 elsif (ref($details)) {
398 require Data::Dumper;
399 my $dumper = Data::Dumper->new([$details])->Indent(2)->Terse(1)->Pad('# ')->Useqq(1)->Sortkeys(1);
400 chomp($msg = $dumper->Dump);
401 }
402 else {
403 chomp($msg = $details);
404 $msg =~ s/^/# /;
405 $msg =~ s/\n/\n# /g;
406 }
407
408 [$IO, "$msg\n"];
409 } @{$f->{info}};
410}
411
412
# spent 2µs within Test2::Formatter::TAP::summary_tap which was called: # once (2µs+0s) by Test2::Formatter::TAP::event_tap at line 195
sub summary_tap {
4131400ns my ($self, $f, $num) = @_;
414
4151600ns return if $f->{about}->{no_display};
416
41712µs my $summary = $f->{about}->{details} or return;
418 chomp($summary);
419 $summary =~ s/^/# /smg;
420
421 return [OUT_STD, "$summary\n"];
422}
423
424sub calc_table_size {
425 my $self = shift;
426 my ($f) = @_;
427
428 my $term = Term::Table::Util::term_size();
429 my $nesting = 2 + (($f->{trace}->{nested} || 0) * 4); # 4 spaces per level, also '# ' prefix
430 my $total = $term - $nesting;
431
432 # Sane minimum width, any smaller and we are asking for pain
433 return 50 if $total < 50;
434
435 return $total;
436}
437
43814µs1;
439
440__END__
 
# spent 300ns within Test2::Formatter::TAP::OUT_ERR which was called: # once (300ns+0s) by Test::Builder::Formatter::BEGIN@11 at line 15 of Test/Builder/Formatter.pm
sub Test2::Formatter::TAP::OUT_ERR; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 52)[JSON-PP-pm-692]-160-line.html0000644000175000017500000003205414576335353023773 0ustar michamicha Profile of (eval 52)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 52)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 600ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11600ns 111111111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 80)[XML-Twig-pm-5871]-197-line.html0000644000175000017500000004072214576335353024355 0ustar michamicha Profile of (eval 80)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 80)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 7 statements in 33µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115µs14µsXML::Twig::Elt::::BEGIN@1.24XML::Twig::Elt::BEGIN@1.24
4212µs2µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1733µs223µs
# spent 14µs (5+9) within XML::Twig::Elt::BEGIN@1.24 which was called: # once (5µs+9µs) by XML::Twig::Elt::_install_cond at line 1 # spent 2µs within XML::Twig::Elt::__ANON__[(eval 80)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 4 times, avg 600ns/call: # 2 times (2µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 850ns/call # 2 times (700ns+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 350ns/call
sub { no warnings; ; return ($_[0]->{gi} == 39) ? $_[0] : undef; }
# spent 14µs making 1 call to XML::Twig::Elt::BEGIN@1.24 # spent 9µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/constant-pm-83-line.html0000644000175000017500000023075614576335353022465 0ustar michamicha Profile of constant.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/constant.pm
StatementsExecuted 5318 statements in 3.69ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
173173132.13ms2.66msconstant::::importconstant::import
11111µs11µsconstant::::BEGIN@2constant::BEGIN@2
1119µs25µsconstant::::BEGIN@4constant::BEGIN@4
1118µs8µsconstant::::BEGIN@24constant::BEGIN@24
1116µs10µsconstant::::BEGIN@40constant::BEGIN@40
1115µs8µsconstant::::BEGIN@141constant::BEGIN@141
1115µs8µsconstant::::BEGIN@90constant::BEGIN@90
1114µs8µsconstant::::BEGIN@65constant::BEGIN@65
1114µs5µsconstant::::BEGIN@3constant::BEGIN@3
0000s0sconstant::::__ANON__[:174]constant::__ANON__[:174]
0000s0sconstant::::__ANON__[:190]constant::__ANON__[:190]
0000s0sconstant::::__ANON__[:192]constant::__ANON__[:192]
0000s0sconstant::::__ANON__[:41]constant::__ANON__[:41]
0000s0sconstant::::__ANON__[:42]constant::__ANON__[:42]
0000s0sconstant::::__ANON__[:43]constant::__ANON__[:43]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package constant;
2228µs111µs
# spent 11µs within constant::BEGIN@2 which was called: # once (11µs+0s) by Compress::Raw::Zlib::BEGIN@113 at line 2
use 5.008;
# spent 11µs making 1 call to constant::BEGIN@2
3214µs27µs
# spent 5µs (4+1) within constant::BEGIN@3 which was called: # once (4µs+1µs) by Compress::Raw::Zlib::BEGIN@113 at line 3
use strict;
# spent 5µs making 1 call to constant::BEGIN@3 # spent 1µs making 1 call to strict::import
42220µs240µs
# spent 25µs (9+16) within constant::BEGIN@4 which was called: # once (9µs+16µs) by Compress::Raw::Zlib::BEGIN@113 at line 4
use warnings::register;
# spent 25µs making 1 call to constant::BEGIN@4 # spent 16µs making 1 call to warnings::register::import
5
61400nsour $VERSION = '1.33';
7our %declared;
8
9#=======================================================================
10
11# Some names are evil choices.
1213µsmy %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD };
1311µs$keywords{UNITCHECK}++ if $] > 5.009;
14
1512µsmy %forced_into_main = map +($_, 1),
16 qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG };
17
1813µsmy %forbidden = (%keywords, %forced_into_main);
19
2016µs12µsmy $normal_constant_name = qr/^_?[^\W_0-9]\w*\z/;
# spent 2µs making 1 call to CORE::qr
2111µs1400nsmy $tolerable = qr/^[A-Za-z_]\w*\z/;
# spent 400ns making 1 call to CORE::qr
2211µs1200nsmy $boolean = qr/^[01]?\z/;
# spent 200ns making 1 call to CORE::qr
23
24
# spent 8µs (8+700ns) within constant::BEGIN@24 which was called: # once (8µs+700ns) by Compress::Raw::Zlib::BEGIN@113 at line 45
BEGIN {
25 # We'd like to do use constant _CAN_PCS => $] > 5.009002
26 # but that's a bit tricky before we load the constant module :-)
27 # By doing this, we save several run time checks for *every* call
28 # to import.
291400ns my $const = $] > 5.009002;
301200ns my $downgrade = $] < 5.015004; # && $] >= 5.008
311300ns my $constarray = exists &_make_const;
3212µs if ($const) {
3314µs1600ns Internals::SvREADONLY($const, 1);
# spent 600ns making 1 call to Internals::SvREADONLY
3411µs1100ns Internals::SvREADONLY($downgrade, 1);
# spent 100ns making 1 call to Internals::SvREADONLY
351500ns $constant::{_CAN_PCS} = \$const;
361200ns $constant::{_DOWNGRADE} = \$downgrade;
371400ns $constant::{_CAN_PCS_FOR_ARRAY} = \$constarray;
38 }
39 else {
40254µs214µs
# spent 10µs (6+4) within constant::BEGIN@40 which was called: # once (6µs+4µs) by Compress::Raw::Zlib::BEGIN@113 at line 40
no strict 'refs';
# spent 10µs making 1 call to constant::BEGIN@40 # spent 4µs making 1 call to strict::unimport
41 *{"_CAN_PCS"} = sub () {$const};
42 *{"_DOWNGRADE"} = sub () { $downgrade };
43 *{"_CAN_PCS_FOR_ARRAY"} = sub () { $constarray };
44 }
45143µs18µs}
# spent 8µs making 1 call to constant::BEGIN@24
46
47#=======================================================================
48# import() - import symbols into user's namespace
49#
50# What we actually do is define a function in the caller's namespace
51# which returns the value. The function we create will normally
52# be inlined as a constant, thereby avoiding further sub calling
53# overhead.
54#=======================================================================
55
# spent 2.66ms (2.13+525µs) within constant::import which was called 173 times, avg 15µs/call: # once (55µs+13µs) by OLE::Storage_Lite::BEGIN@843 at line 844 of OLE/Storage_Lite.pm # once (29µs+6µs) by JSON::PP::IncrParser::BEGIN@1487 at line 1487 of JSON/PP.pm # once (24µs+9µs) by Compress::Raw::Zlib::BEGIN@145 at line 145 of Compress/Raw/Zlib.pm # once (28µs+4µs) by File::Spec::Unix::BEGIN@231 at line 231 of File/Spec/Unix.pm # once (23µs+7µs) by JSON::PP::BEGIN@25 at line 25 of JSON/PP.pm # once (26µs+3µs) by JSON::PP::BEGIN@29 at line 29 of JSON/PP.pm # once (21µs+8µs) by Compress::Raw::Zlib::BEGIN@113 at line 113 of Compress/Raw/Zlib.pm # once (22µs+6µs) by File::Temp::BEGIN@216 at line 216 of File/Temp.pm # once (19µs+6µs) by File::Spec::Unix::BEGIN@115 at line 115 of File/Spec/Unix.pm # once (18µs+6µs) by Spreadsheet::ParseExcel::BEGIN@58 at line 58 of Spreadsheet/ParseExcel.pm # once (18µs+5µs) by File::Spec::Unix::BEGIN@209 at line 209 of File/Spec/Unix.pm # once (17µs+6µs) by URI::BEGIN@9 at line 9 of URI.pm # once (17µs+6µs) by Archive::Zip::BEGIN@185 at line 185 of Archive/Zip.pm # once (17µs+5µs) by Encode::Alias::BEGIN@5 at line 5 of Encode/Alias.pm # once (16µs+5µs) by Encode::Encoding::BEGIN@14 at line 14 of Encode/Encoding.pm # once (17µs+5µs) by File::Temp::BEGIN@219 at line 219 of File/Temp.pm # once (17µs+4µs) by File::Spec::Unix::BEGIN@124 at line 124 of File/Spec/Unix.pm # once (16µs+5µs) by Encode::BEGIN@7 at line 7 of Encode.pm # once (16µs+5µs) by Archive::Zip::Member::BEGIN@33 at line 33 of Archive/Zip/Member.pm # once (16µs+5µs) by Time::Local::BEGIN@34 at line 34 of Time/Local.pm # once (17µs+3µs) by Archive::Zip::BEGIN@286 at line 286 of Archive/Zip.pm # once (16µs+5µs) by Compress::Raw::Zlib::BEGIN@126 at line 126 of Compress/Raw/Zlib.pm # once (14µs+4µs) by Compress::Raw::Zlib::BEGIN@114 at line 114 of Compress/Raw/Zlib.pm # once (16µs+3µs) by Archive::Zip::BEGIN@275 at line 275 of Archive/Zip.pm # once (16µs+2µs) by Compress::Raw::Zlib::BEGIN@130 at line 130 of Compress/Raw/Zlib.pm # once (14µs+3µs) by Compress::Raw::Zlib::BEGIN@144 at line 144 of Compress/Raw/Zlib.pm # once (15µs+2µs) by Archive::Zip::BEGIN@309 at line 309 of Archive/Zip.pm # once (15µs+3µs) by Archive::Zip::BEGIN@260 at line 260 of Archive/Zip.pm # once (14µs+3µs) by Archive::Zip::BEGIN@301 at line 301 of Archive/Zip.pm # once (11µs+6µs) by Archive::Zip::BEGIN@305 at line 305 of Archive/Zip.pm # once (14µs+3µs) by Archive::Zip::BEGIN@277 at line 277 of Archive/Zip.pm # once (13µs+4µs) by JSON::PP::IncrParser::BEGIN@1488 at line 1488 of JSON/PP.pm # once (13µs+3µs) by Archive::Zip::Member::BEGIN@34 at line 34 of Archive/Zip/Member.pm # once (13µs+3µs) by File::Spec::Unix::BEGIN@133 at line 133 of File/Spec/Unix.pm # once (13µs+3µs) by Compress::Raw::Zlib::BEGIN@146 at line 146 of Compress/Raw/Zlib.pm # once (14µs+3µs) by Archive::Zip::BEGIN@211 at line 211 of Archive/Zip.pm # once (12µs+3µs) by Archive::Zip::Member::BEGIN@37 at line 37 of Archive/Zip/Member.pm # once (13µs+3µs) by Spreadsheet::ParseExcel::BEGIN@59 at line 59 of Spreadsheet/ParseExcel.pm # once (12µs+4µs) by Time::Local::BEGIN@35 at line 35 of Time/Local.pm # once (12µs+3µs) by File::Temp::BEGIN@223 at line 223 of File/Temp.pm # once (13µs+3µs) by Archive::Zip::BEGIN@257 at line 257 of Archive/Zip.pm # once (13µs+3µs) by JSON::PP::BEGIN@39 at line 39 of JSON/PP.pm # once (13µs+2µs) by JSON::PP::BEGIN@43 at line 43 of JSON/PP.pm # once (13µs+2µs) by Archive::Zip::BEGIN@205 at line 205 of Archive/Zip.pm # once (13µs+3µs) by Archive::Zip::BEGIN@188 at line 188 of Archive/Zip.pm # once (13µs+3µs) by JSON::PP::BEGIN@27 at line 27 of JSON/PP.pm # once (12µs+3µs) by Archive::Zip::BEGIN@302 at line 302 of Archive/Zip.pm # once (12µs+3µs) by Compress::Raw::Zlib::BEGIN@127 at line 127 of Compress/Raw/Zlib.pm # once (12µs+3µs) by Compress::Raw::Zlib::BEGIN@147 at line 147 of Compress/Raw/Zlib.pm # once (13µs+2µs) by Spreadsheet::ParseExcel::BEGIN@76 at line 76 of Spreadsheet/ParseExcel.pm # once (12µs+3µs) by JSON::PP::BEGIN@26 at line 26 of JSON/PP.pm # once (12µs+3µs) by Compress::Raw::Zlib::BEGIN@157 at line 157 of Compress/Raw/Zlib.pm # once (12µs+3µs) by JSON::PP::BEGIN@48 at line 48 of JSON/PP.pm # once (12µs+3µs) by Archive::Zip::BEGIN@283 at line 283 of Archive/Zip.pm # once (12µs+3µs) by Archive::Zip::BEGIN@206 at line 206 of Archive/Zip.pm # once (12µs+3µs) by Archive::Zip::BEGIN@247 at line 247 of Archive/Zip.pm # once (12µs+2µs) by JSON::PP::BEGIN@28 at line 28 of JSON/PP.pm # once (12µs+3µs) by JSON::PP::BEGIN@38 at line 38 of JSON/PP.pm # once (11µs+3µs) by Archive::Zip::BEGIN@269 at line 269 of Archive/Zip.pm # once (12µs+3µs) by Compress::Raw::Zlib::BEGIN@128 at line 128 of Compress/Raw/Zlib.pm # once (12µs+2µs) by Archive::Zip::BEGIN@256 at line 256 of Archive/Zip.pm # once (12µs+3µs) by File::Temp::BEGIN@227 at line 227 of File/Temp.pm # once (12µs+2µs) by JSON::PP::BEGIN@40 at line 40 of JSON/PP.pm # once (12µs+2µs) by JSON::PP::IncrParser::BEGIN@1491 at line 1491 of JSON/PP.pm # once (11µs+3µs) by Spreadsheet::ParseExcel::BEGIN@60 at line 60 of Spreadsheet/ParseExcel.pm # once (11µs+3µs) by JSON::PP::IncrParser::BEGIN@1489 at line 1489 of JSON/PP.pm # once (11µs+3µs) by Archive::Zip::BEGIN@230 at line 230 of Archive/Zip.pm # once (11µs+3µs) by Archive::Zip::BEGIN@199 at line 199 of Archive/Zip.pm # once (11µs+3µs) by Archive::Zip::BEGIN@295 at line 295 of Archive/Zip.pm # once (11µs+3µs) by Archive::Zip::BEGIN@189 at line 189 of Archive/Zip.pm # once (11µs+3µs) by Compress::Raw::Zlib::BEGIN@153 at line 153 of Compress/Raw/Zlib.pm # once (11µs+3µs) by Compress::Raw::Zlib::BEGIN@129 at line 129 of Compress/Raw/Zlib.pm # once (11µs+3µs) by Archive::Zip::Member::BEGIN@35 at line 35 of Archive/Zip/Member.pm # once (11µs+3µs) by JSON::PP::IncrParser::BEGIN@1490 at line 1490 of JSON/PP.pm # once (11µs+3µs) by Archive::Zip::BEGIN@238 at line 238 of Archive/Zip.pm # once (11µs+3µs) by Archive::Zip::BEGIN@288 at line 288 of Archive/Zip.pm # once (11µs+2µs) by Archive::Zip::BEGIN@191 at line 191 of Archive/Zip.pm # once (11µs+3µs) by Archive::Zip::BEGIN@300 at line 300 of Archive/Zip.pm # once (11µs+2µs) by Compress::Raw::Zlib::BEGIN@154 at line 154 of Compress/Raw/Zlib.pm # once (11µs+2µs) by Spreadsheet::ParseExcel::BEGIN@75 at line 75 of Spreadsheet/ParseExcel.pm # once (11µs+2µs) by Spreadsheet::ParseExcel::BEGIN@70 at line 70 of Spreadsheet/ParseExcel.pm # once (11µs+3µs) by Time::Local::BEGIN@36 at line 36 of Time/Local.pm # once (11µs+3µs) by Archive::Zip::BEGIN@306 at line 306 of Archive/Zip.pm # once (11µs+2µs) by JSON::PP::BEGIN@30 at line 30 of JSON/PP.pm # once (11µs+3µs) by Archive::Zip::BEGIN@285 at line 285 of Archive/Zip.pm # once (11µs+2µs) by Archive::Zip::BEGIN@239 at line 239 of Archive/Zip.pm # once (11µs+2µs) by Compress::Raw::Zlib::BEGIN@155 at line 155 of Compress/Raw/Zlib.pm # once (11µs+2µs) by Archive::Zip::Member::BEGIN@36 at line 36 of Archive/Zip/Member.pm # once (11µs+3µs) by Spreadsheet::ParseExcel::BEGIN@67 at line 67 of Spreadsheet/ParseExcel.pm # once (11µs+3µs) by JSON::PP::IncrParser::BEGIN@1494 at line 1494 of JSON/PP.pm # once (10µs+3µs) by Archive::Zip::BEGIN@289 at line 289 of Archive/Zip.pm # once (11µs+3µs) by Archive::Zip::BEGIN@222 at line 222 of Archive/Zip.pm # once (11µs+2µs) by File::Temp::BEGIN@229 at line 229 of File/Temp.pm # once (11µs+2µs) by JSON::PP::IncrParser::BEGIN@1492 at line 1492 of JSON/PP.pm # once (11µs+3µs) by Archive::Zip::BEGIN@261 at line 261 of Archive/Zip.pm # once (11µs+3µs) by Archive::Zip::BEGIN@278 at line 278 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@268 at line 268 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@282 at line 282 of Archive/Zip.pm # once (11µs+3µs) by JSON::PP::BEGIN@45 at line 45 of JSON/PP.pm # once (10µs+3µs) by Archive::Zip::BEGIN@307 at line 307 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@273 at line 273 of Archive/Zip.pm # once (11µs+2µs) by Spreadsheet::ParseExcel::BEGIN@77 at line 77 of Spreadsheet/ParseExcel.pm # once (11µs+2µs) by Archive::Zip::BEGIN@190 at line 190 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@279 at line 279 of Archive/Zip.pm # once (11µs+2µs) by Archive::Zip::BEGIN@198 at line 198 of Archive/Zip.pm # once (10µs+2µs) by JSON::PP::BEGIN@34 at line 34 of JSON/PP.pm # once (10µs+3µs) by Archive::Zip::BEGIN@227 at line 227 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@308 at line 308 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@220 at line 220 of Archive/Zip.pm # once (10µs+2µs) by Compress::Raw::Zlib::BEGIN@158 at line 158 of Compress/Raw/Zlib.pm # once (11µs+2µs) by Spreadsheet::ParseExcel::BEGIN@61 at line 61 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by File::Temp::BEGIN@228 at line 228 of File/Temp.pm # once (10µs+2µs) by JSON::PP::BEGIN@31 at line 31 of JSON/PP.pm # once (10µs+2µs) by JSON::PP::BEGIN@32 at line 32 of JSON/PP.pm # once (10µs+2µs) by Archive::Zip::BEGIN@251 at line 251 of Archive/Zip.pm # once (11µs+2µs) by Archive::Zip::BEGIN@207 at line 207 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@221 at line 221 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@311 at line 311 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@294 at line 294 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@246 at line 246 of Archive/Zip.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@64 at line 64 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by Archive::Zip::BEGIN@236 at line 236 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@274 at line 274 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@213 at line 213 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@312 at line 312 of Archive/Zip.pm # once (11µs+2µs) by Archive::Zip::BEGIN@201 at line 201 of Archive/Zip.pm # once (10µs+2µs) by Compress::Raw::Zlib::BEGIN@156 at line 156 of Compress/Raw/Zlib.pm # once (10µs+2µs) by JSON::PP::BEGIN@41 at line 41 of JSON/PP.pm # once (10µs+2µs) by JSON::PP::BEGIN@36 at line 36 of JSON/PP.pm # once (10µs+2µs) by Archive::Zip::BEGIN@297 at line 297 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@267 at line 267 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@313 at line 313 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@197 at line 197 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@240 at line 240 of Archive/Zip.pm # once (10µs+2µs) by JSON::PP::IncrParser::BEGIN@1493 at line 1493 of JSON/PP.pm # once (10µs+2µs) by JSON::PP::BEGIN@46 at line 46 of JSON/PP.pm # once (10µs+3µs) by Archive::Zip::BEGIN@228 at line 228 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@291 at line 291 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@237 at line 237 of Archive/Zip.pm # once (10µs+2µs) by JSON::PP::BEGIN@35 at line 35 of JSON/PP.pm # once (10µs+2µs) by Archive::Zip::BEGIN@298 at line 298 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@208 at line 208 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@202 at line 202 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@265 at line 265 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@272 at line 272 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@212 at line 212 of Archive/Zip.pm # once (10µs+3µs) by Archive::Zip::BEGIN@310 at line 310 of Archive/Zip.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@68 at line 68 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@81 at line 81 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by JSON::PP::BEGIN@33 at line 33 of JSON/PP.pm # once (10µs+2µs) by JSON::PP::BEGIN@42 at line 42 of JSON/PP.pm # once (10µs+2µs) by Archive::Zip::BEGIN@204 at line 204 of Archive/Zip.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@66 at line 66 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by JSON::PP::BEGIN@49 at line 49 of JSON/PP.pm # once (10µs+2µs) by Archive::Zip::BEGIN@235 at line 235 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@253 at line 253 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@229 at line 229 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@252 at line 252 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@266 at line 266 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@262 at line 262 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@245 at line 245 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@200 at line 200 of Archive/Zip.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@62 at line 62 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by Archive::Zip::BEGIN@209 at line 209 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@214 at line 214 of Archive/Zip.pm # once (9µs+3µs) by Archive::Zip::BEGIN@292 at line 292 of Archive/Zip.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@78 at line 78 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@63 at line 63 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@72 at line 72 of Spreadsheet/ParseExcel.pm # once (10µs+2µs) by Archive::Zip::BEGIN@192 at line 192 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@215 at line 215 of Archive/Zip.pm # once (10µs+2µs) by Archive::Zip::BEGIN@203 at line 203 of Archive/Zip.pm # once (9µs+2µs) by Archive::Zip::BEGIN@210 at line 210 of Archive/Zip.pm
sub import {
5617328µs my $class = shift;
5717325µs return unless @_; # Ignore 'use constant;'
5817314µs my $constants;
5917330µs my $multiple = ref $_[0];
6017334µs my $caller = caller;
6117319µs my $flush_mro;
62 my $symtab;
63
6417334µs if (_CAN_PCS) {
65289µs211µs
# spent 8µs (4+3) within constant::BEGIN@65 which was called: # once (4µs+3µs) by Compress::Raw::Zlib::BEGIN@113 at line 65
no strict 'refs';
# spent 8µs making 1 call to constant::BEGIN@65 # spent 3µs making 1 call to strict::unimport
6617384µs $symtab = \%{$caller . '::'};
67 };
68
6917332µs if ( $multiple ) {
701500ns if (ref $_[0] ne 'HASH') {
71 require Carp;
72 Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'");
73 }
741200ns $constants = shift;
75 } else {
7617222µs unless (defined $_[0]) {
77 require Carp;
78 Carp::croak("Can't use undef as constant name");
79 }
8017288µs $constants->{+shift} = undef;
81 }
82
8317391µs foreach my $name ( keys %$constants ) {
8417911µs my $pkg;
8517919µs my $symtab = $symtab;
8617921µs my $orig_name = $name;
87179407µs179168µs if ($name =~ s/(.*)(?:::|')(?=.)//s) {
# spent 168µs making 179 calls to CORE::subst, avg 940ns/call
88 $pkg = $1;
89 if (_CAN_PCS && $pkg ne $caller) {
902117µs211µs
# spent 8µs (5+3) within constant::BEGIN@90 which was called: # once (5µs+3µs) by Compress::Raw::Zlib::BEGIN@113 at line 90
no strict 'refs';
# spent 8µs making 1 call to constant::BEGIN@90 # spent 3µs making 1 call to strict::unimport
91 $symtab = \%{$pkg . '::'};
92 }
93 }
94 else {
9517917µs $pkg = $caller;
96 }
97
98 # Normal constant name
99179550µs358253µs if ($name =~ $normal_constant_name and !$forbidden{$name}) {
# spent 156µs making 179 calls to CORE::match, avg 874ns/call # spent 97µs making 179 calls to CORE::regcomp, avg 542ns/call
100 # Everything is okay
101
102 # Name forced into main, but we're not in main. Fatal.
103 } elsif ($forced_into_main{$name} and $pkg ne 'main') {
104 require Carp;
105 Carp::croak("Constant name '$name' is forced into main::");
106
107 # Starts with double underscore. Fatal.
108 } elsif ($name =~ /^__/) {
109 require Carp;
110 Carp::croak("Constant name '$name' begins with '__'");
111
112 # Maybe the name is tolerable
113 } elsif ($name =~ $tolerable) {
114 # Then we'll warn only if you've asked for warnings
115 if (warnings::enabled()) {
116 if ($keywords{$name}) {
117 warnings::warn("Constant name '$name' is a Perl keyword");
118 } elsif ($forced_into_main{$name}) {
119 warnings::warn("Constant name '$name' is " .
120 "forced into package main::");
121 }
122 }
123
124 # Looks like a boolean
125 # use constant FRED == fred;
126 } elsif ($name =~ $boolean) {
127 require Carp;
128 if (@_) {
129 Carp::croak("Constant name '$name' is invalid");
130 } else {
131 Carp::croak("Constant name looks like boolean value");
132 }
133
134 } else {
135 # Must have bad characters
136 require Carp;
137 Carp::croak("Constant name '$name' has invalid characters");
138 }
139
140 {
141181319µs212µs
# spent 8µs (5+3) within constant::BEGIN@141 which was called: # once (5µs+3µs) by Compress::Raw::Zlib::BEGIN@113 at line 141
no strict 'refs';
# spent 8µs making 1 call to constant::BEGIN@141 # spent 3µs making 1 call to strict::unimport
14217929µs my $full_name = "${pkg}::$name";
14317994µs $declared{$full_name}++;
14417951µs if ($multiple || @_ == 1) {
14517927µs my $scalar = $multiple ? $constants->{$orig_name} : $_[0];
146
147 if (_DOWNGRADE) { # for 5.8 to 5.14
148 # Work around perl bug #31991: Sub names (actually glob
149 # names in general) ignore the UTF8 flag. So we have to
150 # turn it off to get the "right" symbol table entry.
151 utf8::is_utf8 $name and utf8::encode $name;
152 }
153
154 # The constant serves to optimise this entire block out on
155 # 5.8 and earlier.
15617932µs if (_CAN_PCS) {
157 # Use a reference as a proxy for a constant subroutine.
158 # If this is not a glob yet, it saves space. If it is
159 # a glob, we must still create it this way to get the
160 # right internal flags set, as constants are distinct
161 # from subroutines created with sub(){...}.
162 # The check in Perl_ck_rvconst knows that inlinable
163 # constants from cv_const_sv are read only. So we have to:
164179232µs17957µs Internals::SvREADONLY($scalar, 1);
# spent 57µs making 179 calls to Internals::SvREADONLY, avg 320ns/call
16517960µs if (!exists $symtab->{$name}) {
16617449µs $symtab->{$name} = \$scalar;
16717452µs ++$flush_mro->{$pkg};
168 }
169 else {
17052µs local $constant::{_dummy} = \$scalar;
17159µs *$full_name = \&{"_dummy"};
172 }
173 } else {
174 *$full_name = sub () { $scalar };
175 }
176 } elsif (@_) {
177 my @list = @_;
178 if (_CAN_PCS_FOR_ARRAY) {
179 _make_const($list[$_]) for 0..$#list;
180 _make_const(@list);
181 if (!exists $symtab->{$name}) {
182 $symtab->{$name} = \@list;
183 $flush_mro->{$pkg}++;
184 }
185 else {
186 local $constant::{_dummy} = \@list;
187 *$full_name = \&{"_dummy"};
188 }
189 }
190 else { *$full_name = sub () { @list }; }
191 } else {
192 *$full_name = sub () { };
193 }
194 }
195 }
196 # Flush the cache exactly once if we make any direct symbol table changes.
197173352µs if (_CAN_PCS && $flush_mro) {
198173263µs17346µs mro::method_changed_in($_) for keys %$flush_mro;
# spent 46µs making 173 calls to mro::method_changed_in, avg 268ns/call
199 }
200}
201
20216µs1;
203
204__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Parent-pm-50-line.html0000644000175000017500000005134514576335353025073 0ustar michamicha Profile of Test2/EventFacet/Parent.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Parent.pm
StatementsExecuted 12 statements in 222µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11121µs23µsTest2::EventFacet::Parent::::BEGIN@2Test2::EventFacet::Parent::BEGIN@2
1117µs7µsTest2::EventFacet::Parent::::BEGIN@9Test2::EventFacet::Parent::BEGIN@9
1116µs38µsTest2::EventFacet::Parent::::BEGIN@7Test2::EventFacet::Parent::BEGIN@7
1115µs31µsTest2::EventFacet::Parent::::BEGIN@3Test2::EventFacet::Parent::BEGIN@3
1115µs77µsTest2::EventFacet::Parent::::BEGIN@10Test2::EventFacet::Parent::BEGIN@10
0000s0sTest2::EventFacet::Parent::::initTest2::EventFacet::Parent::init
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Parent;
2234µs225µs
# spent 23µs (21+2) within Test2::EventFacet::Parent::BEGIN@2 which was called: # once (21µs+2µs) by Test2::Event::BEGIN@21 at line 2
use strict;
# spent 23µs making 1 call to Test2::EventFacet::Parent::BEGIN@2 # spent 2µs making 1 call to strict::import
3244µs257µs
# spent 31µs (5+26) within Test2::EventFacet::Parent::BEGIN@3 which was called: # once (5µs+26µs) by Test2::Event::BEGIN@21 at line 3
use warnings;
# spent 31µs making 1 call to Test2::EventFacet::Parent::BEGIN@3 # spent 26µs making 1 call to warnings::import
4
51500nsour $VERSION = '1.302198';
6
7241µs270µs
# spent 38µs (6+32) within Test2::EventFacet::Parent::BEGIN@7 which was called: # once (6µs+32µs) by Test2::Event::BEGIN@21 at line 7
use Carp qw/confess/;
# spent 38µs making 1 call to Test2::EventFacet::Parent::BEGIN@7 # spent 32µs making 1 call to Exporter::import
8
9222µs17µs
# spent 7µs within Test2::EventFacet::Parent::BEGIN@9 which was called: # once (7µs+0s) by Test2::Event::BEGIN@21 at line 9
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 7µs making 1 call to Test2::EventFacet::Parent::BEGIN@9
10277µs2149µs
# spent 77µs (5+72) within Test2::EventFacet::Parent::BEGIN@10 which was called: # once (5µs+72µs) by Test2::Event::BEGIN@21 at line 10
use Test2::Util::HashBase qw{-hid -children -buffered -start_stamp -stop_stamp};
# spent 77µs making 1 call to Test2::EventFacet::Parent::BEGIN@10 # spent 72µs making 1 call to Test2::Util::HashBase::import
11
12sub init {
13 confess "Attribute 'hid' must be set"
14 unless defined $_[0]->{+HID};
15
16 $_[0]->{+CHILDREN} ||= [];
17}
18
1913µs1;
20
21__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 65)[XML-Twig-pm-5871]-182-line.html0000644000175000017500000004042614576335353024353 0ustar michamicha Profile of (eval 65)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 65)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 4 statements in 38µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115µs15µsXML::Twig::Elt::::BEGIN@1.9XML::Twig::Elt::BEGIN@1.9
1112µs2µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1438µs225µs
# spent 15µs (5+10) within XML::Twig::Elt::BEGIN@1.9 which was called: # once (5µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 2µs within XML::Twig::Elt::__ANON__[(eval 65)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called: # once (2µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm
sub { no warnings; ; return ($_[0]->{gi} == 9) ? $_[0] : undef; }
# spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.9 # spent 10µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 44)[JSON-PP-pm-692]-152-line.html0000644000175000017500000003204414576335353023774 0ustar michamicha Profile of (eval 44)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 44)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 1111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Subtest-pm-60-line.html0000644000175000017500000010113414576335353024321 0ustar michamicha Profile of Test2/Event/Subtest.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Subtest.pm
StatementsExecuted 13 statements in 442µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsTest2::Event::Subtest::::BEGIN@2Test2::Event::Subtest::BEGIN@2
1119µs25µsTest2::Event::Subtest::::BEGIN@3Test2::Event::Subtest::BEGIN@3
1117µs7µsTest2::Event::Subtest::::BEGIN@7Test2::Event::Subtest::BEGIN@7
1115µs17µsTest2::Event::Subtest::::BEGIN@20Test2::Event::Subtest::BEGIN@20
1114µs95µsTest2::Event::Subtest::::BEGIN@8Test2::Event::Subtest::BEGIN@8
0000s0sTest2::Event::Subtest::::add_amnestyTest2::Event::Subtest::add_amnesty
0000s0sTest2::Event::Subtest::::facet_dataTest2::Event::Subtest::facet_data
0000s0sTest2::Event::Subtest::::initTest2::Event::Subtest::init
0000s0sTest2::Event::Subtest::::set_effective_passTest2::Event::Subtest::set_effective_pass
0000s0sTest2::Event::Subtest::::set_subeventsTest2::Event::Subtest::set_subevents
0000s0sTest2::Event::Subtest::::summaryTest2::Event::Subtest::summary
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Subtest;
2218µs213µs
# spent 11µs (10+2) within Test2::Event::Subtest::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@100 at line 2
use strict;
# spent 11µs making 1 call to Test2::Event::Subtest::BEGIN@2 # spent 2µs making 1 call to strict::import
3234µs242µs
# spent 25µs (9+17) within Test2::Event::Subtest::BEGIN@3 which was called: # once (9µs+17µs) by Test2::API::BEGIN@100 at line 3
use warnings;
# spent 25µs making 1 call to Test2::Event::Subtest::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7222µs17µs
# spent 7µs within Test2::Event::Subtest::BEGIN@7 which was called: # once (7µs+0s) by Test2::API::BEGIN@100 at line 7
BEGIN { require Test2::Event::Ok; our @ISA = qw(Test2::Event::Ok) }
# spent 7µs making 1 call to Test2::Event::Subtest::BEGIN@7
8271µs2186µs
# spent 95µs (4+91) within Test2::Event::Subtest::BEGIN@8 which was called: # once (4µs+91µs) by Test2::API::BEGIN@100 at line 8
use Test2::Util::HashBase qw{subevents buffered subtest_id subtest_uuid start_stamp stop_stamp};
# spent 95µs making 1 call to Test2::Event::Subtest::BEGIN@8 # spent 91µs making 1 call to Test2::Util::HashBase::import
9
10sub init {
11 my $self = shift;
12 $self->SUPER::init();
13 $self->{+SUBEVENTS} ||= [];
14 if ($self->{+EFFECTIVE_PASS}) {
15 $_->set_effective_pass(1) for grep { $_->can('effective_pass') } @{$self->{+SUBEVENTS}};
16 }
17}
18
19{
202294µs230µs
# spent 17µs (5+13) within Test2::Event::Subtest::BEGIN@20 which was called: # once (5µs+13µs) by Test2::API::BEGIN@100 at line 20
no warnings 'redefine';
# spent 17µs making 1 call to Test2::Event::Subtest::BEGIN@20 # spent 13µs making 1 call to warnings::unimport
21
22 sub set_subevents {
23 my $self = shift;
24 my @subevents = @_;
25
26 if ($self->{+EFFECTIVE_PASS}) {
27 $_->set_effective_pass(1) for grep { $_->can('effective_pass') } @subevents;
28 }
29
30 $self->{+SUBEVENTS} = \@subevents;
31 }
32
33 sub set_effective_pass {
34 my $self = shift;
35 my ($pass) = @_;
36
37 if ($pass) {
38 $_->set_effective_pass(1) for grep { $_->can('effective_pass') } @{$self->{+SUBEVENTS}};
39 }
40 elsif ($self->{+EFFECTIVE_PASS} && !$pass) {
41 for my $s (grep { $_->can('effective_pass') } @{$self->{+SUBEVENTS}}) {
42 $_->set_effective_pass(0) unless $s->can('todo') && defined $s->todo;
43 }
44 }
45
46 $self->{+EFFECTIVE_PASS} = $pass;
47 }
48}
49
501400nssub summary {
51 my $self = shift;
52
53 my $name = $self->{+NAME} || "Nameless Subtest";
54
55 my $todo = $self->{+TODO};
56 if ($todo) {
57 $name .= " (TODO: $todo)";
58 }
59 elsif (defined $todo) {
60 $name .= " (TODO)";
61 }
62
63 return $name;
64}
65
66sub facet_data {
67 my $self = shift;
68
69 my $out = $self->SUPER::facet_data();
70
71 my $start = $self->start_stamp;
72 my $stop = $self->stop_stamp;
73
74 $out->{parent} = {
75 hid => $self->subtest_id,
76 children => [map {$_->facet_data} @{$self->{+SUBEVENTS}}],
77 buffered => $self->{+BUFFERED},
78 $start ? (start_stamp => $start) : (),
79 $stop ? (stop_stamp => $stop) : (),
80 };
81
82 return $out;
83}
84
85sub add_amnesty {
86 my $self = shift;
87
88 for my $am (@_) {
89 $am = {%$am} if ref($am) ne 'ARRAY';
90 $am = Test2::EventFacet::Amnesty->new($am);
91
92 push @{$self->{+AMNESTY}} => $am;
93
94 for my $e (@{$self->{+SUBEVENTS}}) {
95 $e->add_amnesty($am->clone(inherited => 1));
96 }
97 }
98}
99
100
10112µs1;
102
103__END__










Spreadsheet-ParseXLSX-0.35/nytprof/File-Path-pm-88-line.html0000644000175000017500000033615314576335353022410 0ustar michamicha Profile of File/Path.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Path.pm
StatementsExecuted 30 statements in 2.08ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111946µs1.03msFile::Path::::BEGIN@7File::Path::BEGIN@7
11112µs12µsFile::Path::::BEGIN@27File::Path::BEGIN@27
11110µs10µsFile::Path::::BEGIN@3File::Path::BEGIN@3
1115µs29µsFile::Path::::BEGIN@6File::Path::BEGIN@6
1114µs8µsFile::Path::::BEGIN@29File::Path::BEGIN@29
1114µs5µsFile::Path::::BEGIN@4File::Path::BEGIN@4
1114µs31µsFile::Path::::BEGIN@20File::Path::BEGIN@20
1112µs2µsFile::Path::::BEGIN@8File::Path::BEGIN@8
1112µs2µsFile::Path::::BEGIN@10File::Path::BEGIN@10
1111µs1µsFile::Path::::BEGIN@19File::Path::BEGIN@19
111400ns400nsFile::Path::::__ANON__File::Path::__ANON__ (xsub)
0000s0sFile::Path::::__is_argFile::Path::__is_arg
0000s0sFile::Path::::_carpFile::Path::_carp
0000s0sFile::Path::::_croakFile::Path::_croak
0000s0sFile::Path::::_errorFile::Path::_error
0000s0sFile::Path::::_is_subdirFile::Path::_is_subdir
0000s0sFile::Path::::_mkpathFile::Path::_mkpath
0000s0sFile::Path::::_rmtreeFile::Path::_rmtree
0000s0sFile::Path::::_slash_lcFile::Path::_slash_lc
0000s0sFile::Path::::make_pathFile::Path::make_path
0000s0sFile::Path::::mkpathFile::Path::mkpath
0000s0sFile::Path::::remove_treeFile::Path::remove_tree
0000s0sFile::Path::::rmtreeFile::Path::rmtree
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Path;
2
3233µs110µs
# spent 10µs within File::Path::BEGIN@3 which was called: # once (10µs+0s) by File::Temp::BEGIN@149 at line 3
use 5.005_04;
# spent 10µs making 1 call to File::Path::BEGIN@3
4215µs27µs
# spent 5µs (4+1) within File::Path::BEGIN@4 which was called: # once (4µs+1µs) by File::Temp::BEGIN@149 at line 4
use strict;
# spent 5µs making 1 call to File::Path::BEGIN@4 # spent 1µs making 1 call to strict::import
5
6214µs253µs
# spent 29µs (5+24) within File::Path::BEGIN@6 which was called: # once (5µs+24µs) by File::Temp::BEGIN@149 at line 6
use Cwd 'getcwd';
# spent 29µs making 1 call to File::Path::BEGIN@6 # spent 24µs making 1 call to Exporter::import
72112µs11.03ms
# spent 1.03ms (946µs+84µs) within File::Path::BEGIN@7 which was called: # once (946µs+84µs) by File::Temp::BEGIN@149 at line 7
use File::Basename ();
# spent 1.03ms making 1 call to File::Path::BEGIN@7
8222µs12µs
# spent 2µs within File::Path::BEGIN@8 which was called: # once (2µs+0s) by File::Temp::BEGIN@149 at line 8
use File::Spec ();
# spent 2µs making 1 call to File::Path::BEGIN@8
9
10
# spent 2µs within File::Path::BEGIN@10 which was called: # once (2µs+0s) by File::Temp::BEGIN@149 at line 17
BEGIN {
1112µs if ( $] < 5.006 ) {
12
13 # can't say 'opendir my $dh, $dirname'
14 # need to initialise $dh
15 eval 'use Symbol';
16 }
1719µs12µs}
# spent 2µs making 1 call to File::Path::BEGIN@10
18
19212µs11µs
# spent 1µs within File::Path::BEGIN@19 which was called: # once (1µs+0s) by File::Temp::BEGIN@149 at line 19
use Exporter ();
# spent 1µs making 1 call to File::Path::BEGIN@19
20234µs258µs
# spent 31µs (4+27) within File::Path::BEGIN@20 which was called: # once (4µs+27µs) by File::Temp::BEGIN@149 at line 20
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
# spent 31µs making 1 call to File::Path::BEGIN@20 # spent 27µs making 1 call to vars::import
211400ns$VERSION = '2.18';
22111µs$VERSION = eval $VERSION;
# spent 2µs executing statements in string eval
2315µs@ISA = qw(Exporter);
241500ns@EXPORT = qw(mkpath rmtree);
251200ns@EXPORT_OK = qw(make_path remove_tree);
26
27
# spent 12µs (12+400ns) within File::Path::BEGIN@27 which was called: # once (12µs+400ns) by File::Temp::BEGIN@149 at line 42
BEGIN {
281300ns for (qw(VMS MacOS MSWin32 os2)) {
29280µs212µs
# spent 8µs (4+4) within File::Path::BEGIN@29 which was called: # once (4µs+4µs) by File::Temp::BEGIN@149 at line 29
no strict 'refs';
# spent 8µs making 1 call to File::Path::BEGIN@29 # spent 4µs making 1 call to strict::unimport
3045µs *{"_IS_\U$_"} = $^O eq $_ ? sub () { 1 } : sub () { 0 };
31 }
32
33 # These OSes complain if you want to remove a file that you have no
34 # write permission to:
35 *_FORCE_WRITABLE = (
36 grep { $^O eq $_ } qw(amigaos dos epoc MSWin32 MacOS os2)
3711µs ) ? sub () { 1 } : sub () { 0 };
38
39 # Unix-like systems need to stat each directory in order to detect
40 # race condition. MS-Windows is immune to this particular attack.
4115µs1400ns *_NEED_STAT_CHECK = !(_IS_MSWIN32()) ? sub () { 1 } : sub () { 0 };
# spent 400ns making 1 call to File::Path::__ANON__
4211.71ms112µs}
# spent 12µs making 1 call to File::Path::BEGIN@27
43
44sub _carp {
45 require Carp;
46 goto &Carp::carp;
47}
48
49sub _croak {
50 require Carp;
51 goto &Carp::croak;
52}
53
54sub _error {
55 my $arg = shift;
56 my $message = shift;
57 my $object = shift;
58
59 if ( $arg->{error} ) {
60 $object = '' unless defined $object;
61 $message .= ": $!" if $!;
62 push @{ ${ $arg->{error} } }, { $object => $message };
63 }
64 else {
65 _carp( defined($object) ? "$message for $object: $!" : "$message: $!" );
66 }
67}
68
69sub __is_arg {
70 my ($arg) = @_;
71
72 # If client code blessed an array ref to HASH, this will not work
73 # properly. We could have done $arg->isa() wrapped in eval, but
74 # that would be expensive. This implementation should suffice.
75 # We could have also used Scalar::Util:blessed, but we choose not
76 # to add this dependency
77 return ( ref $arg eq 'HASH' );
78}
79
80sub make_path {
81 push @_, {} unless @_ and __is_arg( $_[-1] );
82 goto &mkpath;
83}
84
85sub mkpath {
86 my $old_style = !( @_ and __is_arg( $_[-1] ) );
87
88 my $data;
89 my $paths;
90
91 if ($old_style) {
92 my ( $verbose, $mode );
93 ( $paths, $verbose, $mode ) = @_;
94 $paths = [$paths] unless UNIVERSAL::isa( $paths, 'ARRAY' );
95 $data->{verbose} = $verbose;
96 $data->{mode} = defined $mode ? $mode : oct '777';
97 }
98 else {
99 my %args_permitted = map { $_ => 1 } ( qw|
100 chmod
101 error
102 group
103 mask
104 mode
105 owner
106 uid
107 user
108 verbose
109 | );
110 my %not_on_win32_args = map { $_ => 1 } ( qw|
111 group
112 owner
113 uid
114 user
115 | );
116 my @bad_args = ();
117 my @win32_implausible_args = ();
118 my $arg = pop @_;
119 for my $k (sort keys %{$arg}) {
120 if (! $args_permitted{$k}) {
121 push @bad_args, $k;
122 }
123 elsif ($not_on_win32_args{$k} and _IS_MSWIN32) {
124 push @win32_implausible_args, $k;
125 }
126 else {
127 $data->{$k} = $arg->{$k};
128 }
129 }
130 _carp("Unrecognized option(s) passed to mkpath() or make_path(): @bad_args")
131 if @bad_args;
132 _carp("Option(s) implausible on Win32 passed to mkpath() or make_path(): @win32_implausible_args")
133 if @win32_implausible_args;
134 $data->{mode} = delete $data->{mask} if exists $data->{mask};
135 $data->{mode} = oct '777' unless exists $data->{mode};
136 ${ $data->{error} } = [] if exists $data->{error};
137 unless (@win32_implausible_args) {
138 $data->{owner} = delete $data->{user} if exists $data->{user};
139 $data->{owner} = delete $data->{uid} if exists $data->{uid};
140 if ( exists $data->{owner} and $data->{owner} =~ /\D/ ) {
141 my $uid = ( getpwnam $data->{owner} )[2];
142 if ( defined $uid ) {
143 $data->{owner} = $uid;
144 }
145 else {
146 _error( $data,
147 "unable to map $data->{owner} to a uid, ownership not changed"
148 );
149 delete $data->{owner};
150 }
151 }
152 if ( exists $data->{group} and $data->{group} =~ /\D/ ) {
153 my $gid = ( getgrnam $data->{group} )[2];
154 if ( defined $gid ) {
155 $data->{group} = $gid;
156 }
157 else {
158 _error( $data,
159 "unable to map $data->{group} to a gid, group ownership not changed"
160 );
161 delete $data->{group};
162 }
163 }
164 if ( exists $data->{owner} and not exists $data->{group} ) {
165 $data->{group} = -1; # chown will leave group unchanged
166 }
167 if ( exists $data->{group} and not exists $data->{owner} ) {
168 $data->{owner} = -1; # chown will leave owner unchanged
169 }
170 }
171 $paths = [@_];
172 }
173 return _mkpath( $data, $paths );
174}
175
176sub _mkpath {
177 my $data = shift;
178 my $paths = shift;
179
180 my ( @created );
181 foreach my $path ( @{$paths} ) {
182 next unless defined($path) and length($path);
183 $path .= '/' if _IS_OS2 and $path =~ /^\w:\z/s; # feature of CRT
184
185 # Logic wants Unix paths, so go with the flow.
186 if (_IS_VMS) {
187 next if $path eq '/';
188 $path = VMS::Filespec::unixify($path);
189 }
190 next if -d $path;
191 my $parent = File::Basename::dirname($path);
192 # Coverage note: It's not clear how we would test the condition:
193 # '-d $parent or $path eq $parent'
194 unless ( -d $parent or $path eq $parent ) {
195 push( @created, _mkpath( $data, [$parent] ) );
196 }
197 print "mkdir $path\n" if $data->{verbose};
198 if ( mkdir( $path, $data->{mode} ) ) {
199 push( @created, $path );
200 if ( exists $data->{owner} ) {
201
202 # NB: $data->{group} guaranteed to be set during initialisation
203 if ( !chown $data->{owner}, $data->{group}, $path ) {
204 _error( $data,
205 "Cannot change ownership of $path to $data->{owner}:$data->{group}"
206 );
207 }
208 }
209 if ( exists $data->{chmod} ) {
210 # Coverage note: It's not clear how we would trigger the next
211 # 'if' block. Failure of 'chmod' might first result in a
212 # system error: "Permission denied".
213 if ( !chmod $data->{chmod}, $path ) {
214 _error( $data,
215 "Cannot change permissions of $path to $data->{chmod}" );
216 }
217 }
218 }
219 else {
220 my $save_bang = $!;
221
222 # From 'perldoc perlvar': $EXTENDED_OS_ERROR ($^E) is documented
223 # as:
224 # Error information specific to the current operating system. At the
225 # moment, this differs from "$!" under only VMS, OS/2, and Win32
226 # (and for MacPerl). On all other platforms, $^E is always just the
227 # same as $!.
228
229 my ( $e, $e1 ) = ( $save_bang, $^E );
230 $e .= "; $e1" if $e ne $e1;
231
232 # allow for another process to have created it meanwhile
233 if ( ! -d $path ) {
234 $! = $save_bang;
235 if ( $data->{error} ) {
236 push @{ ${ $data->{error} } }, { $path => $e };
237 }
238 else {
239 _croak("mkdir $path: $e");
240 }
241 }
242 }
243 }
244 return @created;
245}
246
247sub remove_tree {
248 push @_, {} unless @_ and __is_arg( $_[-1] );
249 goto &rmtree;
250}
251
252sub _is_subdir {
253 my ( $dir, $test ) = @_;
254
255 my ( $dv, $dd ) = File::Spec->splitpath( $dir, 1 );
256 my ( $tv, $td ) = File::Spec->splitpath( $test, 1 );
257
258 # not on same volume
259 return 0 if $dv ne $tv;
260
261 my @d = File::Spec->splitdir($dd);
262 my @t = File::Spec->splitdir($td);
263
264 # @t can't be a subdir if it's shorter than @d
265 return 0 if @t < @d;
266
267 return join( '/', @d ) eq join( '/', splice @t, 0, +@d );
268}
269
270sub rmtree {
271 my $old_style = !( @_ and __is_arg( $_[-1] ) );
272
273 my ($arg, $data, $paths);
274
275 if ($old_style) {
276 my ( $verbose, $safe );
277 ( $paths, $verbose, $safe ) = @_;
278 $data->{verbose} = $verbose;
279 $data->{safe} = defined $safe ? $safe : 0;
280
281 if ( defined($paths) and length($paths) ) {
282 $paths = [$paths] unless UNIVERSAL::isa( $paths, 'ARRAY' );
283 }
284 else {
285 _carp("No root path(s) specified\n");
286 return 0;
287 }
288 }
289 else {
290 my %args_permitted = map { $_ => 1 } ( qw|
291 error
292 keep_root
293 result
294 safe
295 verbose
296 | );
297 my @bad_args = ();
298 my $arg = pop @_;
299 for my $k (sort keys %{$arg}) {
300 if (! $args_permitted{$k}) {
301 push @bad_args, $k;
302 }
303 else {
304 $data->{$k} = $arg->{$k};
305 }
306 }
307 _carp("Unrecognized option(s) passed to remove_tree(): @bad_args")
308 if @bad_args;
309 ${ $data->{error} } = [] if exists $data->{error};
310 ${ $data->{result} } = [] if exists $data->{result};
311
312 # Wouldn't it make sense to do some validation on @_ before assigning
313 # to $paths here?
314 # In the $old_style case we guarantee that each path is both defined
315 # and non-empty. We don't check that here, which means we have to
316 # check it later in the first condition in this line:
317 # if ( $ortho_root_length && _is_subdir( $ortho_root, $ortho_cwd ) ) {
318 # Granted, that would be a change in behavior for the two
319 # non-old-style interfaces.
320
321 $paths = [@_];
322 }
323
324 $data->{prefix} = '';
325 $data->{depth} = 0;
326
327 my @clean_path;
328 $data->{cwd} = getcwd() or do {
329 _error( $data, "cannot fetch initial working directory" );
330 return 0;
331 };
332 for ( $data->{cwd} ) { /\A(.*)\Z/s; $_ = $1 } # untaint
333
334 for my $p (@$paths) {
335
336 # need to fixup case and map \ to / on Windows
337 my $ortho_root = _IS_MSWIN32 ? _slash_lc($p) : $p;
338 my $ortho_cwd =
339 _IS_MSWIN32 ? _slash_lc( $data->{cwd} ) : $data->{cwd};
340 my $ortho_root_length = length($ortho_root);
341 $ortho_root_length-- if _IS_VMS; # don't compare '.' with ']'
342 if ( $ortho_root_length && _is_subdir( $ortho_root, $ortho_cwd ) ) {
343 local $! = 0;
344 _error( $data, "cannot remove path when cwd is $data->{cwd}", $p );
345 next;
346 }
347
348 if (_IS_MACOS) {
349 $p = ":$p" unless $p =~ /:/;
350 $p .= ":" unless $p =~ /:\z/;
351 }
352 elsif ( _IS_MSWIN32 ) {
353 $p =~ s{[/\\]\z}{};
354 }
355 else {
356 $p =~ s{/\z}{};
357 }
358 push @clean_path, $p;
359 }
360
361 @{$data}{qw(device inode)} = ( lstat $data->{cwd} )[ 0, 1 ] or do {
362 _error( $data, "cannot stat initial working directory", $data->{cwd} );
363 return 0;
364 };
365
366 return _rmtree( $data, \@clean_path );
367}
368
369sub _rmtree {
370 my $data = shift;
371 my $paths = shift;
372
373 my $count = 0;
374 my $curdir = File::Spec->curdir();
375 my $updir = File::Spec->updir();
376
377 my ( @files, $root );
378 ROOT_DIR:
379 foreach my $root (@$paths) {
380
381 # since we chdir into each directory, it may not be obvious
382 # to figure out where we are if we generate a message about
383 # a file name. We therefore construct a semi-canonical
384 # filename, anchored from the directory being unlinked (as
385 # opposed to being truly canonical, anchored from the root (/).
386
387 my $canon =
388 $data->{prefix}
389 ? File::Spec->catfile( $data->{prefix}, $root )
390 : $root;
391
392 my ( $ldev, $lino, $perm ) = ( lstat $root )[ 0, 1, 2 ]
393 or next ROOT_DIR;
394
395 if ( -d _ ) {
396 $root = VMS::Filespec::vmspath( VMS::Filespec::pathify($root) )
397 if _IS_VMS;
398
399 if ( !chdir($root) ) {
400
401 # see if we can escalate privileges to get in
402 # (e.g. funny protection mask such as -w- instead of rwx)
403 # This uses fchmod to avoid traversing outside of the proper
404 # location (CVE-2017-6512)
405 my $root_fh;
406 if (open($root_fh, '<', $root)) {
407 my ($fh_dev, $fh_inode) = (stat $root_fh )[0,1];
408 $perm &= oct '7777';
409 my $nperm = $perm | oct '700';
410 local $@;
411 if (
412 !(
413 $data->{safe}
414 or $nperm == $perm
415 or !-d _
416 or $fh_dev ne $ldev
417 or $fh_inode ne $lino
418 or eval { chmod( $nperm, $root_fh ) }
419 )
420 )
421 {
422 _error( $data,
423 "cannot make child directory read-write-exec", $canon );
424 next ROOT_DIR;
425 }
426 close $root_fh;
427 }
428 if ( !chdir($root) ) {
429 _error( $data, "cannot chdir to child", $canon );
430 next ROOT_DIR;
431 }
432 }
433
434 my ( $cur_dev, $cur_inode, $perm ) = ( stat $curdir )[ 0, 1, 2 ]
435 or do {
436 _error( $data, "cannot stat current working directory", $canon );
437 next ROOT_DIR;
438 };
439
440 if (_NEED_STAT_CHECK) {
441 ( $ldev eq $cur_dev and $lino eq $cur_inode )
442 or _croak(
443"directory $canon changed before chdir, expected dev=$ldev ino=$lino, actual dev=$cur_dev ino=$cur_inode, aborting."
444 );
445 }
446
447 $perm &= oct '7777'; # don't forget setuid, setgid, sticky bits
448 my $nperm = $perm | oct '700';
449
450 # notabene: 0700 is for making readable in the first place,
451 # it's also intended to change it to writable in case we have
452 # to recurse in which case we are better than rm -rf for
453 # subtrees with strange permissions
454
455 if (
456 !(
457 $data->{safe}
458 or $nperm == $perm
459 or chmod( $nperm, $curdir )
460 )
461 )
462 {
463 _error( $data, "cannot make directory read+writeable", $canon );
464 $nperm = $perm;
465 }
466
467 my $d;
468 $d = gensym() if $] < 5.006;
469 if ( !opendir $d, $curdir ) {
470 _error( $data, "cannot opendir", $canon );
471 @files = ();
472 }
473 else {
474 if ( !defined ${^TAINT} or ${^TAINT} ) {
475 # Blindly untaint dir names if taint mode is active
476 @files = map { /\A(.*)\z/s; $1 } readdir $d;
477 }
478 else {
479 @files = readdir $d;
480 }
481 closedir $d;
482 }
483
484 if (_IS_VMS) {
485
486 # Deleting large numbers of files from VMS Files-11
487 # filesystems is faster if done in reverse ASCIIbetical order.
488 # include '.' to '.;' from blead patch #31775
489 @files = map { $_ eq '.' ? '.;' : $_ } reverse @files;
490 }
491
492 @files = grep { $_ ne $updir and $_ ne $curdir } @files;
493
494 if (@files) {
495
496 # remove the contained files before the directory itself
497 my $narg = {%$data};
498 @{$narg}{qw(device inode cwd prefix depth)} =
499 ( $cur_dev, $cur_inode, $updir, $canon, $data->{depth} + 1 );
500 $count += _rmtree( $narg, \@files );
501 }
502
503 # restore directory permissions of required now (in case the rmdir
504 # below fails), while we are still in the directory and may do so
505 # without a race via '.'
506 if ( $nperm != $perm and not chmod( $perm, $curdir ) ) {
507 _error( $data, "cannot reset chmod", $canon );
508 }
509
510 # don't leave the client code in an unexpected directory
511 chdir( $data->{cwd} )
512 or
513 _croak("cannot chdir to $data->{cwd} from $canon: $!, aborting.");
514
515 # ensure that a chdir upwards didn't take us somewhere other
516 # than we expected (see CVE-2002-0435)
517 ( $cur_dev, $cur_inode ) = ( stat $curdir )[ 0, 1 ]
518 or _croak(
519 "cannot stat prior working directory $data->{cwd}: $!, aborting."
520 );
521
522 if (_NEED_STAT_CHECK) {
523 ( $data->{device} eq $cur_dev and $data->{inode} eq $cur_inode )
524 or _croak( "previous directory $data->{cwd} "
525 . "changed before entering $canon, "
526 . "expected dev=$ldev ino=$lino, "
527 . "actual dev=$cur_dev ino=$cur_inode, aborting."
528 );
529 }
530
531 if ( $data->{depth} or !$data->{keep_root} ) {
532 if ( $data->{safe}
533 && ( _IS_VMS
534 ? !&VMS::Filespec::candelete($root)
535 : !-w $root ) )
536 {
537 print "skipped $root\n" if $data->{verbose};
538 next ROOT_DIR;
539 }
540 if ( _FORCE_WRITABLE and !chmod $perm | oct '700', $root ) {
541 _error( $data, "cannot make directory writeable", $canon );
542 }
543 print "rmdir $root\n" if $data->{verbose};
544 if ( rmdir $root ) {
545 push @{ ${ $data->{result} } }, $root if $data->{result};
546 ++$count;
547 }
548 else {
549 _error( $data, "cannot remove directory", $canon );
550 if (
551 _FORCE_WRITABLE
552 && !chmod( $perm,
553 ( _IS_VMS ? VMS::Filespec::fileify($root) : $root )
554 )
555 )
556 {
557 _error(
558 $data,
559 sprintf( "cannot restore permissions to 0%o",
560 $perm ),
561 $canon
562 );
563 }
564 }
565 }
566 }
567 else {
568 # not a directory
569 $root = VMS::Filespec::vmsify("./$root")
570 if _IS_VMS
571 && !File::Spec->file_name_is_absolute($root)
572 && ( $root !~ m/(?<!\^)[\]>]+/ ); # not already in VMS syntax
573
574 if (
575 $data->{safe}
576 && (
577 _IS_VMS
578 ? !&VMS::Filespec::candelete($root)
579 : !( -l $root || -w $root )
580 )
581 )
582 {
583 print "skipped $root\n" if $data->{verbose};
584 next ROOT_DIR;
585 }
586
587 my $nperm = $perm & oct '7777' | oct '600';
588 if ( _FORCE_WRITABLE
589 and $nperm != $perm
590 and not chmod $nperm, $root )
591 {
592 _error( $data, "cannot make file writeable", $canon );
593 }
594 print "unlink $canon\n" if $data->{verbose};
595
596 # delete all versions under VMS
597 for ( ; ; ) {
598 if ( unlink $root ) {
599 push @{ ${ $data->{result} } }, $root if $data->{result};
600 }
601 else {
602 _error( $data, "cannot unlink file", $canon );
603 _FORCE_WRITABLE and chmod( $perm, $root )
604 or _error( $data,
605 sprintf( "cannot restore permissions to 0%o", $perm ),
606 $canon );
607 last;
608 }
609 ++$count;
610 last unless _IS_VMS && lstat $root;
611 }
612 }
613 }
614 return $count;
615}
616
617sub _slash_lc {
618
619 # fix up slashes and case on MSWin32 so that we can determine that
620 # c:\path\to\dir is underneath C:/Path/To
621 my $path = shift;
622 $path =~ tr{\\}{/};
623 return lc($path);
624}
625
62613µs1;
627
628__END__
 
# spent 400ns within File::Path::__ANON__ which was called: # once (400ns+0s) by File::Path::BEGIN@27 at line 41
sub File::Path::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Time-Local-pm-110-line.html0000644000175000017500000016516114576335353022626 0ustar michamicha Profile of Time/Local.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Time/Local.pm
StatementsExecuted 37 statements in 810µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs10µsTime::Local::::BEGIN@3Time::Local::BEGIN@3
1118µs10µsTime::Local::::_daygmTime::Local::_daygm
1113µs24µsTime::Local::::BEGIN@34Time::Local::BEGIN@34
1113µs12µsTime::Local::::BEGIN@6Time::Local::BEGIN@6
1113µs12µsTime::Local::::BEGIN@10Time::Local::BEGIN@10
1113µs19µsTime::Local::::BEGIN@35Time::Local::BEGIN@35
1112µs16µsTime::Local::::BEGIN@36Time::Local::BEGIN@36
1112µs2µsTime::Local::::BEGIN@5Time::Local::BEGIN@5
0000s0sTime::Local::::_is_leap_yearTime::Local::_is_leap_year
0000s0sTime::Local::::_timegmTime::Local::_timegm
0000s0sTime::Local::::timegmTime::Local::timegm
0000s0sTime::Local::::timegm_modernTime::Local::timegm_modern
0000s0sTime::Local::::timegm_nocheckTime::Local::timegm_nocheck
0000s0sTime::Local::::timegm_posixTime::Local::timegm_posix
0000s0sTime::Local::::timelocalTime::Local::timelocal
0000s0sTime::Local::::timelocal_modernTime::Local::timelocal_modern
0000s0sTime::Local::::timelocal_nocheckTime::Local::timelocal_nocheck
0000s0sTime::Local::::timelocal_posixTime::Local::timelocal_posix
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Time::Local;
2
3217µs212µs
# spent 10µs (9+2) within Time::Local::BEGIN@3 which was called: # once (9µs+2µs) by Archive::Zip::Member::BEGIN@27 at line 3
use strict;
# spent 10µs making 1 call to Time::Local::BEGIN@3 # spent 2µs making 1 call to strict::import
4
5215µs12µs
# spent 2µs within Time::Local::BEGIN@5 which was called: # once (2µs+0s) by Archive::Zip::Member::BEGIN@27 at line 5
use Carp ();
# spent 2µs making 1 call to Time::Local::BEGIN@5
6220µs222µs
# spent 12µs (3+9) within Time::Local::BEGIN@6 which was called: # once (3µs+9µs) by Archive::Zip::Member::BEGIN@27 at line 6
use Exporter;
# spent 12µs making 1 call to Time::Local::BEGIN@6 # spent 9µs making 1 call to Exporter::import
7
81200nsour $VERSION = '1.35';
9
10260µs221µs
# spent 12µs (3+9) within Time::Local::BEGIN@10 which was called: # once (3µs+9µs) by Archive::Zip::Member::BEGIN@27 at line 10
use parent 'Exporter';
# spent 12µs making 1 call to Time::Local::BEGIN@10 # spent 9µs making 1 call to parent::import
11
121700nsour @EXPORT = qw( timegm timelocal );
131500nsour @EXPORT_OK = qw(
14 timegm_modern
15 timelocal_modern
16 timegm_nocheck
17 timelocal_nocheck
18 timegm_posix
19 timelocal_posix
20);
21
221500nsmy @MonthDays = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
23
24# Determine breakpoint for rolling century
25110µsmy $ThisYear = ( localtime() )[5];
261900nsmy $Breakpoint = ( $ThisYear + 50 ) % 100;
271300nsmy $NextCentury = $ThisYear - $ThisYear % 100;
281100ns$NextCentury += 100 if $Breakpoint < 50;
291100nsmy $Century = $NextCentury - 100;
3010smy $SecOff = 0;
31
321100nsmy ( %Options, %Cheat );
33
34218µs245µs
# spent 24µs (3+21) within Time::Local::BEGIN@34 which was called: # once (3µs+21µs) by Archive::Zip::Member::BEGIN@27 at line 34
use constant SECS_PER_MINUTE => 60;
# spent 24µs making 1 call to Time::Local::BEGIN@34 # spent 21µs making 1 call to constant::import
35212µs234µs
# spent 19µs (3+16) within Time::Local::BEGIN@35 which was called: # once (3µs+16µs) by Archive::Zip::Member::BEGIN@27 at line 35
use constant SECS_PER_HOUR => 3600;
# spent 19µs making 1 call to Time::Local::BEGIN@35 # spent 16µs making 1 call to constant::import
362628µs230µs
# spent 16µs (2+14) within Time::Local::BEGIN@36 which was called: # once (2µs+14µs) by Archive::Zip::Member::BEGIN@27 at line 36
use constant SECS_PER_DAY => 86400;
# spent 16µs making 1 call to Time::Local::BEGIN@36 # spent 14µs making 1 call to constant::import
37
38my $MaxDay;
391300nsif ( $] < 5.012000 ) {
40 require Config;
41 ## no critic (Variables::ProhibitPackageVars)
42
43 my $MaxInt;
44 if ( $^O eq 'MacOS' ) {
45
46 # time_t is unsigned...
47 $MaxInt = ( 1 << ( 8 * $Config::Config{ivsize} ) )
48 - 1; ## no critic qw(ProhibitPackageVars)
49 }
50 else {
51 $MaxInt
52 = ( ( 1 << ( 8 * $Config::Config{ivsize} - 2 ) ) - 1 ) * 2
53 + 1; ## no critic qw(ProhibitPackageVars)
54 }
55
56 $MaxDay = int( ( $MaxInt - ( SECS_PER_DAY / 2 ) ) / SECS_PER_DAY ) - 1;
57}
58else {
59 # recent localtime()'s limit is the year 2**31
601100ns $MaxDay = 365 * ( 2**31 );
61
62 # On (some?) 32-bit platforms this overflows and we end up with a negative
63 # $MaxDay, which totally breaks this module. This is the old calculation
64 # we used from the days before Perl always had 64-bit time_t.
651100ns if ( $MaxDay < 0 ) {
66 require Config;
67 ## no critic (Variables::ProhibitPackageVars)
68 my $max_int
69 = ( ( 1 << ( 8 * $Config::Config{intsize} - 2 ) ) - 1 ) * 2 + 1;
70 $MaxDay
71 = int( ( $max_int - ( SECS_PER_DAY / 2 ) ) / SECS_PER_DAY ) - 1;
72 }
73}
74
75# Determine the EPOC day for this machine
761100nsmy $Epoc = 0;
7711µsif ( $^O eq 'vos' ) {
78
79 # work around posix-977 -- VOS doesn't handle dates in the range
80 # 1970-1980.
81 $Epoc = _daygm( 0, 0, 0, 1, 0, 70, 4, 0 );
82}
83elsif ( $^O eq 'MacOS' ) {
84 $MaxDay *= 2; # time_t unsigned ... quick hack?
85 # MacOS time() is seconds since 1 Jan 1904, localtime
86 # so we need to calculate an offset to apply later
87 $Epoc = 693901;
88 $SecOff = timelocal( localtime(0) ) - timelocal( gmtime(0) );
89 $Epoc += _daygm( gmtime(0) );
90}
91else {
9213µs110µs $Epoc = _daygm( gmtime(0) );
# spent 10µs making 1 call to Time::Local::_daygm
93}
94
951500ns%Cheat = (); # clear the cache as epoc has changed
96
97
# spent 10µs (8+1) within Time::Local::_daygm which was called: # once (8µs+1µs) by Archive::Zip::Member::BEGIN@27 at line 92
sub _daygm {
98
99 # This is written in such a byzantine way in order to avoid
100 # lexical variables and sub calls, for speed
101 return $_[3] + (
10218µs11µs $Cheat{ pack( 'ss', @_[ 4, 5 ] ) } ||= do {
# spent 1µs making 1 call to CORE::pack
1031300ns my $month = ( $_[4] + 10 ) % 12;
1041700ns my $year = $_[5] + 1900 - int( $month / 10 );
105
10612µs ( ( 365 * $year )
107 + int( $year / 4 )
108 - int( $year / 100 )
109 + int( $year / 400 )
110 + int( ( ( $month * 306 ) + 5 ) / 10 ) )
111 - $Epoc;
112 }
113 );
114}
115
116sub _timegm {
117 my $sec
118 = $SecOff + $_[0]
119 + ( SECS_PER_MINUTE * $_[1] )
120 + ( SECS_PER_HOUR * $_[2] );
121
122 return $sec + ( SECS_PER_DAY * &_daygm );
123}
124
125sub timegm {
126 my ( $sec, $min, $hour, $mday, $month, $year ) = @_;
127 my $subsec = $sec - int($sec);
128 $sec = int($sec);
129
130 if ( $Options{no_year_munging} ) {
131 $year -= 1900;
132 }
133 elsif ( !$Options{posix_year} ) {
134 if ( $year >= 1000 ) {
135 $year -= 1900;
136 }
137 elsif ( $year < 100 and $year >= 0 ) {
138 $year += ( $year > $Breakpoint ) ? $Century : $NextCentury;
139 }
140 }
141
142 unless ( $Options{no_range_check} ) {
143 Carp::croak("Month '$month' out of range 0..11")
144 if $month > 11
145 or $month < 0;
146
147 my $md = $MonthDays[$month];
148 ++$md
149 if $month == 1 && _is_leap_year( $year + 1900 );
150
151 Carp::croak("Day '$mday' out of range 1..$md")
152 if $mday > $md or $mday < 1;
153 Carp::croak("Hour '$hour' out of range 0..23")
154 if $hour > 23 or $hour < 0;
155 Carp::croak("Minute '$min' out of range 0..59")
156 if $min > 59 or $min < 0;
157 Carp::croak("Second '$sec' out of range 0..59")
158 if $sec >= 60 or $sec < 0;
159 }
160
161 my $days = _daygm( undef, undef, undef, $mday, $month, $year );
162
163 if ( abs($days) > $MaxDay && !$Options{no_range_check} ) {
164 my $msg = "Day too big - abs($days) > $MaxDay\n";
165
166 $year += 1900;
167 $msg
168 .= "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)";
169
170 Carp::croak($msg);
171 }
172
173 # Adding in the $subsec value last seems to prevent floating point errors
174 # from creeping in.
175 return (
176 (
177 $sec + $SecOff
178 + ( SECS_PER_MINUTE * $min )
179 + ( SECS_PER_HOUR * $hour )
180 + ( SECS_PER_DAY * $days )
181 ) + $subsec
182 );
183}
184
185sub _is_leap_year {
186 return 0 if $_[0] % 4;
187 return 1 if $_[0] % 100;
188 return 0 if $_[0] % 400;
189
190 return 1;
191}
192
193sub timegm_nocheck {
194 local $Options{no_range_check} = 1;
195 return &timegm;
196}
197
198sub timegm_modern {
199 local $Options{no_year_munging} = 1;
200 return &timegm;
201}
202
203sub timegm_posix {
204 local $Options{posix_year} = 1;
205 return &timegm;
206}
207
208sub timelocal {
209 my $sec = shift;
210 my $subsec = $sec - int($sec);
211 $sec = int($sec);
212 unshift @_, $sec;
213
214 my $ref_t = &timegm;
215 my $loc_for_ref_t = _timegm( localtime($ref_t) );
216
217 my $zone_off = $loc_for_ref_t - $ref_t
218 or return $loc_for_ref_t + $subsec;
219
220 # Adjust for timezone
221 my $loc_t = $ref_t - $zone_off;
222
223 # Are we close to a DST change or are we done
224 my $dst_off = $ref_t - _timegm( localtime($loc_t) );
225
226 # If this evaluates to true, it means that the value in $loc_t is
227 # the _second_ hour after a DST change where the local time moves
228 # backward.
229 if (
230 !$dst_off
231 && ( ( $ref_t - SECS_PER_HOUR )
232 - _timegm( localtime( $loc_t - SECS_PER_HOUR ) ) < 0 )
233 ) {
234 return ( $loc_t - SECS_PER_HOUR ) + $subsec;
235 }
236
237 # Adjust for DST change
238 $loc_t += $dst_off;
239
240 return $loc_t + $subsec if $dst_off > 0;
241
242 # If the original date was a non-existent gap in a forward DST jump, we
243 # should now have the wrong answer - undo the DST adjustment
244 my ( $s, $m, $h ) = localtime($loc_t);
245 $loc_t -= $dst_off if $s != $_[0] || $m != $_[1] || $h != $_[2];
246
247 return $loc_t + $subsec;
248}
249
250sub timelocal_nocheck {
251 local $Options{no_range_check} = 1;
252 return &timelocal;
253}
254
255sub timelocal_modern {
256 local $Options{no_year_munging} = 1;
257 return &timelocal;
258}
259
260sub timelocal_posix {
261 local $Options{posix_year} = 1;
262 return &timelocal;
263}
264
265111µs1;
266
267# ABSTRACT: Efficiently compute time from local and GMT time
268
269__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 45)[JSON-PP-pm-692]-153-line.html0000644000175000017500000003204514576335353023777 0ustar michamicha Profile of (eval 45)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 45)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 600ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11600ns 11111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 72)[XML-Twig-pm-5871]-189-line.html0000644000175000017500000004467514576335353024372 0ustar michamicha Profile of (eval 72)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 72)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 28 statements in 109µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

NOTE!
The data used to generate this report page was merged from 3 of the 37 executions
of the string eval on line 5871 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11114µs24µsXML::Twig::Elt::::BEGIN@1.32XML::Twig::Elt::BEGIN@1.32
19418µs8µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1] (merge of 3 subs)
1116µs17µsXML::Twig::Elt::::BEGIN@1.16XML::Twig::Elt::BEGIN@1.16
1115µs14µsXML::Twig::Elt::::BEGIN@1.26XML::Twig::Elt::BEGIN@1.26
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
128109µs684µs
# spent 8µs within XML::Twig::Elt::__ANON__[(eval 72)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 19 times, avg 426ns/call: # (data for this subroutine includes 2 others that were merged with it) # 9 times (2µs+0s) by XML::Twig::Elt::next_sibling at line 6071 of XML/Twig.pm, avg 233ns/call # 6 times (1µs+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 233ns/call # 3 times (2µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 767ns/call # once (2µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm # spent 17µs (6+11) within XML::Twig::Elt::BEGIN@1.16 which was called: # once (6µs+11µs) by XML::Twig::Elt::_install_cond at line 1 # spent 14µs (5+9) within XML::Twig::Elt::BEGIN@1.26 which was called: # once (5µs+9µs) by XML::Twig::Elt::_install_cond at line 1 # spent 24µs (14+10) within XML::Twig::Elt::BEGIN@1.32 which was called: # once (14µs+10µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 32) ? $_[0] : undef; }
# spent 30µs making 3 calls to warnings::unimport, avg 10µs/call # spent 24µs making 1 call to XML::Twig::Elt::BEGIN@1.32 # spent 17µs making 1 call to XML::Twig::Elt::BEGIN@1.16 # spent 14µs making 1 call to XML::Twig::Elt::BEGIN@1.26
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 60)[XML-Twig-pm-7113]-177-line.html0000644000175000017500000004107214576335353024337 0ustar michamicha Profile of (eval 60)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 60)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 9 statements in 96µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs37µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1117µs18µsXML::Twig::Elt::::BEGIN@1.4XML::Twig::Elt::BEGIN@1.4
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1996µs556µs
# spent 37µs (9+28) within XML::Twig::Elt::__ANON__[(eval 60)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (9µs+28µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 18µs (7+11) within XML::Twig::Elt::BEGIN@1.4 which was called: # once (7µs+11µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { grep { ((defined $_->{'att'}->{"Type"}) && ($_->{'att'}->{"Type"} eq "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings")) } $_->descendants( 'packagerels:Relationship') } @results;return XML::Twig::_unique_elts( @results); }
# spent 18µs making 1 call to XML::Twig::descendants # spent 18µs making 1 call to XML::Twig::Elt::BEGIN@1.4 # spent 11µs making 1 call to warnings::unimport # spent 5µs making 1 call to XML::Twig::Elt::twig # spent 4µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/IO-File-pm-75-line.html0000644000175000017500000013356714576335353022023 0ustar michamicha Profile of IO/File.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/IO/File.pm
StatementsExecuted 130 statements in 808µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111587µs682µsIO::File::::BEGIN@122IO::File::BEGIN@122
111236µs2.24msIO::File::::BEGIN@124IO::File::BEGIN@124
111161µs210µsIO::File::::BEGIN@123IO::File::BEGIN@123
92264µs274µsIO::File::::openIO::File::open
92235µs133µsIO::File::::newIO::File::new
11111µs11µsIO::File::::BEGIN@119IO::File::BEGIN@119
1114µs6µsIO::File::::BEGIN@120IO::File::BEGIN@120
1114µs25µsIO::File::::BEGIN@121IO::File::BEGIN@121
111600ns600nsIO::File::::__ANON__IO::File::__ANON__ (xsub)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2
3package IO::File;
4
5=head1 NAME
6
7IO::File - supply object methods for filehandles
8
9=head1 SYNOPSIS
10
11 use IO::File;
12
13 my $fh = IO::File->new();
14 if ($fh->open("< file")) {
15 print <$fh>;
16 $fh->close;
17 }
18
19 my $fh = IO::File->new("> file");
20 if (defined $fh) {
21 print $fh "bar\n";
22 $fh->close;
23 }
24
25 my $fh = IO::File->new("file", "r");
26 if (defined $fh) {
27 print <$fh>;
28 undef $fh; # automatically closes the file
29 }
30
31 my $fh = IO::File->new("file", O_WRONLY|O_APPEND);
32 if (defined $fh) {
33 print $fh "corge\n";
34
35 my $pos = $fh->getpos;
36 $fh->setpos($pos);
37
38 undef $fh; # automatically closes the file
39 }
40
41 autoflush STDOUT 1;
42
43=head1 DESCRIPTION
44
45C<IO::File> inherits from C<IO::Handle> and C<IO::Seekable>. It extends
46these classes with methods that are specific to file handles.
47
48=head1 CONSTRUCTOR
49
50=over 4
51
52=item new ( FILENAME [,MODE [,PERMS]] )
53
54Creates an C<IO::File>. If it receives any parameters, they are passed to
55the method C<open>; if the open fails, the object is destroyed. Otherwise,
56it is returned to the caller.
57
58=item new_tmpfile
59
60Creates an C<IO::File> opened for read/write on a newly created temporary
61file. On systems where this is possible, the temporary file is anonymous
62(i.e. it is unlinked after creation, but held open). If the temporary
63file cannot be created or opened, the C<IO::File> object is destroyed.
64Otherwise, it is returned to the caller.
65
66=back
67
68=head1 METHODS
69
70=over 4
71
72=item open( FILENAME [,MODE [,PERMS]] )
73
74=item open( FILENAME, IOLAYERS )
75
76C<open> accepts one, two or three parameters. With one parameter,
77it is just a front end for the built-in C<open> function. With two or three
78parameters, the first parameter is a filename that may include
79whitespace or other special characters, and the second parameter is
80the open mode, optionally followed by a file permission value.
81
82If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
83or an ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic
84Perl C<open> operator (but protects any special characters).
85
86If C<IO::File::open> is given a numeric mode, it passes that mode
87and the optional permissions value to the Perl C<sysopen> operator.
88The permissions default to 0666.
89
90If C<IO::File::open> is given a mode that includes the C<:> character,
91it passes all the three arguments to the three-argument C<open> operator.
92
93For convenience, C<IO::File> exports the O_XXX constants from the
94Fcntl module, if this module is available.
95
96=back
97
98=head1 NOTE
99
100Some operating systems may perform C<IO::File::new()> or C<IO::File::open()>
101on a directory without errors. This behavior is not portable and not
102suggested for use. Using C<opendir()> and C<readdir()> or C<IO::Dir> are
103suggested instead.
104
105=head1 SEE ALSO
106
107L<perlfunc>,
108L<perlop/"I/O Operators">,
109L<IO::Handle>,
110L<IO::Seekable>,
111L<IO::Dir>
112
113=head1 HISTORY
114
115Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>.
116
117=cut
118
119229µs111µs
# spent 11µs within IO::File::BEGIN@119 which was called: # once (11µs+0s) by Archive::Zip::BEGIN@7 at line 119
use 5.008_001;
# spent 11µs making 1 call to IO::File::BEGIN@119
120215µs28µs
# spent 6µs (4+2) within IO::File::BEGIN@120 which was called: # once (4µs+2µs) by Archive::Zip::BEGIN@7 at line 120
use strict;
# spent 6µs making 1 call to IO::File::BEGIN@120 # spent 2µs making 1 call to strict::import
121214µs246µs
# spent 25µs (4+21) within IO::File::BEGIN@121 which was called: # once (4µs+21µs) by Archive::Zip::BEGIN@7 at line 121
use Carp;
# spent 25µs making 1 call to IO::File::BEGIN@121 # spent 21µs making 1 call to Exporter::import
122273µs2705µs
# spent 682µs (587+95) within IO::File::BEGIN@122 which was called: # once (587µs+95µs) by Archive::Zip::BEGIN@7 at line 122
use Symbol;
# spent 682µs making 1 call to IO::File::BEGIN@122 # spent 23µs making 1 call to Exporter::import
123294µs2210µs
# spent 210µs (161+48) within IO::File::BEGIN@123 which was called: # once (161µs+48µs) by Archive::Zip::BEGIN@7 at line 123
use SelectSaver;
# spent 210µs making 1 call to IO::File::BEGIN@123 # spent 600ns making 1 call to IO::File::__ANON__
1242278µs22.26ms
# spent 2.24ms (236µs+2.00) within IO::File::BEGIN@124 which was called: # once (236µs+2.00ms) by Archive::Zip::BEGIN@7 at line 124
use IO::Seekable;
# spent 2.24ms making 1 call to IO::File::BEGIN@124 # spent 18µs making 1 call to Exporter::import
125
1261400nsrequire Exporter;
127
12818µsour @ISA = qw(IO::Handle IO::Seekable Exporter);
129
1301200nsour $VERSION = "1.55";
131
1321600nsour @EXPORT = @IO::Seekable::EXPORT;
133
1341300nseval {
135 # Make all Fcntl O_XXX constants available for importing
1361300ns require Fcntl;
137155µs6810µs my @O = grep /^O_/, @Fcntl::EXPORT;
# spent 10µs making 68 calls to CORE::match, avg 140ns/call
13812µs169µs Fcntl->import(@O); # first we import what we want to export
# spent 69µs making 1 call to Exporter::import
13916µs push(@EXPORT, @O);
140};
141
142################################################
143## Constructor
144##
145
146
# spent 133µs (35+98) within IO::File::new which was called 9 times, avg 15µs/call: # 8 times (24µs+46µs) by Archive::Zip::_newFileHandle at line 491 of Archive/Zip.pm, avg 9µs/call # once (11µs+52µs) by Spreadsheet::ParseXLSX::_check_signature at line 122 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub new {
14791µs my $type = shift;
14893µs my $class = ref($type) || $type || "IO::File";
14995µs @_ >= 0 && @_ <= 3
150 or croak "usage: $class->new([FILENAME [,MODE [,PERMS]]])";
151911µs956µs my $fh = $class->SUPER::new();
# spent 56µs making 9 calls to IO::Handle::new, avg 6µs/call
15293µs142µs if (@_) {
# spent 42µs making 1 call to IO::File::open
153 $fh->open(@_)
154 or return undef;
155 }
156910µs $fh;
157}
158
159################################################
160## Open
161##
162
163
# spent 274µs (64+210) within IO::File::open which was called 9 times, avg 30µs/call: # 8 times (52µs+180µs) by Archive::Zip::_newFileHandle at line 492 of Archive/Zip.pm, avg 29µs/call # once (12µs+30µs) by IO::File::new at line 152
sub open {
16493µs @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
16593µs my ($fh, $file) = @_;
16693µs if (@_ > 2) {
16795µs my ($mode, $perms) = @_[2, 3];
168924µs189µs if ($mode =~ /^\d+$/) {
# spent 9µs making 18 calls to CORE::match, avg 489ns/call
169 defined $perms or $perms = 0666;
170 return sysopen($fh, $file, $mode, $perms);
171 } elsif ($mode =~ /:/) {
172 return open($fh, $mode, $file) if @_ == 3;
173 croak 'usage: $fh->open(FILENAME, IOLAYERS)';
174 } else {
1759156µs18201µs return open($fh, IO::Handle::_open_mode_string($mode), $file);
# spent 118µs making 9 calls to CORE::open, avg 13µs/call # spent 83µs making 9 calls to IO::Handle::_open_mode_string, avg 9µs/call
176 }
177 }
178 open($fh, $file);
179}
180
18115µs1;
 
# spent 600ns within IO::File::__ANON__ which was called: # once (600ns+0s) by IO::File::BEGIN@123 at line 123
sub IO::File::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/base-pm-66-line.html0000644000175000017500000016372214576335353021545 0ustar michamicha Profile of base.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm
StatementsExecuted 160 statements in 1.06ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
444116µs164µsbase::::import base::import
41117µs26µsbase::::__ANON__[:76] base::__ANON__[:76]
11111µs11µsTest2::Util::Facets2Legacy::::BEGIN@1Test2::Util::Facets2Legacy::BEGIN@1
4118µs8µsbase::::has_fields base::has_fields
4116µs6µsbase::::has_attr base::has_attr
1114µs8µsbase::::BEGIN@4 base::BEGIN@4
0000s0sbase::::__ANON__[:133] base::__ANON__[:133]
0000s0sbase::::__ANON__[:134] base::__ANON__[:134]
0000s0sbase::::__ANON__[:53] base::__ANON__[:53]
0000s0sbase::::__ANON__[:60] base::__ANON__[:60]
0000s0sbase::::__ANON__[:68] base::__ANON__[:68]
0000s0sbase::__inc::scope_guard::::DESTROY base::__inc::scope_guard::DESTROY
0000s0sbase::__inc::::unhook base::__inc::unhook
0000s0sbase::::get_attr base::get_attr
0000s0sbase::::inherit_fields base::inherit_fields
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1239µs111µs
# spent 11µs within Test2::Util::Facets2Legacy::BEGIN@1 which was called: # once (11µs+0s) by Test2::Util::Facets2Legacy::BEGIN@10 at line 1
use 5.008;
# spent 11µs making 1 call to Test2::Util::Facets2Legacy::BEGIN@1
2package base;
3
42847µs212µs
# spent 8µs (4+4) within base::BEGIN@4 which was called: # once (4µs+4µs) by Test2::Util::Facets2Legacy::BEGIN@10 at line 4
use strict 'vars';
# spent 8µs making 1 call to base::BEGIN@4 # spent 4µs making 1 call to strict::import
51400nsour $VERSION = '2.27';
61700ns$VERSION =~ tr/_//d;
7
8# simplest way to avoid indexing of the package: no package statement
9sub base::__inc::unhook { @INC = grep !(ref eq 'CODE' && $_ == $_[0]), @INC }
10# instance is blessed array of coderefs to be removed from @INC at scope exit
11sub base::__inc::scope_guard::DESTROY { base::__inc::unhook $_ for @{$_[0]} }
12
13# constant.pm is slow
14sub SUCCESS () { 1 }
15
16sub PUBLIC () { 2**0 }
17sub PRIVATE () { 2**1 }
18sub INHERITED () { 2**2 }
19sub PROTECTED () { 2**3 }
20
21
221500nsmy $Fattr = \%fields::attr;
23
24
# spent 8µs within base::has_fields which was called 4 times, avg 2µs/call: # 4 times (8µs+0s) by base::import at line 177, avg 2µs/call
sub has_fields {
2542µs my($base) = shift;
2643µs my $fglob = ${"$base\::"}{FIELDS};
2745µs return( ($fglob && 'GLOB' eq ref($fglob) && *$fglob{HASH}) ? 1 : 0 );
28}
29
30
# spent 6µs within base::has_attr which was called 4 times, avg 1µs/call: # 4 times (6µs+0s) by base::import at line 177, avg 1µs/call
sub has_attr {
314800ns my($proto) = shift;
3242µs my($class) = ref $proto || $proto;
3345µs return exists $Fattr->{$class};
34}
35
36sub get_attr {
37 $Fattr->{$_[0]} = [1] unless $Fattr->{$_[0]};
38 return $Fattr->{$_[0]};
39}
40
411400nsif ($] < 5.009) {
42 *get_fields = sub {
43 # Shut up a possible typo warning.
44 () = \%{$_[0].'::FIELDS'};
45 my $f = \%{$_[0].'::FIELDS'};
46
47 # should be centralized in fields? perhaps
48 # fields::mk_FIELDS_be_OK. Peh. As long as %{ $package . '::FIELDS' }
49 # is used here anyway, it doesn't matter.
50 bless $f, 'pseudohash' if (ref($f) ne 'pseudohash');
51
52 return $f;
53 }
54}
55else {
56 *get_fields = sub {
57 # Shut up a possible typo warning.
58 () = \%{$_[0].'::FIELDS'};
59 return \%{$_[0].'::FIELDS'};
60 }
6112µs}
62
631200nsif ($] < 5.008) {
64 *_module_to_filename = sub {
65 (my $fn = $_[0]) =~ s!::!/!g;
66 $fn .= '.pm';
67 return $fn;
68 }
69}
70else {
71
# spent 26µs (17+9) within base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] which was called 4 times, avg 7µs/call: # 4 times (17µs+9µs) by base::import at line 103, avg 7µs/call
*_module_to_filename = sub {
72414µs47µs (my $fn = $_[0]) =~ s!::!/!g;
# spent 7µs making 4 calls to CORE::subst, avg 2µs/call
7341µs $fn .= '.pm';
7447µs42µs utf8::encode($fn);
# spent 2µs making 4 calls to utf8::encode, avg 550ns/call
7546µs return $fn;
76 }
7712µs}
78
79
80
# spent 164µs (116+48) within base::import which was called 4 times, avg 41µs/call: # once (30µs+16µs) by Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10 at line 10 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm # once (35µs+10µs) by Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10 at line 10 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm # once (30µs+11µs) by Test2::Util::Facets2Legacy::BEGIN@10 at line 10 of Test2/Util/Facets2Legacy.pm # once (21µs+10µs) by Spreadsheet::ParseXLSX::Cell::BEGIN@11 at line 11 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Cell.pm
sub import {
8141µs my $class = shift;
82
8341µs return SUCCESS unless @_;
84
85 # List of base classes from which we will inherit %FIELDS.
864700ns my $fields_base;
87
8842µs my $inheritor = caller(0);
89
904600ns my @bases;
9142µs foreach my $base (@_) {
9241µs if ( $inheritor eq $base ) {
93 warn "Class '$inheritor' tried to inherit from itself\n";
94 }
95
96442µs46µs next if grep $_->isa($base), ($inheritor, @bases);
# spent 6µs making 4 calls to UNIVERSAL::isa, avg 2µs/call
97
98 # Following blocks help isolate $SIG{__DIE__} and @INC changes
99 {
10081µs my $sigdie;
101 {
10286µs local $SIG{__DIE__};
10345µs426µs my $fn = _module_to_filename($base);
# spent 26µs making 4 calls to base::__ANON__[base.pm:76], avg 7µs/call
1044400ns my $dot_hidden;
10541µs eval {
1064200ns my $guard;
10741µs if ($INC[-1] eq '.' && %{"$base\::"}) {
108 # So: the package already exists => this an optional load
109 # And: there is a dot at the end of @INC => we want to hide it
110 # However: we only want to hide it during our *own* require()
111 # (i.e. without affecting nested require()s).
112 # So we add a hook to @INC whose job is to hide the dot, but which
113 # first checks checks the callstack depth, because within nested
114 # require()s the callstack is deeper.
115 # Since CORE::GLOBAL::require makes it unknowable in advance what
116 # the exact relevant callstack depth will be, we have to record it
117 # inside a hook. So we put another hook just for that at the front
118 # of @INC, where it's guaranteed to run -- immediately.
119 # The dot-hiding hook does its job by sitting directly in front of
120 # the dot and removing itself from @INC when reached. This causes
121 # the dot to move up one index in @INC, causing the loop inside
122 # pp_require() to skip it.
123 # Loaded coded may disturb this precise arrangement, but that's OK
124 # because the hook is inert by that time. It is only active during
125 # the top-level require(), when @INC is in our control. The only
126 # possible gotcha is if other hooks already in @INC modify @INC in
127 # some way during that initial require().
128 # Note that this jiggery hookery works just fine recursively: if
129 # a module loaded via base.pm uses base.pm itself, there will be
130 # one pair of hooks in @INC per base::import call frame, but the
131 # pairs from different nestings do not interfere with each other.
132 my $lvl;
133 unshift @INC, sub { return if defined $lvl; 1 while defined caller ++$lvl; () };
134 splice @INC, -1, 0, sub { return if defined caller $lvl; ++$dot_hidden, &base::__inc::unhook; () };
135 $guard = bless [ @INC[0,-2] ], 'base::__inc::scope_guard';
136 }
13742µs require $fn
138 };
1394600ns if ($dot_hidden && (my @fn = grep -e && !( -d _ || -b _ ), $fn.'c', $fn)) {
140 require Carp;
141 Carp::croak(<<ERROR);
142Base class package "$base" is not empty but "$fn[0]" exists in the current directory.
143 To help avoid security issues, base.pm now refuses to load optional modules
144 from the current working directory when it is the last entry in \@INC.
145 If your software worked on previous versions of Perl, the best solution
146 is to use FindBin to detect the path properly and to add that path to
147 \@INC. As a last resort, you can re-enable looking in the current working
148 directory by adding "use lib '.'" to your code.
149ERROR
150 }
151 # Only ignore "Can't locate" errors from our eval require.
152 # Other fatal errors (syntax etc) must be reported.
153 #
154 # changing the check here is fragile - if the check
155 # here isn't catching every error you want, you should
156 # probably be using parent.pm, which doesn't try to
157 # guess whether require is needed or failed,
158 # see [perl #118561]
15946µs4900ns die if $@ && $@ !~ /^Can't locate \Q$fn\E .*? at .* line [0-9]+(?:, <[^>]*> (?:line|chunk) [0-9]+)?\.\n\z/s
# spent 900ns making 4 calls to CORE::match, avg 225ns/call
160 || $@ =~ /Compilation failed in require at .* line [0-9]+(?:, <[^>]*> (?:line|chunk) [0-9]+)?\.\n\z/;
16144µs unless (%{"$base\::"}) {
162 require Carp;
163 local $" = " ";
164 Carp::croak(<<ERROR);
165Base class package "$base" is empty.
166 (Perhaps you need to 'use' the module which defines that package first,
167 or make that module available in \@INC (\@INC contains: @INC).
168ERROR
169 }
17048µs $sigdie = $SIG{__DIE__} || undef;
171 }
172 # Make sure a global $SIG{__DIE__} makes it out of the localization.
17341µs $SIG{__DIE__} = $sigdie if defined $sigdie;
174 }
17541µs push @bases, $base;
176
17747µs814µs if ( has_fields($base) || has_attr($base) ) {
# spent 8µs making 4 calls to base::has_fields, avg 2µs/call # spent 6µs making 4 calls to base::has_attr, avg 1µs/call
178 # No multiple fields inheritance *suck*
179 if ($fields_base) {
180 require Carp;
181 Carp::croak("Can't multiply inherit fields");
182 } else {
183 $fields_base = $base;
184 }
185 }
186 }
187 # Save this until the end so it's all or nothing if the above loop croaks.
188419µs push @{"$inheritor\::ISA"}, @bases;
189
19048µs if( defined $fields_base ) {
191 inherit_fields($inheritor, $fields_base);
192 }
193}
194
195
196sub inherit_fields {
197 my($derived, $base) = @_;
198
199 return SUCCESS unless $base;
200
201 my $battr = get_attr($base);
202 my $dattr = get_attr($derived);
203 my $dfields = get_fields($derived);
204 my $bfields = get_fields($base);
205
206 $dattr->[0] = @$battr;
207
208 if( keys %$dfields ) {
209 warn <<"END";
210$derived is inheriting from $base but already has its own fields!
211This will cause problems. Be sure you use base BEFORE declaring fields.
212END
213
214 }
215
216 # Iterate through the base's fields adding all the non-private
217 # ones to the derived class. Hang on to the original attribute
218 # (Public, Private, etc...) and add Inherited.
219 # This is all too complicated to do efficiently with add_fields().
220 while (my($k,$v) = each %$bfields) {
221 my $fno;
222 if ($fno = $dfields->{$k} and $fno != $v) {
223 require Carp;
224 Carp::croak ("Inherited fields can't override existing fields");
225 }
226
227 if( $battr->[$v] & PRIVATE ) {
228 $dattr->[$v] = PRIVATE | INHERITED;
229 }
230 else {
231 $dattr->[$v] = INHERITED | $battr->[$v];
232 $dfields->{$k} = $v;
233 }
234 }
235
236 foreach my $idx (1..$#{$battr}) {
237 next if defined $dattr->[$idx];
238 $dattr->[$idx] = $battr->[$idx] & INHERITED;
239 }
240}
241
242
24314µs1;
244
245__END__










Spreadsheet-ParseXLSX-0.35/nytprof/OLE-Storage_Lite-pm-119-line.html0000644000175000017500000074411114576335353023705 0ustar michamicha Profile of OLE/Storage_Lite.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/OLE/Storage_Lite.pm
StatementsExecuted 54 statements in 4.25ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs12µsOLE::Storage_Lite::PPS::::BEGIN@12 OLE::Storage_Lite::PPS::BEGIN@12
1117µs24µsOLE::Storage_Lite::::BEGIN@831 OLE::Storage_Lite::BEGIN@831
1117µs76µsOLE::Storage_Lite::::BEGIN@843 OLE::Storage_Lite::BEGIN@843
1117µs74µsOLE::Storage_Lite::PPS::Root::::BEGIN@169OLE::Storage_Lite::PPS::Root::BEGIN@169
1116µs945µsOLE::Storage_Lite::::BEGIN@1383 OLE::Storage_Lite::BEGIN@1383
1116µs7µsOLE::Storage_Lite::PPS::File::::BEGIN@713OLE::Storage_Lite::PPS::File::BEGIN@713
1115µs7µsOLE::Storage_Lite::PPS::Dir::::BEGIN@801 OLE::Storage_Lite::PPS::Dir::BEGIN@801
1115µs7µsOLE::Storage_Lite::PPS::Root::::BEGIN@168OLE::Storage_Lite::PPS::Root::BEGIN@168
1115µs152µsOLE::Storage_Lite::PPS::Root::::BEGIN@171OLE::Storage_Lite::PPS::Root::BEGIN@171
1114µs6µsOLE::Storage_Lite::::BEGIN@828 OLE::Storage_Lite::BEGIN@828
1114µs22µsOLE::Storage_Lite::::BEGIN@832 OLE::Storage_Lite::BEGIN@832
1114µs66µsOLE::Storage_Lite::::BEGIN@830 OLE::Storage_Lite::BEGIN@830
1114µs11µsOLE::Storage_Lite::PPS::Root::::BEGIN@170OLE::Storage_Lite::PPS::Root::BEGIN@170
1114µs21µsOLE::Storage_Lite::PPS::File::::BEGIN@714OLE::Storage_Lite::PPS::File::BEGIN@714
1114µs24µsOLE::Storage_Lite::PPS::::BEGIN@13 OLE::Storage_Lite::PPS::BEGIN@13
1114µs19µsOLE::Storage_Lite::PPS::Root::::BEGIN@172OLE::Storage_Lite::PPS::Root::BEGIN@172
1113µs27µsOLE::Storage_Lite::::BEGIN@829 OLE::Storage_Lite::BEGIN@829
1113µs19µsOLE::Storage_Lite::PPS::Dir::::BEGIN@802 OLE::Storage_Lite::PPS::Dir::BEGIN@802
1113µs21µsOLE::Storage_Lite::::BEGIN@834 OLE::Storage_Lite::BEGIN@834
0000s0sOLE::Storage_Lite::::Asc2Ucs OLE::Storage_Lite::Asc2Ucs
0000s0sOLE::Storage_Lite::::LocalDate2OLE OLE::Storage_Lite::LocalDate2OLE
0000s0sOLE::Storage_Lite::::OLEDate2Local OLE::Storage_Lite::OLEDate2Local
0000s0sOLE::Storage_Lite::PPS::Dir::::new OLE::Storage_Lite::PPS::Dir::new
0000s0sOLE::Storage_Lite::PPS::File::::appendOLE::Storage_Lite::PPS::File::append
0000s0sOLE::Storage_Lite::PPS::File::::newOLE::Storage_Lite::PPS::File::new
0000s0sOLE::Storage_Lite::PPS::File::::newFileOLE::Storage_Lite::PPS::File::newFile
0000s0sOLE::Storage_Lite::PPS::Root::::_adjust2OLE::Storage_Lite::PPS::Root::_adjust2
0000s0sOLE::Storage_Lite::PPS::Root::::_calcSizeOLE::Storage_Lite::PPS::Root::_calcSize
0000s0sOLE::Storage_Lite::PPS::Root::::_saveBbdOLE::Storage_Lite::PPS::Root::_saveBbd
0000s0sOLE::Storage_Lite::PPS::Root::::_saveBigDataOLE::Storage_Lite::PPS::Root::_saveBigData
0000s0sOLE::Storage_Lite::PPS::Root::::_saveHeaderOLE::Storage_Lite::PPS::Root::_saveHeader
0000s0sOLE::Storage_Lite::PPS::Root::::_savePpsOLE::Storage_Lite::PPS::Root::_savePps
0000s0sOLE::Storage_Lite::PPS::Root::::_savePpsSetPntOLE::Storage_Lite::PPS::Root::_savePpsSetPnt
0000s0sOLE::Storage_Lite::PPS::Root::::_savePpsSetPnt1OLE::Storage_Lite::PPS::Root::_savePpsSetPnt1
0000s0sOLE::Storage_Lite::PPS::Root::::_savePpsSetPnt2OLE::Storage_Lite::PPS::Root::_savePpsSetPnt2
0000s0sOLE::Storage_Lite::PPS::Root::::_savePpsSetPnt2sOLE::Storage_Lite::PPS::Root::_savePpsSetPnt2s
0000s0sOLE::Storage_Lite::PPS::Root::::newOLE::Storage_Lite::PPS::Root::new
0000s0sOLE::Storage_Lite::PPS::Root::::saveOLE::Storage_Lite::PPS::Root::save
0000s0sOLE::Storage_Lite::PPS::::_DataLen OLE::Storage_Lite::PPS::_DataLen
0000s0sOLE::Storage_Lite::PPS::::_makeSmallData OLE::Storage_Lite::PPS::_makeSmallData
0000s0sOLE::Storage_Lite::PPS::::_new OLE::Storage_Lite::PPS::_new
0000s0sOLE::Storage_Lite::PPS::::_savePpsWk OLE::Storage_Lite::PPS::_savePpsWk
0000s0sOLE::Storage_Lite::PPS::::new OLE::Storage_Lite::PPS::new
0000s0sOLE::Storage_Lite::::Ucs2Asc OLE::Storage_Lite::Ucs2Asc
0000s0sOLE::Storage_Lite::::__ANON__[:988] OLE::Storage_Lite::__ANON__[:988]
0000s0sOLE::Storage_Lite::::__ANON__[:989] OLE::Storage_Lite::__ANON__[:989]
0000s0sOLE::Storage_Lite::::_getBbdInfo OLE::Storage_Lite::_getBbdInfo
0000s0sOLE::Storage_Lite::::_getBigData OLE::Storage_Lite::_getBigData
0000s0sOLE::Storage_Lite::::_getData OLE::Storage_Lite::_getData
0000s0sOLE::Storage_Lite::::_getHeaderInfo OLE::Storage_Lite::_getHeaderInfo
0000s0sOLE::Storage_Lite::::_getInfoFromFile OLE::Storage_Lite::_getInfoFromFile
0000s0sOLE::Storage_Lite::::_getNthBlockNo OLE::Storage_Lite::_getNthBlockNo
0000s0sOLE::Storage_Lite::::_getNthPps OLE::Storage_Lite::_getNthPps
0000s0sOLE::Storage_Lite::::_getPpsSearch OLE::Storage_Lite::_getPpsSearch
0000s0sOLE::Storage_Lite::::_getPpsTree OLE::Storage_Lite::_getPpsTree
0000s0sOLE::Storage_Lite::::_getSmallData OLE::Storage_Lite::_getSmallData
0000s0sOLE::Storage_Lite::::_initParse OLE::Storage_Lite::_initParse
0000s0sOLE::Storage_Lite::::getNthPps OLE::Storage_Lite::getNthPps
0000s0sOLE::Storage_Lite::::getPpsSearch OLE::Storage_Lite::getPpsSearch
0000s0sOLE::Storage_Lite::::getPpsTree OLE::Storage_Lite::getPpsTree
0000s0sOLE::Storage_Lite::::new OLE::Storage_Lite::new
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# OLE::Storage_Lite
2# by Kawai, Takanori (Hippo2000) 2000.11.4, 8, 14
3# This Program is Still ALPHA version.
4#//////////////////////////////////////////////////////////////////////////////
5# OLE::Storage_Lite::PPS Object
6#//////////////////////////////////////////////////////////////////////////////
7#==============================================================================
8# OLE::Storage_Lite::PPS
9#==============================================================================
10package OLE::Storage_Lite::PPS;
111500nsrequire Exporter;
12222µs214µs
# spent 12µs (11+1) within OLE::Storage_Lite::PPS::BEGIN@12 which was called: # once (11µs+1µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 12
use strict;
# spent 12µs making 1 call to OLE::Storage_Lite::PPS::BEGIN@12 # spent 1µs making 1 call to strict::import
132544µs245µs
# spent 24µs (4+21) within OLE::Storage_Lite::PPS::BEGIN@13 which was called: # once (4µs+21µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 13
use vars qw($VERSION @ISA);
# spent 24µs making 1 call to OLE::Storage_Lite::PPS::BEGIN@13 # spent 21µs making 1 call to vars::import
1415µs@ISA = qw(Exporter);
151200ns$VERSION = '0.22';
16
17#------------------------------------------------------------------------------
18# new (OLE::Storage_Lite::PPS)
19#------------------------------------------------------------------------------
20sub new ($$$$$$$$$$;$$) {
21#1. Constructor for General Usage
22 my($sClass, $iNo, $sNm, $iType, $iPrev, $iNext, $iDir,
23 $raTime1st, $raTime2nd, $iStart, $iSize, $sData, $raChild) = @_;
24
25 if($iType == OLE::Storage_Lite::PpsType_File()) { #FILE
26 return OLE::Storage_Lite::PPS::File->_new
27 ($iNo, $sNm, $iType, $iPrev, $iNext, $iDir, $raTime1st, $raTime2nd,
28 $iStart, $iSize, $sData, $raChild);
29 }
30 elsif($iType == OLE::Storage_Lite::PpsType_Dir()) { #DIRECTRY
31 return OLE::Storage_Lite::PPS::Dir->_new
32 ($iNo, $sNm, $iType, $iPrev, $iNext, $iDir, $raTime1st, $raTime2nd,
33 $iStart, $iSize, $sData, $raChild);
34 }
35 elsif($iType == OLE::Storage_Lite::PpsType_Root()) { #ROOT
36 return OLE::Storage_Lite::PPS::Root->_new
37 ($iNo, $sNm, $iType, $iPrev, $iNext, $iDir, $raTime1st, $raTime2nd,
38 $iStart, $iSize, $sData, $raChild);
39 }
40 else {
41 die "Error PPS:$iType $sNm\n";
42 }
43}
44#------------------------------------------------------------------------------
45# _new (OLE::Storage_Lite::PPS)
46# for OLE::Storage_Lite
47#------------------------------------------------------------------------------
48sub _new ($$$$$$$$$$$;$$) {
49 my($sClass, $iNo, $sNm, $iType, $iPrev, $iNext, $iDir,
50 $raTime1st, $raTime2nd, $iStart, $iSize, $sData, $raChild) = @_;
51#1. Constructor for OLE::Storage_Lite
52 my $oThis = {
53 No => $iNo,
54 Name => $sNm,
55 Type => $iType,
56 PrevPps => $iPrev,
57 NextPps => $iNext,
58 DirPps => $iDir,
59 Time1st => $raTime1st,
60 Time2nd => $raTime2nd,
61 StartBlock => $iStart,
62 Size => $iSize,
63 Data => $sData,
64 Child => $raChild,
65 };
66 bless $oThis, $sClass;
67 return $oThis;
68}
69#------------------------------------------------------------------------------
70# _DataLen (OLE::Storage_Lite::PPS)
71# Check for update
72#------------------------------------------------------------------------------
73sub _DataLen($) {
74 my($oSelf) =@_;
75 return 0 unless(defined($oSelf->{Data}));
76 return ($oSelf->{_PPS_FILE})?
77 ($oSelf->{_PPS_FILE}->stat())[7] : length($oSelf->{Data});
78}
79#------------------------------------------------------------------------------
80# _makeSmallData (OLE::Storage_Lite::PPS)
81#------------------------------------------------------------------------------
82sub _makeSmallData($$$) {
83 my($oThis, $aList, $rhInfo) = @_;
84 my ($sRes);
85 my $FILE = $rhInfo->{_FILEH_};
86 my $iSmBlk = 0;
87
88 foreach my $oPps (@$aList) {
89#1. Make SBD, small data string
90 if($oPps->{Type}==OLE::Storage_Lite::PpsType_File()) {
91 next if($oPps->{Size}<=0);
92 if($oPps->{Size} < $rhInfo->{_SMALL_SIZE}) {
93 my $iSmbCnt = int($oPps->{Size} / $rhInfo->{_SMALL_BLOCK_SIZE})
94 + (($oPps->{Size} % $rhInfo->{_SMALL_BLOCK_SIZE})? 1: 0);
95 #1.1 Add to SBD
96 for (my $i = 0; $i<($iSmbCnt-1); $i++) {
97 print {$FILE} (pack("V", $i+$iSmBlk+1));
98 }
9911µs print {$FILE} (pack("V", -2));
# spent 1µs making 1 call to CORE::pack
100
101 #1.2 Add to Data String(this will be written for RootEntry)
102 #Check for update
103 if($oPps->{_PPS_FILE}) {
104 my $sBuff;
105 $oPps->{_PPS_FILE}->seek(0, 0); #To The Top
106 while($oPps->{_PPS_FILE}->read($sBuff, 4096)) {
107 $sRes .= $sBuff;
108 }
109 }
110 else {
111 $sRes .= $oPps->{Data};
112 }
113 $sRes .= ("\x00" x
114 ($rhInfo->{_SMALL_BLOCK_SIZE} - ($oPps->{Size}% $rhInfo->{_SMALL_BLOCK_SIZE})))
115 if($oPps->{Size}% $rhInfo->{_SMALL_BLOCK_SIZE});
116 #1.3 Set for PPS
117 $oPps->{StartBlock} = $iSmBlk;
118 $iSmBlk += $iSmbCnt;
119 }
120 }
121 }
122 my $iSbCnt = int($rhInfo->{_BIG_BLOCK_SIZE}/ OLE::Storage_Lite::LongIntSize());
12311µs print {$FILE} (pack("V", -1) x ($iSbCnt - ($iSmBlk % $iSbCnt)))
# spent 1µs making 1 call to CORE::pack
124 if($iSmBlk % $iSbCnt);
125#2. Write SBD with adjusting length for block
126 return $sRes;
127}
128#------------------------------------------------------------------------------
129# _savePpsWk (OLE::Storage_Lite::PPS)
130#------------------------------------------------------------------------------
131sub _savePpsWk($$)
132{
133 my($oThis, $rhInfo) = @_;
134#1. Write PPS
135 my $FILE = $rhInfo->{_FILEH_};
136 print {$FILE} (
137 $oThis->{Name}
138 . ("\x00" x (64 - length($oThis->{Name}))) #64
139 , pack("v", length($oThis->{Name}) + 2) #66
140 , pack("c", $oThis->{Type}) #67
141 , pack("c", 0x00) #UK #68
1421900ns , pack("V", $oThis->{PrevPps}) #Prev #72
# spent 900ns making 1 call to CORE::pack
143 , pack("V", $oThis->{NextPps}) #Next #76
144 , pack("V", $oThis->{DirPps}) #Dir #80
145 , "\x00\x09\x02\x00" #84
146 , "\x00\x00\x00\x00" #88
147 , "\xc0\x00\x00\x00" #92
148 , "\x00\x00\x00\x46" #96
149 , "\x00\x00\x00\x00" #100
150 , OLE::Storage_Lite::LocalDate2OLE($oThis->{Time1st}) #108
151 , OLE::Storage_Lite::LocalDate2OLE($oThis->{Time2nd}) #116
152 , pack("V", defined($oThis->{StartBlock})?
153 $oThis->{StartBlock}:0) #116
154 , pack("V", defined($oThis->{Size})?
155 $oThis->{Size} : 0) #124
1561600ns , pack("V", 0), #128
# spent 600ns making 1 call to CORE::pack
157 );
158}
159
160#//////////////////////////////////////////////////////////////////////////////
161# OLE::Storage_Lite::PPS::Root Object
162#//////////////////////////////////////////////////////////////////////////////
163#==============================================================================
164# OLE::Storage_Lite::PPS::Root
165#==============================================================================
166package OLE::Storage_Lite::PPS::Root;
1671200nsrequire Exporter;
168231µs29µs
# spent 7µs (5+2) within OLE::Storage_Lite::PPS::Root::BEGIN@168 which was called: # once (5µs+2µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 168
use strict;
# spent 7µs making 1 call to OLE::Storage_Lite::PPS::Root::BEGIN@168 # spent 2µs making 1 call to strict::import
169218µs2141µs
# spent 74µs (7+67) within OLE::Storage_Lite::PPS::Root::BEGIN@169 which was called: # once (7µs+67µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 169
use IO::File;
# spent 74µs making 1 call to OLE::Storage_Lite::PPS::Root::BEGIN@169 # spent 67µs making 1 call to Exporter::import
170211µs217µs
# spent 11µs (4+7) within OLE::Storage_Lite::PPS::Root::BEGIN@170 which was called: # once (4µs+7µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 170
use IO::Handle;
# spent 11µs making 1 call to OLE::Storage_Lite::PPS::Root::BEGIN@170 # spent 7µs making 1 call to Exporter::import
171218µs2299µs
# spent 152µs (5+147) within OLE::Storage_Lite::PPS::Root::BEGIN@171 which was called: # once (5µs+147µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 171
use Fcntl;
# spent 152µs making 1 call to OLE::Storage_Lite::PPS::Root::BEGIN@171 # spent 147µs making 1 call to Exporter::import
17221.56ms235µs
# spent 19µs (4+16) within OLE::Storage_Lite::PPS::Root::BEGIN@172 which was called: # once (4µs+16µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 172
use vars qw($VERSION @ISA);
# spent 19µs making 1 call to OLE::Storage_Lite::PPS::Root::BEGIN@172 # spent 16µs making 1 call to vars::import
17314µs@ISA = qw(OLE::Storage_Lite::PPS Exporter);
1741200ns$VERSION = '0.22';
175sub _savePpsSetPnt($$$);
176sub _savePpsSetPnt2($$$);
177#------------------------------------------------------------------------------
178# new (OLE::Storage_Lite::PPS::Root)
179#------------------------------------------------------------------------------
180sub new ($;$$$) {
181 my($sClass, $raTime1st, $raTime2nd, $raChild) = @_;
182 OLE::Storage_Lite::PPS::_new(
183 $sClass,
184 undef,
185 OLE::Storage_Lite::Asc2Ucs('Root Entry'),
186 5,
187 undef,
188 undef,
189 undef,
190 $raTime1st,
191 $raTime2nd,
192 undef,
193 undef,
194 undef,
195 $raChild);
196}
197#------------------------------------------------------------------------------
198# save (OLE::Storage_Lite::PPS::Root)
199#------------------------------------------------------------------------------
200sub save($$;$$) {
201 my($oThis, $sFile, $bNoAs, $rhInfo) = @_;
202 #0.Initial Setting for saving
203 $rhInfo = {} unless($rhInfo);
204 $rhInfo->{_BIG_BLOCK_SIZE} = 2**
205 (($rhInfo->{_BIG_BLOCK_SIZE})?
206 _adjust2($rhInfo->{_BIG_BLOCK_SIZE}) : 9);
207 $rhInfo->{_SMALL_BLOCK_SIZE}= 2 **
208 (($rhInfo->{_SMALL_BLOCK_SIZE})?
209 _adjust2($rhInfo->{_SMALL_BLOCK_SIZE}): 6);
210 $rhInfo->{_SMALL_SIZE} = 0x1000;
211 $rhInfo->{_PPS_SIZE} = 0x80;
212
213 my $closeFile = 1;
214
215 #1.Open File
216 #1.1 $sFile is Ref of scalar
217 if(ref($sFile) eq 'SCALAR') {
218 require IO::Scalar;
219 my $oIo = new IO::Scalar $sFile, O_WRONLY;
220 $rhInfo->{_FILEH_} = $oIo;
221 }
222 #1.1.1 $sFile is a IO::Scalar object
223 # Now handled as a filehandle ref below.
224
225 #1.2 $sFile is a IO::Handle object
226 elsif(UNIVERSAL::isa($sFile, 'IO::Handle')) {
227 # Not all filehandles support binmode() so try it in an eval.
228 eval{ binmode $sFile };
229 $rhInfo->{_FILEH_} = $sFile;
230 }
231 #1.3 $sFile is a simple filename string
232 elsif(!ref($sFile)) {
233 if($sFile ne '-') {
234 my $oIo = new IO::File;
235 $oIo->open(">$sFile") || return undef;
236 binmode($oIo);
237 $rhInfo->{_FILEH_} = $oIo;
238 }
239 else {
240 my $oIo = new IO::Handle;
241 $oIo->fdopen(fileno(STDOUT),"w") || return undef;
242 binmode($oIo);
243 $rhInfo->{_FILEH_} = $oIo;
244 }
245 }
246 #1.4 Assume that if $sFile is a ref then it is a valid filehandle
247 else {
248 # Not all filehandles support binmode() so try it in an eval.
249 eval{ binmode $sFile };
250 $rhInfo->{_FILEH_} = $sFile;
251 # Caller controls filehandle closing
252 $closeFile = 0;
253 }
254
255 my $iBlk = 0;
256 #1. Make an array of PPS (for Save)
257 my @aList=();
258 if($bNoAs) {
259 _savePpsSetPnt2([$oThis], \@aList, $rhInfo);
260 }
261 else {
262 _savePpsSetPnt([$oThis], \@aList, $rhInfo);
263 }
264 my ($iSBDcnt, $iBBcnt, $iPPScnt) = $oThis->_calcSize(\@aList, $rhInfo);
265
266 #2.Save Header
267 $oThis->_saveHeader($rhInfo, $iSBDcnt, $iBBcnt, $iPPScnt);
268
269 #3.Make Small Data string (write SBD)
270 my $sSmWk = $oThis->_makeSmallData(\@aList, $rhInfo);
271 $oThis->{Data} = $sSmWk; #Small Datas become RootEntry Data
272
273 #4. Write BB
274 my $iBBlk = $iSBDcnt;
275 $oThis->_saveBigData(\$iBBlk, \@aList, $rhInfo);
276
277 #5. Write PPS
278 $oThis->_savePps(\@aList, $rhInfo);
279
280 #6. Write BD and BDList and Adding Header informations
281 $oThis->_saveBbd($iSBDcnt, $iBBcnt, $iPPScnt, $rhInfo);
282
283 #7.Close File
284 return $rhInfo->{_FILEH_}->close if $closeFile;
285}
286#------------------------------------------------------------------------------
287# _calcSize (OLE::Storage_Lite::PPS)
288#------------------------------------------------------------------------------
289sub _calcSize($$)
290{
291 my($oThis, $raList, $rhInfo) = @_;
292
293#0. Calculate Basic Setting
294 my ($iSBDcnt, $iBBcnt, $iPPScnt) = (0,0,0);
295 my $iSmallLen = 0;
296 my $iSBcnt = 0;
297 foreach my $oPps (@$raList) {
298 if($oPps->{Type}==OLE::Storage_Lite::PpsType_File()) {
299 $oPps->{Size} = $oPps->_DataLen(); #Mod
300 if($oPps->{Size} < $rhInfo->{_SMALL_SIZE}) {
301 $iSBcnt += int($oPps->{Size} / $rhInfo->{_SMALL_BLOCK_SIZE})
302 + (($oPps->{Size} % $rhInfo->{_SMALL_BLOCK_SIZE})? 1: 0);
303 }
304 else {
305 $iBBcnt +=
306 (int($oPps->{Size}/ $rhInfo->{_BIG_BLOCK_SIZE}) +
307 (($oPps->{Size}% $rhInfo->{_BIG_BLOCK_SIZE})? 1: 0));
308 }
309 }
310 }
311 $iSmallLen = $iSBcnt * $rhInfo->{_SMALL_BLOCK_SIZE};
312 my $iSlCnt = int($rhInfo->{_BIG_BLOCK_SIZE}/ OLE::Storage_Lite::LongIntSize());
313 $iSBDcnt = int($iSBcnt / $iSlCnt)+ (($iSBcnt % $iSlCnt)? 1:0);
314 $iBBcnt += (int($iSmallLen/ $rhInfo->{_BIG_BLOCK_SIZE}) +
315 (( $iSmallLen% $rhInfo->{_BIG_BLOCK_SIZE})? 1: 0));
316 my $iCnt = scalar(@$raList);
317 my $iBdCnt = $rhInfo->{_BIG_BLOCK_SIZE}/OLE::Storage_Lite::PpsSize();
318 $iPPScnt = (int($iCnt/$iBdCnt) + (($iCnt % $iBdCnt)? 1: 0));
319 return ($iSBDcnt, $iBBcnt, $iPPScnt);
320}
321#------------------------------------------------------------------------------
322# _adjust2 (OLE::Storage_Lite::PPS::Root)
323#------------------------------------------------------------------------------
324sub _adjust2($) {
325 my($i2) = @_;
326 my $iWk;
327 $iWk = log($i2)/log(2);
328 return ($iWk > int($iWk))? int($iWk)+1:$iWk;
329}
330#------------------------------------------------------------------------------
331# _saveHeader (OLE::Storage_Lite::PPS::Root)
332#------------------------------------------------------------------------------
333sub _saveHeader($$$$$) {
334 my($oThis, $rhInfo, $iSBDcnt, $iBBcnt, $iPPScnt) = @_;
335 my $FILE = $rhInfo->{_FILEH_};
336
337#0. Calculate Basic Setting
338 my $iBlCnt = $rhInfo->{_BIG_BLOCK_SIZE} / OLE::Storage_Lite::LongIntSize();
339 my $i1stBdL = int(($rhInfo->{_BIG_BLOCK_SIZE} - 0x4C) / OLE::Storage_Lite::LongIntSize());
340 my $i1stBdMax = $i1stBdL * $iBlCnt - $i1stBdL;
341 my $iBdExL = 0;
342 my $iAll = $iBBcnt + $iPPScnt + $iSBDcnt;
343 my $iAllW = $iAll;
344 my $iBdCntW = int($iAllW / $iBlCnt) + (($iAllW % $iBlCnt)? 1: 0);
345 my $iBdCnt = int(($iAll + $iBdCntW) / $iBlCnt) + ((($iAllW+$iBdCntW) % $iBlCnt)? 1: 0);
346 my $i;
347
348 if ($iBdCnt > $i1stBdL) {
349 #0.1 Calculate BD count
350 $iBlCnt--; #the BlCnt is reduced in the count of the last sect is used for a pointer the next Bl
351 my $iBBleftover = $iAll - $i1stBdMax;
352
353 if ($iAll >$i1stBdMax) {
354 while(1) {
355 $iBdCnt = int(($iBBleftover) / $iBlCnt) + ((($iBBleftover) % $iBlCnt)? 1: 0);
356 $iBdExL = int(($iBdCnt) / $iBlCnt) + ((($iBdCnt) % $iBlCnt)? 1: 0);
357 $iBBleftover = $iBBleftover + $iBdExL;
358 last if($iBdCnt == (int(($iBBleftover) / $iBlCnt) + ((($iBBleftover) % $iBlCnt)? 1: 0)));
359 }
360 }
361 $iBdCnt += $i1stBdL;
362 #print "iBdCnt = $iBdCnt \n";
363 }
364#1.Save Header
365 print {$FILE} (
366 "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1"
367 , "\x00\x00\x00\x00" x 4
368 , pack("v", 0x3b)
36911µs , pack("v", 0x03)
# spent 1µs making 1 call to CORE::pack
3701300ns , pack("v", -2)
# spent 300ns making 1 call to CORE::pack
3711200ns , pack("v", 9)
# spent 200ns making 1 call to CORE::pack
3721100ns , pack("v", 6)
# spent 100ns making 1 call to CORE::pack
3731100ns , pack("v", 0)
# spent 100ns making 1 call to CORE::pack
3741100ns , "\x00\x00\x00\x00" x 2
# spent 100ns making 1 call to CORE::pack
375 , pack("V", $iBdCnt),
376 , pack("V", $iBBcnt+$iSBDcnt), #ROOT START
377 , pack("V", 0)
3781300ns , pack("V", 0x1000)
# spent 300ns making 1 call to CORE::pack
37912µs , pack("V", $iSBDcnt ? 0 : -2) #Small Block Depot
# spent 2µs making 1 call to CORE::pack
380 , pack("V", $iSBDcnt)
381 );
382#2. Extra BDList Start, Count
383 if($iAll <= $i1stBdMax) {
384 print {$FILE} (
3851300ns pack("V", -2), #Extra BDList Start
# spent 300ns making 1 call to CORE::pack
3861200ns pack("V", 0), #Extra BDList Count
# spent 200ns making 1 call to CORE::pack
387 );
388 }
389 else {
390 print {$FILE} (
391 pack("V", $iAll+$iBdCnt),
392 pack("V", $iBdExL),
393 );
394 }
395
396#3. BDList
397 for($i=0; $i<$i1stBdL and $i < $iBdCnt; $i++) {
398 print {$FILE} (pack("V", $iAll+$i));
399 }
4001400ns print {$FILE} ((pack("V", -1)) x($i1stBdL-$i)) if($i<$i1stBdL);
# spent 400ns making 1 call to CORE::pack
401}
402#------------------------------------------------------------------------------
403# _saveBigData (OLE::Storage_Lite::PPS)
404#------------------------------------------------------------------------------
405sub _saveBigData($$$$) {
406 my($oThis, $iStBlk, $raList, $rhInfo) = @_;
407 my $iRes = 0;
408 my $FILE = $rhInfo->{_FILEH_};
409
410#1.Write Big (ge 0x1000) Data into Block
411 foreach my $oPps (@$raList) {
412 if($oPps->{Type}!=OLE::Storage_Lite::PpsType_Dir()) {
413#print "PPS: $oPps DEF:", defined($oPps->{Data}), "\n";
414 $oPps->{Size} = $oPps->_DataLen(); #Mod
415 if(($oPps->{Size} >= $rhInfo->{_SMALL_SIZE}) ||
416 (($oPps->{Type} == OLE::Storage_Lite::PpsType_Root()) && defined($oPps->{Data}))) {
417 #1.1 Write Data
418 #Check for update
419 if($oPps->{_PPS_FILE}) {
420 my $sBuff;
421 my $iLen = 0;
422 $oPps->{_PPS_FILE}->seek(0, 0); #To The Top
423 while($oPps->{_PPS_FILE}->read($sBuff, 4096)) {
424 $iLen += length($sBuff);
425 print {$FILE} ($sBuff); #Check for update
426 }
427 }
428 else {
429 print {$FILE} ($oPps->{Data});
430 }
431 print {$FILE} (
432 "\x00" x
433 ($rhInfo->{_BIG_BLOCK_SIZE} -
434 ($oPps->{Size} % $rhInfo->{_BIG_BLOCK_SIZE}))
435 ) if ($oPps->{Size} % $rhInfo->{_BIG_BLOCK_SIZE});
436 #1.2 Set For PPS
437 $oPps->{StartBlock} = $$iStBlk;
438 $$iStBlk +=
439 (int($oPps->{Size}/ $rhInfo->{_BIG_BLOCK_SIZE}) +
440 (($oPps->{Size}% $rhInfo->{_BIG_BLOCK_SIZE})? 1: 0));
441 }
442 }
443 }
444}
445#------------------------------------------------------------------------------
446# _savePps (OLE::Storage_Lite::PPS::Root)
447#------------------------------------------------------------------------------
448sub _savePps($$$)
449{
450 my($oThis, $raList, $rhInfo) = @_;
451#0. Initial
452 my $FILE = $rhInfo->{_FILEH_};
453#2. Save PPS
454 foreach my $oItem (@$raList) {
455 $oItem->_savePpsWk($rhInfo);
456 }
457#3. Adjust for Block
458 my $iCnt = scalar(@$raList);
459 my $iBCnt = $rhInfo->{_BIG_BLOCK_SIZE} / $rhInfo->{_PPS_SIZE};
460 print {$FILE} ("\x00" x (($iBCnt - ($iCnt % $iBCnt)) * $rhInfo->{_PPS_SIZE}))
461 if($iCnt % $iBCnt);
462 return int($iCnt / $iBCnt) + (($iCnt % $iBCnt)? 1: 0);
463}
464#------------------------------------------------------------------------------
465# _savePpsSetPnt2 (OLE::Storage_Lite::PPS::Root)
466# For Test
467#------------------------------------------------------------------------------
468sub _savePpsSetPnt2($$$)
469{
470 my($aThis, $raList, $rhInfo) = @_;
471#1. make Array as Children-Relations
472#1.1 if No Children
473 if($#$aThis < 0) {
474 return 0xFFFFFFFF;
475 }
476 elsif($#$aThis == 0) {
477#1.2 Just Only one
478 push @$raList, $aThis->[0];
479 $aThis->[0]->{No} = $#$raList;
480 $aThis->[0]->{PrevPps} = 0xFFFFFFFF;
481 $aThis->[0]->{NextPps} = 0xFFFFFFFF;
482 $aThis->[0]->{DirPps} = _savePpsSetPnt2($aThis->[0]->{Child}, $raList, $rhInfo);
483 return $aThis->[0]->{No};
484 }
485 else {
486#1.3 Array
487 my $iCnt = $#$aThis + 1;
488#1.3.1 Define Center
489 my $iPos = 0; #int($iCnt/ 2); #$iCnt
490
491 my @aWk = @$aThis;
492 my @aPrev = ($#$aThis > 1)? splice(@aWk, 1, 1) : (); #$iPos);
493 my @aNext = splice(@aWk, 1); #, $iCnt - $iPos -1);
494 $aThis->[$iPos]->{PrevPps} = _savePpsSetPnt2(
495 \@aPrev, $raList, $rhInfo);
496 push @$raList, $aThis->[$iPos];
497 $aThis->[$iPos]->{No} = $#$raList;
498
499#1.3.2 Devide a array into Previous,Next
500 $aThis->[$iPos]->{NextPps} = _savePpsSetPnt2(
501 \@aNext, $raList, $rhInfo);
502 $aThis->[$iPos]->{DirPps} = _savePpsSetPnt2($aThis->[$iPos]->{Child}, $raList, $rhInfo);
503 return $aThis->[$iPos]->{No};
504 }
505}
506#------------------------------------------------------------------------------
507# _savePpsSetPnt2 (OLE::Storage_Lite::PPS::Root)
508# For Test
509#------------------------------------------------------------------------------
510sub _savePpsSetPnt2s($$$)
511{
512 my($aThis, $raList, $rhInfo) = @_;
513#1. make Array as Children-Relations
514#1.1 if No Children
515 if($#$aThis < 0) {
516 return 0xFFFFFFFF;
517 }
518 elsif($#$aThis == 0) {
519#1.2 Just Only one
520 push @$raList, $aThis->[0];
521 $aThis->[0]->{No} = $#$raList;
522 $aThis->[0]->{PrevPps} = 0xFFFFFFFF;
523 $aThis->[0]->{NextPps} = 0xFFFFFFFF;
524 $aThis->[0]->{DirPps} = _savePpsSetPnt2($aThis->[0]->{Child}, $raList, $rhInfo);
525 return $aThis->[0]->{No};
526 }
527 else {
528#1.3 Array
529 my $iCnt = $#$aThis + 1;
530#1.3.1 Define Center
531 my $iPos = 0; #int($iCnt/ 2); #$iCnt
532 push @$raList, $aThis->[$iPos];
533 $aThis->[$iPos]->{No} = $#$raList;
534 my @aWk = @$aThis;
535#1.3.2 Devide a array into Previous,Next
536 my @aPrev = splice(@aWk, 0, $iPos);
537 my @aNext = splice(@aWk, 1, $iCnt - $iPos -1);
538 $aThis->[$iPos]->{PrevPps} = _savePpsSetPnt2(
539 \@aPrev, $raList, $rhInfo);
540 $aThis->[$iPos]->{NextPps} = _savePpsSetPnt2(
541 \@aNext, $raList, $rhInfo);
542 $aThis->[$iPos]->{DirPps} = _savePpsSetPnt2($aThis->[$iPos]->{Child}, $raList, $rhInfo);
543 return $aThis->[$iPos]->{No};
544 }
545}
546#------------------------------------------------------------------------------
547# _savePpsSetPnt (OLE::Storage_Lite::PPS::Root)
548#------------------------------------------------------------------------------
549sub _savePpsSetPnt($$$)
550{
551 my($aThis, $raList, $rhInfo) = @_;
552#1. make Array as Children-Relations
553#1.1 if No Children
554 if($#$aThis < 0) {
555 return 0xFFFFFFFF;
556 }
557 elsif($#$aThis == 0) {
558#1.2 Just Only one
559 push @$raList, $aThis->[0];
560 $aThis->[0]->{No} = $#$raList;
561 $aThis->[0]->{PrevPps} = 0xFFFFFFFF;
562 $aThis->[0]->{NextPps} = 0xFFFFFFFF;
563 $aThis->[0]->{DirPps} = _savePpsSetPnt($aThis->[0]->{Child}, $raList, $rhInfo);
564 return $aThis->[0]->{No};
565 }
566 else {
567#1.3 Array
568 my $iCnt = $#$aThis + 1;
569#1.3.1 Define Center
570 my $iPos = int($iCnt/ 2); #$iCnt
571 push @$raList, $aThis->[$iPos];
572 $aThis->[$iPos]->{No} = $#$raList;
573 my @aWk = @$aThis;
574#1.3.2 Devide a array into Previous,Next
575 my @aPrev = splice(@aWk, 0, $iPos);
576 my @aNext = splice(@aWk, 1, $iCnt - $iPos -1);
577 $aThis->[$iPos]->{PrevPps} = _savePpsSetPnt(
578 \@aPrev, $raList, $rhInfo);
579 $aThis->[$iPos]->{NextPps} = _savePpsSetPnt(
580 \@aNext, $raList, $rhInfo);
581 $aThis->[$iPos]->{DirPps} = _savePpsSetPnt($aThis->[$iPos]->{Child}, $raList, $rhInfo);
582 return $aThis->[$iPos]->{No};
583 }
584}
585#------------------------------------------------------------------------------
586# _savePpsSetPnt (OLE::Storage_Lite::PPS::Root)
587#------------------------------------------------------------------------------
588sub _savePpsSetPnt1($$$)
589{
590 my($aThis, $raList, $rhInfo) = @_;
591#1. make Array as Children-Relations
592#1.1 if No Children
593 if($#$aThis < 0) {
594 return 0xFFFFFFFF;
595 }
596 elsif($#$aThis == 0) {
597#1.2 Just Only one
598 push @$raList, $aThis->[0];
599 $aThis->[0]->{No} = $#$raList;
600 $aThis->[0]->{PrevPps} = 0xFFFFFFFF;
601 $aThis->[0]->{NextPps} = 0xFFFFFFFF;
602 $aThis->[0]->{DirPps} = _savePpsSetPnt($aThis->[0]->{Child}, $raList, $rhInfo);
603 return $aThis->[0]->{No};
604 }
605 else {
606#1.3 Array
607 my $iCnt = $#$aThis + 1;
608#1.3.1 Define Center
609 my $iPos = int($iCnt/ 2); #$iCnt
610 push @$raList, $aThis->[$iPos];
611 $aThis->[$iPos]->{No} = $#$raList;
612 my @aWk = @$aThis;
613#1.3.2 Devide a array into Previous,Next
614 my @aPrev = splice(@aWk, 0, $iPos);
615 my @aNext = splice(@aWk, 1, $iCnt - $iPos -1);
616 $aThis->[$iPos]->{PrevPps} = _savePpsSetPnt(
617 \@aPrev, $raList, $rhInfo);
618 $aThis->[$iPos]->{NextPps} = _savePpsSetPnt(
619 \@aNext, $raList, $rhInfo);
620 $aThis->[$iPos]->{DirPps} = _savePpsSetPnt($aThis->[$iPos]->{Child}, $raList, $rhInfo);
621 return $aThis->[$iPos]->{No};
622 }
623}
624#------------------------------------------------------------------------------
625# _saveBbd (OLE::Storage_Lite)
626#------------------------------------------------------------------------------
627sub _saveBbd($$$$)
628{
629 my($oThis, $iSbdSize, $iBsize, $iPpsCnt, $rhInfo) = @_;
630 my $FILE = $rhInfo->{_FILEH_};
631#0. Calculate Basic Setting
632 my $iBbCnt = $rhInfo->{_BIG_BLOCK_SIZE} / OLE::Storage_Lite::LongIntSize();
633 my $iBlCnt = $iBbCnt - 1;
634 my $i1stBdL = int(($rhInfo->{_BIG_BLOCK_SIZE} - 0x4C) / OLE::Storage_Lite::LongIntSize());
635 my $i1stBdMax = $i1stBdL * $iBbCnt - $i1stBdL;
636 my $iBdExL = 0;
637 my $iAll = $iBsize + $iPpsCnt + $iSbdSize;
638 my $iAllW = $iAll;
639 my $iBdCntW = int($iAllW / $iBbCnt) + (($iAllW % $iBbCnt)? 1: 0);
640 my $iBdCnt = 0;
641 my $i;
642#0.1 Calculate BD count
643 my $iBBleftover = $iAll - $i1stBdMax;
644 if ($iAll >$i1stBdMax) {
645
646 while(1) {
647 $iBdCnt = int(($iBBleftover) / $iBlCnt) + ((($iBBleftover) % $iBlCnt)? 1: 0);
648 $iBdExL = int(($iBdCnt) / $iBlCnt) + ((($iBdCnt) % $iBlCnt)? 1: 0);
649 $iBBleftover = $iBBleftover + $iBdExL;
650 last if($iBdCnt == (int(($iBBleftover) / $iBlCnt) + ((($iBBleftover) % $iBlCnt)? 1: 0)));
651 }
652 }
653 $iAllW += $iBdExL;
654 $iBdCnt += $i1stBdL;
655 #print "iBdCnt = $iBdCnt \n";
656
657#1. Making BD
658#1.1 Set for SBD
659 if($iSbdSize > 0) {
660 for ($i = 0; $i<($iSbdSize-1); $i++) {
661 print {$FILE} (pack("V", $i+1));
662 }
66311µs print {$FILE} (pack("V", -2));
# spent 1µs making 1 call to CORE::pack
664 }
665#1.2 Set for B
666 for ($i = 0; $i<($iBsize-1); $i++) {
667 print {$FILE} (pack("V", $i+$iSbdSize+1));
668 }
6691700ns print {$FILE} (pack("V", -2));
# spent 700ns making 1 call to CORE::pack
670
671#1.3 Set for PPS
672 for ($i = 0; $i<($iPpsCnt-1); $i++) {
673 print {$FILE} (pack("V", $i+$iSbdSize+$iBsize+1));
674 }
6751300ns print {$FILE} (pack("V", -2));
# spent 300ns making 1 call to CORE::pack
676#1.4 Set for BBD itself ( 0xFFFFFFFD : BBD)
677 for($i=0; $i<$iBdCnt;$i++) {
6781200ns print {$FILE} (pack("V", 0xFFFFFFFD));
# spent 200ns making 1 call to CORE::pack
679 }
680#1.5 Set for ExtraBDList
681 for($i=0; $i<$iBdExL;$i++) {
6821200ns print {$FILE} (pack("V", 0xFFFFFFFC));
# spent 200ns making 1 call to CORE::pack
683 }
684#1.6 Adjust for Block
6851200ns print {$FILE} (pack("V", -1) x ($iBbCnt - (($iAllW + $iBdCnt) % $iBbCnt)))
# spent 200ns making 1 call to CORE::pack
686 if(($iAllW + $iBdCnt) % $iBbCnt);
687#2.Extra BDList
688 if($iBdCnt > $i1stBdL) {
689 my $iN=0;
690 my $iNb=0;
691 for($i=$i1stBdL;$i<$iBdCnt; $i++, $iN++) {
692 if($iN>=($iBbCnt-1)) {
693 $iN = 0;
694 $iNb++;
695 print {$FILE} (pack("V", $iAll+$iBdCnt+$iNb));
696 }
697 print {$FILE} (pack("V", $iBsize+$iSbdSize+$iPpsCnt+$i));
698 }
6991500ns print {$FILE} (pack("V", -1) x (($iBbCnt-1) - (($iBdCnt-$i1stBdL) % ($iBbCnt-1))))
# spent 500ns making 1 call to CORE::pack
700 if(($iBdCnt-$i1stBdL) % ($iBbCnt-1));
7011200ns print {$FILE} (pack("V", -2));
# spent 200ns making 1 call to CORE::pack
702 }
703}
704
705#//////////////////////////////////////////////////////////////////////////////
706# OLE::Storage_Lite::PPS::File Object
707#//////////////////////////////////////////////////////////////////////////////
708#==============================================================================
709# OLE::Storage_Lite::PPS::File
710#==============================================================================
711package OLE::Storage_Lite::PPS::File;
7121100nsrequire Exporter;
713220µs28µs
# spent 7µs (6+2) within OLE::Storage_Lite::PPS::File::BEGIN@713 which was called: # once (6µs+2µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 713
use strict;
# spent 7µs making 1 call to OLE::Storage_Lite::PPS::File::BEGIN@713 # spent 2µs making 1 call to strict::import
7142197µs238µs
# spent 21µs (4+17) within OLE::Storage_Lite::PPS::File::BEGIN@714 which was called: # once (4µs+17µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 714
use vars qw($VERSION @ISA);
# spent 21µs making 1 call to OLE::Storage_Lite::PPS::File::BEGIN@714 # spent 17µs making 1 call to vars::import
71513µs@ISA = qw(OLE::Storage_Lite::PPS Exporter);
7161100ns$VERSION = '0.22';
717#------------------------------------------------------------------------------
718# new (OLE::Storage_Lite::PPS::File)
719#------------------------------------------------------------------------------
720sub new ($$$) {
721 my($sClass, $sNm, $sData) = @_;
722 OLE::Storage_Lite::PPS::_new(
723 $sClass,
724 undef,
725 $sNm,
726 2,
727 undef,
728 undef,
729 undef,
730 undef,
731 undef,
732 undef,
733 undef,
734 $sData,
735 undef);
736}
737#------------------------------------------------------------------------------
738# newFile (OLE::Storage_Lite::PPS::File)
739#------------------------------------------------------------------------------
740sub newFile ($$;$) {
741 my($sClass, $sNm, $sFile) = @_;
742 my $oSelf =
743 OLE::Storage_Lite::PPS::_new(
744 $sClass,
745 undef,
746 $sNm,
747 2,
748 undef,
749 undef,
750 undef,
751 undef,
752 undef,
753 undef,
754 undef,
755 '',
756 undef);
757#
758 if((!defined($sFile)) or ($sFile eq '')) {
759 $oSelf->{_PPS_FILE} = IO::File->new_tmpfile();
760 }
761 elsif(UNIVERSAL::isa($sFile, 'IO::Handle')) {
762 $oSelf->{_PPS_FILE} = $sFile;
763 }
764 elsif(!ref($sFile)) {
765 #File Name
766 $oSelf->{_PPS_FILE} = new IO::File;
767 return undef unless($oSelf->{_PPS_FILE});
768 $oSelf->{_PPS_FILE}->open("$sFile", "r+") || return undef;
769 }
770 else {
771 return undef;
772 }
773 if($oSelf->{_PPS_FILE}) {
774 $oSelf->{_PPS_FILE}->seek(0, 2);
775 binmode($oSelf->{_PPS_FILE});
776 $oSelf->{_PPS_FILE}->autoflush(1);
777 }
778 return $oSelf;
779}
780#------------------------------------------------------------------------------
781# append (OLE::Storage_Lite::PPS::File)
782#------------------------------------------------------------------------------
783sub append ($$) {
784 my($oSelf, $sData) = @_;
785 if($oSelf->{_PPS_FILE}) {
786 print {$oSelf->{_PPS_FILE}} $sData;
787 }
788 else {
789 $oSelf->{Data} .= $sData;
790 }
791}
792
793#//////////////////////////////////////////////////////////////////////////////
794# OLE::Storage_Lite::PPS::Dir Object
795#//////////////////////////////////////////////////////////////////////////////
796#------------------------------------------------------------------------------
797# new (OLE::Storage_Lite::PPS::Dir)
798#------------------------------------------------------------------------------
799package OLE::Storage_Lite::PPS::Dir;
8001100nsrequire Exporter;
801222µs28µs
# spent 7µs (5+1) within OLE::Storage_Lite::PPS::Dir::BEGIN@801 which was called: # once (5µs+1µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 801
use strict;
# spent 7µs making 1 call to OLE::Storage_Lite::PPS::Dir::BEGIN@801 # spent 1µs making 1 call to strict::import
802258µs235µs
# spent 19µs (3+16) within OLE::Storage_Lite::PPS::Dir::BEGIN@802 which was called: # once (3µs+16µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 802
use vars qw($VERSION @ISA);
# spent 19µs making 1 call to OLE::Storage_Lite::PPS::Dir::BEGIN@802 # spent 16µs making 1 call to vars::import
80313µs@ISA = qw(OLE::Storage_Lite::PPS Exporter);
8041100ns$VERSION = '0.22';
805sub new ($$;$$$) {
806 my($sClass, $sName, $raTime1st, $raTime2nd, $raChild) = @_;
807 OLE::Storage_Lite::PPS::_new(
808 $sClass,
809 undef,
810 $sName,
811 1,
812 undef,
813 undef,
814 undef,
815 $raTime1st,
816 $raTime2nd,
817 undef,
818 undef,
819 undef,
820 $raChild);
821}
822#==============================================================================
823# OLE::Storage_Lite
824#==============================================================================
825package OLE::Storage_Lite;
8261100nsrequire Exporter;
827
828214µs27µs
# spent 6µs (4+1) within OLE::Storage_Lite::BEGIN@828 which was called: # once (4µs+1µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 828
use strict;
# spent 6µs making 1 call to OLE::Storage_Lite::BEGIN@828 # spent 1µs making 1 call to strict::import
829214µs250µs
# spent 27µs (3+24) within OLE::Storage_Lite::BEGIN@829 which was called: # once (3µs+24µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 829
use Carp;
# spent 27µs making 1 call to OLE::Storage_Lite::BEGIN@829 # spent 24µs making 1 call to Exporter::import
830215µs2127µs
# spent 66µs (4+62) within OLE::Storage_Lite::BEGIN@830 which was called: # once (4µs+62µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 830
use IO::File;
# spent 66µs making 1 call to OLE::Storage_Lite::BEGIN@830 # spent 62µs making 1 call to Exporter::import
831216µs231µs
# spent 24µs (7+17) within OLE::Storage_Lite::BEGIN@831 which was called: # once (7µs+17µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 831
use List::Util qw(first);
# spent 24µs making 1 call to OLE::Storage_Lite::BEGIN@831 # spent 6µs making 1 call to List::Util::import
832215µs240µs
# spent 22µs (4+18) within OLE::Storage_Lite::BEGIN@832 which was called: # once (4µs+18µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 832
use Time::Local 'timegm';
# spent 22µs making 1 call to OLE::Storage_Lite::BEGIN@832 # spent 18µs making 1 call to Exporter::import
833
834240µs239µs
# spent 21µs (3+18) within OLE::Storage_Lite::BEGIN@834 which was called: # once (3µs+18µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 834
use vars qw($VERSION @ISA @EXPORT);
# spent 21µs making 1 call to OLE::Storage_Lite::BEGIN@834 # spent 18µs making 1 call to vars::import
83512µs@ISA = qw(Exporter);
8361100ns$VERSION = '0.22';
837sub _getPpsSearch($$$$$;$);
838sub _getPpsTree($$$;$);
839#------------------------------------------------------------------------------
840# Const for OLE::Storage_Lite
841#------------------------------------------------------------------------------
842#0. Constants
843
# spent 76µs (7+69) within OLE::Storage_Lite::BEGIN@843 which was called: # once (7µs+69µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 853
use constant {
84416µs169µs PpsType_Root => 5,
# spent 69µs making 1 call to constant::import
845 PpsType_Dir => 1,
846 PpsType_File => 2,
847 DataSizeSmall => 0x1000,
848 LongIntSize => 4,
849 PpsSize => 0x80,
850 # 0xFFFFFFFC : BDList, 0xFFFFFFFD : BBD,
851 # 0xFFFFFFFE: End of Chain 0xFFFFFFFF : unused
852 NormalBlockEnd => 0xFFFFFFFC,
85311.55ms176µs};
# spent 76µs making 1 call to OLE::Storage_Lite::BEGIN@843
854#------------------------------------------------------------------------------
855# new OLE::Storage_Lite
856#------------------------------------------------------------------------------
857sub new($$) {
858 my($sClass, $sFile) = @_;
859 my $oThis = {
860 _FILE => $sFile,
861 };
862 bless $oThis;
863 return $oThis;
864}
865#------------------------------------------------------------------------------
866# getPpsTree: OLE::Storage_Lite
867#------------------------------------------------------------------------------
868sub getPpsTree($;$)
869{
870 my($oThis, $bData) = @_;
871#0.Init
872 my $rhInfo = _initParse($oThis->{_FILE});
873 return undef unless($rhInfo);
874#1. Get Data
875 my ($oPps) = _getPpsTree(0, $rhInfo, $bData);
876 close(IN);
877 return $oPps;
878}
879#------------------------------------------------------------------------------
880# getSearch: OLE::Storage_Lite
881#------------------------------------------------------------------------------
882sub getPpsSearch($$;$$)
883{
884 my($oThis, $raName, $bData, $iCase) = @_;
885#0.Init
886 my $rhInfo = _initParse($oThis->{_FILE});
887 return undef unless($rhInfo);
888#1. Get Data
889 my @aList = _getPpsSearch(0, $rhInfo, $raName, $bData, $iCase);
890 close(IN);
891 return @aList;
892}
893#------------------------------------------------------------------------------
894# getNthPps: OLE::Storage_Lite
895#------------------------------------------------------------------------------
896sub getNthPps($$;$)
897{
898 my($oThis, $iNo, $bData) = @_;
899#0.Init
900 my $rhInfo = _initParse($oThis->{_FILE});
901 return undef unless($rhInfo);
902#1. Get Data
903 my $oPps = _getNthPps($iNo, $rhInfo, $bData);
904 close IN;
905 return $oPps;
906}
907#------------------------------------------------------------------------------
908# _initParse: OLE::Storage_Lite
909#------------------------------------------------------------------------------
910sub _initParse($) {
911 my($sFile)=@_;
912 my $oIo;
913 #1. $sFile is Ref of scalar
914 if(ref($sFile) eq 'SCALAR') {
915 require IO::Scalar;
916 $oIo = new IO::Scalar;
917 $oIo->open($sFile);
918 }
919 #2. $sFile is a IO::Handle object
920 elsif(UNIVERSAL::isa($sFile, 'IO::Handle')) {
921 $oIo = $sFile;
922 binmode($oIo);
923 }
924 #3. $sFile is a simple filename string
925 elsif(!ref($sFile)) {
926 $oIo = new IO::File;
927 $oIo->open("<$sFile") || return undef;
928 binmode($oIo);
929 }
930 #4 Assume that if $sFile is a ref then it is a valid filehandle
931 else {
932 $oIo = $sFile;
933 # Not all filehandles support binmode() so try it in an eval.
934 eval{ binmode $oIo };
935 }
936 return _getHeaderInfo($oIo);
937}
938#------------------------------------------------------------------------------
939# _getPpsTree: OLE::Storage_Lite
940#------------------------------------------------------------------------------
941sub _getPpsTree($$$;$) {
942 my($iNo, $rhInfo, $bData, $raDone) = @_;
943 if(defined($raDone)) {
944 return () if(exists($raDone->{$iNo}));
945 }
946 else {
947 $raDone={};
948 }
949 $raDone->{$iNo} = undef;
950
951 my $iRootBlock = $rhInfo->{_ROOT_START} ;
952#1. Get Information about itself
953 my $oPps = _getNthPps($iNo, $rhInfo, $bData);
954#2. Child
955 if($oPps->{DirPps} != 0xFFFFFFFF) {
956 my @aChildL = _getPpsTree($oPps->{DirPps}, $rhInfo, $bData, $raDone);
957 $oPps->{Child} = \@aChildL;
958 }
959 else {
960 $oPps->{Child} = undef;
961 }
962#3. Previous,Next PPSs
963 my @aList = ();
964 push @aList, _getPpsTree($oPps->{PrevPps}, $rhInfo, $bData, $raDone)
965 if($oPps->{PrevPps} != 0xFFFFFFFF);
966 push @aList, $oPps;
967 push @aList, _getPpsTree($oPps->{NextPps}, $rhInfo, $bData, $raDone)
968 if($oPps->{NextPps} != 0xFFFFFFFF);
969 return @aList;
970}
971#------------------------------------------------------------------------------
972# _getPpsSearch: OLE::Storage_Lite
973#------------------------------------------------------------------------------
974sub _getPpsSearch($$$$$;$) {
975 my($iNo, $rhInfo, $raName, $bData, $iCase, $raDone) = @_;
976 my $iRootBlock = $rhInfo->{_ROOT_START} ;
977 my @aRes;
978#1. Check it self
979 if(defined($raDone)) {
980 return () if(exists($raDone->{$iNo}));
981 }
982 else {
983 $raDone={};
984 }
985 $raDone->{$iNo} = undef;
986 my $oPps = _getNthPps($iNo, $rhInfo, undef);
987# if(first {$_ eq $oPps->{Name}} @$raName) {
988 if(($iCase && (first {/^\Q$oPps->{Name}\E$/i} @$raName)) ||
989 (first {$_ eq $oPps->{Name}} @$raName)) {
990 $oPps = _getNthPps($iNo, $rhInfo, $bData) if ($bData);
991 @aRes = ($oPps);
992 }
993 else {
994 @aRes = ();
995 }
996#2. Check Child, Previous, Next PPSs
997 push @aRes, _getPpsSearch($oPps->{DirPps}, $rhInfo, $raName, $bData, $iCase, $raDone)
998 if($oPps->{DirPps} != 0xFFFFFFFF) ;
999 push @aRes, _getPpsSearch($oPps->{PrevPps}, $rhInfo, $raName, $bData, $iCase, $raDone)
1000 if($oPps->{PrevPps} != 0xFFFFFFFF );
1001 push @aRes, _getPpsSearch($oPps->{NextPps}, $rhInfo, $raName, $bData, $iCase, $raDone)
1002 if($oPps->{NextPps} != 0xFFFFFFFF);
1003 return @aRes;
1004}
1005#===================================================================
1006# Get Header Info (BASE Informain about that file)
1007#===================================================================
1008sub _getHeaderInfo($){
1009 my($FILE) = @_;
1010 my($iWk);
1011 my $rhInfo = {};
1012 $rhInfo->{_FILEH_} = $FILE;
1013 my $sWk;
1014#0. Check ID
1015 $rhInfo->{_FILEH_}->seek(0, 0);
1016 $rhInfo->{_FILEH_}->read($sWk, 8);
1017 return undef unless($sWk eq "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1");
1018#BIG BLOCK SIZE
1019 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x1E, 2, "v");
1020 return undef unless(defined($iWk));
1021 $rhInfo->{_BIG_BLOCK_SIZE} = 2 ** $iWk;
1022#SMALL BLOCK SIZE
1023 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x20, 2, "v");
1024 return undef unless(defined($iWk));
1025 $rhInfo->{_SMALL_BLOCK_SIZE} = 2 ** $iWk;
1026#BDB Count
1027 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x2C, 4, "V");
1028 return undef unless(defined($iWk));
1029 $rhInfo->{_BDB_COUNT} = $iWk;
1030#START BLOCK
1031 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x30, 4, "V");
1032 return undef unless(defined($iWk));
1033 $rhInfo->{_ROOT_START} = $iWk;
1034#MIN SIZE OF BB
1035# $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x38, 4, "V");
1036# return undef unless(defined($iWk));
1037# $rhInfo->{_MIN_SIZE_BB} = $iWk;
1038#SMALL BD START
1039 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x3C, 4, "V");
1040 return undef unless(defined($iWk));
1041 $rhInfo->{_SBD_START} = $iWk;
1042#SMALL BD COUNT
1043 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x40, 4, "V");
1044 return undef unless(defined($iWk));
1045 $rhInfo->{_SBD_COUNT} = $iWk;
1046#EXTRA BBD START
1047 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x44, 4, "V");
1048 return undef unless(defined($iWk));
1049 $rhInfo->{_EXTRA_BBD_START} = $iWk;
1050#EXTRA BD COUNT
1051 $iWk = _getInfoFromFile($rhInfo->{_FILEH_}, 0x48, 4, "V");
1052 return undef unless(defined($iWk));
1053 $rhInfo->{_EXTRA_BBD_COUNT} = $iWk;
1054#GET BBD INFO
1055 $rhInfo->{_BBD_INFO}= _getBbdInfo($rhInfo);
1056#GET ROOT PPS
1057 my $oRoot = _getNthPps(0, $rhInfo, undef);
1058 $rhInfo->{_SB_START} = $oRoot->{StartBlock};
1059 $rhInfo->{_SB_SIZE} = $oRoot->{Size};
1060# cache lookaheads for huge performance improvement in some cases
1061 my $iNextCount = keys(%{$rhInfo->{_BBD_INFO}});
1062 my $iBlockNo = $rhInfo->{_ROOT_START};
1063 my $iBigBlkSize=$rhInfo->{_BIG_BLOCK_SIZE};
1064 $rhInfo->{_BBD_ROOT_START}= [$iBlockNo];
1065 for(1..$iNextCount) {
1066 $iBlockNo = $rhInfo->{_BBD_INFO}->{$iBlockNo} // $iBlockNo+1;
1067 last unless $iBlockNo < OLE::Storage_Lite::NormalBlockEnd();
1068 $rhInfo->{_BBD_ROOT_START}->[$_] = $iBlockNo;
1069 }
1070 $iBlockNo = $rhInfo->{_SB_START};
1071 $rhInfo->{_BBD_SB_START}= [($iBlockNo+1)*$iBigBlkSize];
1072 for(1..$iNextCount) {
1073 $iBlockNo = $rhInfo->{_BBD_INFO}->{$iBlockNo} // $iBlockNo+1;
1074 last unless $iBlockNo < OLE::Storage_Lite::NormalBlockEnd();
1075 $rhInfo->{_BBD_SB_START}->[$_] = ($iBlockNo+1)*$iBigBlkSize;
1076 }
1077 $iBlockNo = $rhInfo->{_SBD_START};
1078 $rhInfo->{_BBD_SBD_START}= [($iBlockNo+1)*$iBigBlkSize];
1079 for(1..$iNextCount) {
1080 $iBlockNo = $rhInfo->{_BBD_INFO}->{$iBlockNo} // $iBlockNo+1;
1081 last unless $iBlockNo < OLE::Storage_Lite::NormalBlockEnd();
1082 $rhInfo->{_BBD_SBD_START}->[$_] = ($iBlockNo+1)*$iBigBlkSize;
1083 }
1084 my @aKeys= sort({$a<=>$b} keys(%{$rhInfo->{_BBD_INFO}}));
1085 $rhInfo->{_BBD_INFO_SORTED}= \@aKeys;
1086 return $rhInfo;
1087}
1088#------------------------------------------------------------------------------
1089# _getInfoFromFile
1090#------------------------------------------------------------------------------
1091sub _getInfoFromFile($$$$) {
1092 my($FILE, $iPos, $iLen, $sFmt) =@_;
1093 my($sWk);
1094 return undef unless($FILE);
1095 return undef if($FILE->seek($iPos, 0)==0);
1096 return undef if($FILE->read($sWk, $iLen)!=$iLen);
1097 return unpack($sFmt, $sWk);
1098}
1099#------------------------------------------------------------------------------
1100# _getBbdInfo
1101#------------------------------------------------------------------------------
1102sub _getBbdInfo($) {
1103 my($rhInfo) =@_;
1104 my @aBdList = ();
1105 my $iBdbCnt = $rhInfo->{_BDB_COUNT};
1106 my $iBigBlkSize = $rhInfo->{_BIG_BLOCK_SIZE};
1107 my $iGetCnt;
1108 my $sWk;
1109 my $i1stCnt = int(($iBigBlkSize - 0x4C) / OLE::Storage_Lite::LongIntSize());
1110 my $iBdlCnt = int($iBigBlkSize / OLE::Storage_Lite::LongIntSize()) - 1;
1111
1112#1. 1st BDlist
1113 $rhInfo->{_FILEH_}->seek(0x4C, 0);
1114 $iGetCnt = ($iBdbCnt < $i1stCnt)? $iBdbCnt: $i1stCnt;
1115 $rhInfo->{_FILEH_}->read($sWk, OLE::Storage_Lite::LongIntSize()*$iGetCnt);
1116 push @aBdList, unpack("V$iGetCnt", $sWk);
1117 $iBdbCnt -= $iGetCnt;
1118#2. Extra BDList
1119 my $iBlock = $rhInfo->{_EXTRA_BBD_START};
1120 while(($iBdbCnt> 0) && $iBlock < OLE::Storage_Lite::NormalBlockEnd()){
1121 $rhInfo->{_FILEH_}->seek(($iBlock+1)*$iBigBlkSize, 0);
1122 $iGetCnt= ($iBdbCnt < $iBdlCnt)? $iBdbCnt: $iBdlCnt;
1123 $rhInfo->{_FILEH_}->read($sWk, OLE::Storage_Lite::LongIntSize()*$iGetCnt);
1124 push @aBdList, unpack("V$iGetCnt", $sWk);
1125 $iBdbCnt -= $iGetCnt;
1126 $rhInfo->{_FILEH_}->read($sWk, OLE::Storage_Lite::LongIntSize());
1127 $iBlock = unpack("V", $sWk);
1128 }
1129#3.Get BDs
1130 my @aWk;
1131 my %hBd;
1132 my $iBlkNo = 0;
1133 my $iBdL;
1134 my $i;
1135 my $iBdCnt = int($iBigBlkSize / OLE::Storage_Lite::LongIntSize());
1136 foreach $iBdL (@aBdList) {
1137 $rhInfo->{_FILEH_}->seek(($iBdL+1)*$iBigBlkSize, 0);
1138 $rhInfo->{_FILEH_}->read($sWk, $iBigBlkSize);
1139 @aWk = unpack("V$iBdCnt", $sWk);
1140 for($i=0;$i<$iBdCnt;$i++, $iBlkNo++) {
1141 if($aWk[$i] != ($iBlkNo+1)){
1142 $hBd{$iBlkNo} = $aWk[$i];
1143 }
1144 }
1145 }
1146 return \%hBd;
1147}
1148#------------------------------------------------------------------------------
1149# getNthPps (OLE::Storage_Lite)
1150#------------------------------------------------------------------------------
1151sub _getNthPps($$$){
1152 my($iPos, $rhInfo, $bData) = @_;
1153 my($iPpsBlock, $iPpsPos);
1154 my $sWk;
1155 my $iBlock;
1156
1157 my $iBaseCnt = $rhInfo->{_BIG_BLOCK_SIZE} / OLE::Storage_Lite::PpsSize();
1158 $iPpsBlock = int($iPos / $iBaseCnt);
1159 $iPpsPos = $iPos % $iBaseCnt;
1160
1161 $iBlock = $rhInfo->{_BBD_ROOT_START}->[$iPpsBlock] //
1162 _getNthBlockNo($rhInfo->{_ROOT_START}, $iPpsBlock, $rhInfo);
1163 return undef unless(defined($iBlock));
1164
1165 $rhInfo->{_FILEH_}->seek(($iBlock+1)*$rhInfo->{_BIG_BLOCK_SIZE}+
1166 (OLE::Storage_Lite::PpsSize()*$iPpsPos), 0);
1167 $rhInfo->{_FILEH_}->read($sWk, OLE::Storage_Lite::PpsSize());
1168 return undef unless($sWk);
1169 my ($iNmSize, $iType, undef, $lPpsPrev, $lPpsNext, $lDirPps) =
1170 unpack("vCCVVV", substr($sWk, 0x40, 2+2+3*OLE::Storage_Lite::LongIntSize()));
1171 $iNmSize = ($iNmSize > 2)? $iNmSize - 2 : $iNmSize;
1172 my $sNm= substr($sWk, 0, $iNmSize);
1173 my @raTime1st =
1174 (($iType == OLE::Storage_Lite::PpsType_Root()) or ($iType == OLE::Storage_Lite::PpsType_Dir()))?
1175 OLEDate2Local(substr($sWk, 0x64, 8)) : undef ,
1176 my @raTime2nd =
1177 (($iType == OLE::Storage_Lite::PpsType_Root()) or ($iType == OLE::Storage_Lite::PpsType_Dir()))?
1178 OLEDate2Local(substr($sWk, 0x6C, 8)) : undef,
1179 my($iStart, $iSize) = unpack("VV", substr($sWk, 0x74, 8));
1180 if($bData) {
1181 my $sData = _getData($iType, $iStart, $iSize, $rhInfo);
1182 return OLE::Storage_Lite::PPS->new(
1183 $iPos, $sNm, $iType, $lPpsPrev, $lPpsNext, $lDirPps,
1184 \@raTime1st, \@raTime2nd, $iStart, $iSize, $sData, undef);
1185 }
1186 else {
1187 return OLE::Storage_Lite::PPS->new(
1188 $iPos, $sNm, $iType, $lPpsPrev, $lPpsNext, $lDirPps,
1189 \@raTime1st, \@raTime2nd, $iStart, $iSize, undef, undef);
1190 }
1191}
1192#------------------------------------------------------------------------------
1193# _getNthBlockNo (OLE::Storage_Lite)
1194#------------------------------------------------------------------------------
1195sub _getNthBlockNo($$$){
1196 my($iBlockNo, $iNth, $rhInfo) = @_;
1197 my $rhBbdInfo = $rhInfo->{_BBD_INFO};
1198 for(1..$iNth) {
1199 $iBlockNo = $rhBbdInfo->{$iBlockNo} // $iBlockNo+1;
1200 return undef unless $iBlockNo < OLE::Storage_Lite::NormalBlockEnd();
1201 }
1202 return $iBlockNo;
1203}
1204#------------------------------------------------------------------------------
1205# _getData (OLE::Storage_Lite)
1206#------------------------------------------------------------------------------
1207sub _getData($$$$)
1208{
1209 my($iType, $iBlock, $iSize, $rhInfo) = @_;
1210 if ($iType == OLE::Storage_Lite::PpsType_File()) {
1211 if($iSize < OLE::Storage_Lite::DataSizeSmall()) {
1212 return _getSmallData($iBlock, $iSize, $rhInfo);
1213 }
1214 else {
1215 return _getBigData($iBlock, $iSize, $rhInfo);
1216 }
1217 }
1218 elsif($iType == OLE::Storage_Lite::PpsType_Root()) { #Root
1219 return _getBigData($iBlock, $iSize, $rhInfo);
1220 }
1221 elsif($iType == OLE::Storage_Lite::PpsType_Dir()) { # Directory
1222 return undef;
1223 }
1224}
1225#------------------------------------------------------------------------------
1226# _getBigData (OLE::Storage_Lite)
1227#------------------------------------------------------------------------------
1228sub _getBigData($$$)
1229{
1230 my($iBlock, $iSize, $rhInfo) = @_;
1231 my($iRest, $sWk, $sRes);
1232
1233 return '' unless($iBlock < OLE::Storage_Lite::NormalBlockEnd());
1234 $iRest = $iSize;
1235 my($i, $iGetSize, $iNext);
1236 $sRes = '';
1237 my $aKeys= $rhInfo->{_BBD_INFO_SORTED};
1238
1239 while ($iRest > 0) {
1240 # lower_bound binary search
1241 my $iCount = @$aKeys;
1242 my $iFirst = 0;
1243 while ($iCount > 0) {
1244 my $iStep = $iCount >> 1;
1245 my $iIndex = $iFirst + $iStep;
1246 if ($$aKeys[$iIndex] < $iBlock) {
1247 $iFirst = ++$iIndex;
1248 $iCount -= $iStep + 1;
1249 } else {
1250 $iCount = $iStep;
1251 }
1252 }
1253 my $iNKey = $$aKeys[$iFirst];
1254 $i = $iNKey - $iBlock;
1255 croak "Invalid block read" if ($i < 0);
1256 $iNext = $rhInfo->{_BBD_INFO}{$iNKey};
1257 $rhInfo->{_FILEH_}->seek(($iBlock+1)*$rhInfo->{_BIG_BLOCK_SIZE}, 0);
1258 my $iGetSize = ($rhInfo->{_BIG_BLOCK_SIZE} * ($i+1));
1259 $iGetSize = $iRest if($iRest < $iGetSize);
1260 $rhInfo->{_FILEH_}->read( $sWk, $iGetSize);
1261 $sRes .= $sWk;
1262 $iRest -= $iGetSize;
1263 $iBlock= $iNext;
1264 }
1265 return $sRes;
1266}
1267#------------------------------------------------------------------------------
1268# _getSmallData (OLE::Storage_Lite)
1269#------------------------------------------------------------------------------
1270sub _getSmallData($$$)
1271{
1272 my($iSmBlock, $iSize, $rhInfo) = @_;
1273 my($sRes, $sWk);
1274 my($iBigBlkSize, $iSmallBlkSize, $rhFd) =
1275 @$rhInfo{qw(_BIG_BLOCK_SIZE _SMALL_BLOCK_SIZE _FILEH_)};
1276
1277 $sRes = '';
1278 while ($iSize > 0) {
1279 my $iBaseCnt = $iBigBlkSize / $iSmallBlkSize;
1280 my $iNth = int($iSmBlock/$iBaseCnt);
1281 my $iPos = $iSmBlock % $iBaseCnt;
1282 my $iBlk = $rhInfo->{_BBD_SB_START}->[$iNth] //
1283 ((_getNthBlockNo($rhInfo->{_SB_START}, $iNth, $rhInfo)+1)*$iBigBlkSize);
1284
1285 $rhFd->seek($iBlk+($iPos*$iSmallBlkSize), 0);
1286 if ($iSize > $iSmallBlkSize) {
1287 $rhFd->read($sWk, $iSmallBlkSize);
1288 $sRes .= $sWk;
1289 $iSize -= $iSmallBlkSize;
1290 } else {
1291 $rhFd->read($sWk, $iSize);
1292 $sRes .= $sWk;
1293 last;
1294 }
1295 # get next small block
1296 $iBaseCnt = $iBigBlkSize / OLE::Storage_Lite::LongIntSize();
1297 $iNth = int($iSmBlock/$iBaseCnt);
1298 $iPos = $iSmBlock % $iBaseCnt;
1299 $iBlk = $rhInfo->{_BBD_SBD_START}->[$iNth] //
1300 ((_getNthBlockNo($rhInfo->{_SBD_START}, $iNth, $rhInfo)+1)*$iBigBlkSize);
1301 $rhFd->seek($iBlk+($iPos*OLE::Storage_Lite::LongIntSize()), 0);
1302 $rhFd->read($sWk, OLE::Storage_Lite::LongIntSize());
1303 $iSmBlock = unpack("V", $sWk);
1304 }
1305 return $sRes;
1306}
1307#------------------------------------------------------------------------------
1308# Asc2Ucs: OLE::Storage_Lite
1309#------------------------------------------------------------------------------
1310sub Asc2Ucs($)
1311{
1312 return join("\x00", split //, $_[0]) . "\x00";
1313}
1314#------------------------------------------------------------------------------
1315# Ucs2Asc: OLE::Storage_Lite
1316#------------------------------------------------------------------------------
1317sub Ucs2Asc($)
1318{
1319 return pack('c*', unpack('v*', $_[0]));
1320}
1321
1322#------------------------------------------------------------------------------
1323# OLEDate2Local()
1324#
1325# Convert from a Window FILETIME structure to a localtime array. FILETIME is
1326# a 64-bit value representing the number of 100-nanosecond intervals since
1327# January 1 1601.
1328#
1329# We first convert the FILETIME to seconds and then subtract the difference
1330# between the 1601 epoch and the 1970 Unix epoch.
1331#
1332sub OLEDate2Local {
1333
1334 my $oletime = shift;
1335
1336 # Unpack the FILETIME into high and low longs.
1337 my ( $lo, $hi ) = unpack 'V2', $oletime;
1338
1339 # Convert the longs to a double.
1340 my $nanoseconds = $hi * 2**32 + $lo;
1341
1342 # Convert the 100 nanosecond units into seconds.
1343 my $time = $nanoseconds / 1e7;
1344
1345 # Subtract the number of seconds between the 1601 and 1970 epochs.
1346 $time -= 11644473600;
1347
1348 # Convert to a localtime (actually gmtime) structure.
1349 my @localtime = gmtime($time);
1350
1351 return @localtime;
1352}
1353
1354#------------------------------------------------------------------------------
1355# LocalDate2OLE()
1356#
1357# Convert from a localtime array to a Window FILETIME structure. FILETIME is
1358# a 64-bit value representing the number of 100-nanosecond intervals since
1359# January 1 1601.
1360#
1361# We first convert the localtime (actually gmtime) to seconds and then add the
1362# difference between the 1601 epoch and the 1970 Unix epoch. We convert that to
1363# 100 nanosecond units, divide it into high and low longs and return it as a
1364# packed 64bit structure.
1365#
1366sub LocalDate2OLE {
1367
1368 my $localtime = shift;
1369
1370 return "\x00" x 8 unless $localtime;
1371
1372 # Convert from localtime (actually gmtime) to seconds.
1373 my @localtimecopy = @{$localtime};
1374 $localtimecopy[5] += 1900 unless $localtimecopy[5] > 99;
1375 my $time = timegm( @localtimecopy );
1376
1377 # Add the number of seconds between the 1601 and 1970 epochs.
1378 $time += 11644473600;
1379
1380 # The FILETIME seconds are in units of 100 nanoseconds.
1381 my $nanoseconds = $time * 1E7;
1382
1383262µs21.88ms
# spent 945µs (6+939) within OLE::Storage_Lite::BEGIN@1383 which was called: # once (6µs+939µs) by Spreadsheet::ParseExcel::BEGIN@21 at line 1383
use POSIX 'fmod';
# spent 945µs making 1 call to OLE::Storage_Lite::BEGIN@1383 # spent 939µs making 1 call to POSIX::import
1384
1385 # Pack the total nanoseconds into 64 bits...
1386 my $hi = int( $nanoseconds / 2**32 );
1387 my $lo = fmod($nanoseconds, 2**32);
1388
1389 my $oletime = pack "VV", $lo, $hi;
1390
1391 return $oletime;
1392}
1393
139414µs1;
1395__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Hub-Interceptor-Terminator-pm-39-line.html0000644000175000017500000004063714576335353026765 0ustar michamicha Profile of Test2/Hub/Interceptor/Terminator.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Hub/Interceptor/Terminator.pm
StatementsExecuted 6 statements in 51µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsTest2::Hub::Interceptor::Terminator::::BEGIN@2Test2::Hub::Interceptor::Terminator::BEGIN@2
1113µs18µsTest2::Hub::Interceptor::Terminator::::BEGIN@3Test2::Hub::Interceptor::Terminator::BEGIN@3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Hub::Interceptor::Terminator;
2227µs212µs
# spent 11µs (10+1) within Test2::Hub::Interceptor::Terminator::BEGIN@2 which was called: # once (10µs+1µs) by Test2::Hub::Interceptor::BEGIN@8 at line 2
use strict;
# spent 11µs making 1 call to Test2::Hub::Interceptor::Terminator::BEGIN@2 # spent 1µs making 1 call to strict::import
3223µs234µs
# spent 18µs (3+15) within Test2::Hub::Interceptor::Terminator::BEGIN@3 which was called: # once (3µs+15µs) by Test2::Hub::Interceptor::BEGIN@8 at line 3
use warnings;
# spent 18µs making 1 call to Test2::Hub::Interceptor::Terminator::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
812µs1;
9
10__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-pm-41-line.html0000644000175000017500000023723414576335353022704 0ustar michamicha Profile of Test2/Event.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event.pm
StatementsExecuted 65 statements in 1.89ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111274µs450µsTest2::Event::::BEGIN@21Test2::Event::BEGIN@21
111265µs835µsTest2::Event::::BEGIN@20Test2::Event::BEGIN@20
111225µs340µsTest2::Event::::BEGIN@22Test2::Event::BEGIN@22
111140µs252µsTest2::Event::::BEGIN@17Test2::Event::BEGIN@17
111138µs274µsTest2::Event::::BEGIN@24Test2::Event::BEGIN@24
111137µs224µsTest2::Event::::BEGIN@18Test2::Event::BEGIN@18
111134µs228µsTest2::Event::::BEGIN@14Test2::Event::BEGIN@14
111132µs230µsTest2::Event::::BEGIN@19Test2::Event::BEGIN@19
111128µs206µsTest2::Event::::BEGIN@15Test2::Event::BEGIN@15
111124µs208µsTest2::Event::::BEGIN@16Test2::Event::BEGIN@16
11119µs24µsTest2::Event::::common_facet_dataTest2::Event::common_facet_data
11110µs12µsTest2::Event::::BEGIN@2Test2::Event::BEGIN@2
3118µs14µsTest2::Event::::eidTest2::Event::eid
3116µs6µsTest2::Event::::add_hubTest2::Event::add_hub
1115µs71µsTest2::Event::::BEGIN@10Test2::Event::BEGIN@10
1115µs38µsTest2::Event::::BEGIN@7Test2::Event::BEGIN@7
1114µs24µsTest2::Event::::BEGIN@11Test2::Event::BEGIN@11
2224µs4µsTest2::Event::::meta_facet_dataTest2::Event::meta_facet_data
1113µs16µsTest2::Event::::BEGIN@12Test2::Event::BEGIN@12
1113µs17µsTest2::Event::::BEGIN@8Test2::Event::BEGIN@8
1113µs19µsTest2::Event::::BEGIN@3Test2::Event::BEGIN@3
1112µs2µsTest2::Event::::BEGIN@23Test2::Event::BEGIN@23
0000s0sTest2::Event::::FACET_TYPESTest2::Event::FACET_TYPES
0000s0sTest2::Event::::add_amnestyTest2::Event::add_amnesty
0000s0sTest2::Event::::callbackTest2::Event::callback
0000s0sTest2::Event::::causes_failTest2::Event::causes_fail
0000s0sTest2::Event::::diagnosticsTest2::Event::diagnostics
0000s0sTest2::Event::::facet_dataTest2::Event::facet_data
0000s0sTest2::Event::::facetsTest2::Event::facets
0000s0sTest2::Event::::globalTest2::Event::global
0000s0sTest2::Event::::in_subtestTest2::Event::in_subtest
0000s0sTest2::Event::::increments_countTest2::Event::increments_count
0000s0sTest2::Event::::load_facetTest2::Event::load_facet
0000s0sTest2::Event::::nestedTest2::Event::nested
0000s0sTest2::Event::::no_displayTest2::Event::no_display
0000s0sTest2::Event::::relatedTest2::Event::related
0000s0sTest2::Event::::sets_planTest2::Event::sets_plan
0000s0sTest2::Event::::subtest_idTest2::Event::subtest_id
0000s0sTest2::Event::::summaryTest2::Event::summary
0000s0sTest2::Event::::terminateTest2::Event::terminate
0000s0sTest2::Event::::validate_facet_dataTest2::Event::validate_facet_data
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event;
2219µs214µs
# spent 12µs (10+2) within Test2::Event::BEGIN@2 which was called: # once (10µs+2µs) by Test2::Event::Ok::BEGIN@8 at line 2
use strict;
# spent 12µs making 1 call to Test2::Event::BEGIN@2 # spent 2µs making 1 call to strict::import
3228µs235µs
# spent 19µs (3+16) within Test2::Event::BEGIN@3 which was called: # once (3µs+16µs) by Test2::Event::Ok::BEGIN@8 at line 3
use warnings;
# spent 19µs making 1 call to Test2::Event::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7217µs271µs
# spent 38µs (5+33) within Test2::Event::BEGIN@7 which was called: # once (5µs+33µs) by Test2::Event::Ok::BEGIN@8 at line 7
use Scalar::Util qw/blessed reftype/;
# spent 38µs making 1 call to Test2::Event::BEGIN@7 # spent 33µs making 1 call to Exporter::import
8220µs232µs
# spent 17µs (3+14) within Test2::Event::BEGIN@8 which was called: # once (3µs+14µs) by Test2::Event::Ok::BEGIN@8 at line 8
use Carp qw/croak/;
# spent 17µs making 1 call to Test2::Event::BEGIN@8 # spent 14µs making 1 call to Exporter::import
9
10220µs2138µs
# spent 71µs (5+66) within Test2::Event::BEGIN@10 which was called: # once (5µs+66µs) by Test2::Event::Ok::BEGIN@8 at line 10
use Test2::Util::HashBase qw/trace -amnesty uuid -_eid -hubs/;
# spent 71µs making 1 call to Test2::Event::BEGIN@10 # spent 66µs making 1 call to Test2::Util::HashBase::import
11217µs243µs
# spent 24µs (4+20) within Test2::Event::BEGIN@11 which was called: # once (4µs+20µs) by Test2::Event::Ok::BEGIN@8 at line 11
use Test2::Util::ExternalMeta qw/meta get_meta set_meta delete_meta/;
# spent 24µs making 1 call to Test2::Event::BEGIN@11 # spent 20µs making 1 call to Exporter::import
12217µs228µs
# spent 16µs (3+12) within Test2::Event::BEGIN@12 which was called: # once (3µs+12µs) by Test2::Event::Ok::BEGIN@8 at line 12
use Test2::Util qw/pkg_to_file gen_uid/;
# spent 16µs making 1 call to Test2::Event::BEGIN@12 # spent 12µs making 1 call to Exporter::import
13
14278µs1228µs
# spent 228µs (134+94) within Test2::Event::BEGIN@14 which was called: # once (134µs+94µs) by Test2::Event::Ok::BEGIN@8 at line 14
use Test2::EventFacet::About();
# spent 228µs making 1 call to Test2::Event::BEGIN@14
15263µs1206µs
# spent 206µs (128+78) within Test2::Event::BEGIN@15 which was called: # once (128µs+78µs) by Test2::Event::Ok::BEGIN@8 at line 15
use Test2::EventFacet::Amnesty();
# spent 206µs making 1 call to Test2::Event::BEGIN@15
16262µs1208µs
# spent 208µs (124+84) within Test2::Event::BEGIN@16 which was called: # once (124µs+84µs) by Test2::Event::Ok::BEGIN@8 at line 16
use Test2::EventFacet::Assert();
# spent 208µs making 1 call to Test2::Event::BEGIN@16
17271µs1252µs
# spent 252µs (140+112) within Test2::Event::BEGIN@17 which was called: # once (140µs+112µs) by Test2::Event::Ok::BEGIN@8 at line 17
use Test2::EventFacet::Control();
# spent 252µs making 1 call to Test2::Event::BEGIN@17
18267µs1224µs
# spent 224µs (137+87) within Test2::Event::BEGIN@18 which was called: # once (137µs+87µs) by Test2::Event::Ok::BEGIN@8 at line 18
use Test2::EventFacet::Error();
# spent 224µs making 1 call to Test2::Event::BEGIN@18
19271µs1230µs
# spent 230µs (132+98) within Test2::Event::BEGIN@19 which was called: # once (132µs+98µs) by Test2::Event::Ok::BEGIN@8 at line 19
use Test2::EventFacet::Info();
# spent 230µs making 1 call to Test2::Event::BEGIN@19
20271µs1835µs
# spent 835µs (265+570) within Test2::Event::BEGIN@20 which was called: # once (265µs+570µs) by Test2::Event::Ok::BEGIN@8 at line 20
use Test2::EventFacet::Meta();
# spent 835µs making 1 call to Test2::Event::BEGIN@20
212113µs1450µs
# spent 450µs (274+176) within Test2::Event::BEGIN@21 which was called: # once (274µs+176µs) by Test2::Event::Ok::BEGIN@8 at line 21
use Test2::EventFacet::Parent();
# spent 450µs making 1 call to Test2::Event::BEGIN@21
222158µs1340µs
# spent 340µs (225+115) within Test2::Event::BEGIN@22 which was called: # once (225µs+115µs) by Test2::Event::Ok::BEGIN@8 at line 22
use Test2::EventFacet::Plan();
# spent 340µs making 1 call to Test2::Event::BEGIN@22
23210µs12µs
# spent 2µs within Test2::Event::BEGIN@23 which was called: # once (2µs+0s) by Test2::Event::Ok::BEGIN@8 at line 23
use Test2::EventFacet::Trace();
# spent 2µs making 1 call to Test2::Event::BEGIN@23
242940µs1274µs
# spent 274µs (138+136) within Test2::Event::BEGIN@24 which was called: # once (138µs+136µs) by Test2::Event::Ok::BEGIN@8 at line 24
use Test2::EventFacet::Hub();
# spent 274µs making 1 call to Test2::Event::BEGIN@24
25
26# Legacy tools will expect this to be loaded now
271600nsrequire Test2::Util::Trace;
28
2913µsmy %LOADED_FACETS = (
30 'about' => 'Test2::EventFacet::About',
31 'amnesty' => 'Test2::EventFacet::Amnesty',
32 'assert' => 'Test2::EventFacet::Assert',
33 'control' => 'Test2::EventFacet::Control',
34 'errors' => 'Test2::EventFacet::Error',
35 'info' => 'Test2::EventFacet::Info',
36 'meta' => 'Test2::EventFacet::Meta',
37 'parent' => 'Test2::EventFacet::Parent',
38 'plan' => 'Test2::EventFacet::Plan',
39 'trace' => 'Test2::EventFacet::Trace',
40 'hubs' => 'Test2::EventFacet::Hub',
41);
42
43sub FACET_TYPES { sort values %LOADED_FACETS }
44
45sub load_facet {
46 my $class = shift;
47 my ($facet) = @_;
48
49 return $LOADED_FACETS{$facet} if exists $LOADED_FACETS{$facet};
50
51 my @check = ($facet);
52 if ('s' eq substr($facet, -1, 1)) {
53 push @check => substr($facet, 0, -1);
54 }
55 else {
56 push @check => $facet . 's';
57 }
58
59 my $found;
60 for my $check (@check) {
61 my $mod = "Test2::EventFacet::" . ucfirst($facet);
62 my $file = pkg_to_file($mod);
63 next unless eval { require $file; 1 };
64 $found = $mod;
65 last;
66 }
67
68 return undef unless $found;
69 $LOADED_FACETS{$facet} = $found;
70}
71
72sub causes_fail { 0 }
73sub increments_count { 0 }
74sub diagnostics { 0 }
75sub no_display { 0 }
76sub subtest_id { undef }
77
78sub callback { }
79
80sub terminate { () }
81sub global { () }
82sub sets_plan { () }
83
84sub summary { ref($_[0]) }
85
86sub related {
87 my $self = shift;
88 my ($event) = @_;
89
90 my $tracea = $self->trace or return undef;
91 my $traceb = $event->trace or return undef;
92
93 my $uuida = $tracea->uuid;
94 my $uuidb = $traceb->uuid;
95 if ($uuida && $uuidb) {
96 return 1 if $uuida eq $uuidb;
97 return 0;
98 }
99
100 my $siga = $tracea->signature or return undef;
101 my $sigb = $traceb->signature or return undef;
102
103 return 1 if $siga eq $sigb;
104 return 0;
105}
106
107
# spent 6µs within Test2::Event::add_hub which was called 3 times, avg 2µs/call: # 3 times (6µs+0s) by Test2::Hub::send at line 293 of Test2/Hub.pm, avg 2µs/call
sub add_hub {
1083400ns my $self = shift;
10937µs unshift @{$self->{+HUBS}} => @_;
110}
111
112sub add_amnesty {
113 my $self = shift;
114
115 for my $am (@_) {
116 $am = {%$am} if ref($am) ne 'ARRAY';
117 $am = Test2::EventFacet::Amnesty->new($am);
118
119 push @{$self->{+AMNESTY}} => $am;
120 }
121}
122
12337µs36µs
# spent 14µs (8+6) within Test2::Event::eid which was called 3 times, avg 5µs/call: # 3 times (8µs+6µs) by Test2::Hub::send at line 280 of Test2/Hub.pm, avg 5µs/call
sub eid { $_[0]->{+_EID} ||= gen_uid() }
# spent 6µs making 3 calls to Test2::Util::gen_uid, avg 2µs/call
124
125
# spent 24µs (19+5) within Test2::Event::common_facet_data which was called: # once (19µs+5µs) by Test2::Event::Plan::facet_data at line 74 of Test2/Event/Plan.pm
sub common_facet_data {
1261200ns my $self = shift;
127
1281200ns my %out;
129
13012µs $out{about} = {package => ref($self) || undef};
13112µs1800ns if (my $uuid = $self->uuid) {
132 $out{about}->{uuid} = $uuid;
133 }
134
1351600ns $out{about}->{eid} = $self->{+_EID} || $self->eid;
136
13714µs1800ns if (my $trace = $self->trace) {
138 $out{trace} = { %$trace };
139 }
140
14112µs1700ns if (my $hubs = $self->hubs) {
142 $out{hubs} = $hubs;
143 }
144
145 $out{amnesty} = [map {{ %{$_} }} @{$self->{+AMNESTY}}]
1461300ns if $self->{+AMNESTY};
147
14813µs13µs if (my $meta = $self->meta_facet_data) {
# spent 3µs making 1 call to Test2::Event::meta_facet_data
149 $out{meta} = $meta;
150 }
151
15212µs return \%out;
153}
154
155
# spent 4µs within Test2::Event::meta_facet_data which was called 2 times, avg 2µs/call: # once (3µs+0s) by Test2::Event::common_facet_data at line 148 # once (1µs+0s) by Test2::Event::V2::facet_data at line 69 of Test2/Event/V2.pm
sub meta_facet_data {
1562300ns my $self = shift;
157
1582700ns my $key = Test2::Util::ExternalMeta::META_KEY();
159
16024µs my $hash = $self->{$key} or return undef;
161 return {%$hash};
162}
163
164sub facet_data {
165 my $self = shift;
166
167 my $out = $self->common_facet_data;
168
169 $out->{about}->{details} = $self->summary || undef;
170 $out->{about}->{no_display} = $self->no_display || undef;
171
172 # Might be undef, we want to preserve that
173 my $terminate = $self->terminate;
174 $out->{control} = {
175 global => $self->global || 0,
176 terminate => $terminate,
177 has_callback => $self->can('callback') == \&callback ? 0 : 1,
178 };
179
180 $out->{assert} = {
181 no_debug => 1, # Legacy behavior
182 pass => $self->causes_fail ? 0 : 1,
183 details => $self->summary,
184 } if $self->increments_count;
185
186 $out->{parent} = {hid => $self->subtest_id} if $self->subtest_id;
187
188 if (my @plan = $self->sets_plan) {
189 $out->{plan} = {};
190
191 $out->{plan}->{count} = $plan[0] if defined $plan[0];
192 $out->{plan}->{details} = $plan[2] if defined $plan[2];
193
194 if ($plan[1]) {
195 $out->{plan}->{skip} = 1 if $plan[1] eq 'SKIP';
196 $out->{plan}->{none} = 1 if $plan[1] eq 'NO PLAN';
197 }
198
199 $out->{control}->{terminate} ||= 0 if $out->{plan}->{skip};
200 }
201
202 if ($self->causes_fail && !$out->{assert}) {
203 $out->{errors} = [
204 {
205 tag => 'FAIL',
206 fail => 1,
207 details => $self->summary,
208 }
209 ];
210 }
211
212 my %IGNORE = (trace => 1, about => 1, control => 1);
213 my $do_info = !grep { !$IGNORE{$_} } keys %$out;
214
215 if ($do_info && !$self->no_display && $self->diagnostics) {
216 $out->{info} = [
217 {
218 tag => 'DIAG',
219 debug => 1,
220 details => $self->summary,
221 }
222 ];
223 }
224
225 return $out;
226}
227
228sub facets {
229 my $self = shift;
230 my %out;
231
232 my $data = $self->facet_data;
233 my @errors = $self->validate_facet_data($data);
234 die join "\n" => @errors if @errors;
235
236 for my $facet (keys %$data) {
237 my $class = $self->load_facet($facet);
238 my $val = $data->{$facet};
239
240 unless($class) {
241 $out{$facet} = $val;
242 next;
243 }
244
245 my $is_list = reftype($val) eq 'ARRAY' ? 1 : 0;
246 if ($is_list) {
247 $out{$facet} = [map { $class->new($_) } @$val];
248 }
249 else {
250 $out{$facet} = $class->new($val);
251 }
252 }
253
254 return \%out;
255}
256
257sub validate_facet_data {
258 my $class_or_self = shift;
259 my ($f, %params);
260
261 $f = shift if @_ && (reftype($_[0]) || '') eq 'HASH';
262 %params = @_;
263
264 $f ||= $class_or_self->facet_data if blessed($class_or_self);
265 croak "No facet data" unless $f;
266
267 my @errors;
268
269 for my $k (sort keys %$f) {
270 my $fclass = $class_or_self->load_facet($k);
271
272 push @errors => "Could not find a facet class for facet '$k'"
273 if $params{require_facet_class} && !$fclass;
274
275 next unless $fclass;
276
277 my $v = $f->{$k};
278 next unless defined($v); # undef is always fine
279
280 my $is_list = $fclass->is_list();
281 my $got_list = reftype($v) eq 'ARRAY' ? 1 : 0;
282
283 push @errors => "Facet '$k' should be a list, but got a single item ($v)"
284 if $is_list && !$got_list;
285
286 push @errors => "Facet '$k' should not be a list, but got a a list ($v)"
287 if $got_list && !$is_list;
288 }
289
290 return @errors;
291}
292
293sub nested {
294 my $self = shift;
295
296 Carp::cluck("Use of Test2::Event->nested() is deprecated, use Test2::Event->trace->nested instead")
297 if $ENV{AUTHOR_TESTING};
298
299 if (my $hubs = $self->{+HUBS}) {
300 return $hubs->[0]->{nested} if @$hubs;
301 }
302
303 my $trace = $self->{+TRACE} or return undef;
304 return $trace->{nested};
305}
306
307sub in_subtest {
308 my $self = shift;
309
310 Carp::cluck("Use of Test2::Event->in_subtest() is deprecated, use Test2::Event->trace->hid instead")
311 if $ENV{AUTHOR_TESTING};
312
313 my $hubs = $self->{+HUBS};
314 if ($hubs && @$hubs) {
315 return undef unless $hubs->[0]->{nested};
316 return $hubs->[0]->{hid}
317 }
318
319 my $trace = $self->{+TRACE} or return undef;
320 return undef unless $trace->{nested};
321 return $trace->{hid};
322}
323
32413µs1;
325
326__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Encode-MIME-Name-pm-105-line.html0000644000175000017500000007227014576335353023502 0ustar michamicha Profile of Encode/MIME/Name.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Encode/MIME/Name.pm
StatementsExecuted 11 statements in 268µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsEncode::MIME::Name::::BEGIN@2Encode::MIME::Name::BEGIN@2
1113µs19µsEncode::MIME::Name::::BEGIN@3Encode::MIME::Name::BEGIN@3
0000s0sEncode::MIME::Name::::get_encode_nameEncode::MIME::Name::get_encode_name
0000s0sEncode::MIME::Name::::get_mime_nameEncode::MIME::Name::get_mime_name
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Encode::MIME::Name;
2218µs212µs
# spent 11µs (9+2) within Encode::MIME::Name::BEGIN@2 which was called: # once (9µs+2µs) by Encode::BEGIN@54 at line 2
use strict;
# spent 11µs making 1 call to Encode::MIME::Name::BEGIN@2 # spent 2µs making 1 call to strict::import
32184µs235µs
# spent 19µs (3+16) within Encode::MIME::Name::BEGIN@3 which was called: # once (3µs+16µs) by Encode::BEGIN@54 at line 3
use warnings;
# spent 19µs making 1 call to Encode::MIME::Name::BEGIN@3 # spent 16µs making 1 call to warnings::import
439µs13µsour $VERSION = do { my @r = ( q$Revision: 1.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
# spent 3µs making 1 call to CORE::match
5
6# NOTE: This table must be 1:1 mapping
7111µsour %MIME_NAME_OF = (
8 'AdobeStandardEncoding' => 'Adobe-Standard-Encoding',
9 'AdobeSymbol' => 'Adobe-Symbol-Encoding',
10 'ascii' => 'US-ASCII',
11 'big5-hkscs' => 'Big5-HKSCS',
12 'cp1026' => 'IBM1026',
13 'cp1047' => 'IBM1047',
14 'cp1250' => 'windows-1250',
15 'cp1251' => 'windows-1251',
16 'cp1252' => 'windows-1252',
17 'cp1253' => 'windows-1253',
18 'cp1254' => 'windows-1254',
19 'cp1255' => 'windows-1255',
20 'cp1256' => 'windows-1256',
21 'cp1257' => 'windows-1257',
22 'cp1258' => 'windows-1258',
23 'cp37' => 'IBM037',
24 'cp424' => 'IBM424',
25 'cp437' => 'IBM437',
26 'cp500' => 'IBM500',
27 'cp775' => 'IBM775',
28 'cp850' => 'IBM850',
29 'cp852' => 'IBM852',
30 'cp855' => 'IBM855',
31 'cp857' => 'IBM857',
32 'cp860' => 'IBM860',
33 'cp861' => 'IBM861',
34 'cp862' => 'IBM862',
35 'cp863' => 'IBM863',
36 'cp864' => 'IBM864',
37 'cp865' => 'IBM865',
38 'cp866' => 'IBM866',
39 'cp869' => 'IBM869',
40 'cp936' => 'GBK',
41 'euc-cn' => 'EUC-CN',
42 'euc-jp' => 'EUC-JP',
43 'euc-kr' => 'EUC-KR',
44 #'gb2312-raw' => 'GB2312', # no, you're wrong, I18N::Charset
45 'hp-roman8' => 'hp-roman8',
46 'hz' => 'HZ-GB-2312',
47 'iso-2022-jp' => 'ISO-2022-JP',
48 'iso-2022-jp-1' => 'ISO-2022-JP-1',
49 'iso-2022-kr' => 'ISO-2022-KR',
50 'iso-8859-1' => 'ISO-8859-1',
51 'iso-8859-10' => 'ISO-8859-10',
52 'iso-8859-13' => 'ISO-8859-13',
53 'iso-8859-14' => 'ISO-8859-14',
54 'iso-8859-15' => 'ISO-8859-15',
55 'iso-8859-16' => 'ISO-8859-16',
56 'iso-8859-2' => 'ISO-8859-2',
57 'iso-8859-3' => 'ISO-8859-3',
58 'iso-8859-4' => 'ISO-8859-4',
59 'iso-8859-5' => 'ISO-8859-5',
60 'iso-8859-6' => 'ISO-8859-6',
61 'iso-8859-7' => 'ISO-8859-7',
62 'iso-8859-8' => 'ISO-8859-8',
63 'iso-8859-9' => 'ISO-8859-9',
64 #'jis0201-raw' => 'JIS_X0201',
65 #'jis0208-raw' => 'JIS_C6226-1983',
66 #'jis0212-raw' => 'JIS_X0212-1990',
67 'koi8-r' => 'KOI8-R',
68 'koi8-u' => 'KOI8-U',
69 #'ksc5601-raw' => 'KS_C_5601-1987',
70 'shiftjis' => 'Shift_JIS',
71 'UTF-16' => 'UTF-16',
72 'UTF-16BE' => 'UTF-16BE',
73 'UTF-16LE' => 'UTF-16LE',
74 'UTF-32' => 'UTF-32',
75 'UTF-32BE' => 'UTF-32BE',
76 'UTF-32LE' => 'UTF-32LE',
77 'UTF-7' => 'UTF-7',
78 'utf-8-strict' => 'UTF-8',
79 'viscii' => 'VISCII',
80);
81
82# NOTE: %MIME_NAME_OF is still 1:1 mapping
83136µsour %ENCODE_NAME_OF = map { uc $MIME_NAME_OF{$_} => $_ } keys %MIME_NAME_OF;
84
85# Add additional 1:N mapping
861400ns$MIME_NAME_OF{'utf8'} = 'UTF-8';
87
88sub get_mime_name($) { $MIME_NAME_OF{$_[0]} };
89
90sub get_encode_name($) { $ENCODE_NAME_OF{uc $_[0]} };
91
9219µs1;
93__END__










Spreadsheet-ParseXLSX-0.35/nytprof/mro-pm-32-line.html0000644000175000017500000005641414576335353021420 0ustar michamicha Profile of mro.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/mro.pm
StatementsExecuted 8 statements in 260µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1731146µs46µsmro::::method_changed_in mro::method_changed_in (xsub)
311134µs34µsmro::::get_linear_isa mro::get_linear_isa (xsub)
11110µs12µsmro::::BEGIN@10 mro::BEGIN@10
1113µs20µsmro::::BEGIN@11 mro::BEGIN@11
0000s0smaybe::next::::methodmaybe::next::method
0000s0smro::::import mro::import
0000s0snext::::can next::can
0000s0snext::::method next::method
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# mro.pm
2#
3# Copyright (c) 2007 Brandon L Black
4# Copyright (c) 2008,2009 Larry Wall and others
5#
6# You may distribute under the terms of either the GNU General Public
7# License or the Artistic License, as specified in the README file.
8#
9package mro;
10222µs213µs
# spent 12µs (10+2) within mro::BEGIN@10 which was called: # once (10µs+2µs) by Test2::Util::HashBase::BEGIN@33 at line 10
use strict;
# spent 12µs making 1 call to mro::BEGIN@10 # spent 2µs making 1 call to strict::import
112114µs237µs
# spent 20µs (3+17) within mro::BEGIN@11 which was called: # once (3µs+17µs) by Test2::Util::HashBase::BEGIN@33 at line 11
use warnings;
# spent 20µs making 1 call to mro::BEGIN@11 # spent 17µs making 1 call to warnings::import
12
13# mro.pm versions < 1.00 reserved for MRO::Compat
14# for partial back-compat to 5.[68].x
151300nsour $VERSION = '1.28';
16
171300nsrequire XSLoader;
181120µs1115µsXSLoader::load('mro');
# spent 115µs making 1 call to XSLoader::load
19
20sub import {
21 mro::set_mro(scalar(caller), $_[1]) if $_[1];
22}
23
24package # hide me from PAUSE
25 next;
26
27sub can { mro::_nextcan($_[0], 0) }
28
29sub method {
30 my $method = mro::_nextcan($_[0], 1);
31 goto &$method;
32}
33
34package # hide me from PAUSE
35 maybe::next;
36
37sub method {
38 my $method = mro::_nextcan($_[0], 0);
39 goto &$method if defined $method;
40 return;
41}
42
4313µs1;
44
45__END__
 
# spent 34µs within mro::get_linear_isa which was called 31 times, avg 1µs/call: # 31 times (34µs+0s) by Test2::Util::HashBase::import at line 63 of Test2/Util/HashBase.pm, avg 1µs/call
sub mro::get_linear_isa; # xsub
# spent 46µs within mro::method_changed_in which was called 173 times, avg 268ns/call: # 173 times (46µs+0s) by constant::import at line 198 of constant.pm, avg 268ns/call
sub mro::method_changed_in; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/PerlIO-pm-21-line.html0000644000175000017500000004325314576335353021750 0ustar michamicha Profile of PerlIO.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/PerlIO.pm
StatementsExecuted 2 statements in 3µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
4117µs7µsPerlIO::::get_layersPerlIO::get_layers (xsub)
0000s0sPerlIO::::importPerlIO::import
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package PerlIO;
2
31400nsour $VERSION = '1.12';
4
5# Map layer name to package that defines it
6our %alias;
7
8sub import
9{
10 my $class = shift;
11 while (@_)
12 {
13 my $layer = shift;
14 if (exists $alias{$layer})
15 {
16 $layer = $alias{$layer}
17 }
18 else
19 {
20 $layer = "${class}::$layer";
21 }
22 eval { require $layer =~ s{::}{/}gr . '.pm' };
23 warn $@ if $@;
24 }
25}
26
27sub F_UTF8 () { 0x8000 }
28
2913µs1;
30__END__
 
# spent 7µs within PerlIO::get_layers which was called 4 times, avg 2µs/call: # 4 times (7µs+0s) by Test2::Util::clone_io at line 194 of Test2/Util.pm, avg 2µs/call
sub PerlIO::get_layers; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Util-pm-9-line.html0000644000175000017500000022401614576335353022456 0ustar michamicha Profile of Test2/Util.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util.pm
StatementsExecuted 109 statements in 1.84ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.52ms7.23msTest2::Util::::BEGIN@7Test2::Util::BEGIN@7
111439µs495µsTest2::Util::::BEGIN@8Test2::Util::BEGIN@8
111195µs202µsTest2::Util::::BEGIN@11Test2::Util::BEGIN@11
44260µs129µsTest2::Util::::clone_ioTest2::Util::clone_io
83319µs19µsTest2::Util::::gen_uidTest2::Util::gen_uid
11117µs1.73msTest2::Util::::BEGIN@171Test2::Util::BEGIN@171
11110µs12µsTest2::Util::::BEGIN@2Test2::Util::BEGIN@2
1118µs16µsTest2::Util::::BEGIN@71Test2::Util::BEGIN@71
1117µs7µsTest2::Util::::BEGIN@40Test2::Util::BEGIN@40
1116µs6µsTest2::Util::::BEGIN@206Test2::Util::BEGIN@206
1116µs8µsTest2::Util::::_can_threadTest2::Util::_can_thread
1115µs17µsTest2::Util::::BEGIN@113Test2::Util::BEGIN@113
1115µs20µsTest2::Util::::BEGIN@72Test2::Util::BEGIN@72
1115µs1.71msTest2::Util::::_check_for_sig_sysTest2::Util::_check_for_sig_sys
1114µs31µsTest2::Util::::BEGIN@9Test2::Util::BEGIN@9
1114µs16µsTest2::Util::::BEGIN@80Test2::Util::BEGIN@80
1114µs16µsTest2::Util::::BEGIN@89Test2::Util::BEGIN@89
1114µs4µsTest2::Util::::BEGIN@123Test2::Util::BEGIN@123
1113µs3µsTest2::Util::::BEGIN@132Test2::Util::BEGIN@132
1113µs3µsTest2::Util::::BEGIN@42Test2::Util::BEGIN@42
1113µs18µsTest2::Util::::BEGIN@3Test2::Util::BEGIN@3
111800ns800nsTest2::Util::::__ANON__Test2::Util::__ANON__ (xsub)
0000s0sTest2::Util::::CAN_FORKTest2::Util::CAN_FORK
0000s0sTest2::Util::::CAN_REALLY_FORKTest2::Util::CAN_REALLY_FORK
0000s0sTest2::Util::::__ANON__[:138]Test2::Util::__ANON__[:138]
0000s0sTest2::Util::::__ANON__[:142]Test2::Util::__ANON__[:142]
0000s0sTest2::Util::::__ANON__[:143]Test2::Util::__ANON__[:143]
0000s0sTest2::Util::::__ANON__[:222]Test2::Util::__ANON__[:222]
0000s0sTest2::Util::::__ANON__[:235]Test2::Util::__ANON__[:235]
0000s0sTest2::Util::::__ANON__[:242]Test2::Util::__ANON__[:242]
0000s0sTest2::Util::::__ANON__[:247]Test2::Util::__ANON__[:247]
0000s0sTest2::Util::::_can_forkTest2::Util::_can_fork
0000s0sTest2::Util::::_local_tryTest2::Util::_local_try
0000s0sTest2::Util::::_manual_tryTest2::Util::_manual_try
0000s0sTest2::Util::::pkg_to_fileTest2::Util::pkg_to_file
0000s0sTest2::Util::::try_sig_maskTest2::Util::try_sig_mask
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Util;
2220µs214µs
# spent 12µs (10+2) within Test2::Util::BEGIN@2 which was called: # once (10µs+2µs) by Test::Builder::BEGIN@17 at line 2
use strict;
# spent 12µs making 1 call to Test2::Util::BEGIN@2 # spent 2µs making 1 call to strict::import
3222µs232µs
# spent 18µs (3+15) within Test2::Util::BEGIN@3 which was called: # once (3µs+15µs) by Test::Builder::BEGIN@17 at line 3
use warnings;
# spent 18µs making 1 call to Test2::Util::BEGIN@3 # spent 15µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7295µs17.23ms
# spent 7.23ms (2.52+4.71) within Test2::Util::BEGIN@7 which was called: # once (2.52ms+4.71ms) by Test::Builder::BEGIN@17 at line 7
use POSIX();
# spent 7.23ms making 1 call to Test2::Util::BEGIN@7
8285µs2502µs
# spent 495µs (439+57) within Test2::Util::BEGIN@8 which was called: # once (439µs+57µs) by Test::Builder::BEGIN@17 at line 8
use Config qw/%Config/;
# spent 495µs making 1 call to Test2::Util::BEGIN@8 # spent 7µs making 1 call to Config::import
9253µs258µs
# spent 31µs (4+27) within Test2::Util::BEGIN@9 which was called: # once (4µs+27µs) by Test::Builder::BEGIN@17 at line 9
use Carp qw/croak/;
# spent 31µs making 1 call to Test2::Util::BEGIN@9 # spent 27µs making 1 call to Exporter::import
10
11
# spent 202µs (195+7) within Test2::Util::BEGIN@11 which was called: # once (195µs+7µs) by Test::Builder::BEGIN@17 at line 14
BEGIN {
1212µs local ($@, $!, $SIG{__DIE__});
133196µs17µs *HAVE_PERLIO = eval { require PerlIO; PerlIO->VERSION(1.02); } ? sub() { 1 } : sub() { 0 };
# spent 7µs making 1 call to UNIVERSAL::VERSION
14144µs1202µs}
# spent 202µs making 1 call to Test2::Util::BEGIN@11
15
1611µsour @EXPORT_OK = qw{
17 try
18
19 pkg_to_file
20
21 get_tid USE_THREADS
22 CAN_THREAD
23 CAN_REALLY_FORK
24 CAN_FORK
25
26 CAN_SIGSYS
27
28 IS_WIN32
29
30 ipc_separator
31
32 gen_uid
33
34 do_rename do_unlink
35
36 try_sig_mask
37
38 clone_io
39};
40240µs17µs
# spent 7µs within Test2::Util::BEGIN@40 which was called: # once (7µs+0s) by Test::Builder::BEGIN@17 at line 40
BEGIN { require Exporter; our @ISA = qw(Exporter) }
# spent 7µs making 1 call to Test2::Util::BEGIN@40
41
42
# spent 3µs within Test2::Util::BEGIN@42 which was called: # once (3µs+0s) by Test::Builder::BEGIN@17 at line 44
BEGIN {
4314µs *IS_WIN32 = ($^O eq 'MSWin32') ? sub() { 1 } : sub() { 0 };
441154µs13µs}
# spent 3µs making 1 call to Test2::Util::BEGIN@42
45
46
# spent 8µs (6+2) within Test2::Util::_can_thread which was called: # once (6µs+2µs) by Test2::Util::BEGIN@71 at line 73
sub _can_thread {
471200ns return 0 unless $] >= 5.008001;
4819µs12µs return 0 unless $Config{'useithreads'};
# spent 2µs making 1 call to Config::FETCH
49
50 # Threads are broken on perl 5.10.0 built with gcc 4.8+
51 if ($] == 5.010000 && $Config{'ccname'} eq 'gcc' && $Config{'gccversion'}) {
52 return 0 unless $Config{'gccversion'} =~ m/^(\d+)\.(\d+)/;
53 my @parts = split /[\.\s]+/, $Config{'gccversion'};
54 return 0 if $parts[0] > 4 || ($parts[0] == 4 && $parts[1] >= 8);
55 }
56
57 # Change to a version check if this ever changes
58 return 0 if $INC{'Devel/Cover.pm'};
59 return 1;
60}
61
62sub _can_fork {
63 return 1 if $Config{d_fork};
64 return 0 unless IS_WIN32 || $^O eq 'NetWare';
65 return 0 unless $Config{useithreads};
66 return 0 unless $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/;
67
68 return _can_thread();
69}
70
71
# spent 16µs (8+8) within Test2::Util::BEGIN@71 which was called: # once (8µs+8µs) by Test::Builder::BEGIN@17 at line 74
BEGIN {
72234µs235µs
# spent 20µs (5+15) within Test2::Util::BEGIN@72 which was called: # once (5µs+15µs) by Test::Builder::BEGIN@17 at line 72
no warnings 'once';
# spent 20µs making 1 call to Test2::Util::BEGIN@72 # spent 15µs making 1 call to warnings::unimport
7312µs18µs *CAN_THREAD = _can_thread() ? sub() { 1 } : sub() { 0 };
# spent 8µs making 1 call to Test2::Util::_can_thread
74133µs116µs}
# spent 16µs making 1 call to Test2::Util::BEGIN@71
751200nsmy $can_fork;
76sub CAN_FORK () {
77 return $can_fork
78 if defined $can_fork;
79 $can_fork = !!_can_fork();
80258µs228µs
# spent 16µs (4+12) within Test2::Util::BEGIN@80 which was called: # once (4µs+12µs) by Test::Builder::BEGIN@17 at line 80
no warnings 'redefine';
# spent 16µs making 1 call to Test2::Util::BEGIN@80 # spent 12µs making 1 call to warnings::unimport
81 *CAN_FORK = $can_fork ? sub() { 1 } : sub() { 0 };
82 $can_fork;
83}
84my $can_really_fork;
85sub CAN_REALLY_FORK () {
86 return $can_really_fork
87 if defined $can_really_fork;
88 $can_really_fork = !!$Config{d_fork};
892112µs227µs
# spent 16µs (4+12) within Test2::Util::BEGIN@89 which was called: # once (4µs+12µs) by Test::Builder::BEGIN@17 at line 89
no warnings 'redefine';
# spent 16µs making 1 call to Test2::Util::BEGIN@89 # spent 12µs making 1 call to warnings::unimport
90 *CAN_REALLY_FORK = $can_really_fork ? sub() { 1 } : sub() { 0 };
91 $can_really_fork;
92}
93
94sub _manual_try(&;@) {
95 my $code = shift;
96 my $args = \@_;
97 my $err;
98
99 my $die = delete $SIG{__DIE__};
100
101 eval { $code->(@$args); 1 } or $err = $@ || "Error was squashed!\n";
102
103 $die ? $SIG{__DIE__} = $die : delete $SIG{__DIE__};
104
105 return (!defined($err), $err);
106}
107
108sub _local_try(&;@) {
109 my $code = shift;
110 my $args = \@_;
111 my $err;
112
1132103µs229µs
# spent 17µs (5+12) within Test2::Util::BEGIN@113 which was called: # once (5µs+12µs) by Test::Builder::BEGIN@17 at line 113
no warnings;
# spent 17µs making 1 call to Test2::Util::BEGIN@113 # spent 12µs making 1 call to warnings::unimport
114 local $SIG{__DIE__};
115 eval { $code->(@$args); 1 } or $err = $@ || "Error was squashed!\n";
116
117 return (!defined($err), $err);
118}
119
120# Older versions of perl have a nasty bug on win32 when localizing a variable
121# before forking or starting a new thread. So for those systems we use the
122# non-local form. When possible though we use the faster 'local' form.
123
# spent 4µs within Test2::Util::BEGIN@123 which was called: # once (4µs+0s) by Test::Builder::BEGIN@17 at line 130
BEGIN {
12413µs if (IS_WIN32 && $] < 5.020002) {
125 *try = \&_manual_try;
126 }
127 else {
12811µs *try = \&_local_try;
129 }
130193µs14µs}
# spent 4µs making 1 call to Test2::Util::BEGIN@123
131
132
# spent 3µs within Test2::Util::BEGIN@132 which was called: # once (3µs+0s) by Test::Builder::BEGIN@17 at line 151
BEGIN {
13312µs if (CAN_THREAD) {
134 if ($INC{'threads.pm'}) {
135 # Threads are already loaded, so we do not need to check if they
136 # are loaded each time
137 *USE_THREADS = sub() { 1 };
138 *get_tid = sub() { threads->tid() };
139 }
140 else {
141 # :-( Need to check each time to see if they have been loaded.
142 *USE_THREADS = sub() { $INC{'threads.pm'} ? 1 : 0 };
143 *get_tid = sub() { $INC{'threads.pm'} ? threads->tid() : 0 };
144 }
145 }
146 else {
147 # No threads, not now, not ever!
1481600ns *USE_THREADS = sub() { 0 };
1491200ns *get_tid = sub() { 0 };
150 }
1511166µs13µs}
# spent 3µs making 1 call to Test2::Util::BEGIN@132
152
153sub pkg_to_file {
154 my $pkg = shift;
155 my $file = $pkg;
156 $file =~ s{(::|')}{/}g;
157 $file .= '.pm';
158 return $file;
159}
160
161sub ipc_separator() { "~" }
162
1631300nsmy $UID = 1;
164826µs
# spent 19µs within Test2::Util::gen_uid which was called 8 times, avg 2µs/call: # 4 times (10µs+0s) by Test2::API::context at line 485 of Test2/API.pm, avg 2µs/call # 3 times (6µs+0s) by Test2::Event::eid at line 123 of Test2/Event.pm, avg 2µs/call # once (3µs+0s) by Test2::Hub::init at line 46 of Test2/Hub.pm
sub gen_uid() { join ipc_separator() => ($$, get_tid(), time, $UID++) }
165
166
# spent 1.71ms (5µs+1.71) within Test2::Util::_check_for_sig_sys which was called: # once (5µs+1.71ms) by Test2::Util::BEGIN@171 at line 172
sub _check_for_sig_sys {
16712µs11.71ms my $sig_list = shift;
# spent 1.71ms making 1 call to Config::FETCH
16814µs11µs return $sig_list =~ m/\bSYS\b/;
# spent 1µs making 1 call to CORE::match
169}
170
171
# spent 1.73ms (17µs+1.71) within Test2::Util::BEGIN@171 which was called: # once (17µs+1.71ms) by Test::Builder::BEGIN@17 at line 178
BEGIN {
17214µs11.71ms if (_check_for_sig_sys($Config{sig_name})) {
# spent 1.71ms making 1 call to Test2::Util::_check_for_sig_sys
173 *CAN_SIGSYS = sub() { 1 };
174 }
175 else {
176 *CAN_SIGSYS = sub() { 0 };
177 }
1781248µs11.73ms}
# spent 1.73ms making 1 call to Test2::Util::BEGIN@171
179
18011µsmy %PERLIO_SKIP = (
181 unix => 1,
182 via => 1,
183);
184
185
# spent 129µs (60+69) within Test2::Util::clone_io which was called 4 times, avg 32µs/call: # once (22µs+26µs) by Test::Builder::BEGIN@18 at line 186 of Test2/API.pm # once (16µs+20µs) by Test2::Formatter::TAP::_open_handles at line 57 of Test2/Formatter/TAP.pm # once (10µs+12µs) by Test2::Formatter::TAP::_open_handles at line 58 of Test2/Formatter/TAP.pm # once (11µs+11µs) by Test::Builder::BEGIN@18 at line 187 of Test2/API.pm
sub clone_io {
18641µs my ($fh) = @_;
18784µs my $fileno = eval { fileno($fh) };
188
18943µs return $fh if !defined($fileno) || !length($fileno) || $fileno < 0;
190
191459µs447µs open(my $out, '>&' . $fileno) or die "Can't dup fileno $fileno: $!";
# spent 47µs making 4 calls to CORE::open, avg 12µs/call
192
1934600ns my %seen;
194419µs47µs my @layers = HAVE_PERLIO ? grep { !$PERLIO_SKIP{$_} and !$seen{$_}++ } PerlIO::get_layers($fh) : ();
# spent 7µs making 4 calls to PerlIO::get_layers, avg 2µs/call
195418µs412µs binmode($out, join(":", "", "raw", @layers));
# spent 12µs making 4 calls to CORE::binmode, avg 3µs/call
196
19747µs43µs my $old = select $fh;
# spent 3µs making 4 calls to CORE::select, avg 650ns/call
19842µs my $af = $|;
19944µs4900ns select $out;
# spent 900ns making 4 calls to CORE::select, avg 225ns/call
20041µs $| = $af;
20144µs4500ns select $old;
# spent 500ns making 4 calls to CORE::select, avg 125ns/call
202
20348µs return $out;
204}
205
206
# spent 6µs within Test2::Util::BEGIN@206 which was called: # once (6µs+0s) by Test::Builder::BEGIN@17 at line 249
BEGIN {
20713µs if (IS_WIN32) {
208 my $max_tries = 5;
209
210 *do_rename = sub {
211 my ($from, $to) = @_;
212
213 my $err;
214 for (1 .. $max_tries) {
215 return (1) if rename($from, $to);
216 $err = "$!";
217 last if $_ == $max_tries;
218 sleep 1;
219 }
220
221 return (0, $err);
222 };
223 *do_unlink = sub {
224 my ($file) = @_;
225
226 my $err;
227 for (1 .. $max_tries) {
228 return (1) if unlink($file);
229 $err = "$!";
230 last if $_ == $max_tries;
231 sleep 1;
232 }
233
234 return (0, "$!");
235 };
236 }
237 else {
238 *do_rename = sub {
239 my ($from, $to) = @_;
240 return (1) if rename($from, $to);
241 return (0, "$!");
24213µs };
243 *do_unlink = sub {
244 my ($file) = @_;
245 return (1) if unlink($file);
246 return (0, "$!");
2471800ns };
248 }
249179µs16µs}
# spent 6µs making 1 call to Test2::Util::BEGIN@206
250
251sub try_sig_mask(&) {
252 my $code = shift;
253
254 my ($old, $blocked);
255 unless(IS_WIN32) {
256 my $to_block = POSIX::SigSet->new(
257 POSIX::SIGINT(),
258 POSIX::SIGALRM(),
259 POSIX::SIGHUP(),
260 POSIX::SIGTERM(),
261 POSIX::SIGUSR1(),
262 POSIX::SIGUSR2(),
263 );
264 $old = POSIX::SigSet->new;
265 $blocked = POSIX::sigprocmask(POSIX::SIG_BLOCK(), $to_block, $old);
266 # Silently go on if we failed to log signals, not much we can do.
267 }
268
269 my ($ok, $err) = &try($code);
270
271 # If our block was successful we want to restore the old mask.
272 POSIX::sigprocmask(POSIX::SIG_SETMASK(), $old, POSIX::SigSet->new()) if defined $blocked;
273
274 return ($ok, $err);
275}
276
27714µs1;
278
279__END__
 
# spent 800ns within Test2::Util::__ANON__ which was called: # once (800ns+0s) by Test2::API::test2_set_is_end at line 36 of Test2/API.pm
sub Test2::Util::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Trace-pm-29-line.html0000644000175000017500000011255214576335353024704 0ustar michamicha Profile of Test2/EventFacet/Trace.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Trace.pm
StatementsExecuted 38 statements in 584µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111187µs1.51msTest2::EventFacet::Trace::::BEGIN@7Test2::EventFacet::Trace::BEGIN@7
11110µs11µsTest2::EventFacet::Trace::::BEGIN@2Test2::EventFacet::Trace::BEGIN@2
3119µs9µsTest2::EventFacet::Trace::::initTest2::EventFacet::Trace::init
1117µs24µsTest2::EventFacet::Trace::::BEGIN@3Test2::EventFacet::Trace::BEGIN@3
1115µs117µsTest2::EventFacet::Trace::::BEGIN@13Test2::EventFacet::Trace::BEGIN@13
1114µs16µsTest2::EventFacet::Trace::::BEGIN@16Test2::EventFacet::Trace::BEGIN@16
1114µs24µsTest2::EventFacet::Trace::::BEGIN@9Test2::EventFacet::Trace::BEGIN@9
1114µs44µsTest2::EventFacet::Trace::::BEGIN@10Test2::EventFacet::Trace::BEGIN@10
1114µs17µsTest2::EventFacet::Trace::::BEGIN@11Test2::EventFacet::Trace::BEGIN@11
1113µs3µsTest2::EventFacet::Trace::::snapshotTest2::EventFacet::Trace::snapshot
1112µs2µsTest2::EventFacet::Trace::::callTest2::EventFacet::Trace::call
0000s0sTest2::EventFacet::Trace::::alertTest2::EventFacet::Trace::alert
0000s0sTest2::EventFacet::Trace::::debugTest2::EventFacet::Trace::debug
0000s0sTest2::EventFacet::Trace::::fileTest2::EventFacet::Trace::file
0000s0sTest2::EventFacet::Trace::::full_callTest2::EventFacet::Trace::full_call
0000s0sTest2::EventFacet::Trace::::lineTest2::EventFacet::Trace::line
0000s0sTest2::EventFacet::Trace::::packageTest2::EventFacet::Trace::package
0000s0sTest2::EventFacet::Trace::::signatureTest2::EventFacet::Trace::signature
0000s0sTest2::EventFacet::Trace::::subnameTest2::EventFacet::Trace::subname
0000s0sTest2::EventFacet::Trace::::throwTest2::EventFacet::Trace::throw
0000s0sTest2::EventFacet::Trace::::warning_bitsTest2::EventFacet::Trace::warning_bits
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Trace;
2218µs213µs
# spent 11µs (10+2) within Test2::EventFacet::Trace::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::Instance::BEGIN@13 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::Trace::BEGIN@2 # spent 2µs making 1 call to strict::import
3233µs240µs
# spent 24µs (7+17) within Test2::EventFacet::Trace::BEGIN@3 which was called: # once (7µs+17µs) by Test2::API::Instance::BEGIN@13 at line 3
use warnings;
# spent 24µs making 1 call to Test2::EventFacet::Trace::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51400nsour $VERSION = '1.302198';
6
7279µs11.51ms
# spent 1.51ms (187µs+1.32) within Test2::EventFacet::Trace::BEGIN@7 which was called: # once (187µs+1.32ms) by Test2::API::Instance::BEGIN@13 at line 7
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 1.51ms making 1 call to Test2::EventFacet::Trace::BEGIN@7
8
9217µs244µs
# spent 24µs (4+20) within Test2::EventFacet::Trace::BEGIN@9 which was called: # once (4µs+20µs) by Test2::API::Instance::BEGIN@13 at line 9
use Test2::Util qw/get_tid pkg_to_file gen_uid/;
# spent 24µs making 1 call to Test2::EventFacet::Trace::BEGIN@9 # spent 20µs making 1 call to Exporter::import
10218µs285µs
# spent 44µs (4+40) within Test2::EventFacet::Trace::BEGIN@10 which was called: # once (4µs+40µs) by Test2::API::Instance::BEGIN@13 at line 10
use Time::HiRes qw/time/;
# spent 44µs making 1 call to Test2::EventFacet::Trace::BEGIN@10 # spent 40µs making 1 call to Time::HiRes::import
11218µs230µs
# spent 17µs (4+13) within Test2::EventFacet::Trace::BEGIN@11 which was called: # once (4µs+13µs) by Test2::API::Instance::BEGIN@13 at line 11
use Carp qw/confess/;
# spent 17µs making 1 call to Test2::EventFacet::Trace::BEGIN@11 # spent 13µs making 1 call to Exporter::import
12
13223µs2229µs
# spent 117µs (5+112) within Test2::EventFacet::Trace::BEGIN@13 which was called: # once (5µs+112µs) by Test2::API::Instance::BEGIN@13 at line 13
use Test2::Util::HashBase qw{^frame ^pid ^tid ^cid -hid -nested details -buffered -uuid -huuid <full_caller <stamp};
# spent 117µs making 1 call to Test2::EventFacet::Trace::BEGIN@13 # spent 112µs making 1 call to Test2::Util::HashBase::import
14
15{
163356µs229µs
# spent 16µs (4+12) within Test2::EventFacet::Trace::BEGIN@16 which was called: # once (4µs+12µs) by Test2::API::Instance::BEGIN@13 at line 16
no warnings 'once';
# spent 16µs making 1 call to Test2::EventFacet::Trace::BEGIN@16 # spent 12µs making 1 call to warnings::unimport
171900ns *DETAIL = \&DETAILS;
181200ns *detail = \&details;
191300ns *set_detail = \&set_details;
20}
21
22
# spent 9µs within Test2::EventFacet::Trace::init which was called 3 times, avg 3µs/call: # 3 times (9µs+0s) by Test2::Util::HashBase::_new at line 155 of Test2/Util/HashBase.pm, avg 3µs/call
sub init {
23 confess "The 'frame' attribute is required"
243700ns unless $_[0]->{+FRAME};
25
2632µs $_[0]->{+DETAILS} = delete $_[0]->{detail} if $_[0]->{detail};
27
2835µs unless (defined($_[0]->{+PID}) || defined($_[0]->{+TID}) || defined($_[0]->{+CID})) {
2922µs $_[0]->{+PID} = $$ unless defined $_[0]->{+PID};
302900ns $_[0]->{+TID} = get_tid() unless defined $_[0]->{+TID};
31 }
32}
33
34
# spent 3µs within Test2::EventFacet::Trace::snapshot which was called: # once (3µs+0s) by Test2::API::Context::send_ev2 at line 223 of Test2/API/Context.pm
sub snapshot {
351400ns my ($orig, @override) = @_;
3613µs bless {%$orig, @override}, __PACKAGE__;
37}
38
39sub signature {
40 my $self = shift;
41
42 # Signature is only valid if all of these fields are defined, there is no
43 # signature if any is missing. '0' is ok, but '' is not.
44 return join ':' => map { (defined($_) && length($_)) ? $_ : return undef } (
45 $self->{+CID},
46 $self->{+PID},
47 $self->{+TID},
48 $self->{+FRAME}->[1],
49 $self->{+FRAME}->[2],
50 );
51}
52
53sub debug {
54 my $self = shift;
55 return $self->{+DETAILS} if $self->{+DETAILS};
56 my ($pkg, $file, $line) = $self->call;
57 return "at $file line $line";
58}
59
60sub alert {
61 my $self = shift;
62 my ($msg) = @_;
63 warn $msg . ' ' . $self->debug . ".\n";
64}
65
66sub throw {
67 my $self = shift;
68 my ($msg) = @_;
69 die $msg . ' ' . $self->debug . ".\n";
70}
71
7213µs
# spent 2µs within Test2::EventFacet::Trace::call which was called: # once (2µs+0s) by Test::Builder::done_testing at line 595 of Test/Builder.pm
sub call { @{$_[0]->{+FRAME}} }
73
74sub full_call { @{$_[0]->{+FULL_CALLER}} }
75
76sub package { $_[0]->{+FRAME}->[0] }
77sub file { $_[0]->{+FRAME}->[1] }
78sub line { $_[0]->{+FRAME}->[2] }
79sub subname { $_[0]->{+FRAME}->[3] }
80
81sub warning_bits { $_[0]->{+FULL_CALLER} ? $_[0]->{+FULL_CALLER}->[9] : undef }
82
8313µs1;
84
85__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-ZipFileMember-pm-114-line.html0000644000175000017500000031051714576335353025512 0ustar michamicha Profile of Archive/Zip/ZipFileMember.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip/ZipFileMember.pm
StatementsExecuted 625 statements in 1.39ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
101198µs178µsArchive::Zip::ZipFileMember::::_readCentralDirectoryFileHeaderArchive::Zip::ZipFileMember::_readCentralDirectoryFileHeader
71191µs1.85msArchive::Zip::ZipFileMember::::rewindDataArchive::Zip::ZipFileMember::rewindData
71172µs162µsArchive::Zip::ZipFileMember::::_skipLocalFileHeaderArchive::Zip::ZipFileMember::_skipLocalFileHeader
71161µs193µsArchive::Zip::ZipFileMember::::_seekToLocalHeaderArchive::Zip::ZipFileMember::_seekToLocalHeader
111137µs247µsArchive::Zip::ZipFileMember::::_newFromZipFileArchive::Zip::ZipFileMember::_newFromZipFile
212228µs42µsArchive::Zip::ZipFileMember::::isDirectoryArchive::Zip::ZipFileMember::isDirectory
71122µs591µsArchive::Zip::ZipFileMember::::_readRawChunkArchive::Zip::ZipFileMember::_readRawChunk
11110µs12µsArchive::Zip::ZipFileMember::::BEGIN@3Archive::Zip::ZipFileMember::BEGIN@3
1119µs178µsArchive::Zip::ZipFileMember::::BEGIN@11Archive::Zip::ZipFileMember::BEGIN@11
1117µs7µsArchive::Zip::ZipFileMember::::BEGIN@6Archive::Zip::ZipFileMember::BEGIN@6
7114µs4µsArchive::Zip::ZipFileMember::::dataOffsetArchive::Zip::ZipFileMember::dataOffset
7114µs4µsArchive::Zip::ZipFileMember::::localHeaderRelativeOffsetArchive::Zip::ZipFileMember::localHeaderRelativeOffset
1113µs21µsArchive::Zip::ZipFileMember::::BEGIN@4Archive::Zip::ZipFileMember::BEGIN@4
0000s0sArchive::Zip::ZipFileMember::::_becomeArchive::Zip::ZipFileMember::_become
0000s0sArchive::Zip::ZipFileMember::::_readDataDescriptorArchive::Zip::ZipFileMember::_readDataDescriptor
0000s0sArchive::Zip::ZipFileMember::::_readLocalFileHeaderArchive::Zip::ZipFileMember::_readLocalFileHeader
0000s0sArchive::Zip::ZipFileMember::::diskNumberStartArchive::Zip::ZipFileMember::diskNumberStart
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip::ZipFileMember;
2
3221µs213µs
# spent 12µs (10+2) within Archive::Zip::ZipFileMember::BEGIN@3 which was called: # once (10µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 3
use strict;
# spent 12µs making 1 call to Archive::Zip::ZipFileMember::BEGIN@3 # spent 2µs making 1 call to strict::import
4222µs238µs
# spent 21µs (3+17) within Archive::Zip::ZipFileMember::BEGIN@4 which was called: # once (3µs+17µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 4
use vars qw( $VERSION @ISA );
# spent 21µs making 1 call to Archive::Zip::ZipFileMember::BEGIN@4 # spent 17µs making 1 call to vars::import
5
6
# spent 7µs within Archive::Zip::ZipFileMember::BEGIN@6 which was called: # once (7µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 9
BEGIN {
71200ns $VERSION = '1.68';
817µs @ISA = qw ( Archive::Zip::FileMember );
9115µs17µs}
# spent 7µs making 1 call to Archive::Zip::ZipFileMember::BEGIN@6
10
1112µs1169µs
# spent 178µs (9+169) within Archive::Zip::ZipFileMember::BEGIN@11 which was called: # once (9µs+169µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 16
use Archive::Zip qw(
# spent 169µs making 1 call to Exporter::import
12 :CONSTANTS
13 :ERROR_CODES
14 :PKZIP_CONSTANTS
15 :UTILITY_METHODS
161968µs1178µs);
# spent 178µs making 1 call to Archive::Zip::ZipFileMember::BEGIN@11
17
18# Create a new Archive::Zip::ZipFileMember
19# given a filename and optional open file handle
20#
21
# spent 247µs (37+210) within Archive::Zip::ZipFileMember::_newFromZipFile which was called 11 times, avg 22µs/call: # 11 times (37µs+210µs) by Archive::Zip::Member::_newFromZipFile at line 47 of Archive/Zip/Member.pm, avg 22µs/call
sub _newFromZipFile {
22111µs my $class = shift;
23111µs my $fh = shift;
24112µs my $externalFileName = shift;
25112µs my $archiveZip64 = @_ ? shift : 0;
26111µs my $possibleEocdOffset = @_ ? shift : 0; # normally 0
27
281110µs11210µs my $self = $class->new(
# spent 210µs making 11 calls to Archive::Zip::Member::new, avg 19µs/call
29 'eocdCrc32' => 0,
30 'diskNumberStart' => 0,
31 'localHeaderRelativeOffset' => 0,
32 'dataOffset' => 0, # localHeaderRelativeOffset + header length
33 @_
34 );
35113µs $self->{'externalFileName'} = $externalFileName;
36112µs $self->{'fh'} = $fh;
37112µs $self->{'archiveZip64'} = $archiveZip64;
38112µs $self->{'possibleEocdOffset'} = $possibleEocdOffset;
39119µs return $self;
40}
41
42
# spent 42µs (28+13) within Archive::Zip::ZipFileMember::isDirectory which was called 21 times, avg 2µs/call: # 11 times (15µs+7µs) by Archive::Zip::Member::unixFileAttributes at line 399 of Archive/Zip/Member.pm, avg 2µs/call # 10 times (13µs+7µs) by Archive::Zip::Archive::readFromFileHandle at line 797 of Archive/Zip/Archive.pm, avg 2µs/call
sub isDirectory {
43212µs my $self = shift;
442128µs2113µs return (substr($self->fileName, -1, 1) eq '/'
# spent 13µs making 21 calls to Archive::Zip::Member::fileName, avg 633ns/call
45 and $self->uncompressedSize == 0);
46}
47
48# Seek to the beginning of the local header, just past the signature.
49# Verify that the local header signature is in fact correct.
50# Update the localHeaderRelativeOffset if necessary by adding the possibleEocdOffset.
51# Returns status.
52
53
# spent 193µs (61+132) within Archive::Zip::ZipFileMember::_seekToLocalHeader which was called 7 times, avg 28µs/call: # 7 times (61µs+132µs) by Archive::Zip::ZipFileMember::rewindData at line 450, avg 28µs/call
sub _seekToLocalHeader {
547700ns my $self = shift;
5571µs my $where = shift; # optional
567500ns my $previousWhere = shift; # optional
57
5877µs74µs $where = $self->localHeaderRelativeOffset() unless defined($where);
# spent 4µs making 7 calls to Archive::Zip::ZipFileMember::localHeaderRelativeOffset, avg 500ns/call
59
60 # avoid loop on certain corrupt files (from Julian Field)
6172µs return _formatError("corrupt zip file")
62 if defined($previousWhere) && $where == $previousWhere;
63
6471µs my $status;
65 my $signature;
66
6779µs1431µs $status = $self->fh()->seek($where, IO::Seekable::SEEK_SET);
# spent 20µs making 7 calls to IO::Seekable::seek, avg 3µs/call # spent 11µs making 7 calls to Archive::Zip::FileMember::fh, avg 2µs/call
6871µs return _ioError("seeking to local header") unless $status;
69
70713µs2197µs ($status, $signature) =
# spent 84µs making 7 calls to Archive::Zip::_readSignature, avg 12µs/call # spent 10µs making 7 calls to Archive::Zip::FileMember::fh, avg 1µs/call # spent 3µs making 7 calls to Archive::Zip::FileMember::externalFileName, avg 429ns/call
71 _readSignature($self->fh(), $self->externalFileName(),
72 LOCAL_FILE_HEADER_SIGNATURE, 1);
7371µs return $status if $status == AZ_IO_ERROR;
74
75 # retry with EOCD offset if any was given.
7671µs if ($status == AZ_FORMAT_ERROR && $self->{'possibleEocdOffset'}) {
77 $status = $self->_seekToLocalHeader(
78 $self->localHeaderRelativeOffset() + $self->{'possibleEocdOffset'},
79 $where
80 );
81 if ($status == AZ_OK) {
82 $self->{'localHeaderRelativeOffset'} +=
83 $self->{'possibleEocdOffset'};
84 $self->{'possibleEocdOffset'} = 0;
85 }
86 }
87
8878µs return $status;
89}
90
91# Because I'm going to delete the file handle, read the local file
92# header if the file handle is seekable. If it is not, I assume that
93# I've already read the local header.
94# Return ( $status, $self )
95
96sub _become {
97 my $self = shift;
98 my $newClass = shift;
99 return $self if ref($self) eq $newClass;
100
101 my $status = AZ_OK;
102
103 if (_isSeekable($self->fh())) {
104 my $here = $self->fh()->tell();
105 $status = $self->_seekToLocalHeader();
106 $status = $self->_readLocalFileHeader() if $status == AZ_OK;
107 $self->fh()->seek($here, IO::Seekable::SEEK_SET);
108 return $status unless $status == AZ_OK;
109 }
110
111 delete($self->{'eocdCrc32'});
112 delete($self->{'diskNumberStart'});
113 delete($self->{'localHeaderRelativeOffset'});
114 delete($self->{'dataOffset'});
115 delete($self->{'archiveZip64'});
116 delete($self->{'possibleEocdOffset'});
117
118 return $self->SUPER::_become($newClass);
119}
120
121sub diskNumberStart {
122 shift->{'diskNumberStart'};
123}
124
125
# spent 4µs within Archive::Zip::ZipFileMember::localHeaderRelativeOffset which was called 7 times, avg 500ns/call: # 7 times (4µs+0s) by Archive::Zip::ZipFileMember::_seekToLocalHeader at line 58, avg 500ns/call
sub localHeaderRelativeOffset {
12677µs shift->{'localHeaderRelativeOffset'};
127}
128
129
# spent 4µs within Archive::Zip::ZipFileMember::dataOffset which was called 7 times, avg 557ns/call: # 7 times (4µs+0s) by Archive::Zip::ZipFileMember::rewindData at line 458, avg 557ns/call
sub dataOffset {
13077µs shift->{'dataOffset'};
131}
132
133# Skip local file header, updating only extra field stuff.
134# Assumes that fh is positioned before signature.
135
# spent 162µs (72+89) within Archive::Zip::ZipFileMember::_skipLocalFileHeader which was called 7 times, avg 23µs/call: # 7 times (72µs+89µs) by Archive::Zip::ZipFileMember::rewindData at line 454, avg 23µs/call
sub _skipLocalFileHeader {
1367800ns my $self = shift;
1377500ns my $header;
13877µs1422µs my $bytesRead = $self->fh()->read($header, LOCAL_FILE_HEADER_LENGTH);
# spent 13µs making 7 calls to Archive::Zip::FileMember::fh, avg 2µs/call # spent 9µs making 7 calls to IO::Handle::read, avg 1µs/call
13971µs if ($bytesRead != LOCAL_FILE_HEADER_LENGTH) {
140 return _ioError("reading local file header");
141 }
14271µs my $fileNameLength;
143 my $extraFieldLength;
144 my $bitFlag;
145 (
146 undef, # $self->{'versionNeededToExtract'},
147715µs75µs $bitFlag,
# spent 5µs making 7 calls to CORE::unpack, avg 657ns/call
148 undef, # $self->{'compressionMethod'},
149 undef, # $self->{'lastModFileDateTime'},
150 undef, # $crc32,
151 undef, # $compressedSize,
152 undef, # $uncompressedSize,
153 $fileNameLength,
154 $extraFieldLength
155 ) = unpack(LOCAL_FILE_HEADER_FORMAT, $header);
156
15778µs1434µs if ($fileNameLength) {
# spent 23µs making 7 calls to IO::Seekable::seek, avg 3µs/call # spent 11µs making 7 calls to Archive::Zip::FileMember::fh, avg 2µs/call
158 $self->fh()->seek($fileNameLength, IO::Seekable::SEEK_CUR)
159 or return _ioError("skipping local file name");
160 }
161
16271µs my $zip64 = 0;
16371µs if ($extraFieldLength) {
164 $bytesRead =
16523µs49µs $self->fh()->read($self->{'localExtraField'}, $extraFieldLength);
# spent 6µs making 2 calls to IO::Handle::read, avg 3µs/call # spent 3µs making 2 calls to Archive::Zip::FileMember::fh, avg 1µs/call
16621µs if ($bytesRead != $extraFieldLength) {
167 return _ioError("reading local extra field");
168 }
1692700ns if ($self->{'archiveZip64'}) {
170 my $status;
171 ($status, $zip64) =
172 $self->_extractZip64ExtraField($self->{'localExtraField'}, undef, undef);
173 return $status if $status != AZ_OK;
174 $self->{'zip64'} ||= $zip64;
175 }
176 }
177
17878µs1420µs $self->{'dataOffset'} = $self->fh()->tell();
# spent 10µs making 7 calls to Archive::Zip::FileMember::fh, avg 1µs/call # spent 10µs making 7 calls to IO::Seekable::tell, avg 1µs/call
179
18072µs if ($bitFlag & GPBF_HAS_DATA_DESCRIPTOR_MASK) {
181
182 # Read the crc32, compressedSize, and uncompressedSize from the
183 # extended data descriptor, which directly follows the compressed data.
184 #
185 # Skip over the compressed file data (assumes that EOCD compressedSize
186 # was correct)
187 $self->fh()->seek($self->{'compressedSize'}, IO::Seekable::SEEK_CUR)
188 or return _ioError("seeking to extended local header");
189
190 # these values should be set correctly from before.
191 my $oldCrc32 = $self->{'eocdCrc32'};
192 my $oldCompressedSize = $self->{'compressedSize'};
193 my $oldUncompressedSize = $self->{'uncompressedSize'};
194
195 my $status = $self->_readDataDescriptor($zip64);
196 return $status unless $status == AZ_OK;
197
198 # The buffer with encrypted data is prefixed with a new
199 # encrypted 12 byte header. The size only changes when
200 # the buffer is also compressed
201 $self->isEncrypted && $oldUncompressedSize > $self->{'uncompressedSize'}
202 and $oldUncompressedSize -= DATA_DESCRIPTOR_LENGTH;
203
204 return _formatError(
205 "CRC or size mismatch while skipping data descriptor")
206 if ( $oldCrc32 != $self->{'crc32'}
207 || $oldUncompressedSize != $self->{'uncompressedSize'});
208
209 $self->{'crc32'} = 0
210 if $self->compressionMethod() == COMPRESSION_STORED ;
211 }
212
21378µs return AZ_OK;
214}
215
216# Read from a local file header into myself. Returns AZ_OK (in
217# scalar context) or a pair (AZ_OK, $headerSize) (in list
218# context) if successful.
219# Assumes that fh is positioned after signature.
220# Note that crc32, compressedSize, and uncompressedSize will be 0 if
221# GPBF_HAS_DATA_DESCRIPTOR_MASK is set in the bitFlag.
222
223sub _readLocalFileHeader {
224 my $self = shift;
225 my $header;
226 my $bytesRead = $self->fh()->read($header, LOCAL_FILE_HEADER_LENGTH);
227 if ($bytesRead != LOCAL_FILE_HEADER_LENGTH) {
228 return _ioError("reading local file header");
229 }
230 my $fileNameLength;
231 my $crc32;
232 my $compressedSize;
233 my $uncompressedSize;
234 my $extraFieldLength;
235 (
236 $self->{'versionNeededToExtract'}, $self->{'bitFlag'},
237 $self->{'compressionMethod'}, $self->{'lastModFileDateTime'},
238 $crc32, $compressedSize,
239 $uncompressedSize, $fileNameLength,
240 $extraFieldLength
241 ) = unpack(LOCAL_FILE_HEADER_FORMAT, $header);
242
243 if ($fileNameLength) {
244 my $fileName;
245 $bytesRead = $self->fh()->read($fileName, $fileNameLength);
246 if ($bytesRead != $fileNameLength) {
247 return _ioError("reading local file name");
248 }
249 $self->fileName($fileName);
250 }
251
252 my $zip64 = 0;
253 if ($extraFieldLength) {
254 $bytesRead =
255 $self->fh()->read($self->{'localExtraField'}, $extraFieldLength);
256 if ($bytesRead != $extraFieldLength) {
257 return _ioError("reading local extra field");
258 }
259 if ($self->{'archiveZip64'}) {
260 my $status;
261 ($status, $zip64) =
262 $self->_extractZip64ExtraField($self->{'localExtraField'},
263 $uncompressedSize,
264 $compressedSize);
265 return $status if $status != AZ_OK;
266 $self->{'zip64'} ||= $zip64;
267 }
268 }
269
270 $self->{'dataOffset'} = $self->fh()->tell();
271
272 if ($self->hasDataDescriptor()) {
273
274 # Read the crc32, compressedSize, and uncompressedSize from the
275 # extended data descriptor.
276 # Skip over the compressed file data (assumes that EOCD compressedSize
277 # was correct)
278 $self->fh()->seek($self->{'compressedSize'}, IO::Seekable::SEEK_CUR)
279 or return _ioError("seeking to extended local header");
280
281 my $status = $self->_readDataDescriptor($zip64);
282 return $status unless $status == AZ_OK;
283 } else {
284 return _formatError(
285 "CRC or size mismatch after reading data descriptor")
286 if ( $self->{'crc32'} != $crc32
287 || $self->{'uncompressedSize'} != $uncompressedSize);
288 }
289
290 return
291 wantarray
292 ? (AZ_OK,
293 SIGNATURE_LENGTH,
294 LOCAL_FILE_HEADER_LENGTH +
295 $fileNameLength +
296 $extraFieldLength)
297 : AZ_OK;
298}
299
300# This will read the data descriptor, which is after the end of compressed file
301# data in members that have GPBF_HAS_DATA_DESCRIPTOR_MASK set in their bitFlag.
302# The only reliable way to find these is to rely on the EOCD compressedSize.
303# Assumes that file is positioned immediately after the compressed data.
304# Returns status; sets crc32, compressedSize, and uncompressedSize.
305sub _readDataDescriptor {
306 my $self = shift;
307 my $zip64 = shift;
308 my $signatureData;
309 my $header;
310 my $crc32;
311 my $compressedSize;
312 my $uncompressedSize;
313
314 my $bytesRead = $self->fh()->read($signatureData, SIGNATURE_LENGTH);
315 return _ioError("reading header signature")
316 if $bytesRead != SIGNATURE_LENGTH;
317 my $signature = unpack(SIGNATURE_FORMAT, $signatureData);
318
319 my $dataDescriptorLength;
320 my $dataDescriptorFormat;
321 my $dataDescriptorLengthNoSig;
322 my $dataDescriptorFormatNoSig;
323 if (! $zip64) {
324 $dataDescriptorLength = DATA_DESCRIPTOR_LENGTH;
325 $dataDescriptorFormat = DATA_DESCRIPTOR_FORMAT;
326 $dataDescriptorLengthNoSig = DATA_DESCRIPTOR_LENGTH_NO_SIG;
327 $dataDescriptorFormatNoSig = DATA_DESCRIPTOR_FORMAT_NO_SIG
328 }
329 else {
330 $dataDescriptorLength = DATA_DESCRIPTOR_ZIP64_LENGTH;
331 $dataDescriptorFormat = DATA_DESCRIPTOR_ZIP64_FORMAT;
332 $dataDescriptorLengthNoSig = DATA_DESCRIPTOR_ZIP64_LENGTH_NO_SIG;
333 $dataDescriptorFormatNoSig = DATA_DESCRIPTOR_ZIP64_FORMAT_NO_SIG
334 }
335
336 # unfortunately, the signature appears to be optional.
337 if ($signature == DATA_DESCRIPTOR_SIGNATURE
338 && ($signature != $self->{'crc32'})) {
339 $bytesRead = $self->fh()->read($header, $dataDescriptorLength);
340 return _ioError("reading data descriptor")
341 if $bytesRead != $dataDescriptorLength;
342
343 ($crc32, $compressedSize, $uncompressedSize) =
344 unpack($dataDescriptorFormat, $header);
345 } else {
346 $bytesRead = $self->fh()->read($header, $dataDescriptorLengthNoSig);
347 return _ioError("reading data descriptor")
348 if $bytesRead != $dataDescriptorLengthNoSig;
349
350 $crc32 = $signature;
351 ($compressedSize, $uncompressedSize) =
352 unpack($dataDescriptorFormatNoSig, $header);
353 }
354
355 $self->{'eocdCrc32'} = $self->{'crc32'}
356 unless defined($self->{'eocdCrc32'});
357 $self->{'crc32'} = $crc32;
358 $self->{'compressedSize'} = $compressedSize;
359 $self->{'uncompressedSize'} = $uncompressedSize;
360
361 return AZ_OK;
362}
363
364# Read a Central Directory header. Return AZ_OK on success.
365# Assumes that fh is positioned right after the signature.
366
367
# spent 178µs (98+80) within Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader which was called 10 times, avg 18µs/call: # 10 times (98µs+80µs) by Archive::Zip::Archive::readFromFileHandle at line 792 of Archive/Zip/Archive.pm, avg 18µs/call
sub _readCentralDirectoryFileHeader {
36810400ns my $self = shift;
369106µs1023µs my $fh = $self->fh();
# spent 23µs making 10 calls to Archive::Zip::FileMember::fh, avg 2µs/call
370101µs my $header = '';
371105µs1012µs my $bytesRead = $fh->read($header, CENTRAL_DIRECTORY_FILE_HEADER_LENGTH);
# spent 12µs making 10 calls to IO::Handle::read, avg 1µs/call
372101µs if ($bytesRead != CENTRAL_DIRECTORY_FILE_HEADER_LENGTH) {
373 return _ioError("reading central dir header");
374 }
375101µs my ($fileNameLength, $extraFieldLength, $fileCommentLength);
376 (
377 $self->{'versionMadeBy'},
378 $self->{'fileAttributeFormat'},
379 $self->{'versionNeededToExtract'},
380 $self->{'bitFlag'},
381 $self->{'compressionMethod'},
382 $self->{'lastModFileDateTime'},
383 $self->{'crc32'},
384 $self->{'compressedSize'},
385 $self->{'uncompressedSize'},
386 $fileNameLength,
387 $extraFieldLength,
388 $fileCommentLength,
389 $self->{'diskNumberStart'},
390 $self->{'internalFileAttributes'},
391 $self->{'externalFileAttributes'},
3921025µs105µs $self->{'localHeaderRelativeOffset'}
# spent 5µs making 10 calls to CORE::unpack, avg 540ns/call
393 ) = unpack(CENTRAL_DIRECTORY_FILE_HEADER_FORMAT, $header);
394
395102µs $self->{'eocdCrc32'} = $self->{'crc32'};
396
397102µs if ($fileNameLength) {
398105µs1011µs $bytesRead = $fh->read($self->{'fileName'}, $fileNameLength);
# spent 11µs making 10 calls to IO::Handle::read, avg 1µs/call
399101µs if ($bytesRead != $fileNameLength) {
400 _ioError("reading central dir filename");
401 }
402 }
403101µs if ($extraFieldLength) {
404 $bytesRead = $fh->read($self->{'cdExtraField'}, $extraFieldLength);
405 if ($bytesRead != $extraFieldLength) {
406 return _ioError("reading central dir extra field");
407 }
408 if ($self->{'archiveZip64'}) {
409 my ($status, $zip64) =
410 $self->_extractZip64ExtraField($self->{'cdExtraField'},
411 $self->{'uncompressedSize'},
412 $self->{'compressedSize'},
413 $self->{'localHeaderRelativeOffset'},
414 $self->{'diskNumberStart'});
415 return $status if $status != AZ_OK;
416 $self->{'zip64'} ||= $zip64;
417 }
418 }
41910900ns if ($fileCommentLength) {
420 $bytesRead = $fh->read($self->{'fileComment'}, $fileCommentLength);
421 if ($bytesRead != $fileCommentLength) {
422 return _ioError("reading central dir file comment");
423 }
424 }
425
426 # NK 10/21/04: added to avoid problems with manipulated headers
427103µs if ( $self->{'uncompressedSize'} != $self->{'compressedSize'}
428 and $self->{'compressionMethod'} == COMPRESSION_STORED) {
429 $self->{'uncompressedSize'} = $self->{'compressedSize'};
430 }
431
4321011µs2029µs $self->desiredCompressionMethod($self->compressionMethod());
# spent 24µs making 10 calls to Archive::Zip::Member::desiredCompressionMethod, avg 2µs/call # spent 5µs making 10 calls to Archive::Zip::Member::compressionMethod, avg 470ns/call
433
434109µs return AZ_OK;
435}
436
437
# spent 1.85ms (91µs+1.76) within Archive::Zip::ZipFileMember::rewindData which was called 7 times, avg 264µs/call: # 7 times (91µs+1.76ms) by Archive::Zip::Member::contents at line 1290 of Archive/Zip/Member.pm, avg 264µs/call
sub rewindData {
4387800ns my $self = shift;
439
44077µs7912µs my $status = $self->SUPER::rewindData(@_);
# spent 912µs making 7 calls to Archive::Zip::Member::rewindData, avg 130µs/call
44172µs return $status unless $status == AZ_OK;
442
44376µs7425µs return AZ_IO_ERROR unless $self->fh();
# spent 425µs making 7 calls to Archive::Zip::FileMember::fh, avg 61µs/call
444
445723µs1424µs $self->fh()->clearerr();
# spent 18µs making 7 calls to Archive::Zip::FileMember::fh, avg 2µs/call # spent 7µs making 7 calls to IO::Handle::clearerr, avg 957ns/call
446
447 # Seek to local file header.
448 # The only reason that I'm doing this this way is that the extraField
449 # length seems to be different between the CD header and the LF header.
45076µs7193µs $status = $self->_seekToLocalHeader();
# spent 193µs making 7 calls to Archive::Zip::ZipFileMember::_seekToLocalHeader, avg 28µs/call
45171µs return $status unless $status == AZ_OK;
452
453 # skip local file header
45477µs7162µs $status = $self->_skipLocalFileHeader();
# spent 162µs making 7 calls to Archive::Zip::ZipFileMember::_skipLocalFileHeader, avg 23µs/call
45571µs return $status unless $status == AZ_OK;
456
457 # Seek to beginning of file data
458710µs2142µs $self->fh()->seek($self->dataOffset(), IO::Seekable::SEEK_SET)
# spent 21µs making 7 calls to Archive::Zip::FileMember::fh, avg 3µs/call # spent 17µs making 7 calls to IO::Seekable::seek, avg 2µs/call # spent 4µs making 7 calls to Archive::Zip::ZipFileMember::dataOffset, avg 557ns/call
459 or return _ioError("seeking to beginning of file data");
460
46178µs return AZ_OK;
462}
463
464# Return bytes read. Note that first parameter is a ref to a buffer.
465# my $data;
466# my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize );
467
# spent 591µs (22+569) within Archive::Zip::ZipFileMember::_readRawChunk which was called 7 times, avg 84µs/call: # 7 times (22µs+569µs) by Archive::Zip::Member::readChunk at line 1118 of Archive/Zip/Member.pm, avg 84µs/call
sub _readRawChunk {
46872µs my ($self, $dataRef, $chunkSize) = @_;
46971µs return (0, AZ_OK) unless $chunkSize;
47077µs14569µs my $bytesRead = $self->fh()->read($$dataRef, $chunkSize)
# spent 558µs making 7 calls to IO::Handle::read, avg 80µs/call # spent 11µs making 7 calls to Archive::Zip::FileMember::fh, avg 2µs/call
471 or return (0, _ioError("reading data"));
47277µs return ($bytesRead, AZ_OK);
473}
474
47512µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 9)[File-Path-pm-22]-90-line.html0000644000175000017500000003010114576335353024214 0ustar michamicha Profile of (eval 9)[File/Path.pm:22]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 9)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Path.pm:22]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Path.pm line 22
Line State
ments
Time
on line
Calls Time
in subs
Code
112µs2.18
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 61)[XML-Twig-pm-7113]-178-line.html0000644000175000017500000004106314576335353024341 0ustar michamicha Profile of (eval 61)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 61)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 9 statements in 92µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs32µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1117µs18µsXML::Twig::Elt::::BEGIN@1.5XML::Twig::Elt::BEGIN@1.5
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1992µs551µs
# spent 18µs (7+11) within XML::Twig::Elt::BEGIN@1.5 which was called: # once (7µs+11µs) by XML::Twig::Elt::_install_xpath at line 1 # spent 32µs (9+22) within XML::Twig::Elt::__ANON__[(eval 61)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (9µs+22µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { grep { ((defined $_->{'att'}->{"Type"}) && ($_->{'att'}->{"Type"} eq "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles")) } $_->descendants( 'packagerels:Relationship') } @results;return XML::Twig::_unique_elts( @results); }
# spent 18µs making 1 call to XML::Twig::Elt::BEGIN@1.5 # spent 15µs making 1 call to XML::Twig::descendants # spent 11µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig # spent 3µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/subs-callgraph.dot0000644000175000017500000070217614576335353021576 0ustar michamichadigraph { graph [overlap=false] subgraph cluster_POSIX { label="POSIX"; "POSIX::BEGIN@2"; "POSIX::load_imports"; "POSIX::BEGIN@225"; "POSIX::BEGIN@3"; "POSIX::BEGIN@11"; "POSIX::import"; } subgraph cluster_Carp { label="Carp"; "Carp::BEGIN@6"; "Carp::BEGIN@751"; "Carp::BEGIN@188"; "Carp::BEGIN@95"; "Carp::BEGIN@61"; "Carp::BEGIN@5"; "Carp::BEGIN@49"; "Carp::BEGIN@137"; "Carp::BEGIN@4"; "Carp::_fetch_sub"; "Carp::BEGIN@1"; "Carp::_univ_mod_loaded"; "Carp::BEGIN@3"; "Carp::BEGIN@73"; "Carp::BEGIN@169"; "Carp::BEGIN@730"; "Carp::BEGIN@574"; "Carp::BEGIN@256"; "Carp::BEGIN@744"; "Carp::BEGIN@296"; } subgraph cluster_XML_Twig_Notation { label="XML::Twig::Notation"; "XML::Twig::Notation::BEGIN@5023"; } subgraph cluster_Archive_Zip_Member { label="Archive::Zip::Member"; "Archive::Zip::Member::contents"; "Archive::Zip::Member::endRead"; "Archive::Zip::Member::rewindData"; "Archive::Zip::Member::compressionMethod"; "Archive::Zip::Member::BEGIN@19"; "Archive::Zip::Member::__ANON__"; "Archive::Zip::Member::BEGIN@27"; "Archive::Zip::Member::BEGIN@5"; "Archive::Zip::Member::readIsDone"; "Archive::Zip::Member::BEGIN@8"; "Archive::Zip::Member::_inflateChunk"; "Archive::Zip::Member::BEGIN@34"; "Archive::Zip::Member::desiredCompressionMethod"; "Archive::Zip::Member::BEGIN@33"; "Archive::Zip::Member::uncompressedSize"; "Archive::Zip::Member::BEGIN@29"; "Archive::Zip::Member::_inflater"; "Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS"; "Archive::Zip::Member::_mapPermissionsToUnix"; "Archive::Zip::Member::BEGIN@36"; "Archive::Zip::Member::localExtraField"; "Archive::Zip::Member::BEGIN@37"; "Archive::Zip::Member::BEGIN@30"; "Archive::Zip::Member::_revbe"; "Archive::Zip::Member::BEGIN@1517"; "Archive::Zip::Member::new"; "Archive::Zip::Member::BEGIN@28"; "Archive::Zip::Member::BEGIN@35"; "Archive::Zip::Member::_readDataRemaining"; "Archive::Zip::Member::_dataEnded"; "Archive::Zip::Member::_newFromZipFile"; "Archive::Zip::Member::unixFileAttributes"; "Archive::Zip::Member::isEncrypted"; "Archive::Zip::Member::fileName"; "Archive::Zip::Member::BEGIN@578"; "Archive::Zip::Member::readChunk"; "Archive::Zip::Member::compressedSize"; "Archive::Zip::Member::_mapPermissionsFromUnix"; "Archive::Zip::Member::BEGIN@6"; } subgraph cluster_builtin { label="builtin"; "builtin::BEGIN@4"; "builtin::BEGIN@3"; "builtin::import"; } subgraph cluster_Errno { label="Errno"; "Errno::TIEHASH"; "Errno::BEGIN@9"; "Errno::BEGIN@11"; "Errno::BEGIN@21"; "Errno::_tie_it"; "Errno::BEGIN@8"; } subgraph cluster_Test2_Event_Bail { label="Test2::Event::Bail"; "Test2::Event::Bail::BEGIN@8"; "Test2::Event::Bail::BEGIN@2"; "Test2::Event::Bail::BEGIN@3"; "Test2::Event::Bail::BEGIN@9"; } subgraph cluster_XSLoader { label="XSLoader"; "XSLoader::load"; } subgraph cluster_Test2_Event_Waiting { label="Test2::Event::Waiting"; "Test2::Event::Waiting::BEGIN@3"; "Test2::Event::Waiting::BEGIN@2"; "Test2::Event::Waiting::BEGIN@8"; "Test2::Event::Waiting::BEGIN@9"; } subgraph cluster_Test2_Util_Facets2Legacy { label="Test2::Util::Facets2Legacy"; "Test2::Util::Facets2Legacy::BEGIN@8"; "Test2::Util::Facets2Legacy::BEGIN@7"; "Test2::Util::Facets2Legacy::BEGIN@3"; "Test2::Util::Facets2Legacy::BEGIN@10"; "Test2::Util::Facets2Legacy::BEGIN@1"; "Test2::Util::Facets2Legacy::BEGIN@2"; } subgraph cluster_Test2_Event_V2 { label="Test2::Event::V2"; "Test2::Event::V2::BEGIN@7"; "Test2::Event::V2::non_facet_keys"; "Test2::Event::V2::BEGIN@8"; "Test2::Event::V2::BEGIN@10"; "Test2::Event::V2::BEGIN@12"; "Test2::Event::V2::BEGIN@2"; "Test2::Event::V2::init"; "Test2::Event::V2::BEGIN@17"; "Test2::Event::V2::BEGIN@3"; "Test2::Event::V2::facet_data"; } subgraph cluster_Test2_EventFacet_Amnesty { label="Test2::EventFacet::Amnesty"; "Test2::EventFacet::Amnesty::BEGIN@2"; "Test2::EventFacet::Amnesty::BEGIN@10"; "Test2::EventFacet::Amnesty::BEGIN@3"; "Test2::EventFacet::Amnesty::BEGIN@9"; } subgraph cluster_IO_File { label="IO::File"; "IO::File::new"; "IO::File::BEGIN@120"; "IO::File::__ANON__"; "IO::File::BEGIN@123"; "IO::File::BEGIN@122"; "IO::File::BEGIN@119"; "IO::File::BEGIN@121"; "IO::File::open"; "IO::File::BEGIN@124"; } subgraph cluster_Digest_Perl_MD5 { label="Digest::Perl::MD5"; "Digest::Perl::MD5::BEGIN@2"; "Digest::Perl::MD5::BEGIN@5"; "Digest::Perl::MD5::BEGIN@3"; "Digest::Perl::MD5::gen_code"; "Digest::Perl::MD5::BEGIN@4"; } subgraph cluster_version { label="version"; "version::(bool"; "version::(cmp"; } subgraph cluster_mro { label="mro"; "mro::BEGIN@10"; "mro::BEGIN@11"; "mro::method_changed_in"; "mro::get_linear_isa"; } subgraph cluster_Exporter_Heavy { label="Exporter::Heavy"; "Exporter::Heavy::heavy_export"; "Exporter::Heavy::heavy_export_tags"; "Exporter::Heavy::heavy_export_to_level"; "Exporter::Heavy::BEGIN@3"; "Exporter::Heavy::_push_tags"; "Exporter::Heavy::heavy_export_ok_tags"; "Exporter::Heavy::_rebuild_cache"; "Exporter::Heavy::BEGIN@202"; "Exporter::Heavy::BEGIN@4"; } subgraph cluster_overloading { label="overloading"; "overloading::BEGIN@2"; "overloading::unimport"; } subgraph cluster_constant { label="constant"; "constant::BEGIN@141"; "constant::BEGIN@24"; "constant::import"; "constant::BEGIN@2"; "constant::BEGIN@4"; "constant::BEGIN@3"; "constant::BEGIN@90"; "constant::BEGIN@40"; "constant::BEGIN@65"; } subgraph cluster_File_Basename { label="File::Basename"; "File::Basename::BEGIN@42"; "File::Basename::BEGIN@50"; "File::Basename::fileparse_set_fstype"; "File::Basename::BEGIN@52"; "File::Basename::BEGIN@371"; "File::Basename::BEGIN@51"; } subgraph cluster_File_Glob { label="File::Glob"; "File::Glob::BEGIN@54"; "File::Glob::BEGIN@3"; "File::Glob::GLOB_CSH"; "File::Glob::BEGIN@50"; } subgraph cluster_Test2_Event_Subtest { label="Test2::Event::Subtest"; "Test2::Event::Subtest::BEGIN@2"; "Test2::Event::Subtest::BEGIN@20"; "Test2::Event::Subtest::BEGIN@8"; "Test2::Event::Subtest::BEGIN@3"; "Test2::Event::Subtest::BEGIN@7"; } subgraph cluster_XML_Parser_Expat { label="XML::Parser::Expat"; "XML::Parser::Expat::ParseString"; "XML::Parser::Expat::RecognizedString"; "XML::Parser::Expat::NamespaceEnd"; "XML::Parser::Expat::SetAttListDeclHandler"; "XML::Parser::Expat::ParserFree"; "XML::Parser::Expat::BEGIN@460"; "XML::Parser::Expat::SetStartElementHandler"; "XML::Parser::Expat::DESTROY"; "XML::Parser::Expat::current_ns_prefixes"; "XML::Parser::Expat::BEGIN@3"; "XML::Parser::Expat::SetProcessingInstructionHandler"; "XML::Parser::Expat::BEGIN@7"; "XML::Parser::Expat::depth"; "XML::Parser::Expat::SetEndCdataHandler"; "XML::Parser::Expat::ParserCreate"; "XML::Parser::Expat::BEGIN@14"; "XML::Parser::Expat::SetDoctypeHandler"; "XML::Parser::Expat::new_ns_prefixes"; "XML::Parser::Expat::SetCharacterDataHandler"; "XML::Parser::Expat::SetDefaultHandler"; "XML::Parser::Expat::setHandlers"; "XML::Parser::Expat::SetNotationDeclHandler"; "XML::Parser::Expat::SetXMLDeclHandler"; "XML::Parser::Expat::NamespaceStart"; "XML::Parser::Expat::expand_ns_prefix"; "XML::Parser::Expat::SetEntityDeclHandler"; "XML::Parser::Expat::SetElementDeclHandler"; "XML::Parser::Expat::BEGIN@8"; "XML::Parser::Expat::new"; "XML::Parser::Expat::recognized_string"; "XML::Parser::Expat::ParserRelease"; "XML::Parser::Expat::namespace"; "XML::Parser::Expat::release"; "XML::Parser::Expat::SetExternalEntityRefHandler"; "XML::Parser::Expat::SetStartCdataHandler"; "XML::Parser::Expat::SetEndElementHandler"; "XML::Parser::Expat::SetCommentHandler"; "XML::Parser::Expat::parse"; } subgraph cluster_Test2_EventFacet_Trace { label="Test2::EventFacet::Trace"; "Test2::EventFacet::Trace::init"; "Test2::EventFacet::Trace::BEGIN@3"; "Test2::EventFacet::Trace::BEGIN@11"; "Test2::EventFacet::Trace::BEGIN@10"; "Test2::EventFacet::Trace::BEGIN@16"; "Test2::EventFacet::Trace::BEGIN@7"; "Test2::EventFacet::Trace::snapshot"; "Test2::EventFacet::Trace::BEGIN@2"; "Test2::EventFacet::Trace::BEGIN@9"; "Test2::EventFacet::Trace::call"; "Test2::EventFacet::Trace::BEGIN@13"; } subgraph cluster_Archive_Zip_FileMember { label="Archive::Zip::FileMember"; "Archive::Zip::FileMember::_openFile"; "Archive::Zip::FileMember::BEGIN@3"; "Archive::Zip::FileMember::BEGIN@6"; "Archive::Zip::FileMember::endRead"; "Archive::Zip::FileMember::BEGIN@4"; "Archive::Zip::FileMember::fh"; "Archive::Zip::FileMember::externalFileName"; "Archive::Zip::FileMember::BEGIN@11"; } subgraph cluster_Test2_Formatter_TAP { label="Test2::Formatter::TAP"; "Test2::Formatter::TAP::print_optimal_pass"; "Test2::Formatter::TAP::event_tap"; "Test2::Formatter::TAP::_open_handles"; "Test2::Formatter::TAP::BEGIN@2"; "Test2::Formatter::TAP::summary_tap"; "Test2::Formatter::TAP::BEGIN@7"; "Test2::Formatter::TAP::plan_tap"; "Test2::Formatter::TAP::BEGIN@9"; "Test2::Formatter::TAP::_autoflush"; "Test2::Formatter::TAP::BEGIN@3"; "Test2::Formatter::TAP::BEGIN@113"; "Test2::Formatter::TAP::write"; "Test2::Formatter::TAP::BEGIN@89"; "Test2::Formatter::TAP::BEGIN@17"; "Test2::Formatter::TAP::OUT_ERR"; "Test2::Formatter::TAP::init"; } subgraph cluster_Encode_Encoding { label="Encode::Encoding"; "Encode::Encoding::BEGIN@11"; "Encode::Encoding::BEGIN@4"; "Encode::Encoding::__ANON__"; "Encode::Encoding::BEGIN@10"; "Encode::Encoding::BEGIN@5"; "Encode::Encoding::BEGIN@14"; "Encode::Encoding::BEGIN@12"; } subgraph cluster_Test2_Hub_Interceptor_Terminator { label="Test2::Hub::Interceptor::Terminator"; "Test2::Hub::Interceptor::Terminator::BEGIN@2"; "Test2::Hub::Interceptor::Terminator::BEGIN@3"; } subgraph cluster_CORE { label="CORE"; "CORE::readline"; "CORE::pack"; "CORE::qr"; "CORE::sort"; "CORE::subst"; "CORE::match"; "CORE::fteexec"; "CORE::binmode"; "CORE::seek"; "CORE::close"; "CORE::open"; "CORE::substcont"; "CORE::tell"; "CORE::print"; "CORE::unpack"; "CORE::regcomp"; "CORE::read"; "CORE::ftdir"; "CORE::select"; "CORE::symlink"; } subgraph cluster_Test2_EventFacet_Parent { label="Test2::EventFacet::Parent"; "Test2::EventFacet::Parent::BEGIN@10"; "Test2::EventFacet::Parent::BEGIN@3"; "Test2::EventFacet::Parent::BEGIN@9"; "Test2::EventFacet::Parent::BEGIN@2"; "Test2::EventFacet::Parent::BEGIN@7"; } subgraph cluster_IO_Seekable { label="IO::Seekable"; "IO::Seekable::seek"; "IO::Seekable::BEGIN@103"; "IO::Seekable::BEGIN@97"; "IO::Seekable::BEGIN@98"; "IO::Seekable::tell"; "IO::Seekable::BEGIN@99"; "IO::Seekable::BEGIN@100"; } subgraph cluster_Storable { label="Storable"; "Storable::BEGIN@487"; "Storable::BEGIN@109"; "Storable::BEGIN@66"; "Storable::BEGIN@83"; "Storable::BEGIN@44"; "Storable::BEGIN@42"; "Storable::BEGIN@30"; } subgraph cluster_Test_Builder { label="Test::Builder"; "Test::Builder::BEGIN@1251"; "Test::Builder::BEGIN@116"; "Test::Builder::BEGIN@131"; "Test::Builder::BEGIN@62"; "Test::Builder::__ANON__[Test/Builder.pm:148]"; "Test::Builder::BEGIN@61"; "Test::Builder::BEGIN@36"; "Test::Builder::BEGIN@4"; "Test::Builder::ok"; "Test::Builder::BEGIN@5"; "Test::Builder::done_testing"; "Test::Builder::BEGIN@693"; "Test::Builder::BEGIN@1539"; "Test::Builder::BEGIN@120"; "Test::Builder::BEGIN@1540"; "Test::Builder::BEGIN@102"; "Test::Builder::BEGIN@1518"; "Test::Builder::INIT"; "Test::Builder::BEGIN@18"; "Test::Builder::_ending"; "Test::Builder::BEGIN@15"; "Test::Builder::BEGIN@3"; "Test::Builder::BEGIN@37"; "Test::Builder::BEGIN@797"; "Test::Builder::BEGIN@1557"; "Test::Builder::BEGIN@20"; "Test::Builder::BEGIN@17"; "Test::Builder::BEGIN@684"; "Test::Builder::__ANON__"; "Test::Builder::ctx"; "Test::Builder::use_numbers"; "Test::Builder::BEGIN@34"; "Test::Builder::reset"; "Test::Builder::BEGIN@1519"; "Test::Builder::BEGIN@33"; "Test::Builder::BEGIN@1556"; "Test::Builder::exported_to"; "Test::Builder::reset_outputs"; "Test::Builder::BEGIN@117"; "Test::Builder::BEGIN@1167"; "Test::Builder::plan"; "Test::Builder::new"; "Test::Builder::BEGIN@103"; "Test::Builder::create"; "Test::Builder::expected_tests"; "Test::Builder::BEGIN@1232"; "Test::Builder::current_test"; "Test::Builder::BEGIN@1057"; "Test::Builder::__ANON__[Test/Builder.pm:154]"; "Test::Builder::__ANON__[Test/Builder.pm:88]"; "Test::Builder::__ANON__[Test/Builder.pm:156]"; "Test::Builder::BEGIN@133"; "Test::Builder::BEGIN@9"; "Test::Builder::_add_ts_hooks"; "Test::Builder::BEGIN@121"; } subgraph cluster_JSON_Backend_PP { label="JSON::Backend::PP"; "JSON::Backend::PP::init"; "JSON::Backend::PP::BEGIN@342"; } subgraph cluster_FileHandle { label="FileHandle"; "FileHandle::BEGIN@3"; "FileHandle::BEGIN@4"; "FileHandle::BEGIN@46"; } subgraph cluster_Cwd { label="Cwd"; "Cwd::BEGIN@3"; "Cwd::BEGIN@41"; "Cwd::BEGIN@2"; "Cwd::BEGIN@644"; } subgraph cluster_IO { label="IO"; "IO::BEGIN@5"; "IO::BEGIN@6"; "IO::BEGIN@7"; "IO::BEGIN@8"; } subgraph cluster_Test2_Util_ExternalMeta { label="Test2::Util::ExternalMeta"; "Test2::Util::ExternalMeta::BEGIN@8"; "Test2::Util::ExternalMeta::BEGIN@13"; "Test2::Util::ExternalMeta::BEGIN@2"; "Test2::Util::ExternalMeta::validate_key"; "Test2::Util::ExternalMeta::BEGIN@3"; "Test2::Util::ExternalMeta::meta"; } subgraph cluster_strict { label="strict"; "strict::unimport"; "strict::import"; } subgraph cluster_IO_Handle { label="IO::Handle"; "IO::Handle::read"; "IO::Handle::_open_mode_string"; "IO::Handle::clearerr"; "IO::Handle::__ANON__"; "IO::Handle::BEGIN@273"; "IO::Handle::opened"; "IO::Handle::BEGIN@274"; "IO::Handle::BEGIN@271"; "IO::Handle::BEGIN@272"; "IO::Handle::new"; "IO::Handle::BEGIN@276"; "IO::Handle::binmode"; "IO::Handle::BEGIN@275"; "IO::Handle::BEGIN@617"; "IO::Handle::close"; } subgraph cluster_Spreadsheet_ParseExcel_Font { label="Spreadsheet::ParseExcel::Font"; "Spreadsheet::ParseExcel::Font::BEGIN@20"; "Spreadsheet::ParseExcel::Font::new"; "Spreadsheet::ParseExcel::Font::BEGIN@19"; } subgraph cluster_Test2_Event_Plan { label="Test2::Event::Plan"; "Test2::Event::Plan::BEGIN@3"; "Test2::Event::Plan::facet_data"; "Test2::Event::Plan::BEGIN@9"; "Test2::Event::Plan::BEGIN@2"; "Test2::Event::Plan::init"; "Test2::Event::Plan::BEGIN@8"; "Test2::Event::Plan::BEGIN@11"; } subgraph cluster_Test2_Hub_Interceptor { label="Test2::Hub::Interceptor"; "Test2::Hub::Interceptor::BEGIN@8"; "Test2::Hub::Interceptor::BEGIN@2"; "Test2::Hub::Interceptor::BEGIN@10"; "Test2::Hub::Interceptor::BEGIN@3"; "Test2::Hub::Interceptor::BEGIN@11"; "Test2::Hub::Interceptor::BEGIN@93"; } subgraph cluster_File_Temp_Dir { label="File::Temp::Dir"; "File::Temp::Dir::BEGIN@2601"; "File::Temp::Dir::BEGIN@2603"; "File::Temp::Dir::BEGIN@2602"; } subgraph cluster_MIME_Base64 { label="MIME::Base64"; "MIME::Base64::BEGIN@3"; "MIME::Base64::BEGIN@4"; } subgraph cluster_CryptX { label="CryptX"; "CryptX::BEGIN@4"; "CryptX::BEGIN@3"; "CryptX::BEGIN@10"; "CryptX::BEGIN@13"; } subgraph cluster_Test2_Event_Pass { label="Test2::Event::Pass"; "Test2::Event::Pass::BEGIN@3"; "Test2::Event::Pass::BEGIN@7"; "Test2::Event::Pass::BEGIN@2"; "Test2::Event::Pass::__ANON__"; "Test2::Event::Pass::BEGIN@9"; "Test2::Event::Pass::BEGIN@15"; } subgraph cluster_Spreadsheet_ParseXLSX_Cell { label="Spreadsheet::ParseXLSX::Cell"; "Spreadsheet::ParseXLSX::Cell::BEGIN@3"; "Spreadsheet::ParseXLSX::Cell::BEGIN@4"; "Spreadsheet::ParseXLSX::Cell::BEGIN@11"; "Spreadsheet::ParseXLSX::Cell::BEGIN@10"; } subgraph cluster_XML_Twig_Elt { label="XML::Twig::Elt"; "XML::Twig::Elt::BEGIN@1.42"; "XML::Twig::Elt::BEGIN@7340"; "XML::Twig::Elt::__ANON__[(eval 86)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.49"; "XML::Twig::Elt::__ANON__[(eval 67)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.74"; "XML::Twig::Elt::__ANON__[(eval 69)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::__ANON__[(eval 68)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::__ANON__[(eval 100)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::set_gi"; "XML::Twig::Elt::__ANON__[(eval 126)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::__ANON__[(eval 61)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::_op"; "XML::Twig::Elt::twig"; "XML::Twig::Elt::BEGIN@1.21"; "XML::Twig::Elt::BEGIN@1.18"; "XML::Twig::Elt::BEGIN@1.47"; "XML::Twig::Elt::__ANON__[(eval 127)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.41"; "XML::Twig::Elt::__ANON__[(eval 58)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::BEGIN@6961"; "XML::Twig::Elt::BEGIN@1.34"; "XML::Twig::Elt::set_atts"; "XML::Twig::Elt::__ANON__[(eval 94)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.35"; "XML::Twig::Elt::BEGIN@1.5"; "XML::Twig::Elt::__ANON__[(eval 70)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::next_sibling"; "XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::__ANON__[(eval 66)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::set_destroy"; "XML::Twig::Elt::att"; "XML::Twig::Elt::BEGIN@1.31"; "XML::Twig::Elt::set_output_text_filter"; "XML::Twig::Elt::BEGIN@1.19"; "XML::Twig::Elt::BEGIN@1.13"; "XML::Twig::Elt::in"; "XML::Twig::Elt::BEGIN@1.29"; "XML::Twig::Elt::ancestors"; "XML::Twig::Elt::__ANON__[(eval 73)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.27"; "XML::Twig::Elt::BEGIN@1.44"; "XML::Twig::Elt::set_expand_external_entities"; "XML::Twig::Elt::__ANON__[(eval 85)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::__ANON__[(eval 79)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::cut"; "XML::Twig::Elt::__ANON__[(eval 95)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@8119"; "XML::Twig::Elt::_install_cond"; "XML::Twig::Elt::__ANON__[(eval 76)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::__ANON__[(eval 60)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::BEGIN@1.14"; "XML::Twig::Elt::BEGIN@1.17"; "XML::Twig::Elt::next_elt"; "XML::Twig::Elt::__ANON__[(eval 97)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::BEGIN@1.36"; "XML::Twig::Elt::BEGIN@1.72"; "XML::Twig::Elt::BEGIN@5082"; "XML::Twig::Elt::BEGIN@8906"; "XML::Twig::Elt::__ANON__[(eval 59)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.24"; "XML::Twig::Elt::BEGIN@1.22"; "XML::Twig::Elt::BEGIN@1.33"; "XML::Twig::Elt::get_xpath"; "XML::Twig::Elt::new"; "XML::Twig::Elt::__ANON__[(eval 101)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::__ANON__[(eval 64)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::__ANON__[(eval 87)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::__ANON__[(eval 71)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.4"; "XML::Twig::Elt::BEGIN@1.6"; "XML::Twig::Elt::BEGIN@1.10"; "XML::Twig::Elt::BEGIN@1.26"; "XML::Twig::Elt::BEGIN@1.3"; "XML::Twig::Elt::BEGIN@1.25"; "XML::Twig::Elt::_join_defined"; "XML::Twig::Elt::__ANON__[(eval 65)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::is_elt"; "XML::Twig::Elt::BEGIN@1.9"; "XML::Twig::Elt::BEGIN@5096"; "XML::Twig::Elt::__ANON__[(eval 80)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::first_child"; "XML::Twig::Elt::__ANON__[(eval 105)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.11"; "XML::Twig::Elt::__ANON__[(eval 103)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::BEGIN@1.28"; "XML::Twig::Elt::BEGIN@1.7"; "XML::Twig::Elt::set_keep_atts_order"; "XML::Twig::Elt::BEGIN@6232"; "XML::Twig::Elt::BEGIN@1.71"; "XML::Twig::Elt::__ANON__[(eval 129)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::BEGIN@1"; "XML::Twig::Elt::set_output_filter"; "XML::Twig::Elt::delete"; "XML::Twig::Elt::keep_atts_order"; "XML::Twig::Elt::BEGIN@1.39"; "XML::Twig::Elt::__ANON__[(eval 62)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::BEGIN@1.30"; "XML::Twig::Elt::set_quote"; "XML::Twig::Elt::BEGIN@1.48"; "XML::Twig::Elt::descendants"; "XML::Twig::Elt::BEGIN@8108"; "XML::Twig::Elt::text"; "XML::Twig::Elt::__ANON__[(eval 96)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::passes"; "XML::Twig::Elt::BEGIN@1.40"; "XML::Twig::Elt::BEGIN@1.32"; "XML::Twig::Elt::BEGIN@1.37"; "XML::Twig::Elt::BEGIN@1.45"; "XML::Twig::Elt::children"; "XML::Twig::Elt::BEGIN@1.38"; "XML::Twig::Elt::set_keep_encoding"; "XML::Twig::Elt::cmp"; "XML::Twig::Elt::BEGIN@1.23"; "XML::Twig::Elt::gi"; "XML::Twig::Elt::__ANON__[(eval 90)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::__ANON__[(eval 128)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@1.70"; "XML::Twig::Elt::BEGIN@1.15"; "XML::Twig::Elt::BEGIN@1.12"; "XML::Twig::Elt::BEGIN@1.73"; "XML::Twig::Elt::_install_xpath"; "XML::Twig::Elt::__ANON__[(eval 63)[XML/Twig.pm:7113]:1]"; "XML::Twig::Elt::set_do_not_escape_amp_in_atts"; "XML::Twig::Elt::BEGIN@1.16"; "XML::Twig::Elt::_gi_test"; "XML::Twig::Elt::BEGIN@7919"; "XML::Twig::Elt::_and"; "XML::Twig::Elt::__ANON__[(eval 130)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::BEGIN@8404"; "XML::Twig::Elt::BEGIN@1.43"; "XML::Twig::Elt::BEGIN@1.8"; "XML::Twig::Elt::set_remove_cdata"; "XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::__ANON__[(eval 91)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::root"; "XML::Twig::Elt::BEGIN@1.20"; } subgraph cluster_Archive_Zip_NewFileMember { label="Archive::Zip::NewFileMember"; "Archive::Zip::NewFileMember::BEGIN@3"; "Archive::Zip::NewFileMember::BEGIN@4"; "Archive::Zip::NewFileMember::BEGIN@11"; "Archive::Zip::NewFileMember::BEGIN@6"; } subgraph cluster_integer { label="integer"; "integer::import"; "integer::unimport"; } subgraph cluster_Test2_EventFacet_Error { label="Test2::EventFacet::Error"; "Test2::EventFacet::Error::BEGIN@3"; "Test2::EventFacet::Error::BEGIN@11"; "Test2::EventFacet::Error::BEGIN@10"; "Test2::EventFacet::Error::BEGIN@2"; } subgraph cluster_Tie_StdHash { label="Tie::StdHash"; "Tie::StdHash::TIEHASH"; } subgraph cluster_File_Find { label="File::Find"; "File::Find::BEGIN@4"; "File::Find::BEGIN@7"; "File::Find::BEGIN@3"; "File::Find::BEGIN@5"; "File::Find::BEGIN@2"; "File::Find::BEGIN@13"; } subgraph cluster_Spreadsheet_ParseExcel_Cell { label="Spreadsheet::ParseExcel::Cell"; "Spreadsheet::ParseExcel::Cell::BEGIN@20"; "Spreadsheet::ParseExcel::Cell::BEGIN@19"; "Spreadsheet::ParseExcel::Cell::new"; "Spreadsheet::ParseExcel::Cell::BEGIN@169"; } subgraph cluster_File_Temp { label="File::Temp"; "File::Temp::BEGIN@147"; "File::Temp::BEGIN@229"; "File::Temp::BEGIN@176"; "File::Temp::__ANON__[File/Temp.pm:274]"; "File::Temp::BEGIN@152"; "File::Temp::cleanup"; "File::Temp::BEGIN@223"; "File::Temp::BEGIN@240"; "File::Temp::BEGIN@228"; "File::Temp::__ANON__[File/Temp.pm:252]"; "File::Temp::BEGIN@168"; "File::Temp::__ANON__"; "File::Temp::__ANON__[File/Temp.pm:244]"; "File::Temp::BEGIN@149"; "File::Temp::BEGIN@144"; "File::Temp::BEGIN@146"; "File::Temp::BEGIN@150"; "File::Temp::BEGIN@167"; "File::Temp::BEGIN@145"; "File::Temp::BEGIN@227"; "File::Temp::BEGIN@151"; "File::Temp::END"; "File::Temp::BEGIN@148"; "File::Temp::BEGIN@270"; "File::Temp::BEGIN@153"; "File::Temp::BEGIN@219"; "File::Temp::BEGIN@216"; } subgraph cluster_Compress_Raw_Zlib_inflateStream { label="Compress::Raw::Zlib::inflateStream"; "Compress::Raw::Zlib::inflateStream::inflate"; "Compress::Raw::Zlib::inflateStream::DESTROY"; } subgraph cluster_Test2_API { label="Test2::API"; "Test2::API::test2_stack"; "Test2::API::BEGIN@95"; "Test2::API::test2_unset_is_end"; "Test2::API::test2_in_preload"; "Test2::API::BEGIN@88"; "Test2::API::INIT"; "Test2::API::BEGIN@94"; "Test2::API::BEGIN@2"; "Test2::API::test2_has_ipc"; "Test2::API::BEGIN@92"; "Test2::API::test2_set_is_end"; "Test2::API::BEGIN@99"; "Test2::API::BEGIN@86"; "Test2::API::test2_add_callback_post_load"; "Test2::API::BEGIN@89"; "Test2::API::test2_ipc"; "Test2::API::BEGIN@6"; "Test2::API::BEGIN@96"; "Test2::API::BEGIN@100"; "Test2::API::BEGIN@3"; "Test2::API::BEGIN@51"; "Test2::API::BEGIN@98"; "Test2::API::test2_formatter"; "Test2::API::BEGIN@179"; "Test2::API::test2_stderr"; "Test2::API::BEGIN@85"; "Test2::API::BEGIN@93"; "Test2::API::BEGIN@102"; "Test2::API::BEGIN@71"; "Test2::API::BEGIN@76"; "Test2::API::_add_uuid_via_ref"; "Test2::API::test2_add_callback_exit"; "Test2::API::test2_load_done"; "Test2::API::BEGIN@5"; "Test2::API::test2_add_callback_context_aquire"; "Test2::API::END"; "Test2::API::_contexts_ref"; "Test2::API::test2_formatter_add"; "Test2::API::release"; "Test2::API::test2_load"; "Test2::API::BEGIN@75"; "Test2::API::_context_release_callbacks_ref"; "Test2::API::BEGIN@97"; "Test2::API::test2_stdout"; "Test2::API::BEGIN@8"; "Test2::API::BEGIN@104"; "Test2::API::test2_init_done"; "Test2::API::context"; "Test2::API::BEGIN@90"; "Test2::API::BEGIN@103"; } subgraph cluster_XML_Parser_ExpatNB { label="XML::Parser::ExpatNB"; "XML::Parser::ExpatNB::BEGIN@600"; } subgraph cluster_File_Copy { label="File::Copy"; "File::Copy::BEGIN@10"; "File::Copy::BEGIN@12"; "File::Copy::BEGIN@19"; "File::Copy::__ANON__"; "File::Copy::BEGIN@1"; "File::Copy::BEGIN@13"; "File::Copy::BEGIN@15"; "File::Copy::BEGIN@17"; "File::Copy::BEGIN@11"; "File::Copy::BEGIN@16"; "File::Copy::BEGIN@12.1"; "File::Copy::BEGIN@14"; } subgraph cluster_vars { label="vars"; "vars::import"; "vars::BEGIN@7"; "vars::BEGIN@3"; "vars::BEGIN@8"; } subgraph cluster_Test2_Util { label="Test2::Util"; "Test2::Util::BEGIN@7"; "Test2::Util::BEGIN@3"; "Test2::Util::BEGIN@89"; "Test2::Util::BEGIN@80"; "Test2::Util::gen_uid"; "Test2::Util::__ANON__"; "Test2::Util::BEGIN@123"; "Test2::Util::BEGIN@2"; "Test2::Util::BEGIN@40"; "Test2::Util::BEGIN@113"; "Test2::Util::BEGIN@132"; "Test2::Util::_can_thread"; "Test2::Util::BEGIN@8"; "Test2::Util::BEGIN@11"; "Test2::Util::BEGIN@71"; "Test2::Util::clone_io"; "Test2::Util::BEGIN@171"; "Test2::Util::BEGIN@72"; "Test2::Util::_check_for_sig_sys"; "Test2::Util::BEGIN@42"; "Test2::Util::BEGIN@206"; "Test2::Util::BEGIN@9"; } subgraph cluster_List_Util { label="List::Util"; "List::Util::import"; "List::Util::BEGIN@9"; "List::Util::BEGIN@10"; "List::Util::BEGIN@35"; } subgraph cluster_OLE_Storage_Lite_PPS_Dir { label="OLE::Storage_Lite::PPS::Dir"; "OLE::Storage_Lite::PPS::Dir::BEGIN@801"; "OLE::Storage_Lite::PPS::Dir::BEGIN@802"; } subgraph cluster_Test2_Event_Diag { label="Test2::Event::Diag"; "Test2::Event::Diag::BEGIN@8"; "Test2::Event::Diag::BEGIN@9"; "Test2::Event::Diag::BEGIN@2"; "Test2::Event::Diag::BEGIN@3"; } subgraph cluster_Fcntl { label="Fcntl"; "Fcntl::O_EXLOCK"; "Fcntl::O_TEMPORARY"; "Fcntl::O_BINARY"; "Fcntl::O_LARGEFILE"; "Fcntl::BEGIN@60"; "Fcntl::O_NOINHERIT"; "Fcntl::BEGIN@58"; "Fcntl::O_NOFOLLOW"; } subgraph cluster_Spreadsheet_ParseExcel_Worksheet { label="Spreadsheet::ParseExcel::Worksheet"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@625"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@20"; "Spreadsheet::ParseExcel::Worksheet::new"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@21"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@19"; } subgraph cluster_Archive_Zip_DirectoryMember { label="Archive::Zip::DirectoryMember"; "Archive::Zip::DirectoryMember::BEGIN@8"; "Archive::Zip::DirectoryMember::BEGIN@4"; "Archive::Zip::DirectoryMember::BEGIN@3"; "Archive::Zip::DirectoryMember::BEGIN@13"; "Archive::Zip::DirectoryMember::BEGIN@6"; } subgraph cluster_Test2_Util_HashBase { label="Test2::Util::HashBase"; "Test2::Util::HashBase::BEGIN@3"; "Test2::Util::HashBase::BEGIN@33"; "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::Util::HashBase::BEGIN@18"; "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:85]"; "Test2::Util::HashBase::import"; "Test2::Util::HashBase::BEGIN@94"; "Test2::Util::HashBase::BEGIN@37"; "Test2::Util::HashBase::BEGIN@29"; "Test2::Util::HashBase::_new"; "Test2::Util::HashBase::BEGIN@2"; } subgraph cluster_Spreadsheet_ParseExcel { label="Spreadsheet::ParseExcel"; "Spreadsheet::ParseExcel::BEGIN@34"; "Spreadsheet::ParseExcel::BEGIN@2705"; "Spreadsheet::ParseExcel::BEGIN@27"; "Spreadsheet::ParseExcel::BEGIN@68"; "Spreadsheet::ParseExcel::BEGIN@78"; "Spreadsheet::ParseExcel::BEGIN@33"; "Spreadsheet::ParseExcel::BEGIN@2628"; "Spreadsheet::ParseExcel::BEGIN@60"; "Spreadsheet::ParseExcel::BEGIN@81"; "Spreadsheet::ParseExcel::BEGIN@59"; "Spreadsheet::ParseExcel::BEGIN@23"; "Spreadsheet::ParseExcel::BEGIN@31"; "Spreadsheet::ParseExcel::BEGIN@72"; "Spreadsheet::ParseExcel::__ANON__"; "Spreadsheet::ParseExcel::BEGIN@67"; "Spreadsheet::ParseExcel::BEGIN@63"; "Spreadsheet::ParseExcel::BEGIN@64"; "Spreadsheet::ParseExcel::BEGIN@19"; "Spreadsheet::ParseExcel::BEGIN@32"; "Spreadsheet::ParseExcel::BEGIN@77"; "Spreadsheet::ParseExcel::BEGIN@21"; "Spreadsheet::ParseExcel::BEGIN@22"; "Spreadsheet::ParseExcel::BEGIN@62"; "Spreadsheet::ParseExcel::BEGIN@70"; "Spreadsheet::ParseExcel::BEGIN@75"; "Spreadsheet::ParseExcel::BEGIN@17"; "Spreadsheet::ParseExcel::BEGIN@18"; "Spreadsheet::ParseExcel::BEGIN@35"; "Spreadsheet::ParseExcel::BEGIN@36"; "Spreadsheet::ParseExcel::BEGIN@24"; "Spreadsheet::ParseExcel::BEGIN@76"; "Spreadsheet::ParseExcel::BEGIN@26"; "Spreadsheet::ParseExcel::BEGIN@58"; "Spreadsheet::ParseExcel::BEGIN@66"; "Spreadsheet::ParseExcel::BEGIN@61"; } subgraph cluster_Archive_Zip_Archive { label="Archive::Zip::Archive"; "Archive::Zip::Archive::_findEndOfCentralDirectory"; "Archive::Zip::Archive::BEGIN@10"; "Archive::Zip::Archive::memberNamed"; "Archive::Zip::Archive::members"; "Archive::Zip::Archive::read"; "Archive::Zip::Archive::BEGIN@12"; "Archive::Zip::Archive::zip64"; "Archive::Zip::Archive::BEGIN@16"; "Archive::Zip::Archive::BEGIN@11"; "Archive::Zip::Archive::BEGIN@14"; "Archive::Zip::Archive::BEGIN@21"; "Archive::Zip::Archive::_readEndOfCentralDirectory"; "Archive::Zip::Archive::eocdOffset"; "Archive::Zip::Archive::BEGIN@7"; "Archive::Zip::Archive::BEGIN@6"; "Archive::Zip::Archive::new"; "Archive::Zip::Archive::centralDirectorySize"; "Archive::Zip::Archive::membersMatching"; "Archive::Zip::Archive::BEGIN@8"; "Archive::Zip::Archive::readFromFileHandle"; "Archive::Zip::Archive::centralDirectoryOffsetWRTStartingDiskNumber"; "Archive::Zip::Archive::BEGIN@9"; "Archive::Zip::Archive::BEGIN@5"; } subgraph cluster_Spreadsheet_ParseExcel_Utility { label="Spreadsheet::ParseExcel::Utility"; "Spreadsheet::ParseExcel::Utility::BEGIN@19"; "Spreadsheet::ParseExcel::Utility::BEGIN@23"; "Spreadsheet::ParseExcel::Utility::BEGIN@20"; } subgraph cluster_Spreadsheet_ParseExcel_FmtDefault { label="Spreadsheet::ParseExcel::FmtDefault"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@20"; "Spreadsheet::ParseExcel::FmtDefault::ValFmt"; "Spreadsheet::ParseExcel::FmtDefault::new"; "Spreadsheet::ParseExcel::FmtDefault::TextFmt"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@19"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@22"; } subgraph cluster_utf8 { label="utf8"; "utf8::unimport"; "utf8::BEGIN@4"; "utf8::encode"; "utf8::import"; "utf8::BEGIN@3"; } subgraph cluster_Test_Builder_TodoDiag { label="Test::Builder::TodoDiag"; "Test::Builder::TodoDiag::BEGIN@7"; "Test::Builder::TodoDiag::BEGIN@2"; "Test::Builder::TodoDiag::BEGIN@3"; } subgraph cluster_Test2_EventFacet_Plan { label="Test2::EventFacet::Plan"; "Test2::EventFacet::Plan::BEGIN@8"; "Test2::EventFacet::Plan::BEGIN@3"; "Test2::EventFacet::Plan::BEGIN@2"; "Test2::EventFacet::Plan::BEGIN@7"; } subgraph cluster_parent { label="parent"; "parent::BEGIN@2"; "parent::import"; "parent::BEGIN@21"; } subgraph cluster_Spreadsheet_ParseXLSX_Decryptor_Agile { label="Spreadsheet::ParseXLSX::Decryptor::Agile"; "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4"; "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10"; "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3"; } subgraph cluster_Archive_Zip_StringMember { label="Archive::Zip::StringMember"; "Archive::Zip::StringMember::BEGIN@4"; "Archive::Zip::StringMember::BEGIN@3"; "Archive::Zip::StringMember::BEGIN@6"; "Archive::Zip::StringMember::BEGIN@11"; } subgraph cluster_Encode { label="Encode"; "Encode::BEGIN@5"; "Encode::BEGIN@11"; "Encode::__ANON__"; "Encode::BEGIN@56"; "Encode::BEGIN@15"; "Encode::onBOOT"; "Encode::BEGIN@9"; "Encode::BEGIN@6"; "Encode::BEGIN@7"; "Encode::define_encoding"; "Encode::BEGIN@53"; "Encode::BEGIN@54"; "Encode::BEGIN@17"; } subgraph cluster_Internals { label="Internals"; "Internals::V"; "Internals::SvREADONLY"; } subgraph cluster_Config { label="Config"; "Config::BEGIN@10"; "Config::BEGIN@47"; "Config::AUTOLOAD"; "Config::BEGIN@5"; "Config::FETCH"; "Config::import"; "Config::BEGIN@9"; "Config::BEGIN@6"; "Config::fetch_string"; "Config::launcher"; "Config::TIEHASH"; } subgraph cluster_Test2_EventFacet_Hub { label="Test2::EventFacet::Hub"; "Test2::EventFacet::Hub::BEGIN@10"; "Test2::EventFacet::Hub::BEGIN@11"; "Test2::EventFacet::Hub::BEGIN@3"; "Test2::EventFacet::Hub::BEGIN@2"; } subgraph cluster_File_Spec { label="File::Spec"; "File::Spec::BEGIN@3"; } subgraph cluster_Spreadsheet_ParseXLSX_Decryptor { label="Spreadsheet::ParseXLSX::Decryptor"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@11"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@10"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@13"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@14"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@18"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@16"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@4"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@19"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@15"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@3"; } subgraph cluster_Archive_Zip_ZipFileMember { label="Archive::Zip::ZipFileMember"; "Archive::Zip::ZipFileMember::localHeaderRelativeOffset"; "Archive::Zip::ZipFileMember::_readRawChunk"; "Archive::Zip::ZipFileMember::BEGIN@6"; "Archive::Zip::ZipFileMember::_skipLocalFileHeader"; "Archive::Zip::ZipFileMember::BEGIN@4"; "Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader"; "Archive::Zip::ZipFileMember::_seekToLocalHeader"; "Archive::Zip::ZipFileMember::BEGIN@3"; "Archive::Zip::ZipFileMember::dataOffset"; "Archive::Zip::ZipFileMember::BEGIN@11"; "Archive::Zip::ZipFileMember::_newFromZipFile"; "Archive::Zip::ZipFileMember::isDirectory"; "Archive::Zip::ZipFileMember::rewindData"; } subgraph cluster_overload { label="overload"; "overload::OVERLOAD"; "overload::BEGIN@4"; "overload::BEGIN@143"; "overload::import"; "overload::BEGIN@113"; "overload::BEGIN@102"; "overload::BEGIN@3"; "overload::BEGIN@84"; "overload::unimport"; } subgraph cluster_Test2_Event_Fail { label="Test2::Event::Fail"; "Test2::Event::Fail::BEGIN@2"; "Test2::Event::Fail::BEGIN@7"; "Test2::Event::Fail::BEGIN@3"; "Test2::Event::Fail::BEGIN@9"; "Test2::Event::Fail::BEGIN@15"; "Test2::Event::Fail::__ANON__"; } subgraph cluster_Crypt_Cipher { label="Crypt::Cipher"; "Crypt::Cipher::BEGIN@4"; "Crypt::Cipher::BEGIN@9"; "Crypt::Cipher::BEGIN@7"; "Crypt::Cipher::BEGIN@3"; } subgraph cluster_Test2_Util_Trace { label="Test2::Util::Trace"; "Test2::Util::Trace::BEGIN@4"; "Test2::Util::Trace::BEGIN@5"; } subgraph cluster_Time_HiRes { label="Time::HiRes"; "Time::HiRes::__ANON__[Time/HiRes.pm:71]"; "Time::HiRes::BEGIN@4"; "Time::HiRes::BEGIN@70"; "Time::HiRes::import"; "Time::HiRes::AUTOLOAD"; "Time::HiRes::constant"; "Time::HiRes::BEGIN@3"; "Time::HiRes::BEGIN@7"; } subgraph cluster_XML_Twig { label="XML::Twig"; "XML::Twig::_tag_cond"; "XML::Twig::BEGIN@31"; "XML::Twig::_checked_parse_result"; "XML::Twig::BEGIN@30"; "XML::Twig::_parse_xpath_handler"; "XML::Twig::BEGIN@1.54"; "XML::Twig::BEGIN@1125"; "XML::Twig::BEGIN@4159"; "XML::Twig::__ANON__[(eval 114)[XML/Twig.pm:1750]:26]"; "XML::Twig::set_remove_cdata"; "XML::Twig::setTwigHandlers"; "XML::Twig::BEGIN@439"; "XML::Twig::_twig_init"; "XML::Twig::BEGIN@1.63"; "XML::Twig::BEGIN@1.52"; "XML::Twig::BEGIN@1.57"; "XML::Twig::__ANON__[(eval 106)[XML/Twig.pm:1750]:17]"; "XML::Twig::_twig_start"; "XML::Twig::_reset_handlers"; "XML::Twig::DESTROY"; "XML::Twig::setTwigRoots"; "XML::Twig::set_keep_atts_order"; "XML::Twig::set_expand_external_entities"; "XML::Twig::_twig_end"; "XML::Twig::_set_level_handler"; "XML::Twig::BEGIN@3587"; "XML::Twig::set_quote"; "XML::Twig::BEGIN@1.58"; "XML::Twig::BEGIN@3229"; "XML::Twig::BEGIN@4211"; "XML::Twig::_handler"; "XML::Twig::parser"; "XML::Twig::BEGIN@3842"; "XML::Twig::get_xpath"; "XML::Twig::BEGIN@3852"; "XML::Twig::BEGIN@3619"; "XML::Twig::BEGIN@1.55"; "XML::Twig::set_keep_encoding"; "XML::Twig::BEGIN@25"; "XML::Twig::BEGIN@3648"; "XML::Twig::__ANON__[(eval 111)[XML/Twig.pm:1750]:17]"; "XML::Twig::_set_fh_to_twig_output_fh"; "XML::Twig::__ANON__[(eval 102)[XML/Twig.pm:1750]:17]"; "XML::Twig::_twig_end_check_roots"; "XML::Twig::_set_handler"; "XML::Twig::_a_proper_ns_prefix"; "XML::Twig::_join_n"; "XML::Twig::BEGIN@1.69"; "XML::Twig::BEGIN@1.61"; "XML::Twig::BEGIN@29"; "XML::Twig::BEGIN@4175"; "XML::Twig::BEGIN@1.66"; "XML::Twig::_twig_final"; "XML::Twig::BEGIN@1.60"; "XML::Twig::_replace_ns"; "XML::Twig::_check_illegal_twig_roots_handlers"; "XML::Twig::BEGIN@4636"; "XML::Twig::BEGIN@812"; "XML::Twig::_add_or_discard_stored_spaces"; "XML::Twig::BEGIN@1.53"; "XML::Twig::new"; "XML::Twig::_normalize_args"; "XML::Twig::_set_special_handler"; "XML::Twig::BEGIN@1"; "XML::Twig::BEGIN@38"; "XML::Twig::_insert_pcdata"; "XML::Twig::BEGIN@1.67"; "XML::Twig::BEGIN@1.62"; "XML::Twig::_twig_char"; "XML::Twig::BEGIN@27"; "XML::Twig::_set_xpath_handler"; "XML::Twig::set_output_text_filter"; "XML::Twig::__ANON__[(eval 110)[XML/Twig.pm:1750]:17]"; "XML::Twig::set_do_not_escape_amp_in_atts"; "XML::Twig::_set_fh_to_selected_fh"; "XML::Twig::_use"; "XML::Twig::__ANON__[XML/Twig.pm:265]"; "XML::Twig::set_output_filter"; "XML::Twig::_set_pi_handler"; "XML::Twig::_ns_info"; "XML::Twig::BEGIN@4181"; "XML::Twig::BEGIN@1327"; "XML::Twig::_add_handler"; "XML::Twig::BEGIN@1.64"; "XML::Twig::_unique_elts"; "XML::Twig::descendants"; "XML::Twig::set_root"; "XML::Twig::_set_regexp_handler"; "XML::Twig::BEGIN@2455"; "XML::Twig::BEGIN@4649"; "XML::Twig::BEGIN@1.51"; "XML::Twig::BEGIN@1.56"; "XML::Twig::BEGIN@1.59"; "XML::Twig::_set_handlers"; "XML::Twig::BEGIN@1.46"; "XML::Twig::BEGIN@1.50"; "XML::Twig::BEGIN@33"; "XML::Twig::__ANON__[(eval 109)[XML/Twig.pm:1750]:26]"; "XML::Twig::BEGIN@1.68"; "XML::Twig::BEGIN@4246"; "XML::Twig::_twig_xmldecl"; "XML::Twig::BEGIN@151"; "XML::Twig::root"; "XML::Twig::_twig_start_check_roots"; "XML::Twig::purge"; "XML::Twig::parse"; "XML::Twig::BEGIN@148"; "XML::Twig::BEGIN@1.65"; "XML::Twig::_replace_prefix"; "XML::Twig::_twig_default"; } subgraph cluster_OLE_Storage_Lite_PPS_Root { label="OLE::Storage_Lite::PPS::Root"; "OLE::Storage_Lite::PPS::Root::BEGIN@171"; "OLE::Storage_Lite::PPS::Root::BEGIN@168"; "OLE::Storage_Lite::PPS::Root::BEGIN@172"; "OLE::Storage_Lite::PPS::Root::BEGIN@169"; "OLE::Storage_Lite::PPS::Root::BEGIN@170"; } subgraph cluster_Test2_EventFacet { label="Test2::EventFacet"; "Test2::EventFacet::BEGIN@8"; "Test2::EventFacet::BEGIN@2"; "Test2::EventFacet::BEGIN@3"; "Test2::EventFacet::BEGIN@7"; } subgraph cluster_Digest_base { label="Digest::base"; "Digest::base::BEGIN@3"; "Digest::base::BEGIN@4"; } subgraph cluster_OLE_Storage_Lite_PPS { label="OLE::Storage_Lite::PPS"; "OLE::Storage_Lite::PPS::BEGIN@12"; "OLE::Storage_Lite::PPS::BEGIN@13"; } subgraph cluster_URI { label="URI"; "URI::BEGIN@3"; "URI::BEGIN@180"; "URI::BEGIN@40"; "URI::BEGIN@4"; "URI::BEGIN@41"; "URI::BEGIN@43"; "URI::BEGIN@9"; } subgraph cluster_UNIVERSAL { label="UNIVERSAL"; "UNIVERSAL::import"; "UNIVERSAL::VERSION"; "UNIVERSAL::can"; "UNIVERSAL::isa"; } subgraph cluster_Compress_Raw_Zlib_Inflate { label="Compress::Raw::Zlib::Inflate"; "Compress::Raw::Zlib::Inflate::new"; } subgraph cluster_Encode_Config { label="Encode::Config"; "Encode::Config::BEGIN@7"; "Encode::Config::BEGIN@8"; } subgraph cluster_Time_Local { label="Time::Local"; "Time::Local::BEGIN@6"; "Time::Local::_daygm"; "Time::Local::BEGIN@36"; "Time::Local::BEGIN@3"; "Time::Local::BEGIN@5"; "Time::Local::BEGIN@34"; "Time::Local::BEGIN@35"; "Time::Local::BEGIN@10"; } subgraph cluster_Test_Builder_Formatter { label="Test::Builder::Formatter"; "Test::Builder::Formatter::init"; "Test::Builder::Formatter::plan_tap"; "Test::Builder::Formatter::BEGIN@3"; "Test::Builder::Formatter::BEGIN@7"; "Test::Builder::Formatter::BEGIN@2"; "Test::Builder::Formatter::BEGIN@11"; "Test::Builder::Formatter::BEGIN@9"; } subgraph cluster_base { label="base"; "base::import"; "base::BEGIN@4"; "base::has_attr"; "base::has_fields"; "base::__ANON__[base.pm:76]"; } subgraph cluster_Scalar_Util { label="Scalar::Util"; "Scalar::Util::BEGIN@9"; "Scalar::Util::weaken"; "Scalar::Util::openhandle"; "Scalar::Util::BEGIN@10"; "Scalar::Util::reftype"; } subgraph cluster_warnings_register { label="warnings::register"; "warnings::register::import"; } subgraph cluster_Spreadsheet_ParseXLSX_Decryptor_Standard { label="Spreadsheet::ParseXLSX::Decryptor::Standard"; "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4"; "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3"; "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10"; } subgraph cluster_XML_Parser_ContentModel { label="XML::Parser::ContentModel"; "XML::Parser::ContentModel::BEGIN@512"; } subgraph cluster_Archive_Zip { label="Archive::Zip"; "Archive::Zip::BEGIN@5"; "Archive::Zip::BEGIN@252"; "Archive::Zip::_ISA"; "Archive::Zip::BEGIN@197"; "Archive::Zip::BEGIN@191"; "Archive::Zip::BEGIN@239"; "Archive::Zip::BEGIN@245"; "Archive::Zip::BEGIN@198"; "Archive::Zip::BEGIN@188"; "Archive::Zip::BEGIN@236"; "Archive::Zip::BEGIN@274"; "Archive::Zip::BEGIN@262"; "Archive::Zip::BEGIN@311"; "Archive::Zip::BEGIN@265"; "Archive::Zip::BEGIN@8"; "Archive::Zip::BEGIN@294"; "Archive::Zip::BEGIN@189"; "Archive::Zip::BEGIN@212"; "Archive::Zip::BEGIN@203"; "Archive::Zip::BEGIN@199"; "Archive::Zip::BEGIN@237"; "Archive::Zip::BEGIN@238"; "Archive::Zip::BEGIN@23"; "Archive::Zip::BEGIN@215"; "Archive::Zip::new"; "Archive::Zip::BEGIN@35"; "Archive::Zip::BEGIN@300"; "Archive::Zip::_newFileHandle"; "Archive::Zip::BEGIN@4"; "Archive::Zip::BEGIN@11"; "Archive::Zip::BEGIN@260"; "Archive::Zip::BEGIN@201"; "Archive::Zip::BEGIN@207"; "Archive::Zip::BEGIN@214"; "Archive::Zip::BEGIN@37"; "Archive::Zip::BEGIN@208"; "Archive::Zip::BEGIN@240"; "Archive::Zip::BEGIN@229"; "Archive::Zip::BEGIN@292"; "Archive::Zip::BEGIN@305"; "Archive::Zip::BEGIN@282"; "Archive::Zip::BEGIN@275"; "Archive::Zip::_binmode"; "Archive::Zip::BEGIN@272"; "Archive::Zip::BEGIN@285"; "Archive::Zip::BEGIN@302"; "Archive::Zip::BEGIN@313"; "Archive::Zip::BEGIN@7"; "Archive::Zip::BEGIN@295"; "Archive::Zip::BEGIN@14"; "Archive::Zip::BEGIN@228"; "Archive::Zip::BEGIN@209"; "Archive::Zip::BEGIN@206"; "Archive::Zip::BEGIN@16"; "Archive::Zip::BEGIN@227"; "Archive::Zip::BEGIN@221"; "Archive::Zip::BEGIN@210"; "Archive::Zip::BEGIN@247"; "Archive::Zip::BEGIN@192"; "Archive::Zip::BEGIN@251"; "Archive::Zip::BEGIN@257"; "Archive::Zip::BEGIN@9"; "Archive::Zip::BEGIN@25"; "Archive::Zip::BEGIN@6"; "Archive::Zip::BEGIN@185"; "Archive::Zip::BEGIN@200"; "Archive::Zip::BEGIN@12"; "Archive::Zip::BEGIN@283"; "Archive::Zip::BEGIN@267"; "Archive::Zip::BEGIN@261"; "Archive::Zip::BEGIN@273"; "Archive::Zip::BEGIN@312"; "Archive::Zip::BEGIN@268"; "Archive::Zip::BEGIN@211"; "Archive::Zip::BEGIN@220"; "Archive::Zip::BEGIN@246"; "Archive::Zip::BEGIN@204"; "Archive::Zip::BEGIN@256"; "Archive::Zip::BEGIN@235"; "Archive::Zip::BEGIN@269"; "Archive::Zip::BEGIN@266"; "Archive::Zip::BEGIN@10"; "Archive::Zip::BEGIN@306"; "Archive::Zip::_readSignature"; "Archive::Zip::BEGIN@289"; "Archive::Zip::BEGIN@310"; "Archive::Zip::BEGIN@309"; "Archive::Zip::BEGIN@286"; "Archive::Zip::BEGIN@279"; "Archive::Zip::BEGIN@202"; "Archive::Zip::_isSeekable"; "Archive::Zip::BEGIN@3"; "Archive::Zip::BEGIN@213"; "Archive::Zip::BEGIN@190"; "Archive::Zip::BEGIN@205"; "Archive::Zip::_CAN"; "Archive::Zip::BEGIN@278"; "Archive::Zip::BEGIN@308"; "Archive::Zip::BEGIN@291"; "Archive::Zip::BEGIN@297"; "Archive::Zip::BEGIN@298"; "Archive::Zip::BEGIN@301"; "Archive::Zip::BEGIN@307"; "Archive::Zip::BEGIN@288"; "Archive::Zip::BEGIN@277"; "Archive::Zip::BEGIN@253"; "Archive::Zip::BEGIN@222"; "Archive::Zip::BEGIN@230"; } subgraph cluster_Crypt_Mode_CBC { label="Crypt::Mode::CBC"; "Crypt::Mode::CBC::BEGIN@5"; "Crypt::Mode::CBC::BEGIN@9"; "Crypt::Mode::CBC::BEGIN@6"; } subgraph cluster_Crypt_Mode_ECB { label="Crypt::Mode::ECB"; "Crypt::Mode::ECB::BEGIN@5"; "Crypt::Mode::ECB::BEGIN@6"; "Crypt::Mode::ECB::BEGIN@9"; } subgraph cluster_Test2_Formatter { label="Test2::Formatter"; "Test2::Formatter::BEGIN@3"; "Test2::Formatter::new_root"; "Test2::Formatter::finalize"; "Test2::Formatter::import"; "Test2::Formatter::BEGIN@2"; } subgraph cluster_XML_Twig_Notation_list { label="XML::Twig::Notation_list"; "XML::Twig::Notation_list::new"; } subgraph cluster_JSON_PP_IncrParser { label="JSON::PP::IncrParser"; "JSON::PP::IncrParser::BEGIN@1489"; "JSON::PP::IncrParser::BEGIN@1490"; "JSON::PP::IncrParser::BEGIN@1485"; "JSON::PP::IncrParser::BEGIN@1547"; "JSON::PP::IncrParser::BEGIN@1491"; "JSON::PP::IncrParser::BEGIN@1492"; "JSON::PP::IncrParser::BEGIN@1488"; "JSON::PP::IncrParser::BEGIN@1487"; "JSON::PP::IncrParser::BEGIN@1493"; "JSON::PP::IncrParser::BEGIN@1494"; } subgraph cluster_Crypt_RC4 { label="Crypt::RC4"; "Crypt::RC4::BEGIN@15"; "Crypt::RC4::BEGIN@16"; } subgraph cluster_Graphics_ColorUtils { label="Graphics::ColorUtils"; "Graphics::ColorUtils::BEGIN@8"; "Graphics::ColorUtils::BEGIN@4"; "Graphics::ColorUtils::BEGIN@6"; "Graphics::ColorUtils::BEGIN@242"; "Graphics::ColorUtils::BEGIN@5"; "Graphics::ColorUtils::BEGIN@492"; } subgraph cluster_Test2_Event { label="Test2::Event"; "Test2::Event::common_facet_data"; "Test2::Event::eid"; "Test2::Event::meta_facet_data"; "Test2::Event::BEGIN@17"; "Test2::Event::BEGIN@2"; "Test2::Event::BEGIN@14"; "Test2::Event::BEGIN@24"; "Test2::Event::BEGIN@7"; "Test2::Event::BEGIN@21"; "Test2::Event::BEGIN@11"; "Test2::Event::BEGIN@18"; "Test2::Event::BEGIN@15"; "Test2::Event::BEGIN@23"; "Test2::Event::BEGIN@19"; "Test2::Event::BEGIN@3"; "Test2::Event::BEGIN@22"; "Test2::Event::add_hub"; "Test2::Event::BEGIN@12"; "Test2::Event::BEGIN@10"; "Test2::Event::BEGIN@16"; "Test2::Event::BEGIN@20"; "Test2::Event::BEGIN@8"; } subgraph cluster_Test_Builder_Module { label="Test::Builder::Module"; "Test::Builder::Module::BEGIN@5"; "Test::Builder::Module::builder"; "Test::Builder::Module::__ANON__"; "Test::Builder::Module::_strip_imports"; "Test::Builder::Module::import"; "Test::Builder::Module::BEGIN@3"; } subgraph cluster_OLE_Storage_Lite_PPS_File { label="OLE::Storage_Lite::PPS::File"; "OLE::Storage_Lite::PPS::File::BEGIN@713"; "OLE::Storage_Lite::PPS::File::BEGIN@714"; } subgraph cluster_Encode_UTF_EBCDIC { label="Encode::UTF_EBCDIC"; "Encode::UTF_EBCDIC::BEGIN@178"; } subgraph cluster_Compress_Raw_Zlib_Parameters { label="Compress::Raw::Zlib::Parameters"; "Compress::Raw::Zlib::Parameters::value"; "Compress::Raw::Zlib::Parameters::parse"; "Compress::Raw::Zlib::Parameters::new"; "Compress::Raw::Zlib::Parameters::_checkType"; } subgraph cluster_Test2_Event_Note { label="Test2::Event::Note"; "Test2::Event::Note::BEGIN@9"; "Test2::Event::Note::BEGIN@2"; "Test2::Event::Note::BEGIN@8"; "Test2::Event::Note::BEGIN@3"; } subgraph cluster_XML_Twig_Entity_list { label="XML::Twig::Entity_list"; "XML::Twig::Entity_list::new"; } subgraph cluster_Encode_Alias { label="Encode::Alias"; "Encode::Alias::BEGIN@3"; "Encode::Alias::BEGIN@5"; "Encode::Alias::define_alias"; "Encode::Alias::init_aliases"; "Encode::Alias::BEGIN@111"; "Encode::Alias::BEGIN@7"; "Encode::Alias::BEGIN@2"; "Encode::Alias::undef_aliases"; } subgraph cluster_Test2_EventFacet_Info { label="Test2::EventFacet::Info"; "Test2::EventFacet::Info::BEGIN@2"; "Test2::EventFacet::Info::BEGIN@3"; "Test2::EventFacet::Info::BEGIN@10"; "Test2::EventFacet::Info::BEGIN@9"; } subgraph cluster_JSON_PP_Boolean { label="JSON::PP::Boolean"; "JSON::PP::Boolean::BEGIN@5"; "JSON::PP::Boolean::BEGIN@4"; "JSON::PP::Boolean::BEGIN@3"; } subgraph cluster_Test2_Event_Ok { label="Test2::Event::Ok"; "Test2::Event::Ok::BEGIN@9"; "Test2::Event::Ok::BEGIN@8"; "Test2::Event::Ok::BEGIN@3"; "Test2::Event::Ok::BEGIN@22"; "Test2::Event::Ok::BEGIN@2"; } subgraph cluster_Carp_Heavy { label="Carp::Heavy"; "Carp::Heavy::BEGIN@3"; } subgraph cluster_JSON_PP { label="JSON::PP"; "JSON::PP::BEGIN@38"; "JSON::PP::BEGIN@33"; "JSON::PP::BEGIN@41"; "JSON::PP::BEGIN@39"; "JSON::PP::BEGIN@53"; "JSON::PP::BEGIN@493"; "JSON::PP::BEGIN@8"; "JSON::PP::BEGIN@688"; "JSON::PP::BEGIN@30"; "JSON::PP::BEGIN@12"; "JSON::PP::BEGIN@32"; "JSON::PP::BEGIN@5"; "JSON::PP::BEGIN@46"; "JSON::PP::BEGIN@25"; "JSON::PP::BEGIN@45"; "JSON::PP::BEGIN@26"; "JSON::PP::BEGIN@62"; "JSON::PP::BEGIN@11"; "JSON::PP::BEGIN@1285"; "JSON::PP::BEGIN@9"; "JSON::PP::BEGIN@6"; "JSON::PP::BEGIN@31"; "JSON::PP::BEGIN@49"; "JSON::PP::BEGIN@29"; "JSON::PP::BEGIN@515"; "JSON::PP::BEGIN@43"; "JSON::PP::BEGIN@209"; "JSON::PP::BEGIN@28"; "JSON::PP::BEGIN@48"; "JSON::PP::BEGIN@36"; "JSON::PP::BEGIN@35"; "JSON::PP::BEGIN@42"; "JSON::PP::BEGIN@14"; "JSON::PP::BEGIN@1471"; "JSON::PP::BEGIN@27"; "JSON::PP::BEGIN@34"; "JSON::PP::BEGIN@40"; "JSON::PP::BEGIN@15"; "JSON::PP::BEGIN@790"; "JSON::PP::BEGIN@68"; } subgraph cluster_Spreadsheet_ParseXLSX { label="Spreadsheet::ParseXLSX"; "Spreadsheet::ParseXLSX::_check_signature"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]"; "Spreadsheet::ParseXLSX::BEGIN@11.2"; "Spreadsheet::ParseXLSX::_parse_shared_strings"; "Spreadsheet::ParseXLSX::_parse_themes"; "Spreadsheet::ParseXLSX::BEGIN@18"; "Spreadsheet::ParseXLSX::_parse_sheet"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]"; "Spreadsheet::ParseXLSX::parse"; "Spreadsheet::ParseXLSX::BEGIN@1"; "Spreadsheet::ParseXLSX::_rels_for"; "Spreadsheet::ParseXLSX::BEGIN@13"; "Spreadsheet::ParseXLSX::_extract_files"; "Spreadsheet::ParseXLSX::_zip_file_member"; "Spreadsheet::ParseXLSX::_dimensions"; "Spreadsheet::ParseXLSX::BEGIN@5"; "Spreadsheet::ParseXLSX::_cell_to_row_col"; "Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]"; "Spreadsheet::ParseXLSX::__ANON__"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655]"; "Spreadsheet::ParseXLSX::_parse_workbook"; "Spreadsheet::ParseXLSX::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11"; "Spreadsheet::ParseXLSX::new"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268]"; "Spreadsheet::ParseXLSX::BEGIN@7"; "Spreadsheet::ParseXLSX::BEGIN@15"; "Spreadsheet::ParseXLSX::BEGIN@17"; "Spreadsheet::ParseXLSX::_color"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]"; "Spreadsheet::ParseXLSX::_parse_styles"; "Spreadsheet::ParseXLSX::BEGIN@14"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979]"; "Spreadsheet::ParseXLSX::_new_twig"; "Spreadsheet::ParseXLSX::_base_path_for"; "Spreadsheet::ParseXLSX::BEGIN@3"; "Spreadsheet::ParseXLSX::_parse_xml"; "Spreadsheet::ParseXLSX::BEGIN@12"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313]"; "Spreadsheet::ParseXLSX::_xml_boolean"; "Spreadsheet::ParseXLSX::BEGIN@2"; } subgraph cluster_warnings { label="warnings"; "warnings::_bits"; "warnings::_expand_bits"; "warnings::register_categories"; "warnings::import"; "warnings::_mkMask"; "warnings::unimport"; } subgraph cluster_URI_Escape { label="URI::Escape"; "URI::Escape::BEGIN@153"; "URI::Escape::BEGIN@147"; "URI::Escape::BEGIN@3"; "URI::Escape::BEGIN@4"; "URI::Escape::BEGIN@191"; } subgraph cluster_Exporter { label="Exporter"; "Exporter::export_tags"; "Exporter::export_to_level"; "Exporter::export_ok_tags"; "Exporter::as_heavy"; "Exporter::BEGIN@3"; "Exporter::BEGIN@4"; "Exporter::import"; "Exporter::export"; } subgraph cluster_SelectSaver { label="SelectSaver"; "SelectSaver::BEGIN@39"; "SelectSaver::BEGIN@38"; } subgraph cluster_File_Spec_Unix { label="File::Spec::Unix"; "File::Spec::Unix::BEGIN@4"; "File::Spec::Unix::BEGIN@124"; "File::Spec::Unix::BEGIN@3"; "File::Spec::Unix::curdir"; "File::Spec::Unix::BEGIN@133"; "File::Spec::Unix::BEGIN@115"; "File::Spec::Unix::BEGIN@167"; "File::Spec::Unix::BEGIN@231"; "File::Spec::Unix::BEGIN@209"; } subgraph cluster_Test2_EventFacet_Meta { label="Test2::EventFacet::Meta"; "Test2::EventFacet::Meta::BEGIN@2"; "Test2::EventFacet::Meta::BEGIN@3"; "Test2::EventFacet::Meta::BEGIN@7"; "Test2::EventFacet::Meta::BEGIN@12"; "Test2::EventFacet::Meta::BEGIN@30"; "Test2::EventFacet::Meta::BEGIN@8"; } subgraph cluster_PerlIO { label="PerlIO"; "PerlIO::get_layers"; } subgraph cluster_Test2_EventFacet_Assert { label="Test2::EventFacet::Assert"; "Test2::EventFacet::Assert::BEGIN@8"; "Test2::EventFacet::Assert::BEGIN@3"; "Test2::EventFacet::Assert::BEGIN@7"; "Test2::EventFacet::Assert::BEGIN@2"; } subgraph cluster_Test2_Hub_Subtest { label="Test2::Hub::Subtest"; "Test2::Hub::Subtest::BEGIN@8"; "Test2::Hub::Subtest::BEGIN@66"; "Test2::Hub::Subtest::BEGIN@24"; "Test2::Hub::Subtest::BEGIN@3"; "Test2::Hub::Subtest::BEGIN@2"; "Test2::Hub::Subtest::BEGIN@7"; "Test2::Hub::Subtest::BEGIN@9"; "Test2::Hub::Subtest::BEGIN@47"; } subgraph cluster_Test2_API_Stack { label="Test2::API::Stack"; "Test2::API::Stack::BEGIN@81"; "Test2::API::Stack::all"; "Test2::API::Stack::top"; "Test2::API::Stack::BEGIN@3"; "Test2::API::Stack::new_hub"; "Test2::API::Stack::root"; "Test2::API::Stack::BEGIN@8"; "Test2::API::Stack::BEGIN@10"; "Test2::API::Stack::new"; "Test2::API::Stack::BEGIN@2"; } subgraph cluster_main { label="main"; "main::NULL"; "main::BEGIN@5"; "main::BEGIN@7"; "main::BEGIN@3"; "main::RUNTIME"; "main::BEGIN@4"; } subgraph cluster_Encode_utf8 { label="Encode::utf8"; "Encode::utf8::BEGIN@229"; "Encode::utf8::BEGIN@215"; } subgraph cluster_JSON { label="JSON"; "JSON::BEGIN@6"; "JSON::_load_pp"; "JSON::_load_xs"; "JSON::BEGIN@1"; "JSON::BEGIN@7"; "JSON::BEGIN@2"; "JSON::__load_pp"; "JSON::BEGIN@4"; "JSON::BEGIN@11"; "JSON::BEGIN@5"; "JSON::__load_xs"; } subgraph cluster_Test_More { label="Test::More"; "Test::More::BEGIN@4"; "Test::More::BEGIN@3"; "Test::More::BEGIN@5"; "Test::More::BEGIN@1783"; "Test::More::BEGIN@22"; "Test::More::import_extra"; "Test::More::ok"; "Test::More::done_testing"; "Test::More::BEGIN@1494"; "Test::More::BEGIN@1408"; "Test::More::BEGIN@209"; } subgraph cluster_Spreadsheet_ParseExcel_Format { label="Spreadsheet::ParseExcel::Format"; "Spreadsheet::ParseExcel::Format::new"; "Spreadsheet::ParseExcel::Format::BEGIN@19"; "Spreadsheet::ParseExcel::Format::BEGIN@20"; } subgraph cluster_Spreadsheet_ParseExcel_Workbook { label="Spreadsheet::ParseExcel::Workbook"; "Spreadsheet::ParseExcel::Workbook::BEGIN@19"; "Spreadsheet::ParseExcel::Workbook::BEGIN@20"; "Spreadsheet::ParseExcel::Workbook::new"; "Spreadsheet::ParseExcel::Workbook::BEGIN@189"; } subgraph cluster_XML_Parser { label="XML::Parser"; "XML::Parser::new"; "XML::Parser::setHandlers"; "XML::Parser::BEGIN@15"; "XML::Parser::parse"; "XML::Parser::BEGIN@11"; "XML::Parser::BEGIN@17"; } subgraph cluster_Test2_API_Instance { label="Test2::API::Instance"; "Test2::API::Instance::add_exit_callback"; "Test2::API::Instance::BEGIN@2"; "Test2::API::Instance::BEGIN@13"; "Test2::API::Instance::load"; "Test2::API::Instance::BEGIN@11"; "Test2::API::Instance::_finalize"; "Test2::API::Instance::set_exit"; "Test2::API::Instance::BEGIN@62"; "Test2::API::Instance::reset"; "Test2::API::Instance::add_formatter"; "Test2::API::Instance::BEGIN@53"; "Test2::API::Instance::import"; "Test2::API::Instance::BEGIN@16"; "Test2::API::Instance::pid"; "Test2::API::Instance::has_ipc"; "Test2::API::Instance::BEGIN@14"; "Test2::API::Instance::add_context_acquire_callback"; "Test2::API::Instance::__ANON__[Test2/API/Instance.pm:60]"; "Test2::API::Instance::END"; "Test2::API::Instance::tid"; "Test2::API::Instance::BEGIN@3"; "Test2::API::Instance::BEGIN@8"; "Test2::API::Instance::init"; "Test2::API::Instance::add_post_load_callback"; "Test2::API::Instance::BEGIN@63"; "Test2::API::Instance::BEGIN@9"; } subgraph cluster_Test2_EventFacet_About { label="Test2::EventFacet::About"; "Test2::EventFacet::About::BEGIN@3"; "Test2::EventFacet::About::BEGIN@7"; "Test2::EventFacet::About::BEGIN@8"; "Test2::EventFacet::About::BEGIN@2"; } subgraph cluster_Test2_Hub { label="Test2::Hub"; "Test2::Hub::BEGIN@9"; "Test2::Hub::finalize"; "Test2::Hub::format"; "Test2::Hub::pre_filter"; "Test2::Hub::BEGIN@12"; "Test2::Hub::is_subtest"; "Test2::Hub::is_passing"; "Test2::Hub::init"; "Test2::Hub::plan"; "Test2::Hub::BEGIN@2"; "Test2::Hub::BEGIN@3"; "Test2::Hub::process"; "Test2::Hub::BEGIN@14"; "Test2::Hub::cull"; "Test2::Hub::BEGIN@8"; "Test2::Hub::BEGIN@11"; "Test2::Hub::BEGIN@15"; "Test2::Hub::send"; } subgraph cluster_Encode_MIME_Name { label="Encode::MIME::Name"; "Encode::MIME::Name::BEGIN@3"; "Encode::MIME::Name::BEGIN@2"; } subgraph cluster_Test2_Event_Exception { label="Test2::Event::Exception"; "Test2::Event::Exception::BEGIN@8"; "Test2::Event::Exception::BEGIN@3"; "Test2::Event::Exception::BEGIN@2"; "Test2::Event::Exception::BEGIN@9"; } subgraph cluster_Symbol { label="Symbol"; "Symbol::BEGIN@3"; "Symbol::BEGIN@167"; "Symbol::BEGIN@137"; "Symbol::gensym"; "Symbol::BEGIN@4"; "Symbol::BEGIN@156"; "Symbol::BEGIN@103"; } subgraph cluster_Test2_API_Context { label="Test2::API::Context"; "Test2::API::Context::BEGIN@12"; "Test2::API::Context::BEGIN@72"; "Test2::API::Context::init"; "Test2::API::Context::BEGIN@3"; "Test2::API::Context::release"; "Test2::API::Context::DESTROY"; "Test2::API::Context::BEGIN@26"; "Test2::API::Context::send_ev2"; "Test2::API::Context::BEGIN@13"; "Test2::API::Context::BEGIN@9"; "Test2::API::Context::BEGIN@25"; "Test2::API::Context::BEGIN@10"; "Test2::API::Context::BEGIN@2"; "Test2::API::Context::BEGIN@8"; } subgraph cluster_Encode_XS { label="Encode::XS"; "Encode::XS::BEGIN@210"; } subgraph cluster_Compress_Raw_Zlib { label="Compress::Raw::Zlib"; "Compress::Raw::Zlib::BEGIN@8"; "Compress::Raw::Zlib::BEGIN@129"; "Compress::Raw::Zlib::constant"; "Compress::Raw::Zlib::ParseParameters"; "Compress::Raw::Zlib::BEGIN@158"; "Compress::Raw::Zlib::BEGIN@127"; "Compress::Raw::Zlib::BEGIN@153"; "Compress::Raw::Zlib::AUTOLOAD"; "Compress::Raw::Zlib::BEGIN@154"; "Compress::Raw::Zlib::BEGIN@130"; "Compress::Raw::Zlib::BEGIN@145"; "Compress::Raw::Zlib::BEGIN@157"; "Compress::Raw::Zlib::BEGIN@6"; "Compress::Raw::Zlib::BEGIN@128"; "Compress::Raw::Zlib::BEGIN@146"; "Compress::Raw::Zlib::BEGIN@126"; "Compress::Raw::Zlib::BEGIN@155"; "Compress::Raw::Zlib::_inflateInit"; "Compress::Raw::Zlib::BEGIN@10"; "Compress::Raw::Zlib::BEGIN@9"; "Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122]"; "Compress::Raw::Zlib::BEGIN@144"; "Compress::Raw::Zlib::BEGIN@113"; "Compress::Raw::Zlib::BEGIN@156"; "Compress::Raw::Zlib::BEGIN@114"; "Compress::Raw::Zlib::BEGIN@147"; "Compress::Raw::Zlib::BEGIN@121"; } subgraph cluster_OLE_Storage_Lite { label="OLE::Storage_Lite"; "OLE::Storage_Lite::BEGIN@828"; "OLE::Storage_Lite::BEGIN@830"; "OLE::Storage_Lite::BEGIN@1383"; "OLE::Storage_Lite::BEGIN@829"; "OLE::Storage_Lite::BEGIN@832"; "OLE::Storage_Lite::BEGIN@843"; "OLE::Storage_Lite::BEGIN@831"; "OLE::Storage_Lite::BEGIN@834"; } subgraph cluster_Test2_Event_Skip { label="Test2::Event::Skip"; "Test2::Event::Skip::BEGIN@2"; "Test2::Event::Skip::BEGIN@9"; "Test2::Event::Skip::BEGIN@3"; "Test2::Event::Skip::BEGIN@8"; } subgraph cluster_File_Path { label="File::Path"; "File::Path::BEGIN@7"; "File::Path::BEGIN@19"; "File::Path::__ANON__"; "File::Path::BEGIN@10"; "File::Path::BEGIN@27"; "File::Path::BEGIN@4"; "File::Path::BEGIN@29"; "File::Path::BEGIN@3"; "File::Path::BEGIN@6"; "File::Path::BEGIN@8"; "File::Path::BEGIN@20"; } subgraph cluster_Tie_Hash { label="Tie::Hash"; "Tie::Hash::BEGIN@190"; "Tie::Hash::BEGIN@191"; } subgraph cluster_Test2_EventFacet_Control { label="Test2::EventFacet::Control"; "Test2::EventFacet::Control::BEGIN@7"; "Test2::EventFacet::Control::BEGIN@2"; "Test2::EventFacet::Control::BEGIN@3"; "Test2::EventFacet::Control::BEGIN@8"; } subgraph cluster_Digest_SHA { label="Digest::SHA"; "Digest::SHA::BEGIN@10"; "Digest::SHA::BEGIN@9"; "Digest::SHA::BEGIN@202"; "Digest::SHA::BEGIN@56"; "Digest::SHA::BEGIN@7"; "Digest::SHA::BEGIN@6"; "Digest::SHA::BEGIN@5"; "Digest::SHA::BEGIN@8"; } subgraph cluster_bytes { label="bytes"; "bytes::import"; "bytes::BEGIN@3"; "bytes::BEGIN@4"; } "Archive::Zip::BEGIN@11" -> "Exporter::export_tags"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@267"; "Encode::BEGIN@56" -> "Storable::BEGIN@66"; "XML::Twig::set_keep_encoding" -> "XML::Twig::Elt::set_keep_encoding"; "Archive::Zip::Archive::read" -> "Archive::Zip::Archive::readFromFileHandle"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@257"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@192"; "Test2::Util::clone_io" -> "PerlIO::get_layers"; "main::RUNTIME" -> "Test2::API::END"; "Test2::API::test2_set_is_end" -> "Test2::API::Stack::root"; "Test::Builder::__ANON__[Test/Builder.pm:148]" -> "Test::Builder::_add_ts_hooks"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@2"; "Carp::BEGIN@169" -> "overloading::BEGIN@2"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@24"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@150"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@9"; "Test2::API::test2_add_callback_exit" -> "Test2::API::Instance::add_exit_callback"; "Spreadsheet::ParseXLSX::parse" -> "Spreadsheet::ParseXLSX::_check_signature"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetEntityDeclHandler"; "Test2::Util::HashBase::_new" -> "Test::Builder::Formatter::init"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@61"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@5096"; "XML::Twig::BEGIN@151" -> "XML::Parser::BEGIN@17"; "Test2::API::BEGIN@100" -> "Test2::Event::Subtest::BEGIN@3"; "XML::Twig::setTwigHandlers" -> "XML::Twig::_reset_handlers"; "XML::Twig::setTwigRoots" -> "XML::Twig::_reset_handlers"; "Archive::Zip::Archive::_readEndOfCentralDirectory" -> "Archive::Zip::_readSignature"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::_readSignature"; "Archive::Zip::ZipFileMember::_seekToLocalHeader" -> "Archive::Zip::_readSignature"; "XML::Twig::descendants" -> "XML::Twig::Elt::passes"; "XML::Twig::Elt::ancestors" -> "XML::Twig::Elt::passes"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::_tag_cond"; "Test::Builder::reset" -> "Test2::API::test2_unset_is_end"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::BEGIN@3"; "Test2::API::BEGIN@89" -> "Test2::Hub::Interceptor::BEGIN@8"; "File::Copy::BEGIN@1" -> "Time::HiRes::import"; "Test2::API::BEGIN@5" -> "Time::HiRes::import"; "Test2::EventFacet::Trace::BEGIN@10" -> "Time::HiRes::import"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@253"; "IO::File::BEGIN@122" -> "Symbol::BEGIN@167"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@4159"; "URI::BEGIN@41" -> "URI::Escape::BEGIN@4"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@20"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@684"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::File::BEGIN@713"; "Compress::Raw::Zlib::AUTOLOAD" -> "CORE::subst"; "XML::Twig::Elt::_install_cond" -> "CORE::subst"; "IO::Handle::_open_mode_string" -> "CORE::subst"; "XML::Twig::_parse_xpath_handler" -> "CORE::subst"; "constant::import" -> "CORE::subst"; "Exporter::Heavy::_rebuild_cache" -> "CORE::subst"; "Config::AUTOLOAD" -> "CORE::subst"; "parent::import" -> "CORE::subst"; "base::__ANON__[base.pm:76]" -> "CORE::subst"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979]" -> "CORE::subst"; "Compress::Raw::Zlib::Parameters::parse" -> "CORE::subst"; "Exporter::as_heavy" -> "CORE::subst"; "POSIX::import" -> "CORE::subst"; "Digest::Perl::MD5::gen_code" -> "CORE::subst"; "XML::Twig::BEGIN@148" -> "CORE::subst"; "Exporter::Heavy::heavy_export" -> "CORE::subst"; "Exporter::import" -> "CORE::subst"; "JSON::Backend::PP::init" -> "CORE::subst"; "XML::Twig::_twig_final" -> "CORE::subst"; "XML::Twig::Elt::_install_xpath" -> "CORE::subst"; "XML::Twig::_set_handler" -> "CORE::subst"; "Spreadsheet::ParseXLSX::_extract_files" -> "CORE::subst"; "CryptX::BEGIN@13" -> "CORE::subst"; "Time::HiRes::AUTOLOAD" -> "CORE::subst"; "Test::Builder::done_testing" -> "Test2::Hub::plan"; "Test::Builder::expected_tests" -> "Test2::Hub::plan"; "Test::Builder::_ending" -> "Test2::Hub::plan"; "Test2::Hub::process" -> "Test2::Hub::plan"; "JSON::PP::BEGIN@12" -> "JSON::PP::Boolean::BEGIN@5"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@9"; "Archive::Zip::Member::desiredCompressionMethod" -> "Archive::Zip::Member::uncompressedSize"; "Archive::Zip::Member::rewindData" -> "Archive::Zip::Member::uncompressedSize"; "Archive::Zip::Member::contents" -> "Archive::Zip::Member::uncompressedSize"; "File::Temp::BEGIN@152" -> "Errno::BEGIN@8"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader"; "Archive::Zip::Member::_inflateChunk" -> "Compress::Raw::Zlib::inflateStream::inflate"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::BEGIN@35"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.19"; "XML::Twig::Elt::BEGIN@8108" -> "XML::Twig::Elt::set_destroy"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@3"; "XML::Twig::_twig_start" -> "XML::Twig::Elt::new"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@300"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::BEGIN@113"; "main::BEGIN@5" -> "Test::More::BEGIN@22"; "Spreadsheet::ParseExcel::BEGIN@35" -> "Spreadsheet::ParseExcel::Cell::BEGIN@169"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.46"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@7"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@6"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@28"; "main::BEGIN@5" -> "Test::More::BEGIN@209"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@10"; "XML::Twig::Elt::__ANON__[(eval 58)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 97)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 60)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 76)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 129)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 63)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 66)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 61)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 64)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 87)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 85)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 70)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 103)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 68)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "XML::Twig::Elt::__ANON__[(eval 62)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::twig"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@1383"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@146"; "Test2::API::BEGIN@92" -> "Test2::Event::Ok::BEGIN@22"; "Archive::Zip::new" -> "Archive::Zip::Archive::new"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@155"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "Spreadsheet::ParseXLSX::BEGIN@1"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@36"; "Spreadsheet::ParseXLSX::_zip_file_member" -> "Archive::Zip::Member::contents"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@11"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.42"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@14"; "Time::Local::BEGIN@10" -> "parent::import"; "Encode::XS::BEGIN@210" -> "parent::import"; "Encode::UTF_EBCDIC::BEGIN@178" -> "parent::import"; "Encode::utf8::BEGIN@215" -> "parent::import"; "File::Temp::BEGIN@167" -> "parent::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@6"; "Test::Builder::BEGIN@37" -> "Test::Builder::TodoDiag::BEGIN@7"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::_daygm"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::Archive::_findEndOfCentralDirectory"; "Test::Builder::use_numbers" -> "Test2::Hub::format"; "Test::Builder::reset_outputs" -> "Test2::Hub::format"; "Test2::API::Stack::new_hub" -> "Test2::Hub::format"; "Test::Builder::reset" -> "Test2::Hub::format"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.35"; "IO::File::BEGIN@122" -> "Symbol::BEGIN@103"; "main::RUNTIME" -> "Test2::API::Instance::END"; "Test2::EventFacet::Assert::BEGIN@8" -> "Test2::Util::HashBase::import"; "Test2::Hub::BEGIN@15" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::import"; "Test2::Event::Plan::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::About::BEGIN@8" -> "Test2::Util::HashBase::import"; "Test2::API::Context::BEGIN@26" -> "Test2::Util::HashBase::import"; "Test2::Event::Subtest::BEGIN@8" -> "Test2::Util::HashBase::import"; "Test2::Event::Waiting::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::API::Instance::BEGIN@16" -> "Test2::Util::HashBase::import"; "Test2::Event::Pass::BEGIN@15" -> "Test2::Util::HashBase::import"; "Test2::Event::Note::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Amnesty::BEGIN@10" -> "Test2::Util::HashBase::import"; "Test2::Formatter::TAP::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Parent::BEGIN@10" -> "Test2::Util::HashBase::import"; "Test2::Event::Fail::BEGIN@15" -> "Test2::Util::HashBase::import"; "Test2::Event::Skip::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test::Builder::Formatter::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Plan::BEGIN@8" -> "Test2::Util::HashBase::import"; "Test2::Hub::Interceptor::BEGIN@11" -> "Test2::Util::HashBase::import"; "Test2::Hub::Subtest::BEGIN@8" -> "Test2::Util::HashBase::import"; "Test2::Event::Bail::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Error::BEGIN@11" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Info::BEGIN@10" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Control::BEGIN@8" -> "Test2::Util::HashBase::import"; "Test2::Event::V2::BEGIN@17" -> "Test2::Util::HashBase::import"; "Test2::Event::Ok::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Trace::BEGIN@13" -> "Test2::Util::HashBase::import"; "Test2::Event::Diag::BEGIN@9" -> "Test2::Util::HashBase::import"; "Test2::Event::BEGIN@10" -> "Test2::Util::HashBase::import"; "Test2::EventFacet::Hub::BEGIN@11" -> "Test2::Util::HashBase::import"; "Test2::Event::Exception::BEGIN@9" -> "Test2::Util::HashBase::import"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@14"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 58)[XML/Twig.pm:7113]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@36"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@275"; "XML::Twig::_twig_char" -> "XML::Twig::_insert_pcdata"; "Test2::Formatter::TAP::init" -> "Test2::Formatter::TAP::_open_handles"; "Spreadsheet::ParseXLSX::BEGIN@12" -> "Graphics::ColorUtils::BEGIN@242"; "Test2::Util::BEGIN@171" -> "Test2::Util::_check_for_sig_sys"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@8"; "Test2::API::test2_load" -> "Test2::API::Instance::load"; "Archive::Zip::BEGIN@6" -> "Cwd::BEGIN@41"; "XML::Twig::new" -> "XML::Twig::set_keep_encoding"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::Archive::centralDirectorySize"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@31"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.60"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.38"; "XML::Twig::BEGIN@25" -> "utf8::BEGIN@4"; "URI::BEGIN@41" -> "CORE::qr"; "Compress::Raw::Zlib::BEGIN@113" -> "CORE::qr"; "Encode::Alias::init_aliases" -> "CORE::qr"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "CORE::qr"; "Storable::BEGIN@487" -> "CORE::qr"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@22" -> "CORE::qr"; "XML::Twig::_set_handler" -> "CORE::qr"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "CORE::qr"; "Archive::Zip::Archive::BEGIN@7" -> "CORE::qr"; "Spreadsheet::ParseXLSX::_zip_file_member" -> "CORE::qr"; "JSON::PP::BEGIN@53" -> "CORE::qr"; "XML::Parser::parse" -> "XML::Twig::_twig_final"; "Archive::Zip::BEGIN@11" -> "Fcntl::O_LARGEFILE"; "Crypt::Mode::CBC::BEGIN@9" -> "Crypt::Cipher::BEGIN@4"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.20"; "XML::Parser::BEGIN@17" -> "XML::Parser::Expat::BEGIN@460"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::DirectoryMember::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@18"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@8404"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::BEGIN@5"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@9"; "Test2::API::test2_set_is_end" -> "Test2::API::Instance::tid"; "Test2::Event::BEGIN@15" -> "Test2::EventFacet::Amnesty::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@3852"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@211"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@24"; "Test::More::import_extra" -> "Test::Builder::Module::builder"; "Test::More::ok" -> "Test::Builder::Module::builder"; "Test::Builder::Module::import" -> "Test::Builder::Module::builder"; "Test::More::done_testing" -> "Test::Builder::Module::builder"; "Test2::Util::BEGIN@7" -> "Tie::Hash::BEGIN@190"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@9"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@65"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@3"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.11"; "Archive::Zip::Member::unixFileAttributes" -> "Archive::Zip::Member::_mapPermissionsToUnix"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::_isSeekable"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.9"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::BEGIN@94"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::ZipFileMember::BEGIN@3"; "IO::Handle::binmode" -> "CORE::binmode"; "Test2::Util::clone_io" -> "CORE::binmode"; "Archive::Zip::ZipFileMember::rewindData" -> "Archive::Zip::Member::rewindData"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@10"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@49"; "IO::File::BEGIN@124" -> "IO::Seekable::BEGIN@100"; "Carp::BEGIN@73" -> "Carp::_fetch_sub"; "Carp::BEGIN@137" -> "Carp::_fetch_sub"; "Carp::BEGIN@61" -> "Carp::_fetch_sub"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@2"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@102"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@3"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@216"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::Root::BEGIN@171"; "Test2::API::BEGIN@97" -> "Test2::Event::Exception::BEGIN@2"; "constant::import" -> "mro::method_changed_in"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@5"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@18"; "XML::Twig::set_output_filter" -> "XML::Twig::Elt::set_output_filter"; "Archive::Zip::FileMember::BEGIN@4" -> "vars::import"; "OLE::Storage_Lite::PPS::Dir::BEGIN@802" -> "vars::import"; "Archive::Zip::StringMember::BEGIN@4" -> "vars::import"; "OLE::Storage_Lite::PPS::Root::BEGIN@172" -> "vars::import"; "Crypt::RC4::BEGIN@16" -> "vars::import"; "OLE::Storage_Lite::PPS::File::BEGIN@714" -> "vars::import"; "XML::Twig::BEGIN@439" -> "vars::import"; "Archive::Zip::BEGIN@23" -> "vars::import"; "Digest::Perl::MD5::BEGIN@5" -> "vars::import"; "Archive::Zip::BEGIN@14" -> "vars::import"; "Archive::Zip::DirectoryMember::BEGIN@6" -> "vars::import"; "XML::Twig::BEGIN@27" -> "vars::import"; "OLE::Storage_Lite::BEGIN@834" -> "vars::import"; "Spreadsheet::ParseExcel::Utility::BEGIN@23" -> "vars::import"; "XML::Twig::BEGIN@38" -> "vars::import"; "Test2::EventFacet::Meta::BEGIN@8" -> "vars::import"; "Archive::Zip::ZipFileMember::BEGIN@4" -> "vars::import"; "Archive::Zip::Archive::BEGIN@14" -> "vars::import"; "Digest::SHA::BEGIN@7" -> "vars::import"; "File::Path::BEGIN@20" -> "vars::import"; "OLE::Storage_Lite::PPS::BEGIN@13" -> "vars::import"; "Archive::Zip::NewFileMember::BEGIN@4" -> "vars::import"; "Archive::Zip::BEGIN@35" -> "vars::import"; "Archive::Zip::Member::BEGIN@6" -> "vars::import"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@17"; "Test2::Formatter::TAP::write" -> "Test2::Formatter::TAP::print_optimal_pass"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::Archive::_readEndOfCentralDirectory"; "overload::import" -> "overload::OVERLOAD"; "Archive::Zip::Member::new" -> "Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS"; "Spreadsheet::ParseXLSX::_parse_xml" -> "Spreadsheet::ParseXLSX::_zip_file_member"; "Spreadsheet::ParseXLSX::_extract_files" -> "Spreadsheet::ParseXLSX::_zip_file_member"; "Time::HiRes::import" -> "Time::HiRes::AUTOLOAD"; "XML::Twig::Elt::cmp" -> "XML::Twig::Elt::in"; "XML::Twig::purge" -> "XML::Twig::Elt::in"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetEndElementHandler"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@15" -> "MIME::Base64::BEGIN@3"; "Test::Builder::use_numbers" -> "UNIVERSAL::can"; "Archive::Zip::_CAN" -> "UNIVERSAL::can"; "Archive::Zip::Member::rewindData" -> "UNIVERSAL::can"; "Test::Builder::Formatter::BEGIN@11" -> "UNIVERSAL::can"; "Test2::Util::HashBase::import" -> "UNIVERSAL::can"; "Test2::API::Instance::_finalize" -> "UNIVERSAL::can"; "Test2::Util::HashBase::_new" -> "UNIVERSAL::can"; "Test2::API::Instance::BEGIN@53" -> "UNIVERSAL::can"; "Compress::Raw::Zlib::BEGIN@10" -> "bytes::BEGIN@3"; "Test2::Event::BEGIN@21" -> "Test2::EventFacet::Parent::BEGIN@10"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@12"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@70"; "Test2::Formatter::import" -> "Test2::API::test2_formatter_add"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 97)[XML/Twig.pm:7113]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@237"; "Test2::Hub::send" -> "Test2::Hub::process"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.21"; "Test2::Event::BEGIN@24" -> "Test2::EventFacet::Hub::BEGIN@10"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@209"; "Test2::API::BEGIN@97" -> "Test2::Event::Exception::BEGIN@9"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@11"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@62"; "Time::HiRes::AUTOLOAD" -> "Time::HiRes::constant"; "Archive::Zip::Archive::readFromFileHandle" -> "IO::Handle::opened"; "Archive::Zip::FileMember::fh" -> "IO::Handle::opened"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 67)[XML/Twig.pm:5871]:1]"; "Test2::API::BEGIN@96" -> "Test2::Event::Bail::BEGIN@9"; "Archive::Zip::BEGIN@7" -> "IO::File::BEGIN@119"; "Test::More::ok" -> "Test::Builder::ok"; "Test2::API::test2_formatter_add" -> "Test2::API::Instance::add_formatter"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@147"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@7"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseExcel::Worksheet::new"; "XML::Twig::Elt::children" -> "XML::Twig::Elt::next_sibling"; "Test2::EventFacet::Meta::BEGIN@8" -> "vars::BEGIN@8"; "Archive::Zip::Member::readChunk" -> "Archive::Zip::Member::_readDataRemaining"; "Archive::Zip::Member::contents" -> "Archive::Zip::Member::_readDataRemaining"; "Archive::Zip::Member::readIsDone" -> "Archive::Zip::Member::_readDataRemaining"; "Digest::SHA::BEGIN@10" -> "integer::import"; "Digest::Perl::MD5::BEGIN@3" -> "integer::import"; "Archive::Zip::Member::BEGIN@1517" -> "integer::import"; "Archive::Zip::BEGIN@11" -> "File::Temp::Dir::BEGIN@2602"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@812"; "Archive::Zip::Archive::memberNamed" -> "Archive::Zip::Archive::members"; "Archive::Zip::Archive::membersMatching" -> "Archive::Zip::Archive::members"; "XML::Twig::_twig_start" -> "XML::Twig::Elt::set_atts"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@27"; "Test::Builder::__ANON__[Test/Builder.pm:156]" -> "Test::Builder::_ending"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::utf8::BEGIN@215"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@305"; "XML::Parser::Expat::ParseString" -> "XML::Twig::_twig_char"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@282"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@292"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@312"; "Test::Builder::done_testing" -> "Test2::EventFacet::Trace::call"; "XML::Twig::setTwigRoots" -> "XML::Twig::_set_handler"; "XML::Twig::_set_handlers" -> "XML::Twig::_set_handler"; "Archive::Zip::BEGIN@9" -> "XSLoader::load"; "Test2::Util::HashBase::BEGIN@33" -> "XSLoader::load"; "Archive::Zip::BEGIN@6" -> "XSLoader::load"; "Test::Builder::BEGIN@15" -> "XSLoader::load"; "Storable::BEGIN@109" -> "XSLoader::load"; "XML::Parser::BEGIN@17" -> "XSLoader::load"; "XML::Twig::BEGIN@1125" -> "XSLoader::load"; "Test2::Util::BEGIN@7" -> "XSLoader::load"; "Crypt::Cipher::BEGIN@9" -> "XSLoader::load"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "XSLoader::load"; "Encode::BEGIN@9" -> "XSLoader::load"; "POSIX::BEGIN@11" -> "XSLoader::load"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@15" -> "XSLoader::load"; "Test2::API::BEGIN@5" -> "XSLoader::load"; "IO::Handle::BEGIN@276" -> "XSLoader::load"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@168"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@25"; "Encode::BEGIN@56" -> "Storable::BEGIN@83"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@261"; "Test2::EventFacet::Meta::BEGIN@8" -> "vars::BEGIN@7"; "Archive::Zip::BEGIN@11" -> "Fcntl::O_NOFOLLOW"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@14"; "Test2::API::BEGIN@95" -> "Test2::Event::Plan::BEGIN@11"; "Test2::Util::BEGIN@7" -> "Tie::Hash::BEGIN@191"; "Exporter::Heavy::heavy_export_to_level" -> "Exporter::Heavy::heavy_export"; "Exporter::import" -> "Exporter::Heavy::heavy_export"; "Test2::Event::BEGIN@22" -> "Test2::EventFacet::Plan::BEGIN@8"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@18" -> "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10"; "POSIX::import" -> "POSIX::load_imports"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.32"; "JSON::__load_pp" -> "JSON::BEGIN@1"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@251"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.40"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@24"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@147"; "Test2::Event::V2::facet_data" -> "Test2::Event::V2::non_facet_keys"; "Test2::API::BEGIN@97" -> "Test2::Event::Exception::BEGIN@8"; "Test::Builder::done_testing" -> "Test::Builder::current_test"; "Archive::Zip::Member::rewindData" -> "Compress::Raw::Zlib::AUTOLOAD"; "Archive::Zip::Member::_inflateChunk" -> "Compress::Raw::Zlib::AUTOLOAD"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::AUTOLOAD"; "Test::Builder::BEGIN@15" -> "Exporter::BEGIN@3"; "Test2::Event::BEGIN@16" -> "Test2::EventFacet::Assert::BEGIN@2"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetXMLDeclHandler"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@220"; "Exporter::BEGIN@4" -> "strict::unimport"; "Time::HiRes::BEGIN@70" -> "strict::unimport"; "Symbol::BEGIN@156" -> "strict::unimport"; "Test::Builder::BEGIN@120" -> "strict::unimport"; "Compress::Raw::Zlib::BEGIN@121" -> "strict::unimport"; "Test::Builder::BEGIN@1539" -> "strict::unimport"; "Test::Builder::BEGIN@116" -> "strict::unimport"; "File::Temp::BEGIN@240" -> "strict::unimport"; "IO::Handle::BEGIN@617" -> "strict::unimport"; "constant::BEGIN@65" -> "strict::unimport"; "XML::Twig::BEGIN@4181" -> "strict::unimport"; "XML::Twig::BEGIN@1327" -> "strict::unimport"; "Test::Builder::BEGIN@1251" -> "strict::unimport"; "Test::Builder::BEGIN@61" -> "strict::unimport"; "Carp::BEGIN@730" -> "strict::unimport"; "constant::BEGIN@141" -> "strict::unimport"; "Test2::Util::HashBase::BEGIN@94" -> "strict::unimport"; "XML::Twig::BEGIN@4159" -> "strict::unimport"; "Test2::Util::HashBase::BEGIN@37" -> "strict::unimport"; "Test::Builder::BEGIN@102" -> "strict::unimport"; "Test2::EventFacet::Meta::BEGIN@30" -> "strict::unimport"; "overload::BEGIN@4" -> "strict::unimport"; "parent::BEGIN@21" -> "strict::unimport"; "Test::Builder::BEGIN@1518" -> "strict::unimport"; "Symbol::BEGIN@103" -> "strict::unimport"; "Test2::API::Instance::BEGIN@62" -> "strict::unimport"; "Carp::BEGIN@188" -> "strict::unimport"; "JSON::Backend::PP::BEGIN@342" -> "strict::unimport"; "Exporter::Heavy::BEGIN@4" -> "strict::unimport"; "XML::Twig::BEGIN@4175" -> "strict::unimport"; "File::Spec::Unix::BEGIN@167" -> "strict::unimport"; "Symbol::BEGIN@137" -> "strict::unimport"; "Spreadsheet::ParseExcel::BEGIN@2628" -> "strict::unimport"; "Test::Builder::BEGIN@1556" -> "strict::unimport"; "XML::Twig::BEGIN@4246" -> "strict::unimport"; "File::Glob::BEGIN@54" -> "strict::unimport"; "File::Path::BEGIN@29" -> "strict::unimport"; "Carp::BEGIN@256" -> "strict::unimport"; "XML::Twig::BEGIN@3648" -> "strict::unimport"; "XML::Twig::BEGIN@3852" -> "strict::unimport"; "constant::BEGIN@40" -> "strict::unimport"; "Cwd::BEGIN@644" -> "strict::unimport"; "XML::Twig::BEGIN@3619" -> "strict::unimport"; "FileHandle::BEGIN@46" -> "strict::unimport"; "Carp::BEGIN@751" -> "strict::unimport"; "Test::More::BEGIN@209" -> "strict::unimport"; "Config::BEGIN@47" -> "strict::unimport"; "List::Util::BEGIN@35" -> "strict::unimport"; "constant::BEGIN@90" -> "strict::unimport"; "URI::BEGIN@180" -> "strict::unimport"; "XML::Parser::Expat::BEGIN@460" -> "strict::unimport"; "XML::Twig::BEGIN@4211" -> "strict::unimport"; "POSIX::BEGIN@225" -> "strict::unimport"; "XML::Twig::BEGIN@3587" -> "strict::unimport"; "XML::Twig::BEGIN@3229" -> "strict::unimport"; "File::Temp::BEGIN@270" -> "strict::unimport"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@3"; "Test2::Util::HashBase::_new" -> "Test2::Hub::init"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@15"; "IO::File::BEGIN@123" -> "SelectSaver::BEGIN@39"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@33"; "XML::Twig::new" -> "XML::Twig::setTwigHandlers"; "Test2::Formatter::TAP::BEGIN@17" -> "Test2::Formatter::BEGIN@3"; "Encode::BEGIN@56" -> "Storable::BEGIN@109"; "Archive::Zip::ZipFileMember::rewindData" -> "IO::Handle::clearerr"; "XML::Twig::new" -> "XML::Twig::set_expand_external_entities"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@8"; "XML::Twig::_twig_start_check_roots" -> "XML::Twig::_twig_start"; "XML::Parser::Expat::ParseString" -> "XML::Twig::_twig_start"; "Spreadsheet::ParseXLSX::BEGIN@12" -> "Graphics::ColorUtils::BEGIN@6"; "Test::Builder::BEGIN@18" -> "Test2::Event::V2::BEGIN@3"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::Archive::zip64"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::BEGIN@18"; "Test::Builder::Formatter::init" -> "Test2::Formatter::TAP::init"; "Test2::API::BEGIN@98" -> "Test2::Event::Waiting::BEGIN@9"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::BEGIN@89"; "File::Temp::BEGIN@152" -> "Config::FETCH"; "Test2::Util::_can_thread" -> "Config::FETCH"; "Test2::Util::_check_for_sig_sys" -> "Config::FETCH"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.30"; "Test::Builder::BEGIN@18" -> "Test2::Event::Pass::BEGIN@7"; "Archive::Zip::Member::_mapPermissionsToUnix" -> "Archive::Zip::Member::localExtraField"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@5"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.71"; "Fcntl::O_EXLOCK" -> "File::Temp::__ANON__[File/Temp.pm:252]"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@13"; "Test::Builder::reset" -> "Test::Builder::use_numbers"; "Test2::Hub::BEGIN@14" -> "Test2::Util::ExternalMeta::BEGIN@8"; "XML::Twig::_handler" -> "XML::Twig::__ANON__[(eval 109)[XML/Twig.pm:1750]:26]"; "Test2::Event::BEGIN@18" -> "Test2::EventFacet::Error::BEGIN@3"; "XML::Parser::Expat::ParseString" -> "XML::Twig::_twig_xmldecl"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::utf8::BEGIN@229"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@236"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.65"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@148"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@188"; "Test::Builder::ctx" -> "Test2::API::context"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@198"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@35"; "Archive::Zip::Member::readChunk" -> "Archive::Zip::Member::_inflateChunk"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@239"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@13"; "Test2::API::BEGIN@94" -> "Test2::Event::Note::BEGIN@2"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@95"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@62"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@19" -> "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10"; "Test::Builder::new" -> "Test2::API::test2_add_callback_exit"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 101)[XML/Twig.pm:5871]:1]"; "XML::Twig::_twig_start" -> "XML::Twig::set_root"; "Encode::BEGIN@54" -> "Encode::MIME::Name::BEGIN@3"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@153"; "Test::Builder::BEGIN@18" -> "Test2::Event::Pass::BEGIN@15"; "Archive::Zip::BEGIN@12" -> "FileHandle::BEGIN@46"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@19"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::define_encoding"; "Encode::onBOOT" -> "Encode::define_encoding"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::Config::BEGIN@7"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@18"; "Spreadsheet::ParseXLSX::_check_signature" -> "IO::File::new"; "Archive::Zip::_newFileHandle" -> "IO::File::new"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.59"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@228"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@96"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::FileMember::BEGIN@6"; "Test2::API::Context::send_ev2" -> "Test2::EventFacet::Trace::snapshot"; "parent::import" -> "Encode::Encoding::BEGIN@5"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@19"; "Compress::Raw::Zlib::Inflate::new" -> "Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122]"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122]"; "Archive::Zip::Member::_inflateChunk" -> "Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122]"; "Archive::Zip::Member::rewindData" -> "Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122]"; "Test2::Formatter::TAP::_open_handles" -> "Test2::API::test2_stderr"; "Test::Builder::create" -> "Test2::API::test2_stack"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@9"; "XML::Twig::_twig_start_check_roots" -> "CORE::select"; "XML::Twig::_twig_end_check_roots" -> "CORE::select"; "Test2::Util::clone_io" -> "CORE::select"; "Test2::Formatter::TAP::_autoflush" -> "CORE::select"; "Test2::Event::BEGIN@24" -> "Test2::EventFacet::Hub::BEGIN@3"; "Archive::Zip::Archive::BEGIN@7" -> "File::Find::BEGIN@2"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetProcessingInstructionHandler"; "main::RUNTIME" -> "Test::Builder::INIT"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@22" -> "Spreadsheet::ParseExcel::Utility::BEGIN@19"; "Exporter::Heavy::heavy_export_to_level" -> "Exporter::export"; "Exporter::import" -> "Exporter::export"; "IO::File::BEGIN@122" -> "Symbol::BEGIN@3"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@15"; "XML::Parser::Expat::ParseString" -> "XML::Twig::_twig_end_check_roots"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@3648"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@256"; "XML::Twig::_twig_start" -> "XML::Parser::Expat::recognized_string"; "Test2::Hub::Interceptor::BEGIN@8" -> "Test2::Hub::Interceptor::Terminator::BEGIN@3"; "XML::Twig::_ns_info" -> "XML::Parser::Expat::namespace"; "XML::Twig::_replace_prefix" -> "XML::Parser::Expat::namespace"; "Archive::Zip::ZipFileMember::_seekToLocalHeader" -> "Archive::Zip::ZipFileMember::localHeaderRelativeOffset"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@6"; "XML::Parser::Expat::recognized_string" -> "XML::Parser::Expat::RecognizedString"; "XML::Parser::Expat::ParseString" -> "XML::Parser::Expat::NamespaceEnd"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@266"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::UTF_EBCDIC::BEGIN@178"; "main::BEGIN@7" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::BEGIN@18" -> "UNIVERSAL::import"; "XML::Twig::BEGIN@151" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "UNIVERSAL::import"; "Crypt::Mode::CBC::BEGIN@9" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@10" -> "UNIVERSAL::import"; "Crypt::Mode::ECB::BEGIN@9" -> "UNIVERSAL::import"; "XML::Twig::_use" -> "UNIVERSAL::import"; "XML::Parser::Expat::BEGIN@7" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@19" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@18" -> "UNIVERSAL::import"; "XML::Twig::BEGIN@148" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@11" -> "UNIVERSAL::import"; "XML::Twig::BEGIN@30" -> "UNIVERSAL::import"; "Crypt::Cipher::BEGIN@9" -> "UNIVERSAL::import"; "JSON::PP::BEGIN@12" -> "UNIVERSAL::import"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@269"; "Test2::Event::BEGIN@20" -> "Test2::EventFacet::Meta::BEGIN@2"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.58"; "Archive::Zip::ZipFileMember::rewindData" -> "Archive::Zip::ZipFileMember::dataOffset"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@256"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@26"; "File::Temp::BEGIN@152" -> "Errno::BEGIN@21"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetNotationDeclHandler"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@22" -> "Spreadsheet::ParseExcel::Utility::BEGIN@23"; "XML::Twig::set_do_not_escape_amp_in_atts" -> "XML::Twig::Elt::set_do_not_escape_amp_in_atts"; "Compress::Raw::Zlib::BEGIN@10" -> "bytes::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@213"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@439"; "XML::Twig::new" -> "XML::Twig::set_keep_atts_order"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseXLSX::__ANON__"; "Exporter::export_tags" -> "Exporter::as_heavy"; "Exporter::export_ok_tags" -> "Exporter::as_heavy"; "Exporter::export_to_level" -> "Exporter::as_heavy"; "Exporter::export" -> "Exporter::as_heavy"; "XML::Twig::_twig_end" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655]"; "Test::More::BEGIN@22" -> "Test::Builder::Module::BEGIN@5"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@229"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@11"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@832"; "main::BEGIN@5" -> "Test::More::BEGIN@1494"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@4"; "Archive::Zip::ZipFileMember::BEGIN@11" -> "Exporter::import"; "Test2::Util::Facets2Legacy::BEGIN@7" -> "Exporter::import"; "Test2::EventFacet::Trace::BEGIN@9" -> "Exporter::import"; "XML::Parser::ExpatNB::BEGIN@600" -> "Exporter::import"; "Spreadsheet::ParseExcel::BEGIN@22" -> "Exporter::import"; "OLE::Storage_Lite::BEGIN@829" -> "Exporter::import"; "URI::Escape::BEGIN@147" -> "Exporter::import"; "Test2::Event::BEGIN@11" -> "Exporter::import"; "Test2::Hub::BEGIN@14" -> "Exporter::import"; "Test2::API::Stack::BEGIN@10" -> "Exporter::import"; "OLE::Storage_Lite::PPS::Root::BEGIN@169" -> "Exporter::import"; "XML::Twig::BEGIN@1" -> "Exporter::import"; "IO::Seekable::BEGIN@103" -> "Exporter::import"; "Test2::API::Context::BEGIN@25" -> "Exporter::import"; "Archive::Zip::FileMember::BEGIN@11" -> "Exporter::import"; "Archive::Zip::BEGIN@7" -> "Exporter::import"; "Test::Builder::BEGIN@15" -> "Exporter::import"; "CryptX::BEGIN@10" -> "Exporter::import"; "Digest::SHA::BEGIN@8" -> "Exporter::import"; "Archive::Zip::Member::BEGIN@29" -> "Exporter::import"; "Test2::API::Instance::BEGIN@11" -> "Exporter::import"; "Test2::API::BEGIN@6" -> "Exporter::import"; "POSIX::BEGIN@11" -> "Exporter::import"; "Test2::Event::V2::BEGIN@12" -> "Exporter::import"; "Spreadsheet::ParseExcel::BEGIN@27" -> "Exporter::import"; "Encode::BEGIN@15" -> "Exporter::import"; "Test2::Event::BEGIN@7" -> "Exporter::import"; "File::Find::BEGIN@7" -> "Exporter::import"; "Digest::SHA::BEGIN@9" -> "Exporter::import"; "Test2::EventFacet::Trace::BEGIN@11" -> "Exporter::import"; "SelectSaver::BEGIN@38" -> "Exporter::import"; "File::Temp::BEGIN@152" -> "Exporter::import"; "Archive::Zip::Member::BEGIN@19" -> "Exporter::import"; "File::Temp::BEGIN@176" -> "Exporter::import"; "Archive::Zip::Archive::BEGIN@12" -> "Exporter::import"; "Test2::Util::Facets2Legacy::BEGIN@8" -> "Exporter::import"; "Test2::Event::BEGIN@8" -> "Exporter::import"; "Archive::Zip::Archive::BEGIN@21" -> "Exporter::import"; "Test::Builder::Module::import" -> "Exporter::import"; "File::Temp::Dir::BEGIN@2601" -> "Exporter::import"; "Archive::Zip::Member::BEGIN@28" -> "Exporter::import"; "IO::File::BEGIN@124" -> "Exporter::import"; "Encode::Alias::BEGIN@7" -> "Exporter::import"; "XML::Twig::Elt::BEGIN@5082" -> "Exporter::import"; "Test2::Event::V2::BEGIN@8" -> "Exporter::import"; "IO::Handle::BEGIN@274" -> "Exporter::import"; "Test2::EventFacet::BEGIN@8" -> "Exporter::import"; "Test2::Util::ExternalMeta::BEGIN@8" -> "Exporter::import"; "OLE::Storage_Lite::PPS::Root::BEGIN@170" -> "Exporter::import"; "Test2::Hub::BEGIN@9" -> "Exporter::import"; "Time::Local::BEGIN@6" -> "Exporter::import"; "IO::File::BEGIN@121" -> "Exporter::import"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@22" -> "Exporter::import"; "Compress::Raw::Zlib::BEGIN@6" -> "Exporter::import"; "Test2::Hub::Subtest::BEGIN@9" -> "Exporter::import"; "Archive::Zip::NewFileMember::BEGIN@11" -> "Exporter::import"; "Test2::API::BEGIN@103" -> "Exporter::import"; "JSON::PP::BEGIN@15" -> "Exporter::import"; "POSIX::import" -> "Exporter::import"; "Test2::EventFacet::Parent::BEGIN@7" -> "Exporter::import"; "Errno::BEGIN@8" -> "Exporter::import"; "XML::Twig::BEGIN@148" -> "Exporter::import"; "JSON::BEGIN@6" -> "Exporter::import"; "File::Temp::BEGIN@153" -> "Exporter::import"; "Storable::BEGIN@42" -> "Exporter::import"; "File::Path::BEGIN@6" -> "Exporter::import"; "Archive::Zip::Archive::BEGIN@11" -> "Exporter::import"; "OLE::Storage_Lite::PPS::Root::BEGIN@171" -> "Exporter::import"; "IO::BEGIN@6" -> "Exporter::import"; "XML::Twig::BEGIN@31" -> "Exporter::import"; "Test2::Hub::BEGIN@12" -> "Exporter::import"; "Spreadsheet::ParseExcel::BEGIN@21" -> "Exporter::import"; "OLE::Storage_Lite::BEGIN@831" -> "Exporter::import"; "Test2::Formatter::TAP::BEGIN@7" -> "Exporter::import"; "Test::Builder::BEGIN@17" -> "Exporter::import"; "OLE::Storage_Lite::BEGIN@830" -> "Exporter::import"; "Cwd::BEGIN@3" -> "Exporter::import"; "Test::Builder::BEGIN@18" -> "Exporter::import"; "Crypt::Cipher::BEGIN@7" -> "Exporter::import"; "IO::File::BEGIN@122" -> "Exporter::import"; "XML::Twig::Elt::BEGIN@5096" -> "Exporter::import"; "SelectSaver::BEGIN@39" -> "Exporter::import"; "XML::Parser::Expat::BEGIN@8" -> "Exporter::import"; "Archive::Zip::Archive::BEGIN@6" -> "Exporter::import"; "Graphics::ColorUtils::BEGIN@8" -> "Exporter::import"; "Test2::Util::BEGIN@9" -> "Exporter::import"; "Tie::Hash::BEGIN@190" -> "Exporter::import"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Exporter::import"; "Digest::Perl::MD5::BEGIN@4" -> "Exporter::import"; "Test2::API::Context::BEGIN@10" -> "Exporter::import"; "Test2::API::Context::BEGIN@8" -> "Exporter::import"; "Test2::Hub::BEGIN@11" -> "Exporter::import"; "OLE::Storage_Lite::BEGIN@832" -> "Exporter::import"; "Spreadsheet::ParseExcel::BEGIN@23" -> "Exporter::import"; "Fcntl::BEGIN@60" -> "Exporter::import"; "Archive::Zip::DirectoryMember::BEGIN@4" -> "Exporter::import"; "Archive::Zip::Archive::BEGIN@10" -> "Exporter::import"; "Encode::BEGIN@56" -> "Exporter::import"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@21" -> "Exporter::import"; "Test2::Event::BEGIN@12" -> "Exporter::import"; "Test2::API::BEGIN@102" -> "Exporter::import"; "File::Temp::BEGIN@150" -> "Exporter::import"; "XML::Parser::BEGIN@15" -> "Exporter::import"; "File::Temp::BEGIN@146" -> "Exporter::import"; "Test2::API::Instance::BEGIN@9" -> "Exporter::import"; "Spreadsheet::ParseExcel::BEGIN@26" -> "Exporter::import"; "IO::Seekable::BEGIN@98" -> "Exporter::import"; "Archive::Zip::Member::BEGIN@30" -> "Exporter::import"; "Archive::Zip::StringMember::BEGIN@11" -> "Exporter::import"; "Test2::API::Instance::BEGIN@8" -> "Exporter::import"; "File::Temp::BEGIN@149" -> "Exporter::import"; "File::Temp::BEGIN@151" -> "Exporter::import"; "Archive::Zip::DirectoryMember::BEGIN@13" -> "Exporter::import"; "Test2::Event::V2::BEGIN@7" -> "Exporter::import"; "Spreadsheet::ParseXLSX::BEGIN@12" -> "Exporter::import"; "Test2::Hub::BEGIN@8" -> "Exporter::import"; "Storable::BEGIN@83" -> "Exporter::import"; "Archive::Zip::BEGIN@12" -> "Exporter::import"; "Spreadsheet::ParseXLSX::BEGIN@13" -> "Exporter::import"; "Test2::API::BEGIN@104" -> "Exporter::import"; "XML::Twig::BEGIN@29" -> "Exporter::import"; "Test2::API::Context::BEGIN@9" -> "Exporter::import"; "Test2::Event::Plan::BEGIN@11" -> "Exporter::import"; "IO::Handle::BEGIN@273" -> "Exporter::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@16" -> "Exporter::import"; "Spreadsheet::ParseExcel::BEGIN@27" -> "Digest::Perl::MD5::BEGIN@4"; "Test::Builder::BEGIN@15" -> "Exporter::BEGIN@4"; "XML::Twig::_handler" -> "XML::Twig::__ANON__[(eval 106)[XML/Twig.pm:1750]:17]"; "Spreadsheet::ParseExcel::BEGIN@27" -> "Digest::Perl::MD5::BEGIN@3"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.4"; "XML::Twig::parse" -> "XML::Twig::_checked_parse_result"; "Test2::API::BEGIN@100" -> "Test2::Event::Subtest::BEGIN@8"; "Test::Builder::new" -> "Test2::API::test2_has_ipc"; "Test::Builder::_add_ts_hooks" -> "Test2::Hub::pre_filter"; "XML::Parser::Expat::new" -> "XML::Parser::Expat::ParserCreate"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@8"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@72"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1518"; "XML::Twig::BEGIN@2455" -> "bytes::import"; "Compress::Raw::Zlib::BEGIN@10" -> "bytes::import"; "JSON::PP::IncrParser::BEGIN@1547" -> "bytes::import"; "JSON::PP::BEGIN@790" -> "bytes::import"; "Encode::utf8::BEGIN@229" -> "bytes::import"; "URI::BEGIN@41" -> "URI::Escape::BEGIN@191"; "XML::Twig::BEGIN@25" -> "utf8::import"; "Archive::Zip::BEGIN@7" -> "IO::File::BEGIN@122"; "Spreadsheet::ParseExcel::BEGIN@27" -> "Digest::Perl::MD5::BEGIN@5"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@830"; "Spreadsheet::ParseXLSX::parse" -> "Spreadsheet::ParseExcel::Workbook::new"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@288"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@298"; "Test2::API::END" -> "Test2::API::test2_set_is_end"; "Test2::API::Instance::END" -> "Test2::API::test2_set_is_end"; "Crypt::Mode::CBC::BEGIN@9" -> "Crypt::Cipher::BEGIN@9"; "Test2::API::BEGIN@5" -> "Time::HiRes::BEGIN@3"; "Test2::Event::BEGIN@20" -> "Test2::EventFacet::Meta::BEGIN@12"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@274"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::Root::BEGIN@170"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@33"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@15"; "Test2::Event::BEGIN@21" -> "Test2::EventFacet::Parent::BEGIN@7"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@117"; "Test2::Formatter::TAP::write" -> "Test2::Formatter::TAP::event_tap"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@2455"; "Test2::Event::V2::BEGIN@12" -> "Test2::Util::Facets2Legacy::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@35"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.24"; "CryptX::BEGIN@13" -> "JSON::_load_pp"; "Spreadsheet::ParseXLSX::parse" -> "Archive::Zip::new"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@5082"; "Spreadsheet::ParseXLSX::_extract_files" -> "Spreadsheet::ParseXLSX::_parse_xml"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@130"; "Spreadsheet::ParseXLSX::_parse_sheet" -> "Spreadsheet::ParseXLSX::_new_twig"; "Spreadsheet::ParseXLSX::_parse_shared_strings" -> "Spreadsheet::ParseXLSX::_new_twig"; "Spreadsheet::ParseXLSX::_parse_xml" -> "Spreadsheet::ParseXLSX::_new_twig"; "main::RUNTIME" -> "Test::More::done_testing"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@828"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@14"; "Spreadsheet::ParseXLSX::BEGIN@18" -> "Spreadsheet::ParseXLSX::Cell::BEGIN@3"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::Dir::BEGIN@801"; "File::Path::BEGIN@7" -> "File::Basename::BEGIN@371"; "Test::Builder::BEGIN@18" -> "Test2::Event::V2::BEGIN@12"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@27"; "Test::Builder::BEGIN@18" -> "Test2::Event::Pass::BEGIN@9"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@3"; "Test2::Event::BEGIN@24" -> "Test2::EventFacet::Hub::BEGIN@11"; "Test2::API::Instance::load" -> "Test::Builder::__ANON__[Test/Builder.pm:148]"; "main::NULL" -> "main::BEGIN@3"; "Test2::Event::BEGIN@24" -> "Test2::EventFacet::Hub::BEGIN@2"; "IO::File::BEGIN@123" -> "SelectSaver::BEGIN@38"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@7"; "Spreadsheet::ParseXLSX::_new_twig" -> "XML::Twig::new"; "XML::Twig::setTwigRoots" -> "XML::Twig::_check_illegal_twig_roots_handlers"; "Test::Builder::_add_ts_hooks" -> "Test2::API::Stack::top"; "Test2::API::context" -> "Test2::API::Stack::top"; "Test2::Event::V2::BEGIN@12" -> "Test2::Util::Facets2Legacy::BEGIN@7"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@11"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@7"; "Crypt::Cipher::BEGIN@9" -> "CryptX::BEGIN@10"; "Test2::Hub::send" -> "Test2::Event::eid"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@25"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@45"; "XML::Twig::_handler" -> "XML::Twig::__ANON__[(eval 110)[XML/Twig.pm:1750]:17]"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.47"; "Archive::Zip::Member::readChunk" -> "Archive::Zip::ZipFileMember::_readRawChunk"; "Errno::BEGIN@11" -> "Config::import"; "XML::Twig::BEGIN@33" -> "Config::import"; "Spreadsheet::ParseExcel::BEGIN@24" -> "Config::import"; "Test2::Util::BEGIN@8" -> "Config::import"; "File::Copy::BEGIN@17" -> "Config::import"; "Test2::API::release" -> "Test2::API::Context::release"; "Test::Builder::expected_tests" -> "Test2::API::Context::release"; "Test::Builder::reset" -> "Test2::API::Context::release"; "Test::Builder::reset_outputs" -> "Test2::API::Context::release"; "Test::Builder::ok" -> "Test2::API::Context::release"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@37"; "main::RUNTIME" -> "Spreadsheet::ParseXLSX::parse"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@268"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@128"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@73"; "Test2::API::Instance::__ANON__[Test2/API/Instance.pm:60]" -> "Test2::API::Instance::_finalize"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@7"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1556"; "XML::Twig::Elt::__ANON__[(eval 96)[XML/Twig.pm:5871]:1]" -> "XML::Twig::Elt::gi"; "Spreadsheet::ParseXLSX::_parse_themes" -> "XML::Twig::Elt::gi"; "XML::Twig::Elt::__ANON__[(eval 86)[XML/Twig.pm:5871]:1]" -> "XML::Twig::Elt::gi"; "XML::Twig::Elt::__ANON__[(eval 95)[XML/Twig.pm:5871]:1]" -> "XML::Twig::Elt::gi"; "Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell" -> "XML::Twig::Elt::gi"; "XML::Twig::Elt::__ANON__[(eval 91)[XML/Twig.pm:5871]:1]" -> "XML::Twig::Elt::gi"; "XML::Twig::Elt::__ANON__[(eval 128)[XML/Twig.pm:5871]:1]" -> "XML::Twig::Elt::gi"; "XML::Twig::Elt::__ANON__[(eval 90)[XML/Twig.pm:5871]:1]" -> "XML::Twig::Elt::gi"; "XML::Twig::Elt::__ANON__[(eval 101)[XML/Twig.pm:5871]:1]" -> "XML::Twig::Elt::gi"; "XML::Twig::Elt::is_elt" -> "XML::Twig::Elt::gi"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@6"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@25"; "Test2::API::test2_set_is_end" -> "Test2::API::Context::send_ev2"; "Test::Builder::BEGIN@15" -> "Scalar::Util::BEGIN@9"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::BEGIN@12"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@27"; "Test::Builder::BEGIN@15" -> "Scalar::Util::BEGIN@10"; "warnings::unimport" -> "warnings::_expand_bits"; "warnings::_bits" -> "warnings::_expand_bits"; "Spreadsheet::ParseExcel::BEGIN@32" -> "Spreadsheet::ParseExcel::Worksheet::BEGIN@625"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@12"; "OLE::Storage_Lite::BEGIN@831" -> "List::Util::import"; "Test2::Hub::BEGIN@12" -> "List::Util::import"; "IO::File::BEGIN@122" -> "Symbol::BEGIN@4"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@30"; "Test2::API::BEGIN@89" -> "Test2::Hub::Interceptor::BEGIN@10"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@2"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@132"; "IO::File::new" -> "IO::Handle::new"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@286"; "Test2::Event::BEGIN@14" -> "Test2::EventFacet::About::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@289"; "Test::Builder::BEGIN@37" -> "Test::Builder::TodoDiag::BEGIN@2"; "Test::Builder::current_test" -> "Test2::API::Context::DESTROY"; "Test2::API::test2_set_is_end" -> "Test2::API::Context::DESTROY"; "Test::Builder::ok" -> "Test2::API::Context::DESTROY"; "Test::Builder::use_numbers" -> "Test2::API::Context::DESTROY"; "Test::Builder::reset_outputs" -> "Test2::API::Context::DESTROY"; "Test::Builder::expected_tests" -> "Test2::API::Context::DESTROY"; "Test2::API::Instance::set_exit" -> "Test2::API::Context::DESTROY"; "Test::Builder::done_testing" -> "Test2::API::Context::DESTROY"; "Test::Builder::reset" -> "Test2::API::Context::DESTROY"; "Test2::Event::BEGIN@20" -> "Test2::EventFacet::Meta::BEGIN@30"; "IO::Handle::BEGIN@276" -> "IO::BEGIN@6"; "Test2::API::test2_ipc" -> "Test2::API::Instance::__ANON__[Test2/API/Instance.pm:60]"; "Test2::API::test2_formatter" -> "Test2::API::Instance::__ANON__[Test2/API/Instance.pm:60]"; "parent::import" -> "Encode::Encoding::BEGIN@11"; "Test2::Event::BEGIN@20" -> "Test2::EventFacet::Meta::BEGIN@8"; "File::Temp::BEGIN@168" -> "overload::BEGIN@84"; "Encode::BEGIN@53" -> "Encode::Alias::BEGIN@3"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@4"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@18" -> "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseXLSX::_parse_shared_strings"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@8"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.68"; "Spreadsheet::ParseXLSX::Cell::BEGIN@11" -> "base::import"; "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10" -> "base::import"; "Test2::Util::Facets2Legacy::BEGIN@10" -> "base::import"; "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10" -> "base::import"; "Compress::Raw::Zlib::Inflate::new" -> "Compress::Raw::Zlib::_inflateInit"; "XML::Twig::set_expand_external_entities" -> "XML::Twig::Elt::set_expand_external_entities"; "XML::Twig::Elt::cmp" -> "XML::Twig::Elt::ancestors"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.29"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@191"; "Archive::Zip::BEGIN@6" -> "CORE::fteexec"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::Root::BEGIN@168"; "Test2::Event::V2::facet_data" -> "Scalar::Util::reftype"; "Test2::API::Instance::add_post_load_callback" -> "Scalar::Util::reftype"; "Test2::API::Instance::add_exit_callback" -> "Scalar::Util::reftype"; "Test2::API::Instance::add_context_acquire_callback" -> "Scalar::Util::reftype"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 64)[XML/Twig.pm:7113]:1]"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@11" -> "Crypt::Mode::ECB::BEGIN@9"; "Test2::Hub::finalize" -> "Test2::Hub::is_passing"; "Test2::API::Instance::set_exit" -> "Test2::Hub::is_passing"; "Test::Builder::_ending" -> "Test2::Hub::is_passing"; "Compress::Raw::Zlib::Inflate::new" -> "Compress::Raw::Zlib::ParseParameters"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@158"; "Test2::API::Instance::set_exit" -> "Test::Builder::__ANON__[Test/Builder.pm:156]"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.22"; "Test2::API::BEGIN@94" -> "Test2::Event::Note::BEGIN@9"; "Spreadsheet::ParseExcel::BEGIN@35" -> "Spreadsheet::ParseExcel::Cell::BEGIN@20"; "XML::Twig::BEGIN@151" -> "XML::Parser::BEGIN@11"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@37"; "URI::BEGIN@3" -> "strict::import"; "Spreadsheet::ParseXLSX::BEGIN@1" -> "strict::import"; "mro::BEGIN@10" -> "strict::import"; "File::Find::BEGIN@3" -> "strict::import"; "parent::BEGIN@2" -> "strict::import"; "Time::HiRes::BEGIN@4" -> "strict::import"; "Test2::EventFacet::Hub::BEGIN@2" -> "strict::import"; "Archive::Zip::BEGIN@4" -> "strict::import"; "constant::BEGIN@3" -> "strict::import"; "Archive::Zip::Archive::BEGIN@5" -> "strict::import"; "main::BEGIN@3" -> "strict::import"; "Test2::Event::BEGIN@2" -> "strict::import"; "Test2::Event::Fail::BEGIN@2" -> "strict::import"; "File::Spec::BEGIN@3" -> "strict::import"; "vars::BEGIN@8" -> "strict::import"; "Graphics::ColorUtils::BEGIN@5" -> "strict::import"; "Config::BEGIN@9" -> "strict::import"; "Test2::Util::Trace::BEGIN@5" -> "strict::import"; "Test2::Hub::Interceptor::Terminator::BEGIN@2" -> "strict::import"; "File::Copy::BEGIN@11" -> "strict::import"; "Test2::Event::Subtest::BEGIN@2" -> "strict::import"; "Encode::BEGIN@5" -> "strict::import"; "File::Temp::Dir::BEGIN@2602" -> "strict::import"; "builtin::BEGIN@3" -> "strict::import"; "JSON::PP::Boolean::BEGIN@3" -> "strict::import"; "Test2::EventFacet::Control::BEGIN@2" -> "strict::import"; "Config::BEGIN@5" -> "strict::import"; "Spreadsheet::ParseExcel::Utility::BEGIN@19" -> "strict::import"; "Test2::API::BEGIN@2" -> "strict::import"; "base::BEGIN@4" -> "strict::import"; "Test2::EventFacet::Parent::BEGIN@2" -> "strict::import"; "Symbol::BEGIN@3" -> "strict::import"; "Test::Builder::Formatter::BEGIN@2" -> "strict::import"; "Test2::Formatter::BEGIN@2" -> "strict::import"; "Test2::EventFacet::About::BEGIN@2" -> "strict::import"; "Test2::EventFacet::Trace::BEGIN@2" -> "strict::import"; "Test2::Util::Facets2Legacy::BEGIN@2" -> "strict::import"; "Test2::API::Instance::BEGIN@2" -> "strict::import"; "Test2::EventFacet::BEGIN@2" -> "strict::import"; "File::Path::BEGIN@4" -> "strict::import"; "overload::BEGIN@3" -> "strict::import"; "Spreadsheet::ParseExcel::Workbook::BEGIN@19" -> "strict::import"; "Test2::EventFacet::Plan::BEGIN@2" -> "strict::import"; "JSON::PP::IncrParser::BEGIN@1485" -> "strict::import"; "Archive::Zip::Member::BEGIN@5" -> "strict::import"; "Exporter::Heavy::BEGIN@3" -> "strict::import"; "OLE::Storage_Lite::PPS::Root::BEGIN@168" -> "strict::import"; "IO::File::BEGIN@120" -> "strict::import"; "MIME::Base64::BEGIN@3" -> "strict::import"; "Crypt::Mode::ECB::BEGIN@5" -> "strict::import"; "Test2::Event::Note::BEGIN@2" -> "strict::import"; "bytes::BEGIN@3" -> "strict::import"; "Test2::Event::Waiting::BEGIN@2" -> "strict::import"; "JSON::BEGIN@4" -> "strict::import"; "Test::More::BEGIN@4" -> "strict::import"; "IO::Handle::BEGIN@272" -> "strict::import"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@19" -> "strict::import"; "OLE::Storage_Lite::BEGIN@828" -> "strict::import"; "Digest::Perl::MD5::BEGIN@2" -> "strict::import"; "Test2::Event::Bail::BEGIN@2" -> "strict::import"; "XML::Parser::BEGIN@11" -> "strict::import"; "IO::BEGIN@7" -> "strict::import"; "Spreadsheet::ParseXLSX::BEGIN@3" -> "strict::import"; "File::Temp::BEGIN@145" -> "strict::import"; "Spreadsheet::ParseXLSX::Cell::BEGIN@3" -> "strict::import"; "Crypt::RC4::BEGIN@15" -> "strict::import"; "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3" -> "strict::import"; "OLE::Storage_Lite::PPS::Dir::BEGIN@801" -> "strict::import"; "File::Spec::Unix::BEGIN@3" -> "strict::import"; "Crypt::Cipher::BEGIN@3" -> "strict::import"; "File::Glob::BEGIN@3" -> "strict::import"; "File::Basename::BEGIN@50" -> "strict::import"; "Encode::Config::BEGIN@7" -> "strict::import"; "Fcntl::BEGIN@58" -> "strict::import"; "Digest::SHA::BEGIN@5" -> "strict::import"; "Test2::Event::Pass::BEGIN@2" -> "strict::import"; "FileHandle::BEGIN@4" -> "strict::import"; "Archive::Zip::NewFileMember::BEGIN@3" -> "strict::import"; "Test2::Util::BEGIN@2" -> "strict::import"; "Digest::base::BEGIN@3" -> "strict::import"; "Archive::Zip::StringMember::BEGIN@3" -> "strict::import"; "Test::Builder::BEGIN@4" -> "strict::import"; "Archive::Zip::ZipFileMember::BEGIN@3" -> "strict::import"; "Test2::Event::Skip::BEGIN@2" -> "strict::import"; "CryptX::BEGIN@3" -> "strict::import"; "Test::Builder::TodoDiag::BEGIN@2" -> "strict::import"; "Test2::Hub::BEGIN@2" -> "strict::import"; "Test2::Util::HashBase::BEGIN@2" -> "strict::import"; "Test2::EventFacet::Info::BEGIN@2" -> "strict::import"; "Cwd::BEGIN@2" -> "strict::import"; "Time::Local::BEGIN@3" -> "strict::import"; "utf8::BEGIN@3" -> "strict::import"; "Test2::Event::Exception::BEGIN@2" -> "strict::import"; "XML::Parser::Expat::BEGIN@3" -> "strict::import"; "Test2::API::Stack::BEGIN@2" -> "strict::import"; "Symbol::BEGIN@167" -> "strict::import"; "Encode::MIME::Name::BEGIN@2" -> "strict::import"; "OLE::Storage_Lite::PPS::File::BEGIN@713" -> "strict::import"; "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3" -> "strict::import"; "Carp::BEGIN@4" -> "strict::import"; "Archive::Zip::FileMember::BEGIN@3" -> "strict::import"; "Crypt::Mode::CBC::BEGIN@5" -> "strict::import"; "Test2::Event::Plan::BEGIN@2" -> "strict::import"; "File::Find::BEGIN@13" -> "strict::import"; "Test2::Event::V2::BEGIN@2" -> "strict::import"; "JSON::PP::BEGIN@6" -> "strict::import"; "Test::Builder::Module::BEGIN@3" -> "strict::import"; "Spreadsheet::ParseExcel::Cell::BEGIN@19" -> "strict::import"; "Errno::BEGIN@9" -> "strict::import"; "Archive::Zip::DirectoryMember::BEGIN@3" -> "strict::import"; "List::Util::BEGIN@9" -> "strict::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@3" -> "strict::import"; "Test2::Hub::Interceptor::BEGIN@2" -> "strict::import"; "Test2::API::Context::BEGIN@2" -> "strict::import"; "Spreadsheet::ParseExcel::Font::BEGIN@19" -> "strict::import"; "Scalar::Util::BEGIN@9" -> "strict::import"; "OLE::Storage_Lite::PPS::BEGIN@12" -> "strict::import"; "POSIX::BEGIN@2" -> "strict::import"; "Spreadsheet::ParseExcel::Format::BEGIN@19" -> "strict::import"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@19" -> "strict::import"; "Encode::Alias::BEGIN@2" -> "strict::import"; "Compress::Raw::Zlib::BEGIN@8" -> "strict::import"; "Test2::Event::Ok::BEGIN@2" -> "strict::import"; "Spreadsheet::ParseExcel::BEGIN@17" -> "strict::import"; "Test2::EventFacet::Meta::BEGIN@2" -> "strict::import"; "Test2::Util::ExternalMeta::BEGIN@2" -> "strict::import"; "Exporter::BEGIN@3" -> "strict::import"; "Encode::Encoding::BEGIN@4" -> "strict::import"; "Test2::EventFacet::Error::BEGIN@2" -> "strict::import"; "Test2::Hub::Subtest::BEGIN@2" -> "strict::import"; "Test2::Event::Diag::BEGIN@2" -> "strict::import"; "Test2::EventFacet::Amnesty::BEGIN@2" -> "strict::import"; "IO::Seekable::BEGIN@99" -> "strict::import"; "Test2::Formatter::TAP::BEGIN@2" -> "strict::import"; "URI::Escape::BEGIN@3" -> "strict::import"; "Test2::EventFacet::Assert::BEGIN@2" -> "strict::import"; "Test::Builder::use_numbers" -> "Test2::API::release"; "Test::Builder::current_test" -> "Test2::API::release"; "Test::Builder::done_testing" -> "Test2::API::release"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::_op"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@7"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@29"; "Test2::Event::BEGIN@21" -> "Test2::EventFacet::Parent::BEGIN@3"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@62"; "Archive::Zip::BEGIN@11" -> "Errno::_tie_it"; "Test2::API::Stack::new_hub" -> "Test2::API::test2_formatter"; "CryptX::BEGIN@13" -> "JSON::BEGIN@11"; "XML::Parser::Expat::release" -> "XML::Parser::Expat::ParserRelease"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@68"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::XS::BEGIN@210"; "Compress::Raw::Zlib::Parameters::parse" -> "Compress::Raw::Zlib::Parameters::_checkType"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@121"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@17"; "Spreadsheet::ParseXLSX::BEGIN@12" -> "Graphics::ColorUtils::BEGIN@5"; "XML::Twig::_set_handler" -> "XML::Twig::_set_special_handler"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@6"; "XML::Twig::_twig_start" -> "XML::Twig::_add_or_discard_stored_spaces"; "XML::Twig::_twig_end" -> "XML::Twig::_add_or_discard_stored_spaces"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseXLSX::_parse_styles"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@313"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetCharacterDataHandler"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@25"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@144"; "Test2::Event::BEGIN@14" -> "Test2::EventFacet::About::BEGIN@2"; "XML::Twig::_twig_end" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313]"; "Test::Builder::__ANON__[Test/Builder.pm:148]" -> "Test::Builder::reset"; "Test2::Util::BEGIN@8" -> "version::(cmp"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@2705"; "Test2::Formatter::TAP::_open_handles" -> "Test2::API::test2_stdout"; "Test::Builder::_ending" -> "Test2::Util::ExternalMeta::meta"; "Test::Builder::reset" -> "Test2::Util::ExternalMeta::meta"; "Test::Builder::done_testing" -> "Test2::Util::ExternalMeta::meta"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.12"; "Test::Builder::current_test" -> "Test::Builder::ctx"; "Test::Builder::expected_tests" -> "Test::Builder::ctx"; "Test::Builder::reset" -> "Test::Builder::ctx"; "Test::Builder::done_testing" -> "Test::Builder::ctx"; "Test::Builder::reset_outputs" -> "Test::Builder::ctx"; "Test::Builder::ok" -> "Test::Builder::ctx"; "Test::Builder::use_numbers" -> "Test::Builder::ctx"; "Archive::Zip::BEGIN@37" -> "Exporter::Heavy::heavy_export_ok_tags"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1167"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@10"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.69"; "Test::Builder::new" -> "Test::Builder::create"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@247"; "XML::Twig::set_root" -> "Scalar::Util::weaken"; "XML::Twig::_insert_pcdata" -> "Scalar::Util::weaken"; "XML::Twig::_twig_init" -> "Scalar::Util::weaken"; "XML::Twig::_twig_start" -> "Scalar::Util::weaken"; "XML::Twig::Elt::cut" -> "Scalar::Util::weaken"; "XML::Twig::new" -> "Scalar::Util::weaken"; "Test2::API::context" -> "Scalar::Util::weaken"; "Spreadsheet::ParseExcel::Worksheet::new" -> "Scalar::Util::weaken"; "Archive::Zip::Member::BEGIN@37" -> "CORE::symlink"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::next_sibling" -> "XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1]"; "Test::Builder::BEGIN@20" -> "Test2::API::test2_load_done"; "Test2::API::test2_add_callback_context_aquire" -> "Test2::API::Instance::add_context_acquire_callback"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@5"; "main::RUNTIME" -> "File::Temp::END"; "XML::Twig::_set_handler" -> "XML::Twig::_set_level_handler"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 130)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 130)[XML/Twig.pm:5871]:1]"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.55"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@204"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@7"; "URI::BEGIN@41" -> "URI::Escape::BEGIN@3"; "main::BEGIN@5" -> "Test::More::BEGIN@1408"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@89"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.7"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::NewFileMember::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@12" -> "Graphics::ColorUtils::BEGIN@8"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@574"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Notation::BEGIN@5023"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@40"; "Test::More::done_testing" -> "Test::Builder::done_testing"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@54"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@53"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@95"; "Test2::Event::BEGIN@19" -> "Test2::EventFacet::Info::BEGIN@2"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@8"; "Test2::Event::BEGIN@19" -> "Test2::EventFacet::Info::BEGIN@3"; "Test2::Util::Facets2Legacy::BEGIN@10" -> "Test2::Util::Facets2Legacy::BEGIN@1"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "Spreadsheet::ParseXLSX::BEGIN@7"; "Test2::API::BEGIN@93" -> "Test2::Event::Diag::BEGIN@8"; "Test2::Event::BEGIN@22" -> "Test2::EventFacet::Plan::BEGIN@7"; "Test2::Event::V2::facet_data" -> "Test2::Event::meta_facet_data"; "Test2::Event::common_facet_data" -> "Test2::Event::meta_facet_data"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@18"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@291"; "Encode::Encoding::BEGIN@12" -> "Encode::Encoding::__ANON__"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 129)[XML/Twig.pm:7113]:1]"; "Test::Builder::new" -> "Test2::API::test2_add_callback_post_load"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseXLSX::_parse_sheet"; "Test::Builder::BEGIN@18" -> "Test2::API::_context_release_callbacks_ref"; "Test2::API::Instance::set_exit" -> "Test2::API::Stack::all"; "Test2::EventFacet::Trace::BEGIN@7" -> "Test2::EventFacet::BEGIN@2"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@29"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@9"; "OLE::Storage_Lite::BEGIN@1383" -> "POSIX::import"; "Test2::Formatter::TAP::event_tap" -> "Test::Builder::Formatter::plan_tap"; "XML::Twig::_twig_end" -> "XML::Twig::_replace_prefix"; "Test2::Formatter::TAP::event_tap" -> "Test2::Formatter::TAP::summary_tap"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@23"; "main::RUNTIME" -> "Spreadsheet::ParseXLSX::new"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268]" -> "XML::Twig::purge"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313]" -> "XML::Twig::purge"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]" -> "XML::Twig::purge"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "XML::Twig::purge"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655]" -> "XML::Twig::purge"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]" -> "XML::Twig::purge"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]" -> "XML::Twig::purge"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@90"; "XML::Twig::_a_proper_ns_prefix" -> "XML::Parser::Expat::current_ns_prefixes"; "Test2::Hub::process" -> "Test2::Event::Plan::facet_data"; "Spreadsheet::ParseExcel::BEGIN@32" -> "Spreadsheet::ParseExcel::Worksheet::BEGIN@19"; "Encode::Alias::init_aliases" -> "Encode::Alias::define_alias"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@47"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::BEGIN@29"; "IO::Handle::BEGIN@276" -> "IO::BEGIN@7"; "Test::Builder::BEGIN@18" -> "Test2::Event::V2::BEGIN@8"; "Time::HiRes::import" -> "Exporter::export_to_level"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::NewFileMember::BEGIN@6"; "Spreadsheet::ParseExcel::BEGIN@27" -> "Digest::Perl::MD5::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@238"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@23"; "Crypt::Mode::CBC::BEGIN@9" -> "Crypt::Cipher::BEGIN@3"; "Digest::Perl::MD5::gen_code" -> "CORE::readline"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@199"; "warnings::import" -> "warnings::_bits"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@189"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@212"; "parent::import" -> "Encode::Encoding::BEGIN@10"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@8119"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@137"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1488"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@1327"; "Test2::API::Stack::new_hub" -> "Test2::API::test2_ipc"; "Encode::BEGIN@56" -> "Storable::BEGIN@30"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@730"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@16"; "Archive::Zip::Member::BEGIN@578" -> "Archive::Zip::Member::__ANON__"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@5"; "Archive::Zip::Archive::_readEndOfCentralDirectory" -> "IO::Seekable::seek"; "Archive::Zip::ZipFileMember::rewindData" -> "IO::Seekable::seek"; "Archive::Zip::ZipFileMember::_skipLocalFileHeader" -> "IO::Seekable::seek"; "Archive::Zip::Archive::readFromFileHandle" -> "IO::Seekable::seek"; "Archive::Zip::ZipFileMember::_seekToLocalHeader" -> "IO::Seekable::seek"; "Archive::Zip::Archive::_findEndOfCentralDirectory" -> "IO::Seekable::seek"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@15"; "Encode::BEGIN@53" -> "Encode::Alias::BEGIN@5"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1539"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@16"; "URI::BEGIN@41" -> "URI::Escape::BEGIN@147"; "Exporter::Heavy::heavy_export_tags" -> "Exporter::Heavy::_push_tags"; "Exporter::Heavy::heavy_export_ok_tags" -> "Exporter::Heavy::_push_tags"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@16"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@5"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.41"; "File::Temp::BEGIN@147" -> "File::Temp::__ANON__"; "IO::Handle::BEGIN@276" -> "IO::BEGIN@5"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@27"; "XML::Twig::_twig_end" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@15" -> "MIME::Base64::BEGIN@4"; "XML::Twig::_twig_init" -> "XML::Twig::_set_fh_to_twig_output_fh"; "Test2::Util::HashBase::import" -> "mro::get_linear_isa"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@16"; "Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell" -> "XML::Twig::Elt::children"; "XML::Twig::Elt::__ANON__[(eval 87)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::children"; "XML::Twig::Elt::__ANON__[(eval 70)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::children"; "XML::Twig::Elt::__ANON__[(eval 103)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::children"; "XML::Twig::Elt::__ANON__[(eval 68)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::children"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "XML::Twig::Elt::children"; "XML::Twig::Elt::__ANON__[(eval 97)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::children"; "XML::Twig::Elt::__ANON__[(eval 76)[XML/Twig.pm:7113]:1]" -> "XML::Twig::Elt::children"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@156"; "Test::Builder::BEGIN@36" -> "Test::Builder::Formatter::BEGIN@3"; "Test2::API::BEGIN@92" -> "Test2::Event::Ok::BEGIN@2"; "Test2::API::BEGIN@5" -> "Time::HiRes::BEGIN@7"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@14"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@4211"; "Spreadsheet::ParseExcel::BEGIN@36" -> "Spreadsheet::ParseExcel::FmtDefault::BEGIN@19"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.8"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@270"; "Test2::Util::BEGIN@71" -> "Test2::Util::_can_thread"; "XML::Twig::new" -> "XML::Twig::set_quote"; "IO::File::BEGIN@124" -> "IO::Seekable::BEGIN@97"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@133"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@56"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@246"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@146"; "Compress::Raw::Zlib::Inflate::new" -> "Compress::Raw::Zlib::Parameters::value"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@42"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@515"; "Test2::Event::BEGIN@16" -> "Test2::EventFacet::Assert::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@205"; "XML::Twig::Elt::_and" -> "XML::Twig::Elt::_join_defined"; "Crypt::Cipher::BEGIN@9" -> "CryptX::BEGIN@13"; "XML::Parser::parse" -> "XML::Twig::_twig_init"; "Test::Builder::done_testing" -> "Test2::Hub::finalize"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@693"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@5"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "CORE::pack"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "CORE::pack"; "Config::AUTOLOAD" -> "CORE::pack"; "Time::Local::_daygm" -> "CORE::pack"; "Spreadsheet::ParseExcel::BEGIN@21" -> "CORE::pack"; "URI::BEGIN@41" -> "URI::Escape::BEGIN@153"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 96)[XML/Twig.pm:5871]:1]"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@169"; "Test::Builder::BEGIN@36" -> "Test::Builder::Formatter::BEGIN@9"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@145"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@61"; "Spreadsheet::ParseExcel::BEGIN@36" -> "Spreadsheet::ParseExcel::FmtDefault::BEGIN@20"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::FileMember::BEGIN@3"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::BEGIN@37"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@311"; "Test2::API::BEGIN@89" -> "Test2::Hub::Interceptor::BEGIN@3"; "Spreadsheet::ParseExcel::BEGIN@36" -> "Spreadsheet::ParseExcel::FmtDefault::BEGIN@22"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@262"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::BEGIN@6"; "main::BEGIN@5" -> "Test::More::BEGIN@1783"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@15"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@5"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::ZipFileMember::BEGIN@6"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@197"; "Spreadsheet::ParseXLSX::_extract_files" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268]" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::_parse_styles" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::_parse_themes" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::_color" -> "XML::Twig::Elt::att"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]" -> "XML::Twig::Elt::att"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@9"; "Spreadsheet::ParseXLSX::_parse_sheet" -> "XML::Twig::parse"; "Spreadsheet::ParseXLSX::_parse_xml" -> "XML::Twig::parse"; "Spreadsheet::ParseXLSX::_parse_shared_strings" -> "XML::Twig::parse"; "Test2::Event::BEGIN@16" -> "Test2::EventFacet::Assert::BEGIN@7"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@252"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::StringMember::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::NewFileMember::BEGIN@11"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 71)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 71)[XML/Twig.pm:5871]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@16"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 87)[XML/Twig.pm:7113]:1]"; "Archive::Zip::FileMember::_openFile" -> "Archive::Zip::_newFileHandle"; "Archive::Zip::Archive::read" -> "Archive::Zip::_newFileHandle"; "XML::Twig::_use" -> "URI::BEGIN@180"; "Test2::API::test2_set_is_end" -> "Test2::Util::__ANON__"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@72"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetEndCdataHandler"; "Archive::Zip::BEGIN@11" -> "Fcntl::O_BINARY"; "Archive::Zip::FileMember::fh" -> "Archive::Zip::FileMember::_openFile"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.50"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.72"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::Config::BEGIN@8"; "Spreadsheet::ParseXLSX::BEGIN@12" -> "Graphics::ColorUtils::BEGIN@492"; "Test::Builder::Module::import" -> "Test::Builder::Module::_strip_imports"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@834"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@63"; "Test2::Util::BEGIN@7" -> "POSIX::BEGIN@11"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@43"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@240"; "XML::Twig::new" -> "XML::Twig::_use"; "Test2::API::BEGIN@5" -> "Time::HiRes::BEGIN@4"; "Test::Builder::BEGIN@36" -> "Test::Builder::Formatter::BEGIN@11"; "Errno::_tie_it" -> "Errno::TIEHASH"; "XML::Twig::Elt::_install_cond" -> "CORE::regcomp"; "XML::Twig::_parse_xpath_handler" -> "CORE::regcomp"; "constant::import" -> "CORE::regcomp"; "File::Basename::fileparse_set_fstype" -> "CORE::regcomp"; "Spreadsheet::ParseXLSX::_zip_file_member" -> "CORE::regcomp"; "Archive::Zip::Archive::membersMatching" -> "CORE::regcomp"; "JSON::PP::BEGIN@53" -> "CORE::regcomp"; "XML::Twig::Elt::_install_xpath" -> "CORE::regcomp"; "XML::Twig::_set_pi_handler" -> "CORE::regcomp"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "CORE::regcomp"; "XML::Twig::_set_handler" -> "CORE::regcomp"; "XML::Twig::_set_special_handler" -> "CORE::regcomp"; "Config::fetch_string" -> "CORE::regcomp"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@11"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@176"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@17"; "XML::Twig::Elt::next_elt" -> "XML::Twig::Elt::__ANON__[(eval 86)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 86)[XML/Twig.pm:5871]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@4"; "Test::Builder::BEGIN@18" -> "Test2::Event::Fail::BEGIN@2"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@2"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@493"; "XML::Twig::new" -> "XML::Twig::Entity_list::new"; "JSON::PP::BEGIN@12" -> "JSON::PP::Boolean::BEGIN@3"; "main::RUNTIME" -> "Test2::API::INIT"; "Test2::Util::Facets2Legacy::BEGIN@10" -> "base::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::ZipFileMember::BEGIN@11"; "Test2::EventFacet::Trace::BEGIN@7" -> "Test2::EventFacet::BEGIN@7"; "XML::Twig::BEGIN@1125" -> "File::Glob::BEGIN@50"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@11"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.73"; "XML::Twig::_handler" -> "XML::Twig::__ANON__[(eval 111)[XML/Twig.pm:1750]:17]"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@167"; "Test2::EventFacet::Trace::BEGIN@7" -> "Test2::EventFacet::BEGIN@3"; "Encode::BEGIN@56" -> "Storable::BEGIN@487"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@2628"; "base::import" -> "base::has_attr"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@283"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@200"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::Archive::centralDirectoryOffsetWRTStartingDiskNumber"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@21"; "XML::Twig::_twig_end" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]"; "Test::Builder::new" -> "Test2::API::test2_add_callback_context_aquire"; "Test2::Hub::send" -> "Test::Builder::__ANON__[Test/Builder.pm:88]"; "constant::BEGIN@24" -> "Internals::SvREADONLY"; "constant::import" -> "Internals::SvREADONLY"; "IO::File::BEGIN@123" -> "IO::File::__ANON__"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::BEGIN@33"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::DirectoryMember::BEGIN@13"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@7919"; "Encode::BEGIN@53" -> "Encode::Alias::init_aliases"; "Test2::Hub::BEGIN@14" -> "Test2::Util::ExternalMeta::BEGIN@3"; "Config::FETCH" -> "Config::AUTOLOAD"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@843"; "Test::Builder::reset_outputs" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::Event::common_facet_data" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test::Builder::BEGIN@18" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::test2_set_is_end" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test::Builder::done_testing" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::Instance::set_exit" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test::Builder::_ending" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::test2_in_preload" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test::Builder::use_numbers" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::test2_load_done" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::test2_stack" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::_context_release_callbacks_ref" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test::Builder::reset" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test::Builder::expected_tests" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::Instance::__ANON__[Test2/API/Instance.pm:60]" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test::Builder::current_test" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::Hub::finalize" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::_contexts_ref" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Test2::API::test2_init_done" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@5"; "XML::Twig::Elt::cut" -> "XML::Twig::Elt::is_elt"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@71"; "Archive::Zip::Member::readChunk" -> "Archive::Zip::Member::compressionMethod"; "Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader" -> "Archive::Zip::Member::compressionMethod"; "Archive::Zip::Member::rewindData" -> "Archive::Zip::Member::compressionMethod"; "Test2::API::BEGIN@99" -> "Test2::Event::Skip::BEGIN@2"; "XML::Twig::new" -> "XML::Twig::setTwigRoots"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::StringMember::BEGIN@3"; "XML::Parser::Expat::ParseString" -> "XML::Twig::_twig_end"; "XML::Twig::_twig_end_check_roots" -> "XML::Twig::_twig_end"; "Test2::Event::BEGIN@22" -> "Test2::EventFacet::Plan::BEGIN@3"; "Test2::Util::BEGIN@7" -> "POSIX::BEGIN@3"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@11"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@21"; "Test2::API::test2_set_is_end" -> "Test2::API::Instance::pid"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@88"; "File::Temp::BEGIN@167" -> "parent::BEGIN@21"; "Test2::API::BEGIN@89" -> "Test2::Hub::Interceptor::BEGIN@93"; "XML::Parser::BEGIN@17" -> "CORE::ftdir"; "Time::HiRes::import" -> "Exporter::Heavy::heavy_export_to_level"; "Archive::Zip::BEGIN@6" -> "Cwd::BEGIN@3"; "Test2::Event::BEGIN@16" -> "Test2::EventFacet::Assert::BEGIN@8"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@297"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 79)[XML/Twig.pm:5871]:1]"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@13"; "Test2::Event::BEGIN@22" -> "Test2::EventFacet::Plan::BEGIN@2"; "Test2::Formatter::TAP::write" -> "CORE::print"; "Test2::Formatter::TAP::print_optimal_pass" -> "CORE::print"; "main::RUNTIME" -> "Test::More::ok"; "IO::Handle::BEGIN@275" -> "IO::Handle::__ANON__"; "Archive::Zip::FileMember::endRead" -> "Archive::Zip::Member::endRead"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@90"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@113"; "Archive::Zip::_isSeekable" -> "Archive::Zip::_ISA"; "File::Copy::BEGIN@14" -> "builtin::import"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@33"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.33"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 59)[XML/Twig.pm:5871]:1]"; "XML::Twig::_use" -> "URI::BEGIN@40"; "IO::File::open" -> "CORE::open"; "Test2::Util::clone_io" -> "CORE::open"; "XML::Twig::_replace_ns" -> "XML::Parser::Expat::new_ns_prefixes"; "Test2::API::BEGIN@96" -> "Test2::Event::Bail::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@21"; "Test2::Util::BEGIN@8" -> "Config::BEGIN@47"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 61)[XML/Twig.pm:7113]:1]"; "warnings::register_categories" -> "warnings::_mkMask"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@6"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@4181"; "Test2::Util::HashBase::BEGIN@33" -> "mro::BEGIN@11"; "IO::Seekable::BEGIN@100" -> "IO::Handle::BEGIN@275"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@100"; "File::Temp::BEGIN@167" -> "parent::BEGIN@2"; "Archive::Zip::Member::_inflateChunk" -> "Archive::Zip::Member::_inflater"; "Test2::Util::BEGIN@8" -> "Config::BEGIN@10"; "Spreadsheet::ParseXLSX::_parse_styles" -> "Spreadsheet::ParseExcel::Format::new"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@7340"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetStartCdataHandler"; "Test2::Event::Fail::BEGIN@7" -> "Test2::Event::Fail::__ANON__"; "XML::Twig::new" -> "XML::Twig::_normalize_args"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@15"; "Test2::API::Stack::top" -> "Test2::API::Stack::new_hub"; "XML::Twig::_use" -> "URI::BEGIN@9"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@4636"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@53"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@3"; "XML::Twig::new" -> "XML::Parser::new"; "Test::Builder::BEGIN@33" -> "Test::Builder::__ANON__"; "Test::Builder::BEGIN@34" -> "Test::Builder::__ANON__"; "Test::Builder::BEGIN@37" -> "Test::Builder::__ANON__"; "Test::Builder::BEGIN@37" -> "Test::Builder::TodoDiag::BEGIN@3"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@18"; "Encode::BEGIN@54" -> "Encode::__ANON__"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@13"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 90)[XML/Twig.pm:5871]:1]"; "Test::Builder::BEGIN@18" -> "Test2::Event::V2::BEGIN@2"; "IO::Seekable::BEGIN@100" -> "IO::Handle::BEGIN@273"; "File::Copy::BEGIN@19" -> "File::Copy::BEGIN@1"; "Test2::Event::Plan::facet_data" -> "Test2::Event::common_facet_data"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1547"; "Time::HiRes::import" -> "Time::HiRes::__ANON__[Time/HiRes.pm:71]"; "Spreadsheet::ParseExcel::BEGIN@26" -> "Crypt::RC4::BEGIN@16"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@9"; "Archive::Zip::Member::readChunk" -> "Archive::Zip::Member::readIsDone"; "Archive::Zip::BEGIN@11" -> "File::Temp::Dir::BEGIN@2603"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.66"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@63"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@4175"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@124"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@29"; "Test::Builder::BEGIN@36" -> "Test2::Formatter::import"; "Test2::Event::BEGIN@14" -> "Test2::EventFacet::About::BEGIN@7"; "POSIX::BEGIN@11" -> "Fcntl::BEGIN@60"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@14"; "Test2::Event::BEGIN@17" -> "Test2::EventFacet::Control::BEGIN@7"; "Test2::API::BEGIN@99" -> "Test2::Event::Skip::BEGIN@8"; "Test2::Util::HashBase::_new" -> "Test2::API::Instance::init"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@26"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@12.1"; "Test2::API::BEGIN@96" -> "Test2::Event::Bail::BEGIN@8"; "XML::Twig::_twig_end" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@126"; "Test::Builder::BEGIN@18" -> "Test2::Event::Pass::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@9"; "XML::Twig::_twig_end" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::base::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@309"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.57"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@306"; "Archive::Zip::BEGIN@6" -> "Cwd::BEGIN@2"; "Test::Builder::BEGIN@18" -> "Test2::Event::Pass::BEGIN@3"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::BEGIN@17"; "Test2::API::BEGIN@86" -> "Test2::Util::Trace::BEGIN@4"; "XML::Twig::set_quote" -> "XML::Twig::Elt::set_quote"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@75"; "XML::Parser::BEGIN@17" -> "XML::Parser::Expat::BEGIN@7"; "Archive::Zip::Member::_inflateChunk" -> "Archive::Zip::FileMember::endRead"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::FileMember::endRead"; "Archive::Zip::Member::readChunk" -> "Archive::Zip::FileMember::endRead"; "Archive::Zip::Member::contents" -> "Archive::Zip::FileMember::endRead"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@7"; "Test2::API::BEGIN@95" -> "Test2::Event::Plan::BEGIN@8"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@75"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@8"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@48"; "Test2::API::Instance::reset" -> "Test2::API::Stack::new"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 73)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::next_sibling" -> "XML::Twig::Elt::__ANON__[(eval 73)[XML/Twig.pm:5871]:1]"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@62"; "XML::Parser::Expat::ParseString" -> "XML::Twig::_twig_default"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@53"; "CryptX::BEGIN@13" -> "JSON::Backend::PP::BEGIN@342"; "overload::BEGIN@143" -> "warnings::register::import"; "constant::BEGIN@4" -> "warnings::register::import"; "vars::BEGIN@7" -> "warnings::register::import"; "Tie::Hash::BEGIN@191" -> "warnings::register::import"; "File::Find::BEGIN@5" -> "warnings::register::import"; "JSON::BEGIN@1" -> "UNIVERSAL::VERSION"; "File::Temp::BEGIN@149" -> "UNIVERSAL::VERSION"; "File::Temp::BEGIN@147" -> "UNIVERSAL::VERSION"; "File::Temp::BEGIN@150" -> "UNIVERSAL::VERSION"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "UNIVERSAL::VERSION"; "JSON::Backend::PP::init" -> "UNIVERSAL::VERSION"; "File::Temp::BEGIN@167" -> "UNIVERSAL::VERSION"; "File::Temp::BEGIN@176" -> "UNIVERSAL::VERSION"; "Test::Builder::BEGIN@15" -> "UNIVERSAL::VERSION"; "Test2::Util::BEGIN@11" -> "UNIVERSAL::VERSION"; "Encode::BEGIN@15" -> "UNIVERSAL::VERSION"; "URI::Escape::BEGIN@147" -> "UNIVERSAL::VERSION"; "Test::Builder::BEGIN@15" -> "List::Util::BEGIN@35"; "Compress::Raw::Zlib::AUTOLOAD" -> "Compress::Raw::Zlib::constant"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@7"; "Config::FETCH" -> "Config::fetch_string"; "CryptX::BEGIN@13" -> "JSON::BEGIN@7"; "XML::Twig::get_xpath" -> "XML::Twig::Elt::get_xpath"; "main::NULL" -> "main::BEGIN@5"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@8"; "Archive::Zip::BEGIN@7" -> "IO::File::BEGIN@124"; "Fcntl::O_NOINHERIT" -> "File::Temp::__ANON__[File/Temp.pm:244]"; "XML::Twig::BEGIN@1125" -> "File::Glob::BEGIN@3"; "main::BEGIN@5" -> "Test::Builder::Module::import"; "Test::More::BEGIN@22" -> "Test::Builder::Module::import"; "IO::Handle::BEGIN@276" -> "IO::BEGIN@8"; "Archive::Zip::BEGIN@11" -> "File::Temp::Dir::BEGIN@2601"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@68"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@208"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@10"; "XML::Twig::_replace_ns" -> "XML::Twig::_ns_info"; "File::Temp::BEGIN@168" -> "overload::BEGIN@102"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.74"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetExternalEntityRefHandler"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@11"; "Test2::API::BEGIN@96" -> "Test2::Event::Bail::BEGIN@3"; "XML::Twig::_twig_end" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268]"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::BEGIN@34"; "JSON::PP::BEGIN@12" -> "overload::unimport"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@210"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::BEGIN@13"; "Compress::Raw::Zlib::ParseParameters" -> "Compress::Raw::Zlib::Parameters::new"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@20"; "Test2::Event::BEGIN@15" -> "Test2::EventFacet::Amnesty::BEGIN@3"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@39"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::BEGIN@10"; "JSON::__load_xs" -> "JSON::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@38"; "XML::Twig::BEGIN@148" -> "XML::Twig::BEGIN@1"; "Test::Builder::BEGIN@36" -> "Test::Builder::Formatter::BEGIN@2"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@12"; "Test2::API::Instance::BEGIN@14" -> "Test2::API::Stack::BEGIN@10"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@3"; "Test2::Hub::finalize" -> "Test2::Hub::is_subtest"; "XML::Twig::_handler" -> "XML::Twig::__ANON__[(eval 102)[XML/Twig.pm:1750]:17]"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@13"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@10"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@11"; "Spreadsheet::ParseExcel::BEGIN@35" -> "Spreadsheet::ParseExcel::Cell::BEGIN@19"; "JSON::_load_xs" -> "JSON::__load_xs"; "CORE::sort" -> "XML::Twig::Elt::cmp"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@81"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@790"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@9"; "Test2::Event::BEGIN@17" -> "Test2::EventFacet::Control::BEGIN@8"; "Archive::Zip::Member::new" -> "Archive::Zip::Member::unixFileAttributes"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@10"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@71"; "Archive::Zip::ZipFileMember::_seekToLocalHeader" -> "Archive::Zip::FileMember::externalFileName"; "Archive::Zip::FileMember::_openFile" -> "Archive::Zip::FileMember::externalFileName"; "XML::Twig::set_remove_cdata" -> "XML::Twig::Elt::set_remove_cdata"; "Archive::Zip::Archive::BEGIN@7" -> "File::Find::BEGIN@5"; "Archive::Zip::Member::rewindData" -> "Archive::Zip::Member::compressedSize"; "Archive::Zip::Archive::BEGIN@7" -> "File::Find::BEGIN@4"; "XML::Twig::Elt::_gi_test" -> "XML::Twig::Elt::_and"; "parent::import" -> "Encode::Encoding::BEGIN@4"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@8"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@30"; "Config::FETCH" -> "Config::launcher"; "Test2::API::BEGIN@93" -> "Test2::Event::Diag::BEGIN@9"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::onBOOT"; "main::BEGIN@5" -> "Test::More::BEGIN@3"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.28"; "XML::Parser::BEGIN@17" -> "XML::Parser::Expat::BEGIN@8"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 105)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 105)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 80)[XML/Twig.pm:5871]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@279"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@23"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@115"; "Test2::API::BEGIN@100" -> "Test2::Event::Subtest::BEGIN@20"; "Test::Builder::BEGIN@18" -> "Test2::Event::V2::BEGIN@10"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@11"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@3"; "Archive::Zip::Member::contents" -> "Archive::Zip::Member::readChunk"; "IO::Handle::read" -> "CORE::read"; "Test2::Event::BEGIN@15" -> "Test2::EventFacet::Amnesty::BEGIN@10"; "XML::Parser::BEGIN@17" -> "XML::Parser::Expat::BEGIN@14"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@167"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@301"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::BEGIN@7"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@86"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@49"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@6"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@2"; "Spreadsheet::ParseExcel::BEGIN@31" -> "Spreadsheet::ParseExcel::Workbook::BEGIN@19"; "Test2::EventFacet::Trace::BEGIN@7" -> "Test2::EventFacet::BEGIN@8"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "Spreadsheet::ParseExcel::Cell::new"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@22" -> "Spreadsheet::ParseExcel::Utility::BEGIN@20"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@188"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::DirectoryMember::BEGIN@8"; "Crypt::Cipher::BEGIN@9" -> "CryptX::BEGIN@4"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::Root::BEGIN@172"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetAttListDeclHandler"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetStartElementHandler"; "Spreadsheet::ParseXLSX::_parse_styles" -> "Spreadsheet::ParseXLSX::_color"; "CryptX::BEGIN@13" -> "JSON::BEGIN@4"; "Test2::API::BEGIN@98" -> "Test2::Event::Waiting::BEGIN@2"; "Spreadsheet::ParseXLSX::_check_signature" -> "Scalar::Util::openhandle"; "Spreadsheet::ParseXLSX::parse" -> "Scalar::Util::openhandle"; "Archive::Zip::BEGIN@12" -> "FileHandle::BEGIN@3"; "base::__ANON__[base.pm:76]" -> "utf8::encode"; "JSON::BEGIN@1" -> "utf8::encode"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@578"; "Archive::Zip::Archive::membersMatching" -> "Archive::Zip::Member::fileName"; "Archive::Zip::ZipFileMember::isDirectory" -> "Archive::Zip::Member::fileName"; "Archive::Zip::Archive::memberNamed" -> "Archive::Zip::Member::fileName"; "XML::Twig::setTwigHandlers" -> "XML::Twig::_set_handlers"; "XML::Twig::setTwigRoots" -> "XML::Twig::_set_handlers"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@10"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@215"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@227"; "XML::Twig::_use" -> "URI::BEGIN@41"; "Test2::API::BEGIN@94" -> "Test2::Event::Note::BEGIN@3"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1494"; "Archive::Zip::BEGIN@7" -> "CORE::match"; "JSON::PP::BEGIN@688" -> "CORE::match"; "IO::Handle::_open_mode_string" -> "CORE::match"; "vars::import" -> "CORE::match"; "Test2::Hub::plan" -> "CORE::match"; "XML::Twig::BEGIN@1125" -> "CORE::match"; "XML::Twig::_parse_xpath_handler" -> "CORE::match"; "XML::Twig::_twig_char" -> "CORE::match"; "parent::import" -> "CORE::match"; "XML::Twig::_tag_cond" -> "CORE::match"; "Encode::BEGIN@9" -> "CORE::match"; "XML::Twig::_set_special_handler" -> "CORE::match"; "Encode::BEGIN@54" -> "CORE::match"; "Encode::BEGIN@53" -> "CORE::match"; "File::Basename::fileparse_set_fstype" -> "CORE::match"; "Digest::Perl::MD5::gen_code" -> "CORE::match"; "Test2::Event::Plan::init" -> "CORE::match"; "Spreadsheet::ParseXLSX::_cell_to_row_col" -> "CORE::match"; "Exporter::import" -> "CORE::match"; "Compress::Raw::Zlib::Parameters::_checkType" -> "CORE::match"; "XML::Twig::_twig_start" -> "CORE::match"; "warnings::import" -> "CORE::match"; "XML::Twig::_set_pi_handler" -> "CORE::match"; "CryptX::BEGIN@13" -> "CORE::match"; "constant::import" -> "CORE::match"; "Config::AUTOLOAD" -> "CORE::match"; "XML::Twig::Elt::_gi_test" -> "CORE::match"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]" -> "CORE::match"; "Test2::Hub::is_passing" -> "CORE::match"; "Config::fetch_string" -> "CORE::match"; "IO::File::open" -> "CORE::match"; "XML::Twig::_set_level_handler" -> "CORE::match"; "XML::Twig::_set_regexp_handler" -> "CORE::match"; "XML::Twig::Elt::new" -> "CORE::match"; "main::BEGIN@4" -> "CORE::match"; "Archive::Zip::Archive::BEGIN@12" -> "CORE::match"; "Archive::Zip::BEGIN@6" -> "CORE::match"; "XML::Twig::_twig_default" -> "CORE::match"; "Exporter::Heavy::heavy_export" -> "CORE::match"; "Test2::Util::_check_for_sig_sys" -> "CORE::match"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "CORE::match"; "XML::Twig::Elt::_install_xpath" -> "CORE::match"; "base::import" -> "CORE::match"; "Archive::Zip::Archive::membersMatching" -> "CORE::match"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@24"; "Test2::Event::BEGIN@20" -> "Test2::EventFacet::Meta::BEGIN@3"; "XML::Twig::Elt::new" -> "XML::Twig::Elt::set_gi"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@37"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@296"; "XML::Parser::Expat::ParseString" -> "XML::Twig::__ANON__[XML/Twig.pm:265]"; "Test2::Util::HashBase::BEGIN@33" -> "mro::BEGIN@10"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@19"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655]" -> "Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell"; "Test2::API::Instance::init" -> "Test2::API::Instance::reset"; "Spreadsheet::ParseXLSX::BEGIN@18" -> "Spreadsheet::ParseXLSX::Cell::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@227"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1540"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@19"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@38"; "Test2::API::BEGIN@99" -> "Test2::Event::Skip::BEGIN@9"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::NewFileMember::BEGIN@4"; "Test::Builder::Module::import" -> "Test::More::import_extra"; "XML::Twig::new" -> "XML::Twig::set_do_not_escape_amp_in_atts"; "Test2::Event::BEGIN@15" -> "Test2::EventFacet::Amnesty::BEGIN@9"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@1517"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.18"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::_install_xpath"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@34"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@273"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "Spreadsheet::ParseXLSX::BEGIN@11.2"; "Encode::BEGIN@56" -> "Storable::BEGIN@44"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseXLSX::_extract_files"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@16"; "Spreadsheet::ParseXLSX::BEGIN@18" -> "Spreadsheet::ParseXLSX::Cell::BEGIN@11"; "Test2::API::BEGIN@95" -> "Test2::Event::Plan::BEGIN@3"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::BEGIN@36"; "Test2::Util::HashBase::_new" -> "Test2::EventFacet::Trace::init"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1232"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::Module::__ANON__"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@3229"; "Test::Builder::BEGIN@18" -> "Test2::API::_contexts_ref"; "Spreadsheet::ParseExcel::BEGIN@31" -> "Spreadsheet::ParseExcel::Workbook::BEGIN@189"; "Carp::BEGIN@1" -> "overloading::unimport"; "overload::BEGIN@113" -> "overloading::unimport"; "overload::BEGIN@84" -> "overloading::unimport"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@151"; "Archive::Zip::Member::endRead" -> "Compress::Raw::Zlib::inflateStream::DESTROY"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@66"; "Archive::Zip::_readSignature" -> "IO::Handle::read"; "Archive::Zip::Archive::_readEndOfCentralDirectory" -> "IO::Handle::read"; "Archive::Zip::ZipFileMember::_readRawChunk" -> "IO::Handle::read"; "Archive::Zip::Archive::_findEndOfCentralDirectory" -> "IO::Handle::read"; "Archive::Zip::ZipFileMember::_skipLocalFileHeader" -> "IO::Handle::read"; "Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader" -> "IO::Handle::read"; "Spreadsheet::ParseXLSX::_check_signature" -> "IO::Handle::read"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@76"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::BEGIN@2"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1251"; "Test2::Hub::process" -> "Test2::Formatter::TAP::write"; "XML::Parser::parse" -> "XML::Parser::Expat::new"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@113"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "XML::Twig::Elt::first_child"; "Spreadsheet::ParseXLSX::_parse_styles" -> "XML::Twig::Elt::first_child"; "XML::Twig::Elt::children" -> "XML::Twig::Elt::first_child"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@202"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@19" -> "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4"; "IO::Seekable::seek" -> "CORE::seek"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::BEGIN@2"; "File::Path::BEGIN@27" -> "File::Path::__ANON__"; "XML::Twig::Elt::text" -> "XML::Twig::Elt::text"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "XML::Twig::Elt::text"; "Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell" -> "XML::Twig::Elt::text"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@230"; "XML::Parser::BEGIN@17" -> "XML::Parser::Expat::BEGIN@3"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@94"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.39"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@277"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@36"; "Test2::Event::V2::BEGIN@12" -> "Test2::Util::Facets2Legacy::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@151"; "Archive::Zip::BEGIN@7" -> "IO::File::BEGIN@121"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@265"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@97"; "Test2::Util::BEGIN@7" -> "Tie::StdHash::TIEHASH"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@34"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@1285"; "Test2::Hub::BEGIN@14" -> "Test2::Util::ExternalMeta::BEGIN@13"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@34"; "Exporter::as_heavy" -> "Exporter::Heavy::BEGIN@4"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.31"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@5"; "Test::Builder::done_testing" -> "Test::Builder::expected_tests"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@32"; "Test2::Event::V2::BEGIN@12" -> "Test2::Util::Facets2Legacy::BEGIN@8"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@148"; "Archive::Zip::Member::unixFileAttributes" -> "Archive::Zip::Member::_mapPermissionsFromUnix"; "Spreadsheet::ParseXLSX::parse" -> "Archive::Zip::Archive::read"; "Test::Builder::BEGIN@18" -> "Test2::Util::clone_io"; "Test2::Formatter::TAP::_open_handles" -> "Test2::Util::clone_io"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@231"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@202"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@26"; "Encode::BEGIN@53" -> "Encode::Alias::BEGIN@111"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 76)[XML/Twig.pm:7113]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@229"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@214"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 100)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 68)[XML/Twig.pm:7113]:1]"; "XML::Twig::_twig_final" -> "XML::Twig::_set_fh_to_selected_fh"; "Spreadsheet::ParseExcel::BEGIN@35" -> "Spreadsheet::ParseExcel::__ANON__"; "Spreadsheet::ParseExcel::BEGIN@33" -> "Spreadsheet::ParseExcel::__ANON__"; "Spreadsheet::ParseExcel::BEGIN@31" -> "Spreadsheet::ParseExcel::__ANON__"; "Spreadsheet::ParseExcel::BEGIN@32" -> "Spreadsheet::ParseExcel::__ANON__"; "Spreadsheet::ParseExcel::BEGIN@36" -> "Spreadsheet::ParseExcel::__ANON__"; "Spreadsheet::ParseExcel::BEGIN@34" -> "Spreadsheet::ParseExcel::__ANON__"; "Test2::Event::BEGIN@19" -> "Test2::EventFacet::Info::BEGIN@10"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1490"; "Spreadsheet::ParseExcel::FmtDefault::ValFmt" -> "Spreadsheet::ParseExcel::FmtDefault::TextFmt"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.64"; "XML::Twig::_set_xpath_handler" -> "XML::Twig::_add_handler"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@64"; "Archive::Zip::Archive::BEGIN@7" -> "File::Spec::Unix::curdir"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetCommentHandler"; "XML::Parser::BEGIN@17" -> "XML::Parser::ExpatNB::BEGIN@600"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.53"; "Test2::Util::BEGIN@8" -> "version::(bool"; "XML::Parser::ContentModel::BEGIN@512" -> "overload::import"; "URI::BEGIN@43" -> "overload::import"; "File::Temp::Dir::BEGIN@2603" -> "overload::import"; "File::Copy::BEGIN@15" -> "overload::import"; "JSON::PP::BEGIN@12" -> "overload::import"; "File::Temp::BEGIN@168" -> "overload::import"; "File::Temp::BEGIN@168" -> "overload::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@35"; "Archive::Zip::Member::contents" -> "Archive::Zip::ZipFileMember::rewindData"; "Test2::Event::BEGIN@17" -> "Test2::EventFacet::Control::BEGIN@2"; "Archive::Zip::BEGIN@37" -> "Exporter::export_ok_tags"; "XML::Twig::new" -> "XML::Twig::set_output_text_filter"; "IO::File::BEGIN@124" -> "IO::Seekable::BEGIN@103"; "Test::Builder::BEGIN@18" -> "Test2::Event::Fail::BEGIN@9"; "Archive::Zip::ZipFileMember::_readRawChunk" -> "Archive::Zip::FileMember::fh"; "Archive::Zip::ZipFileMember::_seekToLocalHeader" -> "Archive::Zip::FileMember::fh"; "Archive::Zip::ZipFileMember::_skipLocalFileHeader" -> "Archive::Zip::FileMember::fh"; "Archive::Zip::ZipFileMember::rewindData" -> "Archive::Zip::FileMember::fh"; "Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader" -> "Archive::Zip::FileMember::fh"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::_binmode"; "Archive::Zip::FileMember::_openFile" -> "Archive::Zip::_binmode"; "Config::AUTOLOAD" -> "Internals::V"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.62"; "Test2::API::BEGIN@98" -> "Test2::Event::Waiting::BEGIN@8"; "Archive::Zip::Archive::BEGIN@7" -> "File::Find::BEGIN@13"; "Encode::Alias::init_aliases" -> "Encode::Alias::undef_aliases"; "IO::File::BEGIN@122" -> "Symbol::BEGIN@137"; "Archive::Zip::ZipFileMember::_skipLocalFileHeader" -> "IO::Seekable::tell"; "Archive::Zip::Archive::_findEndOfCentralDirectory" -> "IO::Seekable::tell"; "Archive::Zip::Archive::_readEndOfCentralDirectory" -> "IO::Seekable::tell"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@223"; "File::Temp::BEGIN@152" -> "Errno::BEGIN@9"; "XML::Twig::BEGIN@1125" -> "File::Glob::BEGIN@54"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@80"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@72"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.23"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@1471"; "IO::Handle::close" -> "CORE::close"; "Digest::Perl::MD5::gen_code" -> "CORE::close"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.45"; "warnings::register::import" -> "warnings::register_categories"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.61"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@129"; "Spreadsheet::ParseExcel::BEGIN@32" -> "Spreadsheet::ParseExcel::Worksheet::BEGIN@21"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::Member::_newFromZipFile"; "XML::Twig::_twig_start_check_roots" -> "XML::Twig::_handler"; "XML::Twig::_twig_end" -> "XML::Twig::_handler"; "Test::Builder::BEGIN@18" -> "Test2::API::_add_uuid_via_ref"; "Test2::Hub::init" -> "Test2::API::_add_uuid_via_ref"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.43"; "XML::Twig::new" -> "XML::Parser::setHandlers"; "Test2::Util::HashBase::_new" -> "Test2::API::Context::init"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@235"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@8"; "Test::Builder::BEGIN@18" -> "Test2::Event::V2::BEGIN@7"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@149"; "Spreadsheet::ParseXLSX::_parse_themes" -> "XML::Twig::get_xpath"; "Spreadsheet::ParseXLSX::_extract_files" -> "XML::Twig::get_xpath"; "Spreadsheet::ParseXLSX::_parse_styles" -> "XML::Twig::get_xpath"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "XML::Twig::get_xpath"; "IO::File::BEGIN@124" -> "IO::Seekable::BEGIN@99"; "IO::File::BEGIN@124" -> "IO::Seekable::BEGIN@98"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@34"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@116"; "File::Temp::BEGIN@168" -> "overload::BEGIN@143"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 103)[XML/Twig.pm:7113]:1]"; "Spreadsheet::ParseXLSX::_extract_files" -> "Spreadsheet::ParseXLSX::_rels_for"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@131"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.10"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@31"; "Test2::API::Instance::BEGIN@14" -> "Test2::API::Stack::BEGIN@3"; "Archive::Zip::Member::BEGIN@27" -> "Time::Local::BEGIN@3"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@3"; "parent::import" -> "Encode::Encoding::BEGIN@14"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@307"; "Test::Builder::BEGIN@18" -> "Test2::Event::Fail::BEGIN@3"; "XML::Twig::_set_xpath_handler" -> "XML::Twig::_parse_xpath_handler"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@6232"; "XML::Twig::Elt::delete" -> "XML::Twig::Elt::cut"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@4246"; "XML::Parser::BEGIN@17" -> "XML::Parser::ContentModel::BEGIN@512"; "File::Temp::BEGIN@168" -> "overload::BEGIN@3"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@11"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1485"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@103"; "XML::Twig::set_output_text_filter" -> "XML::Twig::Elt::set_output_text_filter"; "Exporter::as_heavy" -> "Exporter::Heavy::BEGIN@3"; "Test2::API::BEGIN@92" -> "Test2::Event::Ok::BEGIN@3"; "base::import" -> "base::has_fields"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@11" -> "Crypt::Mode::ECB::BEGIN@6"; "XML::Parser::Expat::DESTROY" -> "XML::Parser::Expat::ParserFree"; "Digest::SHA::BEGIN@202" -> "integer::unimport"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@123"; "Spreadsheet::ParseXLSX::_extract_files" -> "Spreadsheet::ParseXLSX::_base_path_for"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@40"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.36"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.14"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::_install_cond"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::_install_cond"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetElementDeclHandler"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@141"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 69)[XML/Twig.pm:5871]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@260"; "XML::Twig::Elt::__ANON__[(eval 76)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 60)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 129)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 97)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 58)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 68)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 62)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 66)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 61)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 63)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 70)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 85)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 103)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 87)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "XML::Twig::Elt::__ANON__[(eval 64)[XML/Twig.pm:7113]:1]" -> "XML::Twig::_unique_elts"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@144"; "Test2::Util::HashBase::_new" -> "Test2::Event::Plan::init"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@152"; "Spreadsheet::ParseXLSX::BEGIN@18" -> "Spreadsheet::ParseXLSX::Cell::BEGIN@10"; "IO::File::BEGIN@122" -> "Symbol::BEGIN@156"; "Test::Builder::reset_outputs" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:85]"; "Test::Builder::use_numbers" -> "Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:85]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@221"; "XML::Parser::Expat::parse" -> "XML::Parser::Expat::ParseString"; "Archive::Zip::Member::readIsDone" -> "Archive::Zip::Member::_dataEnded"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 70)[XML/Twig.pm:7113]:1]"; "Config::AUTOLOAD" -> "Config::BEGIN@5"; "File::Copy::BEGIN@14" -> "builtin::BEGIN@4"; "File::Copy::BEGIN@14" -> "builtin::BEGIN@3"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.5"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@15"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@92"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@66"; "Test::Builder::BEGIN@36" -> "Test::Builder::Formatter::BEGIN@7"; "Test2::Formatter::TAP::BEGIN@17" -> "Test2::Formatter::BEGIN@2"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@797"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::BEGIN@33"; "Archive::Zip::Archive::read" -> "IO::Handle::close"; "Spreadsheet::ParseXLSX::_check_signature" -> "IO::Handle::close"; "Test2::API::BEGIN@95" -> "Test2::Event::Plan::BEGIN@2"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@10" -> "Crypt::Mode::CBC::BEGIN@5"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@104"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@12"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@6"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@185"; "Test2::API::END" -> "Test2::API::Instance::set_exit"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::_join_n"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.37"; "CryptX::BEGIN@13" -> "JSON::_load_xs"; "Test2::Hub::finalize" -> "Test2::Formatter::finalize"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@12"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@102"; "XML::Twig::_replace_ns" -> "XML::Twig::parser"; "XML::Twig::_replace_prefix" -> "XML::Twig::parser"; "XML::Twig::_ns_info" -> "XML::Twig::parser"; "Test2::Event::Pass::BEGIN@7" -> "Test2::Event::Pass::__ANON__"; "Encode::BEGIN@53" -> "Encode::Alias::BEGIN@2"; "Spreadsheet::ParseExcel::BEGIN@34" -> "Spreadsheet::ParseExcel::Format::BEGIN@19"; "File::Path::BEGIN@7" -> "File::Basename::BEGIN@42"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@17"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@171"; "Compress::Raw::Zlib::ParseParameters" -> "Compress::Raw::Zlib::Parameters::parse"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@3587"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@3619"; "Archive::Zip::BEGIN@11" -> "Carp::Heavy::BEGIN@3"; "XML::Twig::_handler" -> "XML::Twig::__ANON__[(eval 114)[XML/Twig.pm:1750]:26]"; "IO::Seekable::tell" -> "CORE::tell"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@6"; "File::Temp::END" -> "File::Temp::cleanup"; "Spreadsheet::ParseExcel::BEGIN@34" -> "Spreadsheet::ParseExcel::Format::BEGIN@20"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.25"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@8"; "File::Path::BEGIN@7" -> "File::Basename::fileparse_set_fstype"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@13"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@12"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@219"; "parent::import" -> "Encode::Encoding::BEGIN@12"; "XML::Twig::BEGIN@25" -> "utf8::BEGIN@3"; "Spreadsheet::ParseXLSX::_extract_files" -> "Archive::Zip::Archive::memberNamed"; "Encode::BEGIN@56" -> "Storable::BEGIN@42"; "Test2::API::Instance::BEGIN@14" -> "Test2::API::Stack::BEGIN@81"; "Spreadsheet::ParseXLSX::_extract_files" -> "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979]"; "Encode::BEGIN@56" -> "Encode::BEGIN@11"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@133"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 62)[XML/Twig.pm:7113]:1]"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@153"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@19"; "Archive::Zip::ZipFileMember::_newFromZipFile" -> "Archive::Zip::Member::new"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@1125"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@3"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@831"; "XML::Twig::_twig_start_check_roots" -> "XML::Twig::root"; "XML::Twig::descendants" -> "XML::Twig::root"; "XML::Twig::_twig_end_check_roots" -> "XML::Twig::root"; "XML::Twig::get_xpath" -> "XML::Twig::root"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseXLSX::_parse_themes"; "XML::Twig::_replace_ns" -> "XML::Parser::Expat::expand_ns_prefix"; "XML::Twig::_a_proper_ns_prefix" -> "XML::Parser::Expat::expand_ns_prefix"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 85)[XML/Twig.pm:7113]:1]"; "Test2::Util::HashBase::_new" -> "Test2::Event::V2::init"; "Spreadsheet::ParseExcel::BEGIN@33" -> "Spreadsheet::ParseExcel::Font::BEGIN@20"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@10" -> "Crypt::Mode::CBC::BEGIN@6"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.13"; "Test2::Formatter::new_root" -> "Test2::Util::HashBase::_new"; "Test2::API::Instance::set_exit" -> "Test2::Util::HashBase::_new"; "Test2::API::test2_set_is_end" -> "Test2::Util::HashBase::_new"; "Test2::API::Context::send_ev2" -> "Test2::Util::HashBase::_new"; "Test2::API::Stack::new_hub" -> "Test2::Util::HashBase::_new"; "Test2::Event::V2::init" -> "Test2::Util::HashBase::_new"; "Test2::API::Instance::import" -> "Test2::Util::HashBase::_new"; "Test2::Hub::finalize" -> "Test2::Util::HashBase::_new"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1057"; "Test2::API::context" -> "Test::Builder::__ANON__[Test/Builder.pm:154]"; "Archive::Zip::BEGIN@11" -> "File::Temp::BEGIN@145"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@154"; "XML::Twig::Elt::descendants" -> "XML::Twig::Elt::next_elt"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@751"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.17"; "Test2::Util::ExternalMeta::meta" -> "Test2::Util::ExternalMeta::validate_key"; "Test2::Hub::init" -> "Test2::Util::gen_uid"; "Test2::API::context" -> "Test2::Util::gen_uid"; "Test2::Event::eid" -> "Test2::Util::gen_uid"; "Test2::EventFacet::BEGIN@7" -> "Test2::Util::HashBase::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@203"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.51"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "Spreadsheet::ParseXLSX::_xml_boolean"; "Spreadsheet::ParseXLSX::_parse_styles" -> "Spreadsheet::ParseXLSX::_xml_boolean"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseXLSX::_xml_boolean"; "Spreadsheet::ParseXLSX::_color" -> "Spreadsheet::ParseXLSX::_xml_boolean"; "XML::Twig::_set_handler" -> "XML::Twig::_set_pi_handler"; "XML::Twig::new" -> "XML::Twig::set_output_filter"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::File::BEGIN@714"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@207"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@19"; "Archive::Zip::BEGIN@11" -> "Fcntl::O_TEMPORARY"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@98"; "XML::Twig::_use" -> "URI::BEGIN@4"; "Test2::Event::BEGIN@18" -> "Test2::EventFacet::Error::BEGIN@11"; "Test2::API::BEGIN@88" -> "Test2::Hub::Subtest::BEGIN@8"; "Digest::Perl::MD5::gen_code" -> "CORE::substcont"; "IO::Handle::_open_mode_string" -> "CORE::substcont"; "Config::AUTOLOAD" -> "CORE::substcont"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@9"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@36"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@12"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@20"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@22"; "XML::Parser::parse" -> "XML::Parser::Expat::DESTROY"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::next_sibling" -> "XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1]"; "Test2::Util::BEGIN@8" -> "Config::BEGIN@9"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 94)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.34"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@32"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@272"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@688"; "Test2::API::BEGIN@95" -> "Test2::Event::Plan::BEGIN@9"; "Test2::API::Instance::BEGIN@14" -> "Test2::API::Stack::BEGIN@8"; "Test2::Event::BEGIN@18" -> "Test2::EventFacet::Error::BEGIN@10"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 63)[XML/Twig.pm:7113]:1]"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::DirectoryMember::BEGIN@3"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 128)[XML/Twig.pm:5871]:1]"; "Spreadsheet::ParseXLSX::_parse_styles" -> "Spreadsheet::ParseExcel::Font::new"; "IO::Handle::new" -> "Symbol::gensym"; "Test2::API::BEGIN@89" -> "Test2::Hub::Interceptor::BEGIN@2"; "XML::Parser::parse" -> "XML::Parser::Expat::release"; "XML::Twig::_ns_info" -> "XML::Twig::_a_proper_ns_prefix"; "XML::Twig::_replace_prefix" -> "XML::Twig::_a_proper_ns_prefix"; "Test2::Util::BEGIN@7" -> "POSIX::BEGIN@2"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "Spreadsheet::ParseExcel::FmtDefault::new"; "Config::AUTOLOAD" -> "Config::BEGIN@6"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Archive::BEGIN@10"; "Test2::Hub::BEGIN@14" -> "Test2::Util::ExternalMeta::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@12" -> "Graphics::ColorUtils::BEGIN@4"; "Test::Builder::BEGIN@18" -> "Test2::Event::Fail::BEGIN@15"; "Test2::Event::BEGIN@18" -> "Test2::EventFacet::Error::BEGIN@2"; "XML::Twig::BEGIN@151" -> "XML::Parser::BEGIN@15"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.16"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@14"; "Test2::API::Stack::new_hub" -> "Test2::Formatter::new_root"; "Test2::Util::BEGIN@8" -> "Config::TIEHASH"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@190"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.63"; "Test2::API::BEGIN@92" -> "Test2::Event::Ok::BEGIN@9"; "IO::Seekable::BEGIN@100" -> "IO::Handle::BEGIN@276"; "Test2::Hub::process" -> "Test2::Event::V2::facet_data"; "Spreadsheet::ParseExcel::BEGIN@27" -> "Digest::Perl::MD5::gen_code"; "Spreadsheet::ParseExcel::BEGIN@32" -> "Spreadsheet::ParseExcel::Worksheet::BEGIN@20"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.52"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@8108"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@6"; "Test::Builder::BEGIN@1057" -> "warnings::unimport"; "Carp::BEGIN@744" -> "warnings::unimport"; "Test2::Util::BEGIN@72" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.22" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.33" -> "warnings::unimport"; "Test2::Hub::Subtest::BEGIN@47" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.24" -> "warnings::unimport"; "Test2::Util::HashBase::BEGIN@29" -> "warnings::unimport"; "Test2::Formatter::TAP::BEGIN@113" -> "warnings::unimport"; "Test::Builder::BEGIN@121" -> "warnings::unimport"; "XML::Twig::BEGIN@1.59" -> "warnings::unimport"; "Test2::API::Instance::BEGIN@63" -> "warnings::unimport"; "XML::Twig::BEGIN@1.51" -> "warnings::unimport"; "XML::Twig::BEGIN@1.56" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.14" -> "warnings::unimport"; "Carp::BEGIN@6" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.17" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.36" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.72" -> "warnings::unimport"; "XML::Twig::BEGIN@1.50" -> "warnings::unimport"; "Spreadsheet::ParseExcel::Cell::BEGIN@169" -> "warnings::unimport"; "XML::Twig::BEGIN@1.46" -> "warnings::unimport"; "JSON::PP::BEGIN@1285" -> "warnings::unimport"; "Test::More::BEGIN@1783" -> "warnings::unimport"; "XML::Twig::BEGIN@1.68" -> "warnings::unimport"; "Test2::EventFacet::Meta::BEGIN@12" -> "warnings::unimport"; "Test::Builder::BEGIN@1519" -> "warnings::unimport"; "Test::Builder::BEGIN@103" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.31" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.19" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.13" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.29" -> "warnings::unimport"; "Test::Builder::BEGIN@117" -> "warnings::unimport"; "XML::Twig::BEGIN@1.65" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.44" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.27" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.35" -> "warnings::unimport"; "XML::Twig::BEGIN@812" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.5" -> "warnings::unimport"; "XML::Twig::BEGIN@1.53" -> "warnings::unimport"; "Test::Builder::BEGIN@1540" -> "warnings::unimport"; "JSON::PP::BEGIN@493" -> "warnings::unimport"; "XML::Twig::BEGIN@1.62" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.18" -> "warnings::unimport"; "Test::Builder::BEGIN@797" -> "warnings::unimport"; "XML::Twig::BEGIN@1.67" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.47" -> "warnings::unimport"; "Test2::Hub::Subtest::BEGIN@66" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.41" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.34" -> "warnings::unimport"; "File::Glob::BEGIN@50" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.74" -> "warnings::unimport"; "Test::Builder::BEGIN@62" -> "warnings::unimport"; "Test2::Event::Ok::BEGIN@22" -> "warnings::unimport"; "overload::BEGIN@102" -> "warnings::unimport"; "JSON::PP::BEGIN@209" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.21" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.42" -> "warnings::unimport"; "XML::Twig::BEGIN@1.64" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.49" -> "warnings::unimport"; "XML::Twig::BEGIN@1.58" -> "warnings::unimport"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@625" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.8" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.43" -> "warnings::unimport"; "Test2::API::BEGIN@76" -> "warnings::unimport"; "Test2::API::BEGIN@71" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.20" -> "warnings::unimport"; "Test::More::BEGIN@1408" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.16" -> "warnings::unimport"; "XML::Twig::BEGIN@1.55" -> "warnings::unimport"; "Test2::Hub::Subtest::BEGIN@24" -> "warnings::unimport"; "Spreadsheet::ParseExcel::Workbook::BEGIN@189" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.70" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.15" -> "warnings::unimport"; "File::Copy::BEGIN@13" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.12" -> "warnings::unimport"; "Spreadsheet::ParseExcel::BEGIN@2705" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.73" -> "warnings::unimport"; "XML::Twig::BEGIN@1.61" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.40" -> "warnings::unimport"; "Test2::Util::BEGIN@89" -> "warnings::unimport"; "XML::Twig::BEGIN@1.66" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.32" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.37" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.45" -> "warnings::unimport"; "XML::Twig::BEGIN@1.69" -> "warnings::unimport"; "XML::Twig::BEGIN@1.60" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.38" -> "warnings::unimport"; "Test2::EventFacet::Trace::BEGIN@16" -> "warnings::unimport"; "Storable::BEGIN@66" -> "warnings::unimport"; "JSON::PP::BEGIN@1471" -> "warnings::unimport"; "Test::Builder::BEGIN@1167" -> "warnings::unimport"; "Test2::Util::BEGIN@80" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.23" -> "warnings::unimport"; "Test2::API::Context::BEGIN@72" -> "warnings::unimport"; "URI::Escape::BEGIN@191" -> "warnings::unimport"; "Test2::Hub::Interceptor::BEGIN@93" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.30" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.39" -> "warnings::unimport"; "Exporter::Heavy::BEGIN@202" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.48" -> "warnings::unimport"; "Test2::API::Stack::BEGIN@81" -> "warnings::unimport"; "Test2::Formatter::TAP::BEGIN@89" -> "warnings::unimport"; "Test2::Util::HashBase::BEGIN@18" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.71" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1" -> "warnings::unimport"; "Test::Builder::BEGIN@1557" -> "warnings::unimport"; "XML::Twig::BEGIN@1.54" -> "warnings::unimport"; "Test::Builder::BEGIN@684" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.25" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.3" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.9" -> "warnings::unimport"; "Test::Builder::BEGIN@131" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.11" -> "warnings::unimport"; "Test2::Util::BEGIN@113" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.28" -> "warnings::unimport"; "XML::Twig::BEGIN@1.63" -> "warnings::unimport"; "JSON::PP::BEGIN@515" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.7" -> "warnings::unimport"; "File::Copy::BEGIN@12.1" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.6" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.4" -> "warnings::unimport"; "XML::Twig::BEGIN@1.57" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.10" -> "warnings::unimport"; "XML::Twig::BEGIN@1.52" -> "warnings::unimport"; "Test::More::BEGIN@1494" -> "warnings::unimport"; "Test2::Event::Subtest::BEGIN@20" -> "warnings::unimport"; "XML::Twig::Elt::BEGIN@1.26" -> "warnings::unimport"; "Exporter::as_heavy" -> "Exporter::Heavy::BEGIN@202"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.48"; "XML::Twig::Elt::set_atts" -> "XML::Twig::Elt::keep_atts_order"; "CryptX::BEGIN@13" -> "JSON::BEGIN@6"; "Test2::API::BEGIN@93" -> "Test2::Event::Diag::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@61"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetDefaultHandler"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.54"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1519"; "Carp::BEGIN@137" -> "Carp::_univ_mod_loaded"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.44"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.27"; "Test2::API::BEGIN@89" -> "Test2::Hub::Interceptor::BEGIN@11"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::FileMember::BEGIN@4"; "Archive::Zip::ZipFileMember::rewindData" -> "Archive::Zip::ZipFileMember::_skipLocalFileHeader"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@11" -> "Crypt::Mode::ECB::BEGIN@5"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@103"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@42"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@77"; "Archive::Zip::_binmode" -> "IO::Handle::binmode"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@40"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::BEGIN@9"; "XML::Twig::_twig_start_check_roots" -> "XML::Parser::Expat::depth"; "XML::Twig::_twig_end" -> "XML::Parser::Expat::depth"; "XML::Twig::_twig_end_check_roots" -> "XML::Parser::Expat::depth"; "Archive::Zip::Archive::BEGIN@9" -> "File::Copy::BEGIN@17"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@3"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@46"; "File::Path::BEGIN@7" -> "File::Basename::BEGIN@50"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::Member::_revbe"; "Exporter::Heavy::heavy_export" -> "Exporter::Heavy::_rebuild_cache"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@3"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@121"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@22"; "IO::Seekable::BEGIN@100" -> "IO::Handle::BEGIN@617"; "Archive::Zip::Member::rewindData" -> "Compress::Raw::Zlib::Inflate::new"; "JSON::PP::BEGIN@12" -> "JSON::PP::Boolean::BEGIN@4"; "Archive::Zip::ZipFileMember::rewindData" -> "Archive::Zip::ZipFileMember::_seekToLocalHeader"; "main::BEGIN@7" -> "Spreadsheet::ParseXLSX::BEGIN@4"; "JSON::_load_pp" -> "JSON::Backend::PP::init"; "Archive::Zip::BEGIN@11" -> "Fcntl::O_NOINHERIT"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::BEGIN@829"; "Test2::API::BEGIN@99" -> "Test2::Event::Skip::BEGIN@3"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@9"; "Archive::Zip::BEGIN@10" -> "File::Spec::BEGIN@3"; "XML::Twig::_twig_start" -> "XML::Twig::_replace_ns"; "XML::Twig::_twig_start_check_roots" -> "XML::Twig::_replace_ns"; "Spreadsheet::ParseExcel::BEGIN@31" -> "Spreadsheet::ParseExcel::Workbook::BEGIN@20"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@228"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@295"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@285"; "Test2::API::BEGIN@92" -> "Test2::Event::Ok::BEGIN@8"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@302"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 127)[XML/Twig.pm:5871]:1]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::ZipFileMember::BEGIN@4"; "Test2::API::Stack::BEGIN@8" -> "Test2::Hub::BEGIN@14"; "Archive::Zip::BEGIN@10" -> "File::Spec::Unix::BEGIN@209"; "Archive::Zip::Member::rewindData" -> "Archive::Zip::Member::desiredCompressionMethod"; "Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader" -> "Archive::Zip::Member::desiredCompressionMethod"; "Archive::Zip::Member::contents" -> "Archive::Zip::Member::desiredCompressionMethod"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1491"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.70"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.15"; "Test::Builder::BEGIN@15" -> "List::Util::BEGIN@9"; "Test::Builder::BEGIN@20" -> "Test2::API::test2_init_done"; "Spreadsheet::ParseExcel::BEGIN@33" -> "Spreadsheet::ParseExcel::Font::BEGIN@19"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::import"; "Test::Builder::Module::builder" -> "Test::Builder::new"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::new"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::Dir::BEGIN@802"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@8"; "Test2::Hub::send" -> "Test2::Event::add_hub"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@56"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 91)[XML/Twig.pm:5871]:1]"; "Test2::Event::V2::BEGIN@12" -> "Test2::Util::Facets2Legacy::BEGIN@10"; "Test2::API::test2_has_ipc" -> "Test2::API::Instance::has_ipc"; "XML::Twig::Elt::twig" -> "XML::Twig::Elt::root"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@8"; "XML::Twig::Elt::BEGIN@7919" -> "utf8::unimport"; "XML::Twig::BEGIN@4649" -> "utf8::unimport"; "XML::Twig::BEGIN@4636" -> "utf8::unimport"; "Test2::Util::BEGIN@7" -> "POSIX::BEGIN@225"; "Archive::Zip::Member::_newFromZipFile" -> "Archive::Zip::ZipFileMember::_newFromZipFile"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@127"; "Test2::API::BEGIN@93" -> "Test2::Event::Diag::BEGIN@2"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::Archive::eocdOffset"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::StringMember::BEGIN@11"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@3842"; "Test2::Event::BEGIN@14" -> "Test2::EventFacet::About::BEGIN@8"; "XML::Parser::Expat::ParseString" -> "XML::Parser::Expat::NamespaceStart"; "Spreadsheet::ParseXLSX::BEGIN@17" -> "Spreadsheet::ParseXLSX::Decryptor::BEGIN@4"; "Archive::Zip::_binmode" -> "Archive::Zip::_CAN"; "IO::Seekable::BEGIN@100" -> "IO::Handle::BEGIN@271"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@78"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@9"; "Spreadsheet::ParseXLSX::_extract_files" -> "XML::Twig::DESTROY"; "XML::Twig::_checked_parse_result" -> "XML::Twig::DESTROY"; "Spreadsheet::ParseXLSX::_parse_workbook" -> "XML::Twig::DESTROY"; "Archive::Zip::BEGIN@7" -> "IO::File::BEGIN@123"; "Fcntl::O_TEMPORARY" -> "File::Temp::__ANON__[File/Temp.pm:274]"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.26"; "File::Temp::BEGIN@168" -> "overload::BEGIN@113"; "Test2::API::BEGIN@5" -> "Time::HiRes::BEGIN@70"; "XML::Parser::parse" -> "XML::Parser::Expat::parse"; "Test::Builder::BEGIN@18" -> "Test2::Event::V2::BEGIN@17"; "XML::Twig::new" -> "XML::Twig::Notation_list::new"; "XML::Twig::Elt::_install_xpath" -> "XML::Twig::Elt::BEGIN@1.6"; "Test2::EventFacet::Meta::BEGIN@8" -> "vars::BEGIN@3"; "XML::Twig::descendants" -> "XML::Twig::Elt::descendants"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1487"; "Crypt::Mode::CBC::BEGIN@9" -> "Crypt::Cipher::BEGIN@7"; "Encode::BEGIN@54" -> "Encode::MIME::Name::BEGIN@2"; "XML::Twig::DESTROY" -> "XML::Twig::Elt::delete"; "XML::Twig::purge" -> "XML::Twig::Elt::delete"; "Test2::Event::BEGIN@17" -> "Test2::EventFacet::Control::BEGIN@3"; "Test2::API::Instance::BEGIN@14" -> "Test2::API::Stack::BEGIN@2"; "XML::Twig::_twig_start" -> "XML::Parser::Expat::setHandlers"; "XML::Twig::_twig_end" -> "XML::Parser::Expat::setHandlers"; "XML::Twig::_twig_start_check_roots" -> "XML::Parser::Expat::setHandlers"; "XML::Parser::parse" -> "XML::Parser::Expat::setHandlers"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@58"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@278"; "XML::Twig::set_keep_atts_order" -> "XML::Twig::Elt::set_keep_atts_order"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@29"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 95)[XML/Twig.pm:5871]:1]"; "Test::Builder::BEGIN@15" -> "List::Util::BEGIN@10"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@294"; "XML::Parser::Expat::ParseString" -> "XML::Twig::_twig_start_check_roots"; "Test::More::import_extra" -> "Test::Builder::exported_to"; "Test::Builder::Module::import" -> "Test::Builder::exported_to"; "Spreadsheet::ParseXLSX::_zip_file_member" -> "Archive::Zip::Archive::membersMatching"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@67"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@27"; "Test::Builder::reset" -> "Test::Builder::reset_outputs"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@59"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@60"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@10"; "File::Temp::cleanup" -> "CORE::sort"; "XML::Twig::_unique_elts" -> "CORE::sort"; "POSIX::import" -> "CORE::sort"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@5"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@14"; "Archive::Zip::BEGIN@7" -> "IO::File::BEGIN@120"; "main::NULL" -> "main::BEGIN@4"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "Spreadsheet::ParseExcel::FmtDefault::ValFmt"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@157"; "Archive::Zip::BEGIN@220" -> "constant::import"; "JSON::PP::BEGIN@30" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@76" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@66" -> "constant::import"; "Archive::Zip::BEGIN@246" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@127" -> "constant::import"; "File::Spec::Unix::BEGIN@124" -> "constant::import"; "Archive::Zip::BEGIN@192" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@63" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@147" -> "constant::import"; "Time::Local::BEGIN@36" -> "constant::import"; "Archive::Zip::BEGIN@257" -> "constant::import"; "Archive::Zip::BEGIN@251" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@156" -> "constant::import"; "Archive::Zip::BEGIN@185" -> "constant::import"; "Archive::Zip::BEGIN@261" -> "constant::import"; "Archive::Zip::BEGIN@267" -> "constant::import"; "Archive::Zip::BEGIN@273" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1491" -> "constant::import"; "Archive::Zip::Member::BEGIN@33" -> "constant::import"; "Archive::Zip::BEGIN@268" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@128" -> "constant::import"; "Archive::Zip::BEGIN@312" -> "constant::import"; "File::Spec::Unix::BEGIN@209" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@58" -> "constant::import"; "Archive::Zip::BEGIN@278" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@145" -> "constant::import"; "Archive::Zip::BEGIN@277" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@75" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1487" -> "constant::import"; "Archive::Zip::BEGIN@253" -> "constant::import"; "File::Spec::Unix::BEGIN@133" -> "constant::import"; "Archive::Zip::BEGIN@230" -> "constant::import"; "File::Temp::BEGIN@219" -> "constant::import"; "Archive::Zip::BEGIN@306" -> "constant::import"; "Archive::Zip::BEGIN@289" -> "constant::import"; "Archive::Zip::BEGIN@309" -> "constant::import"; "Archive::Zip::BEGIN@286" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@78" -> "constant::import"; "Archive::Zip::BEGIN@202" -> "constant::import"; "Archive::Zip::BEGIN@205" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@126" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@157" -> "constant::import"; "Archive::Zip::BEGIN@203" -> "constant::import"; "JSON::PP::BEGIN@26" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@154" -> "constant::import"; "File::Spec::Unix::BEGIN@231" -> "constant::import"; "Archive::Zip::Member::BEGIN@37" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@153" -> "constant::import"; "Archive::Zip::BEGIN@300" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@158" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@62" -> "constant::import"; "Archive::Zip::BEGIN@252" -> "constant::import"; "Archive::Zip::BEGIN@191" -> "constant::import"; "Archive::Zip::BEGIN@239" -> "constant::import"; "Archive::Zip::BEGIN@197" -> "constant::import"; "JSON::PP::BEGIN@35" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@59" -> "constant::import"; "Archive::Zip::BEGIN@188" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@60" -> "constant::import"; "Time::Local::BEGIN@35" -> "constant::import"; "Archive::Zip::BEGIN@198" -> "constant::import"; "Archive::Zip::BEGIN@236" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@67" -> "constant::import"; "JSON::PP::BEGIN@27" -> "constant::import"; "JSON::PP::BEGIN@34" -> "constant::import"; "Archive::Zip::BEGIN@262" -> "constant::import"; "Archive::Zip::BEGIN@311" -> "constant::import"; "Archive::Zip::BEGIN@265" -> "constant::import"; "JSON::PP::BEGIN@48" -> "constant::import"; "JSON::PP::BEGIN@29" -> "constant::import"; "Archive::Zip::BEGIN@294" -> "constant::import"; "Archive::Zip::BEGIN@275" -> "constant::import"; "JSON::PP::BEGIN@25" -> "constant::import"; "Archive::Zip::BEGIN@272" -> "constant::import"; "Archive::Zip::Member::BEGIN@36" -> "constant::import"; "Archive::Zip::BEGIN@313" -> "constant::import"; "JSON::PP::BEGIN@32" -> "constant::import"; "JSON::PP::BEGIN@41" -> "constant::import"; "JSON::PP::BEGIN@39" -> "constant::import"; "Archive::Zip::Member::BEGIN@35" -> "constant::import"; "Archive::Zip::BEGIN@210" -> "constant::import"; "Time::Local::BEGIN@34" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@114" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@64" -> "constant::import"; "JSON::PP::BEGIN@36" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1490" -> "constant::import"; "Archive::Zip::BEGIN@207" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@155" -> "constant::import"; "Archive::Zip::BEGIN@201" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@146" -> "constant::import"; "Archive::Zip::BEGIN@214" -> "constant::import"; "Archive::Zip::BEGIN@229" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@68" -> "constant::import"; "File::Temp::BEGIN@228" -> "constant::import"; "Archive::Zip::BEGIN@208" -> "constant::import"; "Archive::Zip::BEGIN@240" -> "constant::import"; "JSON::PP::BEGIN@43" -> "constant::import"; "Archive::Zip::BEGIN@211" -> "constant::import"; "Archive::Zip::BEGIN@204" -> "constant::import"; "Archive::Zip::BEGIN@235" -> "constant::import"; "Archive::Zip::BEGIN@256" -> "constant::import"; "Archive::Zip::BEGIN@269" -> "constant::import"; "Archive::Zip::BEGIN@266" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@129" -> "constant::import"; "Archive::Zip::BEGIN@247" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@81" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@72" -> "constant::import"; "Archive::Zip::BEGIN@200" -> "constant::import"; "Archive::Zip::BEGIN@283" -> "constant::import"; "File::Temp::BEGIN@223" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@61" -> "constant::import"; "Archive::Zip::BEGIN@297" -> "constant::import"; "Archive::Zip::BEGIN@291" -> "constant::import"; "Archive::Zip::BEGIN@308" -> "constant::import"; "Archive::Zip::BEGIN@301" -> "constant::import"; "Archive::Zip::BEGIN@288" -> "constant::import"; "Archive::Zip::BEGIN@307" -> "constant::import"; "Archive::Zip::BEGIN@298" -> "constant::import"; "Encode::Encoding::BEGIN@14" -> "constant::import"; "Archive::Zip::BEGIN@222" -> "constant::import"; "File::Temp::BEGIN@216" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1493" -> "constant::import"; "Archive::Zip::BEGIN@310" -> "constant::import"; "File::Spec::Unix::BEGIN@115" -> "constant::import"; "Archive::Zip::BEGIN@279" -> "constant::import"; "File::Temp::BEGIN@229" -> "constant::import"; "JSON::PP::BEGIN@40" -> "constant::import"; "Archive::Zip::BEGIN@213" -> "constant::import"; "Archive::Zip::BEGIN@190" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1492" -> "constant::import"; "Archive::Zip::Member::BEGIN@34" -> "constant::import"; "OLE::Storage_Lite::BEGIN@843" -> "constant::import"; "Archive::Zip::BEGIN@199" -> "constant::import"; "Archive::Zip::BEGIN@237" -> "constant::import"; "Archive::Zip::BEGIN@212" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1494" -> "constant::import"; "Archive::Zip::BEGIN@189" -> "constant::import"; "Archive::Zip::BEGIN@215" -> "constant::import"; "Archive::Zip::BEGIN@238" -> "constant::import"; "JSON::PP::BEGIN@46" -> "constant::import"; "File::Temp::BEGIN@227" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@130" -> "constant::import"; "JSON::PP::BEGIN@33" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@70" -> "constant::import"; "Spreadsheet::ParseExcel::BEGIN@77" -> "constant::import"; "JSON::PP::BEGIN@42" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::import"; "Archive::Zip::BEGIN@245" -> "constant::import"; "Archive::Zip::BEGIN@274" -> "constant::import"; "JSON::PP::BEGIN@28" -> "constant::import"; "JSON::PP::BEGIN@49" -> "constant::import"; "JSON::PP::BEGIN@31" -> "constant::import"; "Archive::Zip::BEGIN@282" -> "constant::import"; "Archive::Zip::BEGIN@305" -> "constant::import"; "Archive::Zip::BEGIN@292" -> "constant::import"; "JSON::PP::BEGIN@45" -> "constant::import"; "Archive::Zip::BEGIN@295" -> "constant::import"; "Archive::Zip::BEGIN@302" -> "constant::import"; "Archive::Zip::BEGIN@285" -> "constant::import"; "Archive::Zip::BEGIN@209" -> "constant::import"; "Archive::Zip::BEGIN@228" -> "constant::import"; "JSON::PP::BEGIN@38" -> "constant::import"; "URI::BEGIN@9" -> "constant::import"; "Archive::Zip::BEGIN@206" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1489" -> "constant::import"; "Archive::Zip::BEGIN@221" -> "constant::import"; "Archive::Zip::BEGIN@227" -> "constant::import"; "Encode::BEGIN@7" -> "constant::import"; "Encode::Alias::BEGIN@5" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@144" -> "constant::import"; "Archive::Zip::BEGIN@260" -> "constant::import"; "JSON::PP::IncrParser::BEGIN@1488" -> "constant::import"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@4"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@240"; "XML::Twig::Elt::next_sibling" -> "XML::Twig::Elt::__ANON__[(eval 126)[XML/Twig.pm:5871]:1]"; "XML::Twig::Elt::first_child" -> "XML::Twig::Elt::__ANON__[(eval 126)[XML/Twig.pm:5871]:1]"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@206"; "File::Temp::BEGIN@152" -> "Errno::BEGIN@11"; "Test2::Formatter::TAP::_open_handles" -> "Test2::Formatter::TAP::_autoflush"; "Test::Builder::Formatter::BEGIN@7" -> "Test2::Formatter::TAP::_autoflush"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@201"; "Test2::Event::BEGIN@20" -> "Test2::EventFacet::Meta::BEGIN@7"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@51"; "Test2::Event::BEGIN@19" -> "Test2::EventFacet::Info::BEGIN@9"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@179"; "Test::Builder::BEGIN@18" -> "Test2::Event::Fail::BEGIN@7"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@85"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@120"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@114"; "File::Path::BEGIN@7" -> "File::Basename::BEGIN@51"; "Archive::Zip::Archive::BEGIN@7" -> "File::Find::BEGIN@7"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 66)[XML/Twig.pm:7113]:1]"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@2"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@18" -> "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4"; "Test2::Hub::Interceptor::BEGIN@8" -> "Test2::Hub::Interceptor::Terminator::BEGIN@2"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@41"; "Test2::Event::BEGIN@21" -> "Test2::EventFacet::Parent::BEGIN@2"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@6961"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::SHA::BEGIN@8"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@99"; "Spreadsheet::ParseExcel::BEGIN@21" -> "OLE::Storage_Lite::PPS::Root::BEGIN@169"; "Test2::API::BEGIN@97" -> "Test2::Event::Exception::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::DirectoryMember::BEGIN@6"; "Archive::Zip::Member::unixFileAttributes" -> "Archive::Zip::ZipFileMember::isDirectory"; "Archive::Zip::Archive::readFromFileHandle" -> "Archive::Zip::ZipFileMember::isDirectory"; "Test::More::BEGIN@22" -> "Test::Builder::Module::BEGIN@3"; "Test::Builder::Module::import" -> "Test::Builder::plan"; "JSON::_load_pp" -> "JSON::__load_pp"; "Spreadsheet::ParseXLSX::parse" -> "Spreadsheet::ParseXLSX::_parse_workbook"; "Test::Builder::BEGIN@17" -> "Test2::Util::BEGIN@89"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@93"; "Test::Builder::BEGIN@18" -> "Test2::API::BEGIN@76"; "IO::File::new" -> "IO::File::open"; "Archive::Zip::_newFileHandle" -> "IO::File::open"; "Archive::Zip::BEGIN@11" -> "Exporter::Heavy::heavy_export_tags"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::StringMember::BEGIN@6"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@3"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "Spreadsheet::ParseXLSX::BEGIN@2"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::_gi_test"; "Test2::API::BEGIN@94" -> "Test2::Event::Note::BEGIN@8"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1492"; "POSIX::BEGIN@11" -> "Fcntl::BEGIN@58"; "XML::Twig::new" -> "XML::Twig::set_remove_cdata"; "XML::Twig::Elt::passes" -> "XML::Twig::Elt::__ANON__[(eval 65)[XML/Twig.pm:5871]:1]"; "Archive::Zip::Archive::_readEndOfCentralDirectory" -> "CORE::unpack"; "Archive::Zip::_readSignature" -> "CORE::unpack"; "Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader" -> "CORE::unpack"; "Config::AUTOLOAD" -> "CORE::unpack"; "Archive::Zip::ZipFileMember::_skipLocalFileHeader" -> "CORE::unpack"; "Archive::Zip::BEGIN@12" -> "FileHandle::BEGIN@4"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.3"; "Crypt::Cipher::BEGIN@9" -> "CryptX::BEGIN@3"; "File::Path::BEGIN@7" -> "File::Basename::BEGIN@52"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@310"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1493"; "Test2::Util::ExternalMeta::BEGIN@3" -> "warnings::import"; "Symbol::BEGIN@4" -> "warnings::import"; "Spreadsheet::ParseXLSX::BEGIN@2" -> "warnings::import"; "Test2::API::Instance::BEGIN@3" -> "warnings::import"; "overloading::BEGIN@2" -> "warnings::import"; "Test::Builder::BEGIN@133" -> "warnings::import"; "File::Find::BEGIN@4" -> "warnings::import"; "Spreadsheet::ParseExcel::BEGIN@18" -> "warnings::import"; "Scalar::Util::BEGIN@10" -> "warnings::import"; "Config::BEGIN@6" -> "warnings::import"; "Encode::BEGIN@6" -> "warnings::import"; "Crypt::Cipher::BEGIN@4" -> "warnings::import"; "Test::Builder::Formatter::BEGIN@3" -> "warnings::import"; "Test2::Event::Plan::BEGIN@3" -> "warnings::import"; "utf8::BEGIN@4" -> "warnings::import"; "Test2::Hub::Interceptor::Terminator::BEGIN@3" -> "warnings::import"; "Test2::EventFacet::BEGIN@3" -> "warnings::import"; "MIME::Base64::BEGIN@4" -> "warnings::import"; "Encode::Alias::BEGIN@3" -> "warnings::import"; "Test2::Event::Fail::BEGIN@3" -> "warnings::import"; "Test2::Hub::BEGIN@3" -> "warnings::import"; "Spreadsheet::ParseExcel::FmtDefault::BEGIN@20" -> "warnings::import"; "Carp::BEGIN@5" -> "warnings::import"; "Test2::EventFacet::Control::BEGIN@3" -> "warnings::import"; "URI::Escape::BEGIN@4" -> "warnings::import"; "Test2::Event::Diag::BEGIN@3" -> "warnings::import"; "Test2::Hub::Subtest::BEGIN@3" -> "warnings::import"; "Test2::Util::Trace::BEGIN@4" -> "warnings::import"; "Test2::API::Stack::BEGIN@3" -> "warnings::import"; "Test2::Formatter::TAP::BEGIN@3" -> "warnings::import"; "Test2::Event::BEGIN@3" -> "warnings::import"; "Test2::EventFacet::Info::BEGIN@3" -> "warnings::import"; "Test2::Event::Pass::BEGIN@3" -> "warnings::import"; "Test2::Event::V2::BEGIN@3" -> "warnings::import"; "Graphics::ColorUtils::BEGIN@6" -> "warnings::import"; "File::Basename::BEGIN@52" -> "warnings::import"; "POSIX::BEGIN@3" -> "warnings::import"; "Test2::EventFacet::Plan::BEGIN@3" -> "warnings::import"; "Test2::EventFacet::About::BEGIN@3" -> "warnings::import"; "Spreadsheet::ParseExcel::Worksheet::BEGIN@20" -> "warnings::import"; "Test::Builder::BEGIN@5" -> "warnings::import"; "Test2::Event::Subtest::BEGIN@3" -> "warnings::import"; "Test2::Formatter::BEGIN@3" -> "warnings::import"; "Test::Builder::BEGIN@693" -> "warnings::import"; "Spreadsheet::ParseExcel::Format::BEGIN@20" -> "warnings::import"; "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4" -> "warnings::import"; "bytes::BEGIN@4" -> "warnings::import"; "Test2::EventFacet::Assert::BEGIN@3" -> "warnings::import"; "Test2::API::Context::BEGIN@3" -> "warnings::import"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@4" -> "warnings::import"; "Test2::EventFacet::Meta::BEGIN@3" -> "warnings::import"; "IO::BEGIN@8" -> "warnings::import"; "Test2::Event::Note::BEGIN@3" -> "warnings::import"; "Test2::Util::HashBase::BEGIN@3" -> "warnings::import"; "Encode::Config::BEGIN@8" -> "warnings::import"; "Spreadsheet::ParseExcel::Cell::BEGIN@20" -> "warnings::import"; "main::BEGIN@4" -> "warnings::import"; "Encode::MIME::Name::BEGIN@3" -> "warnings::import"; "Test2::Util::Facets2Legacy::BEGIN@3" -> "warnings::import"; "Test2::Event::Waiting::BEGIN@3" -> "warnings::import"; "Test::More::BEGIN@5" -> "warnings::import"; "Crypt::Mode::ECB::BEGIN@6" -> "warnings::import"; "Test2::Event::Ok::BEGIN@3" -> "warnings::import"; "Test2::Util::BEGIN@3" -> "warnings::import"; "CryptX::BEGIN@4" -> "warnings::import"; "Crypt::Mode::CBC::BEGIN@6" -> "warnings::import"; "Spreadsheet::ParseExcel::Utility::BEGIN@20" -> "warnings::import"; "Spreadsheet::ParseExcel::Font::BEGIN@20" -> "warnings::import"; "Compress::Raw::Zlib::BEGIN@9" -> "warnings::import"; "Test2::EventFacet::Error::BEGIN@3" -> "warnings::import"; "Test2::Hub::Interceptor::BEGIN@3" -> "warnings::import"; "List::Util::BEGIN@10" -> "warnings::import"; "Test2::EventFacet::Trace::BEGIN@3" -> "warnings::import"; "Test::Builder::TodoDiag::BEGIN@3" -> "warnings::import"; "Test2::Event::Exception::BEGIN@3" -> "warnings::import"; "Test2::EventFacet::Amnesty::BEGIN@3" -> "warnings::import"; "Spreadsheet::ParseExcel::Workbook::BEGIN@20" -> "warnings::import"; "Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4" -> "warnings::import"; "builtin::BEGIN@4" -> "warnings::import"; "Digest::SHA::BEGIN@6" -> "warnings::import"; "Test2::Event::Skip::BEGIN@3" -> "warnings::import"; "Test2::EventFacet::Hub::BEGIN@3" -> "warnings::import"; "File::Copy::BEGIN@12" -> "warnings::import"; "Spreadsheet::ParseXLSX::Cell::BEGIN@4" -> "warnings::import"; "Spreadsheet::ParseXLSX::BEGIN@4" -> "warnings::import"; "Test2::Event::Bail::BEGIN@3" -> "warnings::import"; "URI::BEGIN@4" -> "warnings::import"; "Encode::Encoding::BEGIN@5" -> "warnings::import"; "Config::BEGIN@10" -> "warnings::import"; "Test2::EventFacet::Parent::BEGIN@3" -> "warnings::import"; "JSON::PP::Boolean::BEGIN@4" -> "warnings::import"; "Digest::base::BEGIN@4" -> "warnings::import"; "Test2::API::BEGIN@3" -> "warnings::import"; "mro::BEGIN@11" -> "warnings::import"; "Test2::API::BEGIN@51" -> "Test2::API::Instance::BEGIN@16"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@10" -> "Crypt::Mode::CBC::BEGIN@9"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@222"; "Archive::Zip::BEGIN@11" -> "Fcntl::O_EXLOCK"; "Test::Builder::Formatter::plan_tap" -> "Test2::Formatter::TAP::plan_tap"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@30"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@308"; "XML::Twig::_use" -> "URI::BEGIN@43"; "IO::File::open" -> "IO::Handle::_open_mode_string"; "Test::Builder::reset" -> "UNIVERSAL::isa"; "base::import" -> "UNIVERSAL::isa"; "Test::Builder::reset_outputs" -> "UNIVERSAL::isa"; "XML::Twig::Elt::next_elt" -> "UNIVERSAL::isa"; "XML::Twig::Elt::in" -> "UNIVERSAL::isa"; "XML::Twig::Elt::set_output_filter" -> "UNIVERSAL::isa"; "XML::Twig::DESTROY" -> "UNIVERSAL::isa"; "XML::Twig::setTwigRoots" -> "UNIVERSAL::isa"; "XML::Twig::parse" -> "UNIVERSAL::isa"; "XML::Twig::_twig_final" -> "UNIVERSAL::isa"; "Archive::Zip::_ISA" -> "UNIVERSAL::isa"; "XML::Twig::get_xpath" -> "UNIVERSAL::isa"; "XML::Twig::Elt::set_output_text_filter" -> "UNIVERSAL::isa"; "Test::Builder::Module::BEGIN@5" -> "Test::Builder::BEGIN@1557"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@31"; "JSON::BEGIN@1" -> "JSON::PP::BEGIN@28"; "Test2::API::Instance::BEGIN@13" -> "Test2::EventFacet::Trace::BEGIN@2"; "IO::Seekable::BEGIN@100" -> "IO::Handle::BEGIN@274"; "Archive::Zip::BEGIN@9" -> "Compress::Raw::Zlib::BEGIN@10"; "Test::Builder::BEGIN@18" -> "Test2::API::Context::BEGIN@12"; "File::Temp::BEGIN@149" -> "File::Path::BEGIN@4"; "Test2::Hub::finalize" -> "Test2::Hub::cull"; "XML::Twig::parse" -> "XML::Parser::parse"; "Test2::API::Context::send_ev2" -> "Test2::Hub::send"; "Test2::Hub::finalize" -> "Test2::Hub::send"; "Test::Builder::ok" -> "Test2::Hub::send"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@245"; "Archive::Zip::Member::readChunk" -> "Archive::Zip::Member::isEncrypted"; "main::BEGIN@5" -> "Test::More::BEGIN@4"; "CryptX::BEGIN@13" -> "JSON::BEGIN@5"; "Test2::Event::BEGIN@21" -> "Test2::EventFacet::Parent::BEGIN@9"; "main::NULL" -> "main::BEGIN@7"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@4649"; "main::BEGIN@5" -> "Test::More::BEGIN@5"; "Spreadsheet::ParseXLSX::BEGIN@14" -> "Spreadsheet::ParseExcel::BEGIN@35"; "IO::Seekable::BEGIN@100" -> "IO::Handle::BEGIN@272"; "Test2::API::BEGIN@98" -> "Test2::Event::Waiting::BEGIN@3"; "XML::Twig::_set_handler" -> "XML::Twig::_set_regexp_handler"; "Tie::Hash::BEGIN@190" -> "Carp::BEGIN@744"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::Elt::BEGIN@8906"; "Test2::Event::Ok::BEGIN@8" -> "Test2::Event::BEGIN@17"; "Archive::Zip::BEGIN@6" -> "Cwd::BEGIN@644"; "Encode::BEGIN@53" -> "Encode::Alias::BEGIN@7"; "Spreadsheet::ParseXLSX::BEGIN@15" -> "XML::Twig::BEGIN@33"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.56"; "XML::Twig::Elt::get_xpath" -> "XML::Twig::Elt::__ANON__[(eval 60)[XML/Twig.pm:7113]:1]"; "Test2::API::test2_add_callback_post_load" -> "Test2::API::Instance::add_post_load_callback"; "Spreadsheet::ParseExcel::BEGIN@26" -> "Crypt::RC4::BEGIN@15"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@19" -> "Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3"; "Test::Builder::INIT" -> "Test2::API::test2_load"; "Test::Builder::Module::import" -> "Test2::API::test2_load"; "Test::Builder::Formatter::BEGIN@11" -> "Test2::Formatter::TAP::OUT_ERR"; "Carp::BEGIN@169" -> "Carp::BEGIN@1"; "Test2::API::BEGIN@100" -> "Test2::Event::Subtest::BEGIN@7"; "Archive::Zip::Archive::BEGIN@12" -> "Encode::BEGIN@15"; "XML::Twig::_use" -> "URI::BEGIN@3"; "Spreadsheet::ParseXLSX::Decryptor::BEGIN@12" -> "Digest::base::BEGIN@4"; "Archive::Zip::Archive::BEGIN@7" -> "File::Find::BEGIN@3"; "Compress::Raw::Zlib::BEGIN@113" -> "constant::BEGIN@3"; "XML::Twig::Elt::_install_cond" -> "XML::Twig::Elt::BEGIN@1.49"; "XML::Twig::Elt::__ANON__[(eval 60)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 76)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 129)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 58)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 97)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 68)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 62)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 63)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 61)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 66)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 64)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 87)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 103)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 85)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "XML::Twig::Elt::__ANON__[(eval 70)[XML/Twig.pm:7113]:1]" -> "XML::Twig::descendants"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]" -> "Spreadsheet::ParseXLSX::_dimensions"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]" -> "Spreadsheet::ParseXLSX::_cell_to_row_col"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]" -> "Spreadsheet::ParseXLSX::_cell_to_row_col"; "Spreadsheet::ParseXLSX::_dimensions" -> "Spreadsheet::ParseXLSX::_cell_to_row_col"; "Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]" -> "Spreadsheet::ParseXLSX::_cell_to_row_col"; "XML::Twig::BEGIN@1125" -> "File::Glob::GLOB_CSH"; "JSON::BEGIN@1" -> "JSON::PP::IncrParser::BEGIN@1489"; "Test::Builder::reset" -> "Test2::API::test2_in_preload"; "Test::Builder::INIT" -> "Test2::API::test2_in_preload"; "Test::Builder::Module::import" -> "Test2::API::test2_in_preload"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@206"; "base::import" -> "base::__ANON__[base.pm:76]"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::BEGIN@209"; "Test2::API::BEGIN@86" -> "Test2::Util::Trace::BEGIN@5"; "Test2::API::BEGIN@100" -> "Test2::Event::Subtest::BEGIN@2"; "XML::Parser::Expat::setHandlers" -> "XML::Parser::Expat::SetDoctypeHandler"; "XML::Twig::_set_handler" -> "XML::Twig::_set_xpath_handler"; "File::Copy::BEGIN@16" -> "File::Copy::__ANON__"; "Spreadsheet::ParseXLSX::BEGIN@11" -> "Archive::Zip::FileMember::BEGIN@11"; "XML::Twig::_parse_xpath_handler" -> "XML::Twig::BEGIN@1.67"; } Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Amnesty-pm-43-line.html0000644000175000017500000004570414576335353025266 0ustar michamicha Profile of Test2/EventFacet/Amnesty.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Amnesty.pm
StatementsExecuted 10 statements in 98µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsTest2::EventFacet::Amnesty::::BEGIN@2Test2::EventFacet::Amnesty::BEGIN@2
1116µs6µsTest2::EventFacet::Amnesty::::BEGIN@9Test2::EventFacet::Amnesty::BEGIN@9
1114µs43µsTest2::EventFacet::Amnesty::::BEGIN@10Test2::EventFacet::Amnesty::BEGIN@10
1113µs19µsTest2::EventFacet::Amnesty::::BEGIN@3Test2::EventFacet::Amnesty::BEGIN@3
0000s0sTest2::EventFacet::Amnesty::::is_listTest2::EventFacet::Amnesty::is_list
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Amnesty;
2217µs212µs
# spent 11µs (9+2) within Test2::EventFacet::Amnesty::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Event::BEGIN@15 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::Amnesty::BEGIN@2 # spent 2µs making 1 call to strict::import
3243µs235µs
# spent 19µs (3+16) within Test2::EventFacet::Amnesty::BEGIN@3 which was called: # once (3µs+16µs) by Test2::Event::BEGIN@15 at line 3
use warnings;
# spent 19µs making 1 call to Test2::EventFacet::Amnesty::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7sub is_list { 1 }
8
9221µs16µs
# spent 6µs within Test2::EventFacet::Amnesty::BEGIN@9 which was called: # once (6µs+0s) by Test2::Event::BEGIN@15 at line 9
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 6µs making 1 call to Test2::EventFacet::Amnesty::BEGIN@9
10216µs282µs
# spent 43µs (4+39) within Test2::EventFacet::Amnesty::BEGIN@10 which was called: # once (4µs+39µs) by Test2::Event::BEGIN@15 at line 10
use Test2::Util::HashBase qw{ -tag -inherited };
# spent 43µs making 1 call to Test2::EventFacet::Amnesty::BEGIN@10 # spent 39µs making 1 call to Test2::Util::HashBase::import
11
1212µs1;
13
14__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test-Builder-pm-5-line.html0000644000175000017500000123712614576335353023050 0ustar michamicha Profile of Test/Builder.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:22 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm
StatementsExecuted 283 statements in 6.59ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115.39ms27.5msTest::Builder::::BEGIN@18Test::Builder::BEGIN@18
1111.33ms11.2msTest::Builder::::BEGIN@17Test::Builder::BEGIN@17
1111.17ms1.48msTest::Builder::::BEGIN@15Test::Builder::BEGIN@15
111343µs2.62msTest::Builder::::BEGIN@36Test::Builder::BEGIN@36
111164µs202µsTest::Builder::::BEGIN@37Test::Builder::BEGIN@37
11147µs430µsTest::Builder::::resetTest::Builder::reset
11145µs353µsTest::Builder::::done_testingTest::Builder::done_testing
11140µs256µsTest::Builder::::okTest::Builder::ok
11129µs43µsTest::Builder::::_endingTest::Builder::_ending
11128µs59µsTest::Builder::::reset_outputsTest::Builder::reset_outputs
88120µs419µsTest::Builder::::ctxTest::Builder::ctx
52216µs53µsTest::Builder::::newTest::Builder::new
11116µs48µsTest::Builder::::use_numbersTest::Builder::use_numbers
11115µs58µsTest::Builder::::__ANON__[:156]Test::Builder::__ANON__[:156]
31114µs14µsTest::Builder::::__ANON__[:88]Test::Builder::__ANON__[:88]
11114µs14µsTest::Builder::::BEGIN@3Test::Builder::BEGIN@3
11112µs12µsTest::Builder::::BEGIN@1232Test::Builder::BEGIN@1232
11111µs29µsTest::Builder::::expected_testsTest::Builder::expected_tests
11111µs40µsTest::Builder::::current_testTest::Builder::current_test
1118µs9µsTest::Builder::::BEGIN@33Test::Builder::BEGIN@33
1118µs13µsTest::Builder::::_add_ts_hooksTest::Builder::_add_ts_hooks
1117µs13µsTest::Builder::::createTest::Builder::create
1117µs19µsTest::Builder::::BEGIN@1519Test::Builder::BEGIN@1519
8117µs7µsTest::Builder::::__ANON__[:154]Test::Builder::__ANON__[:154]
1116µs11µsTest::Builder::::BEGIN@1518Test::Builder::BEGIN@1518
1116µs10µsTest::Builder::::BEGIN@1251Test::Builder::BEGIN@1251
1116µs449µsTest::Builder::::__ANON__[:148]Test::Builder::__ANON__[:148]
1116µs6µsTest::Builder::::BEGIN@34Test::Builder::BEGIN@34
1116µs9µsTest::Builder::::BEGIN@1556Test::Builder::BEGIN@1556
1115µs21µsTest::Builder::::BEGIN@684Test::Builder::BEGIN@684
1115µs19µsTest::Builder::::BEGIN@1057Test::Builder::BEGIN@1057
1115µs9µsTest::Builder::::BEGIN@1539Test::Builder::BEGIN@1539
1115µs18µsTest::Builder::::BEGIN@797Test::Builder::BEGIN@797
1115µs9µsTest::Builder::::BEGIN@102Test::Builder::BEGIN@102
1115µs18µsTest::Builder::::BEGIN@1167Test::Builder::BEGIN@1167
1115µs8µsTest::Builder::::BEGIN@116Test::Builder::BEGIN@116
1115µs12µsTest::Builder::::BEGIN@20Test::Builder::BEGIN@20
1115µs9µsTest::Builder::::BEGIN@61Test::Builder::BEGIN@61
1114µs19µsTest::Builder::::BEGIN@120Test::Builder::BEGIN@120
1114µs14µsTest::Builder::::BEGIN@131Test::Builder::BEGIN@131
1114µs26µsTest::Builder::::BEGIN@693Test::Builder::BEGIN@693
1114µs5µsTest::Builder::::BEGIN@4Test::Builder::BEGIN@4
1114µs15µsTest::Builder::::INITTest::Builder::INIT
1114µs14µsTest::Builder::::BEGIN@103Test::Builder::BEGIN@103
1114µs14µsTest::Builder::::BEGIN@1540Test::Builder::BEGIN@1540
1114µs15µsTest::Builder::::BEGIN@62Test::Builder::BEGIN@62
1113µs13µsTest::Builder::::BEGIN@1557Test::Builder::BEGIN@1557
1113µs17µsTest::Builder::::BEGIN@133Test::Builder::BEGIN@133
1113µs23µsTest::Builder::::BEGIN@5Test::Builder::BEGIN@5
1113µs12µsTest::Builder::::BEGIN@117Test::Builder::BEGIN@117
1113µs10µsTest::Builder::::BEGIN@121Test::Builder::BEGIN@121
2222µs2µsTest::Builder::::exported_toTest::Builder::exported_to
1112µs2µsTest::Builder::::BEGIN@9Test::Builder::BEGIN@9
3311µs1µsTest::Builder::::__ANON__Test::Builder::__ANON__ (xsub)
1111µs1µsTest::Builder::::planTest::Builder::plan
0000s0sTest::Builder::::BAIL_OUTTest::Builder::BAIL_OUT
0000s0sTest::Builder::::__ANON__[:111]Test::Builder::__ANON__[:111]
0000s0sTest::Builder::::__ANON__[:1249]Test::Builder::__ANON__[:1249]
0000s0sTest::Builder::::__ANON__[:125]Test::Builder::__ANON__[:125]
0000s0sTest::Builder::::__ANON__[:1591]Test::Builder::__ANON__[:1591]
0000s0sTest::Builder::::__ANON__[:245]Test::Builder::__ANON__[:245]
0000s0sTest::Builder::::__ANON__[:247]Test::Builder::__ANON__[:247]
0000s0sTest::Builder::::__ANON__[:764]Test::Builder::__ANON__[:764]
0000s0sTest::Builder::::_autoflushTest::Builder::_autoflush
0000s0sTest::Builder::::_caller_contextTest::Builder::_caller_context
0000s0sTest::Builder::::_cmp_diagTest::Builder::_cmp_diag
0000s0sTest::Builder::::_diag_fhTest::Builder::_diag_fh
0000s0sTest::Builder::::_diag_fmtTest::Builder::_diag_fmt
0000s0sTest::Builder::::_is_diagTest::Builder::_is_diag
0000s0sTest::Builder::::_is_dualvarTest::Builder::_is_dualvar
0000s0sTest::Builder::::_is_qrTest::Builder::_is_qr
0000s0sTest::Builder::::_isnt_diagTest::Builder::_isnt_diag
0000s0sTest::Builder::::_new_fhTest::Builder::_new_fh
0000s0sTest::Builder::::_ok_debugTest::Builder::_ok_debug
0000s0sTest::Builder::::_plan_testsTest::Builder::_plan_tests
0000s0sTest::Builder::::_print_commentTest::Builder::_print_comment
0000s0sTest::Builder::::_regex_okTest::Builder::_regex_ok
0000s0sTest::Builder::::_tryTest::Builder::_try
0000s0sTest::Builder::::_unoverloadTest::Builder::_unoverload
0000s0sTest::Builder::::_unoverload_numTest::Builder::_unoverload_num
0000s0sTest::Builder::::_unoverload_strTest::Builder::_unoverload_str
0000s0sTest::Builder::::callerTest::Builder::caller
0000s0sTest::Builder::::carpTest::Builder::carp
0000s0sTest::Builder::::childTest::Builder::child
0000s0sTest::Builder::::cmp_okTest::Builder::cmp_ok
0000s0sTest::Builder::::coordinate_forksTest::Builder::coordinate_forks
0000s0sTest::Builder::::croakTest::Builder::croak
0000s0sTest::Builder::::detailsTest::Builder::details
0000s0sTest::Builder::::diagTest::Builder::diag
0000s0sTest::Builder::::explainTest::Builder::explain
0000s0sTest::Builder::::failure_outputTest::Builder::failure_output
0000s0sTest::Builder::::finalizeTest::Builder::finalize
0000s0sTest::Builder::::find_TODOTest::Builder::find_TODO
0000s0sTest::Builder::::has_planTest::Builder::has_plan
0000s0sTest::Builder::::in_todoTest::Builder::in_todo
0000s0sTest::Builder::::is_eqTest::Builder::is_eq
0000s0sTest::Builder::::is_fhTest::Builder::is_fh
0000s0sTest::Builder::::is_numTest::Builder::is_num
0000s0sTest::Builder::::is_passingTest::Builder::is_passing
0000s0sTest::Builder::::isnt_eqTest::Builder::isnt_eq
0000s0sTest::Builder::::isnt_numTest::Builder::isnt_num
0000s0sTest::Builder::::levelTest::Builder::level
0000s0sTest::Builder::::likeTest::Builder::like
0000s0sTest::Builder::::maybe_regexTest::Builder::maybe_regex
0000s0sTest::Builder::::nameTest::Builder::name
0000s0sTest::Builder::::no_endingTest::Builder::no_ending
0000s0sTest::Builder::::no_log_resultsTest::Builder::no_log_results
0000s0sTest::Builder::::no_planTest::Builder::no_plan
0000s0sTest::Builder::::noteTest::Builder::note
0000s0sTest::Builder::::outputTest::Builder::output
0000s0sTest::Builder::::parentTest::Builder::parent
0000s0sTest::Builder::::skipTest::Builder::skip
0000s0sTest::Builder::::skip_allTest::Builder::skip_all
0000s0sTest::Builder::::subtestTest::Builder::subtest
0000s0sTest::Builder::::summaryTest::Builder::summary
0000s0sTest::Builder::::todoTest::Builder::todo
0000s0sTest::Builder::::todo_endTest::Builder::todo_end
0000s0sTest::Builder::::todo_outputTest::Builder::todo_output
0000s0sTest::Builder::::todo_skipTest::Builder::todo_skip
0000s0sTest::Builder::::todo_startTest::Builder::todo_start
0000s0sTest::Builder::::unlikeTest::Builder::unlike
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test::Builder;
2
3231µs114µs
# spent 14µs within Test::Builder::BEGIN@3 which was called: # once (14µs+0s) by Test::Builder::Module::BEGIN@5 at line 3
use 5.006;
# spent 14µs making 1 call to Test::Builder::BEGIN@3
4213µs27µs
# spent 5µs (4+2) within Test::Builder::BEGIN@4 which was called: # once (4µs+2µs) by Test::Builder::Module::BEGIN@5 at line 4
use strict;
# spent 5µs making 1 call to Test::Builder::BEGIN@4 # spent 2µs making 1 call to strict::import
5236µs242µs
# spent 23µs (3+20) within Test::Builder::BEGIN@5 which was called: # once (3µs+20µs) by Test::Builder::Module::BEGIN@5 at line 5
use warnings;
# spent 23µs making 1 call to Test::Builder::BEGIN@5 # spent 20µs making 1 call to warnings::import
6
71400nsour $VERSION = '1.302198';
8
9
# spent 2µs within Test::Builder::BEGIN@9 which was called: # once (2µs+0s) by Test::Builder::Module::BEGIN@5 at line 13
BEGIN {
1012µs if( $] < 5.008 ) {
11 require Test::Builder::IO::Scalar;
12 }
13119µs12µs}
# spent 2µs making 1 call to Test::Builder::BEGIN@9
14
152101µs21.52ms
# spent 1.48ms (1.17+307µs) within Test::Builder::BEGIN@15 which was called: # once (1.17ms+307µs) by Test::Builder::Module::BEGIN@5 at line 15
use Scalar::Util qw/blessed reftype weaken/;
# spent 1.48ms making 1 call to Test::Builder::BEGIN@15 # spent 41µs making 1 call to Exporter::import
16
17288µs211.2ms
# spent 11.2ms (1.33+9.87) within Test::Builder::BEGIN@17 which was called: # once (1.33ms+9.87ms) by Test::Builder::Module::BEGIN@5 at line 17
use Test2::Util qw/USE_THREADS try get_tid/;
# spent 11.2ms making 1 call to Test::Builder::BEGIN@17 # spent 39µs making 1 call to Exporter::import
182112µs227.6ms
# spent 27.5ms (5.39+22.1) within Test::Builder::BEGIN@18 which was called: # once (5.39ms+22.1ms) by Test::Builder::Module::BEGIN@5 at line 18
use Test2::API qw/context release/;
# spent 27.5ms making 1 call to Test::Builder::BEGIN@18 # spent 79µs making 1 call to Exporter::import
19# Make Test::Builder thread-safe for ithreads.
20
# spent 12µs (5+7) within Test::Builder::BEGIN@20 which was called: # once (5µs+7µs) by Test::Builder::Module::BEGIN@5 at line 31
BEGIN {
2111µs27µs warn "Test::Builder was loaded after Test2 initialization, this is not recommended."
# spent 5µs making 1 call to Test2::API::test2_init_done # spent 2µs making 1 call to Test2::API::test2_load_done
22 if Test2::API::test2_init_done() || Test2::API::test2_load_done();
23
2411µs if (USE_THREADS && ! Test2::API::test2_ipc_disabled()) {
25 require Test2::IPC;
26 require Test2::IPC::Driver::Files;
27 Test2::IPC::Driver::Files->import;
28 Test2::API::test2_ipc_enable_polling();
29 Test2::API::test2_no_wait(1);
30 }
31113µs112µs}
# spent 12µs making 1 call to Test::Builder::BEGIN@20
32
33218µs29µs
# spent 9µs (8+300ns) within Test::Builder::BEGIN@33 which was called: # once (8µs+300ns) by Test::Builder::Module::BEGIN@5 at line 33
use Test2::Event::Subtest;
# spent 9µs making 1 call to Test::Builder::BEGIN@33 # spent 300ns making 1 call to Test::Builder::__ANON__
34215µs26µs
# spent 6µs (6+200ns) within Test::Builder::BEGIN@34 which was called: # once (6µs+200ns) by Test::Builder::Module::BEGIN@5 at line 34
use Test2::Hub::Subtest;
# spent 6µs making 1 call to Test::Builder::BEGIN@34 # spent 200ns making 1 call to Test::Builder::__ANON__
35
36272µs22.63ms
# spent 2.62ms (343µs+2.28) within Test::Builder::BEGIN@36 which was called: # once (343µs+2.28ms) by Test::Builder::Module::BEGIN@5 at line 36
use Test::Builder::Formatter;
# spent 2.62ms making 1 call to Test::Builder::BEGIN@36 # spent 12µs making 1 call to Test2::Formatter::import
372133µs2203µs
# spent 202µs (164+39) within Test::Builder::BEGIN@37 which was called: # once (164µs+39µs) by Test::Builder::Module::BEGIN@5 at line 37
use Test::Builder::TodoDiag;
# spent 202µs making 1 call to Test::Builder::BEGIN@37 # spent 700ns making 1 call to Test::Builder::__ANON__
38
391200nsour $Level = 1;
4013µs148µsour $Test = $ENV{TB_NO_EARLY_INIT} ? undef : Test::Builder->new;
# spent 48µs making 1 call to Test::Builder::new
41
42
# spent 13µs (8+5) within Test::Builder::_add_ts_hooks which was called: # once (8µs+5µs) by Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148] at line 147
sub _add_ts_hooks {
431200ns my $self = shift;
44
451800ns1900ns my $hub = $self->{Stack}->top;
# spent 900ns making 1 call to Test2::API::Stack::top
46
47 # Take a reference to the hash key, we do this to avoid closing over $self
48 # which is the singleton. We use a reference because the value could change
49 # in rare cases.
501400ns my $epkgr = \$self->{Exported_To};
51
52 #$hub->add_context_aquire(sub {$_[0]->{level} += $Level - 1});
53
54 $hub->pre_filter(
55
# spent 14µs within Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:88] which was called 3 times, avg 5µs/call: # 3 times (14µs+0s) by Test2::Hub::send at line 301 of Test2/Hub.pm, avg 5µs/call
sub {
563800ns my ($active_hub, $e) = @_;
57
583800ns my $epkg = $$epkgr;
5932µs my $cpkg = $e->{trace} ? $e->{trace}->{frame}->[0] : undef;
60
61220µs212µs
# spent 9µs (5+4) within Test::Builder::BEGIN@61 which was called: # once (5µs+4µs) by Test::Builder::Module::BEGIN@5 at line 61
no strict 'refs';
# spent 9µs making 1 call to Test::Builder::BEGIN@61 # spent 4µs making 1 call to strict::unimport
622130µs226µs
# spent 15µs (4+11) within Test::Builder::BEGIN@62 which was called: # once (4µs+11µs) by Test::Builder::Module::BEGIN@5 at line 62
no warnings 'once';
# spent 15µs making 1 call to Test::Builder::BEGIN@62 # spent 11µs making 1 call to warnings::unimport
633300ns my $todo;
6434µs $todo = ${"$cpkg\::TODO"} if $cpkg;
6532µs $todo = ${"$epkg\::TODO"} if $epkg && !$todo;
66
6734µs return $e unless defined($todo);
68 return $e unless length($todo);
69
70 # Turn a diag into a todo diag
71 return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag';
72
73 $e->set_todo($todo) if $e->can('set_todo');
74 $e->add_amnesty({tag => 'TODO', details => $todo});
75
76 # Set todo on ok's
77 if ($e->isa('Test2::Event::Ok')) {
78 $e->set_effective_pass(1);
79
80 if (my $result = $e->get_meta(__PACKAGE__)) {
81 $result->{reason} ||= $todo;
82 $result->{type} ||= 'todo';
83 $result->{ok} = 1;
84 }
85 }
86
87 return $e;
88 },
89
90 inherit => 1,
91
92 intercept_inherit => {
93 clean => sub {
94 my %params = @_;
95
96 my $state = $params{state};
97 my $trace = $params{trace};
98
99 my $epkg = $$epkgr;
100 my $cpkg = $trace->{frame}->[0];
101
102220µs212µs
# spent 9µs (5+4) within Test::Builder::BEGIN@102 which was called: # once (5µs+4µs) by Test::Builder::Module::BEGIN@5 at line 102
no strict 'refs';
# spent 9µs making 1 call to Test::Builder::BEGIN@102 # spent 4µs making 1 call to strict::unimport
103281µs225µs
# spent 14µs (4+11) within Test::Builder::BEGIN@103 which was called: # once (4µs+11µs) by Test::Builder::Module::BEGIN@5 at line 103
no warnings 'once';
# spent 14µs making 1 call to Test::Builder::BEGIN@103 # spent 11µs making 1 call to warnings::unimport
104
105 $state->{+__PACKAGE__} = {};
106 $state->{+__PACKAGE__}->{"$cpkg\::TODO"} = ${"$cpkg\::TODO"} if $cpkg;
107 $state->{+__PACKAGE__}->{"$epkg\::TODO"} = ${"$epkg\::TODO"} if $epkg;
108
109 ${"$cpkg\::TODO"} = undef if $cpkg;
110 ${"$epkg\::TODO"} = undef if $epkg;
111 },
112 restore => sub {
113 my %params = @_;
114 my $state = $params{state};
115
116219µs212µs
# spent 8µs (5+4) within Test::Builder::BEGIN@116 which was called: # once (5µs+4µs) by Test::Builder::Module::BEGIN@5 at line 116
no strict 'refs';
# spent 8µs making 1 call to Test::Builder::BEGIN@116 # spent 4µs making 1 call to strict::unimport
117227µs222µs
# spent 12µs (3+10) within Test::Builder::BEGIN@117 which was called: # once (3µs+10µs) by Test::Builder::Module::BEGIN@5 at line 117
no warnings 'once';
# spent 12µs making 1 call to Test::Builder::BEGIN@117 # spent 10µs making 1 call to warnings::unimport
118
119 for my $item (keys %{$state->{+__PACKAGE__}}) {
120229µs234µs
# spent 19µs (4+15) within Test::Builder::BEGIN@120 which was called: # once (4µs+15µs) by Test::Builder::Module::BEGIN@5 at line 120
no strict 'refs';
# spent 19µs making 1 call to Test::Builder::BEGIN@120 # spent 15µs making 1 call to strict::unimport
121261µs217µs
# spent 10µs (3+7) within Test::Builder::BEGIN@121 which was called: # once (3µs+7µs) by Test::Builder::Module::BEGIN@5 at line 121
no warnings 'once';
# spent 10µs making 1 call to Test::Builder::BEGIN@121 # spent 7µs making 1 call to warnings::unimport
122
123 ${"$item"} = $state->{+__PACKAGE__}->{$item};
124 }
125 },
126 },
12716µs14µs );
# spent 4µs making 1 call to Test2::Hub::pre_filter
128}
129
130{
131217µs225µs
# spent 14µs (4+10) within Test::Builder::BEGIN@131 which was called: # once (4µs+10µs) by Test::Builder::Module::BEGIN@5 at line 131
no warnings;
# spent 14µs making 1 call to Test::Builder::BEGIN@131 # spent 10µs making 1 call to warnings::unimport
132
# spent 15µs (4+11) within Test::Builder::INIT which was called: # once (4µs+11µs) by main::RUNTIME at line 0 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
INIT {
13321.68ms231µs
# spent 17µs (3+14) within Test::Builder::BEGIN@133 which was called: # once (3µs+14µs) by Test::Builder::Module::BEGIN@5 at line 133
use warnings;
# spent 17µs making 1 call to Test::Builder::BEGIN@133 # spent 14µs making 1 call to warnings::import
13414µs211µs Test2::API::test2_load() unless Test2::API::test2_in_preload();
# spent 6µs making 1 call to Test2::API::test2_in_preload # spent 5µs making 1 call to Test2::API::test2_load
135 }
136}
137
1381200ns
# spent 53µs (16+36) within Test::Builder::new which was called 5 times, avg 11µs/call: # 4 times (5µs+0s) by Test::Builder::Module::builder at line 172 of Test/Builder/Module.pm, avg 1µs/call # once (12µs+36µs) by Test::Builder::Module::BEGIN@5 at line 40
sub new {
13951µs my($class) = shift;
14052µs unless($Test) {
14111µs113µs $Test = $class->create(singleton => 1);
# spent 13µs making 1 call to Test::Builder::create
142
143 Test2::API::test2_add_callback_post_load(
144
# spent 449µs (6+443) within Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148] which was called: # once (6µs+443µs) by Test2::API::Instance::load at line 322 of Test2/API/Instance.pm
sub {
14512µs $Test->{Original_Pid} = $$ if !$Test->{Original_Pid} || $Test->{Original_Pid} == 0;
14611µs1430µs $Test->reset(singleton => 1);
# spent 430µs making 1 call to Test::Builder::reset
14714µs113µs $Test->_add_ts_hooks;
# spent 13µs making 1 call to Test::Builder::_add_ts_hooks
148 }
14912µs111µs );
# spent 11µs making 1 call to Test2::API::test2_add_callback_post_load
150
151 # Non-TB tools normally expect 0 added to the level. $Level is normally 1. So
152 # we only want the level to change if $Level != 1.
153 # TB->ctx compensates for this later.
154912µs15µs
# spent 7µs within Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:154] which was called 8 times, avg 862ns/call: # 8 times (7µs+0s) by Test2::API::context at line 414 of Test2/API.pm, avg 862ns/call
Test2::API::test2_add_callback_context_aquire(sub { $_[0]->{level} += $Level - 1 });
# spent 5µs making 1 call to Test2::API::test2_add_callback_context_aquire
155
15625µs248µs
# spent 58µs (15+43) within Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156] which was called: # once (15µs+43µs) by Test2::API::Instance::set_exit at line 554 of Test2/API/Instance.pm
Test2::API::test2_add_callback_exit(sub { $Test->_ending(@_) });
# spent 43µs making 1 call to Test::Builder::_ending # spent 4µs making 1 call to Test2::API::test2_add_callback_exit
157
1581900ns13µs Test2::API::test2_ipc()->set_no_fatal(1) if Test2::API::test2_has_ipc();
# spent 3µs making 1 call to Test2::API::test2_has_ipc
159 }
16057µs return $Test;
161}
162
163
# spent 13µs (7+6) within Test::Builder::create which was called: # once (7µs+6µs) by Test::Builder::new at line 141
sub create {
1641200ns my $class = shift;
1651700ns my %params = @_;
166
1671600ns my $self = bless {}, $class;
16813µs16µs if ($params{singleton}) {
# spent 6µs making 1 call to Test2::API::test2_stack
169 $self->{Stack} = Test2::API::test2_stack();
170 }
171 else {
172 $self->{Stack} = Test2::API::Stack->new;
173 $self->{Stack}->new_hub(
174 formatter => Test::Builder::Formatter->new,
175 ipc => Test2::API::test2_ipc(),
176 );
177
178 $self->reset(%params);
179 $self->_add_ts_hooks;
180 }
181
18212µs return $self;
183}
184
185
# spent 419µs (20+400) within Test::Builder::ctx which was called 8 times, avg 52µs/call: # once (3µs+213µs) by Test::Builder::reset at line 445 # once (4µs+61µs) by Test::Builder::ok at line 677 # once (2µs+30µs) by Test::Builder::reset at line 453 # once (2µs+27µs) by Test::Builder::done_testing at line 584 # once (2µs+21µs) by Test::Builder::use_numbers at line 1220 # once (2µs+19µs) by Test::Builder::current_test at line 1437 # once (2µs+16µs) by Test::Builder::reset_outputs at line 1409 # once (2µs+13µs) by Test::Builder::expected_tests at line 542
sub ctx {
18681µs my $self = shift;
187 context(
188 # 1 for our frame, another for the -1 off of $Level in our hook at the top.
189 level => 2,
190 fudge => 1,
191 stack => $self->{Stack},
192 hub => $self->{Hub},
193826µs8400µs wrapped => 1,
# spent 400µs making 8 calls to Test2::API::context, avg 50µs/call
194 @_
195 );
196}
197
198sub parent {
199 my $self = shift;
200 my $ctx = $self->ctx;
201 my $chub = $self->{Hub} || $ctx->hub;
202 $ctx->release;
203
204 my $meta = $chub->meta(__PACKAGE__, {});
205 my $parent = $meta->{parent};
206
207 return undef unless $parent;
208
209 return bless {
210 Original_Pid => $$,
211 Stack => $self->{Stack},
212 Hub => $parent,
213 }, blessed($self);
214}
215
216sub child {
217 my( $self, $name ) = @_;
218
219 $name ||= "Child of " . $self->name;
220 my $ctx = $self->ctx;
221
222 my $parent = $ctx->hub;
223 my $pmeta = $parent->meta(__PACKAGE__, {});
224 $self->croak("You already have a child named ($pmeta->{child}) running")
225 if $pmeta->{child};
226
227 $pmeta->{child} = $name;
228
229 # Clear $TODO for the child.
230 my $orig_TODO = $self->find_TODO(undef, 1, undef);
231
232 my $subevents = [];
233
234 my $hub = $ctx->stack->new_hub(
235 class => 'Test2::Hub::Subtest',
236 );
237
238 $hub->pre_filter(sub {
239 my ($active_hub, $e) = @_;
240
241 # Turn a diag into a todo diag
242 return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag';
243
244 return $e;
245 }, inherit => 1) if $orig_TODO;
246
247 $hub->listen(sub { push @$subevents => $_[1] });
248
249 $hub->set_nested( $parent->nested + 1 );
250
251 my $meta = $hub->meta(__PACKAGE__, {});
252 $meta->{Name} = $name;
253 $meta->{TODO} = $orig_TODO;
254 $meta->{TODO_PKG} = $ctx->trace->package;
255 $meta->{parent} = $parent;
256 $meta->{Test_Results} = [];
257 $meta->{subevents} = $subevents;
258 $meta->{subtest_id} = $hub->id;
259 $meta->{subtest_uuid} = $hub->uuid;
260 $meta->{subtest_buffered} = $parent->format ? 0 : 1;
261
262 $self->_add_ts_hooks;
263
264 $ctx->release;
265 return bless { Original_Pid => $$, Stack => $self->{Stack}, Hub => $hub, no_log_results => $self->{no_log_results} }, blessed($self);
266}
267
268sub finalize {
269 my $self = shift;
270 my $ok = 1;
271 ($ok) = @_ if @_;
272
273 my $st_ctx = $self->ctx;
274 my $chub = $self->{Hub} || return $st_ctx->release;
275
276 my $meta = $chub->meta(__PACKAGE__, {});
277 if ($meta->{child}) {
278 $self->croak("Can't call finalize() with child ($meta->{child}) active");
279 }
280
281 local $? = 0; # don't fail if $subtests happened to set $? nonzero
282
283 $self->{Stack}->pop($chub);
284
285 $self->find_TODO($meta->{TODO_PKG}, 1, $meta->{TODO});
286
287 my $parent = $self->parent;
288 my $ctx = $parent->ctx;
289 my $trace = $ctx->trace;
290 delete $ctx->hub->meta(__PACKAGE__, {})->{child};
291
292 $chub->finalize($trace->snapshot(hid => $chub->hid, nested => $chub->nested), 1)
293 if $ok
294 && $chub->count
295 && !$chub->no_ending
296 && !$chub->ended;
297
298 my $plan = $chub->plan || 0;
299 my $count = $chub->count;
300 my $failed = $chub->failed;
301 my $passed = $chub->is_passing;
302
303 my $num_extra = $plan =~ m/\D/ ? 0 : $count - $plan;
304 if ($count && $num_extra != 0) {
305 my $s = $plan == 1 ? '' : 's';
306 $st_ctx->diag(<<"FAIL");
307Looks like you planned $plan test$s but ran $count.
308FAIL
309 }
310
311 if ($failed) {
312 my $s = $failed == 1 ? '' : 's';
313
314 my $qualifier = $num_extra == 0 ? '' : ' run';
315
316 $st_ctx->diag(<<"FAIL");
317Looks like you failed $failed test$s of $count$qualifier.
318FAIL
319 }
320
321 if (!$passed && !$failed && $count && !$num_extra) {
322 $st_ctx->diag(<<"FAIL");
323All assertions inside the subtest passed, but errors were encountered.
324FAIL
325 }
326
327 $st_ctx->release;
328
329 unless ($chub->bailed_out) {
330 my $plan = $chub->plan;
331 if ( $plan && $plan eq 'SKIP' ) {
332 $parent->skip($chub->skip_reason, $meta->{Name});
333 }
334 elsif ( !$chub->count ) {
335 $parent->ok( 0, sprintf q[No tests run for subtest "%s"], $meta->{Name} );
336 }
337 else {
338 $parent->{subevents} = $meta->{subevents};
339 $parent->{subtest_id} = $meta->{subtest_id};
340 $parent->{subtest_uuid} = $meta->{subtest_uuid};
341 $parent->{subtest_buffered} = $meta->{subtest_buffered};
342 $parent->ok( $chub->is_passing, $meta->{Name} );
343 }
344 }
345
346 $ctx->release;
347 return $chub->is_passing;
348}
349
350sub subtest {
351 my $self = shift;
352 my ($name, $code, @args) = @_;
353 my $ctx = $self->ctx;
354 $ctx->throw("subtest()'s second argument must be a code ref")
355 unless $code && reftype($code) eq 'CODE';
356
357 $name ||= "Child of " . $self->name;
358
359
360 $_->($name,$code,@args)
361 for Test2::API::test2_list_pre_subtest_callbacks();
362
363 $ctx->note("Subtest: $name");
364
365 my $child = $self->child($name);
366
367 my $start_pid = $$;
368 my $st_ctx;
369 my ($ok, $err, $finished, $child_error);
370 T2_SUBTEST_WRAPPER: {
371 my $ctx = $self->ctx;
372 $st_ctx = $ctx->snapshot;
373 $ctx->release;
374 $ok = eval { local $Level = 1; $code->(@args); 1 };
375 ($err, $child_error) = ($@, $?);
376
377 # They might have done 'BEGIN { skip_all => "whatever" }'
378 if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && blessed($err) eq 'Test::Builder::Exception')) {
379 $ok = undef;
380 $err = undef;
381 }
382 else {
383 $finished = 1;
384 }
385 }
386
387 if ($start_pid != $$ && !$INC{'Test2/IPC.pm'}) {
388 warn $ok ? "Forked inside subtest, but subtest never finished!\n" : $err;
389 exit 255;
390 }
391
392 my $trace = $ctx->trace;
393
394 if (!$finished) {
395 if(my $bailed = $st_ctx->hub->bailed_out) {
396 my $chub = $child->{Hub};
397 $self->{Stack}->pop($chub);
398 $ctx->bail($bailed->reason);
399 }
400 my $code = $st_ctx->hub->exit_code;
401 $ok = !$code;
402 $err = "Subtest ended with exit code $code" if $code;
403 }
404
405 my $st_hub = $st_ctx->hub;
406 my $plan = $st_hub->plan;
407 my $count = $st_hub->count;
408
409 if (!$count && (!defined($plan) || "$plan" ne 'SKIP')) {
410 $st_ctx->plan(0) unless defined $plan;
411 $st_ctx->diag('No tests run!');
412 }
413
414 $child->finalize($st_ctx->trace);
415
416 $ctx->release;
417
418 die $err unless $ok;
419
420 $? = $child_error if defined $child_error;
421
422 return $st_hub->is_passing;
423}
424
425sub name {
426 my $self = shift;
427 my $ctx = $self->ctx;
428 release $ctx, $ctx->hub->meta(__PACKAGE__, {})->{Name};
429}
430
431
# spent 430µs (47+383) within Test::Builder::reset which was called: # once (47µs+383µs) by Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:148] at line 146
sub reset { ## no critic (Subroutines::ProhibitBuiltinHomonyms)
4321900ns my ($self, %params) = @_;
433
4341700ns1700ns Test2::API::test2_unset_is_end();
# spent 700ns making 1 call to Test2::API::test2_unset_is_end
435
436 # We leave this a global because it has to be localized and localizing
437 # hash keys is just asking for pain. Also, it was documented.
4381200ns $Level = 1;
439
440 $self->{no_log_results} = $ENV{TEST_NO_LOG_RESULTS} ? 1 : 0
4411200ns unless $params{singleton};
442
44311µs12µs $self->{Original_Pid} = Test2::API::test2_in_preload() ? -1 : $$;
# spent 2µs making 1 call to Test2::API::test2_in_preload
444
44511µs1216µs my $ctx = $self->ctx;
# spent 216µs making 1 call to Test::Builder::ctx
4461900ns12µs my $hub = $ctx->hub;
4471800ns16µs $ctx->release;
# spent 6µs making 1 call to Test2::API::Context::release
4481200ns unless ($params{singleton}) {
449 $hub->reset_state();
450 $hub->_tb_reset();
451 }
452
45317µs232µs $ctx = $self->ctx;
# spent 32µs making 1 call to Test::Builder::ctx # spent 700ns making 1 call to Test2::API::Context::DESTROY
454
45512µs27µs my $meta = $ctx->hub->meta(__PACKAGE__, {});
# spent 6µs making 1 call to Test2::Util::ExternalMeta::meta # spent 800ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
456 %$meta = (
457 Name => $0,
458 Ending => 0,
459 Done_Testing => undef,
460 Skip_All => 0,
461 Test_Results => [],
462 parent => $meta->{parent},
46312µs );
464
4651300ns $self->{Exported_To} = undef unless $params{singleton};
466
4671400ns $self->{Orig_Handles} ||= do {
46811µs21µs my $format = $ctx->hub->format;
# spent 1µs making 1 call to Test2::Hub::format # spent 400ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
4691100ns my $out;
47018µs21µs if ($format && $format->isa('Test2::Formatter::TAP')) {
# spent 600ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84] # spent 600ns making 1 call to UNIVERSAL::isa
471 $out = $format->handles;
472 }
4731800ns $out ? [@$out] : [];
474 };
475
4761900ns148µs $self->use_numbers(1);
# spent 48µs making 1 call to Test::Builder::use_numbers
4771200ns $self->no_header(0) unless $params{singleton};
4781100ns $self->no_ending(0) unless $params{singleton};
4791800ns159µs $self->reset_outputs;
# spent 59µs making 1 call to Test::Builder::reset_outputs
480
48111µs15µs $ctx->release;
# spent 5µs making 1 call to Test2::API::Context::release
482
48314µs1500ns return;
# spent 500ns making 1 call to Test2::API::Context::DESTROY
484}
485
486
48711µsmy %plan_cmds = (
488 no_plan => \&no_plan,
489 skip_all => \&skip_all,
490 tests => \&_plan_tests,
491);
492
493
# spent 1µs within Test::Builder::plan which was called: # once (1µs+0s) by Test::Builder::Module::import at line 92 of Test/Builder/Module.pm
sub plan {
4941300ns my( $self, $cmd, $arg ) = @_;
495
49611µs return unless $cmd;
497
498 my $ctx = $self->ctx;
499 my $hub = $ctx->hub;
500
501 $ctx->throw("You tried to plan twice") if $hub->plan;
502
503 local $Level = $Level + 1;
504
505 if( my $method = $plan_cmds{$cmd} ) {
506 local $Level = $Level + 1;
507 $self->$method($arg);
508 }
509 else {
510 my @args = grep { defined } ( $cmd, $arg );
511 $ctx->throw("plan() doesn't understand @args");
512 }
513
514 release $ctx, 1;
515}
516
517
518sub _plan_tests {
519 my($self, $arg) = @_;
520
521 my $ctx = $self->ctx;
522
523 if($arg) {
524 local $Level = $Level + 1;
525 $self->expected_tests($arg);
526 }
527 elsif( !defined $arg ) {
528 $ctx->throw("Got an undefined number of tests");
529 }
530 else {
531 $ctx->throw("You said to run 0 tests");
532 }
533
534 $ctx->release;
535}
536
537
538
# spent 29µs (11+18) within Test::Builder::expected_tests which was called: # once (11µs+18µs) by Test::Builder::done_testing at line 611
sub expected_tests {
5391200ns my $self = shift;
5401300ns my($max) = @_;
541
5421900ns115µs my $ctx = $self->ctx;
# spent 15µs making 1 call to Test::Builder::ctx
543
5441300ns if(@_) {
545 $self->croak("Number of tests must be a positive integer. You gave it '$max'")
546 unless $max =~ /^\+?\d+$/;
547
548 $ctx->plan($max);
549 }
550
5511800ns1400ns my $hub = $ctx->hub;
552
5531700ns12µs $ctx->release;
# spent 2µs making 1 call to Test2::API::Context::release
554
5551700ns1700ns my $plan = $hub->plan;
# spent 700ns making 1 call to Test2::Hub::plan
55613µs1400ns return 0 unless $plan;
# spent 400ns making 1 call to Test2::API::Context::DESTROY
557 return 0 if $plan =~ m/\D/;
558 return $plan;
559}
560
561
562sub no_plan {
563 my($self, $arg) = @_;
564
565 my $ctx = $self->ctx;
566
567 if (defined $ctx->hub->plan) {
568 warn "Plan already set, no_plan() is a no-op, this will change to a hard failure in the future.";
569 $ctx->release;
570 return;
571 }
572
573 $ctx->alert("no_plan takes no arguments") if $arg;
574
575 $ctx->hub->plan('NO PLAN');
576
577 release $ctx, 1;
578}
579
580
581
# spent 353µs (45+309) within Test::Builder::done_testing which was called: # once (45µs+309µs) by Test::More::done_testing at line 249 of Test/More.pm
sub done_testing {
5821400ns my($self, $num_tests) = @_;
583
58411µs130µs my $ctx = $self->ctx;
# spent 30µs making 1 call to Test::Builder::ctx
585
58614µs29µs my $meta = $ctx->hub->meta(__PACKAGE__, {});
# spent 7µs making 1 call to Test2::Util::ExternalMeta::meta # spent 2µs making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
587
5881600ns if ($meta->{Done_Testing}) {
589 my ($file, $line) = @{$meta->{Done_Testing}}[1,2];
590 local $ctx->hub->{ended}; # OMG This is awful.
591 $self->ok(0, "done_testing() was already called at $file line $line");
592 $ctx->release;
593 return;
594 }
59514µs23µs $meta->{Done_Testing} = [$ctx->trace->call];
# spent 2µs making 1 call to Test2::EventFacet::Trace::call # spent 1µs making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
596
59712µs22µs my $plan = $ctx->hub->plan;
# spent 2µs making 1 call to Test2::Hub::plan # spent 400ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
59812µs21µs my $count = $ctx->hub->count;
# spent 1µs making 2 calls to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84], avg 550ns/call
599
600 # If done_testing() specified the number of tests, shut off no_plan
60111µs if( defined $num_tests ) {
602 $ctx->plan($num_tests) if !$plan || $plan eq 'NO PLAN';
603 }
604 elsif ($count && defined $num_tests && $count != $num_tests) {
605 $self->ok(0, "planned to run @{[ $self->expected_tests ]} but done_testing() expects $num_tests");
606 }
607 else {
60812µs140µs $num_tests = $self->current_test;
# spent 40µs making 1 call to Test::Builder::current_test
609 }
610
61112µs129µs if( $self->expected_tests && $num_tests != $self->expected_tests ) {
# spent 29µs making 1 call to Test::Builder::expected_tests
612 $self->ok(0, "planned to run @{[ $self->expected_tests ]} ".
613 "but done_testing() expects $num_tests");
614 }
615
61611µs2700ns $ctx->plan($num_tests) if $ctx->hub->plan && $ctx->hub->plan eq 'NO PLAN';
# spent 400ns making 1 call to Test2::Hub::plan # spent 300ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
617
61813µs3186µs $ctx->hub->finalize($ctx->trace, 1);
# spent 186µs making 1 call to Test2::Hub::finalize # spent 600ns making 2 calls to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84], avg 300ns/call
619
62016µs28µs release $ctx, 1;
# spent 7µs making 1 call to Test2::API::release # spent 700ns making 1 call to Test2::API::Context::DESTROY
621}
622
623
624sub has_plan {
625 my $self = shift;
626
627 my $ctx = $self->ctx;
628 my $plan = $ctx->hub->plan;
629 $ctx->release;
630
631 return( $plan ) if $plan && $plan !~ m/\D/;
632 return('no_plan') if $plan && $plan eq 'NO PLAN';
633 return(undef);
634}
635
636
637sub skip_all {
638 my( $self, $reason ) = @_;
639
640 my $ctx = $self->ctx;
641
642 $ctx->hub->meta(__PACKAGE__, {})->{Skip_All} = $reason || 1;
643
644 # Work around old perl bug
645 if ($] < 5.020000) {
646 my $begin = 0;
647 my $level = 0;
648 while (my @call = caller($level++)) {
649 last unless @call && $call[0];
650 next unless $call[3] =~ m/::BEGIN$/;
651 $begin++;
652 last;
653 }
654 # HACK!
655 die 'Label not found for "last T2_SUBTEST_WRAPPER"' if $begin && $ctx->hub->meta(__PACKAGE__, {})->{parent};
656 }
657
658 $reason = "$reason" if defined $reason;
659
660 $ctx->plan(0, SKIP => $reason);
661}
662
663
664
# spent 2µs within Test::Builder::exported_to which was called 2 times, avg 1µs/call: # once (2µs+0s) by Test::Builder::Module::import at line 87 of Test/Builder/Module.pm # once (800ns+0s) by Test::More::import_extra at line 208 of Test/More.pm
sub exported_to {
6652700ns my( $self, $pack ) = @_;
666
6672600ns if( defined $pack ) {
668 $self->{Exported_To} = $pack;
669 }
67023µs return $self->{Exported_To};
671}
672
673
674
# spent 256µs (40+215) within Test::Builder::ok which was called: # once (40µs+215µs) by Test::More::ok at line 323 of Test/More.pm
sub ok {
6751500ns my( $self, $test, $name ) = @_;
676
67712µs166µs my $ctx = $self->ctx;
# spent 66µs making 1 call to Test::Builder::ctx
678
679 # $test might contain an object which we don't want to accidentally
680 # store, so we turn it into a boolean.
6811500ns $test = $test ? 1 : 0;
682
683 # In case $name is a string overloaded object, force it to stringify.
684273µs236µs
# spent 21µs (5+15) within Test::Builder::BEGIN@684 which was called: # once (5µs+15µs) by Test::Builder::Module::BEGIN@5 at line 684
no warnings qw/uninitialized numeric/;
# spent 21µs making 1 call to Test::Builder::BEGIN@684 # spent 15µs making 1 call to warnings::unimport
6851300ns $name = "$name" if defined $name;
686
687 # Profiling showed that the regex here was a huge time waster, doing the
688 # numeric addition first cuts our profile time from ~300ms to ~50ms
68911µs $self->diag(<<" ERR") if 0 + $name && $name =~ /^[\d\s]+$/;
690 You named your test '$name'. You shouldn't use numbers for your test names.
691 Very confusing.
692 ERR
6932338µs247µs
# spent 26µs (4+21) within Test::Builder::BEGIN@693 which was called: # once (4µs+21µs) by Test::Builder::Module::BEGIN@5 at line 693
use warnings qw/uninitialized numeric/;
# spent 26µs making 1 call to Test::Builder::BEGIN@693 # spent 21µs making 1 call to warnings::import
694
6951400ns my $trace = $ctx->{trace};
6961400ns my $hub = $ctx->{hub};
697
69813µs my $result = {
699 ok => $test,
700 actual_ok => $test,
701 reason => '',
702 type => '',
703 (name => defined($name) ? $name : ''),
704 };
705
70612µs $hub->{_meta}->{+__PACKAGE__}->{Test_Results}[ $hub->{count} ] = $result unless $self->{no_log_results};
707
7081300ns my $orig_name = $name;
709
7101200ns my @attrs;
7111400ns my $subevents = delete $self->{subevents};
7121400ns my $subtest_id = delete $self->{subtest_id};
7131300ns my $subtest_uuid = delete $self->{subtest_uuid};
7141300ns my $subtest_buffered = delete $self->{subtest_buffered};
7151300ns my $epkg = 'Test2::Event::Ok';
7161200ns if ($subevents) {
717 $epkg = 'Test2::Event::Subtest';
718 push @attrs => (subevents => $subevents, subtest_id => $subtest_id, subtest_uuid => $subtest_uuid, buffered => $subtest_buffered);
719 }
720
72119µs my $e = bless {
722 trace => bless( {%$trace}, 'Test2::EventFacet::Trace'),
723 pass => $test,
724 name => $name,
725 _meta => {'Test::Builder' => $result},
726 effective_pass => $test,
727 @attrs,
728 }, $epkg;
72912µs1139µs $hub->send($e);
# spent 139µs making 1 call to Test2::Hub::send
730
7311400ns $self->_ok_debug($trace, $orig_name) unless($test);
732
73312µs19µs $ctx->release;
# spent 9µs making 1 call to Test2::API::Context::release
734112µs12µs return $test;
# spent 2µs making 1 call to Test2::API::Context::DESTROY
735}
736
737sub _ok_debug {
738 my $self = shift;
739 my ($trace, $orig_name) = @_;
740
741 my $is_todo = $self->in_todo;
742
743 my $msg = $is_todo ? "Failed (TODO)" : "Failed";
744
745 my (undef, $file, $line) = $trace->call;
746 if (defined $orig_name) {
747 $self->diag(qq[ $msg test '$orig_name'\n at $file line $line.\n]);
748 }
749 else {
750 $self->diag(qq[ $msg test at $file line $line.\n]);
751 }
752}
753
754sub _diag_fh {
755 my $self = shift;
756 local $Level = $Level + 1;
757 return $self->in_todo ? $self->todo_output : $self->failure_output;
758}
759
760sub _unoverload {
761 my ($self, $type, $thing) = @_;
762
763 return unless ref $$thing;
764 return unless blessed($$thing) || scalar $self->_try(sub{ $$thing->isa('UNIVERSAL') });
765 {
766 local ($!, $@);
767 require overload;
768 }
769 my $string_meth = overload::Method( $$thing, $type ) || return;
770 $$thing = $$thing->$string_meth(undef, 0);
771}
772
773sub _unoverload_str {
774 my $self = shift;
775
776 $self->_unoverload( q[""], $_ ) for @_;
777}
778
779sub _unoverload_num {
780 my $self = shift;
781
782 $self->_unoverload( '0+', $_ ) for @_;
783
784 for my $val (@_) {
785 next unless $self->_is_dualvar($$val);
786 $$val = $$val + 0;
787 }
788}
789
790# This is a hack to detect a dualvar such as $!
791sub _is_dualvar {
792 my( $self, $val ) = @_;
793
794 # Objects are not dualvars.
795 return 0 if ref $val;
796
7972796µs231µs
# spent 18µs (5+13) within Test::Builder::BEGIN@797 which was called: # once (5µs+13µs) by Test::Builder::Module::BEGIN@5 at line 797
no warnings 'numeric';
# spent 18µs making 1 call to Test::Builder::BEGIN@797 # spent 13µs making 1 call to warnings::unimport
798 my $numval = $val + 0;
799 return ($numval != 0 and $numval ne $val ? 1 : 0);
800}
801
802
803sub is_eq {
804 my( $self, $got, $expect, $name ) = @_;
805
806 my $ctx = $self->ctx;
807
808 local $Level = $Level + 1;
809
810 if( !defined $got || !defined $expect ) {
811 # undef only matches undef and nothing else
812 my $test = !defined $got && !defined $expect;
813
814 $self->ok( $test, $name );
815 $self->_is_diag( $got, 'eq', $expect ) unless $test;
816 $ctx->release;
817 return $test;
818 }
819
820 release $ctx, $self->cmp_ok( $got, 'eq', $expect, $name );
821}
822
823
824sub is_num {
825 my( $self, $got, $expect, $name ) = @_;
826 my $ctx = $self->ctx;
827 local $Level = $Level + 1;
828
829 if( !defined $got || !defined $expect ) {
830 # undef only matches undef and nothing else
831 my $test = !defined $got && !defined $expect;
832
833 $self->ok( $test, $name );
834 $self->_is_diag( $got, '==', $expect ) unless $test;
835 $ctx->release;
836 return $test;
837 }
838
839 release $ctx, $self->cmp_ok( $got, '==', $expect, $name );
840}
841
842
843sub _diag_fmt {
844 my( $self, $type, $val ) = @_;
845
846 if( defined $$val ) {
847 if( $type eq 'eq' or $type eq 'ne' ) {
848 # quote and force string context
849 $$val = "'$$val'";
850 }
851 else {
852 # force numeric context
853 $self->_unoverload_num($val);
854 }
855 }
856 else {
857 $$val = 'undef';
858 }
859
860 return;
861}
862
863
864sub _is_diag {
865 my( $self, $got, $type, $expect ) = @_;
866
867 $self->_diag_fmt( $type, $_ ) for \$got, \$expect;
868
869 local $Level = $Level + 1;
870 return $self->diag(<<"DIAGNOSTIC");
871 got: $got
872 expected: $expect
873DIAGNOSTIC
874
875}
876
877sub _isnt_diag {
878 my( $self, $got, $type ) = @_;
879
880 $self->_diag_fmt( $type, \$got );
881
882 local $Level = $Level + 1;
883 return $self->diag(<<"DIAGNOSTIC");
884 got: $got
885 expected: anything else
886DIAGNOSTIC
887}
888
889
890sub isnt_eq {
891 my( $self, $got, $dont_expect, $name ) = @_;
892 my $ctx = $self->ctx;
893 local $Level = $Level + 1;
894
895 if( !defined $got || !defined $dont_expect ) {
896 # undef only matches undef and nothing else
897 my $test = defined $got || defined $dont_expect;
898
899 $self->ok( $test, $name );
900 $self->_isnt_diag( $got, 'ne' ) unless $test;
901 $ctx->release;
902 return $test;
903 }
904
905 release $ctx, $self->cmp_ok( $got, 'ne', $dont_expect, $name );
906}
907
908sub isnt_num {
909 my( $self, $got, $dont_expect, $name ) = @_;
910 my $ctx = $self->ctx;
911 local $Level = $Level + 1;
912
913 if( !defined $got || !defined $dont_expect ) {
914 # undef only matches undef and nothing else
915 my $test = defined $got || defined $dont_expect;
916
917 $self->ok( $test, $name );
918 $self->_isnt_diag( $got, '!=' ) unless $test;
919 $ctx->release;
920 return $test;
921 }
922
923 release $ctx, $self->cmp_ok( $got, '!=', $dont_expect, $name );
924}
925
926
927sub like {
928 my( $self, $thing, $regex, $name ) = @_;
929 my $ctx = $self->ctx;
930
931 local $Level = $Level + 1;
932
933 release $ctx, $self->_regex_ok( $thing, $regex, '=~', $name );
934}
935
936sub unlike {
937 my( $self, $thing, $regex, $name ) = @_;
938 my $ctx = $self->ctx;
939
940 local $Level = $Level + 1;
941
942 release $ctx, $self->_regex_ok( $thing, $regex, '!~', $name );
943}
944
945
94613µsmy %numeric_cmps = map { ( $_, 1 ) } ( "<", "<=", ">", ">=", "==", "!=", "<=>" );
947
948# Bad, these are not comparison operators. Should we include more?
94913µsmy %cmp_ok_bl = map { ( $_, 1 ) } ( "=", "+=", ".=", "x=", "^=", "|=", "||=", "&&=", "...");
950
951sub cmp_ok {
952 my( $self, $got, $type, $expect, $name ) = @_;
953 my $ctx = $self->ctx;
954
955 if ($cmp_ok_bl{$type}) {
956 $ctx->throw("$type is not a valid comparison operator in cmp_ok()");
957 }
958
959 my ($test, $succ);
960 my $error;
961 {
962 ## no critic (BuiltinFunctions::ProhibitStringyEval)
963
964 local( $@, $!, $SIG{__DIE__} ); # isolate eval
965
966 my($pack, $file, $line) = $ctx->trace->call();
967 my $warning_bits = $ctx->trace->warning_bits;
968 # convert this to a code string so the BEGIN doesn't have to close
969 # over it, which can lead to issues with Devel::Cover
970 my $bits_code = defined $warning_bits ? qq["\Q$warning_bits\E"] : 'undef';
971
972 # This is so that warnings come out at the caller's level
973 $succ = eval qq[
974BEGIN {\${^WARNING_BITS} = $bits_code};
975#line $line "(eval in cmp_ok) $file"
976\$test = (\$got $type \$expect);
9771;
978];
979 $error = $@;
980 }
981 local $Level = $Level + 1;
982 my $ok = $self->ok( $test, $name );
983
984 # Treat overloaded objects as numbers if we're asked to do a
985 # numeric comparison.
986 my $unoverload
987 = $numeric_cmps{$type}
988 ? '_unoverload_num'
989 : '_unoverload_str';
990
991 $self->diag(<<"END") unless $succ;
992An error occurred while using $type:
993------------------------------------
994$error
995------------------------------------
996END
997
998 unless($ok) {
999 $self->$unoverload( \$got, \$expect );
1000
1001 if( $type =~ /^(eq|==)$/ ) {
1002 $self->_is_diag( $got, $type, $expect );
1003 }
1004 elsif( $type =~ /^(ne|!=)$/ ) {
1005 if (defined($got) xor defined($expect)) {
1006 $self->_cmp_diag( $got, $type, $expect );
1007 }
1008 else {
1009 $self->_isnt_diag( $got, $type );
1010 }
1011 }
1012 else {
1013 $self->_cmp_diag( $got, $type, $expect );
1014 }
1015 }
1016 return release $ctx, $ok;
1017}
1018
1019sub _cmp_diag {
1020 my( $self, $got, $type, $expect ) = @_;
1021
1022 $got = defined $got ? "'$got'" : 'undef';
1023 $expect = defined $expect ? "'$expect'" : 'undef';
1024
1025 local $Level = $Level + 1;
1026 return $self->diag(<<"DIAGNOSTIC");
1027 $got
1028 $type
1029 $expect
1030DIAGNOSTIC
1031}
1032
1033sub _caller_context {
1034 my $self = shift;
1035
1036 my( $pack, $file, $line ) = $self->caller(1);
1037
1038 my $code = '';
1039 $code .= "#line $line $file\n" if defined $file and defined $line;
1040
1041 return $code;
1042}
1043
1044
1045sub BAIL_OUT {
1046 my( $self, $reason ) = @_;
1047
1048 my $ctx = $self->ctx;
1049
1050 $self->{Bailed_Out} = 1;
1051
1052 $ctx->bail($reason);
1053}
1054
1055
1056{
10573439µs232µs
# spent 19µs (5+14) within Test::Builder::BEGIN@1057 which was called: # once (5µs+14µs) by Test::Builder::Module::BEGIN@5 at line 1057
no warnings 'once';
# spent 19µs making 1 call to Test::Builder::BEGIN@1057 # spent 14µs making 1 call to warnings::unimport
10581800ns *BAILOUT = \&BAIL_OUT;
1059}
1060
1061sub skip {
1062 my( $self, $why, $name ) = @_;
1063 $why ||= '';
1064 $name = '' unless defined $name;
1065 $self->_unoverload_str( \$why );
1066
1067 my $ctx = $self->ctx;
1068
1069 $name = "$name";
1070 $why = "$why";
1071
1072 $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness.
1073 $name =~ s{\n}{\n# }sg;
1074 $why =~ s{\n}{\n# }sg;
1075
1076 $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}[ $ctx->hub->count ] = {
1077 'ok' => 1,
1078 actual_ok => 1,
1079 name => $name,
1080 type => 'skip',
1081 reason => $why,
1082 } unless $self->{no_log_results};
1083
1084 my $tctx = $ctx->snapshot;
1085 $tctx->skip('', $why);
1086
1087 return release $ctx, 1;
1088}
1089
1090
1091sub todo_skip {
1092 my( $self, $why ) = @_;
1093 $why ||= '';
1094
1095 my $ctx = $self->ctx;
1096
1097 $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}[ $ctx->hub->count ] = {
1098 'ok' => 1,
1099 actual_ok => 0,
1100 name => '',
1101 type => 'todo_skip',
1102 reason => $why,
1103 } unless $self->{no_log_results};
1104
1105 $why =~ s{\n}{\n# }sg;
1106 my $tctx = $ctx->snapshot;
1107 $tctx->send_event( 'Skip', todo => $why, todo_diag => 1, reason => $why, pass => 0);
1108
1109 return release $ctx, 1;
1110}
1111
1112
1113sub maybe_regex {
1114 my( $self, $regex ) = @_;
1115 my $usable_regex = undef;
1116
1117 return $usable_regex unless defined $regex;
1118
1119 my( $re, $opts );
1120
1121 # Check for qr/foo/
1122 if( _is_qr($regex) ) {
1123 $usable_regex = $regex;
1124 }
1125 # Check for '/foo/' or 'm,foo,'
1126 elsif(( $re, $opts ) = $regex =~ m{^ /(.*)/ (\w*) $ }sx or
1127 ( undef, $re, $opts ) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx
1128 )
1129 {
1130 $usable_regex = length $opts ? "(?$opts)$re" : $re;
1131 }
1132
1133 return $usable_regex;
1134}
1135
1136sub _is_qr {
1137 my $regex = shift;
1138
1139 # is_regexp() checks for regexes in a robust manner, say if they're
1140 # blessed.
1141 return re::is_regexp($regex) if defined &re::is_regexp;
1142 return ref $regex eq 'Regexp';
1143}
1144
1145sub _regex_ok {
1146 my( $self, $thing, $regex, $cmp, $name ) = @_;
1147
1148 my $ok = 0;
1149 my $usable_regex = $self->maybe_regex($regex);
1150 unless( defined $usable_regex ) {
1151 local $Level = $Level + 1;
1152 $ok = $self->ok( 0, $name );
1153 $self->diag(" '$regex' doesn't look much like a regex to me.");
1154 return $ok;
1155 }
1156
1157 {
1158 my $test;
1159 my $context = $self->_caller_context;
1160
1161 {
1162 ## no critic (BuiltinFunctions::ProhibitStringyEval)
1163
1164 local( $@, $!, $SIG{__DIE__} ); # isolate eval
1165
1166 # No point in issuing an uninit warning, they'll see it in the diagnostics
11672250µs232µs
# spent 18µs (5+13) within Test::Builder::BEGIN@1167 which was called: # once (5µs+13µs) by Test::Builder::Module::BEGIN@5 at line 1167
no warnings 'uninitialized';
# spent 18µs making 1 call to Test::Builder::BEGIN@1167 # spent 13µs making 1 call to warnings::unimport
1168
1169 $test = eval $context . q{$test = $thing =~ /$usable_regex/ ? 1 : 0};
1170 }
1171
1172 $test = !$test if $cmp eq '!~';
1173
1174 local $Level = $Level + 1;
1175 $ok = $self->ok( $test, $name );
1176 }
1177
1178 unless($ok) {
1179 $thing = defined $thing ? "'$thing'" : 'undef';
1180 my $match = $cmp eq '=~' ? "doesn't match" : "matches";
1181
1182 local $Level = $Level + 1;
1183 $self->diag( sprintf <<'DIAGNOSTIC', $thing, $match, $regex );
1184 %s
1185 %13s '%s'
1186DIAGNOSTIC
1187
1188 }
1189
1190 return $ok;
1191}
1192
1193
1194sub is_fh {
1195 my $self = shift;
1196 my $maybe_fh = shift;
1197 return 0 unless defined $maybe_fh;
1198
1199 return 1 if ref $maybe_fh eq 'GLOB'; # its a glob ref
1200 return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob
1201
1202 return eval { $maybe_fh->isa("IO::Handle") } ||
1203 eval { tied($maybe_fh)->can('TIEHANDLE') };
1204}
1205
1206
1207sub level {
1208 my( $self, $level ) = @_;
1209
1210 if( defined $level ) {
1211 $Level = $level;
1212 }
1213 return $Level;
1214}
1215
1216
1217
# spent 48µs (16+33) within Test::Builder::use_numbers which was called: # once (16µs+33µs) by Test::Builder::reset at line 476
sub use_numbers {
12181200ns my( $self, $use_nums ) = @_;
1219
12201700ns123µs my $ctx = $self->ctx;
# spent 23µs making 1 call to Test::Builder::ctx
122111µs21µs my $format = $ctx->hub->format;
# spent 800ns making 1 call to Test2::Hub::format # spent 500ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
122215µs22µs unless ($format && $format->can('no_numbers') && $format->can('set_no_numbers')) {
# spent 2µs making 2 calls to UNIVERSAL::can, avg 1µs/call
1223 warn "The current formatter does not support 'use_numbers'" if $format;
1224 return release $ctx, 0;
1225 }
1226
12271800ns11µs $format->set_no_numbers(!$use_nums) if defined $use_nums;
1228
122914µs36µs return release $ctx, $format->no_numbers ? 0 : 1;
# spent 4µs making 1 call to Test2::API::release # spent 600ns making 1 call to Test2::API::Context::DESTROY # spent 400ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
1230}
1231
1232
# spent 12µs within Test::Builder::BEGIN@1232 which was called: # once (12µs+0s) by Test::Builder::Module::BEGIN@5 at line 1254
BEGIN {
123312µs for my $method (qw(no_header no_diag)) {
12342600ns my $set = "set_$method";
1235 my $code = sub {
1236 my( $self, $no ) = @_;
1237
1238 my $ctx = $self->ctx;
1239 my $format = $ctx->hub->format;
1240 unless ($format && $format->can($set)) {
1241 warn "The current formatter does not support '$method'" if $format;
1242 $ctx->release;
1243 return
1244 }
1245
1246 $format->$set($no) if defined $no;
1247
1248 return release $ctx, $format->$method ? 1 : 0;
124926µs };
1250
1251228µs214µs
# spent 10µs (6+4) within Test::Builder::BEGIN@1251 which was called: # once (6µs+4µs) by Test::Builder::Module::BEGIN@5 at line 1251
no strict 'refs'; ## no critic
# spent 10µs making 1 call to Test::Builder::BEGIN@1251 # spent 4µs making 1 call to strict::unimport
125223µs *$method = $code;
1253 }
12541735µs112µs}
# spent 12µs making 1 call to Test::Builder::BEGIN@1232
1255
1256sub no_ending {
1257 my( $self, $no ) = @_;
1258
1259 my $ctx = $self->ctx;
1260
1261 $ctx->hub->set_no_ending($no) if defined $no;
1262
1263 return release $ctx, $ctx->hub->no_ending;
1264}
1265
1266sub diag {
1267 my $self = shift;
1268 return unless @_;
1269
1270 my $text = join '' => map {defined($_) ? $_ : 'undef'} @_;
1271
1272 if (Test2::API::test2_in_preload()) {
1273 chomp($text);
1274 $text =~ s/^/# /msg;
1275 print STDERR $text, "\n";
1276 return 0;
1277 }
1278
1279 my $ctx = $self->ctx;
1280 $ctx->diag($text);
1281 $ctx->release;
1282 return 0;
1283}
1284
1285
1286sub note {
1287 my $self = shift;
1288 return unless @_;
1289
1290 my $text = join '' => map {defined($_) ? $_ : 'undef'} @_;
1291
1292 if (Test2::API::test2_in_preload()) {
1293 chomp($text);
1294 $text =~ s/^/# /msg;
1295 print STDOUT $text, "\n";
1296 return 0;
1297 }
1298
1299 my $ctx = $self->ctx;
1300 $ctx->note($text);
1301 $ctx->release;
1302 return 0;
1303}
1304
1305
1306sub explain {
1307 my $self = shift;
1308
1309 local ($@, $!);
1310 require Data::Dumper;
1311
1312 return map {
1313 ref $_
1314 ? do {
1315 my $dumper = Data::Dumper->new( [$_] );
1316 $dumper->Indent(1)->Terse(1);
1317 $dumper->Sortkeys(1) if $dumper->can("Sortkeys");
1318 $dumper->Dump;
1319 }
1320 : $_
1321 } @_;
1322}
1323
1324
1325sub output {
1326 my( $self, $fh ) = @_;
1327
1328 my $ctx = $self->ctx;
1329 my $format = $ctx->hub->format;
1330 $ctx->release;
1331 return unless $format && $format->isa('Test2::Formatter::TAP');
1332
1333 $format->handles->[Test2::Formatter::TAP::OUT_STD()] = $self->_new_fh($fh)
1334 if defined $fh;
1335
1336 return $format->handles->[Test2::Formatter::TAP::OUT_STD()];
1337}
1338
1339sub failure_output {
1340 my( $self, $fh ) = @_;
1341
1342 my $ctx = $self->ctx;
1343 my $format = $ctx->hub->format;
1344 $ctx->release;
1345 return unless $format && $format->isa('Test2::Formatter::TAP');
1346
1347 $format->handles->[Test2::Formatter::TAP::OUT_ERR()] = $self->_new_fh($fh)
1348 if defined $fh;
1349
1350 return $format->handles->[Test2::Formatter::TAP::OUT_ERR()];
1351}
1352
1353sub todo_output {
1354 my( $self, $fh ) = @_;
1355
1356 my $ctx = $self->ctx;
1357 my $format = $ctx->hub->format;
1358 $ctx->release;
1359 return unless $format && $format->isa('Test::Builder::Formatter');
1360
1361 $format->handles->[Test::Builder::Formatter::OUT_TODO()] = $self->_new_fh($fh)
1362 if defined $fh;
1363
1364 return $format->handles->[Test::Builder::Formatter::OUT_TODO()];
1365}
1366
1367sub _new_fh {
1368 my $self = shift;
1369 my($file_or_fh) = shift;
1370
1371 my $fh;
1372 if( $self->is_fh($file_or_fh) ) {
1373 $fh = $file_or_fh;
1374 }
1375 elsif( ref $file_or_fh eq 'SCALAR' ) {
1376 # Scalar refs as filehandles was added in 5.8.
1377 if( $] >= 5.008 ) {
1378 open $fh, ">>", $file_or_fh
1379 or $self->croak("Can't open scalar ref $file_or_fh: $!");
1380 }
1381 # Emulate scalar ref filehandles with a tie.
1382 else {
1383 $fh = Test::Builder::IO::Scalar->new($file_or_fh)
1384 or $self->croak("Can't tie scalar ref $file_or_fh");
1385 }
1386 }
1387 else {
1388 open $fh, ">", $file_or_fh
1389 or $self->croak("Can't open test output log $file_or_fh: $!");
1390 _autoflush($fh);
1391 }
1392
1393 return $fh;
1394}
1395
1396sub _autoflush {
1397 my($fh) = shift;
1398 my $old_fh = select $fh;
1399 $| = 1;
1400 select $old_fh;
1401
1402 return;
1403}
1404
1405
1406
# spent 59µs (28+31) within Test::Builder::reset_outputs which was called: # once (28µs+31µs) by Test::Builder::reset at line 479
sub reset_outputs {
14071100ns my $self = shift;
1408
14091700ns117µs my $ctx = $self->ctx;
# spent 17µs making 1 call to Test::Builder::ctx
141011µs21µs my $format = $ctx->hub->format;
# spent 700ns making 1 call to Test2::Hub::format # spent 500ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
14111400ns12µs $ctx->release;
# spent 2µs making 1 call to Test2::API::Context::release
141212µs1400ns return unless $format && $format->isa('Test2::Formatter::TAP');
# spent 400ns making 1 call to UNIVERSAL::isa
141312µs1900ns $format->set_handles([@{$self->{Orig_Handles}}]) if $self->{Orig_Handles};
1414
141514µs19µs return;
# spent 9µs making 1 call to Test2::API::Context::DESTROY
1416}
1417
1418
1419sub carp {
1420 my $self = shift;
1421 my $ctx = $self->ctx;
1422 $ctx->alert(join "", @_);
1423 $ctx->release;
1424}
1425
1426sub croak {
1427 my $self = shift;
1428 my $ctx = $self->ctx;
1429 $ctx->throw(join "", @_);
1430 $ctx->release;
1431}
1432
1433
1434
# spent 40µs (11+29) within Test::Builder::current_test which was called: # once (11µs+29µs) by Test::Builder::done_testing at line 608
sub current_test {
14351300ns my( $self, $num ) = @_;
1436
14371900ns121µs my $ctx = $self->ctx;
# spent 21µs making 1 call to Test::Builder::ctx
14381800ns1500ns my $hub = $ctx->hub;
1439
14401300ns if( defined $num ) {
1441 $hub->set_count($num);
1442
1443 unless ($self->{no_log_results}) {
1444 # If the test counter is being pushed forward fill in the details.
1445 my $test_results = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results};
1446 if ($num > @$test_results) {
1447 my $start = @$test_results ? @$test_results : 0;
1448 for ($start .. $num - 1) {
1449 $test_results->[$_] = {
1450 'ok' => 1,
1451 actual_ok => undef,
1452 reason => 'incrementing test number',
1453 type => 'unknown',
1454 name => undef
1455 };
1456 }
1457 }
1458 # If backward, wipe history. Its their funeral.
1459 elsif ($num < @$test_results) {
1460 $#{$test_results} = $num - 1;
1461 }
1462 }
1463 }
146416µs37µs return release $ctx, $hub->count;
# spent 6µs making 1 call to Test2::API::release # spent 700ns making 1 call to Test2::API::Context::DESTROY # spent 300ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
1465}
1466
1467
1468sub is_passing {
1469 my $self = shift;
1470
1471 my $ctx = $self->ctx;
1472 my $hub = $ctx->hub;
1473
1474 if( @_ ) {
1475 my ($bool) = @_;
1476 $hub->set_failed(0) if $bool;
1477 $hub->is_passing($bool);
1478 }
1479
1480 return release $ctx, $hub->is_passing;
1481}
1482
1483
1484sub summary {
1485 my($self) = shift;
1486
1487 return if $self->{no_log_results};
1488
1489 my $ctx = $self->ctx;
1490 my $data = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results};
1491 $ctx->release;
1492 return map { $_ ? $_->{'ok'} : () } @$data;
1493}
1494
1495
1496sub details {
1497 my $self = shift;
1498
1499 return if $self->{no_log_results};
1500
1501 my $ctx = $self->ctx;
1502 my $data = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results};
1503 $ctx->release;
1504 return @$data;
1505}
1506
1507
1508sub find_TODO {
1509 my( $self, $pack, $set, $new_value ) = @_;
1510
1511 my $ctx = $self->ctx;
1512
1513 $pack ||= $ctx->trace->package || $self->exported_to;
1514 $ctx->release;
1515
1516 return unless $pack;
1517
1518227µs215µs
# spent 11µs (6+4) within Test::Builder::BEGIN@1518 which was called: # once (6µs+4µs) by Test::Builder::Module::BEGIN@5 at line 1518
no strict 'refs'; ## no critic
# spent 11µs making 1 call to Test::Builder::BEGIN@1518 # spent 4µs making 1 call to strict::unimport
1519292µs231µs
# spent 19µs (7+12) within Test::Builder::BEGIN@1519 which was called: # once (7µs+12µs) by Test::Builder::Module::BEGIN@5 at line 1519
no warnings 'once';
# spent 19µs making 1 call to Test::Builder::BEGIN@1519 # spent 12µs making 1 call to warnings::unimport
1520 my $old_value = ${ $pack . '::TODO' };
1521 $set and ${ $pack . '::TODO' } = $new_value;
1522 return $old_value;
1523}
1524
1525sub todo {
1526 my( $self, $pack ) = @_;
1527
1528 local $Level = $Level + 1;
1529 my $ctx = $self->ctx;
1530 $ctx->release;
1531
1532 my $meta = $ctx->hub->meta(__PACKAGE__, {todo => []})->{todo};
1533 return $meta->[-1]->[1] if $meta && @$meta;
1534
1535 $pack ||= $ctx->trace->package;
1536
1537 return unless $pack;
1538
1539220µs213µs
# spent 9µs (5+4) within Test::Builder::BEGIN@1539 which was called: # once (5µs+4µs) by Test::Builder::Module::BEGIN@5 at line 1539
no strict 'refs'; ## no critic
# spent 9µs making 1 call to Test::Builder::BEGIN@1539 # spent 4µs making 1 call to strict::unimport
1540272µs225µs
# spent 14µs (4+11) within Test::Builder::BEGIN@1540 which was called: # once (4µs+11µs) by Test::Builder::Module::BEGIN@5 at line 1540
no warnings 'once';
# spent 14µs making 1 call to Test::Builder::BEGIN@1540 # spent 11µs making 1 call to warnings::unimport
1541 return ${ $pack . '::TODO' };
1542}
1543
1544sub in_todo {
1545 my $self = shift;
1546
1547 local $Level = $Level + 1;
1548 my $ctx = $self->ctx;
1549 $ctx->release;
1550
1551 my $meta = $ctx->hub->meta(__PACKAGE__, {todo => []})->{todo};
1552 return 1 if $meta && @$meta;
1553
1554 my $pack = $ctx->trace->package || return 0;
1555
1556221µs212µs
# spent 9µs (6+3) within Test::Builder::BEGIN@1556 which was called: # once (6µs+3µs) by Test::Builder::Module::BEGIN@5 at line 1556
no strict 'refs'; ## no critic
# spent 9µs making 1 call to Test::Builder::BEGIN@1556 # spent 3µs making 1 call to strict::unimport
15572662µs224µs
# spent 13µs (3+10) within Test::Builder::BEGIN@1557 which was called: # once (3µs+10µs) by Test::Builder::Module::BEGIN@5 at line 1557
no warnings 'once';
# spent 13µs making 1 call to Test::Builder::BEGIN@1557 # spent 10µs making 1 call to warnings::unimport
1558 my $todo = ${ $pack . '::TODO' };
1559
1560 return 0 unless defined $todo;
1561 return 0 if "$todo" eq '';
1562 return 1;
1563}
1564
1565sub todo_start {
1566 my $self = shift;
1567 my $message = @_ ? shift : '';
1568
1569 my $ctx = $self->ctx;
1570
1571 my $hub = $ctx->hub;
1572 my $filter = $hub->pre_filter(sub {
1573 my ($active_hub, $e) = @_;
1574
1575 # Turn a diag into a todo diag
1576 return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag';
1577
1578 # Set todo on ok's
1579 if ($hub == $active_hub && $e->isa('Test2::Event::Ok')) {
1580 $e->set_todo($message);
1581 $e->set_effective_pass(1);
1582
1583 if (my $result = $e->get_meta(__PACKAGE__)) {
1584 $result->{reason} ||= $message;
1585 $result->{type} ||= 'todo';
1586 $result->{ok} = 1;
1587 }
1588 }
1589
1590 return $e;
1591 }, inherit => 1);
1592
1593 push @{$ctx->hub->meta(__PACKAGE__, {todo => []})->{todo}} => [$filter, $message];
1594
1595 $ctx->release;
1596
1597 return;
1598}
1599
1600sub todo_end {
1601 my $self = shift;
1602
1603 my $ctx = $self->ctx;
1604
1605 my $set = pop @{$ctx->hub->meta(__PACKAGE__, {todo => []})->{todo}};
1606
1607 $ctx->throw('todo_end() called without todo_start()') unless $set;
1608
1609 $ctx->hub->pre_unfilter($set->[0]);
1610
1611 $ctx->release;
1612
1613 return;
1614}
1615
1616
1617sub caller { ## no critic (Subroutines::ProhibitBuiltinHomonyms)
1618 my( $self ) = @_;
1619
1620 my $ctx = $self->ctx;
1621
1622 my $trace = $ctx->trace;
1623 $ctx->release;
1624 return wantarray ? $trace->call : $trace->package;
1625}
1626
1627
1628sub _try {
1629 my( $self, $code, %opts ) = @_;
1630
1631 my $error;
1632 my $return;
1633 {
1634 local $!; # eval can mess up $!
1635 local $@; # don't set $@ in the test
1636 local $SIG{__DIE__}; # don't trip an outside DIE handler.
1637 $return = eval { $code->() };
1638 $error = $@;
1639 }
1640
1641 die $error if $error and $opts{die_on_fail};
1642
1643 return wantarray ? ( $return, $error ) : $return;
1644}
1645
1646
# spent 43µs (29+14) within Test::Builder::_ending which was called: # once (29µs+14µs) by Test::Builder::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder.pm:156] at line 156
sub _ending {
16471200ns my $self = shift;
16481500ns my ($ctx, $real_exit_code, $new) = @_;
1649
16501300ns unless ($ctx) {
1651 my $octx = $self->ctx;
1652 $ctx = $octx->snapshot;
1653 $octx->release;
1654 }
1655
165611µs2900ns return if $ctx->hub->no_ending;
# spent 900ns making 2 calls to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84], avg 450ns/call
165713µs24µs return if $ctx->hub->meta(__PACKAGE__, {})->{Ending}++;
# spent 4µs making 1 call to Test2::Util::ExternalMeta::meta # spent 300ns making 1 call to Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
1658
1659 # Don't bother with an ending if this is a forked copy. Only the parent
1660 # should do the ending.
166111µs return unless $self->{Original_Pid} == $$;
1662
16631800ns1300ns my $hub = $ctx->hub;
166412µs11µs return if $hub->bailed_out;
1665
166611µs1900ns my $plan = $hub->plan;
# spent 900ns making 1 call to Test2::Hub::plan
16671900ns1500ns my $count = $hub->count;
166811µs1600ns my $failed = $hub->failed;
16691800ns15µs my $passed = $hub->is_passing;
# spent 5µs making 1 call to Test2::Hub::is_passing
16701400ns return unless $plan || $count || $failed;
1671
1672 # Ran tests but never declared a plan or hit done_testing
16731900ns1500ns if( !defined($hub->plan) and $hub->count ) {
# spent 500ns making 1 call to Test2::Hub::plan
1674 $self->diag("Tests were run but no plan was declared and done_testing() was not seen.");
1675
1676 if($real_exit_code) {
1677 $self->diag(<<"FAIL");
1678Looks like your test exited with $real_exit_code just after $count.
1679FAIL
1680 $$new ||= $real_exit_code;
1681 return;
1682 }
1683
1684 # But if the tests ran, handle exit code.
1685 if($failed > 0) {
1686 my $exit_code = $failed <= 254 ? $failed : 254;
1687 $$new ||= $exit_code;
1688 return;
1689 }
1690
1691 $$new ||= 254;
1692 return;
1693 }
1694
16951200ns if ($real_exit_code && !$count) {
1696 $self->diag("Looks like your test exited with $real_exit_code before it could output anything.");
1697 $$new ||= $real_exit_code;
1698 return;
1699 }
1700
17011800ns return if $plan && "$plan" eq 'SKIP';
1702
17031200ns if (!$count) {
1704 $self->diag('No tests run!');
1705 $$new ||= 255;
1706 return;
1707 }
1708
17091200ns if ($real_exit_code) {
1710 $self->diag(<<"FAIL");
1711Looks like your test exited with $real_exit_code just after $count.
1712FAIL
1713 $$new ||= $real_exit_code;
1714 return;
1715 }
1716
17171400ns if ($plan eq 'NO PLAN') {
1718 $ctx->plan( $count );
1719 $plan = $hub->plan;
1720 }
1721
1722 # Figure out if we passed or failed and print helpful messages.
17231300ns my $num_extra = $count - $plan;
1724
17251300ns if ($num_extra != 0) {
1726 my $s = $plan == 1 ? '' : 's';
1727 $self->diag(<<"FAIL");
1728Looks like you planned $plan test$s but ran $count.
1729FAIL
1730 }
1731
17321300ns if ($failed) {
1733 my $s = $failed == 1 ? '' : 's';
1734
1735 my $qualifier = $num_extra == 0 ? '' : ' run';
1736
1737 $self->diag(<<"FAIL");
1738Looks like you failed $failed test$s of $count$qualifier.
1739FAIL
1740 }
1741
17421400ns if (!$passed && !$failed && $count && !$num_extra) {
1743 $ctx->diag(<<"FAIL");
1744All assertions passed, but errors were encountered.
1745FAIL
1746 }
1747
17481200ns my $exit_code = 0;
17491800ns if ($failed) {
1750 $exit_code = $failed <= 254 ? $failed : 254;
1751 }
1752 elsif ($num_extra != 0) {
1753 $exit_code = 255;
1754 }
1755 elsif (!$passed) {
1756 $exit_code = 255;
1757 }
1758
17591800ns $$new ||= $exit_code;
176012µs return;
1761}
1762
1763# Some things used this even though it was private... I am looking at you
1764# Test::Builder::Prefix...
1765sub _print_comment {
1766 my( $self, $fh, @msgs ) = @_;
1767
1768 return if $self->no_diag;
1769 return unless @msgs;
1770
1771 # Prevent printing headers when compiling (i.e. -c)
1772 return if $^C;
1773
1774 # Smash args together like print does.
1775 # Convert undef to 'undef' so its readable.
1776 my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
1777
1778 # Escape the beginning, _print will take care of the rest.
1779 $msg =~ s/^/# /;
1780
1781 local( $\, $", $, ) = ( undef, ' ', '' );
1782 print $fh $msg;
1783
1784 return 0;
1785}
1786
1787# This is used by Test::SharedFork to turn on IPC after the fact. Not
1788# documenting because I do not want it used. The method name is borrowed from
1789# Test::Builder 2
1790# Once Test2 stuff goes stable this method will be removed and Test::SharedFork
1791# will be made smarter.
1792sub coordinate_forks {
1793 my $self = shift;
1794
1795 {
1796 local ($@, $!);
1797 require Test2::IPC;
1798 }
1799 Test2::IPC->import;
1800 Test2::API::test2_ipc_enable_polling();
1801 Test2::API::test2_load();
1802 my $ipc = Test2::IPC::apply_ipc($self->{Stack});
1803 $ipc->set_no_fatal(1);
1804 Test2::API::test2_no_wait(1);
1805}
1806
1807sub no_log_results { $_[0]->{no_log_results} = 1 }
1808
180916µs1;
1810
1811__END__
 
# spent 1µs within Test::Builder::__ANON__ which was called 3 times, avg 400ns/call: # once (700ns+0s) by Test::Builder::BEGIN@37 at line 37 # once (300ns+0s) by Test::Builder::BEGIN@33 at line 33 # once (200ns+0s) by Test::Builder::BEGIN@34 at line 34
sub Test::Builder::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Meta-pm-48-line.html0000644000175000017500000006327714576335353024546 0ustar michamicha Profile of Test2/EventFacet/Meta.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Meta.pm
StatementsExecuted 15 statements in 306µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111448µs506µsTest2::EventFacet::Meta::::BEGIN@8Test2::EventFacet::Meta::BEGIN@8
1119µs11µsTest2::EventFacet::Meta::::BEGIN@2Test2::EventFacet::Meta::BEGIN@2
1116µs6µsTest2::EventFacet::Meta::::BEGIN@7Test2::EventFacet::Meta::BEGIN@7
1116µs10µsTest2::EventFacet::Meta::::BEGIN@30Test2::EventFacet::Meta::BEGIN@30
1115µs18µsTest2::EventFacet::Meta::::BEGIN@12Test2::EventFacet::Meta::BEGIN@12
1113µs18µsTest2::EventFacet::Meta::::BEGIN@3Test2::EventFacet::Meta::BEGIN@3
0000s0sTest2::EventFacet::Meta::::AUTOLOADTest2::EventFacet::Meta::AUTOLOAD
0000s0sTest2::EventFacet::Meta::::__ANON__[:28]Test2::EventFacet::Meta::__ANON__[:28]
0000s0sTest2::EventFacet::Meta::::canTest2::EventFacet::Meta::can
0000s0sTest2::EventFacet::Meta::::set_detailsTest2::EventFacet::Meta::set_details
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Meta;
2217µs212µs
# spent 11µs (9+1) within Test2::EventFacet::Meta::BEGIN@2 which was called: # once (9µs+1µs) by Test2::Event::BEGIN@20 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::Meta::BEGIN@2 # spent 2µs making 1 call to strict::import
3233µs234µs
# spent 18µs (3+15) within Test2::EventFacet::Meta::BEGIN@3 which was called: # once (3µs+15µs) by Test2::Event::BEGIN@20 at line 3
use warnings;
# spent 18µs making 1 call to Test2::EventFacet::Meta::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7220µs16µs
# spent 6µs within Test2::EventFacet::Meta::BEGIN@7 which was called: # once (6µs+0s) by Test2::Event::BEGIN@20 at line 7
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 6µs making 1 call to Test2::EventFacet::Meta::BEGIN@7
8285µs2525µs
# spent 506µs (448+59) within Test2::EventFacet::Meta::BEGIN@8 which was called: # once (448µs+59µs) by Test2::Event::BEGIN@20 at line 8
use vars qw/$AUTOLOAD/;
# spent 506µs making 1 call to Test2::EventFacet::Meta::BEGIN@8 # spent 19µs making 1 call to vars::import
9
10# replace set_details
11{
12271µs232µs
# spent 18µs (5+13) within Test2::EventFacet::Meta::BEGIN@12 which was called: # once (5µs+13µs) by Test2::Event::BEGIN@20 at line 12
no warnings 'redefine';
# spent 18µs making 1 call to Test2::EventFacet::Meta::BEGIN@12 # spent 13µs making 1 call to warnings::unimport
13 sub set_details { $_[0]->{'set_details'} }
14}
15
161400nssub can {
17 my $self = shift;
18 my ($name) = @_;
19
20 my $existing = $self->SUPER::can($name);
21 return $existing if $existing;
22
23 # Only vivify when called on an instance, do not vivify for a class. There
24 # are a lot of magic class methods used in things like serialization (or
25 # the forks.pm module) which cause problems when vivified.
26 return undef unless ref($self);
27
28 my $sub = sub { $_[0]->{$name} };
29 {
30277µs214µs
# spent 10µs (6+4) within Test2::EventFacet::Meta::BEGIN@30 which was called: # once (6µs+4µs) by Test2::Event::BEGIN@20 at line 30
no strict 'refs';
# spent 10µs making 1 call to Test2::EventFacet::Meta::BEGIN@30 # spent 4µs making 1 call to strict::unimport
31 *$name = $sub;
32 }
33
34 return $sub;
35}
36
37sub AUTOLOAD {
38 my $name = $AUTOLOAD;
39 $name =~ s/^.*:://g;
40 my $sub = $_[0]->can($name);
41 goto &$sub;
42}
43
4412µs1;
45
46__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 58)[XML-Twig-pm-7113]-175-line.html0000644000175000017500000004107514576335353024347 0ustar michamicha Profile of (eval 58)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 58)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 9 statements in 102µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs499µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1118µs32µsXML::Twig::Elt::::BEGIN@1XML::Twig::Elt::BEGIN@1
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
19102µs5545µs
# spent 499µs (10+489) within XML::Twig::Elt::__ANON__[(eval 58)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (10µs+489µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 32µs (8+24) within XML::Twig::Elt::BEGIN@1 which was called: # once (8µs+24µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { grep { ((defined $_->{'att'}->{"Type"}) && ($_->{'att'}->{"Type"} eq "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument")) } $_->descendants( 'packagerels:Relationship') } @results;return XML::Twig::_unique_elts( @results); }
# spent 476µs making 1 call to XML::Twig::descendants # spent 32µs making 1 call to XML::Twig::Elt::BEGIN@1 # spent 24µs making 1 call to warnings::unimport # spent 7µs making 1 call to XML::Twig::Elt::twig # spent 6µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/all_stacks_by_time.svg0000644000175000017500000027352414576335353022530 0ustar michamicha Flame Graph Reset Zoom Search Spreadsheet::ParseXLSX::_parse_sheet (70,586,549 microseconds, 99.57%) Spreadsheet::ParseXLSX::_parse_sheet XML::Twig::parser (118,138 microseconds, 0.17%) Spreadsheet::ParseExcel::Cell::new (361,646 microseconds, 0.51%) XML::Parser::Expat::new_ns_prefixes (20,293 microseconds, 0.03%) XML::Twig::Elt::set_atts (1,522,665 microseconds, 2.15%) X.. XML::Twig::Elt::get_xpath (7,204 microseconds, 0.01%) XML::Parser::Expat::SetCharacterDataHandler (11,178 microseconds, 0.02%) XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] (11,194 microseconds, 0.02%) XML::Parser::Expat::SetEndCdataHandler (10,369 microseconds, 0.01%) XML::Twig::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] (139,255 microseconds, 0.20%) XML::Parser::Expat::SetStartCdataHandler (8,526 microseconds, 0.01%) XML::Parser::Expat::SetCharacterDataHandler (9,173 microseconds, 0.01%) Archive::Zip::BEGIN@11 (9,878 microseconds, 0.01%) XML::Twig::Elt::keep_atts_order (111,226 microseconds, 0.16%) XML::Twig::_replace_ns (22,104 microseconds, 0.03%) XML::Parser::Expat::SetElementDeclHandler (11,005 microseconds, 0.02%) XML::Parser::Expat::SetCommentHandler (11,352 microseconds, 0.02%) XML::Twig::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] (145,288 microseconds, 0.20%) XML::Twig::Elt::set_atts (159,360 microseconds, 0.22%) CORE::match (36,363 microseconds, 0.05%) CORE::match (80,415 microseconds, 0.11%) Spreadsheet::ParseXLSX::BEGIN@14 (21,997 microseconds, 0.03%) XML::Parser::Expat::SetStartElementHandler (8,529 microseconds, 0.01%) XML::Parser::Expat::SetAttListDeclHandler (10,531 microseconds, 0.01%) CORE::match (156,800 microseconds, 0.22%) XML::Parser::Expat::RecognizedString (29,889 microseconds, 0.04%) Spreadsheet::ParseXLSX::_xml_boolean (13,339 microseconds, 0.02%) Crypt::Mode::CBC::BEGIN@9 (9,636 microseconds, 0.01%) XML::Twig::_handler (408,735 microseconds, 0.58%) XML::Twig::_twig_end (25,376,456 microseconds, 35.80%) XML::Twig::_twig_end XML::Twig::Elt::children (1,573,884 microseconds, 2.22%) X.. main::BEGIN@5 (53,270 microseconds, 0.08%) XML::Twig::purge (568,255 microseconds, 0.80%) XML::Twig::Elt::keep_atts_order (16,944 microseconds, 0.02%) XML::Parser::Expat::SetEntityDeclHandler (10,840 microseconds, 0.02%) XML::Parser::Expat::SetXMLDeclHandler (8,873 microseconds, 0.01%) XML::Parser::Expat::parse (70,382,952 microseconds, 99.29%) XML::Parser::Expat::parse Archive::Zip::Member::_inflateChunk (12,066 microseconds, 0.02%) XML::Parser::Expat::SetExternalEntityRefHandler (10,338 microseconds, 0.01%) UNIVERSAL::isa (15,174 microseconds, 0.02%) Test::Builder::BEGIN@17 (11,198 microseconds, 0.02%) XML::Twig::_ns_info (1,866,209 microseconds, 2.63%) XM.. Compress::Raw::Zlib::inflateStream::inflate (11,988 microseconds, 0.02%) XML::Parser::Expat::ParseString (70,371,068 microseconds, 99.27%) XML::Parser::Expat::ParseString XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] (43,335 microseconds, 0.06%) XML::Twig::Elt::in (99,660 microseconds, 0.14%) XML::Twig::Elt::new (201,640 microseconds, 0.28%) XML::Twig::parse (7,192 microseconds, 0.01%) XML::Parser::Expat::namespace (152,738 microseconds, 0.22%) XML::Twig::parse (46,378 microseconds, 0.07%) XML::Parser::Expat::SetDefaultHandler (7,915 microseconds, 0.01%) Scalar::Util::weaken (36,821 microseconds, 0.05%) Scalar::Util::weaken (18,491 microseconds, 0.03%) Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] (12,871,711 microseconds, 18.16%) Spreadsheet::ParseXLSX::__AN.. Test::Builder::Module::BEGIN@5 (49,308 microseconds, 0.07%) XML::Parser::Expat::expand_ns_prefix (1,132,968 microseconds, 1.60%) Spreadsheet::ParseXLSX::BEGIN@15 (49,992 microseconds, 0.07%) XML::Twig::Elt::first_child (115,859 microseconds, 0.16%) XML::Twig::Elt::delete (313,604 microseconds, 0.44%) XML::Parser::Expat::RecognizedString (193,244 microseconds, 0.27%) XML::Parser::Expat::current_ns_prefixes (220,621 microseconds, 0.31%) XML::Twig::_a_proper_ns_prefix (1,036,287 microseconds, 1.46%) XML::Twig::_replace_ns (18,263,684 microseconds, 25.76%) XML::Twig::_replace_ns XML::Parser::Expat::SetProcessingInstructionHandler (8,567 microseconds, 0.01%) XML::Twig::_handler (1,053,350 microseconds, 1.49%) Archive::Zip::Archive::BEGIN@12 (6,083 microseconds, 0.01%) XML::Twig::_twig_char (1,914,165 microseconds, 2.70%) XM.. CryptX::BEGIN@13 (8,610 microseconds, 0.01%) JSON::BEGIN@1 (7,333 microseconds, 0.01%) XML::Twig::_add_or_discard_stored_spaces (309,119 microseconds, 0.44%) XML::Parser::Expat::current_ns_prefixes (1,288,414 microseconds, 1.82%) X.. XML::Twig::Elt::att (12,441 microseconds, 0.02%) XML::Twig::parse (70,383,743 microseconds, 99.29%) XML::Twig::parse XML::Twig::_twig_start (40,062 microseconds, 0.06%) XML::Parser::Expat::SetStartElementHandler (7,168 microseconds, 0.01%) XML::Twig::_replace_ns (1,302,034 microseconds, 1.84%) X.. XML::Parser::Expat::namespace (157,129 microseconds, 0.22%) Spreadsheet::ParseXLSX::_cell_to_row_col (133,308 microseconds, 0.19%) Spreadsheet::ParseXLSX::_cell_to_row_col (903,146 microseconds, 1.27%) Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] (960,204 microseconds, 1.35%) JSON::_load_pp (7,390 microseconds, 0.01%) main::BEGIN@7 (143,160 microseconds, 0.20%) Test2::API::BEGIN@51 (8,021 microseconds, 0.01%) Spreadsheet::ParseXLSX::BEGIN@17 (13,772 microseconds, 0.02%) XML::Twig::_replace_prefix (2,683,989 microseconds, 3.79%) XML:.. CORE::match (18,073 microseconds, 0.03%) XML::Parser::Expat::namespace (974,901 microseconds, 1.38%) CORE::match (91,517 microseconds, 0.13%) XML::Parser::Expat::new_ns_prefixes (198,448 microseconds, 0.28%) XML::Parser::Expat::setHandlers (1,701,538 microseconds, 2.40%) XM.. XML::Parser::Expat::recognized_string (126,072 microseconds, 0.18%) Spreadsheet::ParseXLSX::BEGIN@11 (50,151 microseconds, 0.07%) XML::Twig::Elt::cut (305,308 microseconds, 0.43%) XML::Parser::Expat::SetAttListDeclHandler (10,294 microseconds, 0.01%) Spreadsheet::ParseXLSX::parse (70,684,548 microseconds, 99.71%) Spreadsheet::ParseXLSX::parse XML::Parser::Expat::SetDoctypeHandler (7,231 microseconds, 0.01%) Spreadsheet::ParseXLSX::_parse_styles (10,124 microseconds, 0.01%) XML::Twig::Elt::delete (338,828 microseconds, 0.48%) XML::Parser::Expat::depth (179,730 microseconds, 0.25%) all (70,888,334 microseconds, 100%) XML::Twig::parser (15,159 microseconds, 0.02%) XML::Parser::Expat::SetNotationDeclHandler (10,466 microseconds, 0.01%) Scalar::Util::weaken (15,175 microseconds, 0.02%) Spreadsheet::ParseExcel::FmtDefault::TextFmt (128,046 microseconds, 0.18%) XML::Twig::_ns_info (10,193 microseconds, 0.01%) Archive::Zip::Member::readChunk (12,659 microseconds, 0.02%) XML::Parser::Expat::SetElementDeclHandler (8,372 microseconds, 0.01%) CORE::match (179,714 microseconds, 0.25%) XML::Twig::Elt::first_child (1,963,633 microseconds, 2.77%) XM.. Scalar::Util::weaken (31,590 microseconds, 0.04%) XML::Parser::Expat::namespace (447,874 microseconds, 0.63%) XML::Parser::Expat::setHandlers (1,660,888 microseconds, 2.34%) X.. XML::Parser::Expat::SetEntityDeclHandler (10,224 microseconds, 0.01%) Test::More::BEGIN@22 (50,075 microseconds, 0.07%) XML::Twig::parser (12,062 microseconds, 0.02%) XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] (413,261 microseconds, 0.58%) XML::Parser::Expat::SetXMLDeclHandler (17,897 microseconds, 0.03%) XML::Twig::parser (28,732 microseconds, 0.04%) XML::Parser::Expat::SetEndElementHandler (12,764 microseconds, 0.02%) XML::Twig::parser (24,815 microseconds, 0.04%) XML::Parser::Expat::SetProcessingInstructionHandler (9,238 microseconds, 0.01%) XML::Twig::Elt::next_sibling (957,892 microseconds, 1.35%) XML::Twig::Elt::cut (273,455 microseconds, 0.39%) CORE::match (27,816 microseconds, 0.04%) XML::Twig::_twig_start_check_roots (8,206,279 microseconds, 11.58%) XML::Twig::_twig_.. Spreadsheet::ParseXLSX::_zip_file_member (17,367 microseconds, 0.02%) XML::Parser::Expat::SetExternalEntityRefHandler (9,795 microseconds, 0.01%) XML::Twig::_a_proper_ns_prefix (6,864,136 microseconds, 9.68%) XML::Twig::_a_.. XML::Parser::Expat::ParseString (7,070 microseconds, 0.01%) XML::Parser::Expat::SetCommentHandler (9,110 microseconds, 0.01%) XML::Parser::Expat::parse (7,080 microseconds, 0.01%) JSON::__load_pp (7,360 microseconds, 0.01%) XML::Parser::Expat::SetEndElementHandler (9,472 microseconds, 0.01%) XML::Twig::_twig_start (2,812,714 microseconds, 3.97%) XML:.. XML::Parser::Expat::recognized_string (1,186,112 microseconds, 1.67%) Spreadsheet::ParseXLSX::_parse_shared_strings (11,159 microseconds, 0.02%) XML::Twig::_twig_start (32,305,297 microseconds, 45.57%) XML::Twig::_twig_start XML::Twig::_ns_info (764,010 microseconds, 1.08%) CORE::match (18,741 microseconds, 0.03%) XML::Twig::_add_or_discard_stored_spaces (249,565 microseconds, 0.35%) XML::Twig::Elt::in (103,266 microseconds, 0.15%) XML::Parser::Expat::parse (45,689 microseconds, 0.06%) XML::Parser::Expat::SetDefaultHandler (9,513 microseconds, 0.01%) XML::Twig::get_xpath (7,234 microseconds, 0.01%) XML::Twig::purge (603,812 microseconds, 0.85%) XML::Parser::parse (46,332 microseconds, 0.07%) CORE::match (179,432 microseconds, 0.25%) XML::Twig::Elt::new (1,614,932 microseconds, 2.28%) X.. XML::Parser::Expat::SetDoctypeHandler (10,604 microseconds, 0.01%) XML::Parser::parse (7,185 microseconds, 0.01%) XML::Twig::_add_or_discard_stored_spaces (39,643 microseconds, 0.06%) XML::Twig::parser (125,152 microseconds, 0.18%) XML::Twig::Elt::__ANON__[(eval 0)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] (6,447 microseconds, 0.01%) XML::Twig::Elt::text (145,093 microseconds, 0.20%) XML::Parser::Expat::SetStartCdataHandler (10,338 microseconds, 0.01%) CORE::select (28,941 microseconds, 0.04%) XML::Twig::parser (199,783 microseconds, 0.28%) XML::Parser::Expat::expand_ns_prefix (180,165 microseconds, 0.25%) XML::Twig::_ns_info (13,142,767 microseconds, 18.54%) XML::Twig::_ns_info Spreadsheet::ParseXLSX::_parse_xml (51,758 microseconds, 0.07%) XML::Parser::Expat::depth (41,675 microseconds, 0.06%) XML::Twig::Elt::att (265,322 microseconds, 0.37%) XML::Parser::Expat::new_ns_prefixes (24,130 microseconds, 0.03%) Crypt::Cipher::BEGIN@9 (9,430 microseconds, 0.01%) XML::Parser::Expat::ParseString (45,614 microseconds, 0.06%) XML::Twig::Elt::gi (64,518 microseconds, 0.09%) Spreadsheet::ParseExcel::FmtDefault::ValFmt (809,778 microseconds, 1.14%) Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 (9,842 microseconds, 0.01%) XML::Parser::parse (70,383,666 microseconds, 99.29%) XML::Parser::parse XML::Parser::Expat::SetEndCdataHandler (9,846 microseconds, 0.01%) UNIVERSAL::isa (11,528 microseconds, 0.02%) Scalar::Util::weaken (252,509 microseconds, 0.36%) Test::Builder::BEGIN@18 (27,478 microseconds, 0.04%) Archive::Zip::Member::contents (17,238 microseconds, 0.02%) XML::Twig::_insert_pcdata (1,004,736 microseconds, 1.42%) XML::Twig::_replace_ns (2,492,582 microseconds, 3.52%) XML.. Spreadsheet::ParseXLSX::_parse_workbook (70,683,530 microseconds, 99.71%) Spreadsheet::ParseXLSX::_parse_workbook Spreadsheet::ParseXLSX::_extract_files (72,174 microseconds, 0.10%) XML::Twig::Elt::text (677,703 microseconds, 0.96%) Spreadsheet-ParseXLSX-0.35/nytprof/(eval 43)[JSON-PP-pm-692]-151-line.html0000644000175000017500000003204314576335353023771 0ustar michamicha Profile of (eval 43)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 43)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Time-HiRes-pm-25-line.html0000644000175000017500000011017514576335353022526 0ustar michamicha Profile of Time/HiRes.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Time/HiRes.pm
StatementsExecuted 40 statements in 590µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
33324µs1.40msTime::HiRes::::importTime::HiRes::import
11112µs17µsTime::HiRes::::AUTOLOADTime::HiRes::AUTOLOAD
11112µs12µsTime::HiRes::::BEGIN@3Time::HiRes::BEGIN@3
1116µs11µsTime::HiRes::::BEGIN@70Time::HiRes::BEGIN@70
1114µs6µsTime::HiRes::::BEGIN@4Time::HiRes::BEGIN@4
1112µs2µsTime::HiRes::::constantTime::HiRes::constant (xsub)
1112µs2µsTime::HiRes::::BEGIN@7Time::HiRes::BEGIN@7
111800ns800nsTime::HiRes::::__ANON__[:71]Time::HiRes::__ANON__[:71]
0000s0sTime::HiRes::::tv_intervalTime::HiRes::tv_interval
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Time::HiRes;
2
3232µs112µs
# spent 12µs within Time::HiRes::BEGIN@3 which was called: # once (12µs+0s) by Test2::API::BEGIN@5 at line 3
{ use 5.006; }
# spent 12µs making 1 call to Time::HiRes::BEGIN@3
4324µs27µs
# spent 6µs (4+2) within Time::HiRes::BEGIN@4 which was called: # once (4µs+2µs) by Test2::API::BEGIN@5 at line 4
use strict;
# spent 6µs making 1 call to Time::HiRes::BEGIN@4 # spent 2µs making 1 call to strict::import
5
61400nsrequire Exporter;
72139µs12µs
# spent 2µs within Time::HiRes::BEGIN@7 which was called: # once (2µs+0s) by Test2::API::BEGIN@5 at line 7
use XSLoader ();
# spent 2µs making 1 call to Time::HiRes::BEGIN@7
8
916µsour @ISA = qw(Exporter);
10
111200nsour @EXPORT = qw( );
12# More or less this same list is in Makefile.PL. Should unify.
1313µsour @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval
14 getitimer setitimer nanosleep clock_gettime clock_getres
15 clock clock_nanosleep
16 CLOCKS_PER_SEC
17 CLOCK_BOOTTIME
18 CLOCK_HIGHRES
19 CLOCK_MONOTONIC
20 CLOCK_MONOTONIC_COARSE
21 CLOCK_MONOTONIC_FAST
22 CLOCK_MONOTONIC_PRECISE
23 CLOCK_MONOTONIC_RAW
24 CLOCK_PROCESS_CPUTIME_ID
25 CLOCK_PROF
26 CLOCK_REALTIME
27 CLOCK_REALTIME_COARSE
28 CLOCK_REALTIME_FAST
29 CLOCK_REALTIME_PRECISE
30 CLOCK_REALTIME_RAW
31 CLOCK_SECOND
32 CLOCK_SOFTTIME
33 CLOCK_THREAD_CPUTIME_ID
34 CLOCK_TIMEOFDAY
35 CLOCK_UPTIME
36 CLOCK_UPTIME_COARSE
37 CLOCK_UPTIME_FAST
38 CLOCK_UPTIME_PRECISE
39 CLOCK_UPTIME_RAW
40 CLOCK_VIRTUAL
41 ITIMER_PROF
42 ITIMER_REAL
43 ITIMER_REALPROF
44 ITIMER_VIRTUAL
45 TIMER_ABSTIME
46 d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
47 d_nanosleep d_clock_gettime d_clock_getres
48 d_clock d_clock_nanosleep d_hires_stat
49 d_futimens d_utimensat d_hires_utime
50 stat lstat utime
51 );
52
531200nsour $VERSION = '1.9775';
541100nsour $XS_VERSION = $VERSION;
55110µs$VERSION = eval $VERSION;
# spent 2µs executing statements in string eval
56
57our $AUTOLOAD;
58
# spent 17µs (12+5) within Time::HiRes::AUTOLOAD which was called: # once (12µs+5µs) by Time::HiRes::import at line 79
sub AUTOLOAD {
591200ns my $constname;
6016µs13µs ($constname = $AUTOLOAD) =~ s/.*:://;
# spent 3µs making 1 call to CORE::subst
61 # print "AUTOLOAD: constname = $constname ($AUTOLOAD)\n";
621600ns die "&Time::HiRes::constant not defined" if $constname eq 'constant';
6315µs12µs my ($error, $val) = constant($constname);
# spent 2µs making 1 call to Time::HiRes::constant
64 # print "AUTOLOAD: error = $error, val = $val\n";
651300ns if ($error) {
66 my (undef,$file,$line) = caller;
67 die "$error at $file line $line.\n";
68 }
69 {
703200µs215µs
# spent 11µs (6+5) within Time::HiRes::BEGIN@70 which was called: # once (6µs+5µs) by Test2::API::BEGIN@5 at line 70
no strict 'refs';
# spent 11µs making 1 call to Time::HiRes::BEGIN@70 # spent 5µs making 1 call to strict::unimport
7124µs
# spent 800ns within Time::HiRes::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Time/HiRes.pm:71] which was called: # once (800ns+0s) by Time::HiRes::import at line 73
*$AUTOLOAD = sub { $val };
72 }
7313µs1800ns goto &$AUTOLOAD;
# spent 800ns making 1 call to Time::HiRes::__ANON__[Time/HiRes.pm:71]
74}
75
76
# spent 1.40ms (24µs+1.38) within Time::HiRes::import which was called 3 times, avg 466µs/call: # once (8µs+1.27ms) by Test2::API::BEGIN@5 at line 5 of Test2/API.pm # once (11µs+64µs) by File::Copy::BEGIN@1 at line 1 of (eval 12)[File/Copy.pm:19] # once (5µs+36µs) by Test2::EventFacet::Trace::BEGIN@10 at line 10 of Test2/EventFacet/Trace.pm
sub import {
773900ns my $this = shift;
7832µs for my $i (@_) {
7947µs117µs if (($i eq 'clock_getres' && !&d_clock_getres) ||
# spent 17µs making 1 call to Time::HiRes::AUTOLOAD
80 ($i eq 'clock_gettime' && !&d_clock_gettime) ||
81 ($i eq 'clock_nanosleep' && !&d_clock_nanosleep) ||
82 ($i eq 'clock' && !&d_clock) ||
83 ($i eq 'nanosleep' && !&d_nanosleep) ||
84 ($i eq 'usleep' && !&d_usleep) ||
85 ($i eq 'utime' && !&d_hires_utime) ||
86 ($i eq 'ualarm' && !&d_ualarm)) {
87 require Carp;
88 Carp::croak("Time::HiRes::$i(): unimplemented in this platform");
89 }
90 }
9139µs31.20ms Time::HiRes->export_to_level(1, $this, @_);
# spent 1.20ms making 3 calls to Exporter::export_to_level, avg 399µs/call
92}
93
941131µs1126µsXSLoader::load( 'Time::HiRes', $XS_VERSION );
# spent 126µs making 1 call to XSLoader::load
95
96# Preloaded methods go here.
97
98sub tv_interval {
99 # probably could have been done in C
100 my ($a, $b) = @_;
101 $b = [gettimeofday()] unless defined($b);
102 (${$b}[0] - ${$a}[0]) + ((${$b}[1] - ${$a}[1]) / 1_000_000);
103}
104
105# Autoload methods go after =cut, and are processed by the autosplit program.
106
10717µs1;
108__END__
 
# spent 2µs within Time::HiRes::constant which was called: # once (2µs+0s) by Time::HiRes::AUTOLOAD at line 63
sub Time::HiRes::constant; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 107)[XML-Twig-pm-1750]-224-line.html0000644000175000017500000004756014576335353024423 0ustar michamicha Profile of (eval 107)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 107)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 6 statements in 221µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116µs15µsXML::Twig::::BEGIN@1.61XML::Twig::BEGIN@1.61
1115µs15µsXML::Twig::::BEGIN@1.51XML::Twig::BEGIN@1.51
0000s0sXML::Twig::::__ANON__[:26]XML::Twig::__ANON__[:26] (merge of 2 subs)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14216µs450µs
# spent 15µs (6+10) within XML::Twig::BEGIN@1.61 which was called: # once (6µs+10µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 15µs (5+10) within XML::Twig::BEGIN@1.51 which was called: # once (5µs+10µs) by XML::Twig::_parse_xpath_handler at line 1
sub { no warnings;
# spent 20µs making 2 calls to warnings::unimport, avg 10µs/call # spent 15µs making 1 call to XML::Twig::BEGIN@1.61 # spent 15µs making 1 call to XML::Twig::BEGIN@1.51
2my( $stack)= @_;
3my @current_elts= (scalar @$stack);
4my @new_current_elts;
5my $elt;
6
7foreach my $current_elt (@current_elts)
8 { next if( !$current_elt);
9 $current_elt--;
10 $elt= $stack->[$current_elt];
11 if( ($elt->{'##tag'} eq "s:tabColor")) { push @new_current_elts, $current_elt;}
12 }
13unless( @new_current_elts) { return 0; }
14@current_elts= @new_current_elts;
15@new_current_elts=();
16foreach my $current_elt (@current_elts)
17 { next if( !$current_elt);
18 $current_elt--;
19 $elt= $stack->[$current_elt];
20 if( ($elt->{'##tag'} eq "s:sheetPr")) { push @new_current_elts, $current_elt;}
21 }
22unless( @new_current_elts) { return 0; }
23@current_elts= @new_current_elts;
24@new_current_elts=();
25return q{s:sheetPr/s:tabColor};
2626µs }
27;










Spreadsheet-ParseXLSX-0.35/nytprof/Decryptor-pm-138-line.html0000644000175000017500000015276114576335353022667 0ustar michamicha Profile of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm
StatementsExecuted 23 statements in 974µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.36ms1.66msSpreadsheet::ParseXLSX::Decryptor::::BEGIN@12Spreadsheet::ParseXLSX::Decryptor::BEGIN@12
111410µs490µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@19Spreadsheet::ParseXLSX::Decryptor::BEGIN@19
111369µs453µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@18Spreadsheet::ParseXLSX::Decryptor::BEGIN@18
111215µs348µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@15Spreadsheet::ParseXLSX::Decryptor::BEGIN@15
111183µs228µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@11Spreadsheet::ParseXLSX::Decryptor::BEGIN@11
111178µs9.84msSpreadsheet::ParseXLSX::Decryptor::::BEGIN@10Spreadsheet::ParseXLSX::Decryptor::BEGIN@10
11113µs15µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@3Spreadsheet::ParseXLSX::Decryptor::BEGIN@3
1118µs18µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@16Spreadsheet::ParseXLSX::Decryptor::BEGIN@16
1114µs25µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@4Spreadsheet::ParseXLSX::Decryptor::BEGIN@4
1113µs3µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@13Spreadsheet::ParseXLSX::Decryptor::BEGIN@13
1111µs1µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@14Spreadsheet::ParseXLSX::Decryptor::BEGIN@14
0000s0sSpreadsheet::ParseXLSX::Decryptor::::_agileDecryptionSpreadsheet::ParseXLSX::Decryptor::_agileDecryption
0000s0sSpreadsheet::ParseXLSX::Decryptor::::_getCompoundDataSpreadsheet::ParseXLSX::Decryptor::_getCompoundData
0000s0sSpreadsheet::ParseXLSX::Decryptor::::_standardDecryptionSpreadsheet::ParseXLSX::Decryptor::_standardDecryption
0000s0sSpreadsheet::ParseXLSX::Decryptor::::newSpreadsheet::ParseXLSX::Decryptor::new
0000s0sSpreadsheet::ParseXLSX::Decryptor::::openSpreadsheet::ParseXLSX::Decryptor::open
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseXLSX::Decryptor;
2
3219µs217µs
# spent 15µs (13+2) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@3 which was called: # once (13µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 3
use strict;
# spent 15µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@3 # spent 2µs making 1 call to strict::import
4217µs246µs
# spent 25µs (4+21) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@4 which was called: # once (4µs+21µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 4
use warnings;
# spent 25µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@4 # spent 21µs making 1 call to warnings::import
5
6# VERSION
7
8# ABSTRACT: helper class to open password protected files
9
10264µs29.84ms
# spent 9.84ms (178µs+9.66) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 which was called: # once (178µs+9.66ms) by Spreadsheet::ParseXLSX::BEGIN@17 at line 10
use Crypt::Mode::CBC;
# spent 9.84ms making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@10 # spent 800ns making 1 call to UNIVERSAL::import
11267µs2228µs
# spent 228µs (183+44) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 which was called: # once (183µs+44µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 11
use Crypt::Mode::ECB;
# spent 228µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@11 # spent 900ns making 1 call to UNIVERSAL::import
12280µs11.66ms
# spent 1.66ms (1.36+297µs) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 which was called: # once (1.36ms+297µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 12
use Digest::SHA ();
# spent 1.66ms making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@12
13211µs13µs
# spent 3µs within Spreadsheet::ParseXLSX::Decryptor::BEGIN@13 which was called: # once (3µs+0s) by Spreadsheet::ParseXLSX::BEGIN@17 at line 13
use Encode ();
# spent 3µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@13
1428µs11µs
# spent 1µs within Spreadsheet::ParseXLSX::Decryptor::BEGIN@14 which was called: # once (1µs+0s) by Spreadsheet::ParseXLSX::BEGIN@17 at line 14
use File::Temp ();
# spent 1µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@14
15274µs1348µs
# spent 348µs (215+133) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@15 which was called: # once (215µs+133µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 15
use MIME::Base64 ();
# spent 348µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@15
16218µs229µs
# spent 18µs (8+11) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@16 which was called: # once (8µs+11µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 16
use OLE::Storage_Lite;
# spent 18µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@16 # spent 11µs making 1 call to Exporter::import
17
18264µs2454µs
# spent 453µs (369+84) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 which was called: # once (369µs+84µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 18
use Spreadsheet::ParseXLSX::Decryptor::Standard;
# spent 453µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@18 # spent 1µs making 1 call to UNIVERSAL::import
192549µs2492µs
# spent 490µs (410+81) within Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 which was called: # once (410µs+81µs) by Spreadsheet::ParseXLSX::BEGIN@17 at line 19
use Spreadsheet::ParseXLSX::Decryptor::Agile;
# spent 490µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 # spent 1µs making 1 call to UNIVERSAL::import
20
21sub open {
22 my $class = shift;
23
24 my ($filename, $password) = @_;
25
26 $password = $password || 'VelvetSweatshop';
27
28 my ($infoFH, $packageFH) = $class->_getCompoundData($filename, ['EncryptionInfo', 'EncryptedPackage']);
29
30 return unless $infoFH;
31
32 my $buffer;
33 $infoFH->read($buffer, 8);
34 my ($majorVers, $minorVers) = unpack('s<s<', $buffer);
35
36 my $xlsx;
37 if ($majorVers == 4 && $minorVers == 4) {
38 $xlsx = $class->_agileDecryption($infoFH, $packageFH, $password);
39 } else {
40 $xlsx = $class->_standardDecryption($infoFH, $packageFH, $password);
41 }
42
43 return $xlsx;
44}
45
46sub _getCompoundData {
47 my $class = shift;
48 my ($filename, $names) = @_;
49
50 my @files;
51
52 my $storage = OLE::Storage_Lite->new($filename);
53
54 foreach my $name (@{$names}) {
55 my @data = $storage->getPpsSearch([OLE::Storage_Lite::Asc2Ucs($name)], 1, 1);
56 if ($#data < 0) {
57 push @files, undef;
58 } else {
59 my $fh = File::Temp->new;
60 binmode($fh);
61 $fh->write($data[0]->{Data});
62 $fh->seek(0, 0);
63 push @files, $fh;
64 }
65 }
66
67 return @files;
68}
69
70sub _standardDecryption {
71 my $class = shift;
72 my ($infoFH, $packageFH, $password) = @_;
73
74 my $buffer;
75 my $n = $infoFH->read($buffer, 24);
76
77 my ($encryptionHeaderSize, undef, undef, $algID, $algIDHash, $keyBits) = unpack('L<*', $buffer);
78
79 $infoFH->seek($encryptionHeaderSize - 0x14, IO::File::SEEK_CUR);
80
81 $infoFH->read($buffer, 4);
82
83 my $saltSize = unpack('L<', $buffer);
84
85 my ($salt, $encryptedVerifier, $verifierHashSize, $encryptedVerifierHash);
86
87 $infoFH->read($salt, 16);
88 $infoFH->read($encryptedVerifier, 16);
89
90 $infoFH->read($buffer, 4);
91 $verifierHashSize = unpack('L<', $buffer);
92
93 $infoFH->read($encryptedVerifierHash, 32);
94 $infoFH->close();
95
96 my ($cipherAlgorithm, $hashAlgorithm);
97
98 if ($algID == 0x0000660E || $algID == 0x0000660F || $algID == 0x0000660E) {
99 $cipherAlgorithm = 'AES';
100 } else {
101 die sprintf('Unsupported encryption algorithm: 0x%.8x', $algID);
102 }
103
104 if ($algIDHash == 0x00008004) {
105 $hashAlgorithm = 'SHA-1';
106 } else {
107 die sprintf('Unsupported hash algorithm: 0x%.8x', $algIDHash);
108 }
109
110 my $decryptor = Spreadsheet::ParseXLSX::Decryptor::Standard->new({
111 cipherAlgorithm => $cipherAlgorithm,
112 cipherChaining => 'ECB',
113 hashAlgorithm => $hashAlgorithm,
114 salt => $salt,
115 password => $password,
116 keyBits => $keyBits,
117 spinCount => 50000
118 }
119 );
120
121 $decryptor->verifyPassword($encryptedVerifier, $encryptedVerifierHash);
122
123 my $fh = File::Temp->new;
124 binmode($fh);
125
126 my $inbuf;
127 $packageFH->read($inbuf, 8);
128 my $fileSize = unpack('L<', $inbuf);
129
130 $decryptor->decryptFile($packageFH, $fh, 1024, $fileSize);
131
132 $fh->seek(0, 0);
133
134 return $fh;
135}
136
137sub _agileDecryption {
138 my $class = shift;
139 my ($infoFH, $packageFH, $password) = @_;
140
141 my $xml = XML::Twig->new;
142 $xml->parse($infoFH);
143
144 my ($info) = $xml->find_nodes('//encryption/keyEncryptors/keyEncryptor/p:encryptedKey');
145
146 my $encryptedVerifierHashInput = MIME::Base64::decode($info->att('encryptedVerifierHashInput'));
147 my $encryptedVerifierHashValue = MIME::Base64::decode($info->att('encryptedVerifierHashValue'));
148 my $encryptedKeyValue = MIME::Base64::decode($info->att('encryptedKeyValue'));
149 my $hashSize = 0 + $info->att('hashSize');
150
151 my $keyDecryptor = Spreadsheet::ParseXLSX::Decryptor::Agile->new({
152 cipherAlgorithm => $info->att('cipherAlgorithm'),
153 cipherChaining => $info->att('cipherChaining'),
154 hashAlgorithm => $info->att('hashAlgorithm'),
155 salt => MIME::Base64::decode($info->att('saltValue')),
156 password => $password,
157 keyBits => 0 + $info->att('keyBits'),
158 spinCount => 0 + $info->att('spinCount'),
159 blockSize => 0 + $info->att('blockSize')
160 }
161 );
162
163 $keyDecryptor->verifyPassword($encryptedVerifierHashInput, $encryptedVerifierHashValue, $hashSize);
164
165 my $key = $keyDecryptor->decrypt($encryptedKeyValue, "\x14\x6e\x0b\xe7\xab\xac\xd0\xd6");
166
167 ($info) = $xml->find_nodes('//encryption/keyData');
168
169 my $fileDecryptor = Spreadsheet::ParseXLSX::Decryptor::Agile->new({
170 cipherAlgorithm => $info->att('cipherAlgorithm'),
171 cipherChaining => $info->att('cipherChaining'),
172 hashAlgorithm => $info->att('hashAlgorithm'),
173 salt => MIME::Base64::decode($info->att('saltValue')),
174 password => $password,
175 keyBits => 0 + $info->att('keyBits'),
176 blockSize => 0 + $info->att('blockSize')
177 }
178 );
179
180 my $fh = File::Temp->new;
181 binmode($fh);
182
183 my $inbuf;
184 $packageFH->read($inbuf, 8);
185 my $fileSize = unpack('L<', $inbuf);
186
187 $fileDecryptor->decryptFile($packageFH, $fh, 4096, $key, $fileSize);
188
189 $fh->seek(0, 0);
190
191 return $fh;
192}
193
194sub new {
195 my $class = shift;
196 my ($args) = @_;
197
198 my $self = {%$args};
199 $self->{keyLength} = $self->{keyBits} / 8;
200
201 if ($self->{hashAlgorithm} eq 'SHA512') {
202 $self->{hashProc} = \&Digest::SHA::sha512;
203 } elsif (($self->{hashAlgorithm} eq 'SHA-1') || ($self->{hashAlgorithm} eq 'SHA1')) {
204 $self->{hashProc} = \&Digest::SHA::sha1;
205 } elsif ($self->{hashAlgorithm} eq 'SHA256') {
206 $self->{hashProc} = \&Digest::SHA::sha256;
207 } else {
208 die "Unsupported hash algorithm: $self->{hashAlgorithm}";
209 }
210
211 return bless $self, $class;
212}
213
214=begin Pod::Coverage
215
216 new
217 open
218
219=end Pod::Coverage
220
221=cut
222
22312µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/File-Spec-Unix-pm-86-line.html0000644000175000017500000031613214576335353023320 0ustar michamicha Profile of File/Spec/Unix.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/File/Spec/Unix.pm
StatementsExecuted 24 statements in 1.31ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsFile::Spec::Unix::::BEGIN@3File::Spec::Unix::BEGIN@3
1116µs27µsFile::Spec::Unix::::BEGIN@124File::Spec::Unix::BEGIN@124
1116µs10µsFile::Spec::Unix::::BEGIN@167File::Spec::Unix::BEGIN@167
1115µs37µsFile::Spec::Unix::::BEGIN@231File::Spec::Unix::BEGIN@231
1115µs30µsFile::Spec::Unix::::BEGIN@115File::Spec::Unix::BEGIN@115
1114µs28µsFile::Spec::Unix::::BEGIN@209File::Spec::Unix::BEGIN@209
1113µs19µsFile::Spec::Unix::::BEGIN@133File::Spec::Unix::BEGIN@133
1112µs2µsFile::Spec::Unix::::BEGIN@4File::Spec::Unix::BEGIN@4
1111µs1µsFile::Spec::Unix::::curdirFile::Spec::Unix::curdir
0000s0sFile::Spec::Unix::::_cache_tmpdirFile::Spec::Unix::_cache_tmpdir
0000s0sFile::Spec::Unix::::_cached_tmpdirFile::Spec::Unix::_cached_tmpdir
0000s0sFile::Spec::Unix::::_collapseFile::Spec::Unix::_collapse
0000s0sFile::Spec::Unix::::_pp_canonpathFile::Spec::Unix::_pp_canonpath
0000s0sFile::Spec::Unix::::_pp_catdirFile::Spec::Unix::_pp_catdir
0000s0sFile::Spec::Unix::::_pp_catfileFile::Spec::Unix::_pp_catfile
0000s0sFile::Spec::Unix::::_sameFile::Spec::Unix::_same
0000s0sFile::Spec::Unix::::_tmpdirFile::Spec::Unix::_tmpdir
0000s0sFile::Spec::Unix::::abs2relFile::Spec::Unix::abs2rel
0000s0sFile::Spec::Unix::::case_tolerantFile::Spec::Unix::case_tolerant
0000s0sFile::Spec::Unix::::catpathFile::Spec::Unix::catpath
0000s0sFile::Spec::Unix::::devnullFile::Spec::Unix::devnull
0000s0sFile::Spec::Unix::::file_name_is_absoluteFile::Spec::Unix::file_name_is_absolute
0000s0sFile::Spec::Unix::::joinFile::Spec::Unix::join
0000s0sFile::Spec::Unix::::no_upwardsFile::Spec::Unix::no_upwards
0000s0sFile::Spec::Unix::::pathFile::Spec::Unix::path
0000s0sFile::Spec::Unix::::rel2absFile::Spec::Unix::rel2abs
0000s0sFile::Spec::Unix::::rootdirFile::Spec::Unix::rootdir
0000s0sFile::Spec::Unix::::splitdirFile::Spec::Unix::splitdir
0000s0sFile::Spec::Unix::::splitpathFile::Spec::Unix::splitpath
0000s0sFile::Spec::Unix::::tmpdirFile::Spec::Unix::tmpdir
0000s0sFile::Spec::Unix::::updirFile::Spec::Unix::updir
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Spec::Unix;
2
3221µs212µs
# spent 11µs (9+1) within File::Spec::Unix::BEGIN@3 which was called: # once (9µs+1µs) by Archive::Zip::BEGIN@10 at line 3
use strict;
# spent 11µs making 1 call to File::Spec::Unix::BEGIN@3 # spent 1µs making 1 call to strict::import
42257µs12µs
# spent 2µs within File::Spec::Unix::BEGIN@4 which was called: # once (2µs+0s) by Archive::Zip::BEGIN@10 at line 4
use Cwd ();
# spent 2µs making 1 call to File::Spec::Unix::BEGIN@4
5
61300nsour $VERSION = '3.88';
71700ns$VERSION =~ tr/_//d;
8
9=head1 NAME
10
11File::Spec::Unix - File::Spec for Unix, base for other File::Spec modules
12
13=head1 SYNOPSIS
14
15 require File::Spec::Unix; # Done automatically by File::Spec
16
17=head1 DESCRIPTION
18
19Methods for manipulating file specifications. Other File::Spec
20modules, such as File::Spec::Mac, inherit from File::Spec::Unix and
21override specific methods.
22
23=head1 METHODS
24
25=over 2
26
27=item canonpath()
28
29No physical check on the filesystem, but a logical cleanup of a
30path. On UNIX eliminates successive slashes and successive "/.".
31
32 $cpath = File::Spec->canonpath( $path ) ;
33
34Note that this does *not* collapse F<x/../y> sections into F<y>. This
35is by design. If F</foo> on your system is a symlink to F</bar/baz>,
36then F</foo/../quux> is actually F</bar/quux>, not F</quux> as a naive
37F<../>-removal would give you. If you want to do this kind of
38processing, you probably want C<Cwd>'s C<realpath()> function to
39actually traverse the filesystem cleaning up paths like this.
40
41=cut
42
43sub _pp_canonpath {
44 my ($self,$path) = @_;
45 return unless defined $path;
46
47 # Handle POSIX-style node names beginning with double slash (qnx, nto)
48 # (POSIX says: "a pathname that begins with two successive slashes
49 # may be interpreted in an implementation-defined manner, although
50 # more than two leading slashes shall be treated as a single slash.")
51 my $node = '';
52 my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto';
53
54
55 if ( $double_slashes_special
56 && ( $path =~ s{^(//[^/]+)/?\z}{}s || $path =~ s{^(//[^/]+)/}{/}s ) ) {
57 $node = $1;
58 }
59 # This used to be
60 # $path =~ s|/+|/|g unless ($^O eq 'cygwin');
61 # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail
62 # (Mainly because trailing "" directories didn't get stripped).
63 # Why would cygwin avoid collapsing multiple slashes into one? --jhi
64 $path =~ s|/{2,}|/|g; # xx////xx -> xx/xx
65 $path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx
66 $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx
67 $path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx
68 $path =~ s|^/\.\.$|/|; # /.. -> /
69 $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx
70 return "$node$path";
71}
721300ns*canonpath = \&_pp_canonpath unless defined &canonpath;
73
74=item catdir()
75
76Concatenate two or more directory names to form a complete path ending
77with a directory. But remove the trailing slash from the resulting
78string, because it doesn't look good, isn't necessary and confuses
79OS2. Of course, if this is the root directory, don't cut off the
80trailing slash :-)
81
82=cut
83
84sub _pp_catdir {
85 my $self = shift;
86
87 $self->canonpath(join('/', @_, '')); # '' because need a trailing '/'
88}
891100ns*catdir = \&_pp_catdir unless defined &catdir;
90
91=item catfile
92
93Concatenate one or more directory names and a filename to form a
94complete path ending with a filename
95
96=cut
97
98sub _pp_catfile {
99 my $self = shift;
100 my $file = $self->canonpath(pop @_);
101 return $file unless @_;
102 my $dir = $self->catdir(@_);
103 $dir .= "/" unless substr($dir,-1) eq "/";
104 return $dir.$file;
105}
1061100ns*catfile = \&_pp_catfile unless defined &catfile;
107
108=item curdir
109
110Returns a string representation of the current directory. "." on UNIX.
111
112=cut
113
11412µs
# spent 1µs within File::Spec::Unix::curdir which was called: # once (1µs+0s) by Archive::Zip::Archive::BEGIN@7 at line 778 of File/Find.pm
sub curdir { '.' }
115236µs254µs
# spent 30µs (5+25) within File::Spec::Unix::BEGIN@115 which was called: # once (5µs+25µs) by Archive::Zip::BEGIN@10 at line 115
use constant _fn_curdir => ".";
# spent 30µs making 1 call to File::Spec::Unix::BEGIN@115 # spent 25µs making 1 call to constant::import
116
117=item devnull
118
119Returns a string representation of the null device. "/dev/null" on UNIX.
120
121=cut
122
123sub devnull { '/dev/null' }
124224µs248µs
# spent 27µs (6+21) within File::Spec::Unix::BEGIN@124 which was called: # once (6µs+21µs) by Archive::Zip::BEGIN@10 at line 124
use constant _fn_devnull => "/dev/null";
# spent 27µs making 1 call to File::Spec::Unix::BEGIN@124 # spent 21µs making 1 call to constant::import
125
126=item rootdir
127
128Returns a string representation of the root directory. "/" on UNIX.
129
130=cut
131
132sub rootdir { '/' }
1332105µs236µs
# spent 19µs (3+16) within File::Spec::Unix::BEGIN@133 which was called: # once (3µs+16µs) by Archive::Zip::BEGIN@10 at line 133
use constant _fn_rootdir => "/";
# spent 19µs making 1 call to File::Spec::Unix::BEGIN@133 # spent 16µs making 1 call to constant::import
134
135=item tmpdir
136
137Returns a string representation of the first writable directory from
138the following list or the current directory if none from the list are
139writable:
140
141 $ENV{TMPDIR}
142 /tmp
143
144If running under taint mode, and if $ENV{TMPDIR}
145is tainted, it is not used.
146
147=cut
148
1491100nsmy ($tmpdir, %tmpenv);
150# Cache and return the calculated tmpdir, recording which env vars
151# determined it.
152sub _cache_tmpdir {
153 @tmpenv{@_[2..$#_]} = @ENV{@_[2..$#_]};
154 return $tmpdir = $_[1];
155}
156# Retrieve the cached tmpdir, checking first whether relevant env vars have
157# changed and invalidated the cache.
158sub _cached_tmpdir {
159 shift;
160 local $^W;
161 return if grep $ENV{$_} ne $tmpenv{$_}, @_;
162 return $tmpdir;
163}
164sub _tmpdir {
165 my $self = shift;
166 my @dirlist = @_;
1672196µs214µs
# spent 10µs (6+4) within File::Spec::Unix::BEGIN@167 which was called: # once (6µs+4µs) by Archive::Zip::BEGIN@10 at line 167
my $taint = do { no strict 'refs'; ${"\cTAINT"} };
# spent 10µs making 1 call to File::Spec::Unix::BEGIN@167 # spent 4µs making 1 call to strict::unimport
168 if ($taint) { # Check for taint mode on perl >= 5.8.0
169 require Scalar::Util;
170 @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist;
171 }
172 elsif ($] < 5.007) { # No ${^TAINT} before 5.8
173 @dirlist = grep { !defined($_) || eval { eval('1'.substr $_,0,0) } }
174 @dirlist;
175 }
176
177 foreach (@dirlist) {
178 next unless defined && -d && -w _;
179 $tmpdir = $_;
180 last;
181 }
182 $tmpdir = $self->curdir unless defined $tmpdir;
183 $tmpdir = defined $tmpdir && $self->canonpath($tmpdir);
184 if ( !$self->file_name_is_absolute($tmpdir) ) {
185 # See [perl #120593] for the full details
186 # If possible, return a full path, rather than '.' or 'lib', but
187 # jump through some hoops to avoid returning a tainted value.
188 ($tmpdir) = grep {
189 $taint ? ! Scalar::Util::tainted($_) :
190 $] < 5.007 ? eval { eval('1'.substr $_,0,0) } : 1
191 } $self->rel2abs($tmpdir), $tmpdir;
192 }
193 return $tmpdir;
194}
195
196sub tmpdir {
197 my $cached = $_[0]->_cached_tmpdir('TMPDIR');
198 return $cached if defined $cached;
199 $_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" ), 'TMPDIR');
200}
201
202=item updir
203
204Returns a string representation of the parent directory. ".." on UNIX.
205
206=cut
207
208sub updir { '..' }
209262µs252µs
# spent 28µs (4+24) within File::Spec::Unix::BEGIN@209 which was called: # once (4µs+24µs) by Archive::Zip::BEGIN@10 at line 209
use constant _fn_updir => "..";
# spent 28µs making 1 call to File::Spec::Unix::BEGIN@209 # spent 24µs making 1 call to constant::import
210
211=item no_upwards
212
213Given a list of file names, strip out those that refer to a parent
214directory. (Does not strip symlinks, only '.', '..', and equivalents.)
215
216=cut
217
218sub no_upwards {
219 my $self = shift;
220 return grep(!/^\.{1,2}\z/s, @_);
221}
222
223=item case_tolerant
224
225Returns a true or false value indicating, respectively, that alphabetic
226is not or is significant when comparing file specifications.
227
228=cut
229
230sub case_tolerant { 0 }
2312603µs270µs
# spent 37µs (5+32) within File::Spec::Unix::BEGIN@231 which was called: # once (5µs+32µs) by Archive::Zip::BEGIN@10 at line 231
use constant _fn_case_tolerant => 0;
# spent 37µs making 1 call to File::Spec::Unix::BEGIN@231 # spent 32µs making 1 call to constant::import
232
233=item file_name_is_absolute
234
235Takes as argument a path and returns true if it is an absolute path.
236
237This does not consult the local filesystem on Unix, Win32, OS/2 or Mac
238OS (Classic). It does consult the working environment for VMS (see
239L<File::Spec::VMS/file_name_is_absolute>).
240
241=cut
242
243sub file_name_is_absolute {
244 my ($self,$file) = @_;
245 return scalar($file =~ m:^/:s);
246}
247
248=item path
249
250Takes no argument, returns the environment variable PATH as an array.
251
252=cut
253
254sub path {
255 return () unless exists $ENV{PATH};
256 my @path = split(':', $ENV{PATH});
257 foreach (@path) { $_ = '.' if $_ eq '' }
258 return @path;
259}
260
261=item join
262
263join is the same as catfile.
264
265=cut
266
267sub join {
268 my $self = shift;
269 return $self->catfile(@_);
270}
271
272=item splitpath
273
274 ($volume,$directories,$file) = File::Spec->splitpath( $path );
275 ($volume,$directories,$file) = File::Spec->splitpath( $path,
276 $no_file );
277
278Splits a path into volume, directory, and filename portions. On systems
279with no concept of volume, returns '' for volume.
280
281For systems with no syntax differentiating filenames from directories,
282assumes that the last file is a path unless $no_file is true or a
283trailing separator or /. or /.. is present. On Unix this means that $no_file
284true makes this return ( '', $path, '' ).
285
286The directory portion may or may not be returned with a trailing '/'.
287
288The results can be passed to L</catpath()> to get back a path equivalent to
289(usually identical to) the original path.
290
291=cut
292
293sub splitpath {
294 my ($self,$path, $nofile) = @_;
295
296 my ($volume,$directory,$file) = ('','','');
297
298 if ( $nofile ) {
299 $directory = $path;
300 }
301 else {
302 $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs;
303 $directory = $1;
304 $file = $2;
305 }
306
307 return ($volume,$directory,$file);
308}
309
310
311=item splitdir
312
313The opposite of L</catdir()>.
314
315 @dirs = File::Spec->splitdir( $directories );
316
317$directories must be only the directory portion of the path on systems
318that have the concept of a volume or that have path syntax that differentiates
319files from directories.
320
321Unlike just splitting the directories on the separator, empty
322directory names (C<''>) can be returned, because these are significant
323on some OSs.
324
325On Unix,
326
327 File::Spec->splitdir( "/a/b//c/" );
328
329Yields:
330
331 ( '', 'a', 'b', '', 'c', '' )
332
333=cut
334
335sub splitdir {
336 return split m|/|, $_[1], -1; # Preserve trailing fields
337}
338
339
340=item catpath()
341
342Takes volume, directory and file portions and returns an entire path. Under
343Unix, $volume is ignored, and directory and file are concatenated. A '/' is
344inserted if needed (though if the directory portion doesn't start with
345'/' it is not added). On other OSs, $volume is significant.
346
347=cut
348
349sub catpath {
350 my ($self,$volume,$directory,$file) = @_;
351
352 if ( $directory ne '' &&
353 $file ne '' &&
354 substr( $directory, -1 ) ne '/' &&
355 substr( $file, 0, 1 ) ne '/'
356 ) {
357 $directory .= "/$file" ;
358 }
359 else {
360 $directory .= $file ;
361 }
362
363 return $directory ;
364}
365
366=item abs2rel
367
368Takes a destination path and an optional base path returns a relative path
369from the base path to the destination path:
370
371 $rel_path = File::Spec->abs2rel( $path ) ;
372 $rel_path = File::Spec->abs2rel( $path, $base ) ;
373
374If $base is not present or '', then L<cwd()|Cwd> is used. If $base is
375relative, then it is converted to absolute form using
376L</rel2abs()>. This means that it is taken to be relative to
377L<cwd()|Cwd>.
378
379On systems that have a grammar that indicates filenames, this ignores the
380$base filename. Otherwise all path components are assumed to be
381directories.
382
383If $path is relative, it is converted to absolute form using L</rel2abs()>.
384This means that it is taken to be relative to L<cwd()|Cwd>.
385
386No checks against the filesystem are made, so the result may not be correct if
387C<$base> contains symbolic links. (Apply
388L<Cwd::abs_path()|Cwd/abs_path> beforehand if that
389is a concern.) On VMS, there is interaction with the working environment, as
390logicals and macros are expanded.
391
392Based on code written by Shigio Yamaguchi.
393
394=cut
395
396sub abs2rel {
397 my($self,$path,$base) = @_;
398 $base = Cwd::getcwd() unless defined $base and length $base;
399
400 ($path, $base) = map $self->canonpath($_), $path, $base;
401
402 my $path_directories;
403 my $base_directories;
404
405 if (grep $self->file_name_is_absolute($_), $path, $base) {
406 ($path, $base) = map $self->rel2abs($_), $path, $base;
407
408 my ($path_volume) = $self->splitpath($path, 1);
409 my ($base_volume) = $self->splitpath($base, 1);
410
411 # Can't relativize across volumes
412 return $path unless $path_volume eq $base_volume;
413
414 $path_directories = ($self->splitpath($path, 1))[1];
415 $base_directories = ($self->splitpath($base, 1))[1];
416
417 # For UNC paths, the user might give a volume like //foo/bar that
418 # strictly speaking has no directory portion. Treat it as if it
419 # had the root directory for that volume.
420 if (!length($base_directories) and $self->file_name_is_absolute($base)) {
421 $base_directories = $self->rootdir;
422 }
423 }
424 else {
425 my $wd= ($self->splitpath(Cwd::getcwd(), 1))[1];
426 $path_directories = $self->catdir($wd, $path);
427 $base_directories = $self->catdir($wd, $base);
428 }
429
430 # Now, remove all leading components that are the same
431 my @pathchunks = $self->splitdir( $path_directories );
432 my @basechunks = $self->splitdir( $base_directories );
433
434 if ($base_directories eq $self->rootdir) {
435 return $self->curdir if $path_directories eq $self->rootdir;
436 shift @pathchunks;
437 return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') );
438 }
439
440 my @common;
441 while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) {
442 push @common, shift @pathchunks ;
443 shift @basechunks ;
444 }
445 return $self->curdir unless @pathchunks || @basechunks;
446
447 # @basechunks now contains the directories the resulting relative path
448 # must ascend out of before it can descend to $path_directory. If there
449 # are updir components, we must descend into the corresponding directories
450 # (this only works if they are no symlinks).
451 my @reverse_base;
452 while( defined(my $dir= shift @basechunks) ) {
453 if( $dir ne $self->updir ) {
454 unshift @reverse_base, $self->updir;
455 push @common, $dir;
456 }
457 elsif( @common ) {
458 if( @reverse_base && $reverse_base[0] eq $self->updir ) {
459 shift @reverse_base;
460 pop @common;
461 }
462 else {
463 unshift @reverse_base, pop @common;
464 }
465 }
466 }
467 my $result_dirs = $self->catdir( @reverse_base, @pathchunks );
468 return $self->canonpath( $self->catpath('', $result_dirs, '') );
469}
470
471sub _same {
472 $_[1] eq $_[2];
473}
474
475=item rel2abs()
476
477Converts a relative path to an absolute path.
478
479 $abs_path = File::Spec->rel2abs( $path ) ;
480 $abs_path = File::Spec->rel2abs( $path, $base ) ;
481
482If $base is not present or '', then L<cwd()|Cwd> is used. If $base is
483relative, then it is converted to absolute form using
484L</rel2abs()>. This means that it is taken to be relative to
485L<cwd()|Cwd>.
486
487On systems that have a grammar that indicates filenames, this ignores
488the $base filename. Otherwise all path components are assumed to be
489directories.
490
491If $path is absolute, it is cleaned up and returned using L</canonpath()>.
492
493No checks against the filesystem are made. On VMS, there is
494interaction with the working environment, as logicals and
495macros are expanded.
496
497Based on code written by Shigio Yamaguchi.
498
499=cut
500
501sub rel2abs {
502 my ($self,$path,$base ) = @_;
503
504 # Clean up $path
505 if ( ! $self->file_name_is_absolute( $path ) ) {
506 # Figure out the effective $base and clean it up.
507 if ( !defined( $base ) || $base eq '' ) {
508 $base = Cwd::getcwd();
509 }
510 elsif ( ! $self->file_name_is_absolute( $base ) ) {
511 $base = $self->rel2abs( $base ) ;
512 }
513 else {
514 $base = $self->canonpath( $base ) ;
515 }
516
517 # Glom them together
518 $path = $self->catdir( $base, $path ) ;
519 }
520
521 return $self->canonpath( $path ) ;
522}
523
524=back
525
526=head1 COPYRIGHT
527
528Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
529
530This program is free software; you can redistribute it and/or modify
531it under the same terms as Perl itself.
532
533Please submit bug reports at L<https://github.com/Perl/perl5/issues>.
534
535=head1 SEE ALSO
536
537L<File::Spec>
538
539=cut
540
541# Internal method to reduce xx\..\yy -> yy
542sub _collapse {
543 my($fs, $path) = @_;
544
545 my $updir = $fs->updir;
546 my $curdir = $fs->curdir;
547
548 my($vol, $dirs, $file) = $fs->splitpath($path);
549 my @dirs = $fs->splitdir($dirs);
550 pop @dirs if @dirs && $dirs[-1] eq '';
551
552 my @collapsed;
553 foreach my $dir (@dirs) {
554 if( $dir eq $updir and # if we have an updir
555 @collapsed and # and something to collapse
556 length $collapsed[-1] and # and its not the rootdir
557 $collapsed[-1] ne $updir and # nor another updir
558 $collapsed[-1] ne $curdir # nor the curdir
559 )
560 { # then
561 pop @collapsed; # collapse
562 }
563 else { # else
564 push @collapsed, $dir; # just hang onto it
565 }
566 }
567
568 return $fs->catpath($vol,
569 $fs->catdir(@collapsed),
570 $file
571 );
572}
573
574
57514µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 101)[XML-Twig-pm-5871]-218-line.html0000644000175000017500000004074114576335353024422 0ustar michamicha Profile of (eval 101)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 101)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 8 statements in 40µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
51110µs12µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs15µsXML::Twig::Elt::::BEGIN@1.45XML::Twig::Elt::BEGIN@1.45
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1840µs727µs
# spent 15µs (6+10) within XML::Twig::Elt::BEGIN@1.45 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 12µs (10+2) within XML::Twig::Elt::__ANON__[(eval 101)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 5 times, avg 2µs/call: # 5 times (10µs+2µs) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 2µs/call
sub { no warnings; ; return ( $_[0]->gi eq "s:protection") ? $_[0] : undef; }
# spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.45 # spent 10µs making 1 call to warnings::unimport # spent 2µs making 5 calls to XML::Twig::Elt::gi, avg 440ns/call
2;










Spreadsheet-ParseXLSX-0.35/nytprof/style.css0000644000175000017500000000646414576335353020026 0ustar michamicha/* Stylesheet for Devel::NYTProf::Reader HTML reports */ /* You may modify this file to alter the appearance of your coverage * reports. If you do, you should probably flag it read-only to prevent * future runs from overwriting it. */ /* Note: default values use the color-safe web palette. */ a { color: blue; } a:visited { color: #6d00E6; } a:hover { color: red; } body { font-family: sans-serif; margin: 0px; background-color: white; color:#222; } .body_content { margin: 8px; } .header { font-family: sans-serif; padding-left: 0.5em; padding-right: 0.5em; } .headerForeground { color: white; padding: 10px; padding-top: 50px; } .siteTitle { font-size: 2em; } .siteSubTitle { font-size: 1.2em; } .header_back { position: absolute; padding: 10px; } .header_back > a:link, .header_back > a:visited { color: white; text-decoration: none; font-size: 0.75em; } .jump_to_file { margin-top: 20px; } .footer, .footer > a:link, .footer > a:visited { color: #cccccc; } .footer { margin: 30px; } table { border-collapse: collapse; border-spacing: 0px; margin-top: 20px; } tr { text-align : center; vertical-align: top; } th,.h { background-color: #dddddd; border: solid 1px #666666; padding: 0em 0.4em 0em 0.4em; font-size:0.8em; } td { border: solid 1px #cccccc; padding: 0em 0.4em 0em 0.4em; } caption { background-color: #dddddd; text-align: left; white-space: pre; padding: 0.4em; } .table_footer { color: gray; } .table_footer > a:link, .table_footer > a:visited { color: gray; } .table_footer > a:hover { color: red; } .index { text-align: left; } .mode_btn_selected { font-style: italic; } /* subroutine dispatch table */ .sub_name { text-align: left; font-family: monospace; white-space: pre; color: gray; } /* source code */ th.left_indent_header { padding-left: 15px; text-align: left; } pre,.s { text-align: left; font-family: monospace; white-space: pre; } /* plain number */ .n { text-align: right } /* Classes for color-coding profiling information: * c0 : code not hit * c1 : coverage >= 75% * c2 : coverage >= 90% * c3 : path covered or coverage = 100% */ .c0, .c1, .c2, .c3 { text-align: right; } .c0 { background-color: #ffb3b3; } /* red */ .c1 { background-color: #ffd9b4; } /* orange */ .c2 { background-color: #ffffB4; } /* yellow */ .c3 { background-color: #B4ffB4; } /* green */ /* warnings */ .warn { background-color: #FFFFAA; border: 0; width: 96%; text-align: center; padding: 5px 0; } .warn_title { background-color: #FFFFAA; border: 0; color: red; width: 96%; font-size: 2em; text-align: center; padding: 5px 0; } /* summary of calls into and out of a sub */ .calls { display: block; color: gray; padding-top: 5px; padding-bottom: 5px; text-decoration: none; } .calls:hover { background-color: #e8e8e8; color: black; } .calls a { color: gray; text-decoration: none; } .calls:hover a { color: black; text-decoration: underline; } .calls:hover a:hover { color: red; } /* give a little headroom to the summary of calls into a sub */ .calls .calls_in { margin-top: 5px; } .vis_header { text-align:center; font-style: italic; padding-top: 5px; color: gray; } .flamegraph { margin: 20px 0px; } Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Waiting-pm-58-line.html0000644000175000017500000005263714576335353024316 0ustar michamicha Profile of Test2/Event/Waiting.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Waiting.pm
StatementsExecuted 10 statements in 145µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs12µsTest2::Event::Waiting::::BEGIN@2Test2::Event::Waiting::BEGIN@2
1117µs7µsTest2::Event::Waiting::::BEGIN@8Test2::Event::Waiting::BEGIN@8
1113µs20µsTest2::Event::Waiting::::BEGIN@3Test2::Event::Waiting::BEGIN@3
1113µs24µsTest2::Event::Waiting::::BEGIN@9Test2::Event::Waiting::BEGIN@9
0000s0sTest2::Event::Waiting::::facet_dataTest2::Event::Waiting::facet_data
0000s0sTest2::Event::Waiting::::globalTest2::Event::Waiting::global
0000s0sTest2::Event::Waiting::::summaryTest2::Event::Waiting::summary
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Waiting;
2218µs213µs
# spent 12µs (10+2) within Test2::Event::Waiting::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@98 at line 2
use strict;
# spent 12µs making 1 call to Test2::Event::Waiting::BEGIN@2 # spent 2µs making 1 call to strict::import
3234µs236µs
# spent 20µs (3+17) within Test2::Event::Waiting::BEGIN@3 which was called: # once (3µs+17µs) by Test2::API::BEGIN@98 at line 3
use warnings;
# spent 20µs making 1 call to Test2::Event::Waiting::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8219µs17µs
# spent 7µs within Test2::Event::Waiting::BEGIN@8 which was called: # once (7µs+0s) by Test2::API::BEGIN@98 at line 8
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 7µs making 1 call to Test2::Event::Waiting::BEGIN@8
9272µs246µs
# spent 24µs (3+21) within Test2::Event::Waiting::BEGIN@9 which was called: # once (3µs+21µs) by Test2::API::BEGIN@98 at line 9
use Test2::Util::HashBase;
# spent 24µs making 1 call to Test2::Event::Waiting::BEGIN@9 # spent 21µs making 1 call to Test2::Util::HashBase::import
10
11sub global { 1 };
12
13sub summary { "IPC is waiting for children to finish..." }
14
15sub facet_data {
16 my $self = shift;
17
18 my $out = $self->common_facet_data;
19
20 push @{$out->{info}} => {
21 tag => 'INFO',
22 debug => 0,
23 details => $self->summary,
24 };
25
26 return $out;
27}
28
2912µs1;
30
31__END__










Spreadsheet-ParseXLSX-0.35/nytprof/index-subs-excl.html0000644000175000017500000222275414576335353022060 0ustar michamicha Subroutine Index - NYTProf
Performance Profile Subroutine Index
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
364369329.97s35.2sXML::Twig::::_twig_start XML::Twig::_twig_start
1095679216.34s15.8sXML::Twig::::_ns_info XML::Twig::_ns_info
398167215.90s22.1sXML::Twig::::_replace_ns XML::Twig::_replace_ns
364369225.66s25.4sXML::Twig::::_twig_end XML::Twig::_twig_end
15608115.52s12.9sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]
380001215.08s7.90sXML::Twig::::_a_proper_ns_prefix XML::Twig::_a_proper_ns_prefix
67598523.07s3.36sXML::Parser::Expat::::setHandlers XML::Parser::Expat::setHandlers
7112.57s70.4sXML::Parser::Expat::::ParseString XML::Parser::Expat::ParseString (xsub)
364369112.12s2.69sXML::Twig::::_replace_prefix XML::Twig::_replace_prefix
1460048211.73s1.73sXML::Parser::Expat::::namespace XML::Parser::Expat::namespace
364369111.71s1.82sXML::Twig::Elt::::new XML::Twig::Elt::new
4215601421.66s2.08sXML::Twig::Elt::::first_child XML::Twig::Elt::first_child
364369111.56s1.69sXML::Twig::Elt::::set_atts XML::Twig::Elt::set_atts
380001111.51s1.51sXML::Parser::Expat::::current_ns_prefixes XML::Parser::Expat::current_ns_prefixes
1520689211.31s1.31sXML::Parser::Expat::::expand_ns_prefix XML::Parser::Expat::expand_ns_prefix
397806211.18s1.46sXML::Twig::::_handler XML::Twig::_handler
364369111.09s1.31sXML::Parser::Expat::::recognized_string XML::Parser::Expat::recognized_string
12729211968ms1.00sXML::Twig::::_insert_pcdata XML::Twig::_insert_pcdata
20298611915ms958msXML::Twig::Elt::::next_sibling XML::Twig::Elt::next_sibling
23927061861ms1.04sSpreadsheet::ParseXLSX::::_cell_to_row_col Spreadsheet::ParseXLSX::_cell_to_row_col
12729211829ms1.91sXML::Twig::::_twig_char XML::Twig::_twig_char
13179705428790ms790msCORE::::match CORE::match (xsub)
3379911720ms8.21sXML::Twig::::_twig_start_check_roots XML::Twig::_twig_start_check_roots
20290711682ms810msSpreadsheet::ParseExcel::FmtDefault::::ValFmt Spreadsheet::ParseExcel::FmtDefault::ValFmt
25458232678ms678msXML::Twig::Elt::::text XML::Twig::Elt::text (recurses: max depth 1, inclusive time 145ms)
72873821599ms599msXML::Twig::::_add_or_discard_stored_spaces XML::Twig::_add_or_discard_stored_spaces
3381311545ms579msXML::Twig::Elt::::cut XML::Twig::Elt::cut
185824341524ms524msXML::Twig::::parser XML::Twig::parser
1565187500ms1.57sXML::Twig::Elt::::children XML::Twig::Elt::children
20290711362ms362msSpreadsheet::ParseExcel::Cell::::new Spreadsheet::ParseExcel::Cell::new
1738074153355ms355msScalar::Util::::weaken Scalar::Util::weaken (xsub)
3380771317ms1.17sXML::Twig::::purge XML::Twig::purge
12727611299ms364msXML::Twig::Elt::::__ANON__[(eval 128)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 128)[XML/Twig.pm:5871]:1]
674081451278ms278msXML::Twig::Elt::::att XML::Twig::Elt::att
39816711243ms243msXML::Parser::Expat::::new_ns_prefixes XML::Parser::Expat::new_ns_prefixes
36436911223ms223msXML::Parser::Expat::::RecognizedString XML::Parser::Expat::RecognizedString (xsub)
43158151221ms221msXML::Parser::Expat::::depth XML::Parser::Expat::depth
1818011218ms960msSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]
111198ms70.6sSpreadsheet::ParseXLSX::::_parse_sheet Spreadsheet::ParseXLSX::_parse_sheet
6776831177ms203msXML::Twig::Elt::::in XML::Twig::Elt::in
3121611149ms149msXML::Twig::::__ANON__[(eval 114)[XML/Twig.pm:1750]:26] XML::Twig::__ANON__[(eval 114)[XML/Twig.pm:1750]:26] (merge of 2 subs)
3636011136ms136msXML::Twig::::__ANON__[(eval 109)[XML/Twig.pm:1750]:26] XML::Twig::__ANON__[(eval 109)[XML/Twig.pm:1750]:26] (merge of 2 subs)
36436911128ms128msXML::Twig::Elt::::keep_atts_order XML::Twig::Elt::keep_atts_order
12727611128ms128msSpreadsheet::ParseExcel::FmtDefault::::TextFmt Spreadsheet::ParseExcel::FmtDefault::TextFmt
338132174.1ms653msXML::Twig::Elt::::delete XML::Twig::Elt::delete
12748710964.6ms64.6msXML::Twig::Elt::::gi XML::Twig::Elt::gi
2029072154.5ms54.5msXML::Twig::Elt::::__ANON__[(eval 126)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 126)[XML/Twig.pm:5871]:1]
1272761149.6ms49.6msXML::Twig::Elt::::__ANON__[(eval 127)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 127)[XML/Twig.pm:5871]:1]
11144.8ms50.0msSpreadsheet::ParseXLSX::::BEGIN@15 Spreadsheet::ParseXLSX::BEGIN@15
338267329.0ms29.0msCORE::::select CORE::select (xsub)
6785313426.8ms26.8msUNIVERSAL::::isa UNIVERSAL::isa (xsub)
675911126.8ms26.8msXML::Parser::Expat::::SetXMLDeclHandler XML::Parser::Expat::SetXMLDeclHandler (xsub)
675911122.2ms22.2msXML::Parser::Expat::::SetEndElementHandler XML::Parser::Expat::SetEndElementHandler (xsub)
675911121.1ms21.1msXML::Parser::Expat::::SetEntityDeclHandler XML::Parser::Expat::SetEntityDeclHandler (xsub)
675911120.8ms20.8msXML::Parser::Expat::::SetAttListDeclHandler XML::Parser::Expat::SetAttListDeclHandler (xsub)
675911120.5ms20.5msXML::Parser::Expat::::SetCommentHandler XML::Parser::Expat::SetCommentHandler (xsub)
675911120.4ms20.4msXML::Parser::Expat::::SetCharacterDataHandler XML::Parser::Expat::SetCharacterDataHandler (xsub)
675911120.2ms20.2msXML::Parser::Expat::::SetEndCdataHandler XML::Parser::Expat::SetEndCdataHandler (xsub)
675911120.1ms20.1msXML::Parser::Expat::::SetExternalEntityRefHandler XML::Parser::Expat::SetExternalEntityRefHandler (xsub)
675911119.4ms19.4msXML::Parser::Expat::::SetElementDeclHandler XML::Parser::Expat::SetElementDeclHandler (xsub)
675911118.9ms18.9msXML::Parser::Expat::::SetStartCdataHandler XML::Parser::Expat::SetStartCdataHandler (xsub)
675911117.8ms17.8msXML::Parser::Expat::::SetDoctypeHandler XML::Parser::Expat::SetDoctypeHandler (xsub)
675911117.8ms17.8msXML::Parser::Expat::::SetProcessingInstructionHandler XML::Parser::Expat::SetProcessingInstructionHandler (xsub)
675981117.4ms17.4msXML::Parser::Expat::::SetDefaultHandler XML::Parser::Expat::SetDefaultHandler (xsub)
675911115.7ms15.7msXML::Parser::Expat::::SetStartElementHandler XML::Parser::Expat::SetStartElementHandler (xsub)
11113.5ms50.2msSpreadsheet::ParseXLSX::::BEGIN@11 Spreadsheet::ParseXLSX::BEGIN@11
157307113.4ms13.4msSpreadsheet::ParseXLSX::::_xml_boolean Spreadsheet::ParseXLSX::_xml_boolean
71112.1ms12.1msCompress::Raw::Zlib::inflateStream::::inflate Compress::Raw::Zlib::inflateStream::inflate (xsub)
71112.0ms70.4sXML::Parser::Expat::::parse XML::Parser::Expat::parse
337981110.5ms10.5msXML::Parser::Expat::::SetNotationDeclHandler XML::Parser::Expat::SetNotationDeclHandler (xsub)
1116.82ms22.0msSpreadsheet::ParseXLSX::::BEGIN@14 Spreadsheet::ParseXLSX::BEGIN@14
37216.09ms7.38msXML::Twig::Elt::::_install_cond XML::Twig::Elt::_install_cond
1115.89ms49.3msTest::Builder::Module::::BEGIN@5 Test::Builder::Module::BEGIN@5
5972275.47ms5.47msCORE::::regcomp CORE::regcomp (xsub)
1115.39ms27.5msTest::Builder::::BEGIN@18 Test::Builder::BEGIN@18
1115.24ms7.33msJSON::::BEGIN@1 JSON::BEGIN@1
1114.37ms9.88msArchive::Zip::::BEGIN@11 Archive::Zip::BEGIN@11
1114.23ms5.79msSpreadsheet::ParseExcel::::BEGIN@21 Spreadsheet::ParseExcel::BEGIN@21
7114.16ms19.1msArchive::Zip::Member::::contents Archive::Zip::Member::contents
125124633.48ms4.71msExporter::::import Exporter::import
1113.44ms143msmain::::BEGIN@7 main::BEGIN@7
1113.26ms3.33msSpreadsheet::ParseExcel::FmtDefault::::BEGIN@22 Spreadsheet::ParseExcel::FmtDefault::BEGIN@22
21113.22ms5.96msXML::Twig::::_parse_xpath_handler XML::Twig::_parse_xpath_handler
1113.00ms3.51msSpreadsheet::ParseXLSX::::BEGIN@12 Spreadsheet::ParseXLSX::BEGIN@12
1112.93ms53.3msmain::::BEGIN@5 main::BEGIN@5
1112.89ms3.53msTie::Hash::::BEGIN@190 Tie::Hash::BEGIN@190
1515152.72ms2.72msXSLoader::::load XSLoader::load
1112.68ms2.75msArchive::Zip::Archive::::BEGIN@7 Archive::Zip::Archive::BEGIN@7
1112.52ms7.23msTest2::Util::::BEGIN@7 Test2::Util::BEGIN@7
1112.19ms2.51msXML::Parser::::BEGIN@17 XML::Parser::BEGIN@17
3131312.14ms2.22msTest2::Util::HashBase::::import Test2::Util::HashBase::import
173173132.13ms2.66msconstant::::import constant::import
1112.13ms2.30msArchive::Zip::::BEGIN@6 Archive::Zip::BEGIN@6
1112.04ms3.83msArchive::Zip::::BEGIN@9 Archive::Zip::BEGIN@9
1112.01ms3.17msFile::Temp::::BEGIN@149 File::Temp::BEGIN@149
1112.00ms2.03msmain::::BEGIN@4 main::BEGIN@4
1111.99ms8.02msTest2::API::::BEGIN@51 Test2::API::BEGIN@51
15111.98ms3.48msXML::Twig::Elt::::_install_xpath XML::Twig::Elt::_install_xpath
1111.89ms2.81msTest2::API::Stack::::BEGIN@8 Test2::API::Stack::BEGIN@8
1111.78ms2.16msTest::Builder::Formatter::::BEGIN@7 Test::Builder::Formatter::BEGIN@7
7111.59ms2.49msXML::Twig::::_use XML::Twig::_use
1111.57ms1.87msEncode::::BEGIN@56 Encode::BEGIN@56
1111.53ms1.66msConfig::::AUTOLOAD Config::AUTOLOAD
1111.50ms6.08msArchive::Zip::Archive::::BEGIN@12 Archive::Zip::Archive::BEGIN@12
1111.46ms1.64msArchive::Zip::::BEGIN@10 Archive::Zip::BEGIN@10
1111.43ms1.92msIO::Seekable::::BEGIN@100 IO::Seekable::BEGIN@100
1111.39ms1.74msDigest::Perl::MD5::::gen_code Digest::Perl::MD5::gen_code
1111.36ms1.66msSpreadsheet::ParseXLSX::Decryptor::::BEGIN@12 Spreadsheet::ParseXLSX::Decryptor::BEGIN@12
1111.33ms11.2msTest::Builder::::BEGIN@17 Test::Builder::BEGIN@17
1111.23ms4.67msTest2::Event::Ok::::BEGIN@8 Test2::Event::Ok::BEGIN@8
17411.20ms1.27msExporter::::as_heavy Exporter::as_heavy
1111.20ms1.51msEncode::::BEGIN@53 Encode::BEGIN@53
267543141.18ms1.18msCORE::::subst CORE::subst (xsub)
1111.17ms1.48msTest::Builder::::BEGIN@15 Test::Builder::BEGIN@15
1111.11ms1.40msArchive::Zip::Archive::::BEGIN@9 Archive::Zip::Archive::BEGIN@9
1111.11ms8.61msCryptX::::BEGIN@13 CryptX::BEGIN@13
1111.01ms3.56msXML::Twig::::BEGIN@151 XML::Twig::BEGIN@151
111981µs981µsJSON::PP::::BEGIN@68 JSON::PP::BEGIN@68
111960µs2.77msSpreadsheet::ParseExcel::::BEGIN@27 Spreadsheet::ParseExcel::BEGIN@27
1211959µs1.08msExporter::Heavy::::heavy_export Exporter::Heavy::heavy_export
22321948µs948µswarnings::::_expand_bits warnings::_expand_bits
111946µs1.03msFile::Path::::BEGIN@7 File::Path::BEGIN@7
111940µs1.00msTest2::Util::Facets2Legacy::::BEGIN@10 Test2::Util::Facets2Legacy::BEGIN@10
12810376929µs1.50mswarnings::::unimport warnings::unimport
111850µs965µsCompress::Raw::Zlib::::BEGIN@113 Compress::Raw::Zlib::BEGIN@113
111838µs942µsArchive::Zip::Member::::BEGIN@27 Archive::Zip::Member::BEGIN@27
111818µs884µsSpreadsheet::ParseExcel::::BEGIN@32 Spreadsheet::ParseExcel::BEGIN@32
111796µs890µsFile::Temp::::BEGIN@168 File::Temp::BEGIN@168
111792µs1.26msTest2::EventFacet::::BEGIN@7 Test2::EventFacet::BEGIN@7
111728µs800µsURI::::BEGIN@41 URI::BEGIN@41
111688µs13.8msSpreadsheet::ParseXLSX::::BEGIN@17 Spreadsheet::ParseXLSX::BEGIN@17
949492688µs1.53mswarnings::::import warnings::import
111671µs70.7sSpreadsheet::ParseXLSX::::_parse_workbook Spreadsheet::ParseXLSX::_parse_workbook
111648µs10.1msSpreadsheet::ParseXLSX::::_parse_styles Spreadsheet::ParseXLSX::_parse_styles
1611618µs870µsXML::Twig::Elt::::descendants XML::Twig::Elt::descendants
5911617µs617µsCORE::::read CORE::read (xsub)
711616µs616µsXML::Parser::Expat::::ParserFree XML::Parser::Expat::ParserFree (xsub)
111595µs1.71msTest2::Event::V2::::BEGIN@12 Test2::Event::V2::BEGIN@12
111587µs682µsIO::File::::BEGIN@122 IO::File::BEGIN@122
111546µs735µsFile::Temp::::BEGIN@152 File::Temp::BEGIN@152
111541µs2.30msTest2::API::Instance::::BEGIN@13 Test2::API::Instance::BEGIN@13
15421527µs649µsXML::Twig::Elt::::ancestors XML::Twig::Elt::ancestors
7711479µs1.42msXML::Twig::Elt::::cmp XML::Twig::Elt::cmp
111475µs631µsTest2::API::::BEGIN@100 Test2::API::BEGIN@100
111456µs1.89msTest2::API::::BEGIN@5 Test2::API::BEGIN@5
111448µs506µsTest2::EventFacet::Meta::::BEGIN@8 Test2::EventFacet::Meta::BEGIN@8
111439µs3.80msSpreadsheet::ParseExcel::::BEGIN@36 Spreadsheet::ParseExcel::BEGIN@36
111439µs495µsTest2::Util::::BEGIN@8 Test2::Util::BEGIN@8
9511434µs809µswarnings::::_bits warnings::_bits
111429µs660µsTest2::API::::BEGIN@89 Test2::API::BEGIN@89
553426µs514µsparent::::import parent::import
111419µs535µsTest2::API::::BEGIN@95 Test2::API::BEGIN@95
111410µs3.66msArchive::Zip::::BEGIN@7 Archive::Zip::BEGIN@7
111410µs490µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@19 Spreadsheet::ParseXLSX::Decryptor::BEGIN@19
111403µs5.20msTest2::API::::BEGIN@92 Test2::API::BEGIN@92
111400µs3.31msTest2::API::Instance::::BEGIN@14 Test2::API::Instance::BEGIN@14
128021398µs398µsArchive::Zip::Member::::_revbe Archive::Zip::Member::_revbe
111397µs586µsTest2::API::::BEGIN@88 Test2::API::BEGIN@88
711392µs12.0msXML::Twig::::new XML::Twig::new
111383µs434µsSpreadsheet::ParseExcel::::BEGIN@31 Spreadsheet::ParseExcel::BEGIN@31
2121382µs8.48msXML::Twig::::_set_handler XML::Twig::_set_handler
111369µs453µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@18 Spreadsheet::ParseXLSX::Decryptor::BEGIN@18
111364µs463µsTest2::Hub::::BEGIN@14 Test2::Hub::BEGIN@14
111363µs458µsArchive::Zip::::BEGIN@12 Archive::Zip::BEGIN@12
111362µs362µsPOSIX::::load_imports POSIX::load_imports
242416357µs440µsvars::::import vars::import
111349µs404µsSpreadsheet::ParseExcel::::BEGIN@26 Spreadsheet::ParseExcel::BEGIN@26
111343µs2.62msTest::Builder::::BEGIN@36 Test::Builder::BEGIN@36
111331µs371µsCarp::::BEGIN@169 Carp::BEGIN@169
111317µs350µsEncode::::BEGIN@54 Encode::BEGIN@54
111314µs364µsSpreadsheet::ParseExcel::::BEGIN@35 Spreadsheet::ParseExcel::BEGIN@35
111307µs480µsXML::Twig::::BEGIN@1125 XML::Twig::BEGIN@1125
711295µs450µsCompress::Raw::Zlib::Parameters::::parse Compress::Raw::Zlib::Parameters::parse
711292µs70.4sXML::Parser::::parse XML::Parser::parse
111283µs662µsPOSIX::::BEGIN@11 POSIX::BEGIN@11
111274µs450µsTest2::Event::::BEGIN@21 Test2::Event::BEGIN@21
111265µs835µsTest2::Event::::BEGIN@20 Test2::Event::BEGIN@20
111261µs50.1msTest::More::::BEGIN@22 Test::More::BEGIN@22
11711242µs242µsXML::Twig::Elt::::set_gi XML::Twig::Elt::set_gi
69443240µs240µsCORE::::substcont CORE::substcont (xsub)
111236µs2.24msIO::File::::BEGIN@124 IO::File::BEGIN@124
111235µs9.43msCrypt::Cipher::::BEGIN@9 Crypt::Cipher::BEGIN@9
111235µs235µsGraphics::ColorUtils::::BEGIN@492 Graphics::ColorUtils::BEGIN@492
136136128234µs234µsstrict::::import strict::import
111230µs333µsTest2::API::::BEGIN@97 Test2::API::BEGIN@97
565629229µs229µsstrict::::unimport strict::unimport
111225µs340µsTest2::Event::::BEGIN@22 Test2::Event::BEGIN@22
111224µs306µsTest2::API::::BEGIN@99 Test2::API::BEGIN@99
111222µs408µsIO::Handle::::BEGIN@276 IO::Handle::BEGIN@276
811221µs400µsTest2::API::::context Test2::API::context
111215µs348µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@15 Spreadsheet::ParseXLSX::Decryptor::BEGIN@15
111208µs355µsTest2::Util::HashBase::::BEGIN@33 Test2::Util::HashBase::BEGIN@33
111206µs296µsTest2::API::::BEGIN@96 Test2::API::BEGIN@96
711203µs303µsArchive::Zip::Archive::::membersMatching Archive::Zip::Archive::membersMatching
111202µs284µsTest2::API::::BEGIN@93 Test2::API::BEGIN@93
111200µs281µsTest2::API::::BEGIN@94 Test2::API::BEGIN@94
111195µs202µsTest2::Util::::BEGIN@11 Test2::Util::BEGIN@11
45821190µs5.29msXML::Twig::Elt::::passes XML::Twig::Elt::passes
111188µs228µsCompress::Raw::Zlib::::BEGIN@10 Compress::Raw::Zlib::BEGIN@10
111187µs1.51msTest2::EventFacet::Trace::::BEGIN@7 Test2::EventFacet::Trace::BEGIN@7
111183µs228µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@11 Spreadsheet::ParseXLSX::Decryptor::BEGIN@11
111181µs181µsGraphics::ColorUtils::::BEGIN@242 Graphics::ColorUtils::BEGIN@242
111178µs9.84msSpreadsheet::ParseXLSX::Decryptor::::BEGIN@10 Spreadsheet::ParseXLSX::Decryptor::BEGIN@10
111176µs239µsTest2::API::::BEGIN@98 Test2::API::BEGIN@98
111174µs241µsSpreadsheet::ParseXLSX::::BEGIN@18 Spreadsheet::ParseXLSX::BEGIN@18
111171µs200µsTest2::Formatter::TAP::::BEGIN@17 Test2::Formatter::TAP::BEGIN@17
111167µs210µsFile::Temp::::BEGIN@167 File::Temp::BEGIN@167
1322165µs165µsCORE::::open CORE::open (xsub)
111164µs202µsTest::Builder::::BEGIN@37 Test::Builder::BEGIN@37
111161µs210µsIO::File::::BEGIN@123 IO::File::BEGIN@123
111158µs220µsJSON::PP::::BEGIN@12 JSON::PP::BEGIN@12
111155µs9.64msCrypt::Mode::CBC::::BEGIN@9 Crypt::Mode::CBC::BEGIN@9
1431141µs141µsXML::Parser::::setHandlers XML::Parser::setHandlers
111141µs169µsXML::Twig::::BEGIN@25 XML::Twig::BEGIN@25
111140µs252µsTest2::Event::::BEGIN@17 Test2::Event::BEGIN@17
111138µs274µsTest2::Event::::BEGIN@24 Test2::Event::BEGIN@24
111137µs224µsTest2::Event::::BEGIN@18 Test2::Event::BEGIN@18
711136µs912µsArchive::Zip::Member::::rewindData Archive::Zip::Member::rewindData
111136µs252µsXML::Twig::Elt::::next_elt XML::Twig::Elt::next_elt
111134µs228µsTest2::Event::::BEGIN@14 Test2::Event::BEGIN@14
111132µs230µsTest2::Event::::BEGIN@19 Test2::Event::BEGIN@19
111128µs206µsTest2::Event::::BEGIN@15 Test2::Event::BEGIN@15
7021127µs145µsCompress::Raw::Zlib::Parameters::::_checkType Compress::Raw::Zlib::Parameters::_checkType
632125µs584µsXML::Twig::::DESTROY XML::Twig::DESTROY
111124µs208µsTest2::Event::::BEGIN@16 Test2::Event::BEGIN@16
111121µs141µsTie::Hash::::BEGIN@191 Tie::Hash::BEGIN@191
711120µs722µsCompress::Raw::Zlib::Inflate::::new Compress::Raw::Zlib::Inflate::new
75111118µs554µsArchive::Zip::FileMember::::fh Archive::Zip::FileMember::fh
2711117µs120µsXML::Twig::::_tag_cond XML::Twig::_tag_cond
111117µs119µsArchive::Zip::Member::::BEGIN@1517 Archive::Zip::Member::BEGIN@1517
111117µs145µsSpreadsheet::ParseExcel::::BEGIN@34 Spreadsheet::ParseExcel::BEGIN@34
444116µs164µsbase::::import base::import
111115µs797µsArchive::Zip::Archive::::readFromFileHandle Archive::Zip::Archive::readFromFileHandle
111115µs246µsEncode::Alias::::init_aliases Encode::Alias::init_aliases
111115µs115µsErrno::::BEGIN@21 Errno::BEGIN@21
2831114µs147µsSpreadsheet::ParseXLSX::::_color Spreadsheet::ParseXLSX::_color
3711112µs153µsXML::Twig::Elt::::_gi_test XML::Twig::Elt::_gi_test
111110µs145µsTest2::API::::BEGIN@86 Test2::API::BEGIN@86
1511105µs280µsSpreadsheet::ParseXLSX::::_get_text_and_rich_font_by_cell Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell
111105µs134µsSpreadsheet::ParseExcel::::BEGIN@33 Spreadsheet::ParseExcel::BEGIN@33
48481102µs102µsEncode::Alias::::define_alias Encode::Alias::define_alias
111100µs109µsJSON::PP::::BEGIN@688 JSON::PP::BEGIN@688
101198µs178µsArchive::Zip::ZipFileMember::::_readCentralDirectoryFileHeader Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader
11195µs124µsTest2::Hub::Interceptor::::BEGIN@8 Test2::Hub::Interceptor::BEGIN@8
211194µs6.12msXML::Twig::::_set_xpath_handler XML::Twig::_set_xpath_handler
71191µs1.85msArchive::Zip::ZipFileMember::::rewindData Archive::Zip::ZipFileMember::rewindData
1032191µs120µsXML::Twig::Elt::::__ANON__[(eval 86)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 86)[XML/Twig.pm:5871]:1]
11190µs72.2msSpreadsheet::ParseXLSX::::_extract_files Spreadsheet::ParseXLSX::_extract_files
71190µs13.0msArchive::Zip::Member::::readChunk Archive::Zip::Member::readChunk
175641087µs87µsCORE::::qr CORE::qr (xsub)
161186µs12.3msXML::Twig::Elt::::get_xpath XML::Twig::Elt::get_xpath
314285µs158µsArchive::Zip::FileMember::::endRead Archive::Zip::FileMember::endRead
111185µs210µsArchive::Zip::Member::::new Archive::Zip::Member::new
16151584µs6.13msXML::Twig::::descendants XML::Twig::descendants
71182µs82µsXML::Parser::::new XML::Parser::new
183382µs1.50msCORE::::sort CORE::sort (xsub)
1616182µs12.4msXML::Twig::::get_xpath XML::Twig::get_xpath
11181µs81µsSpreadsheet::ParseXLSX::::BEGIN@11.2 Spreadsheet::ParseXLSX::BEGIN@11.2
71179µs126µsXML::Parser::Expat::::new XML::Parser::Expat::new
11179µs240µsXML::Twig::::BEGIN@148 XML::Twig::BEGIN@148
71178µs12.3msArchive::Zip::Member::::_inflateChunk Archive::Zip::Member::_inflateChunk
11178µs111µsFile::Copy::::BEGIN@14 File::Copy::BEGIN@14
22175µs75µsCORE::::print CORE::print (xsub)
6710673µs73µsUNIVERSAL::::can UNIVERSAL::can (xsub)
71172µs162µsArchive::Zip::ZipFileMember::::_skipLocalFileHeader Archive::Zip::ZipFileMember::_skipLocalFileHeader
193272µs152µsArchive::Zip::::_readSignature Archive::Zip::_readSignature
211172µs72µsXML::Twig::::_add_handler XML::Twig::_add_handler
5910472µs688µsIO::Handle::::read IO::Handle::read
314271µs75µsArchive::Zip::Member::::desiredCompressionMethod Archive::Zip::Member::desiredCompressionMethod
61170µs70µsoverload::::OVERLOAD overload::OVERLOAD
151168µs715µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655]
281166µs66µsXML::Parser::Expat::::NamespaceStart XML::Parser::Expat::NamespaceStart
71165µs88µsXML::Twig::::_twig_final XML::Twig::_twig_final
92264µs274µsIO::File::::open IO::File::open
71163µs63µsXML::Twig::::_normalize_args XML::Twig::_normalize_args
71161µs193µsArchive::Zip::ZipFileMember::::_seekToLocalHeader Archive::Zip::ZipFileMember::_seekToLocalHeader
11161µs4.78msXML::Twig::::setTwigRoots XML::Twig::setTwigRoots
1212861µs61µsUNIVERSAL::::VERSION UNIVERSAL::VERSION (xsub)
753160µs60µsXML::Twig::::_join_n XML::Twig::_join_n
16151560µs1.56msXML::Twig::::_unique_elts XML::Twig::_unique_elts
44260µs129µsTest2::Util::::clone_io Test2::Util::clone_io
1813158µs58µsInternals::::SvREADONLY Internals::SvREADONLY (xsub)
1013257µs57µsArchive::Zip::Member::::fileName Archive::Zip::Member::fileName
1010756µs226µsTest2::Util::HashBase::::_new Test2::Util::HashBase::_new (recurses: max depth 1, inclusive time 4µs)
91154µs83µsIO::Handle::::_open_mode_string IO::Handle::_open_mode_string
73153µs19.6msSpreadsheet::ParseXLSX::::_zip_file_member Spreadsheet::ParseXLSX::_zip_file_member
11151µs57µsExporter::Heavy::::_rebuild_cache Exporter::Heavy::_rebuild_cache
11151µs70.7sSpreadsheet::ParseXLSX::::parse Spreadsheet::ParseXLSX::parse
111151µs122µsArchive::Zip::Member::::unixFileAttributes Archive::Zip::Member::unixFileAttributes
71150µs80µsXML::Twig::::_twig_end_check_roots XML::Twig::_twig_end_check_roots
638149µs49µsCompress::Raw::Zlib::Parameters::::value Compress::Raw::Zlib::Parameters::value
73148µs70.4sXML::Twig::::parse XML::Twig::parse
211148µs92µsXML::Twig::::_set_pi_handler XML::Twig::_set_pi_handler
211148µs88µsXML::Twig::::_set_special_handler XML::Twig::_set_special_handler
311147µs72µsArchive::Zip::Member::::endRead Archive::Zip::Member::endRead
71147µs510µsCompress::Raw::Zlib::::ParseParameters Compress::Raw::Zlib::ParseParameters
11147µs430µsTest::Builder::::reset Test::Builder::reset
71147µs47µsXML::Parser::Expat::::ParserCreate XML::Parser::Expat::ParserCreate (xsub)
1731146µs46µsmro::::method_changed_in mro::method_changed_in (xsub)
281146µs46µsCORE::::seek CORE::seek (xsub)
31145µs257µsTest2::Hub::::process Test2::Hub::process
11145µs353µsTest::Builder::::done_testing Test::Builder::done_testing
151144µs44µsSpreadsheet::ParseExcel::Format::::new Spreadsheet::ParseExcel::Format::new
73244µs58µsCompress::Raw::Zlib::::AUTOLOAD Compress::Raw::Zlib::AUTOLOAD
11143µs43µsCarp::::BEGIN@95 Carp::BEGIN@95
33342µs332µsTest2::Hub::::send Test2::Hub::send
151141µs41µsXML::Twig::::__ANON__[(eval 102)[XML/Twig.pm:1750]:17] XML::Twig::__ANON__[(eval 102)[XML/Twig.pm:1750]:17]
82241µs343µsArchive::Zip::::_newFileHandle Archive::Zip::_newFileHandle
281141µs41µsXML::Parser::Expat::::NamespaceEnd XML::Parser::Expat::NamespaceEnd
11140µs256µsTest::Builder::::ok Test::Builder::ok
161140µs40µsXML::Twig::Elt::::root XML::Twig::Elt::root
71140µs40µsCompress::Raw::Zlib::::_inflateInit Compress::Raw::Zlib::_inflateInit (xsub)
51139µs61µswarnings::::register_categories warnings::register_categories
11138µs65µsJSON::::__load_xs JSON::__load_xs
4942538µs38µsTest2::Util::HashBase::::__ANON__[Test2/Util/HashBase.pm:84] Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:84]
16151538µs78µsXML::Twig::Elt::::twig XML::Twig::Elt::twig
111137µs247µsArchive::Zip::ZipFileMember::::_newFromZipFile Archive::Zip::ZipFileMember::_newFromZipFile
71137µs409µsArchive::Zip::FileMember::::_openFile Archive::Zip::FileMember::_openFile
31136µs485µsTest2::API::Instance::::load Test2::API::Instance::load
92235µs133µsIO::File::::new IO::File::new
311134µs34µsmro::::get_linear_isa mro::get_linear_isa (xsub)
86234µs34µsTest2::API::Context::::release Test2::API::Context::release
2810233µs79µsIO::Seekable::::seek IO::Seekable::seek
11133µs40µsErrno::::BEGIN@11 Errno::BEGIN@11
11133µs113µsTest2::API::Instance::::set_exit Test2::API::Instance::set_exit
71133µs44µsXML::Twig::::_twig_init XML::Twig::_twig_init
11133µs49µsXML::Twig::Elt::::BEGIN@5096 XML::Twig::Elt::BEGIN@5096
71132µs32µsXML::Twig::::_twig_xmldecl XML::Twig::_twig_xmldecl
558232µs32µsCompress::Raw::Zlib::::__ANON__[Compress/Raw/Zlib.pm:122] Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122]
91132µs32µsSymbol::::gensym Symbol::gensym
11132µs186µsTest2::Hub::::finalize Test2::Hub::finalize
211131µs36µsXML::Twig::::_set_level_handler XML::Twig::_set_level_handler
33331µs188µsTest2::API::::test2_set_is_end Test2::API::test2_set_is_end
111131µs41µsArchive::Zip::Member::::_mapPermissionsToUnix Archive::Zip::Member::_mapPermissionsToUnix
55531µs31µsConfig::::import Config::import
3232631µs31µsCORE::::pack CORE::pack (xsub)
73131µs12.0msSpreadsheet::ParseXLSX::::_new_twig Spreadsheet::ParseXLSX::_new_twig
22130µs30µsExporter::Heavy::::_push_tags Exporter::Heavy::_push_tags
11130µs32µsTest2::API::Context::::BEGIN@2 Test2::API::Context::BEGIN@2
692230µs30µsIO::Handle::::opened IO::Handle::opened
11129µs43µsTest::Builder::::_ending Test::Builder::_ending
11129µs29µsXML::Twig::::BEGIN@3842 XML::Twig::BEGIN@3842
81129µs35µsArchive::Zip::::_CAN Archive::Zip::_CAN
142129µs37µsArchive::Zip::Member::::readIsDone Archive::Zip::Member::readIsDone
211129µs32µsXML::Twig::::_set_regexp_handler XML::Twig::_set_regexp_handler
11129µs29µsStorable::::BEGIN@44 Storable::BEGIN@44
11128µs47µsmain::::BEGIN@3 main::BEGIN@3
11128µs59µsTest::Builder::::reset_outputs Test::Builder::reset_outputs
212228µs42µsArchive::Zip::ZipFileMember::::isDirectory Archive::Zip::ZipFileMember::isDirectory
11128µs1.10msSpreadsheet::ParseXLSX::::_parse_themes Spreadsheet::ParseXLSX::_parse_themes
11127µs27µsJSON::::BEGIN@2 JSON::BEGIN@2
11127µs7.36msJSON::::__load_pp JSON::__load_pp
55126µs51.8msSpreadsheet::ParseXLSX::::_parse_xml Spreadsheet::ParseXLSX::_parse_xml
282126µs33µsXML::Twig::Elt::::__ANON__[(eval 91)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 91)[XML/Twig.pm:5871]:1]
11126µs40µsJSON::PP::::BEGIN@53 JSON::PP::BEGIN@53
66526µs96µsoverload::::import overload::import
32126µs144µsTest2::Formatter::TAP::::write Test2::Formatter::TAP::write
11125µs4.55msXML::Twig::Elt::::__ANON__[(eval 70)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 70)[XML/Twig.pm:7113]:1]
71125µs25µsCompress::Raw::Zlib::inflateStream::::DESTROY Compress::Raw::Zlib::inflateStream::DESTROY (xsub)
11125µs49µsArchive::Zip::Archive::::_readEndOfCentralDirectory Archive::Zip::Archive::_readEndOfCentralDirectory
11125µs25µsTest2::API::::INIT Test2::API::INIT
91124µs56µsIO::Handle::::new IO::Handle::new
11124µs910µsXML::Twig::Elt::::__ANON__[(eval 68)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 68)[XML/Twig.pm:7113]:1]
11124µs28µsTest2::Event::V2::::facet_data Test2::Event::V2::facet_data
33324µs1.40msTime::HiRes::::import Time::HiRes::import
396424µs24µsCORE::::unpack CORE::unpack (xsub)
11123µs26µsJSON::Backend::PP::::init JSON::Backend::PP::init
82223µs80µsArchive::Zip::::_binmode Archive::Zip::_binmode
11123µs23µsTest2::Event::Pass::::BEGIN@7 Test2::Event::Pass::BEGIN@7
22223µs631µsTest::Builder::Module::::import Test::Builder::Module::import
11122µs50µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268]
102122µs22µswarnings::::_mkMask warnings::_mkMask
71122µs591µsArchive::Zip::ZipFileMember::::_readRawChunk Archive::Zip::ZipFileMember::_readRawChunk
41122µs22µsXML::Twig::::__ANON__[(eval 106)[XML/Twig.pm:1750]:17] XML::Twig::__ANON__[(eval 106)[XML/Twig.pm:1750]:17] (merge of 4 subs)
11122µs41µsTest2::API::Stack::::BEGIN@3 Test2::API::Stack::BEGIN@3
122222µs88µsExporter::::export Exporter::export
22122µs6.11msXML::Twig::::_set_handlers XML::Twig::_set_handlers
71122µs24µsXML::Twig::::set_root XML::Twig::set_root
11121µs33µsCarp::::BEGIN@6 Carp::BEGIN@6
11121µs101µsFile::Copy::::BEGIN@19 File::Copy::BEGIN@19
71121µs25µsXML::Twig::Elt::::set_output_filter XML::Twig::Elt::set_output_filter
11121µs23µsTest2::EventFacet::Parent::::BEGIN@2 Test2::EventFacet::Parent::BEGIN@2
21121µs80µsXML::Twig::Elt::::__ANON__[(eval 62)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 62)[XML/Twig.pm:7113]:1]
11120µs20µsCarp::::BEGIN@574 Carp::BEGIN@574
11120µs44µsFile::Basename::::fileparse_set_fstype File::Basename::fileparse_set_fstype
344120µs20µsXML::Twig::::root XML::Twig::root
88120µs419µsTest::Builder::::ctx Test::Builder::ctx
21120µs20µsTest2::API::Context::::init Test2::API::Context::init
11119µs24µsTest2::Event::::common_facet_data Test2::Event::common_facet_data
111119µs266µsArchive::Zip::Member::::_newFromZipFile Archive::Zip::Member::_newFromZipFile
83319µs19µsTest2::Util::::gen_uid Test2::Util::gen_uid
11118µs20µsTest::Builder::Formatter::::BEGIN@11 Test::Builder::Formatter::BEGIN@11
31118µs89µsTest2::Formatter::TAP::::print_optimal_pass Test2::Formatter::TAP::print_optimal_pass
61118µs26µsXML::Twig::Elt::::is_elt XML::Twig::Elt::is_elt
71118µs20µsXML::Twig::Elt::::set_output_text_filter XML::Twig::Elt::set_output_text_filter
71118µs26µsXML::Twig::::set_keep_encoding XML::Twig::set_keep_encoding
1919918µs18µsUNIVERSAL::::import UNIVERSAL::import
61118µs23µsXML::Twig::::_twig_default XML::Twig::_twig_default
81118µs22µsIO::Handle::::binmode IO::Handle::binmode
44117µs20µsTest2::Formatter::TAP::::_autoflush Test2::Formatter::TAP::_autoflush
71117µs78µsXML::Twig::::_checked_parse_result XML::Twig::_checked_parse_result
41117µs26µsbase::::__ANON__[base.pm:76] base::__ANON__[base.pm:76]
11117µs1.73msTest2::Util::::BEGIN@171 Test2::Util::BEGIN@171
11117µs939µsPOSIX::::import POSIX::import
11117µs25µsArchive::Zip::Archive::::memberNamed Archive::Zip::Archive::memberNamed
55517µs78µswarnings::register::::import warnings::register::import
651116µs16µsCORE::::readline CORE::readline (xsub)
52216µs53µsTest::Builder::::new Test::Builder::new
33216µs16µsoverloading::::unimport overloading::unimport
11116µs52µsArchive::Zip::::BEGIN@37 Archive::Zip::BEGIN@37
122216µs16µsCORE::::binmode CORE::binmode (xsub)
43216µs1.71msConfig::::FETCH Config::FETCH
11116µs16µsXML::Twig::Elt::::BEGIN@8119 XML::Twig::Elt::BEGIN@8119
11116µs31µsArchive::Zip::Archive::::_findEndOfCentralDirectory Archive::Zip::Archive::_findEndOfCentralDirectory
1010316µs16µsTest2::API::Context::::DESTROY Test2::API::Context::DESTROY
11116µs18µsTest2::EventFacet::Plan::::BEGIN@2 Test2::EventFacet::Plan::BEGIN@2
72116µs16µsEncode::::define_encoding Encode::define_encoding
11116µs855µsXML::Twig::Elt::::__ANON__[(eval 97)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 97)[XML/Twig.pm:7113]:1]
11116µs16µsFcntl::::O_NOINHERIT Fcntl::O_NOINHERIT
11116µs48µsTest::Builder::::use_numbers Test::Builder::use_numbers
31115µs161µsExporter::Heavy::::heavy_export_to_level Exporter::Heavy::heavy_export_to_level
11115µs17µsTest2::Event::Ok::::BEGIN@2 Test2::Event::Ok::BEGIN@2
71115µs632µsXML::Parser::Expat::::DESTROY XML::Parser::Expat::DESTROY
11115µs116µsTest2::API::Context::::send_ev2 Test2::API::Context::send_ev2
455215µs15µsArchive::Zip::Member::::compressionMethod Archive::Zip::Member::compressionMethod
33115µs15µsCarp::::_fetch_sub Carp::_fetch_sub
11115µs58µsTest::Builder::::__ANON__[Test/Builder.pm:156] Test::Builder::__ANON__[Test/Builder.pm:156]
11115µs15µsFile::Temp::::cleanup File::Temp::cleanup
71115µs18µsXML::Parser::Expat::::release XML::Parser::Expat::release
11115µs30µsJSON::PP::::BEGIN@26 JSON::PP::BEGIN@26
11114µs155µsTest2::API::Stack::::new_hub Test2::API::Stack::new_hub
142114µs19µsXML::Twig::Elt::::__ANON__[(eval 90)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 90)[XML/Twig.pm:5871]:1]
142114µs19µsXML::Twig::Elt::::__ANON__[(eval 95)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 95)[XML/Twig.pm:5871]:1]
11114µs28µsCompress::Raw::Zlib::::BEGIN@155 Compress::Raw::Zlib::BEGIN@155
11114µs16µsEncode::Config::::BEGIN@7 Encode::Config::BEGIN@7
11114µs98µsSpreadsheet::ParseXLSX::::_check_signature Spreadsheet::ParseXLSX::_check_signature
11114µs14µsTest::More::::BEGIN@3 Test::More::BEGIN@3
464114µs14µsXML::Twig::Elt::::__ANON__[(eval 104)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 104)[XML/Twig.pm:5871]:1] (merge of 4 subs)
142114µs18µsXML::Twig::Elt::::__ANON__[(eval 96)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 96)[XML/Twig.pm:5871]:1]
11114µs28µsbytes::::BEGIN@4 bytes::BEGIN@4
11114µs14µsvars::::BEGIN@3 vars::BEGIN@3
21114µs25µsTest2::Formatter::TAP::::event_tap Test2::Formatter::TAP::event_tap
11114µs25µsEncode::::onBOOT Encode::onBOOT (xsub)
31114µs14µsTest::Builder::::__ANON__[Test/Builder.pm:88] Test::Builder::__ANON__[Test/Builder.pm:88]
11114µs24µsXML::Twig::Elt::::BEGIN@1.32 XML::Twig::Elt::BEGIN@1.32
43214µs18µsTest2::API::::test2_in_preload Test2::API::test2_in_preload
11114µs14µsTest::Builder::::BEGIN@3 Test::Builder::BEGIN@3
11114µs15µsScalar::Util::::BEGIN@9 Scalar::Util::BEGIN@9
33114µs17µsTest2::Util::ExternalMeta::::meta Test2::Util::ExternalMeta::meta
71113µs13µsXML::Twig::Entity_list::::new XML::Twig::Entity_list::new
11113µs27µsArchive::Zip::::BEGIN@289 Archive::Zip::BEGIN@289
11113µs15µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@3 Spreadsheet::ParseXLSX::Decryptor::BEGIN@3
71113µs13µsXML::Twig::Elt::::_join_defined XML::Twig::Elt::_join_defined
71113µs26µsXML::Twig::Elt::::_and XML::Twig::Elt::_and
71113µs13µsCompress::Raw::Zlib::Parameters::::new Compress::Raw::Zlib::Parameters::new
11113µs14µsSpreadsheet::ParseExcel::FmtDefault::::BEGIN@19 Spreadsheet::ParseExcel::FmtDefault::BEGIN@19
55113µs16µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979]
11113µs78µsTest2::Formatter::TAP::::_open_handles Test2::Formatter::TAP::_open_handles
11113µs14µsSpreadsheet::ParseExcel::::BEGIN@17 Spreadsheet::ParseExcel::BEGIN@17
11113µs275µsTest::More::::ok Test::More::ok
93213µs15µsIO::Seekable::::tell IO::Seekable::tell
33313µs16µsTest2::Hub::::is_passing Test2::Hub::is_passing
11112µs14µsPOSIX::::BEGIN@2 POSIX::BEGIN@2
11112µs12µsArchive::Zip::Archive::::new Archive::Zip::Archive::new
51112µs12µsCORE::::ftdir CORE::ftdir (xsub)
11112µs12µsFile::Temp::::BEGIN@144 File::Temp::BEGIN@144
11112µs12µsFile::Path::::BEGIN@27 File::Path::BEGIN@27
11112µs12µsTest2::Hub::Interceptor::::BEGIN@10 Test2::Hub::Interceptor::BEGIN@10
11112µs72µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]
11112µs17µsTime::HiRes::::AUTOLOAD Time::HiRes::AUTOLOAD
11112µs14µsSpreadsheet::ParseXLSX::::BEGIN@3 Spreadsheet::ParseXLSX::BEGIN@3
11112µs12µsTest::Builder::::BEGIN@1232 Test::Builder::BEGIN@1232
21112µs12µsXML::Twig::::__ANON__[(eval 111)[XML/Twig.pm:1750]:17] XML::Twig::__ANON__[(eval 111)[XML/Twig.pm:1750]:17] (merge of 2 subs)
11112µs13µsTest2::Event::Note::::BEGIN@2 Test2::Event::Note::BEGIN@2
21112µs12µsXML::Twig::::__ANON__[(eval 110)[XML/Twig.pm:1750]:17] XML::Twig::__ANON__[(eval 110)[XML/Twig.pm:1750]:17] (merge of 2 subs)
11112µs13µsSpreadsheet::ParseXLSX::Decryptor::Standard::::BEGIN@3Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3
11112µs12µsTime::HiRes::::BEGIN@3 Time::HiRes::BEGIN@3
11112µs362µsXML::Twig::Elt::::__ANON__[(eval 87)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 87)[XML/Twig.pm:7113]:1]
11112µs12µsoverload::::unimport overload::unimport
11111µs11µsCarp::::BEGIN@3 Carp::BEGIN@3
11111µs25µsTest2::Formatter::TAP::::BEGIN@89 Test2::Formatter::TAP::BEGIN@89
11111µs27µsCrypt::Mode::ECB::::BEGIN@6 Crypt::Mode::ECB::BEGIN@6
71111µs20µsXML::Twig::::set_expand_external_entities XML::Twig::set_expand_external_entities
32211µs11µsCORE::::close CORE::close (xsub)
11111µs26µsFile::Temp::::END File::Temp::END
11111µs24µsJSON::PP::IncrParser::::BEGIN@1493 JSON::PP::IncrParser::BEGIN@1493
11111µs12µsOLE::Storage_Lite::PPS::::BEGIN@12 OLE::Storage_Lite::PPS::BEGIN@12
11111µs11µsTest2::Util::Facets2Legacy::::BEGIN@1 Test2::Util::Facets2Legacy::BEGIN@1
11111µs29µsTest::Builder::::expected_tests Test::Builder::expected_tests
11111µs224µsXML::Twig::Elt::::__ANON__[(eval 103)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 103)[XML/Twig.pm:7113]:1]
71111µs11µsXML::Twig::Elt::::set_quote XML::Twig::Elt::set_quote
11111µs12µsbuiltin::::BEGIN@3 builtin::BEGIN@3
11111µs11µsconstant::::BEGIN@2 constant::BEGIN@2
11111µs11µsFile::Copy::::BEGIN@10 File::Copy::BEGIN@10
11111µs11µsIO::File::::BEGIN@119 IO::File::BEGIN@119
11111µs13µsTest2::API::Instance::::_finalize Test2::API::Instance::_finalize
11111µs13µsTest2::API::Stack::::BEGIN@2 Test2::API::Stack::BEGIN@2
11111µs11µsFile::Find::::BEGIN@2 File::Find::BEGIN@2
11111µs29µsTest2::Util::Trace::::BEGIN@4 Test2::Util::Trace::BEGIN@4
11111µs40µsTest::Builder::::current_test Test::Builder::current_test
11111µs13µsTest::More::::import_extra Test::More::import_extra
11111µs11µsFileHandle::::BEGIN@3 FileHandle::BEGIN@3
11111µs11µsIO::Seekable::::BEGIN@97 IO::Seekable::BEGIN@97
11111µs11µsJSON::PP::::BEGIN@5 JSON::PP::BEGIN@5
11111µs13µsList::Util::::BEGIN@9 List::Util::BEGIN@9
11111µs12µsSpreadsheet::ParseXLSX::Decryptor::Agile::::BEGIN@3 Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3
11111µs13µsTest2::API::Instance::::BEGIN@2 Test2::API::Instance::BEGIN@2
71111µs17µsXML::Twig::::set_do_not_escape_amp_in_atts XML::Twig::set_do_not_escape_amp_in_atts
22211µs11µsList::Util::::import List::Util::import
11111µs12µsTest2::Event::Pass::::BEGIN@2 Test2::Event::Pass::BEGIN@2
11111µs12µsTest2::Event::V2::::BEGIN@2 Test2::Event::V2::BEGIN@2
11111µs295µsXML::Twig::Elt::::__ANON__[(eval 76)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 76)[XML/Twig.pm:7113]:1]
71111µs22µsXML::Twig::::set_quote XML::Twig::set_quote
11111µs12µsArchive::Zip::Archive::::BEGIN@5 Archive::Zip::Archive::BEGIN@5
11111µs11µsArchive::Zip::NewFileMember::::BEGIN@6 Archive::Zip::NewFileMember::BEGIN@6
11111µs12µsExporter::::BEGIN@3 Exporter::BEGIN@3
11111µs12µsTest2::Event::Fail::::BEGIN@2 Test2::Event::Fail::BEGIN@2
11111µs34µsXML::Twig::Elt::::BEGIN@1.73 XML::Twig::Elt::BEGIN@1.73
11110µs10µsIO::Handle::::BEGIN@271 IO::Handle::BEGIN@271
11110µs12µsArchive::Zip::FileMember::::BEGIN@3 Archive::Zip::FileMember::BEGIN@3
11110µs12µsJSON::PP::::BEGIN@790 JSON::PP::BEGIN@790
31110µs10µsSpreadsheet::ParseExcel::Font::::new Spreadsheet::ParseExcel::Font::new
11110µs12µsSpreadsheet::ParseXLSX::Cell::::BEGIN@3 Spreadsheet::ParseXLSX::Cell::BEGIN@3
11110µs11.2msSpreadsheet::ParseXLSX::::_parse_shared_strings Spreadsheet::ParseXLSX::_parse_shared_strings
11110µs12µsTest2::Event::::BEGIN@2 Test2::Event::BEGIN@2
11110µs11µsArchive::Zip::Member::::BEGIN@578 Archive::Zip::Member::BEGIN@578
11110µs19µsXML::Twig::Elt::::BEGIN@1.28 XML::Twig::Elt::BEGIN@1.28
71110µs17µsXML::Twig::::set_keep_atts_order XML::Twig::set_keep_atts_order
11110µs12µsConfig::::BEGIN@9 Config::BEGIN@9
11110µs12µsDigest::base::::BEGIN@3 Digest::base::BEGIN@3
11110µs15µsFile::Temp::::BEGIN@147 File::Temp::BEGIN@147
11110µs12µsTest::Builder::Module::::BEGIN@3 Test::Builder::Module::BEGIN@3
11110µs851µsArchive::Zip::Archive::::read Archive::Zip::Archive::read
11110µs12µsExporter::Heavy::::BEGIN@3 Exporter::Heavy::BEGIN@3
11110µs12µsTest2::API::::BEGIN@2 Test2::API::BEGIN@2
11110µs12µsmro::::BEGIN@10 mro::BEGIN@10
11110µs12µsArchive::Zip::NewFileMember::::BEGIN@3 Archive::Zip::NewFileMember::BEGIN@3
11110µs12µsArchive::Zip::ZipFileMember::::BEGIN@3 Archive::Zip::ZipFileMember::BEGIN@3
11110µs10µsGraphics::ColorUtils::::BEGIN@4 Graphics::ColorUtils::BEGIN@4
11110µs24µsSpreadsheet::ParseXLSX::::_dimensions Spreadsheet::ParseXLSX::_dimensions
11110µs11µsTest2::API::Instance::::reset Test2::API::Instance::reset
11110µs12µsTest2::Event::Diag::::BEGIN@2 Test2::Event::Diag::BEGIN@2
11110µs12µsTest2::Event::Waiting::::BEGIN@2 Test2::Event::Waiting::BEGIN@2
11110µs12µsTest2::Util::::BEGIN@2 Test2::Util::BEGIN@2
51110µs10µsXML::Twig::Elt::::_op XML::Twig::Elt::_op
11110µs12µsFile::Glob::::BEGIN@3 File::Glob::BEGIN@3
11110µs34µsTest2::Event::Plan::::facet_data Test2::Event::Plan::facet_data
11110µs11µsTest2::Hub::::BEGIN@2 Test2::Hub::BEGIN@2
44210µs15µsTest::Builder::Module::::builder Test::Builder::Module::builder
11110µs196µsXML::Twig::Elt::::__ANON__[(eval 129)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 129)[XML/Twig.pm:7113]:1]
11110µs499µsXML::Twig::Elt::::__ANON__[(eval 58)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 58)[XML/Twig.pm:7113]:1]
11110µs10µsArchive::Zip::::BEGIN@3 Archive::Zip::BEGIN@3
11110µs10µsFile::Path::::BEGIN@3 File::Path::BEGIN@3
11110µs12µsTest2::API::Instance::::BEGIN@53 Test2::API::Instance::BEGIN@53
11110µs12µsTest2::Event::Bail::::BEGIN@2 Test2::Event::Bail::BEGIN@2
11110µs11µsTest2::Util::ExternalMeta::::BEGIN@2 Test2::Util::ExternalMeta::BEGIN@2
11110µs11µsURI::::BEGIN@3 URI::BEGIN@3
11110µs11µsXML::Parser::::BEGIN@11 XML::Parser::BEGIN@11
11110µs11µsArchive::Zip::Member::::BEGIN@5 Archive::Zip::Member::BEGIN@5
11110µs11µsArchive::Zip::StringMember::::BEGIN@3 Archive::Zip::StringMember::BEGIN@3
11110µs12µsConfig::::BEGIN@5 Config::BEGIN@5
11110µs11µsEncode::Encoding::::BEGIN@4 Encode::Encoding::BEGIN@4
11110µs11µsTest2::Event::Exception::::BEGIN@2 Test2::Event::Exception::BEGIN@2
111110µs10µsArchive::Zip::Member::::localExtraField Archive::Zip::Member::localExtraField
11110µs11µsFcntl::::BEGIN@58 Fcntl::BEGIN@58
11110µs11µsTest2::Event::Plan::::BEGIN@2 Test2::Event::Plan::BEGIN@2
11110µs11µsTest2::Event::Skip::::BEGIN@2 Test2::Event::Skip::BEGIN@2
11110µs11µsTest2::Event::Subtest::::BEGIN@2 Test2::Event::Subtest::BEGIN@2
11110µs11µsTest2::EventFacet::Trace::::BEGIN@2 Test2::EventFacet::Trace::BEGIN@2
11110µs11µsTest2::Hub::Interceptor::::BEGIN@2 Test2::Hub::Interceptor::BEGIN@2
11110µs11µsTest2::Hub::Interceptor::Terminator::::BEGIN@2 Test2::Hub::Interceptor::Terminator::BEGIN@2
11110µs11µsTest::Builder::TodoDiag::::BEGIN@2 Test::Builder::TodoDiag::BEGIN@2
11110µs11µsSpreadsheet::ParseExcel::Workbook::::BEGIN@19 Spreadsheet::ParseExcel::Workbook::BEGIN@19
11110µs11µsTest2::Hub::Subtest::::BEGIN@2 Test2::Hub::Subtest::BEGIN@2
11110µs25µsXML::Parser::ContentModel::::BEGIN@512 XML::Parser::ContentModel::BEGIN@512
51110µs12µsXML::Twig::Elt::::__ANON__[(eval 101)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 101)[XML/Twig.pm:5871]:1]
11110µs31µsXML::Twig::Elt::::__ANON__[(eval 63)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 63)[XML/Twig.pm:7113]:1]
71110µs10µsXML::Twig::Notation_list::::new XML::Twig::Notation_list::new
1119µs153µsEncode::::BEGIN@9 Encode::BEGIN@9
1119µs49µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]
1119µs11µsTest2::EventFacet::Control::::BEGIN@2 Test2::EventFacet::Control::BEGIN@2
1119µs11µsTest2::EventFacet::Error::::BEGIN@2 Test2::EventFacet::Error::BEGIN@2
1119µs11µsTest2::EventFacet::Info::::BEGIN@2 Test2::EventFacet::Info::BEGIN@2
1119µs62µsTest2::Hub::::BEGIN@12 Test2::Hub::BEGIN@12
1119µs37µsXML::Twig::Elt::::__ANON__[(eval 60)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 60)[XML/Twig.pm:7113]:1]
1119µs32µsXML::Twig::Elt::::__ANON__[(eval 61)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 61)[XML/Twig.pm:7113]:1]
1119µs11µsCrypt::RC4::::BEGIN@15 Crypt::RC4::BEGIN@15
1119µs11µsEncode::MIME::Name::::BEGIN@2 Encode::MIME::Name::BEGIN@2
1119µs11µsFile::Spec::Unix::::BEGIN@3 File::Spec::Unix::BEGIN@3
1119µs11µsTest2::EventFacet::Hub::::BEGIN@2 Test2::EventFacet::Hub::BEGIN@2
1119µs11µsTest2::EventFacet::Meta::::BEGIN@2 Test2::EventFacet::Meta::BEGIN@2
1119µs11µsTest2::Formatter::TAP::::BEGIN@2 Test2::Formatter::TAP::BEGIN@2
1119µs11µsTest2::Util::Facets2Legacy::::BEGIN@2 Test2::Util::Facets2Legacy::BEGIN@2
1119µs11µsTest2::Util::HashBase::::BEGIN@2 Test2::Util::HashBase::BEGIN@2
1119µs11µsTest::Builder::Formatter::::BEGIN@2 Test::Builder::Formatter::BEGIN@2
8219µs9µsArchive::Zip::Archive::::members Archive::Zip::Archive::members
1119µs11µsArchive::Zip::DirectoryMember::::BEGIN@3 Archive::Zip::DirectoryMember::BEGIN@3
1119µs11µsCrypt::Mode::ECB::::BEGIN@5 Crypt::Mode::ECB::BEGIN@5
1119µs11µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@19 Spreadsheet::ParseExcel::Worksheet::BEGIN@19
1119µs9µsTest2::EventFacet::Control::::BEGIN@7 Test2::EventFacet::Control::BEGIN@7
7119µs14µsXML::Twig::::set_remove_cdata XML::Twig::set_remove_cdata
21319µs9µsArchive::Zip::Member::::uncompressedSize Archive::Zip::Member::uncompressedSize
4419µs12µsArchive::Zip::::_ISA Archive::Zip::_ISA
1119µs9µsJSON::PP::::BEGIN@9 JSON::PP::BEGIN@9
1119µs11µsTest2::EventFacet::About::::BEGIN@2 Test2::EventFacet::About::BEGIN@2
1119µs11µsTest2::Formatter::::BEGIN@2 Test2::Formatter::BEGIN@2
1119µs13µsTest2::Hub::::init Test2::Hub::init
6629µs10µsTest2::Hub::::plan Test2::Hub::plan
1119µs26µsoverloading::::BEGIN@2 overloading::BEGIN@2
1119µs132µsFile::Temp::::BEGIN@150 File::Temp::BEGIN@150
1119µs11µsTest2::EventFacet::Amnesty::::BEGIN@2 Test2::EventFacet::Amnesty::BEGIN@2
1119µs10µsTest2::EventFacet::::BEGIN@2 Test2::EventFacet::BEGIN@2
7119µs34µsXML::Twig::::set_output_filter XML::Twig::set_output_filter
1119µs25µsconstant::::BEGIN@4 constant::BEGIN@4
1119µs37µsConfig::::fetch_string Config::fetch_string
1119µs13µsErrno::::BEGIN@8 Errno::BEGIN@8
1119µs10µsFile::Spec::::BEGIN@3 File::Spec::BEGIN@3
1119µs10µsSpreadsheet::ParseExcel::Utility::::BEGIN@19 Spreadsheet::ParseExcel::Utility::BEGIN@19
11119µs9µsArchive::Zip::Member::::_mapPermissionsFromUnix Archive::Zip::Member::_mapPermissionsFromUnix
1119µs178µsArchive::Zip::ZipFileMember::::BEGIN@11 Archive::Zip::ZipFileMember::BEGIN@11
1119µs10µsDigest::SHA::::BEGIN@5 Digest::SHA::BEGIN@5
1119µs10µsEncode::Alias::::BEGIN@2 Encode::Alias::BEGIN@2
1119µs10µsEncode::utf8::::BEGIN@229 Encode::utf8::BEGIN@229
1119µs10µsSpreadsheet::ParseExcel::Font::::BEGIN@19 Spreadsheet::ParseExcel::Font::BEGIN@19
1119µs10µsTime::Local::::BEGIN@3 Time::Local::BEGIN@3
1119µs10µsbytes::::BEGIN@3 bytes::BEGIN@3
1119µs10µsoverload::::BEGIN@3 overload::BEGIN@3
1119µs25µsTest2::Event::Plan::::BEGIN@3 Test2::Event::Plan::BEGIN@3
1119µs10µsTest2::EventFacet::Assert::::BEGIN@2 Test2::EventFacet::Assert::BEGIN@2
1119µs9µsTest2::EventFacet::Hub::::BEGIN@10 Test2::EventFacet::Hub::BEGIN@10
3119µs9µsTest2::EventFacet::Trace::::init Test2::EventFacet::Trace::init
1119µs19µsTest2::Hub::Subtest::::BEGIN@66 Test2::Hub::Subtest::BEGIN@66
1119µs10µsXML::Twig::Elt::::BEGIN@8108 XML::Twig::Elt::BEGIN@8108
1119µs10µsEncode::::BEGIN@5 Encode::BEGIN@5
1119µs10µsJSON::::BEGIN@4 JSON::BEGIN@4
1119µs10µsSpreadsheet::ParseExcel::Format::::BEGIN@19 Spreadsheet::ParseExcel::Format::BEGIN@19
1119µs25µsTest2::Event::Subtest::::BEGIN@3 Test2::Event::Subtest::BEGIN@3
1119µs10µsURI::Escape::::BEGIN@3 URI::Escape::BEGIN@3
1119µs9µsXML::Twig::::_check_illegal_twig_roots_handlers XML::Twig::_check_illegal_twig_roots_handlers
7119µs28µsXML::Twig::::set_output_text_filter XML::Twig::set_output_text_filter
13319µs9µsXML::Twig::Elt::::__ANON__[(eval 105)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 105)[XML/Twig.pm:5871]:1] (merge of 4 subs)
1118µs42µsCompress::Raw::Zlib::::BEGIN@6 Compress::Raw::Zlib::BEGIN@6
1118µs10µsCwd::::BEGIN@2 Cwd::BEGIN@2
1118µs10µsDigest::Perl::MD5::::BEGIN@2 Digest::Perl::MD5::BEGIN@2
1118µs10µsJSON::PP::Boolean::::BEGIN@3 JSON::PP::Boolean::BEGIN@3
1118µs19µsURI::Escape::::BEGIN@147 URI::Escape::BEGIN@147
7118µs8µsXML::Twig::Elt::::set_expand_external_entities XML::Twig::Elt::set_expand_external_entities
1118µs3.81msXML::Twig::::setTwigHandlers XML::Twig::setTwigHandlers
1118µs8µsArchive::Zip::Member::::BEGIN@8 Archive::Zip::Member::BEGIN@8
1118µs8µsCORE::::fteexec CORE::fteexec (xsub)
1118µs10µsMIME::Base64::::BEGIN@3 MIME::Base64::BEGIN@3
1118µs20µsSpreadsheet::ParseExcel::::BEGIN@63 Spreadsheet::ParseExcel::BEGIN@63
1118µs10µsSpreadsheet::ParseXLSX::::BEGIN@1 Spreadsheet::ParseXLSX::BEGIN@1
1118µs10µsTime::Local::::_daygm Time::Local::_daygm
1118µs10µsXML::Parser::Expat::::BEGIN@3 XML::Parser::Expat::BEGIN@3
1118µs22µsXML::Twig::Elt::::BEGIN@1.7 XML::Twig::Elt::BEGIN@1.7
5548µs8µsbytes::::import bytes::import
1118µs10µsparent::::BEGIN@2 parent::BEGIN@2
1118µs10µsCrypt::Mode::CBC::::BEGIN@5 Crypt::Mode::CBC::BEGIN@5
1118µs17µsFile::Temp::::BEGIN@176 File::Temp::BEGIN@176
1118µs10µsSpreadsheet::ParseExcel::Cell::::BEGIN@19 Spreadsheet::ParseExcel::Cell::BEGIN@19
1118µs16µsTest2::Util::::BEGIN@71 Test2::Util::BEGIN@71
1118µs9µsTest::Builder::::BEGIN@33 Test::Builder::BEGIN@33
1118µs20µsSpreadsheet::ParseExcel::Cell::::BEGIN@169 Spreadsheet::ParseExcel::Cell::BEGIN@169
1118µs10µsSymbol::::BEGIN@3 Symbol::BEGIN@3
1118µs23µsSymbol::::BEGIN@4 Symbol::BEGIN@4
1118µs8µsTest2::Event::Fail::::BEGIN@9 Test2::Event::Fail::BEGIN@9
1118µs10µsXML::Twig::::BEGIN@2455 XML::Twig::BEGIN@2455
7118µs8µsXML::Twig::Elt::::set_keep_encoding XML::Twig::Elt::set_keep_encoding
1118µs28µsSelectSaver::::BEGIN@38 SelectSaver::BEGIN@38
19418µs8µsXML::Twig::Elt::::__ANON__[(eval 72)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 72)[XML/Twig.pm:5871]:1] (merge of 3 subs)
4118µs8µsbase::::has_fields base::has_fields
1118µs9µsCrypt::Cipher::::BEGIN@3 Crypt::Cipher::BEGIN@3
1118µs13µsTest::Builder::::_add_ts_hooks Test::Builder::_add_ts_hooks
1118µs25µsXML::Twig::Elt::::BEGIN@1.70 XML::Twig::Elt::BEGIN@1.70
1118µs9µsCryptX::::BEGIN@3 CryptX::BEGIN@3
2118µs308µsTest2::API::::END Test2::API::END
1118µs9µsXML::Parser::Expat::::BEGIN@7 XML::Parser::Expat::BEGIN@7
1118µs10µsXML::Twig::::BEGIN@4636 XML::Twig::BEGIN@4636
14228µs8µsArchive::Zip::FileMember::::externalFileName Archive::Zip::FileMember::externalFileName
3118µs14µsTest2::Event::::eid Test2::Event::eid
1118µs12µsXML::Twig::::BEGIN@1327 XML::Twig::BEGIN@1327
1118µs32µsXML::Twig::Elt::::BEGIN@1 XML::Twig::Elt::BEGIN@1
1118µs17µsXML::Twig::Elt::::BEGIN@1.36 XML::Twig::Elt::BEGIN@1.36
1118µs145µsXML::Twig::Elt::::__ANON__[(eval 64)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 64)[XML/Twig.pm:7113]:1]
1118µs8µsconstant::::BEGIN@24 constant::BEGIN@24
1118µs9µsutf8::::BEGIN@3 utf8::BEGIN@3
1118µs18µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@16 Spreadsheet::ParseXLSX::Decryptor::BEGIN@16
1118µs10µsDigest::SHA::::BEGIN@202 Digest::SHA::BEGIN@202
1118µs8µsTest2::Event::Pass::::BEGIN@9 Test2::Event::Pass::BEGIN@9
1118µs20µsArchive::Zip::::_isSeekable Archive::Zip::_isSeekable
1118µs14µsCarp::::BEGIN@61 Carp::BEGIN@61
1118µs12µsTest2::API::Instance::::BEGIN@62 Test2::API::Instance::BEGIN@62
1118µs12µsXML::Twig::::BEGIN@3229 XML::Twig::BEGIN@3229
1118µs19µsXML::Twig::Elt::::BEGIN@1.6 XML::Twig::Elt::BEGIN@1.6
1118µs20µsXML::Twig::Elt::::BEGIN@1.8 XML::Twig::Elt::BEGIN@1.8
7118µs8µsXML::Twig::::_set_fh_to_selected_fh XML::Twig::_set_fh_to_selected_fh
1117µs9µsFile::Glob::::BEGIN@54 File::Glob::BEGIN@54
1117µs10µsPOSIX::::BEGIN@225 POSIX::BEGIN@225
1117µs7µsTest::Builder::Module::::_strip_imports Test::Builder::Module::_strip_imports
1117µs20µsXML::Twig::::BEGIN@439 XML::Twig::BEGIN@439
1117µs31µsXML::Twig::Elt::::BEGIN@5082 XML::Twig::Elt::BEGIN@5082
13317µs7µsXML::Twig::Elt::::__ANON__[(eval 130)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 130)[XML/Twig.pm:5871]:1] (merge of 3 subs)
23317µs7µsXML::Twig::Elt::::__ANON__[(eval 73)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 73)[XML/Twig.pm:5871]:1] (merge of 3 subs)
1117µs13µsCarp::::BEGIN@1 Carp::BEGIN@1
1117µs15µsCarp::::BEGIN@137 Carp::BEGIN@137
1117µs20µsCwd::::BEGIN@3 Cwd::BEGIN@3
1117µs12µsCwd::::BEGIN@644 Cwd::BEGIN@644
1117µs24µsTest2::EventFacet::Trace::::BEGIN@3 Test2::EventFacet::Trace::BEGIN@3
1117µs14µsXML::Parser::Expat::::BEGIN@460 XML::Parser::Expat::BEGIN@460
1117µs14µsoverload::::BEGIN@84 overload::BEGIN@84
3317µs18µsTest2::API::::release Test2::API::release
3117µs1.20msExporter::::export_to_level Exporter::export_to_level
1117µs11µsJSON::Backend::PP::::BEGIN@342 JSON::Backend::PP::BEGIN@342
1117µs10µsSpreadsheet::ParseExcel::::BEGIN@2628 Spreadsheet::ParseExcel::BEGIN@2628
1117µs7µsTest2::Event::Exception::::BEGIN@8 Test2::Event::Exception::BEGIN@8
1117µs7µsTest2::EventFacet::Plan::::BEGIN@7 Test2::EventFacet::Plan::BEGIN@7
1117µs7µsTest2::Util::::BEGIN@40 Test2::Util::BEGIN@40
1117µs12µsTest2::Util::HashBase::::BEGIN@94 Test2::Util::HashBase::BEGIN@94
1117µs18µsXML::Twig::Elt::::BEGIN@1.74 XML::Twig::Elt::BEGIN@1.74
1117µs26µsArchive::Zip::Member::::BEGIN@37 Archive::Zip::Member::BEGIN@37
1117µs12µsCarp::::BEGIN@730 Carp::BEGIN@730
1117µs7µsTest2::API::::BEGIN@179 Test2::API::BEGIN@179
1117µs13µsTest::Builder::::create Test::Builder::create
1117µs18µsXML::Twig::Elt::::BEGIN@1.38 XML::Twig::Elt::BEGIN@1.38
1117µs24µsOLE::Storage_Lite::::BEGIN@831 OLE::Storage_Lite::BEGIN@831
2217µs7µsSpreadsheet::ParseXLSX::::_rels_for Spreadsheet::ParseXLSX::_rels_for
1117µs7µsTest2::Event::Skip::::BEGIN@8 Test2::Event::Skip::BEGIN@8
1117µs19µsTest::Builder::::BEGIN@1519 Test::Builder::BEGIN@1519
1117µs29µsURI::::BEGIN@43 URI::BEGIN@43
1117µs18µsXML::Twig::Elt::::BEGIN@1.5 XML::Twig::Elt::BEGIN@1.5
1117µs9µsXML::Twig::Elt::::BEGIN@7919 XML::Twig::Elt::BEGIN@7919
1117µs120µsXML::Twig::Elt::::__ANON__[(eval 66)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 66)[XML/Twig.pm:7113]:1]
14117µs7µsArchive::Zip::Member::::_dataEnded Archive::Zip::Member::_dataEnded
1117µs76µsOLE::Storage_Lite::::BEGIN@843 OLE::Storage_Lite::BEGIN@843
1117µs74µsOLE::Storage_Lite::PPS::Root::::BEGIN@169 OLE::Storage_Lite::PPS::Root::BEGIN@169
1117µs8µsSpreadsheet::ParseExcel::Worksheet::::new Spreadsheet::ParseExcel::Worksheet::new
1117µs232µsTest2::API::Instance::::BEGIN@16 Test2::API::Instance::BEGIN@16
1117µs11µsTest2::Event::V2::::init Test2::Event::V2::init
1117µs7µsTest2::Event::Waiting::::BEGIN@8 Test2::Event::Waiting::BEGIN@8
8117µs7µsTest::Builder::::__ANON__[Test/Builder.pm:154] Test::Builder::__ANON__[Test/Builder.pm:154]
1117µs11µsTest::More::::BEGIN@209 Test::More::BEGIN@209
1117µs363µsTest::More::::done_testing Test::More::done_testing
1117µs8µsXML::Twig::::BEGIN@30 XML::Twig::BEGIN@30
1117µs18µsXML::Twig::Elt::::BEGIN@1.15 XML::Twig::Elt::BEGIN@1.15
1117µs18µsXML::Twig::Elt::::BEGIN@1.4 XML::Twig::Elt::BEGIN@1.4
1117µs70µsArchive::Zip::Member::::BEGIN@28 Archive::Zip::Member::BEGIN@28
1117µs16µsEncode::::BEGIN@15 Encode::BEGIN@15
1117µs11µsIO::Handle::::BEGIN@617 IO::Handle::BEGIN@617
4117µs7µsPerlIO::::get_layers PerlIO::get_layers (xsub)
1117µs7µsSpreadsheet::ParseXLSX::::BEGIN@5 Spreadsheet::ParseXLSX::BEGIN@5
1117µs7µsTest2::Event::Plan::::BEGIN@8 Test2::Event::Plan::BEGIN@8
1117µs7µsTest2::EventFacet::Error::::BEGIN@10 Test2::EventFacet::Error::BEGIN@10
1117µs7µsTest2::EventFacet::Parent::::BEGIN@9 Test2::EventFacet::Parent::BEGIN@9
1117µs20µsTest2::Hub::Subtest::::BEGIN@24 Test2::Hub::Subtest::BEGIN@24
1117µs389µsXML::Twig::Elt::::__ANON__[(eval 85)[XML/Twig.pm:7113]:1] XML::Twig::Elt::__ANON__[(eval 85)[XML/Twig.pm:7113]:1]
7117µs7µsXML::Twig::Elt::::set_keep_atts_order XML::Twig::Elt::set_keep_atts_order
1117µs7µsArchive::Zip::Archive::::BEGIN@16 Archive::Zip::Archive::BEGIN@16
7117µs7µsIO::Handle::::clearerr IO::Handle::clearerr (xsub)
1117µs7µsTest2::EventFacet::Info::::BEGIN@9 Test2::EventFacet::Info::BEGIN@9
1117µs7µsTest::Builder::TodoDiag::::BEGIN@7 Test::Builder::TodoDiag::BEGIN@7
1117µs7µsXML::Twig::Elt::::BEGIN@8404 XML::Twig::Elt::BEGIN@8404
1117µs7µsArchive::Zip::ZipFileMember::::BEGIN@6 Archive::Zip::ZipFileMember::BEGIN@6
1117µs7µsCarp::Heavy::::BEGIN@3 Carp::Heavy::BEGIN@3
1117µs7µsTest2::API::::BEGIN@8 Test2::API::BEGIN@8
1117µs7µsTest2::Event::Note::::BEGIN@8 Test2::Event::Note::BEGIN@8
1117µs7µsTest2::Event::Subtest::::BEGIN@7 Test2::Event::Subtest::BEGIN@7
1117µs22µsTest2::EventFacet::::BEGIN@3 Test2::EventFacet::BEGIN@3
1117µs21µsTest2::Formatter::TAP::::BEGIN@3 Test2::Formatter::TAP::BEGIN@3
1117µs7µsTest2::Util::ExternalMeta::::BEGIN@13 Test2::Util::ExternalMeta::BEGIN@13
1117µs147µsXML::Twig::::BEGIN@1 XML::Twig::BEGIN@1
1117µs27µsXML::Twig::::BEGIN@1.52 XML::Twig::BEGIN@1.52
1117µs11µsXML::Twig::::BEGIN@3587 XML::Twig::BEGIN@3587
6117µs7µsXML::Twig::Elt::::__ANON__[(eval 59)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 59)[XML/Twig.pm:5871]:1]
7117µs7µsXML::Twig::Elt::::set_do_not_escape_amp_in_atts XML::Twig::Elt::set_do_not_escape_amp_in_atts
1116µs6µsArchive::Zip::DirectoryMember::::BEGIN@8 Archive::Zip::DirectoryMember::BEGIN@8
1116µs7µsEncode::Encoding::::BEGIN@12 Encode::Encoding::BEGIN@12
1116µs7µsFcntl::::O_EXLOCK Fcntl::O_EXLOCK
1116µs6µsFile::Basename::::BEGIN@42 File::Basename::BEGIN@42
1116µs8µsStorable::::BEGIN@487 Storable::BEGIN@487
1116µs38µsTest2::EventFacet::Parent::::BEGIN@7 Test2::EventFacet::Parent::BEGIN@7
1116µs11µsURI::::BEGIN@180 URI::BEGIN@180
1116µs10µsXML::Twig::::BEGIN@4159 XML::Twig::BEGIN@4159
7116µs6µsXML::Twig::::_set_fh_to_twig_output_fh XML::Twig::_set_fh_to_twig_output_fh
1116µs6µsArchive::Zip::::BEGIN@16 Archive::Zip::BEGIN@16
1116µs6µsArchive::Zip::FileMember::::BEGIN@6 Archive::Zip::FileMember::BEGIN@6
21316µs6µsArchive::Zip::Member::::_readDataRemaining Archive::Zip::Member::_readDataRemaining
1116µs6µsArchive::Zip::StringMember::::BEGIN@6 Archive::Zip::StringMember::BEGIN@6
1116µs11µsCarp::::BEGIN@256 Carp::BEGIN@256
2216µs21µsTest2::API::Instance::::__ANON__[Test2/API/Instance.pm:60] Test2::API::Instance::__ANON__[Test2/API/Instance.pm:60]
1116µs6µsTest2::Event::Bail::::BEGIN@8 Test2::Event::Bail::BEGIN@8
1116µs6µsTest2::Event::Diag::::BEGIN@8 Test2::Event::Diag::BEGIN@8
1116µs11µsTest::Builder::::BEGIN@1518 Test::Builder::BEGIN@1518
1116µs20µsXML::Twig::::BEGIN@1.57 XML::Twig::BEGIN@1.57
1116µs17µsXML::Twig::::BEGIN@1.58 XML::Twig::BEGIN@1.58
1116µs17µsXML::Twig::::BEGIN@1.64 XML::Twig::BEGIN@1.64
1116µs17µsXML::Twig::::BEGIN@1.65 XML::Twig::BEGIN@1.65
1116µs16µsXML::Twig::::BEGIN@1.66 XML::Twig::BEGIN@1.66
1116µs7µsTest2::Event::Fail::::BEGIN@7 Test2::Event::Fail::BEGIN@7
1116µs6µsTest2::Event::V2::::BEGIN@10 Test2::Event::V2::BEGIN@10
1116µs6µsTest2::Hub::Subtest::::BEGIN@7 Test2::Hub::Subtest::BEGIN@7
1116µs6µsTest2::Util::::BEGIN@206 Test2::Util::BEGIN@206
1116µs17µsXML::Twig::::BEGIN@1.46 XML::Twig::BEGIN@1.46
1116µs18µsXML::Twig::Elt::::BEGIN@1.3 XML::Twig::Elt::BEGIN@1.3
1116µs6µsXML::Twig::Elt::::BEGIN@8906 XML::Twig::Elt::BEGIN@8906
1116µs10µsconstant::::BEGIN@40 constant::BEGIN@40
1116µs6µsTest2::EventFacet::About::::BEGIN@7 Test2::EventFacet::About::BEGIN@7
1116µs6µsTest2::EventFacet::Amnesty::::BEGIN@9 Test2::EventFacet::Amnesty::BEGIN@9
1116µs6µsTest2::EventFacet::Assert::::BEGIN@7 Test2::EventFacet::Assert::BEGIN@7
1116µs6µsTest2::EventFacet::Meta::::BEGIN@7 Test2::EventFacet::Meta::BEGIN@7
1116µs10µsTest::Builder::::BEGIN@1251 Test::Builder::BEGIN@1251
1116µs29µsTest::More::::BEGIN@1408 Test::More::BEGIN@1408
1116µs16µsXML::Twig::::BEGIN@1.54 XML::Twig::BEGIN@1.54
1116µs10µsXML::Twig::::BEGIN@3852 XML::Twig::BEGIN@3852
1116µs17µsXML::Twig::Elt::::BEGIN@1.16 XML::Twig::Elt::BEGIN@1.16
1116µs17µsXML::Twig::Elt::::BEGIN@1.47 XML::Twig::Elt::BEGIN@1.47
1116µs16µsXML::Twig::Elt::::BEGIN@1.71 XML::Twig::Elt::BEGIN@1.71
1116µs6µsEncode::Encoding::::BEGIN@10 Encode::Encoding::BEGIN@10
1116µs10µsSymbol::::BEGIN@137 Symbol::BEGIN@137
1116µs17µsXML::Twig::::BEGIN@1.53 XML::Twig::BEGIN@1.53
1116µs16µsXML::Twig::::BEGIN@1.69 XML::Twig::BEGIN@1.69
1116µs16µsXML::Twig::Elt::::BEGIN@1.14 XML::Twig::Elt::BEGIN@1.14
1116µs18µsXML::Twig::Elt::::BEGIN@1.44 XML::Twig::Elt::BEGIN@1.44
2216µs6µsXML::Twig::::_reset_handlers XML::Twig::_reset_handlers
1116µs28µsArchive::Zip::Archive::::BEGIN@10 Archive::Zip::Archive::BEGIN@10
1116µs11µsCarp::::BEGIN@188 Carp::BEGIN@188
1116µs7µsErrno::::_tie_it Errno::_tie_it
1116µs6µsSpreadsheet::ParseExcel::::BEGIN@19 Spreadsheet::ParseExcel::BEGIN@19
1116µs10µsSymbol::::BEGIN@156 Symbol::BEGIN@156
3226µs491µsTest2::API::::test2_load Test2::API::test2_load
1116µs449µsTest::Builder::::__ANON__[Test/Builder.pm:148] Test::Builder::__ANON__[Test/Builder.pm:148]
1116µs11µsTime::HiRes::::BEGIN@70 Time::HiRes::BEGIN@70
1116µs17µsXML::Twig::::BEGIN@1.62 XML::Twig::BEGIN@1.62
1116µs17µsXML::Twig::::BEGIN@1.63 XML::Twig::BEGIN@1.63
1116µs16µsXML::Twig::Elt::::BEGIN@1.48 XML::Twig::Elt::BEGIN@1.48
1116µs8µsCarp::::BEGIN@4 Carp::BEGIN@4
1116µs27µsFile::Spec::Unix::::BEGIN@124 File::Spec::Unix::BEGIN@124
1116µs20µsSpreadsheet::ParseExcel::Cell::::BEGIN@20 Spreadsheet::ParseExcel::Cell::BEGIN@20
1116µs19µsTest2::Event::Plan::::init Test2::Event::Plan::init
1116µs301µsTest2::Hub::::BEGIN@15 Test2::Hub::BEGIN@15
1116µs8µsTest2::Util::::_can_thread Test2::Util::_can_thread
1116µs16µsXML::Twig::::BEGIN@1.68 XML::Twig::BEGIN@1.68
1116µs16µsXML::Twig::Elt::::BEGIN@1.10 XML::Twig::Elt::BEGIN@1.10
1116µs20µsXML::Twig::Elt::::BEGIN@1.19 XML::Twig::Elt::BEGIN@1.19
1116µs16µsXML::Twig::Elt::::BEGIN@1.34 XML::Twig::Elt::BEGIN@1.34
1116µs16µsXML::Twig::Elt::::BEGIN@1.35 XML::Twig::Elt::BEGIN@1.35
1116µs11µsCarp::::BEGIN@73 Carp::BEGIN@73
1116µs6µsEncode::::BEGIN@11 Encode::BEGIN@11
1116µs21µsExporter::Heavy::::BEGIN@202 Exporter::Heavy::BEGIN@202
1116µs6µsIO::Handle::::BEGIN@275 IO::Handle::BEGIN@275
1116µs945µsOLE::Storage_Lite::::BEGIN@1383 OLE::Storage_Lite::BEGIN@1383
1116µs10µsTest2::EventFacet::Meta::::BEGIN@30 Test2::EventFacet::Meta::BEGIN@30
1116µs16µsXML::Twig::::BEGIN@1.50 XML::Twig::BEGIN@1.50
1116µs16µsXML::Twig::::BEGIN@1.56 XML::Twig::BEGIN@1.56
1116µs16µsXML::Twig::::BEGIN@1.59 XML::Twig::BEGIN@1.59
1116µs16µsXML::Twig::::BEGIN@1.67 XML::Twig::BEGIN@1.67
1116µs16µsXML::Twig::Elt::::BEGIN@1.18 XML::Twig::Elt::BEGIN@1.18
1116µs16µsXML::Twig::Elt::::BEGIN@1.20 XML::Twig::Elt::BEGIN@1.20
1116µs16µsXML::Twig::Elt::::BEGIN@1.41 XML::Twig::Elt::BEGIN@1.41
4116µs6µsbase::::has_attr base::has_attr
1116µs6µsIO::::BEGIN@5 IO::BEGIN@5
1116µs25µsTest2::API::Stack::::BEGIN@10 Test2::API::Stack::BEGIN@10
1116µs20µsTest2::API::Stack::::BEGIN@81 Test2::API::Stack::BEGIN@81
1116µs6µsTest::Builder::::BEGIN@34 Test::Builder::BEGIN@34
1116µs16µsXML::Twig::::BEGIN@1.55 XML::Twig::BEGIN@1.55
1116µs16µsXML::Twig::::BEGIN@1.60 XML::Twig::BEGIN@1.60
1116µs16µsXML::Twig::Elt::::BEGIN@1.21 XML::Twig::Elt::BEGIN@1.21
1116µs15µsXML::Twig::Elt::::BEGIN@1.25 XML::Twig::Elt::BEGIN@1.25
1116µs16µsXML::Twig::Elt::::BEGIN@1.33 XML::Twig::Elt::BEGIN@1.33
1116µs15µsXML::Twig::Elt::::BEGIN@1.45 XML::Twig::Elt::BEGIN@1.45
1116µs15µsXML::Twig::Elt::::BEGIN@1.49 XML::Twig::Elt::BEGIN@1.49
1116µs6µsXML::Twig::Elt::::BEGIN@6961 XML::Twig::Elt::BEGIN@6961
1116µs10µsFile::Spec::Unix::::BEGIN@167 File::Spec::Unix::BEGIN@167
1116µs6µsJSON::::BEGIN@7 JSON::BEGIN@7
1116µs7µsJSON::PP::IncrParser::::BEGIN@1547 JSON::PP::IncrParser::BEGIN@1547
1116µs30µsSpreadsheet::ParseExcel::::BEGIN@58 Spreadsheet::ParseExcel::BEGIN@58
1116µs77µsTest2::Formatter::TAP::::BEGIN@9 Test2::Formatter::TAP::BEGIN@9
1116µs15µsXML::Twig::Elt::::BEGIN@1.12 XML::Twig::Elt::BEGIN@1.12
1116µs16µsXML::Twig::Elt::::BEGIN@1.22 XML::Twig::Elt::BEGIN@1.22
1116µs18µsArchive::Zip::::BEGIN@221 Archive::Zip::BEGIN@221
1116µs467µsEncode::UTF_EBCDIC::::BEGIN@178 Encode::UTF_EBCDIC::BEGIN@178
1116µs23µsFile::Temp::Dir::::BEGIN@2601 File::Temp::Dir::BEGIN@2601
1116µs18µsJSON::PP::::BEGIN@46 JSON::PP::BEGIN@46
1116µs10µsList::Util::::BEGIN@35 List::Util::BEGIN@35
1116µs7µsOLE::Storage_Lite::PPS::File::::BEGIN@713 OLE::Storage_Lite::PPS::File::BEGIN@713
1116µs18µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@625 Spreadsheet::ParseExcel::Worksheet::BEGIN@625
1116µs133µsStorable::::BEGIN@109 Storable::BEGIN@109
1116µs40µsTest2::Event::V2::::BEGIN@17 Test2::Event::V2::BEGIN@17
3116µs6µsTest2::Event::::add_hub Test2::Event::add_hub
1116µs9µsTest::Builder::::BEGIN@1556 Test::Builder::BEGIN@1556
1116µs15µsXML::Twig::::BEGIN@1.61 XML::Twig::BEGIN@1.61
1116µs9µsXML::Twig::::BEGIN@3619 XML::Twig::BEGIN@3619
1116µs9µsXML::Twig::::BEGIN@3648 XML::Twig::BEGIN@3648
1116µs16µsXML::Twig::Elt::::BEGIN@1.13 XML::Twig::Elt::BEGIN@1.13
1116µs16µsXML::Twig::Elt::::BEGIN@1.23 XML::Twig::Elt::BEGIN@1.23
1116µs15µsXML::Twig::Elt::::BEGIN@1.37 XML::Twig::Elt::BEGIN@1.37
6425µs5µsScalar::Util::::reftype Scalar::Util::reftype (xsub)
1115µs6µsFile::Copy::::BEGIN@16 File::Copy::BEGIN@16
1115µs26µsIO::Seekable::::BEGIN@103 IO::Seekable::BEGIN@103
1115µs7µsOLE::Storage_Lite::PPS::Dir::::BEGIN@801 OLE::Storage_Lite::PPS::Dir::BEGIN@801
1115µs18µsSpreadsheet::ParseExcel::Workbook::::BEGIN@189 Spreadsheet::ParseExcel::Workbook::BEGIN@189
1115µs59µsTest2::Event::Exception::::BEGIN@9 Test2::Event::Exception::BEGIN@9
1115µs31µsTest2::EventFacet::Parent::::BEGIN@3 Test2::EventFacet::Parent::BEGIN@3
1115µs21µsTest::Builder::::BEGIN@684 Test::Builder::BEGIN@684
1115µs27µsXML::Parser::ExpatNB::::BEGIN@600 XML::Parser::ExpatNB::BEGIN@600
1115µs15µsXML::Twig::::BEGIN@1.51 XML::Twig::BEGIN@1.51
1115µs18µsXML::Twig::::BEGIN@812 XML::Twig::BEGIN@812
1115µs15µsXML::Twig::Elt::::BEGIN@1.30 XML::Twig::Elt::BEGIN@1.30
1115µs16µsXML::Twig::Elt::::BEGIN@1.42 XML::Twig::Elt::BEGIN@1.42
1115µs16µsXML::Twig::Elt::::BEGIN@1.43 XML::Twig::Elt::BEGIN@1.43
1115µs15µsXML::Twig::Elt::::BEGIN@1.72 XML::Twig::Elt::BEGIN@1.72
1115µs19µsJSON::PP::::BEGIN@1285 JSON::PP::BEGIN@1285
1115µs7µsOLE::Storage_Lite::PPS::Root::::BEGIN@168 OLE::Storage_Lite::PPS::Root::BEGIN@168
1115µs11µsSymbol::::BEGIN@103 Symbol::BEGIN@103
1115µs64µsTest2::Event::Ok::::BEGIN@9 Test2::Event::Ok::BEGIN@9
1115µs77µsTest2::EventFacet::Parent::::BEGIN@10 Test2::EventFacet::Parent::BEGIN@10
1115µs19µsTest::Builder::::BEGIN@1057 Test::Builder::BEGIN@1057
1115µs6µsXML::Twig::::BEGIN@4649 XML::Twig::BEGIN@4649
1115µs15µsXML::Twig::Elt::::BEGIN@1.17 XML::Twig::Elt::BEGIN@1.17
1115µs14µsXML::Twig::Elt::::BEGIN@1.27 XML::Twig::Elt::BEGIN@1.27
1115µs15µsXML::Twig::Elt::::BEGIN@1.29 XML::Twig::Elt::BEGIN@1.29
1115µs15µsXML::Twig::Elt::::BEGIN@1.9 XML::Twig::Elt::BEGIN@1.9
1115µs5µsCarp::::BEGIN@296 Carp::BEGIN@296
1115µs9µsCompress::Raw::Zlib::::BEGIN@121 Compress::Raw::Zlib::BEGIN@121
1115µs6µsFcntl::::O_TEMPORARY Fcntl::O_TEMPORARY
1115µs32µsFile::Temp::::BEGIN@216 File::Temp::BEGIN@216
2225µs13µsIO::Handle::::close IO::Handle::close
1115µs19µsJSON::PP::::BEGIN@493 JSON::PP::BEGIN@493
5425µs5µsTest2::Hub::::format Test2::Hub::format
1115µs17µsTest2::Util::::BEGIN@113 Test2::Util::BEGIN@113
1115µs9µsTest::Builder::::BEGIN@1539 Test::Builder::BEGIN@1539
1115µs18µsTest::Builder::::BEGIN@797 Test::Builder::BEGIN@797
1115µs34µsTest::More::::BEGIN@1783 Test::More::BEGIN@1783
1115µs8µsXML::Twig::::BEGIN@4211 XML::Twig::BEGIN@4211
1115µs8µsXML::Twig::::BEGIN@4246 XML::Twig::BEGIN@4246
1115µs14µsXML::Twig::Elt::::BEGIN@1.24 XML::Twig::Elt::BEGIN@1.24
1115µs15µsXML::Twig::Elt::::BEGIN@1.39 XML::Twig::Elt::BEGIN@1.39
1115µs9µsparent::::BEGIN@21 parent::BEGIN@21
1115µs18µsArchive::Zip::::BEGIN@236 Archive::Zip::BEGIN@236
1115µs5µsCarp::::BEGIN@49 Carp::BEGIN@49
1115µs5µsConfig::::launcher Config::launcher
1115µs19µsDigest::SHA::::BEGIN@9 Digest::SHA::BEGIN@9
1115µs19µsScalar::Util::::BEGIN@10 Scalar::Util::BEGIN@10
1115µs18µsSpreadsheet::ParseExcel::::BEGIN@2705 Spreadsheet::ParseExcel::BEGIN@2705
1115µs17µsSpreadsheet::ParseExcel::::BEGIN@66 Spreadsheet::ParseExcel::BEGIN@66
1115µs52µsSpreadsheet::ParseXLSX::Decryptor::Standard::::BEGIN@10Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@10
1115µs27µsTest2::API::::BEGIN@102 Test2::API::BEGIN@102
1115µs18µsTest2::API::::BEGIN@71 Test2::API::BEGIN@71
1115µs133µsTest2::API::Context::::BEGIN@26 Test2::API::Context::BEGIN@26
1115µs8µsTest2::API::Instance::::add_post_load_callback Test2::API::Instance::add_post_load_callback
1115µs23µsTest2::EventFacet::::BEGIN@8 Test2::EventFacet::BEGIN@8
1115µs9µsTest::Builder::::BEGIN@102 Test::Builder::BEGIN@102
1115µs18µsTest::Builder::::BEGIN@1167 Test::Builder::BEGIN@1167
1115µs15µsXML::Twig::Elt::::BEGIN@1.11 XML::Twig::Elt::BEGIN@1.11
1115µs15µsXML::Twig::Elt::::BEGIN@1.31 XML::Twig::Elt::BEGIN@1.31
7115µs5µsXML::Twig::Elt::::set_remove_cdata XML::Twig::Elt::set_remove_cdata
1115µs8µsconstant::::BEGIN@141 constant::BEGIN@141
1115µs9µsConfig::::BEGIN@47 Config::BEGIN@47
1115µs7µsDigest::SHA::::BEGIN@10 Digest::SHA::BEGIN@10
1115µs18µsEncode::XS::::BEGIN@210 Encode::XS::BEGIN@210
1115µs5µsFile::Basename::::BEGIN@51 File::Basename::BEGIN@51
1115µs8µsFile::Temp::::BEGIN@270 File::Temp::BEGIN@270
1115µs19µsJSON::PP::::BEGIN@209 JSON::PP::BEGIN@209
1115µs18µsTest2::API::Context::::BEGIN@72 Test2::API::Context::BEGIN@72
1115µs6µsTest2::API::::_context_release_callbacks_ref Test2::API::_context_release_callbacks_ref
1115µs71µsTest2::Event::::BEGIN@10 Test2::Event::BEGIN@10
1115µs38µsTest2::Event::::BEGIN@7 Test2::Event::BEGIN@7
1115µs19µsTest2::Event::Ok::::BEGIN@22 Test2::Event::Ok::BEGIN@22
1115µs20µsTest2::Util::::BEGIN@72 Test2::Util::BEGIN@72
1115µs9µsTest2::Util::HashBase::::BEGIN@37 Test2::Util::HashBase::BEGIN@37
1115µs1.71msTest2::Util::::_check_for_sig_sys Test2::Util::_check_for_sig_sys
1115µs51µsTest::Builder::Formatter::::BEGIN@9 Test::Builder::Formatter::BEGIN@9
1115µs9µsTest::Builder::Formatter::::plan_tap Test::Builder::Formatter::plan_tap
1115µs24µsXML::Twig::::BEGIN@29 XML::Twig::BEGIN@29
7315µs5µsXML::Twig::Elt::::__ANON__[(eval 71)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 71)[XML/Twig.pm:5871]:1] (merge of 2 subs)
1115µs6µsCrypt::Mode::ECB::::BEGIN@9 Crypt::Mode::ECB::BEGIN@9
1115µs80µsFile::Copy::::BEGIN@1 File::Copy::BEGIN@1
1115µs37µsFile::Spec::Unix::::BEGIN@231 File::Spec::Unix::BEGIN@231
1115µs6µsJSON::PP::IncrParser::::BEGIN@1485 JSON::PP::IncrParser::BEGIN@1485
1115µs7.39msJSON::::_load_pp JSON::_load_pp
1115µs152µsOLE::Storage_Lite::PPS::Root::::BEGIN@171 OLE::Storage_Lite::PPS::Root::BEGIN@171
1115µs18µsTest2::EventFacet::Meta::::BEGIN@12 Test2::EventFacet::Meta::BEGIN@12
1115µs18µsTest2::Hub::Interceptor::::BEGIN@93 Test2::Hub::Interceptor::BEGIN@93
1115µs8µsTest::Builder::::BEGIN@116 Test::Builder::BEGIN@116
1115µs12µsTest::Builder::::BEGIN@20 Test::Builder::BEGIN@20
1115µs9µsTest::Builder::::BEGIN@61 Test::Builder::BEGIN@61
7115µs5µsArchive::Zip::Member::::isEncrypted Archive::Zip::Member::isEncrypted
1115µs8µsCarp::::BEGIN@751 Carp::BEGIN@751
1115µs30µsFile::Spec::Unix::::BEGIN@115 File::Spec::Unix::BEGIN@115
1115µs16µsSpreadsheet::ParseXLSX::::BEGIN@13 Spreadsheet::ParseXLSX::BEGIN@13
1115µs5µsSpreadsheet::ParseXLSX::::_base_path_for Spreadsheet::ParseXLSX::_base_path_for
1115µs26µsTest2::API::Context::::BEGIN@8 Test2::API::Context::BEGIN@8
1115µs8µsTest2::API::::test2_formatter_add Test2::API::test2_formatter_add
1115µs8µsXML::Twig::::BEGIN@4175 XML::Twig::BEGIN@4175
1115µs21µsArchive::Zip::Archive::::BEGIN@14 Archive::Zip::Archive::BEGIN@14
1115µs29µsFile::Path::::BEGIN@6 File::Path::BEGIN@6
1115µs23µsSpreadsheet::ParseExcel::::BEGIN@22 Spreadsheet::ParseExcel::BEGIN@22
1115µs25µsTest2::API::Context::::BEGIN@25 Test2::API::Context::BEGIN@25
1115µs6µsTest2::API::::test2_stack Test2::API::test2_stack
1115µs17µsTest2::Event::Subtest::::BEGIN@20 Test2::Event::Subtest::BEGIN@20
1115µs117µsTest2::EventFacet::Trace::::BEGIN@13 Test2::EventFacet::Trace::BEGIN@13
1115µs14µsXML::Twig::Elt::::BEGIN@1.40 XML::Twig::Elt::BEGIN@1.40
1115µs8µsconstant::::BEGIN@90 constant::BEGIN@90
1115µs25µsCrypt::Cipher::::BEGIN@7 Crypt::Cipher::BEGIN@7
1115µs7µsSymbol::::BEGIN@167 Symbol::BEGIN@167
1115µs22µsTest2::Event::Ok::::BEGIN@3 Test2::Event::Ok::BEGIN@3
1115µs96µsTest2::EventFacet::Hub::::BEGIN@11 Test2::EventFacet::Hub::BEGIN@11
1115µs61µsTest2::EventFacet::Info::::BEGIN@10 Test2::EventFacet::Info::BEGIN@10
1115µs18µsURI::Escape::::BEGIN@191 URI::Escape::BEGIN@191
1115µs14µsXML::Twig::Elt::::BEGIN@1.26 XML::Twig::Elt::BEGIN@1.26
1115µs9µsoverload::::BEGIN@113 overload::BEGIN@113
1114µs23µsArchive::Zip::::BEGIN@275 Archive::Zip::BEGIN@275
1114µs24µsFile::Glob::::BEGIN@50 File::Glob::BEGIN@50
1114µs6µsFile::Temp::::BEGIN@145 File::Temp::BEGIN@145
1114µs8µsFileHandle::::BEGIN@46 FileHandle::BEGIN@46
1114µs6µsIO::File::::BEGIN@120 IO::File::BEGIN@120
1114µs17µsJSON::PP::::BEGIN@1471 JSON::PP::BEGIN@1471
1114µs16µsTest2::Formatter::TAP::::BEGIN@113 Test2::Formatter::TAP::BEGIN@113
1114µs16µsTest2::Hub::Subtest::::BEGIN@47 Test2::Hub::Subtest::BEGIN@47
1114µs8µsbase::::BEGIN@4 base::BEGIN@4
3314µs4µsutf8::::unimport utf8::unimport
1114µs249µsArchive::Zip::Archive::::BEGIN@21 Archive::Zip::Archive::BEGIN@21
11114µs4µsArchive::Zip::Archive::::eocdOffset Archive::Zip::Archive::eocdOffset
1114µs16µsCarp::::BEGIN@744 Carp::BEGIN@744
1114µs28µsFile::Spec::Unix::::BEGIN@209 File::Spec::Unix::BEGIN@209
1114µs8µsFile::Temp::::BEGIN@240 File::Temp::BEGIN@240
1114µs6µsIO::Handle::::BEGIN@272 IO::Handle::BEGIN@272
1114µs23µsJSON::PP::::BEGIN@15 JSON::PP::BEGIN@15
1114µs6µsOLE::Storage_Lite::::BEGIN@828 OLE::Storage_Lite::BEGIN@828
1114µs10µsSpreadsheet::ParseExcel::::BEGIN@24 Spreadsheet::ParseExcel::BEGIN@24
1114µs21µsTest2::API::Context::::BEGIN@10 Test2::API::Context::BEGIN@10
1114µs21µsTest2::Event::Plan::::BEGIN@11 Test2::Event::Plan::BEGIN@11
1114µs12µsTest2::Formatter::::import Test2::Formatter::import
1114µs31µsTest2::Util::::BEGIN@9 Test2::Util::BEGIN@9
1114µs27µsURI::::BEGIN@9 URI::BEGIN@9
3334µs4µsinteger::::import integer::import
1114µs27µsArchive::Zip::::BEGIN@185 Archive::Zip::BEGIN@185
1114µs18µsArchive::Zip::Member::::BEGIN@29 Archive::Zip::Member::BEGIN@29
1114µs8µsFile::Path::::BEGIN@29 File::Path::BEGIN@29
1114µs35µsJSON::PP::::BEGIN@25 JSON::PP::BEGIN@25
1114µs22µsOLE::Storage_Lite::::BEGIN@832 OLE::Storage_Lite::BEGIN@832
1114µs35µsTest2::API::Instance::::BEGIN@11 Test2::API::Instance::BEGIN@11
1114µs19µsTest2::Formatter::TAP::::BEGIN@7 Test2::Formatter::TAP::BEGIN@7
1114µs82µsTest2::Formatter::TAP::::init Test2::Formatter::TAP::init
1114µs19µsTest::Builder::::BEGIN@120 Test::Builder::BEGIN@120
1114µs14µsTest::Builder::::BEGIN@131 Test::Builder::BEGIN@131
1114µs26µsTest::Builder::::BEGIN@693 Test::Builder::BEGIN@693
1114µs16µsTest::More::::BEGIN@1494 Test::More::BEGIN@1494
1114µs14µsXML::Twig::::BEGIN@38 XML::Twig::BEGIN@38
1114µs4µsXML::Twig::Elt::::BEGIN@7340 XML::Twig::Elt::BEGIN@7340
7114µs4µsCompress::Raw::Zlib::::constant Compress::Raw::Zlib::constant (xsub)
1114µs31µsDigest::SHA::::BEGIN@7 Digest::SHA::BEGIN@7
1114µs4µsFile::Basename::::BEGIN@371 File::Basename::BEGIN@371
1114µs8µsFile::Find::::BEGIN@7 File::Find::BEGIN@7
1114µs20µsList::Util::::BEGIN@10 List::Util::BEGIN@10
1114µs21µsSpreadsheet::ParseExcel::Workbook::::BEGIN@20 Spreadsheet::ParseExcel::Workbook::BEGIN@20
1114µs19µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@21 Spreadsheet::ParseExcel::Worksheet::BEGIN@21
1114µs19µsTest2::API::Context::::BEGIN@9 Test2::API::Context::BEGIN@9
1114µs24µsTest2::API::Instance::::BEGIN@8 Test2::API::Instance::BEGIN@8
1114µs16µsTest2::EventFacet::Trace::::BEGIN@16 Test2::EventFacet::Trace::BEGIN@16
1114µs4µsTest2::Hub::::pre_filter Test2::Hub::pre_filter
1114µs10µsXML::Twig::::BEGIN@33 XML::Twig::BEGIN@33
1114µs8µsconstant::::BEGIN@65 constant::BEGIN@65
1114µs17µsoverload::::BEGIN@102 overload::BEGIN@102
1114µs21µsArchive::Zip::::BEGIN@14 Archive::Zip::BEGIN@14
1114µs22µsArchive::Zip::StringMember::::BEGIN@4 Archive::Zip::StringMember::BEGIN@4
1114µs27µsEncode::Alias::::BEGIN@5 Encode::Alias::BEGIN@5
1114µs20µsEncode::Encoding::::BEGIN@5 Encode::Encoding::BEGIN@5
1114µs9µsFcntl::::BEGIN@60 Fcntl::BEGIN@60
1114µs6µsJSON::PP::::BEGIN@6 JSON::PP::BEGIN@6
1114µs25µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@4 Spreadsheet::ParseXLSX::Decryptor::BEGIN@4
1114µs27µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313] Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313]
1114µs24µsTest2::Event::::BEGIN@11 Test2::Event::BEGIN@11
1114µs95µsTest2::Event::Subtest::::BEGIN@8 Test2::Event::Subtest::BEGIN@8
1114µs21µsTest2::Event::V2::::BEGIN@7 Test2::Event::V2::BEGIN@7
1114µs68µsTest2::EventFacet::Plan::::BEGIN@8 Test2::EventFacet::Plan::BEGIN@8
1114µs45µsTest2::Hub::Interceptor::::BEGIN@11 Test2::Hub::Interceptor::BEGIN@11
1114µs76µsTest2::Hub::Subtest::::BEGIN@8 Test2::Hub::Subtest::BEGIN@8
1114µs20µsTest2::Hub::Subtest::::BEGIN@9 Test2::Hub::Subtest::BEGIN@9
1114µs6µsTest::More::::BEGIN@4 Test::More::BEGIN@4
1114µs6µsTime::HiRes::::BEGIN@4 Time::HiRes::BEGIN@4
1114µs20µsURI::::BEGIN@4 URI::BEGIN@4
1114µs21µsXML::Twig::::BEGIN@31 XML::Twig::BEGIN@31
1114µs5µsArchive::Zip::::BEGIN@4 Archive::Zip::BEGIN@4
1114µs4µsCarp::::_univ_mod_loaded Carp::_univ_mod_loaded
1114µs8µsExporter::Heavy::::BEGIN@4 Exporter::Heavy::BEGIN@4
1114µs15µsJSON::PP::::BEGIN@515 JSON::PP::BEGIN@515
1114µs66µsOLE::Storage_Lite::::BEGIN@830 OLE::Storage_Lite::BEGIN@830
1114µs11µsOLE::Storage_Lite::PPS::Root::::BEGIN@170 OLE::Storage_Lite::PPS::Root::BEGIN@170
6614µs4µsSpreadsheet::ParseExcel::::__ANON__ Spreadsheet::ParseExcel::__ANON__ (xsub)
1114µs18µsTest2::API::::BEGIN@103 Test2::API::BEGIN@103
1114µs18µsTest2::API::::BEGIN@6 Test2::API::BEGIN@6
1114µs21µsTest2::API::Context::::BEGIN@3 Test2::API::Context::BEGIN@3
1114µs28µsTest2::API::Instance::::BEGIN@63 Test2::API::Instance::BEGIN@63
1114µs16µsTest2::Util::::BEGIN@80 Test2::Util::BEGIN@80
1114µs16µsTest2::Util::::BEGIN@89 Test2::Util::BEGIN@89
1114µs15µsTest2::Util::HashBase::::BEGIN@18 Test2::Util::HashBase::BEGIN@18
1114µs21µsArchive::Zip::Archive::::BEGIN@11 Archive::Zip::Archive::BEGIN@11
1114µs22µsArchive::Zip::FileMember::::BEGIN@4 Archive::Zip::FileMember::BEGIN@4
1114µs19µsArchive::Zip::Member::::BEGIN@30 Archive::Zip::Member::BEGIN@30
7114µs4µsArchive::Zip::ZipFileMember::::dataOffset Archive::Zip::ZipFileMember::dataOffset
1114µs5µsCompress::Raw::Zlib::::BEGIN@8 Compress::Raw::Zlib::BEGIN@8
1114µs22µsCryptX::::BEGIN@10 CryptX::BEGIN@10
1114µs20µsEncode::Config::::BEGIN@8 Encode::Config::BEGIN@8
1114µs25µsEncode::Encoding::::BEGIN@14 Encode::Encoding::BEGIN@14
1114µs17µsEncode::utf8::::BEGIN@215 Encode::utf8::BEGIN@215
1114µs14µsExporter::Heavy::::heavy_export_tags Exporter::Heavy::heavy_export_tags
1114µs5µsFile::Find::::BEGIN@3 File::Find::BEGIN@3
1114µs18µsFile::Temp::::BEGIN@153 File::Temp::BEGIN@153
1114µs5µsFile::Temp::Dir::::BEGIN@2602 File::Temp::Dir::BEGIN@2602
1114µs5µsFileHandle::::BEGIN@4 FileHandle::BEGIN@4
1114µs24µsIO::Seekable::::BEGIN@98 IO::Seekable::BEGIN@98
1114µs60µsSpreadsheet::ParseExcel::::BEGIN@23 Spreadsheet::ParseExcel::BEGIN@23
1114µs21µsSpreadsheet::ParseExcel::Utility::::BEGIN@23 Spreadsheet::ParseExcel::Utility::BEGIN@23
1114µs16µsStorable::::BEGIN@66 Storable::BEGIN@66
1114µs14µsTest2::API::::BEGIN@76 Test2::API::BEGIN@76
1114µs44µsTest2::Event::Diag::::BEGIN@9 Test2::Event::Diag::BEGIN@9
1114µs57µsTest2::Event::Fail::::BEGIN@15 Test2::Event::Fail::BEGIN@15
1114µs57µsTest2::Event::Pass::::BEGIN@15 Test2::Event::Pass::BEGIN@15
1114µs53µsTest2::Event::Plan::::BEGIN@9 Test2::Event::Plan::BEGIN@9
1114µs24µsTest2::EventFacet::Trace::::BEGIN@9 Test2::EventFacet::Trace::BEGIN@9
3114µs4µsTest2::Util::ExternalMeta::::validate_key Test2::Util::ExternalMeta::validate_key
1114µs5µsTest::Builder::::BEGIN@4 Test::Builder::BEGIN@4
1114µs15µsTest::Builder::::INIT Test::Builder::INIT
1114µs28µsXML::Twig::::BEGIN@27 XML::Twig::BEGIN@27
1114µs5µsconstant::::BEGIN@3 constant::BEGIN@3
1114µs18µsoverload::::BEGIN@143 overload::BEGIN@143
1114µs240µsArchive::Zip::Member::::BEGIN@19 Archive::Zip::Member::BEGIN@19
1114µs122µsArchive::Zip::NewFileMember::::BEGIN@11 Archive::Zip::NewFileMember::BEGIN@11
1114µs21µsArchive::Zip::NewFileMember::::BEGIN@4 Archive::Zip::NewFileMember::BEGIN@4
1114µs22µsCompress::Raw::Zlib::::BEGIN@114 Compress::Raw::Zlib::BEGIN@114
1114µs15µsExporter::::export_tags Exporter::export_tags
1114µs5µsFile::Copy::::BEGIN@11 File::Copy::BEGIN@11
1114µs5µsFile::Path::::BEGIN@4 File::Path::BEGIN@4
1114µs17µsFile::Temp::::BEGIN@151 File::Temp::BEGIN@151
1114µs25µsFile::Temp::::BEGIN@219 File::Temp::BEGIN@219
1114µs23µsGraphics::ColorUtils::::BEGIN@8 Graphics::ColorUtils::BEGIN@8
1114µs25µsStorable::::BEGIN@42 Storable::BEGIN@42
1114µs63µsStorable::::BEGIN@83 Storable::BEGIN@83
1114µs21µsTest2::API::::BEGIN@3 Test2::API::BEGIN@3
1114µs52µsTest2::Event::Bail::::BEGIN@9 Test2::Event::Bail::BEGIN@9
1114µs57µsTest2::EventFacet::About::::BEGIN@8 Test2::EventFacet::About::BEGIN@8
1114µs44µsTest2::EventFacet::Trace::::BEGIN@10 Test2::EventFacet::Trace::BEGIN@10
1114µs26µsTest2::Hub::::BEGIN@8 Test2::Hub::BEGIN@8
1114µs5µsTest2::Util::Trace::::BEGIN@5 Test2::Util::Trace::BEGIN@5
1114µs6µsXML::Twig::::BEGIN@4181 XML::Twig::BEGIN@4181
1114µs22µsArchive::Zip::Archive::::BEGIN@6 Archive::Zip::Archive::BEGIN@6
1114µs19µsArchive::Zip::::BEGIN@205 Archive::Zip::BEGIN@205
1114µs16µsArchive::Zip::::new Archive::Zip::new
1114µs20µsDigest::SHA::::BEGIN@8 Digest::SHA::BEGIN@8
1114µs20µsDigest::base::::BEGIN@4 Digest::base::BEGIN@4
1114µs8µsExporter::::BEGIN@4 Exporter::BEGIN@4
1114µs5µsFile::Basename::::BEGIN@50 File::Basename::BEGIN@50
1114µs26µsFile::Temp::::BEGIN@146 File::Temp::BEGIN@146
1114µs25µsIO::File::::BEGIN@121 IO::File::BEGIN@121
1114µs19µsJSON::PP::Boolean::::BEGIN@4 JSON::PP::Boolean::BEGIN@4
1114µs21µsOLE::Storage_Lite::PPS::File::::BEGIN@714 OLE::Storage_Lite::PPS::File::BEGIN@714
1114µs22µsTest2::API::Instance::::BEGIN@3 Test2::API::Instance::BEGIN@3
1114µs16µsTest2::API::Instance::::BEGIN@9 Test2::API::Instance::BEGIN@9
1114µs73µsTest2::EventFacet::Control::::BEGIN@8 Test2::EventFacet::Control::BEGIN@8
1114µs17µsTest2::EventFacet::Trace::::BEGIN@11 Test2::EventFacet::Trace::BEGIN@11
1114µs4µsTest2::Util::::BEGIN@123 Test2::Util::BEGIN@123
1114µs19µsTest2::Util::ExternalMeta::::BEGIN@8 Test2::Util::ExternalMeta::BEGIN@8
1114µs19µsTest2::Util::Facets2Legacy::::BEGIN@3 Test2::Util::Facets2Legacy::BEGIN@3
1114µs22µsTest2::Util::Facets2Legacy::::BEGIN@7 Test2::Util::Facets2Legacy::BEGIN@7
1114µs14µsTest::Builder::::BEGIN@103 Test::Builder::BEGIN@103
1114µs14µsTest::Builder::::BEGIN@1540 Test::Builder::BEGIN@1540
1114µs20µsTest::Builder::Formatter::::BEGIN@3 Test::Builder::Formatter::BEGIN@3
1114µs24µsXML::Parser::::BEGIN@15 XML::Parser::BEGIN@15
2224µs4µsTest2::Event::::meta_facet_data Test2::Event::meta_facet_data
1114µs32µsArchive::Zip::DirectoryMember::::BEGIN@4 Archive::Zip::DirectoryMember::BEGIN@4
1114µs69µsArchive::Zip::FileMember::::BEGIN@11 Archive::Zip::FileMember::BEGIN@11
7114µs4µsArchive::Zip::Member::::compressedSize Archive::Zip::Member::compressedSize
1114µs22µsConfig::::BEGIN@10 Config::BEGIN@10
1114µs24µsExporter::Heavy::::heavy_export_ok_tags Exporter::Heavy::heavy_export_ok_tags
1114µs31µsFile::Path::::BEGIN@20 File::Path::BEGIN@20
1114µs5µsGraphics::ColorUtils::::BEGIN@5 Graphics::ColorUtils::BEGIN@5
1114µs5µsIO::Seekable::::BEGIN@99 IO::Seekable::BEGIN@99
1114µs18µsTest2::API::::BEGIN@104 Test2::API::BEGIN@104
1114µs26µsTest2::API::Instance::::import Test2::API::Instance::import
1114µs5µsTest2::API::::test2_init_done Test2::API::test2_init_done
1114µs20µsTest2::Event::Fail::::BEGIN@3 Test2::Event::Fail::BEGIN@3
1114µs20µsTest2::Event::Pass::::BEGIN@3 Test2::Event::Pass::BEGIN@3
1114µs20µsTest2::Event::V2::::BEGIN@3 Test2::Event::V2::BEGIN@3
1114µs50µsTest2::EventFacet::Error::::BEGIN@11 Test2::EventFacet::Error::BEGIN@11
1114µs21µsTest2::EventFacet::Plan::::BEGIN@3 Test2::EventFacet::Plan::BEGIN@3
1114µs4µsTest2::Formatter::TAP::::plan_tap Test2::Formatter::TAP::plan_tap
1114µs30µsTest2::Hub::::BEGIN@9 Test2::Hub::BEGIN@9
1114µs14µsTest2::Util::HashBase::::BEGIN@29 Test2::Util::HashBase::BEGIN@29
1114µs15µsTest::Builder::::BEGIN@62 Test::Builder::BEGIN@62
1114µs19µsvars::::BEGIN@7 vars::BEGIN@7
1114µs8µsvars::::BEGIN@8 vars::BEGIN@8
1114µs20µsArchive::Zip::DirectoryMember::::BEGIN@6 Archive::Zip::DirectoryMember::BEGIN@6
7114µs4µsArchive::Zip::ZipFileMember::::localHeaderRelativeOffset Archive::Zip::ZipFileMember::localHeaderRelativeOffset
1114µs24µsCompress::Raw::Zlib::::BEGIN@126 Compress::Raw::Zlib::BEGIN@126
1114µs21µsCompress::Raw::Zlib::::BEGIN@144 Compress::Raw::Zlib::BEGIN@144
1114µs7µsEncode::Alias::::BEGIN@7 Encode::Alias::BEGIN@7
1114µs25µsEncode::::BEGIN@7 Encode::BEGIN@7
1114µs5µsFile::Find::::BEGIN@13 File::Find::BEGIN@13
1114µs38µsJSON::PP::IncrParser::::BEGIN@1487 JSON::PP::IncrParser::BEGIN@1487
1114µs20µsJSON::PP::IncrParser::::BEGIN@1488 JSON::PP::IncrParser::BEGIN@1488
1114µs68µsJSON::::_load_xs JSON::_load_xs
1114µs24µsOLE::Storage_Lite::PPS::::BEGIN@13 OLE::Storage_Lite::PPS::BEGIN@13
1114µs19µsOLE::Storage_Lite::PPS::Root::::BEGIN@172 OLE::Storage_Lite::PPS::Root::BEGIN@172
1114µs19µsSpreadsheet::ParseExcel::::BEGIN@18 Spreadsheet::ParseExcel::BEGIN@18
1114µs18µsSpreadsheet::ParseXLSX::::BEGIN@2 Spreadsheet::ParseXLSX::BEGIN@2
1114µs21µsTest2::Event::Diag::::BEGIN@3 Test2::Event::Diag::BEGIN@3
1114µs41µsTest2::Event::Note::::BEGIN@9 Test2::Event::Note::BEGIN@9
1114µs20µsTest2::EventFacet::About::::BEGIN@3 Test2::EventFacet::About::BEGIN@3
1114µs43µsTest2::EventFacet::Amnesty::::BEGIN@10 Test2::EventFacet::Amnesty::BEGIN@10
1114µs49µsTest2::EventFacet::Assert::::BEGIN@8 Test2::EventFacet::Assert::BEGIN@8
1114µs4µsversion::::(bool version::(bool (xsub)
1113µs85µsArchive::Zip::DirectoryMember::::BEGIN@13 Archive::Zip::DirectoryMember::BEGIN@13
1113µs24µsArchive::Zip::Member::::BEGIN@33 Archive::Zip::Member::BEGIN@33
1113µs88µsArchive::Zip::StringMember::::BEGIN@11 Archive::Zip::StringMember::BEGIN@11
1113µs5µsErrno::::BEGIN@9 Errno::BEGIN@9
1113µs3µsFcntl::::O_NOFOLLOW Fcntl::O_NOFOLLOW (xsub)
1113µs23µsIO::::BEGIN@6 IO::BEGIN@6
1113µs19µsSpreadsheet::ParseExcel::::BEGIN@59 Spreadsheet::ParseExcel::BEGIN@59
1113µs19µsSpreadsheet::ParseXLSX::Cell::::BEGIN@4 Spreadsheet::ParseXLSX::Cell::BEGIN@4
1113µs48µsSpreadsheet::ParseXLSX::Decryptor::Agile::::BEGIN@10 Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10
1113µs16µsTest2::Event::::BEGIN@12 Test2::Event::BEGIN@12
1113µs20µsTest2::EventFacet::Hub::::BEGIN@3 Test2::EventFacet::Hub::BEGIN@3
1113µs13µsTest2::Hub::::BEGIN@11 Test2::Hub::BEGIN@11
1113µs24µsTime::Local::::BEGIN@34 Time::Local::BEGIN@34
7113µs3µsXML::Parser::Expat::::ParserRelease XML::Parser::Expat::ParserRelease (xsub)
6113µs3µsXML::Twig::Elt::::__ANON__[(eval 100)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 100)[XML/Twig.pm:5871]:1] (merge of 2 subs)
1113µs3µsbuiltin::::import builtin::import (xsub)
1113µs21µsArchive::Zip::Member::::BEGIN@6 Archive::Zip::Member::BEGIN@6
1113µs21µsArchive::Zip::ZipFileMember::::BEGIN@4 Archive::Zip::ZipFileMember::BEGIN@4
1113µs27µsCrypt::RC4::::BEGIN@16 Crypt::RC4::BEGIN@16
1113µs4µsDigest::Perl::MD5::::BEGIN@3 Digest::Perl::MD5::BEGIN@3
1113µs12µsExporter::::export_ok_tags Exporter::export_ok_tags
1113µs12µsFile::Copy::::BEGIN@12.1 File::Copy::BEGIN@12.1
1113µs10µsFile::Copy::::BEGIN@15 File::Copy::BEGIN@15
1113µs18µsFile::Temp::Dir::::BEGIN@2603 File::Temp::Dir::BEGIN@2603
1113µs18µsGraphics::ColorUtils::::BEGIN@6 Graphics::ColorUtils::BEGIN@6
1113µs27µsOLE::Storage_Lite::::BEGIN@829 OLE::Storage_Lite::BEGIN@829
1113µs19µsOLE::Storage_Lite::PPS::Dir::::BEGIN@802 OLE::Storage_Lite::PPS::Dir::BEGIN@802
1113µs17µsPOSIX::::BEGIN@3 POSIX::BEGIN@3
1113µs20µsSelectSaver::::BEGIN@39 SelectSaver::BEGIN@39
1113µs18µsSpreadsheet::ParseExcel::::BEGIN@76 Spreadsheet::ParseExcel::BEGIN@76
1113µs18µsSpreadsheet::ParseExcel::FmtDefault::::BEGIN@20 Spreadsheet::ParseExcel::FmtDefault::BEGIN@20
1113µs17µsTest2::Event::::BEGIN@8 Test2::Event::BEGIN@8
1113µs20µsTest2::Event::Bail::::BEGIN@3 Test2::Event::Bail::BEGIN@3
1113µs25µsTest2::Event::Exception::::BEGIN@3 Test2::Event::Exception::BEGIN@3
1113µs45µsTest2::Event::Skip::::BEGIN@9 Test2::Event::Skip::BEGIN@9
1113µs20µsTest2::Event::Waiting::::BEGIN@3 Test2::Event::Waiting::BEGIN@3
1113µs20µsTest2::Hub::::BEGIN@3 Test2::Hub::BEGIN@3
1113µs20µsTest2::Hub::Interceptor::::BEGIN@3 Test2::Hub::Interceptor::BEGIN@3
1113µs20µsTest2::Util::ExternalMeta::::BEGIN@3 Test2::Util::ExternalMeta::BEGIN@3
1113µs13µsTest::Builder::::BEGIN@1557 Test::Builder::BEGIN@1557
1113µs12µsTime::Local::::BEGIN@6 Time::Local::BEGIN@6
1113µs20µsmro::::BEGIN@11 mro::BEGIN@11
1113µs7µsoverload::::BEGIN@4 overload::BEGIN@4
2223µs158µsTest2::API::Stack::::top Test2::API::Stack::top
7113µs3µsArchive::Zip::Member::::_inflater Archive::Zip::Member::_inflater
1113µs21µsConfig::::BEGIN@6 Config::BEGIN@6
1113µs18µsCrypt::Mode::CBC::::BEGIN@6 Crypt::Mode::CBC::BEGIN@6
1113µs20µsFile::Basename::::BEGIN@52 File::Basename::BEGIN@52
1113µs19µsFile::Spec::Unix::::BEGIN@133 File::Spec::Unix::BEGIN@133
1113µs4µsIO::::BEGIN@7 IO::BEGIN@7
1113µs17µsJSON::PP::IncrParser::::BEGIN@1490 JSON::PP::IncrParser::BEGIN@1490
1113µs17µsSpreadsheet::ParseExcel::::BEGIN@60 Spreadsheet::ParseExcel::BEGIN@60
1113µs18µsSpreadsheet::ParseExcel::Font::::BEGIN@20 Spreadsheet::ParseExcel::Font::BEGIN@20
1113µs18µsSpreadsheet::ParseExcel::Format::::BEGIN@20 Spreadsheet::ParseExcel::Format::BEGIN@20
1113µs18µsSpreadsheet::ParseExcel::Worksheet::::BEGIN@20 Spreadsheet::ParseExcel::Worksheet::BEGIN@20
1113µs19µsSpreadsheet::ParseXLSX::::BEGIN@4 Spreadsheet::ParseXLSX::BEGIN@4
1113µs20µsTest2::Event::Skip::::BEGIN@3 Test2::Event::Skip::BEGIN@3
1113µs19µsTest2::EventFacet::Assert::::BEGIN@3 Test2::EventFacet::Assert::BEGIN@3
1113µs20µsTest2::EventFacet::Error::::BEGIN@3 Test2::EventFacet::Error::BEGIN@3
1113µs3µsTest2::EventFacet::Trace::::snapshot Test2::EventFacet::Trace::snapshot
1113µs18µsTest2::Formatter::::BEGIN@3 Test2::Formatter::BEGIN@3
1113µs20µsTest2::Hub::Subtest::::BEGIN@3 Test2::Hub::Subtest::BEGIN@3
1113µs3µsTest2::Util::::BEGIN@132 Test2::Util::BEGIN@132
1113µs3µsTest2::Util::::BEGIN@42 Test2::Util::BEGIN@42
1113µs17µsTest::Builder::::BEGIN@133 Test::Builder::BEGIN@133
1113µs86µsTest::Builder::Formatter::::init Test::Builder::Formatter::init
1113µs20µsTest::Builder::TodoDiag::::BEGIN@3 Test::Builder::TodoDiag::BEGIN@3
1113µs3µsXML::Twig::Notation::::BEGIN@5023 XML::Twig::Notation::BEGIN@5023
1113µs17µsbuiltin::::BEGIN@4 builtin::BEGIN@4
1113µs19µsCarp::::BEGIN@5 Carp::BEGIN@5
1113µs21µsCompress::Raw::Zlib::::BEGIN@130 Compress::Raw::Zlib::BEGIN@130
1113µs16µsCrypt::Cipher::::BEGIN@4 Crypt::Cipher::BEGIN@4
1113µs19µsEncode::MIME::Name::::BEGIN@3 Encode::MIME::Name::BEGIN@3
1113µs8µsFile::Copy::::BEGIN@17 File::Copy::BEGIN@17
1113µs19µsFile::Temp::::BEGIN@223 File::Temp::BEGIN@223
1113µs19µsJSON::PP::::BEGIN@39 JSON::PP::BEGIN@39
1113µs18µsJSON::PP::::BEGIN@48 JSON::PP::BEGIN@48
1113µs34µsSpreadsheet::ParseXLSX::Cell::::BEGIN@11 Spreadsheet::ParseXLSX::Cell::BEGIN@11
1113µs20µsTest2::Event::Note::::BEGIN@3 Test2::Event::Note::BEGIN@3
1113µs24µsTest2::Event::Waiting::::BEGIN@9 Test2::Event::Waiting::BEGIN@9
1113µs19µsTest2::EventFacet::Amnesty::::BEGIN@3 Test2::EventFacet::Amnesty::BEGIN@3
1113µs19µsTest2::EventFacet::Control::::BEGIN@3 Test2::EventFacet::Control::BEGIN@3
1113µs19µsTest2::EventFacet::Info::::BEGIN@3 Test2::EventFacet::Info::BEGIN@3
1113µs18µsTest2::Util::::BEGIN@3 Test2::Util::BEGIN@3
1113µs15µsTest2::Util::Facets2Legacy::::BEGIN@8 Test2::Util::Facets2Legacy::BEGIN@8
1113µs18µsTest2::Util::HashBase::::BEGIN@3 Test2::Util::HashBase::BEGIN@3
1113µs19µsTest::More::::BEGIN@5 Test::More::BEGIN@5
1113µs19µsArchive::Zip::::BEGIN@188 Archive::Zip::BEGIN@188
1113µs18µsCompress::Raw::Zlib::::BEGIN@127 Compress::Raw::Zlib::BEGIN@127
1113µs19µsCompress::Raw::Zlib::::BEGIN@146 Compress::Raw::Zlib::BEGIN@146
1113µs11µsDigest::Perl::MD5::::BEGIN@4 Digest::Perl::MD5::BEGIN@4
1113µs20µsFile::Copy::::BEGIN@12 File::Copy::BEGIN@12
1113µs11µsJSON::::BEGIN@6 JSON::BEGIN@6
1113µs16µsJSON::PP::IncrParser::::BEGIN@1492 JSON::PP::IncrParser::BEGIN@1492
1113µs16µsJSON::PP::IncrParser::::BEGIN@1494 JSON::PP::IncrParser::BEGIN@1494
1113µs21µsOLE::Storage_Lite::::BEGIN@834 OLE::Storage_Lite::BEGIN@834
1113µs17µsSpreadsheet::ParseExcel::::BEGIN@75 Spreadsheet::ParseExcel::BEGIN@75
1113µs16µsSpreadsheet::ParseExcel::Utility::::BEGIN@20 Spreadsheet::ParseExcel::Utility::BEGIN@20
1113µs18µsSpreadsheet::ParseXLSX::Decryptor::Standard::::BEGIN@4Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4
1113µs18µsTest2::EventFacet::Meta::::BEGIN@3 Test2::EventFacet::Meta::BEGIN@3
1113µs18µsTest2::Hub::Interceptor::Terminator::::BEGIN@3 Test2::Hub::Interceptor::Terminator::BEGIN@3
1113µs18µsURI::Escape::::BEGIN@4 URI::Escape::BEGIN@4
1113µs21µsXML::Parser::Expat::::BEGIN@8 XML::Parser::Expat::BEGIN@8
1113µs3µsXML::Twig::Elt::::BEGIN@6232 XML::Twig::Elt::BEGIN@6232
10213µs3µsXML::Twig::Elt::::__ANON__[(eval 94)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 94)[XML/Twig.pm:5871]:1]
5223µs3µsutf8::::encode utf8::encode (xsub)
1113µs18µsArchive::Zip::::BEGIN@206 Archive::Zip::BEGIN@206
1113µs17µsCompress::Raw::Zlib::::BEGIN@129 Compress::Raw::Zlib::BEGIN@129
1113µs36µsCompress::Raw::Zlib::::BEGIN@145 Compress::Raw::Zlib::BEGIN@145
1113µs18µsCompress::Raw::Zlib::::BEGIN@147 Compress::Raw::Zlib::BEGIN@147
1113µs3µsDigest::SHA::::BEGIN@56 Digest::SHA::BEGIN@56
1113µs18µsDigest::SHA::::BEGIN@6 Digest::SHA::BEGIN@6
1113µs18µsEncode::Alias::::BEGIN@3 Encode::Alias::BEGIN@3
1113µs8µsFile::Copy::::BEGIN@13 File::Copy::BEGIN@13
1113µs19µsFile::Find::::BEGIN@4 File::Find::BEGIN@4
1113µs25µsIO::Handle::::BEGIN@273 IO::Handle::BEGIN@273
1113µs20µsIO::Handle::::BEGIN@274 IO::Handle::BEGIN@274
1113µs18µsJSON::PP::::BEGIN@27 JSON::PP::BEGIN@27
1113µs32µsJSON::PP::::BEGIN@29 JSON::PP::BEGIN@29
1113µs15µsJSON::PP::::BEGIN@49 JSON::PP::BEGIN@49
1113µs19µsMIME::Base64::::BEGIN@4 MIME::Base64::BEGIN@4
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@61 Spreadsheet::ParseExcel::BEGIN@61
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@70 Spreadsheet::ParseExcel::BEGIN@70
1113µs3µsSpreadsheet::ParseExcel::FmtDefault::::new Spreadsheet::ParseExcel::FmtDefault::new
1113µs19µsSpreadsheet::ParseXLSX::Decryptor::Agile::::BEGIN@4 Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4
1113µs21µsTest2::API::::test2_formatter Test2::API::test2_formatter
1113µs19µsTest2::Event::::BEGIN@3 Test2::Event::BEGIN@3
1113µs23µsTest::Builder::::BEGIN@5 Test::Builder::BEGIN@5
1113µs12µsTime::Local::::BEGIN@10 Time::Local::BEGIN@10
1113µs18µsutf8::::BEGIN@4 utf8::BEGIN@4
1113µs16µsArchive::Zip::::BEGIN@201 Archive::Zip::BEGIN@201
1113µs16µsArchive::Zip::::BEGIN@23 Archive::Zip::BEGIN@23
1113µs17µsArchive::Zip::::BEGIN@269 Archive::Zip::BEGIN@269
1113µs17µsArchive::Zip::::BEGIN@295 Archive::Zip::BEGIN@295
1113µs18µsArchive::Zip::::BEGIN@302 Archive::Zip::BEGIN@302
1113µs20µsArchive::Zip::::BEGIN@305 Archive::Zip::BEGIN@305
1113µs16µsArchive::Zip::::BEGIN@306 Archive::Zip::BEGIN@306
1113µs17µsCompress::Raw::Zlib::::BEGIN@128 Compress::Raw::Zlib::BEGIN@128
1113µs16µsCompress::Raw::Zlib::::BEGIN@154 Compress::Raw::Zlib::BEGIN@154
1113µs19µsCompress::Raw::Zlib::::BEGIN@9 Compress::Raw::Zlib::BEGIN@9
1113µs32µsDigest::Perl::MD5::::BEGIN@5 Digest::Perl::MD5::BEGIN@5
1113µs19µsEncode::::BEGIN@6 Encode::BEGIN@6
1113µs16µsFile::Find::::BEGIN@5 File::Find::BEGIN@5
1113µs15µsJSON::PP::::BEGIN@35 JSON::PP::BEGIN@35
1113µs17µsJSON::PP::IncrParser::::BEGIN@1489 JSON::PP::IncrParser::BEGIN@1489
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@67 Spreadsheet::ParseExcel::BEGIN@67
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@78 Spreadsheet::ParseExcel::BEGIN@78
1113µs3µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@13 Spreadsheet::ParseXLSX::Decryptor::BEGIN@13
1113µs3µsTest2::API::::BEGIN@75 Test2::API::BEGIN@75
1113µs15µsTest2::Event::V2::::BEGIN@8 Test2::Event::V2::BEGIN@8
1113µs19µsTime::Local::::BEGIN@35 Time::Local::BEGIN@35
1113µs17µsArchive::Zip::::BEGIN@199 Archive::Zip::BEGIN@199
1113µs17µsArchive::Zip::::BEGIN@247 Archive::Zip::BEGIN@247
1113µs16µsArchive::Zip::::BEGIN@273 Archive::Zip::BEGIN@273
1113µs16µsArchive::Zip::::BEGIN@288 Archive::Zip::BEGIN@288
1113µs16µsArchive::Zip::::BEGIN@307 Archive::Zip::BEGIN@307
1113µs16µsArchive::Zip::::BEGIN@35 Archive::Zip::BEGIN@35
1113µs3µsCORE::::symlink CORE::symlink (xsub)
1113µs18µsCompress::Raw::Zlib::::BEGIN@157 Compress::Raw::Zlib::BEGIN@157
1113µs16µsCompress::Raw::Zlib::::BEGIN@158 Compress::Raw::Zlib::BEGIN@158
1113µs17µsFile::Temp::::BEGIN@227 File::Temp::BEGIN@227
1113µs16µsFile::Temp::::BEGIN@229 File::Temp::BEGIN@229
1113µs17µsJSON::PP::::BEGIN@38 JSON::PP::BEGIN@38
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@64 Spreadsheet::ParseExcel::BEGIN@64
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@68 Spreadsheet::ParseExcel::BEGIN@68
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@72 Spreadsheet::ParseExcel::BEGIN@72
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@77 Spreadsheet::ParseExcel::BEGIN@77
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@81 Spreadsheet::ParseExcel::BEGIN@81
1113µs3µsTest2::API::Instance::::add_formatter Test2::API::Instance::add_formatter
1113µs11µsTest2::API::::test2_add_callback_post_load Test2::API::test2_add_callback_post_load
1113µs12µsTest::Builder::::BEGIN@117 Test::Builder::BEGIN@117
1113µs16µsArchive::Zip::::BEGIN@189 Archive::Zip::BEGIN@189
1113µs16µsArchive::Zip::::BEGIN@191 Archive::Zip::BEGIN@191
1113µs14µsArchive::Zip::::BEGIN@192 Archive::Zip::BEGIN@192
1113µs15µsArchive::Zip::::BEGIN@197 Archive::Zip::BEGIN@197
1113µs15µsArchive::Zip::::BEGIN@200 Archive::Zip::BEGIN@200
1113µs15µsArchive::Zip::::BEGIN@212 Archive::Zip::BEGIN@212
1113µs17µsArchive::Zip::::BEGIN@230 Archive::Zip::BEGIN@230
1113µs16µsArchive::Zip::::BEGIN@238 Archive::Zip::BEGIN@238
1113µs16µsArchive::Zip::::BEGIN@251 Archive::Zip::BEGIN@251
1113µs18µsArchive::Zip::::BEGIN@257 Archive::Zip::BEGIN@257
1113µs20µsArchive::Zip::::BEGIN@260 Archive::Zip::BEGIN@260
1113µs16µsArchive::Zip::::BEGIN@268 Archive::Zip::BEGIN@268
1113µs15µsArchive::Zip::::BEGIN@274 Archive::Zip::BEGIN@274
1113µs16µsArchive::Zip::::BEGIN@279 Archive::Zip::BEGIN@279
1113µs16µsArchive::Zip::::BEGIN@285 Archive::Zip::BEGIN@285
1113µs15µsArchive::Zip::::BEGIN@291 Archive::Zip::BEGIN@291
1113µs16µsArchive::Zip::::BEGIN@300 Archive::Zip::BEGIN@300
1113µs20µsArchive::Zip::::BEGIN@301 Archive::Zip::BEGIN@301
1113µs16µsArchive::Zip::::BEGIN@308 Archive::Zip::BEGIN@308
1113µs20µsArchive::Zip::::BEGIN@309 Archive::Zip::BEGIN@309
11113µs3µsArchive::Zip::Member::::DEFAULT_FILE_PERMISSIONS Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS (xsub)
1113µs16µsCompress::Raw::Zlib::::BEGIN@153 Compress::Raw::Zlib::BEGIN@153
1113µs16µsCryptX::::BEGIN@4 CryptX::BEGIN@4
1113µs3µsEncode::Alias::::BEGIN@111 Encode::Alias::BEGIN@111
1113µs16µsJSON::PP::::BEGIN@31 JSON::PP::BEGIN@31
1113µs15µsJSON::PP::::BEGIN@33 JSON::PP::BEGIN@33
1113µs16µsJSON::PP::::BEGIN@45 JSON::PP::BEGIN@45
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@62 Spreadsheet::ParseExcel::BEGIN@62
1113µs10µsTest::Builder::::BEGIN@121 Test::Builder::BEGIN@121
1112µs16µsArchive::Zip::::BEGIN@190 Archive::Zip::BEGIN@190
1112µs16µsArchive::Zip::::BEGIN@198 Archive::Zip::BEGIN@198
1112µs15µsArchive::Zip::::BEGIN@204 Archive::Zip::BEGIN@204
1112µs16µsArchive::Zip::::BEGIN@222 Archive::Zip::BEGIN@222
1112µs16µsArchive::Zip::::BEGIN@239 Archive::Zip::BEGIN@239
1112µs17µsArchive::Zip::::BEGIN@256 Archive::Zip::BEGIN@256
1112µs15µsArchive::Zip::::BEGIN@265 Archive::Zip::BEGIN@265
1112µs19µsArchive::Zip::::BEGIN@277 Archive::Zip::BEGIN@277
1112µs17µsArchive::Zip::::BEGIN@283 Archive::Zip::BEGIN@283
1112µs14µsArchive::Zip::::BEGIN@292 Archive::Zip::BEGIN@292
1112µs15µsArchive::Zip::::BEGIN@294 Archive::Zip::BEGIN@294
1112µs15µsArchive::Zip::::BEGIN@298 Archive::Zip::BEGIN@298
1112µs15µsArchive::Zip::::BEGIN@312 Archive::Zip::BEGIN@312
1112µs19µsArchive::Zip::Member::::BEGIN@34 Archive::Zip::Member::BEGIN@34
1112µs16µsArchive::Zip::Member::::BEGIN@35 Archive::Zip::Member::BEGIN@35
1112µs15µsCompress::Raw::Zlib::::BEGIN@156 Compress::Raw::Zlib::BEGIN@156
1112µs2µsCwd::::BEGIN@41 Cwd::BEGIN@41
1112µs15µsFile::Temp::::BEGIN@228 File::Temp::BEGIN@228
1112µs18µsIO::::BEGIN@8 IO::BEGIN@8
1112µs17µsJSON::PP::::BEGIN@28 JSON::PP::BEGIN@28
1112µs15µsJSON::PP::::BEGIN@32 JSON::PP::BEGIN@32
1112µs15µsJSON::PP::::BEGIN@36 JSON::PP::BEGIN@36
1112µs18µsJSON::PP::::BEGIN@43 JSON::PP::BEGIN@43
1112µs17µsJSON::PP::IncrParser::::BEGIN@1491 JSON::PP::IncrParser::BEGIN@1491
1112µs3µsTest2::API::Instance::::add_context_acquire_callback Test2::API::Instance::add_context_acquire_callback
1112µs3µsTest2::API::Instance::::add_exit_callback Test2::API::Instance::add_exit_callback
1112µs2µsTime::HiRes::::constant Time::HiRes::constant (xsub)
1112µs16µsTime::Local::::BEGIN@36 Time::Local::BEGIN@36
1112µs2µsArchive::Zip::Archive::::BEGIN@8 Archive::Zip::Archive::BEGIN@8
1112µs14µsArchive::Zip::::BEGIN@203 Archive::Zip::BEGIN@203
1112µs15µsArchive::Zip::::BEGIN@207 Archive::Zip::BEGIN@207
1112µs15µsArchive::Zip::::BEGIN@208 Archive::Zip::BEGIN@208
1112µs14µsArchive::Zip::::BEGIN@210 Archive::Zip::BEGIN@210
1112µs19µsArchive::Zip::::BEGIN@211 Archive::Zip::BEGIN@211
1112µs15µsArchive::Zip::::BEGIN@213 Archive::Zip::BEGIN@213
1112µs15µsArchive::Zip::::BEGIN@227 Archive::Zip::BEGIN@227
1112µs15µsArchive::Zip::::BEGIN@235 Archive::Zip::BEGIN@235
1112µs14µsArchive::Zip::::BEGIN@245 Archive::Zip::BEGIN@245
1112µs15µsArchive::Zip::::BEGIN@246 Archive::Zip::BEGIN@246
1112µs15µsArchive::Zip::::BEGIN@253 Archive::Zip::BEGIN@253
1112µs16µsArchive::Zip::::BEGIN@261 Archive::Zip::BEGIN@261
1112µs15µsArchive::Zip::::BEGIN@266 Archive::Zip::BEGIN@266
1112µs15µsArchive::Zip::::BEGIN@272 Archive::Zip::BEGIN@272
1112µs16µsArchive::Zip::::BEGIN@278 Archive::Zip::BEGIN@278
1112µs16µsArchive::Zip::::BEGIN@282 Archive::Zip::BEGIN@282
1112µs15µsArchive::Zip::::BEGIN@297 Archive::Zip::BEGIN@297
1112µs15µsArchive::Zip::::BEGIN@310 Archive::Zip::BEGIN@310
1112µs15µsArchive::Zip::::BEGIN@313 Archive::Zip::BEGIN@313
1112µs16µsJSON::PP::::BEGIN@30 JSON::PP::BEGIN@30
1112µs15µsJSON::PP::::BEGIN@41 JSON::PP::BEGIN@41
1112µs15µsJSON::PP::::BEGIN@42 JSON::PP::BEGIN@42
1112µs2µsTest2::Formatter::TAP::::summary_tap Test2::Formatter::TAP::summary_tap
1112µs2µsURI::::BEGIN@40 URI::BEGIN@40
4212µs2µsXML::Twig::Elt::::__ANON__[(eval 80)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 80)[XML/Twig.pm:5871]:1]
1112µs15µsArchive::Zip::::BEGIN@202 Archive::Zip::BEGIN@202
1112µs14µsArchive::Zip::::BEGIN@209 Archive::Zip::BEGIN@209
1112µs14µsArchive::Zip::::BEGIN@214 Archive::Zip::BEGIN@214
1112µs14µsArchive::Zip::::BEGIN@215 Archive::Zip::BEGIN@215
1112µs15µsArchive::Zip::::BEGIN@220 Archive::Zip::BEGIN@220
1112µs15µsArchive::Zip::::BEGIN@228 Archive::Zip::BEGIN@228
1112µs14µsArchive::Zip::::BEGIN@229 Archive::Zip::BEGIN@229
1112µs15µsArchive::Zip::::BEGIN@237 Archive::Zip::BEGIN@237
1112µs23µsArchive::Zip::::BEGIN@286 Archive::Zip::BEGIN@286
1112µs15µsArchive::Zip::::BEGIN@311 Archive::Zip::BEGIN@311
1112µs2µsArchive::Zip::::BEGIN@8 Archive::Zip::BEGIN@8
1112µs16µsArchive::Zip::Member::::BEGIN@36 Archive::Zip::Member::BEGIN@36
1112µs2µsFile::Path::::BEGIN@8 File::Path::BEGIN@8
1112µs15µsJSON::PP::::BEGIN@34 JSON::PP::BEGIN@34
1112µs16µsJSON::PP::::BEGIN@40 JSON::PP::BEGIN@40
1112µs3µsTest2::API::Instance::::END Test2::API::Instance::END
2222µs2µsTest::Builder::::exported_to Test::Builder::exported_to
1112µs2µsXML::Twig::Elt::::__ANON__[(eval 65)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 65)[XML/Twig.pm:5871]:1]
1112µs2µsXML::Twig::Elt::::__ANON__[(eval 69)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 69)[XML/Twig.pm:5871]:1]
1112µs14µsArchive::Zip::::BEGIN@252 Archive::Zip::BEGIN@252
1112µs14µsArchive::Zip::::BEGIN@262 Archive::Zip::BEGIN@262
1112µs15µsArchive::Zip::::BEGIN@267 Archive::Zip::BEGIN@267
1112µs2µsJSON::::BEGIN@11 JSON::BEGIN@11
1112µs2µsJSON::PP::::BEGIN@14 JSON::PP::BEGIN@14
1112µs2µsSpreadsheet::ParseXLSX::Cell::::BEGIN@10 Spreadsheet::ParseXLSX::Cell::BEGIN@10
1112µs2µsSpreadsheet::ParseXLSX::::new Spreadsheet::ParseXLSX::new
1112µs3µsTest2::API::::_contexts_ref Test2::API::_contexts_ref
1112µs2µsXML::Twig::Elt::::__ANON__[(eval 67)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 67)[XML/Twig.pm:5871]:1]
1112µs15µsArchive::Zip::::BEGIN@240 Archive::Zip::BEGIN@240
9112µs2µsCORE::::tell CORE::tell (xsub)
1112µs2µsTest2::API::::BEGIN@90 Test2::API::BEGIN@90
1112µs2µsTest2::Event::::BEGIN@23 Test2::Event::BEGIN@23
1112µs93µsTest2::Formatter::::new_root Test2::Formatter::new_root
1112µs2µsURI::Escape::::BEGIN@153 URI::Escape::BEGIN@153
1112µs2µsXML::Parser::Expat::::BEGIN@14 XML::Parser::Expat::BEGIN@14
1112µs5µsTest2::API::::test2_add_callback_context_aquire Test2::API::test2_add_callback_context_aquire
1112µs3µsTest2::API::::test2_has_ipc Test2::API::test2_has_ipc
1112µs2µsinteger::::unimport integer::unimport
1112µs2µsversion::::(cmp version::(cmp (xsub)
1112µs2µsEncode::::BEGIN@17 Encode::BEGIN@17
1112µs2µsSpreadsheet::ParseExcel::Workbook::::new Spreadsheet::ParseExcel::Workbook::new
1112µs2µsStorable::::BEGIN@30 Storable::BEGIN@30
1112µs13µsTest2::API::Instance::::init Test2::API::Instance::init
2212µs2µsTest2::Util::HashBase::::__ANON__[Test2/Util/HashBase.pm:85] Test2::Util::HashBase::__ANON__[Test2/Util/HashBase.pm:85]
1112µs2µsXML::Twig::::__ANON__[XML/Twig.pm:265] XML::Twig::__ANON__[XML/Twig.pm:265]
1112µs2µsJSON::PP::::BEGIN@11 JSON::PP::BEGIN@11
1112µs2µsJSON::PP::::BEGIN@62 JSON::PP::BEGIN@62
1112µs2µsTest2::API::Context::::BEGIN@12 Test2::API::Context::BEGIN@12
1112µs2µsTest2::API::Stack::::root Test2::API::Stack::root
1112µs2µsTest::Builder::::BEGIN@9 Test::Builder::BEGIN@9
1112µs2µsFcntl::::O_BINARY Fcntl::O_BINARY (xsub)
1112µs2µsFile::Path::::BEGIN@10 File::Path::BEGIN@10
1112µs2µsFile::Spec::Unix::::BEGIN@4 File::Spec::Unix::BEGIN@4
1112µs2µsTest2::API::Instance::::pid Test2::API::Instance::pid
1112µs4µsTest2::API::::test2_add_callback_exit Test2::API::test2_add_callback_exit
1112µs4µsTest2::API::::test2_ipc Test2::API::test2_ipc
1112µs2µsTest2::Hub::::cull Test2::Hub::cull
1112µs2µsArchive::Zip::::BEGIN@25 Archive::Zip::BEGIN@25
1112µs2µsFcntl::::O_LARGEFILE Fcntl::O_LARGEFILE (xsub)
1112µs2µsFile::Temp::::BEGIN@148 File::Temp::BEGIN@148
1112µs2µsInternals::::V Internals::V (xsub)
1112µs2µsJSON::PP::Boolean::::BEGIN@5 JSON::PP::Boolean::BEGIN@5
1112µs2µsTest2::API::::BEGIN@85 Test2::API::BEGIN@85
2222µs2µsTest2::API::::_add_uuid_via_ref Test2::API::_add_uuid_via_ref
1112µs2µsTest2::EventFacet::Trace::::call Test2::EventFacet::Trace::call
1112µs2µsTie::StdHash::::TIEHASH Tie::StdHash::TIEHASH
1112µs2µsTime::Local::::BEGIN@5 Time::Local::BEGIN@5
1112µs2µsArchive::Zip::Archive::::zip64 Archive::Zip::Archive::zip64
1112µs2µsEncode::Encoding::::BEGIN@11 Encode::Encoding::BEGIN@11
1112µs2µsTest2::API::Stack::::all Test2::API::Stack::all
1112µs2µsTime::HiRes::::BEGIN@7 Time::HiRes::BEGIN@7
2112µs2µsXML::Twig::Elt::::__ANON__[(eval 79)[XML/Twig.pm:5871]:1] XML::Twig::Elt::__ANON__[(eval 79)[XML/Twig.pm:5871]:1]
1112µs2µsutf8::::import utf8::import
1111µs1µsJSON::PP::::BEGIN@8 JSON::PP::BEGIN@8
2211µs1µsScalar::Util::::openhandle Scalar::Util::openhandle (xsub)
1111µs1µsTest2::Event::V2::::non_facet_keys Test2::Event::V2::non_facet_keys
2211µs1µsArchive::Zip::Archive::::centralDirectorySize Archive::Zip::Archive::centralDirectorySize
1111µs1µsArchive::Zip::::BEGIN@5 Archive::Zip::BEGIN@5
1111µs1µsFile::Path::::BEGIN@19 File::Path::BEGIN@19
1111µs1µsJSON::::BEGIN@5 JSON::BEGIN@5
1111µs1µsSpreadsheet::ParseXLSX::::BEGIN@7 Spreadsheet::ParseXLSX::BEGIN@7
1111µs2µsTest2::API::::test2_load_done Test2::API::test2_load_done
1111µs1µsSpreadsheet::ParseXLSX::Decryptor::::BEGIN@14 Spreadsheet::ParseXLSX::Decryptor::BEGIN@14
1111µs1µsTest2::API::Context::::BEGIN@13 Test2::API::Context::BEGIN@13
1111µs1µsTest2::API::Instance::::tid Test2::API::Instance::tid
1111µs1µsTest2::API::Stack::::new Test2::API::Stack::new
3311µs1µsTest::Builder::::__ANON__ Test::Builder::__ANON__ (xsub)
1111µs1µsTest::Builder::::plan Test::Builder::plan
1111µs1µsXML::Twig::Elt::::set_destroy XML::Twig::Elt::set_destroy
1111µs1µsArchive::Zip::Archive::::centralDirectoryOffsetWRTStartingDiskNumber Archive::Zip::Archive::centralDirectoryOffsetWRTStartingDiskNumber
1111µs1µsConfig::::TIEHASH Config::TIEHASH
1111µs1µsFile::Spec::Unix::::curdir File::Spec::Unix::curdir
1111µs1µsTest2::API::Instance::::has_ipc Test2::API::Instance::has_ipc
111900ns900nsErrno::::TIEHASH Errno::TIEHASH
111900ns900nsTest2::Hub::::is_subtest Test2::Hub::is_subtest
111800ns800nsTest2::Util::::__ANON__ Test2::Util::__ANON__ (xsub)
111800ns800nsTime::HiRes::::__ANON__[Time/HiRes.pm:71] Time::HiRes::__ANON__[Time/HiRes.pm:71]
111700ns700nsFile::Temp::::__ANON__[File/Temp.pm:244] File::Temp::__ANON__[File/Temp.pm:244]
111700ns700nsTest2::API::::test2_unset_is_end Test2::API::test2_unset_is_end
111700ns700nsTest2::Formatter::::finalize Test2::Formatter::finalize
111600ns600nsEncode::Alias::::undef_aliases Encode::Alias::undef_aliases
111600ns600nsEncode::::__ANON__ Encode::__ANON__ (xsub)
111600ns600nsFile::Glob::::GLOB_CSH File::Glob::GLOB_CSH (xsub)
111600ns600nsIO::File::::__ANON__ IO::File::__ANON__ (xsub)
111600ns600nsSpreadsheet::ParseXLSX::::__ANON__ Spreadsheet::ParseXLSX::__ANON__ (xsub)
111600ns600nsTest2::API::::test2_stdout Test2::API::test2_stdout
111500ns500nsTest2::API::::test2_stderr Test2::API::test2_stderr
111400ns400nsArchive::Zip::Member::::__ANON__ Archive::Zip::Member::__ANON__ (xsub)
111400ns400nsFile::Path::::__ANON__ File::Path::__ANON__ (xsub)
111400ns400nsTest2::Event::Fail::::__ANON__ Test2::Event::Fail::__ANON__ (xsub)
111400ns400nsTest2::Event::Pass::::__ANON__ Test2::Event::Pass::__ANON__ (xsub)
111300ns300nsEncode::Encoding::::__ANON__ Encode::Encoding::__ANON__ (xsub)
111300ns300nsFile::Copy::::__ANON__ File::Copy::__ANON__ (xsub)
111300ns300nsFile::Temp::::__ANON__ File::Temp::__ANON__ (xsub)
111300ns300nsFile::Temp::::__ANON__[File/Temp.pm:252] File::Temp::__ANON__[File/Temp.pm:252]
111300ns300nsFile::Temp::::__ANON__[File/Temp.pm:274] File::Temp::__ANON__[File/Temp.pm:274]
111300ns300nsIO::Handle::::__ANON__ IO::Handle::__ANON__ (xsub)
111300ns300nsTest2::Formatter::TAP::::OUT_ERR Test2::Formatter::TAP::OUT_ERR (xsub)
111300ns300nsTest::Builder::Module::::__ANON__ Test::Builder::Module::__ANON__ (xsub)










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 31)[JSON-PP-pm-82]-248-line.html0000644000175000017500000003454114576335353023713 0ustar michamicha Profile of (eval 31)[JSON/PP.pm:82]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 31)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:82]
StatementsExecuted 0 statements in 0s
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 82
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
0000s0sJSON::PP::::allow_unknownJSON::PP::allow_unknown
0000s0sJSON::PP::::get_allow_unknownJSON::PP::get_allow_unknown
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
0No source code available for string eval (eval 31)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:82].
You probably need to use a more recent version of perl. See savesrc option in documentation.
1
2
- -










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 76)[XML-Twig-pm-7113]-193-line.html0000644000175000017500000004102514576335353024342 0ustar michamicha Profile of (eval 76)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 76)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 11 statements in 92µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs295µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs16µsXML::Twig::Elt::::BEGIN@1.20XML::Twig::Elt::BEGIN@1.20
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11192µs6311µs
# spent 295µs (11+284) within XML::Twig::Elt::__ANON__[(eval 76)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (11µs+284µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.20 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:borders') } @results;@results= grep defined, map { $_->children( 's:border') } @results;return XML::Twig::_unique_elts( @results); }
# spent 169µs making 1 call to XML::Twig::descendants # spent 108µs making 1 call to XML::Twig::Elt::children # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.20 # spent 10µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig # spent 3µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 78)[XML-Twig-pm-5871]-195-line.html0000644000175000017500000004271114576335353024362 0ustar michamicha Profile of (eval 78)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 78)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 12 statements in 82µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

NOTE!
The data used to generate this report page was merged from 2 of the 37 executions
of the string eval on line 5871 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116µs18µsXML::Twig::Elt::::BEGIN@1.44XML::Twig::Elt::BEGIN@1.44
1116µs16µsXML::Twig::Elt::::BEGIN@1.22XML::Twig::Elt::BEGIN@1.22
6113µs3µsXML::Twig::Elt::::__ANON__[(eval 100)[XML/Twig.pm:5871]:1]XML::Twig::Elt::__ANON__[(eval 100)[XML/Twig.pm:5871]:1] (merge of 2 subs)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11282µs455µs
# spent 18µs (6+11) within XML::Twig::Elt::BEGIN@1.44 which was called: # once (6µs+11µs) by XML::Twig::Elt::_install_cond at line 1 # spent 3µs within XML::Twig::Elt::__ANON__[(eval 100)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 6 times, avg 567ns/call: # (data for this subroutine includes 1 others that were merged with it) # 6 times (3µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 567ns/call # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.22 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 37) ? $_[0] : undef; }
# spent 22µs making 2 calls to warnings::unimport, avg 11µs/call # spent 18µs making 1 call to XML::Twig::Elt::BEGIN@1.44 # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.22
2;










Spreadsheet-ParseXLSX-0.35/nytprof/JSON-PP-Boolean-pm-146-line.html0000644000175000017500000004655714576335353023363 0ustar michamicha Profile of JSON/PP/Boolean.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP/Boolean.pm
StatementsExecuted 10 statements in 112µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs10µsJSON::PP::Boolean::::BEGIN@3JSON::PP::Boolean::BEGIN@3
1114µs19µsJSON::PP::Boolean::::BEGIN@4JSON::PP::Boolean::BEGIN@4
1112µs2µsJSON::PP::Boolean::::BEGIN@5JSON::PP::Boolean::BEGIN@5
0000s0sJSON::PP::Boolean::::__ANON__[:10]JSON::PP::Boolean::__ANON__[:10]
0000s0sJSON::PP::Boolean::::__ANON__[:8]JSON::PP::Boolean::__ANON__[:8]
0000s0sJSON::PP::Boolean::::__ANON__[:9]JSON::PP::Boolean::__ANON__[:9]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package JSON::PP::Boolean;
2
3216µs211µs
# spent 10µs (8+1) within JSON::PP::Boolean::BEGIN@3 which was called: # once (8µs+1µs) by JSON::PP::BEGIN@12 at line 3
use strict;
# spent 10µs making 1 call to JSON::PP::Boolean::BEGIN@3 # spent 1µs making 1 call to strict::import
4216µs235µs
# spent 19µs (4+16) within JSON::PP::Boolean::BEGIN@4 which was called: # once (4µs+16µs) by JSON::PP::BEGIN@12 at line 4
use warnings;
# spent 19µs making 1 call to JSON::PP::Boolean::BEGIN@4 # spent 16µs making 1 call to warnings::import
5272µs12µs
# spent 2µs within JSON::PP::Boolean::BEGIN@5 which was called: # once (2µs+0s) by JSON::PP::BEGIN@12 at line 5
use overload ();
# spent 2µs making 1 call to JSON::PP::Boolean::BEGIN@5
612µs112µsoverload::unimport('overload', qw(0+ ++ -- fallback));
# spent 12µs making 1 call to overload::unimport
7overload::import('overload',
8 "0+" => sub { ${$_[0]} },
9 "++" => sub { $_[0] = ${$_[0]} + 1 },
10 "--" => sub { $_[0] = ${$_[0]} - 1 },
1113µs119µs fallback => 1,
# spent 19µs making 1 call to overload::import
12);
13
141300nsour $VERSION = '4.16';
15
1614µs1;
17
18__END__










Spreadsheet-ParseXLSX-0.35/nytprof/MIME-Base64-pm-167-line.html0000644000175000017500000005060614576335353022462 0ustar michamicha Profile of MIME/Base64.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/MIME/Base64.pm
StatementsExecuted 14 statements in 277µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs10µsMIME::Base64::::BEGIN@3MIME::Base64::BEGIN@3
1113µs19µsMIME::Base64::::BEGIN@4MIME::Base64::BEGIN@4
0000s0sMIME::Base64::::decode_base64urlMIME::Base64::decode_base64url
0000s0sMIME::Base64::::encode_base64urlMIME::Base64::encode_base64url
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package MIME::Base64;
2
3216µs211µs
# spent 10µs (8+2) within MIME::Base64::BEGIN@3 which was called: # once (8µs+2µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@15 at line 3
use strict;
# spent 10µs making 1 call to MIME::Base64::BEGIN@3 # spent 2µs making 1 call to strict::import
42136µs234µs
# spent 19µs (3+16) within MIME::Base64::BEGIN@4 which was called: # once (3µs+16µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@15 at line 4
use warnings;
# spent 19µs making 1 call to MIME::Base64::BEGIN@4 # spent 16µs making 1 call to warnings::import
5
61400nsrequire Exporter;
717µsour @ISA = qw(Exporter);
81400nsour @EXPORT = qw(encode_base64 decode_base64);
91400nsour @EXPORT_OK = qw(encode_base64url decode_base64url encoded_base64_length decoded_base64_length);
10
111200nsour $VERSION = '3.16_01';
12
131200nsrequire XSLoader;
141109µs1104µsXSLoader::load('MIME::Base64', $VERSION);
# spent 104µs making 1 call to XSLoader::load
15
161900ns*encode = \&encode_base64;
171100ns*decode = \&decode_base64;
18
19sub encode_base64url {
20 my $e = encode_base64(shift, "");
21 $e =~ s/=+\z//;
22 $e =~ tr[+/][-_];
23 return $e;
24}
25
26sub decode_base64url {
27 my $s = shift;
28 $s =~ tr[-_][+/];
29 $s .= '=' while length($s) % 4;
30 return decode_base64($s);
31}
32
3315µs1;
34
35__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 94)[XML-Twig-pm-5871]-211-line.html0000644000175000017500000004072714576335353024352 0ustar michamicha Profile of (eval 94)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 94)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 13 statements in 36µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs18µsXML::Twig::Elt::::BEGIN@1.38XML::Twig::Elt::BEGIN@1.38
10213µs3µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11336µs228µs
# spent 3µs within XML::Twig::Elt::__ANON__[(eval 94)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 10 times, avg 300ns/call: # 7 times (2µs+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 214ns/call # 3 times (2µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 500ns/call # spent 18µs (7+11) within XML::Twig::Elt::BEGIN@1.38 which was called: # once (7µs+11µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 30) ? $_[0] : undef; }
# spent 18µs making 1 call to XML::Twig::Elt::BEGIN@1.38 # spent 10µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-StringMember-pm-116-line.html0000644000175000017500000006541414576335353025423 0ustar michamicha Profile of Archive/Zip/StringMember.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip/StringMember.pm
StatementsExecuted 9 statements in 240µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsArchive::Zip::StringMember::::BEGIN@3Archive::Zip::StringMember::BEGIN@3
1116µs6µsArchive::Zip::StringMember::::BEGIN@6Archive::Zip::StringMember::BEGIN@6
1114µs22µsArchive::Zip::StringMember::::BEGIN@4Archive::Zip::StringMember::BEGIN@4
1113µs88µsArchive::Zip::StringMember::::BEGIN@11Archive::Zip::StringMember::BEGIN@11
0000s0sArchive::Zip::StringMember::::_becomeArchive::Zip::StringMember::_become
0000s0sArchive::Zip::StringMember::::_newFromStringArchive::Zip::StringMember::_newFromString
0000s0sArchive::Zip::StringMember::::_readRawChunkArchive::Zip::StringMember::_readRawChunk
0000s0sArchive::Zip::StringMember::::contentsArchive::Zip::StringMember::contents
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip::StringMember;
2
3236µs213µs
# spent 11µs (10+2) within Archive::Zip::StringMember::BEGIN@3 which was called: # once (10µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 3
use strict;
# spent 11µs making 1 call to Archive::Zip::StringMember::BEGIN@3 # spent 2µs making 1 call to strict::import
4223µs239µs
# spent 22µs (4+18) within Archive::Zip::StringMember::BEGIN@4 which was called: # once (4µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 4
use vars qw( $VERSION @ISA );
# spent 22µs making 1 call to Archive::Zip::StringMember::BEGIN@4 # spent 18µs making 1 call to vars::import
5
6
# spent 6µs within Archive::Zip::StringMember::BEGIN@6 which was called: # once (6µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 9
BEGIN {
71200ns $VERSION = '1.68';
817µs @ISA = qw( Archive::Zip::Member );
9114µs16µs}
# spent 6µs making 1 call to Archive::Zip::StringMember::BEGIN@6
10
1112µs185µs
# spent 88µs (3+85) within Archive::Zip::StringMember::BEGIN@11 which was called: # once (3µs+85µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 14
use Archive::Zip qw(
# spent 85µs making 1 call to Exporter::import
12 :CONSTANTS
13 :ERROR_CODES
141157µs188µs);
# spent 88µs making 1 call to Archive::Zip::StringMember::BEGIN@11
15
16# Create a new string member. Default is COMPRESSION_STORED.
17# Can take a ref to a string as well.
18sub _newFromString {
19 my $class = shift;
20 my $string = shift;
21 my $name = shift;
22 my $self = $class->new(@_);
23 $self->contents($string);
24 $self->fileName($name) if defined($name);
25
26 # Set the file date to now
27 $self->setLastModFileDateTimeFromUnix(time());
28 $self->unixFileAttributes($self->DEFAULT_FILE_PERMISSIONS);
29 return $self;
30}
31
32sub _become {
33 my $self = shift;
34 my $newClass = shift;
35 return $self if ref($self) eq $newClass;
36 delete($self->{'contents'});
37 return $self->SUPER::_become($newClass);
38}
39
40# Get or set my contents. Note that we do not call the superclass
41# version of this, because it calls us.
42sub contents {
43 my $self = shift;
44 my $string = shift;
45 if (defined($string)) {
46 $self->{'contents'} =
47 pack('C0a*', (ref($string) eq 'SCALAR') ? $$string : $string);
48 $self->{'uncompressedSize'} = $self->{'compressedSize'} =
49 length($self->{'contents'});
50 $self->{'compressionMethod'} = COMPRESSION_STORED;
51 }
52 return wantarray ? ($self->{'contents'}, AZ_OK) : $self->{'contents'};
53}
54
55# Return bytes read. Note that first parameter is a ref to a buffer.
56# my $data;
57# my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize );
58sub _readRawChunk {
59 my ($self, $dataRef, $chunkSize) = @_;
60 $$dataRef = substr($self->contents(), $self->_readOffset(), $chunkSize);
61 return (length($$dataRef), AZ_OK);
62}
63
6412µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Config-pm-20-line.html0000644000175000017500000010651114576335353022017 0ustar michamicha Profile of Config.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Config.pm
StatementsExecuted 64 statements in 555µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.53ms1.66msConfig::::AUTOLOADConfig::AUTOLOAD
55531µs31µsConfig::::importConfig::import
43216µs1.71msConfig::::FETCHConfig::FETCH
11110µs12µsConfig::::BEGIN@9Config::BEGIN@9
1115µs9µsConfig::::BEGIN@47Config::BEGIN@47
1114µs22µsConfig::::BEGIN@10Config::BEGIN@10
1111µs1µsConfig::::TIEHASHConfig::TIEHASH
0000s0sConfig::::DESTROYConfig::DESTROY
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# This file was created by configpm when Perl was built. Any changes
2# made to this file will be lost the next time perl is built.
3
4# for a description of the variables, please have a look at the
5# Glossary file, as written in the Porting folder, or use the url:
6# https://github.com/Perl/perl5/blob/blead/Porting/Glossary
7
8package Config;
9220µs214µs
# spent 12µs (10+2) within Config::BEGIN@9 which was called: # once (10µs+2µs) by Test2::Util::BEGIN@8 at line 9
use strict;
# spent 12µs making 1 call to Config::BEGIN@9 # spent 2µs making 1 call to strict::import
102110µs241µs
# spent 22µs (4+19) within Config::BEGIN@10 which was called: # once (4µs+19µs) by Test2::Util::BEGIN@8 at line 10
use warnings;
# spent 22µs making 1 call to Config::BEGIN@10 # spent 19µs making 1 call to warnings::import
11our ( %Config, $VERSION );
12
131400ns$VERSION = "5.038002";
14
15# Skip @Config::EXPORT because it only contains %Config, which we special
16# case below as it's not a function. @Config::EXPORT won't change in the
17# lifetime of Perl 5.
1812µsmy %Export_Cache = (myconfig => 1, config_sh => 1, config_vars => 1,
19 config_re => 1, compile_date => 1, local_patches => 1,
20 bincompat_options => 1, non_bincompat_options => 1,
21 header_files => 1);
22
231500ns@Config::EXPORT = qw(%Config);
2411µs@Config::EXPORT_OK = keys %Export_Cache;
25
26# Need to stub all the functions to make code such as print Config::config_sh
27# keep working
28
29sub bincompat_options;
30sub compile_date;
31sub config_re;
32sub config_sh;
33sub config_vars;
34sub header_files;
35sub local_patches;
36sub myconfig;
37sub non_bincompat_options;
38
39# Define our own import method to avoid pulling in the full Exporter:
40
# spent 31µs within Config::import which was called 5 times, avg 6µs/call: # once (7µs+0s) by Test2::Util::BEGIN@8 at line 8 of Test2/Util.pm # once (7µs+0s) by Errno::BEGIN@11 at line 11 of Errno.pm # once (6µs+0s) by Spreadsheet::ParseExcel::BEGIN@24 at line 24 of Spreadsheet/ParseExcel.pm # once (6µs+0s) by XML::Twig::BEGIN@33 at line 33 of XML/Twig.pm # once (5µs+0s) by File::Copy::BEGIN@17 at line 17 of File/Copy.pm
sub import {
4151µs shift;
4254µs @_ = @Config::EXPORT unless @_;
43
4455µs my @funcs = grep $_ ne '%Config', @_;
4553µs my $export_Config = @funcs < @_ ? 1 : 0;
46
472228µs213µs
# spent 9µs (5+4) within Config::BEGIN@47 which was called: # once (5µs+4µs) by Test2::Util::BEGIN@8 at line 47
no strict 'refs';
# spent 9µs making 1 call to Config::BEGIN@47 # spent 4µs making 1 call to strict::unimport
4852µs my $callpkg = caller(0);
4952µs foreach my $func (@funcs) {
50 die qq{"$func" is not exported by the Config module\n}
51 unless $Export_Cache{$func};
52 *{$callpkg.'::'.$func} = \&{$func};
53 }
54
55510µs *{"$callpkg\::Config"} = \%Config if $export_Config;
56539µs return;
57}
58
59119µs14µsdie "$0: Perl lib version (5.38.2) doesn't match executable '$^X' version ($])"
# spent 4µs making 1 call to version::(bool
60 unless $^V;
61
6214µs12µs$^V eq 5.38.2
# spent 2µs making 1 call to version::(cmp
63 or die sprintf "%s: Perl lib version (5.38.2) doesn't match executable '$^X' version (%vd)", $0, $^V;
64
65
66
# spent 1.71ms (16µs+1.70) within Config::FETCH which was called 4 times, avg 429µs/call: # 2 times (4µs+0s) by File::Temp::BEGIN@152 at line 12 of Errno.pm, avg 2µs/call # once (10µs+1.70ms) by Test2::Util::_check_for_sig_sys at line 167 of Test2/Util.pm # once (2µs+0s) by Test2::Util::_can_thread at line 48 of Test2/Util.pm
sub FETCH {
6742µs my($self, $key) = @_;
68
69 # check for cached value (which may be undef so we use exists not defined)
70414µs11.66ms return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key);
# spent 1.66ms making 1 call to Config::AUTOLOAD
71}
72
73
# spent 1µs within Config::TIEHASH which was called: # once (1µs+0s) by Test2::Util::BEGIN@8 at line 86
sub TIEHASH {
7412µs bless $_[1], $_[0];
75}
76
77sub DESTROY { }
78
79
# spent 1.66ms (1.53+126µs) within Config::AUTOLOAD which was called: # once (1.53ms+126µs) by Config::FETCH at line 70
sub AUTOLOAD {
80160µs require 'Config_heavy.pl';
81110µs26µs goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
# spent 5µs making 1 call to Config::launcher # spent 900ns making 1 call to CORE::match
82 die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
83}
84
85# tie returns the object, so the value returned to require will be true.
86116µs11µstie %Config, 'Config', {
# spent 1µs making 1 call to Config::TIEHASH
87 archlibexp => '/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux',
88 archname => 'x86_64-linux',
89 cc => 'cc',
90 d_readlink => 'define',
91 d_symlink => 'define',
92 dlext => 'so',
93 dlsrc => 'dl_dlopen.xs',
94 dont_use_nlink => undef,
95 exe_ext => '',
96 inc_version_list => '',
97 intsize => '4',
98 ldlibpthname => 'LD_LIBRARY_PATH',
99 libpth => '/usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib /usr/lib64',
100 osname => 'linux',
101 osvers => '6.2.0-39-generic',
102 path_sep => ':',
103 privlibexp => '/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2',
104 scriptdir => '/home/micha/.plenv/versions/5.38.2/bin',
105 sitearchexp => '/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux',
106 sitelibexp => '/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2',
107 so => 'so',
108 useithreads => undef,
109 usevendorprefix => undef,
110 version => '5.38.2',
111};










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 95)[XML-Twig-pm-5871]-212-line.html0000644000175000017500000004114714576335353024351 0ustar michamicha Profile of (eval 95)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 95)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 17 statements in 45µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
142114µs19µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1115µs15µsXML::Twig::Elt::::BEGIN@1.39XML::Twig::Elt::BEGIN@1.39
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11745µs1630µs
# spent 15µs (5+10) within XML::Twig::Elt::BEGIN@1.39 which was called: # once (5µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 19µs (14+5) within XML::Twig::Elt::__ANON__[(eval 95)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 14 times, avg 1µs/call: # 11 times (9µs+3µs) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 1µs/call # 3 times (5µs+2µs) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 2µs/call
sub { no warnings; ; return ( $_[0]->gi eq "s:i") ? $_[0] : undef; }
# spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.39 # spent 10µs making 1 call to warnings::unimport # spent 5µs making 14 calls to XML::Twig::Elt::gi, avg 336ns/call
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Control-pm-45-line.html0000644000175000017500000004463714576335353025274 0ustar michamicha Profile of Test2/EventFacet/Control.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Control.pm
StatementsExecuted 10 statements in 107µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsTest2::EventFacet::Control::::BEGIN@2Test2::EventFacet::Control::BEGIN@2
1119µs9µsTest2::EventFacet::Control::::BEGIN@7Test2::EventFacet::Control::BEGIN@7
1114µs73µsTest2::EventFacet::Control::::BEGIN@8Test2::EventFacet::Control::BEGIN@8
1113µs19µsTest2::EventFacet::Control::::BEGIN@3Test2::EventFacet::Control::BEGIN@3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Control;
2217µs213µs
# spent 11µs (9+2) within Test2::EventFacet::Control::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Event::BEGIN@17 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::Control::BEGIN@2 # spent 2µs making 1 call to strict::import
3246µs235µs
# spent 19µs (3+16) within Test2::EventFacet::Control::BEGIN@3 which was called: # once (3µs+16µs) by Test2::Event::BEGIN@17 at line 3
use warnings;
# spent 19µs making 1 call to Test2::EventFacet::Control::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7225µs19µs
# spent 9µs within Test2::EventFacet::Control::BEGIN@7 which was called: # once (9µs+0s) by Test2::Event::BEGIN@17 at line 7
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 9µs making 1 call to Test2::EventFacet::Control::BEGIN@7
8217µs2143µs
# spent 73µs (4+70) within Test2::EventFacet::Control::BEGIN@8 which was called: # once (4µs+70µs) by Test2::Event::BEGIN@17 at line 8
use Test2::Util::HashBase qw{ -global -terminate -halt -has_callback -encoding -phase };
# spent 73µs making 1 call to Test2::EventFacet::Control::BEGIN@8 # spent 70µs making 1 call to Test2::Util::HashBase::import
9
1012µs1;
11
12__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 79)[XML-Twig-pm-5871]-196-line.html0000644000175000017500000004050714576335353024365 0ustar michamicha Profile of (eval 79)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 79)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 5 statements in 32µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116µs16µsXML::Twig::Elt::::BEGIN@1.23XML::Twig::Elt::BEGIN@1.23
2112µs2µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1532µs226µs
# spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.23 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1 # spent 2µs within XML::Twig::Elt::__ANON__[(eval 79)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 2 times, avg 750ns/call: # 2 times (2µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 750ns/call
sub { no warnings; ; return ($_[0]->{gi} == 38) ? $_[0] : undef; }
# spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.23 # spent 10µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 41)[JSON-PP-pm-692]-149-line.html0000644000175000017500000003204114576335353023774 0ustar michamicha Profile of (eval 41)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 41)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 1111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/builtin-pm-101-line.html0000644000175000017500000004152214576335353022340 0ustar michamicha Profile of builtin.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/builtin.pm
StatementsExecuted 5 statements in 35µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs12µsbuiltin::::BEGIN@3builtin::BEGIN@3
1113µs3µsbuiltin::::importbuiltin::import (xsub)
1113µs17µsbuiltin::::BEGIN@4builtin::BEGIN@4
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package builtin 0.008;
2
3220µs214µs
# spent 12µs (11+1) within builtin::BEGIN@3 which was called: # once (11µs+1µs) by File::Copy::BEGIN@14 at line 3
use strict;
# spent 12µs making 1 call to builtin::BEGIN@3 # spent 1µs making 1 call to strict::import
4214µs231µs
# spent 17µs (3+14) within builtin::BEGIN@4 which was called: # once (3µs+14µs) by File::Copy::BEGIN@14 at line 4
use warnings;
# spent 17µs making 1 call to builtin::BEGIN@4 # spent 14µs making 1 call to warnings::import
5
6# All code, including &import, is implemented by always-present functions in
7# the perl interpreter itself.
8# See also `builtin.c` in perl source
9
1011µs1;
11__END__
 
# spent 3µs within builtin::import which was called: # once (3µs+0s) by File::Copy::BEGIN@14 at line 14 of File/Copy.pm
sub builtin::import; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Info-pm-47-line.html0000644000175000017500000004554514576335353024550 0ustar michamicha Profile of Test2/EventFacet/Info.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Info.pm
StatementsExecuted 10 statements in 96µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsTest2::EventFacet::Info::::BEGIN@2Test2::EventFacet::Info::BEGIN@2
1117µs7µsTest2::EventFacet::Info::::BEGIN@9Test2::EventFacet::Info::BEGIN@9
1115µs61µsTest2::EventFacet::Info::::BEGIN@10Test2::EventFacet::Info::BEGIN@10
1113µs19µsTest2::EventFacet::Info::::BEGIN@3Test2::EventFacet::Info::BEGIN@3
0000s0sTest2::EventFacet::Info::::is_listTest2::EventFacet::Info::is_list
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Info;
2217µs213µs
# spent 11µs (9+2) within Test2::EventFacet::Info::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Event::BEGIN@19 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::Info::BEGIN@2 # spent 2µs making 1 call to strict::import
3239µs236µs
# spent 19µs (3+16) within Test2::EventFacet::Info::BEGIN@3 which was called: # once (3µs+16µs) by Test2::Event::BEGIN@19 at line 3
use warnings;
# spent 19µs making 1 call to Test2::EventFacet::Info::BEGIN@3 # spent 16µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7sub is_list { 1 }
8
9222µs17µs
# spent 7µs within Test2::EventFacet::Info::BEGIN@9 which was called: # once (7µs+0s) by Test2::Event::BEGIN@19 at line 9
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 7µs making 1 call to Test2::EventFacet::Info::BEGIN@9
10216µs2117µs
# spent 61µs (5+56) within Test2::EventFacet::Info::BEGIN@10 which was called: # once (5µs+56µs) by Test2::Event::BEGIN@19 at line 10
use Test2::Util::HashBase qw{-tag -debug -important -table};
# spent 61µs making 1 call to Test2::EventFacet::Info::BEGIN@10 # spent 56µs making 1 call to Test2::Util::HashBase::import
11
1212µs1;
13
14__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 90)[XML-Twig-pm-5871]-207-line.html0000644000175000017500000004116014576335353024343 0ustar michamicha Profile of (eval 90)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 90)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 17 statements in 47µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
142114µs19µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs16µsXML::Twig::Elt::::BEGIN@1.34XML::Twig::Elt::BEGIN@1.34
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11747µs1631µs
# spent 19µs (14+5) within XML::Twig::Elt::__ANON__[(eval 90)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 14 times, avg 1µs/call: # 11 times (10µs+3µs) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 1µs/call # 3 times (5µs+2µs) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 2µs/call # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.34 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ( $_[0]->gi eq "s:vertAlign") ? $_[0] : undef; }
# spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.34 # spent 10µs making 1 call to warnings::unimport # spent 5µs making 14 calls to XML::Twig::Elt::gi, avg 336ns/call
2;










Spreadsheet-ParseXLSX-0.35/nytprof/strict-pm-249-line.html0000644000175000017500000017546414576335353022234 0ustar michamicha Profile of strict.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/strict.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
136136128234µs234µsstrict::::importstrict::import
565629229µs229µsstrict::::unimportstrict::unimport
0000s0sstrict::::BEGINstrict::BEGIN
0000s0sstrict::::__ANON__[:31]strict::__ANON__[:31]
0000s0sstrict::::__ANON__[:37]strict::__ANON__[:37]
0000s0sstrict::::bitsstrict::bits
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package strict;
2
3$strict::VERSION = "1.12";
4
5my ( %bitmask, %explicit_bitmask );
6
7BEGIN {
8 # Verify that we're called correctly so that strictures will work.
9 # Can't use Carp, since Carp uses us!
10 # see also warnings.pm.
11 die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
12 if __FILE__ !~ ( '(?x) \b '.__PACKAGE__.' \.pmc? \z' )
13 && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
14
15 %bitmask = (
16 refs => 0x00000002,
17 subs => 0x00000200,
18 vars => 0x00000400,
19 );
20
21 %explicit_bitmask = (
22 refs => 0x00000020,
23 subs => 0x00000040,
24 vars => 0x00000080,
25 );
26
27 my $bits = 0;
28 $bits |= $_ for values %bitmask;
29
30 my $inline_all_bits = $bits;
31 *all_bits = sub () { $inline_all_bits };
32
33 $bits = 0;
34 $bits |= $_ for values %explicit_bitmask;
35
36 my $inline_all_explicit_bits = $bits;
37 *all_explicit_bits = sub () { $inline_all_explicit_bits };
38}
39
40sub bits {
41 my $bits = 0;
42 my @wrong;
43 foreach my $s (@_) {
44 if (exists $bitmask{$s}) {
45 $^H |= $explicit_bitmask{$s};
46
47 $bits |= $bitmask{$s};
48 }
49 else {
50 push @wrong, $s;
51 }
52 }
53 if (@wrong) {
54 require Carp;
55 Carp::croak("Unknown 'strict' tag(s) '@wrong'");
56 }
57 $bits;
58}
59
60
# spent 234µs within strict::import which was called 136 times, avg 2µs/call: # once (18µs+0s) by main::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t # once (4µs+0s) by vars::BEGIN@8 at line 8 of vars.pm # once (4µs+0s) by base::BEGIN@4 at line 4 of base.pm # once (3µs+0s) by Symbol::BEGIN@167 at line 167 of Symbol.pm # once (2µs+0s) by Test2::EventFacet::Parent::BEGIN@2 at line 2 of Test2/EventFacet/Parent.pm # once (2µs+0s) by Test2::EventFacet::Plan::BEGIN@2 at line 2 of Test2/EventFacet/Plan.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm # once (2µs+0s) by Test2::API::BEGIN@2 at line 2 of Test2/API.pm # once (2µs+0s) by List::Util::BEGIN@9 at line 9 of List/Util.pm # once (2µs+0s) by Test2::Util::BEGIN@2 at line 2 of Test2/Util.pm # once (2µs+0s) by Test2::Event::Pass::BEGIN@2 at line 2 of Test2/Event/Pass.pm # once (2µs+0s) by Test::Builder::Formatter::BEGIN@2 at line 2 of Test/Builder/Formatter.pm # once (2µs+0s) by Test::More::BEGIN@4 at line 4 of Test/More.pm # once (2µs+0s) by Test2::API::Context::BEGIN@2 at line 2 of Test2/API/Context.pm # once (2µs+0s) by Test2::API::Instance::BEGIN@2 at line 2 of Test2/API/Instance.pm # once (2µs+0s) by Test2::Event::Bail::BEGIN@2 at line 2 of Test2/Event/Bail.pm # once (2µs+0s) by Carp::BEGIN@4 at line 4 of Carp.pm # once (2µs+0s) by Config::BEGIN@9 at line 9 of Config.pm # once (2µs+0s) by Config::BEGIN@5 at line 5 of Config_heavy.pl # once (2µs+0s) by Test2::Formatter::BEGIN@2 at line 2 of Test2/Formatter.pm # once (2µs+0s) by Test2::Event::Note::BEGIN@2 at line 2 of Test2/Event/Note.pm # once (2µs+0s) by Exporter::BEGIN@3 at line 3 of Exporter.pm # once (2µs+0s) by Test2::API::Stack::BEGIN@2 at line 2 of Test2/API/Stack.pm # once (2µs+0s) by Test2::Event::BEGIN@2 at line 2 of Test2/Event.pm # once (2µs+0s) by Test2::Event::Subtest::BEGIN@2 at line 2 of Test2/Event/Subtest.pm # once (2µs+0s) by Test2::Event::Diag::BEGIN@2 at line 2 of Test2/Event/Diag.pm # once (2µs+0s) by Test2::Event::Plan::BEGIN@2 at line 2 of Test2/Event/Plan.pm # once (2µs+0s) by Archive::Zip::Archive::BEGIN@5 at line 5 of Archive/Zip/Archive.pm # once (2µs+0s) by Test2::Event::V2::BEGIN@2 at line 2 of Test2/Event/V2.pm # once (2µs+0s) by Test2::EventFacet::Hub::BEGIN@2 at line 2 of Test2/EventFacet/Hub.pm # once (2µs+0s) by Test2::Event::Waiting::BEGIN@2 at line 2 of Test2/Event/Waiting.pm # once (2µs+0s) by File::Temp::BEGIN@145 at line 145 of File/Temp.pm # once (2µs+0s) by Test2::Event::Ok::BEGIN@2 at line 2 of Test2/Event/Ok.pm # once (2µs+0s) by Test2::EventFacet::Info::BEGIN@2 at line 2 of Test2/EventFacet/Info.pm # once (2µs+0s) by Test2::Event::Exception::BEGIN@2 at line 2 of Test2/Event/Exception.pm # once (2µs+0s) by Test2::Event::Fail::BEGIN@2 at line 2 of Test2/Event/Fail.pm # once (2µs+0s) by Test::Builder::TodoDiag::BEGIN@2 at line 2 of Test/Builder/TodoDiag.pm # once (2µs+0s) by Test2::EventFacet::Trace::BEGIN@2 at line 2 of Test2/EventFacet/Trace.pm # once (2µs+0s) by OLE::Storage_Lite::PPS::Root::BEGIN@168 at line 168 of OLE/Storage_Lite.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (2µs+0s) by Test2::Util::ExternalMeta::BEGIN@2 at line 2 of Test2/Util/ExternalMeta.pm # once (2µs+0s) by Digest::Perl::MD5::BEGIN@2 at line 2 of Digest/Perl/MD5.pm # once (2µs+0s) by Spreadsheet::ParseExcel::Workbook::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Workbook.pm # once (2µs+0s) by Archive::Zip::DirectoryMember::BEGIN@3 at line 3 of Archive/Zip/DirectoryMember.pm # once (2µs+0s) by POSIX::BEGIN@2 at line 2 of POSIX.pm # once (2µs+0s) by Spreadsheet::ParseExcel::Font::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Font.pm # once (2µs+0s) by Time::HiRes::BEGIN@4 at line 4 of Time/HiRes.pm # once (2µs+0s) by File::Spec::BEGIN@3 at line 3 of File/Spec.pm # once (2µs+0s) by Test2::EventFacet::Amnesty::BEGIN@2 at line 2 of Test2/EventFacet/Amnesty.pm # once (2µs+0s) by Test2::EventFacet::Control::BEGIN@2 at line 2 of Test2/EventFacet/Control.pm # once (2µs+0s) by Spreadsheet::ParseExcel::BEGIN@17 at line 17 of Spreadsheet/ParseExcel.pm # once (2µs+0s) by Test::Builder::Module::BEGIN@3 at line 3 of Test/Builder/Module.pm # once (2µs+0s) by Crypt::Mode::ECB::BEGIN@5 at line 5 of Crypt/Mode/ECB.pm # once (2µs+0s) by Encode::MIME::Name::BEGIN@2 at line 2 of Encode/MIME/Name.pm # once (2µs+0s) by Archive::Zip::Member::BEGIN@5 at line 5 of Archive/Zip/Member.pm # once (2µs+0s) by Time::Local::BEGIN@3 at line 3 of Time/Local.pm # once (2µs+0s) by Archive::Zip::StringMember::BEGIN@3 at line 3 of Archive/Zip/StringMember.pm # once (2µs+0s) by Archive::Zip::ZipFileMember::BEGIN@3 at line 3 of Archive/Zip/ZipFileMember.pm # once (2µs+0s) by Test2::Event::Skip::BEGIN@2 at line 2 of Test2/Event/Skip.pm # once (2µs+0s) by Test2::EventFacet::About::BEGIN@2 at line 2 of Test2/EventFacet/About.pm # once (2µs+0s) by Archive::Zip::FileMember::BEGIN@3 at line 3 of Archive/Zip/FileMember.pm # once (2µs+0s) by Encode::BEGIN@5 at line 5 of Encode.pm # once (2µs+0s) by Test2::EventFacet::Error::BEGIN@2 at line 2 of Test2/EventFacet/Error.pm # once (2µs+0s) by parent::BEGIN@2 at line 2 of parent.pm # once (2µs+0s) by Exporter::Heavy::BEGIN@3 at line 3 of Exporter/Heavy.pm # once (2µs+0s) by File::Glob::BEGIN@3 at line 3 of File/Glob.pm # once (2µs+0s) by Encode::Encoding::BEGIN@4 at line 4 of Encode/Encoding.pm # once (2µs+0s) by Scalar::Util::BEGIN@9 at line 9 of Scalar/Util.pm # once (2µs+0s) by Archive::Zip::NewFileMember::BEGIN@3 at line 3 of Archive/Zip/NewFileMember.pm # once (2µs+0s) by Encode::Config::BEGIN@7 at line 7 of Encode/Config.pm # once (2µs+0s) by XML::Parser::BEGIN@11 at line 11 of XML/Parser.pm # once (2µs+0s) by Test2::Hub::Interceptor::BEGIN@2 at line 2 of Test2/Hub/Interceptor.pm # once (2µs+0s) by Test2::EventFacet::Assert::BEGIN@2 at line 2 of Test2/EventFacet/Assert.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::Cell::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Cell.pm # once (2µs+0s) by File::Copy::BEGIN@11 at line 11 of File/Copy.pm # once (2µs+0s) by Encode::Alias::BEGIN@2 at line 2 of Encode/Alias.pm # once (2µs+0s) by IO::File::BEGIN@120 at line 120 of IO/File.pm # once (2µs+0s) by Compress::Raw::Zlib::BEGIN@8 at line 8 of Compress/Raw/Zlib.pm # once (2µs+0s) by Test2::Hub::BEGIN@2 at line 2 of Test2/Hub.pm # once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@1 at line 1 of XML/Twig.pm # once (2µs+0s) by File::Find::BEGIN@3 at line 3 of File/Find.pm # once (2µs+0s) by FileHandle::BEGIN@4 at line 4 of FileHandle.pm # once (2µs+0s) by Test::Builder::BEGIN@4 at line 4 of Test/Builder.pm # once (2µs+0s) by Digest::base::BEGIN@3 at line 3 of Digest/base.pm # once (2µs+0s) by Test2::Util::HashBase::BEGIN@2 at line 2 of Test2/Util/HashBase.pm # once (2µs+0s) by overload::BEGIN@3 at line 3 of overload.pm # once (2µs+0s) by MIME::Base64::BEGIN@3 at line 3 of MIME/Base64.pm # once (2µs+0s) by Spreadsheet::ParseExcel::Worksheet::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Worksheet.pm # once (2µs+0s) by File::Temp::Dir::BEGIN@2602 at line 2602 of File/Temp.pm # once (2µs+0s) by Test2::EventFacet::Meta::BEGIN@2 at line 2 of Test2/EventFacet/Meta.pm # once (2µs+0s) by URI::BEGIN@3 at line 3 of URI.pm # once (2µs+0s) by Fcntl::BEGIN@58 at line 58 of Fcntl.pm # once (2µs+0s) by mro::BEGIN@10 at line 10 of mro.pm # once (2µs+0s) by JSON::PP::BEGIN@6 at line 6 of JSON/PP.pm # once (2µs+0s) by Test2::Util::Facets2Legacy::BEGIN@2 at line 2 of Test2/Util/Facets2Legacy.pm # once (2µs+0s) by Test2::EventFacet::BEGIN@2 at line 2 of Test2/EventFacet.pm # once (2µs+0s) by Test2::Hub::Subtest::BEGIN@2 at line 2 of Test2/Hub/Subtest.pm # once (2µs+0s) by OLE::Storage_Lite::PPS::File::BEGIN@713 at line 713 of OLE/Storage_Lite.pm # once (1µs+0s) by Digest::SHA::BEGIN@5 at line 5 of Digest/SHA.pm # once (1µs+0s) by URI::Escape::BEGIN@3 at line 3 of URI/Escape.pm # once (1µs+0s) by Archive::Zip::BEGIN@4 at line 4 of Archive/Zip.pm # once (1µs+0s) by Test2::Formatter::TAP::BEGIN@2 at line 2 of Test2/Formatter/TAP.pm # once (1µs+0s) by Crypt::RC4::BEGIN@15 at line 15 of Crypt/RC4.pm # once (1µs+0s) by File::Find::BEGIN@13 at line 13 of File/Find.pm # once (1µs+0s) by constant::BEGIN@3 at line 3 of constant.pm # once (1µs+0s) by Graphics::ColorUtils::BEGIN@5 at line 5 of Graphics/ColorUtils.pm # once (1µs+0s) by Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm # once (1µs+0s) by bytes::BEGIN@3 at line 3 of bytes.pm # once (1µs+0s) by File::Basename::BEGIN@50 at line 50 of File/Basename.pm # once (1µs+0s) by File::Path::BEGIN@4 at line 4 of File/Path.pm # once (1µs+0s) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/FmtDefault.pm # once (1µs+0s) by IO::Seekable::BEGIN@99 at line 99 of IO/Seekable.pm # once (1µs+0s) by utf8::BEGIN@3 at line 3 of utf8.pm # once (1µs+0s) by Test2::Hub::Interceptor::Terminator::BEGIN@2 at line 2 of Test2/Hub/Interceptor/Terminator.pm # once (1µs+0s) by IO::Handle::BEGIN@272 at line 272 of IO/Handle.pm # once (1µs+0s) by OLE::Storage_Lite::PPS::Dir::BEGIN@801 at line 801 of OLE/Storage_Lite.pm # once (1µs+0s) by Errno::BEGIN@9 at line 9 of Errno.pm # once (1µs+0s) by builtin::BEGIN@3 at line 3 of builtin.pm # once (1µs+0s) by XML::Parser::Expat::BEGIN@3 at line 3 of XML/Parser/Expat.pm # once (1µs+0s) by Spreadsheet::ParseExcel::Format::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Format.pm # once (1µs+0s) by Cwd::BEGIN@2 at line 2 of Cwd.pm # once (1µs+0s) by Test2::Util::Trace::BEGIN@5 at line 5 of Test2/Util/Trace.pm # once (1µs+0s) by IO::BEGIN@7 at line 7 of IO.pm # once (1µs+0s) by Symbol::BEGIN@3 at line 3 of Symbol.pm # once (1µs+0s) by JSON::PP::Boolean::BEGIN@3 at line 3 of JSON/PP/Boolean.pm # once (1µs+0s) by JSON::BEGIN@4 at line 4 of JSON.pm # once (1µs+0s) by JSON::PP::IncrParser::BEGIN@1485 at line 1485 of JSON/PP.pm # once (1µs+0s) by File::Spec::Unix::BEGIN@3 at line 3 of File/Spec/Unix.pm # once (1µs+0s) by OLE::Storage_Lite::PPS::BEGIN@12 at line 12 of OLE/Storage_Lite.pm # once (1µs+0s) by Spreadsheet::ParseExcel::Cell::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Cell.pm # once (1µs+0s) by CryptX::BEGIN@3 at line 3 of CryptX.pm # once (1µs+0s) by Crypt::Mode::CBC::BEGIN@5 at line 5 of Crypt/Mode/CBC.pm # once (1µs+0s) by Spreadsheet::ParseExcel::Utility::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Utility.pm # once (1µs+0s) by OLE::Storage_Lite::BEGIN@828 at line 828 of OLE/Storage_Lite.pm # once (1µs+0s) by Crypt::Cipher::BEGIN@3 at line 3 of Crypt/Cipher.pm
sub import {
61 shift;
62 $^H |= @_ ? &bits : all_bits | all_explicit_bits;
63}
64
65
# spent 229µs within strict::unimport which was called 56 times, avg 4µs/call: # once (15µs+0s) by Test::Builder::BEGIN@120 at line 120 of Test/Builder.pm # once (6µs+0s) by XML::Parser::Expat::BEGIN@460 at line 460 of XML/Parser/Expat.pm # once (6µs+0s) by Symbol::BEGIN@103 at line 103 of Symbol.pm # once (5µs+0s) by Carp::BEGIN@730 at line 730 of Carp.pm # once (5µs+0s) by Test2::API::Instance::BEGIN@62 at line 62 of Test2/API/Instance.pm # once (5µs+0s) by Time::HiRes::BEGIN@70 at line 70 of Time/HiRes.pm # once (5µs+0s) by Carp::BEGIN@256 at line 256 of Carp.pm # once (5µs+0s) by Carp::BEGIN@188 at line 188 of Carp.pm # once (4µs+0s) by Test2::Util::HashBase::BEGIN@94 at line 94 of Test2/Util/HashBase.pm # once (4µs+0s) by Cwd::BEGIN@644 at line 644 of Cwd.pm # once (4µs+0s) by XML::Twig::BEGIN@1327 at line 1327 of XML/Twig.pm # once (4µs+0s) by List::Util::BEGIN@35 at line 35 of List/Util.pm # once (4µs+0s) by IO::Handle::BEGIN@617 at line 617 of IO/Handle.pm # once (4µs+0s) by Test::More::BEGIN@209 at line 209 of Test/More.pm # once (4µs+0s) by Test::Builder::BEGIN@1518 at line 1518 of Test/Builder.pm # once (4µs+0s) by XML::Twig::BEGIN@3229 at line 3229 of XML/Twig.pm # once (4µs+0s) by JSON::Backend::PP::BEGIN@342 at line 342 of JSON.pm # once (4µs+0s) by URI::BEGIN@180 at line 180 of URI.pm # once (4µs+0s) by Test::Builder::BEGIN@1251 at line 1251 of Test/Builder.pm # once (4µs+0s) by constant::BEGIN@40 at line 40 of constant.pm # once (4µs+0s) by XML::Twig::BEGIN@3587 at line 3587 of XML/Twig.pm # once (4µs+0s) by Exporter::BEGIN@4 at line 4 of Exporter.pm # once (4µs+0s) by File::Path::BEGIN@29 at line 29 of File/Path.pm # once (4µs+0s) by Test2::EventFacet::Meta::BEGIN@30 at line 30 of Test2/EventFacet/Meta.pm # once (4µs+0s) by Symbol::BEGIN@137 at line 137 of Symbol.pm # once (4µs+0s) by Config::BEGIN@47 at line 47 of Config.pm # once (4µs+0s) by parent::BEGIN@21 at line 21 of parent.pm # once (4µs+0s) by File::Spec::Unix::BEGIN@167 at line 167 of File/Spec/Unix.pm # once (4µs+0s) by Compress::Raw::Zlib::BEGIN@121 at line 121 of Compress/Raw/Zlib.pm # once (4µs+0s) by Test2::Util::HashBase::BEGIN@37 at line 37 of Test2/Util/HashBase.pm # once (4µs+0s) by File::Temp::BEGIN@240 at line 240 of File/Temp.pm # once (4µs+0s) by Exporter::Heavy::BEGIN@4 at line 4 of Exporter/Heavy.pm # once (4µs+0s) by XML::Twig::BEGIN@4159 at line 4159 of XML/Twig.pm # once (4µs+0s) by XML::Twig::BEGIN@3852 at line 3852 of XML/Twig.pm # once (4µs+0s) by Symbol::BEGIN@156 at line 156 of Symbol.pm # once (4µs+0s) by Test::Builder::BEGIN@61 at line 61 of Test/Builder.pm # once (4µs+0s) by Test::Builder::BEGIN@1539 at line 1539 of Test/Builder.pm # once (4µs+0s) by Test::Builder::BEGIN@102 at line 102 of Test/Builder.pm # once (4µs+0s) by FileHandle::BEGIN@46 at line 46 of FileHandle.pm # once (4µs+0s) by Carp::BEGIN@751 at line 751 of Carp.pm # once (4µs+0s) by Test::Builder::BEGIN@116 at line 116 of Test/Builder.pm # once (4µs+0s) by XML::Twig::BEGIN@3619 at line 3619 of XML/Twig.pm # once (3µs+0s) by constant::BEGIN@65 at line 65 of constant.pm # once (3µs+0s) by XML::Twig::BEGIN@3648 at line 3648 of XML/Twig.pm # once (3µs+0s) by Test::Builder::BEGIN@1556 at line 1556 of Test/Builder.pm # once (3µs+0s) by constant::BEGIN@141 at line 141 of constant.pm # once (3µs+0s) by overload::BEGIN@4 at line 4 of overload.pm # once (3µs+0s) by File::Temp::BEGIN@270 at line 270 of File/Temp.pm # once (3µs+0s) by constant::BEGIN@90 at line 90 of constant.pm # once (3µs+0s) by XML::Twig::BEGIN@4246 at line 4246 of XML/Twig.pm # once (3µs+0s) by XML::Twig::BEGIN@4175 at line 4175 of XML/Twig.pm # once (3µs+0s) by XML::Twig::BEGIN@4211 at line 4211 of XML/Twig.pm # once (3µs+0s) by Spreadsheet::ParseExcel::BEGIN@2628 at line 2628 of Spreadsheet/ParseExcel.pm # once (3µs+0s) by POSIX::BEGIN@225 at line 225 of POSIX.pm # once (2µs+0s) by XML::Twig::BEGIN@4181 at line 4181 of XML/Twig.pm # once (2µs+0s) by File::Glob::BEGIN@54 at line 54 of File/Glob.pm
sub unimport {
66 shift;
67
68 if (@_) {
69 $^H &= ~&bits;
70 }
71 else {
72 $^H &= ~all_bits;
73 $^H |= all_explicit_bits;
74 }
75}
76
771;
78__END__
79
80=head1 NAME
81
82strict - Perl pragma to restrict unsafe constructs
83
84=head1 SYNOPSIS
85
86 use strict;
87
88 use strict "vars";
89 use strict "refs";
90 use strict "subs";
91
92 use strict;
93 no strict "vars";
94
95=head1 DESCRIPTION
96
97The C<strict> pragma disables certain Perl expressions that could behave
98unexpectedly or are difficult to debug, turning them into errors. The
99effect of this pragma is limited to the current file or scope block.
100
101If no import list is supplied, all possible restrictions are assumed.
102(This is the safest mode to operate in, but is sometimes too strict for
103casual programming.) Currently, there are three possible things to be
104strict about: "subs", "vars", and "refs".
105
106=over 6
107
108=item C<strict refs>
109
110This generates a runtime error if you
111use symbolic references (see L<perlref>).
112
113 use strict 'refs';
114 $ref = \$foo;
115 print $$ref; # ok
116 $ref = "foo";
117 print $$ref; # runtime error; normally ok
118 $file = "STDOUT";
119 print $file "Hi!"; # error; note: no comma after $file
120
121There is one exception to this rule:
122
123 $bar = \&{'foo'};
124 &$bar;
125
126is allowed so that C<goto &$AUTOLOAD> would not break under stricture.
127
128
129=item C<strict vars>
130
131This generates a compile-time error if you access a variable that was
132neither explicitly declared (using any of C<my>, C<our>, C<state>, or C<use
133vars>) nor fully qualified. (Because this is to avoid variable suicide
134problems and subtle dynamic scoping issues, a merely C<local> variable isn't
135good enough.) See L<perlfunc/my>, L<perlfunc/our>, L<perlfunc/state>,
136L<perlfunc/local>, and L<vars>.
137
138 use strict 'vars';
139 $X::foo = 1; # ok, fully qualified
140 my $foo = 10; # ok, my() var
141 local $baz = 9; # blows up, $baz not declared before
142
143 package Cinna;
144 our $bar; # Declares $bar in current package
145 $bar = 'HgS'; # ok, global declared via pragma
146
147The local() generated a compile-time error because you just touched a global
148name without fully qualifying it.
149
150Because of their special use by sort(), the variables $a and $b are
151exempted from this check.
152
153=item C<strict subs>
154
155This disables the poetry optimization, generating a compile-time error if
156you try to use a bareword identifier that's not a subroutine, unless it
157is a simple identifier (no colons) and that it appears in curly braces,
158on the left hand side of the C<< => >> symbol, or has the unary minus
159operator applied to it.
160
161 use strict 'subs';
162 $SIG{PIPE} = Plumber; # blows up
163 $SIG{PIPE} = "Plumber"; # fine: quoted string is always ok
164 $SIG{PIPE} = \&Plumber; # preferred form
165
166=back
167
168See L<perlmodlib/Pragmatic Modules>.
169
170=head1 HISTORY
171
172C<strict 'subs'>, with Perl 5.6.1, erroneously permitted to use an unquoted
173compound identifier (e.g. C<Foo::Bar>) as a hash key (before C<< => >> or
174inside curlies), but without forcing it always to a literal string.
175
176Starting with Perl 5.8.1 strict is strict about its restrictions:
177if unknown restrictions are used, the strict pragma will abort with
178
179 Unknown 'strict' tag(s) '...'
180
181As of version 1.04 (Perl 5.10), strict verifies that it is used as
182"strict" to avoid the dreaded Strict trap on case insensitive file
183systems.
184
185=cut










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 62)[XML-Twig-pm-7113]-179-line.html0000644000175000017500000004122514576335353024343 0ustar michamicha Profile of (eval 62)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 62)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 15 statements in 109µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
21121µs80µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1118µs19µsXML::Twig::Elt::::BEGIN@1.6XML::Twig::Elt::BEGIN@1.6
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
115109µs890µs
# spent 19µs (8+11) within XML::Twig::Elt::BEGIN@1.6 which was called: # once (8µs+11µs) by XML::Twig::Elt::_install_xpath at line 1 # spent 80µs (21+60) within XML::Twig::Elt::__ANON__[(eval 62)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called 2 times, avg 40µs/call: # 2 times (21µs+60µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm, avg 40µs/call
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { grep { ((defined $_->{'att'}->{"Type"}) && ($_->{'att'}->{"Type"} eq "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet")) } $_->descendants( 'packagerels:Relationship') } @results;return XML::Twig::_unique_elts( @results); }
# spent 44µs making 2 calls to XML::Twig::descendants, avg 22µs/call # spent 19µs making 1 call to XML::Twig::Elt::BEGIN@1.6 # spent 11µs making 1 call to warnings::unimport # spent 9µs making 2 calls to XML::Twig::Elt::twig, avg 4µs/call # spent 6µs making 2 calls to XML::Twig::_unique_elts, avg 3µs/call
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Diag-pm-53-line.html0000644000175000017500000005447014576335353023550 0ustar michamicha Profile of Test2/Event/Diag.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Diag.pm
StatementsExecuted 10 statements in 171µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs12µsTest2::Event::Diag::::BEGIN@2Test2::Event::Diag::BEGIN@2
1116µs6µsTest2::Event::Diag::::BEGIN@8Test2::Event::Diag::BEGIN@8
1114µs44µsTest2::Event::Diag::::BEGIN@9Test2::Event::Diag::BEGIN@9
1114µs21µsTest2::Event::Diag::::BEGIN@3Test2::Event::Diag::BEGIN@3
0000s0sTest2::Event::Diag::::diagnosticsTest2::Event::Diag::diagnostics
0000s0sTest2::Event::Diag::::facet_dataTest2::Event::Diag::facet_data
0000s0sTest2::Event::Diag::::initTest2::Event::Diag::init
0000s0sTest2::Event::Diag::::summaryTest2::Event::Diag::summary
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Diag;
2223µs213µs
# spent 12µs (10+2) within Test2::Event::Diag::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@93 at line 2
use strict;
# spent 12µs making 1 call to Test2::Event::Diag::BEGIN@2 # spent 2µs making 1 call to strict::import
3232µs238µs
# spent 21µs (4+17) within Test2::Event::Diag::BEGIN@3 which was called: # once (4µs+17µs) by Test2::API::BEGIN@93 at line 3
use warnings;
# spent 21µs making 1 call to Test2::Event::Diag::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8227µs16µs
# spent 6µs within Test2::Event::Diag::BEGIN@8 which was called: # once (6µs+0s) by Test2::API::BEGIN@93 at line 8
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 6µs making 1 call to Test2::Event::Diag::BEGIN@8
9287µs284µs
# spent 44µs (4+40) within Test2::Event::Diag::BEGIN@9 which was called: # once (4µs+40µs) by Test2::API::BEGIN@93 at line 9
use Test2::Util::HashBase qw/message/;
# spent 44µs making 1 call to Test2::Event::Diag::BEGIN@9 # spent 40µs making 1 call to Test2::Util::HashBase::import
10
11sub init {
12 $_[0]->{+MESSAGE} = 'undef' unless defined $_[0]->{+MESSAGE};
13}
14
15sub summary { $_[0]->{+MESSAGE} }
16
17sub diagnostics { 1 }
18
19sub facet_data {
20 my $self = shift;
21
22 my $out = $self->common_facet_data;
23
24 $out->{info} = [
25 {
26 tag => 'DIAG',
27 debug => 1,
28 details => $self->{+MESSAGE},
29 }
30 ];
31
32 return $out;
33}
34
3512µs1;
36
37__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 67)[XML-Twig-pm-5871]-184-line.html0000644000175000017500000004043214576335353024354 0ustar michamicha Profile of (eval 67)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 67)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 4 statements in 35µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115µs15µsXML::Twig::Elt::::BEGIN@1.11XML::Twig::Elt::BEGIN@1.11
1112µs2µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1435µs224µs
# spent 2µs within XML::Twig::Elt::__ANON__[(eval 67)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called: # once (2µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm # spent 15µs (5+10) within XML::Twig::Elt::BEGIN@1.11 which was called: # once (5µs+10µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 10) ? $_[0] : undef; }
# spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.11 # spent 10µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 17)[JSON-pm-274]-143-line.html0000644000175000017500000003444014576335353023455 0ustar michamicha Profile of (eval 17)[JSON.pm:274]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 17)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/JSON.pm:274]
StatementsExecuted 1 statements in 37µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/JSON.pm line 274
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11127µs27µsJSON::::BEGIN@2JSON::BEGIN@2
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2137µs127µs
# spent 27µs within JSON::BEGIN@2 which was called: # once (27µs+0s) by JSON::__load_xs at line 2
use JSON::XS 2.34 ();
# spent 27µs making 1 call to JSON::BEGIN@2
3
4;










Spreadsheet-ParseXLSX-0.35/nytprof/utf8-pm-131-line.html0000644000175000017500000005060414576335353021564 0ustar michamicha Profile of utf8.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/utf8.pm
StatementsExecuted 11 statements in 115µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs9µsutf8::::BEGIN@3utf8::BEGIN@3
3314µs4µsutf8::::unimportutf8::unimport
5223µs3µsutf8::::encodeutf8::encode (xsub)
1113µs18µsutf8::::BEGIN@4utf8::BEGIN@4
1112µs2µsutf8::::importutf8::import
0000s0sutf8::::AUTOLOADutf8::AUTOLOAD
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package utf8;
2
3216µs211µs
# spent 9µs (8+1) within utf8::BEGIN@3 which was called: # once (8µs+1µs) by XML::Twig::BEGIN@25 at line 3
use strict;
# spent 9µs making 1 call to utf8::BEGIN@3 # spent 1µs making 1 call to strict::import
4281µs232µs
# spent 18µs (3+15) within utf8::BEGIN@4 which was called: # once (3µs+15µs) by XML::Twig::BEGIN@25 at line 4
use warnings;
# spent 18µs making 1 call to utf8::BEGIN@4 # spent 15µs making 1 call to warnings::import
5
61200nsour $hint_bits = 0x00800000;
7
81200nsour $VERSION = '1.25';
9our $AUTOLOAD;
10
11
# spent 2µs within utf8::import which was called: # once (2µs+0s) by XML::Twig::BEGIN@25 at line 25 of XML/Twig.pm
sub import {
1214µs $^H |= $hint_bits;
13}
14
15
# spent 4µs within utf8::unimport which was called 3 times, avg 2µs/call: # once (2µs+0s) by XML::Twig::BEGIN@4636 at line 4636 of XML/Twig.pm # once (2µs+0s) by XML::Twig::Elt::BEGIN@7919 at line 7919 of XML/Twig.pm # once (1µs+0s) by XML::Twig::BEGIN@4649 at line 4649 of XML/Twig.pm
sub unimport {
16312µs $^H &= ~$hint_bits;
17}
18
19sub AUTOLOAD {
20 goto &$AUTOLOAD if defined &$AUTOLOAD;
21 require Carp;
22 Carp::croak("Undefined subroutine $AUTOLOAD called");
23}
24
2512µs1;
26__END__
 
# spent 3µs within utf8::encode which was called 5 times, avg 600ns/call: # 4 times (2µs+0s) by base::__ANON__[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/base.pm:76] at line 74 of base.pm, avg 550ns/call # once (800ns+0s) by JSON::BEGIN@1 at line 1288 of JSON/PP.pm
sub utf8::encode; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 4)[Carp-pm-171]-17-line.html0000644000175000017500000003473014576335353023423 0ustar michamicha Profile of (eval 4)[Carp.pm:171]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 4)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm:171]
StatementsExecuted 3 statements in 25µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm line 171
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs13µsCarp::::BEGIN@1Carp::BEGIN@1
0000s0sCarp::::__ANON__[:1]Carp::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1325µs219µs
# spent 13µs (7+6) within Carp::BEGIN@1 which was called: # once (7µs+6µs) by Carp::BEGIN@169 at line 1
sub { no overloading; "$_[0]" }
# spent 13µs making 1 call to Carp::BEGIN@1 # spent 6µs making 1 call to overloading::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 71)[XML-Twig-pm-5871]-188-line.html0000644000175000017500000004322114576335353024352 0ustar michamicha Profile of (eval 71)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 71)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 13 statements in 70µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

NOTE!
The data used to generate this report page was merged from 2 of the 37 executions
of the string eval on line 5871 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs18µsXML::Twig::Elt::::BEGIN@1.15XML::Twig::Elt::BEGIN@1.15
1116µs15µsXML::Twig::Elt::::BEGIN@1.25XML::Twig::Elt::BEGIN@1.25
7315µs5µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1] (merge of 2 subs)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
11370µs453µs
# spent 18µs (7+11) within XML::Twig::Elt::BEGIN@1.15 which was called: # once (7µs+11µs) by XML::Twig::Elt::_install_cond at line 1 # spent 5µs within XML::Twig::Elt::__ANON__[(eval 71)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 7 times, avg 700ns/call: # (data for this subroutine includes 1 others that were merged with it) # 4 times (1µs+0s) by XML::Twig::Elt::first_child at line 6001 of XML/Twig.pm, avg 250ns/call # 2 times (1µs+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 650ns/call # once (3µs+0s) by XML::Twig::Elt::passes at line 5975 of XML/Twig.pm # spent 15µs (6+9) within XML::Twig::Elt::BEGIN@1.25 which was called: # once (6µs+9µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 31) ? $_[0] : undef; }
# spent 20µs making 2 calls to warnings::unimport, avg 10µs/call # spent 18µs making 1 call to XML::Twig::Elt::BEGIN@1.15 # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.25
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 42)[JSON-PP-pm-692]-150-line.html0000644000175000017500000003204214576335353023766 0ustar michamicha Profile of (eval 42)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 42)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 700ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11700ns 11111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 12)[File-Copy-pm-19]-102-line.html0000644000175000017500000003433214576335353024376 0ustar michamicha Profile of (eval 12)[File/Copy.pm:19]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 12)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Copy.pm:19]
StatementsExecuted 2 statements in 10µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/File/Copy.pm line 19
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115µs80µsFile::Copy::::BEGIN@1File::Copy::BEGIN@1
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1210µs2156µs
# spent 80µs (5+75) within File::Copy::BEGIN@1 which was called: # once (5µs+75µs) by File::Copy::BEGIN@19 at line 1
use Time::HiRes qw( stat utime )
# spent 80µs making 1 call to File::Copy::BEGIN@1 # spent 75µs making 1 call to Time::HiRes::import
2;










Spreadsheet-ParseXLSX-0.35/nytprof/js/0000775000175000017500000000000014576335353016560 5ustar michamichaSpreadsheet-ParseXLSX-0.35/nytprof/js/jit/0000775000175000017500000000000014576335353017346 5ustar michamichaSpreadsheet-ParseXLSX-0.35/nytprof/js/jit/gradient.png0000644000175000017500000003041614576335353021653 0ustar michamichaPNG  IHDRXsRGBbKGD pHYs  tIME%OtEXtCommentCreated with GIMPW IDATxڵm#Ϋ!EwL+K$u;bbtIϺߓǩxM΀?^G{~gߣ$͏k;^{NwaQlP(0 n4{j~ԼO~ܸ0}8;ܯì8qvaĝ[/Y|W\b?́|Wr:#H ;d8z}*:1mHx88Q|.Og'Eܯ17}v:Ed.uxB-RiWqoptL<DAcr8CYgtt"pӈx"gӏLzF!ƅ\6`we&DK8QЫi50pLʋ{K HE0}Aྫྷ %͉"h9jũOҹx4^꓁D*OA tPPsrI\Ȭw%Qy#GDϗQyhF(.(D;_54-p9h %@r]b}"ie\JzQ#sŃBG٫Wn!ml;tYl!٣0p>(Tn /y/Dn\SOy5RDB]4\"g8qUv.%Ѕ*YC}=Bjva%;2!NWՆ9ȴ_xCr%ȏ SZUR!uPٸuK}bo@K=ɥ pݮo$aR-Y\j0HAU'wLʓ$zQ 9!$Z [POM Q]hdn&@Rsό\}Ϋ(8Qӄ0.NU 7kWUTD^'Ȑ~3D0 ھ8"0|Ǒ <]gB323"%m뱜j`TVo )7Y&ސpNr $s-յQN12rIFe/C! A_ /mq kTKr%KTd<hׯ9To|L0!#&.zl-4Q`*kVB1 H6;0:Wt)] Gr)|&D9ͧSd൫뮙J|c@Djuuu^٩q4C>u [5 ?I'&VmUy<:1z xL+Ф@ T' Huh:]S%VA4TtUOD.IR('T'xRl 'QD.:u*)ҸĉL]捑_ŊnQ&r.%oz]GAOjPz+O[2DuYZ:89N~*>=߾vREr:Ѻ s3kl PsuXdETx67XWꦐ+oA(4PAv3kIRj8 #lwd"Vbp'/u :>2)I#4&J5GuIK:M&4"eH7 5(-xLGB!6K떐LM!&KO u(W}S~r)FIFJzP]2r;K*PM?aw(e-? 2dɌĐB: %OQ\Y0)ZIā!ڧRWXx7GKX #Crbk9^/ ~PɸJ^7  W{BNzU @/7/} t,XMWɪZ񤋑z#D KKOXy.[2ݕz-0.(?%ydlG}z{ x,,<;`2UȾ+8O՝tu5G|Z%Rp*YQpMr>=ty4C7*k}MA5]_ Ndcd{ϥ%dt "E9nG(l)%%t;xɴҿneGy75fUV\slQ)*>?E0}Ÿ*9]G}=(|'cY #zxKRig]4:qİui*{$+n~\s$$NM#L7Y|G)Rq0Q(C!"lxu'S۩\E/ %2FQΒߙvk <$],h| ?5+WI (T&[R "thIRCJ55d &!u'aW0;9!;hRp2MGz2s(/`-/QUxW2[F1i?(ۏט O 'xdgg 8Hd|>ksSN9tIO"M5=>q\`7&n!&q=A>!]$]}U';$x4&Ӓa76ktdJ%ڜ"r{;ԎW!|R}.& AgϑZom|@iTr*х8Y&*%;wtuNE@;<3\U4$`W+G$8]DY18G>\Z>5R2B,jn#)qYW کtٍ#J궈|MA>d2_r؝&" C,aF=$70]dz?h5'ᇘ0Hz[ӎ!γNh(r80\hCDZ$Z{(wpa/ݪr'")Fctw> cC#C-RpjM8h|q ㌇& 6GuSSЭ pDZU,׵TcyϞ@aTA38Vhǿg8xtSI|2܅^w$z #πJD"($rUw9r)_Hx]Cs;qwi(^شΫC.=3pDq\z6 att1u{G9@D^~"0bjcB?hht \tPNJ4pA LH.:D!8 l|9o1r7|Nu>nzMx wPU#|ۺcH8etJVo`DM!'Q%:>%ޞsB7FHBcqiޤ{C$|)ǻ˷."(c$j NQzvU gsiwSxfҔKuyPn׀ʭD~6w7ÈBwwܨKe@d8R<b%V~|%kVAɂd;0>PC< 1Vj<*L;O頏j?#؜$$'<$ʤ @y>sr2`@ \ADLʢ)xH(6h~8ÐJnnۿ=JՍ]bF$v2SH~޿hi35Z*(t =5qTmrFHk(`xS#q`]WI /8G@ G$FB}MQə\GCH .m_iQO'iDXH>-cdcneR!5'C29ykGwp@iIb$9BQ8wM> {D$bl XNwS}]Ұz|kLțvZu8%: `dSCEf]%>CxI%UJZ/z?f,j-_ܡQVԩG[M;qI 3ƄkFtjUKO$�al>1Hjx﯒{{ HL2}#U!t7A#i.CEP*{C%j'7>#tde~B)gp( Far{Lp&sS8Z)fVU#̂JU2Q&1 l2a)Wk4A8CrA6w@6?QcrXg :#L v(.$FC>sw$aV:>ANCF:ޜ$N%$bSbP2> #PlWJNȁM(r3e8y"X~J vjJ݌b2΋'4NhY,RIEte̴ {O>"?@WaU΅^d#QBh;{Tvy3vG+2?NeTp<$2lU. D%*gˉ'u)8ӱ;.ڤ^TxJU-gɗߓ ꜌*]IDAT8|遥NPS]#t}`Dzu Qgk CO*ǝm#~%;Od\b{GY࢈SnSψmj}f)l&é\2Dv`JItȐp v]}lc@2/ TE/ATpC @=~}~'܀KWqhT椢UH<%"̧X4.I2)[uCL$tW`SI{ ҲSNIn'HSJ]rSB$]JѨ [)U c*kR8fy3IzIR.}D\{ʸI΂yRû &L,Umz4J z9MKICTa{_I2LFIM%ߍv]4IuO3g%Uhd"ˮ+NwL*sne"H*0I w&x\GƷ\ٿ#jt,HG<9 T5N%[(I ?Fr%ccI{mCNdmȘ=I,yN*T3p.LnG=@"}gŁwJQr~`X5L973H-%IKb Z5쒞R>[Zo$.qVR܁X9k+WatتtGyD$L[}EiEiWoW!9i_Zp2nr*Q;x}tHRq*˞>tÍސyEZVBsjvHa:wIRݩxUrq'Sy tKIeK$BzT=Ζ?&@D#\R?UkúET+'Vs vhN[7]^&"86O 5!8$אۮ2ݛZ[t@"2N{cIZ(8/ uSp2t_Gy/m:I Lu0wody$ FV&ddU*|yiO8 S*8"(3O7gA%<. ڹO2U*tD#t(T`nT9\[^1޷\-M^&W1Hȧ{aHQL,5USnELq -i'ӵ&$dc ]@oȦXAeA1!L|vkUӖnvs}r%v.x+!YxLn#Y@dM0}vxpXGy)$m'Kyb/o8~=AGap;9 P8ͺoOg$T{Sv-ȥA=0 ; K{0:=҉#[%'R͵78@M!г>Qt}2"7ԈC"%!ҵn6+y uD& O:vkYSd}zM`dnf"V_^'J޿Tsx e$?SՒDtRyГ72&T$27zHOmU R쒨ӡT"«7ԙGW%Qf;ӐInTQtlJ} a8߃D㙀P'X?i՗)qHiCA *"!20d[Pv"I}`JEvSI31T iuu5T8~5ĪxOnېel"M2D`McUuM=WV:eO%預 =$}<%nR:;-?A6 *G dotư&2;9c7Se !}j8щ8`nq; N ( hŽv|e##MNoIn$hu:0)b:?!l/YM۫R!6NU) Yg!d<켨L,Tɕ4 8cP]|1i`U V$+ЈD;O0:i80u'1`wN?%*TɼN%mtnSV/WEHv#W݈#Q]Lroh#d+ݕrw;z[2p9F"QOjJ(3 $4*U>&yӦ4' 8(N.;pɱ(`nTfoH:wfé0.Y& ?Mg(I 2,wp]SWYW n~FIM(Sy/y $E78(QaDtw/s$zrDܨj!f9t( %K= <(4"a{Jd25 y&r}2PzHuK(d[1*COJ;AuI*z$q7dBdb#QvGғe8{K̩KlxpCoVу(K"##AE4 ALrsnH,ay! p T9zars-UN֦%!' 0ܰ[cHIo%L`ټtj⼺y],y|N*p!vKT2I|R[Y =7kS?0 f4/XlMhxF᯸IbC@Sxi:D&!"R@В&Lq3`6 ='n̎KOymTrs2% 'ii=!ӷ5J]vTu3Õ7!V^*^M9!`X9gl68bNћJZ :j*9Y>yS^`7_hײJ&8S$5TyUo&HyV8ӛ֘K`!-īA?o_c^'^%^O{׏?֋[޿.G_v>Ws>bO.q#@&w'rB˵ u9 rurnANh:nr7|B '\{\7>!@ZA  -^G MO䄖k#@&w'rB˵ u9 rurnANh:nr7|Be-1}function p(v,u){if(!s(v,u)){v.className=(v.className+" "+u)}}function a(v,u){v.className=v.className.replace(new RegExp("(^|\\s)"+u+"(?:\\s|$)"),"$1")}function e(u){return document.getElementById(u)}var o=function(v){v=v||{};var u=function(){this.constructor=u;if(o.prototyping){return this}var x=(this.initialize)?this.initialize.apply(this,arguments):this;return x};for(var w in o.Mutators){if(!v[w]){continue}v=o.Mutators[w](v,v[w]);delete v[w]}c(u,this);u.constructor=o;u.prototype=v;return u};o.Mutators={Extends:function(w,u){o.prototyping=u.prototype;var v=new u;delete v.parent;v=o.inherit(v,w);delete o.prototyping;return v},Implements:function(u,v){g(j(v),function(w){o.prototying=w;c(u,(h(w)=="function")?new w:w);delete o.prototyping});return u}};c(o,{inherit:function(v,y){var u=arguments.callee.caller;for(var x in y){var w=y[x];var A=v[x];var z=h(w);if(A&&z=="function"){if(w!=A){if(u){w.__parent=A;v[x]=w}else{o.override(v,x,w)}}}else{if(z=="object"){v[x]=r(A,w)}else{v[x]=w}}}if(u){v.parent=function(){return arguments.callee.caller.__parent.apply(this,arguments)}}return v},override:function(v,u,y){var x=o.prototyping;if(x&&v[u]!=x[u]){x=null}var w=function(){var z=this.parent;this.parent=x?x[u]:v[u];var A=y.apply(this,arguments);this.parent=z;return A};v[u]=w}});o.prototype.implement=function(){var u=this.prototype;g(Array.prototype.slice.call(arguments||[]),function(v){o.inherit(u,v)});return this};this.TreeUtil={prune:function(v,u){this.each(v,function(x,w){if(w==u&&x.children){delete x.children;x.children=[]}})},getParent:function(u,y){if(u.id==y){return false}var x=u.children;if(x&&x.length>0){for(var w=0;wx){if(z>B){y=v((B+((z-A)-B)*C))}else{y=v((B-A+(z-(B-A))*C))}}else{y=v((B+(z-B)*C))}var u=(this.rho-w.rho)*C+w.rho;return{theta:y,rho:u}}};var l=function(v,u){return new Polar(v,u)};Polar.KER=l(0,0);this.Complex=function(u,v){this.x=u;this.y=v};Complex.prototype={getc:function(){return this},getp:function(u){return this.toPolar(u)},set:function(u){u=u.getc(true);this.x=u.x;this.y=u.y},setc:function(u,v){this.x=u;this.y=v},setp:function(v,u){this.x=Math.cos(v)*u;this.y=Math.sin(v)*u},clone:function(){return new Complex(this.x,this.y)},toPolar:function(w){var u=this.norm();var v=Math.atan2(this.y,this.x);if(v<0){v+=Math.PI*2}if(w){return{theta:v,rho:u}}return new Polar(v,u)},norm:function(){return Math.sqrt(this.squaredNorm())},squaredNorm:function(){return this.x*this.x+this.y*this.y},add:function(u){return new Complex(this.x+u.x,this.y+u.y)},prod:function(u){return new Complex(this.x*u.x-this.y*u.y,this.y*u.x+this.x*u.y)},conjugate:function(){return new Complex(this.x,-this.y)},scale:function(u){return new Complex(this.x*u,this.y*u)},equals:function(u){return this.x==u.x&&this.y==u.y},$add:function(u){this.x+=u.x;this.y+=u.y;return this},$prod:function(w){var u=this.x,v=this.y;this.x=u*w.x-v*w.y;this.y=v*w.x+u*w.y;return this},$conjugate:function(){this.y=-this.y;return this},$scale:function(u){this.x*=u;this.y*=u;return this},$div:function(z){var u=this.x,w=this.y;var v=z.squaredNorm();this.x=u*z.x+w*z.y;this.y=w*z.x-u*z.y;return this.$scale(1/v)}};var q=function(v,u){return new Complex(v,u)};Complex.KER=q(0,0);this.Graph=new o({initialize:function(u){var v={complex:false,Node:{}};this.opt=r(v,u||{});this.nodes={}},getNode:function(u){if(this.hasNode(u)){return this.nodes[u]}return false},getAdjacence:function(w,u){var v=[];if(this.hasNode(w)&&this.hasNode(u)&&this.nodes[w].adjacentTo({id:u})&&this.nodes[u].adjacentTo({id:w})){v.push(this.nodes[w].getAdjacency(u));v.push(this.nodes[u].getAdjacency(w));return v}return false},addNode:function(u){if(!this.nodes[u.id]){this.nodes[u.id]=new Graph.Node(c({id:u.id,name:u.name,data:u.data},this.opt.Node),this.opt.complex)}return this.nodes[u.id]},addAdjacence:function(x,w,v){var y=[];if(!this.hasNode(x.id)){this.addNode(x)}if(!this.hasNode(w.id)){this.addNode(w)}x=this.nodes[x.id];w=this.nodes[w.id];for(var u in this.nodes){if(this.nodes[u].id==x.id){if(!this.nodes[u].adjacentTo(w)){y.push(this.nodes[u].addAdjacency(w,v))}}if(this.nodes[u].id==w.id){if(!this.nodes[u].adjacentTo(x)){y.push(this.nodes[u].addAdjacency(x,v))}}}return y},removeNode:function(w){if(this.hasNode(w)){var v=this.nodes[w];for(var u=0 in v.adjacencies){var adj=v.adjacencies[u];this.removeAdjacence(w,adj.nodeTo.id)}delete this.nodes[w]}},removeAdjacence:function(y,x){if(this.hasNode(y)){this.nodes[y].removeAdjacency(x)}if(this.hasNode(x)){this.nodes[x].removeAdjacency(y)}},hasNode:function(x){return x in this.nodes}});Graph.Node=new o({initialize:function(x,z){var y={id:"",name:"",data:{},adjacencies:{},selected:false,drawn:false,exist:false,angleSpan:{begin:0,end:0},alpha:1,startAlpha:1,endAlpha:1,pos:(z&&q(0,0))||l(0,0),startPos:(z&&q(0,0))||l(0,0),endPos:(z&&q(0,0))||l(0,0)};c(this,c(y,x))},adjacentTo:function(x){return x.id in this.adjacencies},getAdjacency:function(x){return this.adjacencies[x]},addAdjacency:function(y,z){var x=new Graph.Adjacence(this,y,z);return this.adjacencies[y.id]=x},removeAdjacency:function(x){delete this.adjacencies[x]}});Graph.Adjacence=function(x,z,y){this.nodeFrom=x;this.nodeTo=z;this.data=y||{};this.alpha=1;this.startAlpha=1;this.endAlpha=1};Graph.Util={filter:function(y){if(!y||!(h(y)=="string")){return function(){return true}}var x=y.split(" ");return function(A){for(var z=0;z=G&&J<=H&&x(I)){C(I,J)}if(JJ){z(L,G,H)}})}})(B,F+E,y+E)},eachSubgraph:function(y,z,x){this.eachLevel(y,0,false,z,x)},eachSubnode:function(y,z,x){this.eachLevel(y,1,1,z,x)},anySubnode:function(A,z,y){var x=false;z=z||m(true);var B=h(z)=="string"?function(C){return C[z]}:z;this.eachSubnode(A,function(C){if(B(C)){x=true}},y);return x},getSubnodes:function(C,D,x){var z=[],B=this;D=D||0;var A,y;if(h(D)=="array"){A=D[0];y=D[1]}else{A=D;y=Number.MAX_VALUE-C._depth}this.eachLevel(C,A,y,function(E){z.push(E)},x);return z},getParents:function(y){var x=[];this.eachAdjacency(y,function(z){var A=z.nodeTo;if(A._depth=0.95){C.plotLabel(z,H,y)}else{C.hideLabel(H,false)}}F.restore();H.visited=!A})},plotLabel:function(A,B,z){var C=B.id,x=this.getLabel(C);if(!x&&!(x=document.getElementById(C))){x=document.createElement("div");var y=this.getLabelContainer();y.appendChild(x);x.id=C;x.className="node";x.style.position="absolute";z.onCreateLabel(x,B);this.labels[B.id]=x}this.placeLabel(x,B,z)},plotNode:function(z,y,G){var E=this.node,B=z.data;var D=E.overridable&&B;var x=D&&B.$lineWidth||E.lineWidth;var A=D&&B.$color||E.color;var F=y.getCtx();F.lineWidth=x;F.fillStyle=A;F.strokeStyle=A;var C=z.data&&z.data.$type||E.type;this.nodeTypes[C].call(this,z,y,G)},plotLine:function(E,z,G){var x=this.edge,B=E.data;var D=x.overridable&&B;var y=D&&B.$lineWidth||x.lineWidth;var A=D&&B.$color||x.color;var F=z.getCtx();F.lineWidth=y;F.fillStyle=A;F.strokeStyle=A;var C=E.data&&E.data.$type||x.type;this.edgeTypes[C].call(this,E,z,G)},fitsInCanvas:function(z,x){var y=x.getSize();if(z.x>=y.width||z.x<0||z.y>=y.height||z.y<0){return false}return true}};var Loader={construct:function(y){var z=(h(y)=="array");var x=new Graph(this.graphOptions);if(!z){(function(A,C){A.addNode(C);for(var B=0,D=C.children;B=(7-4*A)/11){B=z*z-Math.pow((11-6*A-11*C)/4,2);break}}return B},Elastic:function(A,z){return Math.pow(2,10*--A)*Math.cos(20*A*Math.PI*(z[0]||1)/3)}};g(y,function(A,z){Trans[z]=x(A)});g(["Quad","Cubic","Quart","Quint"],function(A,z){Trans[A]=x(function(B){return Math.pow(B,[z+2])})})})();var Animation=new o({initalize:function(x){this.setOptions(x)},setOptions:function(x){var y={duration:2500,fps:40,transition:Trans.Quart.easeInOut,compute:b,complete:b};this.opt=r(y,x||{});return this},getTime:function(){return k()},step:function(){var y=this.getTime(),x=this.opt;if(y0)?R[0]:null;Q(R)}for(var L=0,M=[P.id].concat(J);L=Q._depth)});for(var N=0;N0&&W.drawn){W.drawn=false;J[M.id].push(W)}else{if((!R||!P)&&W.drawn){W.drawn=false;J[M.id].push(W)}}});M.drawn=true}if(I.length>0){S.fx.plot()}for(N in J){g(J[N],function(W){W.drawn=true})}for(N=0;NI?K:I)+this.config.subtreeOffset},getEdge:function(I,N,Q){var M=function(S,R){return function(){return I.pos.add(new Complex(S,R))}};var L=this.node;var O=this.node.overridable,J=I.data;var P=O&&J.$width||L.width;var K=O&&J.$height||L.height;if(N=="begin"){if(L.align=="center"){return this.dispatch(Q,M(0,K/2),M(-P/2,0),M(0,-K/2),M(P/2,0))}else{if(L.align=="left"){return this.dispatch(Q,M(0,K),M(0,0),M(0,0),M(P,0))}else{if(L.align=="right"){return this.dispatch(Q,M(0,0),M(-P,0),M(0,-K),M(0,0))}else{throw"align: not implemented"}}}}else{if(N=="end"){if(L.align=="center"){return this.dispatch(Q,M(0,-K/2),M(P/2,0),M(0,K/2),M(-P/2,0))}else{if(L.align=="left"){return this.dispatch(Q,M(0,0),M(P,0),M(0,K),M(0,0))}else{if(L.align=="right"){return this.dispatch(Q,M(0,-K),M(0,0),M(0,0),M(-P,0))}else{throw"align: not implemented"}}}}}},getScaledTreePosition:function(I,J){var L=this.node;var O=this.node.overridable,K=I.data;var P=(O&&K.$width||L.width);var M=(O&&K.$height||L.height);var Q=(this.config.multitree&&("$orn" in I.data)&&I.data.$orn)||this.config.orientation;var N=function(S,R){return function(){return I.pos.add(new Complex(S,R)).$scale(1-J)}};if(L.align=="left"){return this.dispatch(Q,N(0,M),N(0,0),N(0,0),N(P,0))}else{if(L.align=="center"){return this.dispatch(Q,N(0,M/2),N(-P/2,0),N(0,-M/2),N(P/2,0))}else{if(L.align=="right"){return this.dispatch(Q,N(0,0),N(-P,0),N(0,-M),N(0,0))}else{throw"align: not implemented"}}}},treeFitsInCanvas:function(N,I,O){var K=I.getSize(N);var L=(this.config.multitree&&("$orn" in N.data)&&N.data.$orn)||this.config.orientation;var J=this.dispatch(L,K.width,K.height);var M=this.getTreeBaseSize(N,O,function(Q,P){return Q===0||!Graph.Util.anySubnode(P)});return(ML){N.drawn=false;N.exist=false;J.hideLabel(N,false)}else{N.exist=true}});K.drawn=true},getRightLevelToShow:function(L,J){var I=this.config;var M=I.levelsToShow;var K=I.constrained;if(!K){return M}while(!this.treeFitsInCanvas(L,J,M)&&M>1){M--}return M}});ST.Plot=new o({Implements:Graph.Plot,initialize:function(I){this.viz=I;this.config=I.config;this.node=this.config.Node;this.edge=this.config.Edge;this.animation=new Animation;this.nodeTypes=new ST.Plot.NodeTypes;this.edgeTypes=new ST.Plot.EdgeTypes},plotSubtree:function(N,M,P,K){var I=this.viz,L=I.canvas;P=Math.min(Math.max(0.001,P),1);if(P>=0){N.drawn=false;var J=L.getCtx();var O=I.geom.getScaledTreePosition(N,P);J.translate(O.x,O.y);J.scale(P,P)}this.plotTree(N,!P,M,K);if(P>=0){N.drawn=true}},plotTree:function(L,M,I,S){var O=this,Q=this.viz,J=Q.canvas,K=this.config,R=J.getCtx();var P=K.multitree&&!("$orn" in L.data);var N=P&&L.data.$orns;Graph.Util.eachSubnode(L,function(U){if((!P||N.indexOf(U.data.$orn)>0)&&U.exist&&U.drawn){var T=L.getAdjacency(U.id);!S&&I.onBeforePlotLine(T);R.globalAlpha=Math.min(L.alpha,U.alpha);O.plotLine(T,J,S);!S&&I.onAfterPlotLine(T);O.plotTree(U,M,I,S)}});if(L.drawn){R.globalAlpha=L.alpha;!S&&I.onBeforePlotNode(L);this.plotNode(L,J,S);!S&&I.onAfterPlotNode(L);if(M&&R.globalAlpha>=0.95){this.plotLabel(J,L,I)}else{this.hideLabel(L,false)}}else{this.hideLabel(L,true)}},placeLabel:function(T,L,O){var R=L.pos.getc(true),M=this.node,J=this.viz.canvas;var S=M.overridable&&L.data.$width||M.width;var N=M.overridable&&L.data.$height||M.height;var P=J.getSize();var K,Q;if(M.align=="center"){K={x:Math.round(R.x-S/2+P.width/2),y:Math.round(R.y-N/2+P.height/2)}}else{if(M.align=="left"){Q=this.config.orientation;if(Q=="bottom"||Q=="top"){K={x:Math.round(R.x-S/2+P.width/2),y:Math.round(R.y+P.height/2)}}else{K={x:Math.round(R.x+P.width/2),y:Math.round(R.y-N/2+P.height/2)}}}else{if(M.align=="right"){Q=this.config.orientation;if(Q=="bottom"||Q=="top"){K={x:Math.round(R.x-S/2+P.width/2),y:Math.round(R.y-N+P.height/2)}}else{K={x:Math.round(R.x-S+P.width/2),y:Math.round(R.y-N/2+P.height/2)}}}else{throw"align: not implemented"}}}var I=T.style;I.left=K.x+"px";I.top=K.y+"px";I.display=this.fitsInCanvas(K,J)?"":"none";O.onPlaceLabel(T,L)},getAlignedPos:function(N,L,I){var K=this.node;var M,J;if(K.align=="center"){M={x:N.x-L/2,y:N.y-I/2}}else{if(K.align=="left"){J=this.config.orientation;if(J=="bottom"||J=="top"){M={x:N.x-L/2,y:N.y}}else{M={x:N.x,y:N.y-I/2}}}else{if(K.align=="right"){J=this.config.orientation;if(J=="bottom"||J=="top"){M={x:N.x-L/2,y:N.y-I}}else{M={x:N.x-L,y:N.y-I/2}}}else{throw"align: not implemented"}}}return M},getOrientation:function(I){var K=this.config;var J=K.orientation;if(K.multitree){var L=I.nodeFrom;var M=I.nodeTo;J=(("$orn" in L.data)&&L.data.$orn)||(("$orn" in M.data)&&M.data.$orn)}return J}});ST.Plot.NodeTypes=new o({none:function(){},circle:function(M,J){var P=M.pos.getc(true),L=this.node,N=M.data;var K=L.overridable&&N;var O=K&&N.$dim||L.dim;var I=this.getAlignedPos(P,O*2,O*2);J.path("fill",function(Q){Q.arc(I.x+O,I.y+O,O,0,Math.PI*2,true)})},square:function(M,J){var P=M.pos.getc(true),L=this.node,N=M.data;var K=L.overridable&&N;var O=K&&N.$dim||L.dim;var I=this.getAlignedPos(P,O,O);J.getCtx().fillRect(I.x,I.y,O,O)},ellipse:function(K,J){var N=K.pos.getc(true),O=this.node,L=K.data;var M=O.overridable&&L;var I=(M&&L.$width||O.width)/2;var Q=(M&&L.$height||O.height)/2;var P=this.getAlignedPos(N,I*2,Q*2);var R=J.getCtx();R.save();R.scale(I/Q,Q/I);J.path("fill",function(S){S.arc((P.x+I)*(Q/I),(P.y+Q)*(I/Q),Q,0,Math.PI*2,true)});R.restore()},rectangle:function(K,J){var N=K.pos.getc(true),O=this.node,L=K.data;var M=O.overridable&&L;var I=M&&L.$width||O.width;var Q=M&&L.$height||O.height;var P=this.getAlignedPos(N,I,Q);J.getCtx().fillRect(P.x,P.y,I,Q)}});ST.Plot.EdgeTypes=new o({none:function(){},line:function(J,L){var K=this.getOrientation(J);var N=J.nodeFrom,O=J.nodeTo;var M=this.viz.geom.getEdge(N._depth1){var K={};K[U.id]=U;K[M.id]=M;var V=Z.$direction;U=K[V[0]];M=K[V[1]]}var N=this.viz.geom.getEdge(U,"begin",W);var S=this.viz.geom.getEdge(M,"end",W);var T=new Complex(S.x-N.x,S.y-N.y);T.$scale(O/T.norm());var X=new Complex(S.x-T.x,S.y-T.y);var Y=new Complex(-T.y/2,T.x/2);var J=X.add(Y),I=X.$add(Y.$scale(-1));L.path("stroke",function(aa){aa.moveTo(N.x,N.y);aa.lineTo(S.x,S.y)});L.path("fill",function(aa){aa.moveTo(J.x,J.y);aa.lineTo(I.x,I.y);aa.lineTo(S.x,S.y)})}})})();var AngularWidth={setAngularWidthForNodes:function(){var x=this.config.Node;var z=x.overridable;var y=x.dim;Graph.Util.eachBFS(this.graph,this.root,function(C,A){var B=(z&&C.data&&C.data.$aw)||y;C._angularWidth=B/A},"ignore")},setSubtreesAngularWidth:function(){var x=this;Graph.Util.eachNode(this.graph,function(y){x.setSubtreeAngularWidth(y)},"ignore")},setSubtreeAngularWidth:function(A){var z=this,y=A._angularWidth,x=0;Graph.Util.eachSubnode(A,function(B){z.setSubtreeAngularWidth(B);x+=B._treeAngularWidth},"ignore");A._treeAngularWidth=Math.max(y,x)},computeAngularWidths:function(){this.setAngularWidthForNodes();this.setSubtreesAngularWidth()}};this.RGraph=new o({Implements:[Loader,AngularWidth],initialize:function(A,x){var z={labelContainer:A.id+"-label",interpolation:"linear",levelDistance:100,withLabels:true,Node:{overridable:false,type:"circle",dim:3,color:"#ccb",width:5,height:5,lineWidth:1},Edge:{overridable:false,type:"line",color:"#ccb",lineWidth:1},fps:40,duration:2500,transition:Trans.Quart.easeInOut,clearCanvas:true};var y={onBeforeCompute:b,onAfterCompute:b,onCreateLabel:b,onPlaceLabel:b,onComplete:b,onBeforePlotLine:b,onAfterPlotLine:b,onBeforePlotNode:b,onAfterPlotNode:b};this.controller=this.config=r(z,y,x);this.graphOptions={complex:false,Node:{selected:false,exist:true,drawn:true}};this.graph=new Graph(this.graphOptions);this.fx=new RGraph.Plot(this);this.op=new RGraph.Op(this);this.json=null;this.canvas=A;this.root=null;this.busy=false;this.parent=false},refresh:function(){this.compute();this.plot()},reposition:function(){this.compute("endPos")},plot:function(){this.fx.plot()},compute:function(y){var z=y||["pos","startPos","endPos"];var x=this.graph.getNode(this.root);x._depth=0;Graph.Util.computeLevels(this.graph,this.root,0,"ignore");this.computeAngularWidths();this.computePositions(z)},computePositions:function(E){var y=j(E);var D=this.graph;var C=Graph.Util;var x=this.graph.getNode(this.root);var B=this.parent;var z=this.config;for(var A=0;A0&&F[0].dist){F.sort(function(R,Q){return(R.dist>=Q.dist)-(R.dist<=Q.dist)})}for(var J=0;J0)?B[0]:false;if(A){var x=A.pos.getc(),C=D.pos.getc();var y=x.add(C.scale(-1));z=Math.atan2(y.y,y.x);if(z<0){z+=2*Math.PI}}return{parent:A,theta:z}},tagChildren:function(B,D){if(B.angleSpan){var C=[];Graph.Util.eachAdjacency(B,function(E){C.push(E.nodeTo)},"ignore");var x=C.length;for(var A=0;A1){var y={};y[D.id]=D;y[A.id]=A;var z=E.$direction;D=y[z[0]];A=y[z[1]]}var N=D.pos.getc(true),C=A.pos.getc(true);var H=new Complex(C.x-N.x,C.y-N.y);H.$scale(L/H.norm());var F=new Complex(C.x-H.x,C.y-H.y);var G=new Complex(-H.y/2,H.x/2);var M=F.add(G),K=F.$add(G.$scale(-1));B.path("stroke",function(O){O.moveTo(N.x,N.y);O.lineTo(C.x,C.y)});B.path("fill",function(O){O.moveTo(M.x,M.y);O.lineTo(K.x,K.y);O.lineTo(C.x,C.y)})}});Complex.prototype.moebiusTransformation=function(z){var x=this.add(z);var y=z.$conjugate().$prod(this);y.x++;return x.$div(y)};Graph.Util.getClosestNodeToOrigin=function(y,z,x){return this.getClosestNodeToPos(y,Polar.KER,z,x)};Graph.Util.getClosestNodeToPos=function(z,C,B,x){var y=null;B=B||"pos";C=C&&C.getc(true)||Complex.KER;var A=function(E,D){var G=E.x-D.x,F=E.y-D.y;return G*G+F*F};this.eachNode(z,function(D){y=(y==null||A(D[B].getc(true),C)K)?L._depth:K;L._scale=z},"ignore");for(var J=0.51;J<=1;J+=0.01){var I=(function(L,M){return(1-Math.pow(L,M))/(1-L)})(J,K+1);if(I>=2){return J-0.01}}return 0.5})();D.eachBFS(this.graph,this.root,function(N){var J=N.angleSpan.end-N.angleSpan.begin;var O=N.angleSpan.begin;var M=(function(Q){var R=0;D.eachSubnode(Q,function(S){R+=S._treeAngularWidth},"ignore");return R})(N);for(var L=1,I=0,K=y,P=N._depth;L<=P+1;L++){I+=K;K*=y}D.eachSubnode(N,function(T){if(!T._flag){T._rel=T._treeAngularWidth/M;var S=T._rel*J;var R=O+S/2;for(var Q=0;Q1000||D.b>1000||D.ratio>1000){A.path("stroke",function(L){L.moveTo(J.x*C,J.y*C);L.lineTo(E.x*C,E.y*C)})}else{var H=Math.atan2(E.y-D.y,E.x-D.x);var G=Math.atan2(J.y-D.y,J.x-D.x);var y=this.sense(H,G);var x=A.getCtx();A.path("stroke",function(L){L.arc(D.x*C,D.y*C,D.ratio*C,H,G,y)})}},computeArcThroughTwoPoints:function(L,K){var D=(L.x*K.y-L.y*K.x),z=D;var C=L.squaredNorm(),B=K.squaredNorm();if(D==0){return{x:0,y:0,ratio:1001}}var J=(L.y*B-K.y*C+L.y-K.y)/D;var H=(K.x*C-L.x*B+K.x-L.x)/z;var I=-J/2;var G=-H/2;var F=(J*J+H*H)/4-1;if(F<0){return{x:0,y:0,ratio:1001}}var E=Math.sqrt(F);var A={x:I,y:G,ratio:E,a:J,b:H};return A},sense:function(x,y){return(xy)?false:true):((y+Math.PI>x)?true:false)},placeLabel:function(F,A,C){var E=A.pos.getc(true),y=this.viz.canvas;var D=y.getSize();var B=A._scale;var z={x:Math.round(E.x*B+D.width/2),y:Math.round(E.y*B+D.height/2)};var x=F.style;x.left=z.x+"px";x.top=z.y+"px";x.display="";C.onPlaceLabel(F,A)}});Hypertree.Plot.NodeTypes=new o({none:function(){},circle:function(A,y){var z=this.node,C=A.data;var B=z.overridable&&C&&C.$dim||z.dim;var D=A.pos.getc(),E=D.scale(A._scale);var x=z.transform?B*(1-D.squaredNorm()):B;if(x>=B/4){y.path("fill",function(F){F.arc(E.x,E.y,x,0,Math.PI*2,true)})}},square:function(A,z){var F=this.node,C=A.data;var x=F.overridable&&C&&C.$dim||F.dim;var y=A.pos.getc(),E=y.scale(A._scale);var D=F.transform?x*(1-y.squaredNorm()):x;var B=2*D;if(D>=x/4){z.getCtx().fillRect(E.x-D,E.y-D,B,B)}},rectangle:function(A,z){var E=this.node,B=A.data;var y=E.overridable&&B&&B.$width||E.width;var F=E.overridable&&B&&B.$height||E.height;var x=A.pos.getc(),D=x.scale(A._scale);var C=1-x.squaredNorm();y=E.transform?y*C:y;F=E.transform?F*C:F;if(C>=0.25){z.getCtx().fillRect(D.x-y/2,D.y-F/2,y,F)}},triangle:function(C,z){var I=this.node,D=C.data;var x=I.overridable&&D&&D.$dim||I.dim;var y=C.pos.getc(),H=y.scale(C._scale);var G=I.transform?x*(1-y.squaredNorm()):x;if(G>=x/4){var B=H.x,A=H.y-G,K=B-G,J=H.y+G,F=B+G,E=J;z.path("fill",function(L){L.moveTo(B,A);L.lineTo(K,J);L.lineTo(F,E)})}},star:function(A,z){var G=this.node,C=A.data;var x=G.overridable&&C&&C.$dim||G.dim;var y=A.pos.getc(),F=y.scale(A._scale);var E=G.transform?x*(1-y.squaredNorm()):x;if(E>=x/4){var H=z.getCtx(),D=Math.PI/5;H.save();H.translate(F.x,F.y);H.beginPath();H.moveTo(x,0);for(var B=0;B<9;B++){H.rotate(D);if(B%2==0){H.lineTo((E/0.525731)*0.200811,0)}else{H.lineTo(E,0)}}H.closePath();H.fill();H.restore()}}});Hypertree.Plot.EdgeTypes=new o({none:function(){},line:function(x,y){var z=x.nodeFrom._scale;var B=x.nodeFrom.pos.getc(true);var A=x.nodeTo.pos.getc(true);y.path("stroke",function(C){C.moveTo(B.x*z,B.y*z);C.lineTo(A.x*z,A.y*z)})},hyperline:function(x,y){this.hyperline(x,y)}});this.TM={layout:{orientation:"h",vertical:function(){return this.orientation=="v"},horizontal:function(){return this.orientation=="h"},change:function(){this.orientation=this.vertical()?"h":"v"}},innerController:{onBeforeCompute:b,onAfterCompute:b,onComplete:b,onCreateElement:b,onDestroyElement:b,request:false},config:{orientation:"h",titleHeight:13,rootId:"infovis",offset:4,levelsToShow:3,addLeftClickHandler:false,addRightClickHandler:false,selectPathOnHover:false,Color:{allow:false,minValue:-100,maxValue:100,minColorValue:[255,0,50],maxColorValue:[0,255,50]},Tips:{allow:false,offsetX:20,offsetY:20,onShow:b}},initialize:function(x){this.tree=null;this.shownTree=null;this.controller=this.config=r(this.config,this.innerController,x);this.rootId=this.config.rootId;this.layout.orientation=this.config.orientation;if(this.config.Tips.allow&&document.body){var B=document.getElementById("_tooltip")||document.createElement("div");B.id="_tooltip";B.className="tip";var z=B.style;z.position="absolute";z.display="none";z.zIndex=13000;document.body.appendChild(B);this.tip=B}var A=this;var y=function(){A.empty();if(window.CollectGarbage){window.CollectGarbage()}delete y};if(window.addEventListener){window.addEventListener("unload",y,false)}else{window.attachEvent("onunload",y)}},each:function(x){(function y(D){if(!D){return}var C=D.childNodes,z=C.length;if(z>0){x.apply(this,[D,z===1,C[0],C[1]])}if(z>1){for(var A=C[1].childNodes,B=0;B1){A+=this.plot(y)}}return this.createBox(B,D,A)},headBox:function(y,B){var x=this.config,A=x.offset;var z={height:x.titleHeight+"px",width:(B.width-A)+"px",left:A/2+"px"};return'
'+y.name+"
"},bodyBox:function(y,C){var x=this.config,z=x.titleHeight,B=x.offset;var A={width:(C.width-B)+"px",height:(C.height-B-z)+"px",top:(z+B/2)+"px",left:(B/2)+"px"};return'
'+y+"
"},contentBox:function(z,B,y){var A={};for(var x in B){A[x]=B[x]+"px"}return'
'+y+"
"},leafBox:function(A,E){var z=this.config;var y=z.Color.allow&&this.setColor(A),D=z.offset,B=E.width-D,x=E.height-D;var C={top:(D/2)+"px",height:x+"px",width:B+"px",left:(D/2)+"px"};if(y){C["background-color"]=y}return'
'+A.name+"
"},setColor:function(F){var A=this.config.Color,B=A.maxColorValue,y=A.minColorValue,C=A.maxValue,G=A.minValue,E=C-G,D=(F.data.$color-0);var z=function(I,H){return Math.round((((B[I]-y[I])/E)*(H-G)+y[I]))};return d([z(0,D),z(1,D),z(2,D)])},enter:function(x){this.view(x.parentNode.id)},onLeftClick:function(x){this.enter(x)},out:function(){var x=TreeUtil.getParent(this.tree,this.shownTree.id);if(x){if(this.controller.request){TreeUtil.prune(x,this.config.levelsToShow)}this.view(x.id)}},onRightClick:function(){this.out()},view:function(B){var x=this.config,z=this;var y={onComplete:function(){z.loadTree(B);e(x.rootId).focus()}};if(this.controller.request){var A=TreeUtil;A.loadSubtrees(A.getSubtree(this.tree,B),r(this.controller,y))}else{y.onComplete()}},resetPath:function(x){var y=this.rootId,B=this.resetPath.previous;this.resetPath.previous=x||false;function z(D){var C=D.parentNode;return C&&(C.id!=y)&&C}function A(F,C){if(F){var D=e(F.id);if(D){var E=z(D);while(E){F=E.childNodes[0];if(s(F,"in-path")){if(C==undefined||!!C){a(F,"in-path")}}else{if(!C){p(F,"in-path")}}E=z(E)}}}}A(B,true);A(x,false)},initializeElements:function(){var x=this.controller,z=this;var y=m(false),A=x.Tips.allow;this.each(function(F,E,D,C){var B=TreeUtil.getSubtree(z.tree,F.id);x.onCreateElement(F,B,E,D,C);if(x.addRightClickHandler){D.oncontextmenu=y}if(x.addLeftClickHandler||x.addRightClickHandler){t(D,"mouseup",function(G){var H=(G.which==3||G.button==2);if(H){if(x.addRightClickHandler){z.onRightClick()}}else{if(x.addLeftClickHandler){z.onLeftClick(D)}}if(G.preventDefault){G.preventDefault()}else{G.returnValue=false}})}if(x.selectPathOnHover||A){t(D,"mouseover",function(G){if(x.selectPathOnHover){if(E){p(D,"over-leaf")}else{p(D,"over-head");p(F,"over-content")}if(F.id){z.resetPath(B)}}if(A){x.Tips.onShow(z.tip,B,E,D)}});t(D,"mouseout",function(G){if(x.selectPathOnHover){if(E){a(D,"over-leaf")}else{a(D,"over-head");a(F,"over-content")}z.resetPath()}if(A){z.tip.style.display="none"}});if(A){t(D,"mousemove",function(J,I){var O=z.tip;I=I||window;J=J||I.event;var N=I.document;N=N.html||N.body;var K={x:J.pageX||J.clientX+N.scrollLeft,y:J.pageY||J.clientY+N.scrollTop};O.style.display="";I={height:document.body.clientHeight,width:document.body.clientWidth};var H={width:O.offsetWidth,height:O.offsetHeight};var G=O.style,M=x.Tips.offsetX,L=x.Tips.offsetY;G.top=((K.y+L+H.height>I.height)?(K.y-H.height-L):K.y+L)+"px";G.left=((K.x+H.width+M>I.width)?(K.x-H.width-M):K.x+M)+"px"})}}})},destroyElements:function(){if(this.controller.onDestroyElement!=b){var x=this.controller,y=this;this.each(function(C,B,A,z){x.onDestroyElement(C,TreeUtil.getSubtree(y.tree,C.id),B,A,z)})}},empty:function(){this.destroyElements();f(e(this.rootId))},loadTree:function(x){this.empty();this.loadJSON(TreeUtil.getSubtree(this.tree,x))}};TM.SliceAndDice=new o({Implements:TM,loadJSON:function(A){this.controller.onBeforeCompute(A);var y=e(this.rootId),z=this.config,B=y.offsetWidth,x=y.offsetHeight;var C={coord:{top:0,left:0,width:B,height:x+z.titleHeight+z.offset}};if(this.tree==null){this.tree=A}this.shownTree=A;this.compute(C,A,this.layout.orientation);y.innerHTML=this.plot(A);this.initializeElements();this.controller.onAfterCompute(A)},compute:function(D,M,B){var O=this.config,I=D.coord,L=O.offset,H=I.width-L,F=I.height-L-O.titleHeight,y=D.data,x=(y&&("$area" in y))?M.data.$area/y.$area:1;var G,E,K,C,A;var N=(B=="h");if(N){B="v";G=F;E=Math.round(H*x);K="height";C="top";A="left"}else{B="h";G=Math.round(F*x);E=H;K="width";C="left";A="top"}M.coord={width:E,height:G,top:0,left:0};var J=0,z=this;g(M.children,function(P){z.compute(M,P,B);P.coord[C]=J;P.coord[A]=0;J+=Math.floor(P.coord[K])})}});TM.Area=new o({loadJSON:function(z){this.controller.onBeforeCompute(z);var y=e(this.rootId),A=y.offsetWidth,x=y.offsetHeight,E=this.config.offset,C=A-E,B=x-E-this.config.titleHeight;z.coord={height:x,width:A,top:0,left:0};var D=r(z.coord,{width:C,height:B});this.compute(z,D);y.innerHTML=this.plot(z);if(this.tree==null){this.tree=z}this.shownTree=z;this.initializeElements();this.controller.onAfterCompute(z)},computeDim:function(A,E,y,D,z){if(A.length+E.length==1){var x=(A.length==1)?A:E;this.layoutLast(x,y,D);return}if(A.length>=2&&E.length==0){E=[A[0]];A=A.slice(1)}if(A.length==0){if(E.length>0){this.layoutRow(E,y,D)}return}var C=A[0];if(z(E,y)>=z([C].concat(E),y)){this.computeDim(A.slice(1),E.concat([C]),y,D,z)}else{var B=this.layoutRow(E,y,D);this.computeDim(A,[],B.dim,B,z)}},worstAspectRatio:function(x,E){if(!x||x.length==0){return Number.MAX_VALUE}var y=0,F=0,B=Number.MAX_VALUE;for(var C=0;Cz)?F:z}var D=E*E,A=y*y;return Math.max(D*F/A,A/(D*B))},avgAspectRatio:function(A,x){if(!A||A.length==0){return Number.MAX_VALUE}var C=0;for(var y=0;yz)?x/z:z/x}return C/A.length},layoutLast:function(y,x,z){y[0].coord=z}});TM.Squarified=new o({Implements:[TM,TM.Area],compute:function(F,C){if(!(C.width>=C.height&&this.layout.horizontal())){this.layout.change()}var x=F.children,z=this.config;if(x.length>0){this.processChildrenLayout(F,x,C);for(var B=0;B=H._area)});var E=[x[0]];var D=x.slice(1);this.squarify(D,E,z,B)},squarify:function(y,A,x,z){this.computeDim(y,A,x,z,this.worstAspectRatio)},layoutRow:function(y,x,z){if(this.layout.horizontal()){return this.layoutV(y,x,z)}else{return this.layoutH(y,x,z)}},layoutV:function(x,F,C){var G=0,z=Math.round;g(x,function(H){G+=H._area});var y=z(G/F),D=0;for(var A=0;A0){this.processChildrenLayout(F,x,C);for(var B=0;BxX1Z龫XJ/W,.@]8s}RS|bﬣ=y?6V>i:ٜg`|/ ڔ 8\1Xfܳ˹՞73ysݵ_+<݁9,_7%Τ勞f:nK~2Su*~1ԫ޽uv>Qf<'y>zUǿB鋞*.>q< bU俋eWdxN,'Lz\GrnWv=Gx5rѩ+Xڧ#i^dƯLOuz*m#_wwDo 7qŹxҫ^djnEZ^W.G&s;Y0>K&_'< jX` W\wis=unGZ헞7=U{S]L;w6a~79 40uoB*\qgV4䲯{7t܈+̇3zŏ8fs_b 뇧:+N3,t**ܧ.,0U|+#_j+}2#uNsGxFUGN|1Oa*;qWX~pw|{ǵqsW g{LG}_dfgxgF|V#Ny2#U lIYV#Y<5ǜ3FgGXp:_.rý~SŃuxeRq~WPx^κǵqJ|&fӵV }c{|_HHrCށV7g\~ԼH{\,l_žp#uIk``j=W,0Y`w3=̬L~],¹8Nuqc_kgrܓU/N+slϣ{2Sa>pUyu}|p8yw##g>ٯYxeТ:^f3/|2#uT%vZ'ӏw^SeSg܎3'}5# WU_5+7$u_9f=+s4W3{ G4cw98'>J|,rfHGNz4˺w+UGze>;Zzkq]'?Nh#.=Ȗ='2y. r|`X,0U< Sd93(tV_7ړUỸ܃\**{Y SŃ3nGw*RX~Ti{\qޱ*֙F>GpY+OǿACiss?1K#E4x'7+,g5ǪYhy>/ M8fU:o{VjUq#^+?Ss?c,G8ueSfk̨4|7\pT` 7q}s0ǹ&we5: U=VwqTtU)6ePiwpڞx4/MS3j]N's}QGZq'eqď3sxKmGd>^GڇGy>l$ߵ÷ҏ%l9j;pTf*k`溊h|J8|j}I_9ko>S;^O=O%@PP4|.;p O U_՜wkowUX`x0Fxh]_wDjAU\Wݬx-ϨX?ZrkoW%vk.«Q]eEjz~vü'7੮WxK#_܈GOWg8/UOسYq9;Uw4_Se0SͭYw}G3yOU^3Z̜gWrecS;wZ5ʿe2QGi9fR{?ШNuL<ίpqԓ7>XbdpTh]Wn7$he}諹Vs\^ьk:'̏t_^]?xUjr#jT|űW &] .S_ӛ}=e °/ejN`s;'#u#>JǷ[++ /8V꩹ogs\fhK7x˚ *uۊVUp_^G3 ʂ{s2'uU^*Y_ʌսpׅg-󻾋=9?kp+}O,U3zFEUp0ET'*{˽|[sS 5Q]Se?ȬśjW_ BT<򺁕y0uƹ3ԓ+kwx|'WһT偩11G*V3#nsx|pYGVeGv=> v?g9Yv.}25=0<H)CfWϡuJw/8}g'^Kc^_Ჺ'qzg}ο.JOȻp Nʓ,rdЫા'Y+:3Tρ w{/i]٬ˮfCʷ=99/GqQϚNY4*ZVQ͙h/iK< Yͺ==v9a8ϕCCʂg2f\mV}?gs1d2FJqwS>9ѽJr.|rb$ ΍hT沢Ԝٽ/2;9 7{IKyf<}^r|9ǞYa288*LV~y=;6᲎<*?|x]wNH{>9ճfҝ4**\WGbA _Iݞ>J8fpjU\'q/ؽɍzfғ .+3k_^H)\99JqWXѪ9^-ݗܨw-1⵨{WioV{s?;H/orwӺL ÄG;TWq;GJ yʀ-{dE&ߥXnMOs Gz~V+s]&9ԏT«euOtҿJ;f_ȓF`;ُfXM󀩚g%sO<_G'Y6\0Ҵ 6^2r}+ݹDTfO^lüvpQdθˣE4z@R~'svϚJWGX =OezШ|<Z9gW8#{ rIww3v{j&ܨgGYZ/FE_tu%.;ΐ_AnmyG^]s̹>}>Ί5=g+<*=Ns4G+EBDe$ϕoq W}%NEzTsu5?տ|}r5kGt3d]^3u0ԏ~_/<3]s+}w;22FHh~[dUsּx~<Ȓd33sޱWfdeTA'`[s`s`ל_B>烳2<'s~[6YIFΐ]5W{;Wa-|a3jY:ܿ) E6MF֥M?o\69$kzeo~*!zr1RO22OkY8ʫ|aϫp.5y;3]}@8ɆܙAVV:r;G-gg*sw4S\ryN'7Z%~ ;|9'{2KS_ٟ *YwUrUɬG~n~VrTSWߞd;wf\ɲɥV38qW%7IW?]dyJO֬WM/xYS#;gY(Nqe[ls^+вj*l]|< Scar?q_(.Y%FލgwQu^y@rAbk> ˃i3JVqy/\*~0*YO̸L> r;,ܑYd^䪒UaiݏZS]^2== \v Tf&-Cf˃o2rI}w yWa纜9dOfW2uvp+ ΓNke܎ǣG xi]=Ttcva6Tf;3/,y{_U>0GU8ӚyW !NOF֝;?g;a~N2ɭ}ڳ^ٛ(@=9 ԓ!j>v3#[;îg.wϳtF ˁEns `s`ל_B>烳2<'s~[FppARlQU+uqG|p&?Qut2$(c!r]ɼΔ{;\W~0zYqde\黳ݑyt㢺N|9\=_^j2_< 'a ˃#9{>iNE'gEYwzu9#!+w;3,gQUX\U5s Z{Vya4*Je+wyqr|@~վhTyT*>gxpUZbY`*W;pw8vz<ѹ5ڌCgn˳,-f]ݻg.+調}wl= m~m;7Q+M:.G9hTGNcww=6r;~_θˣE4 qn?nGڈsJRσxa$t2S=;{z kYv^yRqU?۩<zWk59fRr^Af߭nzwIOs Gz~V+s]&9ԏT«euOtҿwշHuuOɷB3,8Σj69w{9+ZV8uM|76_QYGڈs̢yԤw ?}U=~i ϸOEZ}x-q+? 4ܨw-Y`xpVfV=p濫}7zcYTڌsœꝓϫFk}^X: LWFU{-驴cVV~Һݛܨwm+=2;95 m;#-眛afGsGZؽѧ5Õ\QU?t7yR9f8ٻOZp3[9 jؖIDAT|vy^7Wyf^f2S5/ӭ;eVuO8ͺ^aR^k9xE`>a?{gtF~4*sYWj~ww|(tB`0̗ O}9/M]=*zU'831rTth3 ~\PQͦ=hNo{rs^ɏ2|1ң5Ý^'hT裚3W^Җy@fa+l*wGsc2S'*,4 g֊ syE{^K& ?pe&=Wi#NZxy/ҙwmW^8^.{w;\P#m&_;>I_]S}Uk8܌lTtBٷo.juA:t59;_3jq=v]N;{+\q~Ti`hYѽ}혿AfgvM/:&#y<̮9SgQY<ߨ49/̪ss wO.y@J9;H5͸7=3i*>]x2S< m2g+>WLɻ'qunj~0ZZAm'k53T.=a|`fV2Y8qE'G=kWU799@7K;8ϩ0{4t;4Y}5'+/q=\CE*e,?9ȓhgW<4v{|cu/QcGOu.z->5pVf_qkO+3?>jO~w3.hT4*|Ut7H1ouVgHLzqԤGM={|TTYp+}===2k}fųZsw fIMѻ\ΨLv?J߹wzjns?.+dW_}_&hTQ+㘡wJ ߱<p,޽'8'zrZ7_UeڄR{uozfZ,Wg,zU׽wgJ-{9xyZp'|pz79oO?\Vy\]iY~ ,pUS#+:fਕ5ZpYj)co^P>ڸ\gofTV`s^spWkY+{Uތ«Q]u_U /WQg>jNu &yM]y˳{W^88y|vj/OWqבGZέY\a85|Z>dv|wwmwt3T߹ο㩼R5ŒC0U8K]zhU׮s:]=ϰy;O'7W5|Ts+9pTfV=*/}W#N;Ź*,.gz/kqgwuiW3; Gu z8Uz)עhz3|j}sJwV|r;{Oq5wqRUᲺyofdf|fsv03;\kFN?6Õ^q~Щԑ< nֆ|9~{S\8>*yEA‡2?vi܃i'j5t˯y鮩O];hJ[X*}qoQh{< r'lLjWқ#ߕE4x'WgFX9 RUᲺկX ៖`8tf+,NkjfV3N:*Zy*B0'ٌ3,=LjqNXҒG^fDff _VtJOI:h/~F0;}5㜰7}~`GeW Qݸʻ 8*j˭AOU:)9cgOqNXgWʇVoP5;UZrWzw\+?V< ݇[|XTu<;9u ||\GV#k;x}GWvkF̼`*|8W|9woYsF}.O]oTq9{#}`\FJӹX7\0U`sݱx`fXzLCOz-WsxiZ>d>^==CN=uz߉;,>+zOK790UݍrԼ_yaZΩ{|GNFS\Ut40||׼ V8o`sѼgbYs^&z-}2S+\zw+q*ss L󏸇vǯXlȇFNxq̂G>z_y⵸g||]Nvz:V2*S>sïtK?%򆂩S밼ZxyGd[+s|j굸OϮ:{Gu_3]{'O.CuW,|ygi̟b͑&kfSS |v:ڳ*>~u*}gx_0W9Jm< MaoZ=k\2U QoOuW:Up֗6 > CQa6Y񒫊{ӓ3΍xiZ=_^ޅg{uz'wYǺW⺹+tj "T> pzEOz* 3vW3y}~*k'zV*t~oa>|@dN\q>V={}q.U8O7IuOW|ru>]2**9bD>8'Lu~Z9fZSWMk;xG挼vc{#}3|߳[,Lzeͯ0!+^rU|ͽdpj0&rN~Gzpq^kW|N{gp8ꃯ~"2 0)'gW-Ofj?ʮ2FJ;r{:;ٕwqW,.8 k.7Q/@ތUǫ{>؏=s-VU}xgns|h7SzWyy|j+}qҵgq?+k>|f*˹Qc}9#:&zU.(?};=>3kq x*j]y*mKNTZu/MsĭF|8Ab6x6+A#c<05=%|]+\zFw*{Du.7Jmϯ^ N}G|jY>WU߳g|{ͺv}N{0# U^s䀫Nj9aQy}pUg{wzůpX.=`,qA>P{vT,<{_e8yk^&g#_U|rk_{¾,ӕ^A!F(N==7NZx&Zbg}};}|y︺/߅}Y37l&^rT9k#oħs}yWu5vZůpޱ;,ҿp "7*MPuTsԪKoħ^3^ٯ/Q|fOjKo|0KF`b9YҽwڨgVQ+g̞wԑ*~KϨ_a]wU|yFF8l6e溙VG_4&&NpnigHny]p\˯_D ilB]^j;3S9Z>rmnG6wzůpX㑆zBFTIENDB`Spreadsheet-ParseXLSX-0.35/nytprof/js/jit/gradient40.png0000644000175000017500000003242214576335353022016 0ustar michamichaPNG  IHDRX pHYs   IDATx r#I{UGW`'GDRl8L&YGR^Ood2hq9^WҼ' .>onw6kɳfZ3z0hU}tu^>ϯXixV3?gps^Ev5cʸ眙M~z 2aVҴ:ޕw!~9cݨw{TJs?y+]+K=fzfzYȤ~x(s^w|S~x[ ̟B۫Vɳf_]mu{AVOjo[F*s2oʺ]KZ3|KauxȁeWԏ8yUVne~,][INFg2C]eWZռy2eV:~~zӪ9ГJ硠߳ΫY !Zߕe?A876Jk=UrvYi5Ӥk>zҫ7\J}>;>iS<șh۫ps+4;'8e+\Sŵ^Zi'gwLV7{j\Z2#<-Wqg֔K8ydw2dOq]yٳS+ŵ]U:аd灣?sU MyʥҦ<+fMo ZGd}ʺ*Z-Uf\I`gn;圃>]nܙe^?7ހD:w9 vy檺&]jYWYZSP:'PUZ[\m7J?s=|XML7jk)Ծ^'] 214VXiwQeVUwSkx~Ūy{}\DMW,+f0S5^וRiuWzM PV{Iqb! x#{y3s2ʺvGs]Zi''7Zwi hV9 ٟuM:7S*7L]OqmgiqZ hers*/U͵zwZh "A?Zl̩z}w2dsmg8]75gРO{+^h { VxeV#]P5G>7P |EcFVM=٣Z3]וҫ^|x)ydVU}uj9a7tyKCOz3C}i{Ι%Mk=‘Gzs᥮ŽԼvx{wRkoJ*svXB-Wϩfs5s+t9{J>Wa5|!:*C>QݭW8kSF>jPkjq(當,ZF;s"MkepAU5f }޺瞑>i'g|+ B-5畏V̫XkUkr`wU!O< ;Pw5s滶WBXoVwb5{Ts/8˅jDg~@́.W^j9 [`e{=]uˠ{ֹ'jiZ9Rם,_Ȫ,HI.37վuzsk1.A?Z)CmnC}o +ꭴsrҴv#l/5kЪshJZ>|Bt=US ]sIWMxWL4݌J<ϋkU˹^w]|2ZoVWyq^թOT^W+y]FP+5I[};.:}`j:'*eO^MT6U%G/O3pWռ]ٞ}+`S<-`j艙yլ&_k]eViϟ;5YP=pNPstMUOI|bsO]+MB-6q^i+_=UO#y^y+M纪J_`܏7r?& *+ Y']^K_9ל3ǵm~A \6^E+Nw9wC$o*WPtՌ[i|ij#ʿP7U=w>RUgYu1 ldVZ%z%74W3s@Wi+_=%VڹzR˺ʸ&E_>Z>k1+=铆> G:\9ל[iYNԧYU듮=ꪇ.DOj+oLWՙXx z|צT4W=UJ;=+\wx !mcq7g'ާZ5;Xe^Z|FreRJ=kBOh9{v8;Ye _9'z;k}.=%jiZ){kwk w-{NP3tM#})b'?/+^i꿫*MqGz\KN;E+5_>Ⓠw:ճN|p4e'+GPbUkPǀ;X,sM1uzȸ;Z{^bz~ua]wj4ꌙ9k;59GU˵gf@̓Os;8gl-wb/Chɿ#/tsVu5d|~SW&88kyr?}<?C+O)O ]\sY;=ATW: uN8XixB_eVjUk8X+rUx{~"2ujI :ZyrXx vV=xVft8_Og; t^a&\KN\Տ|Cu}w*Os:s?:3?uh䑩p3_5YU|&<ԧ3\Gݿ|q?ܟ=фu쓺ʺ&EfBe<3xmުߵvMuW}doo73$Se' oksM=>\E<5+wP/k$^;WS uy x~>;=ɫZy]q;X4w>ci_^;W맿%Ӎf<]2lǓw3wGKdFY+w^Ᾰ{Gt9Z=Au,8:5Y 땯E+5w-gpkv-y֯hy]njK7|LMnܜ^iBgLZ5sfwOE$ure: T蜌kΫOjZ]n=?{Ȁ{7H7󜙞uӼ||2˙]Mk8 |~9''g)=xkG]~<_yh+y93=*4zs9]<_d>94p3T7ȓbHvΧ<GA$foݏ2Z{]qrDsNεO^7k.OsY~.iO%FIO<:fzιz^qd@1ix\59P`I3O||rsL]ٗ3އ 9}k站u}9yzG=Z+\i/?t3oU+s0u&'<<<|7=pj 9 ;=9kڗu#Ktgkzwr:,yM2C]ԃf?z׵]~u}2'?ܜُH6d$sۧ;wtkΜ~OyΫٓAO>y_͛f,pcˌ*47TܛWTh'ejOs}xOUBĩp|2]W|gvL/k&l֙߭sNYd^o/t՛HkyⓆ\ټ•i/mUpջO> 9)"dgB]:|>[Y-?=&?7esnٛuUS}|wڹ_9`Z^S;d\2s#xO=_޻Y+5dk!Q_v=UЅӏ΄jKONdczY{vųwU'ネYҟΓYk+.crr xЅZ$s驞֪7iֻ;k/7ʟ65xY=*&L^is~rjށNw1;> o;A7''gy\{xBu|pw)}٪+Ξ?wz#Voʟzݫ8Ѿh'j+Uʯf# WߨÑ^]>q<е}yUr~@fN{λ=qWq7k派qlK޻ ӳ3{sR/Λ ?s:n5'~{k:i7nwzv2yoNe? W馻;g:^Y7MˇoUDV5]KڗH_/;z8Vݮ/tuhGyO^W3ޕ_GhYQ]spGSzrh?}ey4~eoYyV{{z80y Lh'' zުǙ3d;,OgȬ5O199}WU{f-LOֆCh5;aC:Mxp6ϡM.r'ZȬjrwp=yO{'듭7kgT\z ule&ڋ'ޔ͹Ygo֙WO m;pZws2k}3*>ixUO?Cp?wy@[*\j擖>M,^{қ<3 h&N㓡ZU4'8czY{6yfns:? o +bx0<\;UBSuȓosm+狳Hs۩O޻AY/d_Ӝz\3v~v}fv3=P ?ii9zu/Owқ:/gx}«=U?s]iO|gh7efk; ٔu; y\=^;;99}9\}d`kiFz}q h\$=Sz\Y]N{B%5Փ>Zf+zG05˯Wdgb[yucs2Q?A2O<:<;+០gūB~9sm#3T.^֙G ά9/ksn{ϐ~|ջ?"_q]<`.GN3|{<=|/? >d7y>ǹB2Sծ%Wشy!*6q2qFORΗ{Εɺs=rF ΜO9^]й'ݽR(G*<y>K9_9Wku sA>yny49׃3&C9]'uy":2*wtN5^'z5_y.џ=d i^-S:];1jѺ^Z;R_s[qr{ WιfגgjڝHorGrIgI~Bhy늣%2#[i;p_\=v^g-e(wgc ?Zwʟ4l?~-;м8zVλzz䱴/+]lPtUߤ2pWyZÅZS;* ~g>qӹ^;4~{Wф;zqMً̄jyf@?.vUk?͵/횸[_rP;p~ =kA'L+ XrⓆ7ק>-澟}=⃜{xgjOiV_c4ũ(_+us{*>ixj]ʹ\jG+w7?B6ͽ2i;=AGz#ON DwJ ]+L_/jjܟ'~I:~U>kV晊U/ -gx_9҅Peޭ t e/kΕjK}wv% >zv <е> ݩwjr:kTずv3r*wpΠZ^G݆N_ݵwp`FV=9j4r\GwL2AejƎW㪞_wo܃;ٝj^ ~wǵ쫚iZ+_s+>ixW=+LSv> {sh^Ox`u0~a/L^hBCΪSh?ŮZ-=Wb-(kqе>zA;ժy*Lw53+zW9}^;g(~]o5gGy޳*ҙc+W栃yhWW£6x`uVډYqRۜpPWMI*[hB-~p7V̫]˾S`ՓT8yf+Mss99:~}=fDy'&U}A31B式sHJ\ʼ4Ckrﵚt-13wuy\9WկG? 7U^ͫ4.,ݯM|U3_̸OU]>\9-f]UZRⓆ*5,\UsVw;:WS͌w`8?~UYyv<2BVj]{@7>>9>}{ Sls8O3UTxwq/\J8G]/u8Xix8ͪ8<}KD C̠̬*u3VNkwU_k2BM.VsRj<6ix'8e;/ϓN|~hd<kj~5u:9LrJ˹'5YP`4rv".O sh͠\͜rxBɧʬ4zٓhdE&uxK $+D;Uo5oWcwv+CSx'-{&mAnƱ壑48'+|,e*rש/=W-Օ]&s|jz}+ap3wfTYR PϜޕ3i=^G .SkUw\Y7͝FGI\q_j8&ԾZU5niNJj<4wafOӫfv-'zvVwb5{Ts/8˅jDg~@́.W^j9AbƧ>=NWPu~8\U=|4!Yq{wusM ޅ~><:~7pKT&Wkd,h]s=j̣ u޹y+-}jP89WpQY\s^_1&;g(o^ͥ? hwqss5~W zNpy̝K:I<yVIy2wTv\5~ΫӤ4#ޭSO]N{Ɍ.{V9ל~R#odߡ1B^t!=B]O.Ū|NM{+^h ?,&{Wږb) ot4 W~U}t=s/{eG-3WҴ^>x%W{r?}̃otrmi; uEY_e줹}JgIܥԯyTW'ʢusSҴ4[뿪4Ϥn~SފWYx" J0+Vg[iO>C~z٣Z}U[y}W}h֫YܪoQ7T4)O6k.jkգ\f\óG\*M{vU&Vh˫>uWn~ח\ xG4mpɞ=#{+vgZϥ<ʯV]?ڽNቓٮޙQe*M{>9> h ͬft"YV}ʳфGUW>]fT^jSފWFw]2ƯX<4j\idy _iVynn4W\_٫j{U&vTzj^Uߤၺ3lDa@4FqT~gU{Z>Q>Wu\wN5q]ǴVz̎晻|ՇS#}od5"q2Z{vgiY:Nq5SjNx4if}x <\w=msQ,L(dS}ʳ; ]Mv+=voE'̻pk&"Ghh>t_j?bF'}~q{ϯdϳ5gN.+Ah:\eIȿS]W|v<2߁'Uv*5p-yޓ^UO< \ڋ5ά*ek:4|Ī/3{<0ߍڴC+3ќWZ].΍*}iKA]s@ϡGD5͖=%'CoҵaKkqϫʙzNӇywq꫼3u&+^iWV^^K@ZR.3+WV=WFVȍPU=3u.+^iWXNzxvQdz 3N|e#yWKFImii__>|5+=ȁΊOڎG}vKƿA! C된ˤ>e+5u-yޓ^UOeky.[hp3|i(IENDB`Spreadsheet-ParseXLSX-0.35/nytprof/js/jit/Treemap.css0000644000175000017500000000330414576335353021453 0ustar michamicha /* style for the visualization container */ #infovis { width:96%; height:600px; margin:auto; background-color: white; color:black; text-align:center; overflow:hidden; font-size:10px; font-family:Verdana, Geneva, Arial, Helvetica, sans-serif; } #infovis1 { position:relative; width:96%; height:600px; } #infovis2 { position:relative; width:96%; height:600px; } #infovis div { position:absolute; overflow:hidden; background-color: #666666; } #infovis1 div { position:absolute; overflow:hidden; background-color: #666666; } #infovis2 div { position:absolute; overflow:hidden; background-color: #666666; } /* * #666666 - dark grey for line * #dddddd - mid grey for header backgrounds * #cccccc - light grey for inter-sub borders */ #infovis .content { } #infovis .over-content { } #infovis .head { height:12px; color:black; font-weight:bold; background-color:#dddddd; } #infovis .over-head { background-color:#FFFF00; } #infovis .head.in-path { background-color:#FFFF00; } #infovis .leaf { display:table-cell; vertical-align:middle; background-color:white; border:solid 1px transparent; } #infovis .over-leaf { /* border:1px solid red; */ outline: 2px solid red; outline-offset: -2px; } /* tooltips style */ .tip { z-index: 13000; position:absolute; font-size:12px; font-family:Monaco, Andale Mono, monospace; color: white; background-color: black; opacity: 0.8; padding: 15px; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); -moz-box-shadow: black 5px 5px 5px; } Spreadsheet-ParseXLSX-0.35/nytprof/js/jit/jit.js0000644000175000017500000103424514576335353020501 0ustar michamicha(function () { /* File: Core.js Description: Provides common utility functions and the Class object used internally by the library. Also provides the object for manipulating JSON tree structures Some of the Basic utility functions and the Class system are based in the MooTools Framework . Copyright (c) 2006-2009 Valerio Proietti, . MIT license . Author: Nicolas Garcia Belmonte Copyright: Copyright 2008-2009 by Nicolas Garcia Belmonte. Homepage: Version: 1.1.3 License: BSD License > Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: > * Redistributions of source code must retain the above copyright > notice, this list of conditions and the following disclaimer. > * Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in the > documentation and/or other materials provided with the distribution. > * Neither the name of the organization nor the > names of its contributors may be used to endorse or promote products > derived from this software without specific prior written permission. > > THIS SOFTWARE IS PROVIDED BY Nicolas Garcia Belmonte ``AS IS'' AND ANY > EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED > WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > DISCLAIMED. IN NO EVENT SHALL Nicolas Garcia Belmonte BE LIABLE FOR ANY > DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES > (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS > SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function $empty() {}; function $extend(original, extended){ for (var key in (extended || {})) original[key] = extended[key]; return original; }; function $lambda(value){ return (typeof value == 'function') ? value : function(){ return value; }; }; var $time = Date.now || function(){ return +new Date; }; function $splat(obj){ var type = $type(obj); return (type) ? ((type != 'array') ? [obj] : obj) : []; }; var $type = function(elem) { return $type.s.call(elem).match(/^\[object\s(.*)\]$/)[1].toLowerCase(); }; $type.s = Object.prototype.toString; function $each(iterable, fn){ var type = $type(iterable); if(type == 'object') { for (var key in iterable) fn(iterable[key], key); } else { for(var i=0; i < iterable.length; i++) fn(iterable[i], i); } }; function $merge(){ var mix = {}; for (var i = 0, l = arguments.length; i < l; i++){ var object = arguments[i]; if ($type(object) != 'object') continue; for (var key in object){ var op = object[key], mp = mix[key]; mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $merge(mp, op) : $unlink(op); } } return mix; }; function $unlink(object){ var unlinked; switch ($type(object)){ case 'object': unlinked = {}; for (var p in object) unlinked[p] = $unlink(object[p]); break; case 'array': unlinked = []; for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]); break; default: return object; } return unlinked; }; function $rgbToHex(srcArray, array){ if (srcArray.length < 3) return null; if (srcArray.length == 4 && srcArray[3] == 0 && !array) return 'transparent'; var hex = []; for (var i = 0; i < 3; i++){ var bit = (srcArray[i] - 0).toString(16); hex.push((bit.length == 1) ? '0' + bit : bit); } return (array) ? hex : '#' + hex.join(''); }; function $destroy(elem) { $clean(elem); if(elem.parentNode) elem.parentNode.removeChild(elem); if(elem.clearAttributes) elem.clearAttributes(); }; function $clean(elem) { for(var ch = elem.childNodes, i=0; i < ch.length; i++) { $destroy(ch[i]); } }; function $addEvent(obj, type, fn) { if (obj.addEventListener) obj.addEventListener(type, fn, false); else obj.attachEvent('on' + type, fn); }; function $hasClass(obj, klass) { return (' ' + obj.className + ' ').indexOf(' ' + klass + ' ') > -1; }; function $addClass(obj, klass) { if(!$hasClass(obj, klass)) obj.className = (obj.className + " " + klass); }; function $removeClass(obj, klass) { obj.className = obj.className.replace(new RegExp('(^|\\s)' + klass + '(?:\\s|$)'), '$1'); }; function $get(id) { return document.getElementById(id); }; var Class = function(properties){ properties = properties || {}; var klass = function(){ // not defining any attributes in Class properties. // for (var key in this){ // if (typeof this[key] != 'function') this[key] = $unlink(this[key]); // } this.constructor = klass; if (Class.prototyping) return this; var instance = (this.initialize) ? this.initialize.apply(this, arguments) : this; return instance; }; for (var mutator in Class.Mutators){ if (!properties[mutator]) continue; properties = Class.Mutators[mutator](properties, properties[mutator]); delete properties[mutator]; } $extend(klass, this); klass.constructor = Class; klass.prototype = properties; return klass; }; Class.Mutators = { Extends: function(self, klass){ Class.prototyping = klass.prototype; var subclass = new klass; delete subclass.parent; subclass = Class.inherit(subclass, self); delete Class.prototyping; return subclass; }, Implements: function(self, klasses){ $each($splat(klasses), function(klass){ Class.prototying = klass; $extend(self, ($type(klass) == 'function') ? new klass : klass); delete Class.prototyping; }); return self; } }; $extend(Class, { inherit: function(object, properties){ var caller = arguments.callee.caller; for (var key in properties){ var override = properties[key]; var previous = object[key]; var type = $type(override); if (previous && type == 'function'){ if (override != previous){ if (caller){ override.__parent = previous; object[key] = override; } else { Class.override(object, key, override); } } } else if(type == 'object'){ object[key] = $merge(previous, override); } else { object[key] = override; } } if (caller) object.parent = function(){ return arguments.callee.caller.__parent.apply(this, arguments); }; return object; }, override: function(object, name, method){ var parent = Class.prototyping; if (parent && object[name] != parent[name]) parent = null; var override = function(){ var previous = this.parent; this.parent = parent ? parent[name] : object[name]; var value = method.apply(this, arguments); this.parent = previous; return value; }; object[name] = override; } }); Class.prototype.implement = function(){ var proto = this.prototype; $each(Array.prototype.slice.call(arguments || []), function(properties){ Class.inherit(proto, properties); }); return this; }; /* Object: TreeUtil Some common JSON tree manipulation methods. */ this.TreeUtil = { /* Method: prune Clears all tree nodes having depth greater than maxLevel. Parameters: tree - A JSON tree object. For more information please see . maxLevel - An integer specifying the maximum level allowed for this tree. All nodes having depth greater than max level will be deleted. */ prune: function(tree, maxLevel) { this.each(tree, function(elem, i) { if(i == maxLevel && elem.children) { delete elem.children; elem.children = []; } }); }, /* Method: getParent Returns the parent node of the node having _id_ as id. Parameters: tree - A JSON tree object. See also . id - The _id_ of the child node whose parent will be returned. Returns: A tree JSON node if any, or false otherwise. */ getParent: function(tree, id) { if(tree.id == id) return false; var ch = tree.children; if(ch && ch.length > 0) { for(var i=0; i. id - A node *unique* identifier. Returns: A subtree having a root node matching the given id. Returns null if no subtree matching the id is found. */ getSubtree: function(tree, id) { if(tree.id == id) return tree; for(var i=0, ch=tree.children; i. maxLevel - _optional_ A subtree's max level. Returns: An array having objects with two properties. - The _node_ property contains the leaf node. - The _level_ property specifies the depth of the node. */ getLeaves: function (node, maxLevel) { var leaves = [], levelsToShow = maxLevel || Number.MAX_VALUE; this.each(node, function(elem, i) { if(i < levelsToShow && (!elem.children || elem.children.length == 0 )) { leaves.push({ 'node':elem, 'level':levelsToShow - i }); } }); return leaves; }, /* Method: eachLevel Iterates on tree nodes with relative depth less or equal than a specified level. Parameters: tree - A JSON tree or subtree. See also . initLevel - An integer specifying the initial relative level. Usually zero. toLevel - An integer specifying a top level. This method will iterate only through nodes with depth less than or equal this number. action - A function that receives a node and an integer specifying the actual level of the node. Example: (start code js) TreeUtil.eachLevel(tree, 0, 3, function(node, depth) { alert(node.name + ' ' + depth); }); (end code) */ eachLevel: function(tree, initLevel, toLevel, action) { if(initLevel <= toLevel) { action(tree, initLevel); for(var i=0, ch = tree.children; i. action - A function that receives a node. Example: (start code js) TreeUtil.each(tree, function(node) { alert(node.name); }); (end code) */ each: function(tree, action) { this.eachLevel(tree, 0, Number.MAX_VALUE, action); }, /* Method: loadSubtrees Appends subtrees to leaves by requesting new subtrees with the _request_ method. Parameters: tree - A JSON tree node. . controller - An object that implements a request method. Example: (start code js) TreeUtil.loadSubtrees(leafNode, { request: function(nodeId, level, onComplete) { //Pseudo-code to make an ajax request for a new subtree // that has as root id _nodeId_ and depth _level_ ... Ajax.request({ 'url': 'http://subtreerequesturl/', onSuccess: function(json) { onComplete.onComplete(nodeId, json); } }); } }); (end code) */ loadSubtrees: function(tree, controller) { var maxLevel = controller.request && controller.levelsToShow; var leaves = this.getLeaves(tree, maxLevel), len = leaves.length, selectedNode = {}; if(len == 0) controller.onComplete(); for(var i=0, counter=0; i, , */ /* Class: Canvas A multi-purpose Canvas Class. This Class can be used with the ExCanvas library to provide cross browser Canvas based visualizations. Parameters: id - The canvas id. This id will be used as prefix for the canvas widget DOM elements ids. options - An object containing multiple options such as - _injectInto_ This property is _required_ and it specifies the id of the DOM element to which the Canvas widget will be appended - _width_ The width of the Canvas widget. Default's to 200px - _height_ The height of the Canvas widget. Default's to 200px - _backgroundColor_ Used for compatibility with IE. The canvas' background color. Default's to '#333' - _styles_ A hash containing canvas specific style properties such as _fillStyle_ and _strokeStyle_ among others. Example: Suppose we have this HTML (start code xml)
(end code) Now we create a new Canvas instance (start code js) //Create a new canvas instance var canvas = new Canvas('mycanvas', { //Where to inject the canvas. Any div container will do. 'injectInto':'infovis', //width and height for canvas. Default's to 200. 'width': 900, 'height':500, //Canvas styles 'styles': { 'fillStyle': '#ccddee', 'strokeStyle': '#772277' } }); (end code) The generated HTML will look like this (start code xml)
(end code) As you can see, the generated HTML consists of a canvas DOM element of id _mycanvas-canvas_ and a div label container of id _mycanvas-label_, wrapped in a main div container of id _mycanvas_. You can also add a background canvas, for making background drawings. This is how the background concentric circles are drawn Example: (start code js) //Create a new canvas instance. var canvas = new Canvas('mycanvas', { //Where to inject the canvas. Any div container will do. 'injectInto':'infovis', //width and height for canvas. Default's to 200. 'width': 900, 'height':500, //Canvas styles 'styles': { 'fillStyle': '#ccddee', 'strokeStyle': '#772277' }, //Add a background canvas for plotting //concentric circles. 'backgroundCanvas': { //Add Canvas styles for the bck canvas. 'styles': { 'fillStyle': '#444', 'strokeStyle': '#444' }, //Add the initialization and plotting functions. 'impl': { 'init': function() {}, 'plot': function(canvas, ctx) { var times = 6, d = 100; var pi2 = Math.PI*2; for(var i=1; i<=times; i++) { ctx.beginPath(); ctx.arc(0, 0, i * d, 0, pi2, true); ctx.stroke(); ctx.closePath(); } } } } }); (end code) The _backgroundCanvas_ object contains a canvas _styles_ property and an _impl_ key to be used for implementing background canvas specific code. The _init_ method is only called once, at the instanciation of the background canvas. The _plot_ method is called for plotting a Canvas image. */ this.Canvas = (function(){ var config = { 'injectInto': 'id', 'width': 200, 'height': 200, //deprecated 'backgroundColor': '#333333', 'styles': { 'fillStyle': '#000000', 'strokeStyle': '#000000' }, 'backgroundCanvas': false }; function hasCanvas(){ hasCanvas.t = hasCanvas.t || typeof(HTMLCanvasElement); return "function" == hasCanvas.t || "object" == hasCanvas.t; }; function create(tag, prop, styles){ var elem = document.createElement(tag); (function(obj, prop){ if (prop) { for (var p in prop) { obj[p] = prop[p]; } } return arguments.callee; })(elem, prop)(elem.style, styles); //feature check if (tag == "canvas" && !hasCanvas() && G_vmlCanvasManager) { elem = G_vmlCanvasManager.initElement(document.body.appendChild(elem)); } return elem; }; function get(id){ return document.getElementById(id); }; function translateToCenter(canvas, ctx, w, h){ var width = w ? (canvas.width - w) : canvas.width; var height = h ? (canvas.height - h) : canvas.height; ctx.translate(width / 2, height / 2); }; return function(id, opt){ var ctx, bkctx, mainContainer, labelContainer, canvas, bkcanvas; if (arguments.length < 1) throw "Arguments missing"; var idLabel = id + "-label", idCanvas = id + "-canvas", idBCanvas = id + "-bkcanvas"; opt = $merge(config, opt || {}); //create elements var dim = { 'width': opt.width, 'height': opt.height }; mainContainer = create("div", { 'id': id }, $merge(dim, { 'position': 'relative' })); labelContainer = create("div", { 'id': idLabel }, { 'overflow': 'visible', 'position': 'absolute', 'top': 0, 'left': 0, 'width': dim.width + 'px', 'height': 0 }); var dimPos = { 'position': 'absolute', 'top': 0, 'left': 0, 'width': dim.width + 'px', 'height': dim.height + 'px' }; canvas = create("canvas", $merge({ 'id': idCanvas }, dim), dimPos); var bc = opt.backgroundCanvas; if (bc) { bkcanvas = create("canvas", $merge({ 'id': idBCanvas }, dim), dimPos); //append elements mainContainer.appendChild(bkcanvas); } mainContainer.appendChild(canvas); mainContainer.appendChild(labelContainer); get(opt.injectInto).appendChild(mainContainer); //create contexts ctx = canvas.getContext('2d'); translateToCenter(canvas, ctx); var st = opt.styles; var s; for (s in st) ctx[s] = st[s]; if (bc) { bkctx = bkcanvas.getContext('2d'); st = bc.styles; for (s in st) { bkctx[s] = st[s]; } translateToCenter(bkcanvas, bkctx); bc.impl.init(bkcanvas, bkctx); bc.impl.plot(bkcanvas, bkctx); } //create methods return { 'id': id, /* Method: getCtx Returns the main canvas context object Returns: Main canvas context Example: (start code js) var ctx = canvas.getCtx(); //Now I can use the native canvas context //and for example change some canvas styles ctx.globalAlpha = 1; (end code) */ getCtx: function(){ return ctx; }, /* Method: getElement Returns the main Canvas DOM wrapper Returns: DOM canvas wrapper generated, (i.e the div wrapper element with id _mycanvas_) Example: (start code js) var wrapper = canvas.getElement(); //Returns
...
as element (end code) */ getElement: function(){ return mainContainer; }, /* Method: resize Resizes the canvas. Parameters: width - New canvas width. height - New canvas height. This method can be used with the , or visualizations to resize the visualizations Example: (start code js) function resizeViz(width, height) { canvas.resize(width, height); rgraph.refresh(); //ht.refresh or st.refresh() also work. rgraph.onAfterCompute(); } (end code) */ resize: function(width, height){ var pwidth = canvas.width, pheight = canvas.height; canvas.width = width; canvas.height = height; canvas.style.width = width + "px"; canvas.style.height = height + "px"; if (bc) { bkcanvas.width = width; bkcanvas.height = height; bkcanvas.style.width = width + "px"; bkcanvas.style.height = height + "px"; } //small ExCanvas fix if(!hasCanvas()) { translateToCenter(canvas, ctx, pwidth, pheight); } else { translateToCenter(canvas, ctx); } var st = opt.styles; var s; for (s in st) { ctx[s] = st[s]; } if (bc) { st = bc.styles; for (s in st) bkctx[s] = st[s]; //same ExCanvas fix here if(!hasCanvas()) { translateToCenter(bkcanvas, bkctx, pwidth, pheight); } else { translateToCenter(bkcanvas, bkctx); } bc.impl.init(bkcanvas, bkctx); bc.impl.plot(bkcanvas, bkctx); } }, /* Method: getSize Returns canvas dimensions. Returns: An object with _width_ and _height_ properties. Example: (start code js) canvas.getSize(); //returns { width: 900, height: 500 } (end code) */ getSize: function(){ return { 'width': canvas.width, 'height': canvas.height }; }, path: function(type, action){ ctx.beginPath(); action(ctx); ctx[type](); ctx.closePath(); }, /* Method: clear Clears the canvas object. */ clear: function(){ var size = this.getSize(); ctx.clearRect(-size.width / 2, -size.height / 2, size.width, size.height); }, /* Method: clearReactangle Same as but only clears a section of the canvas. Parameters: top - An integer specifying the top of the rectangle. right - An integer specifying the right of the rectangle. bottom - An integer specifying the bottom of the rectangle. left - An integer specifying the left of the rectangle. */ clearRectangle: function(top, right, bottom, left){ //if using excanvas if (!hasCanvas()) { var f0 = ctx.fillStyle; ctx.fillStyle = opt.backgroundColor; ctx.fillRect(left, top, Math.abs(right - left), Math.abs(bottom - top)); ctx.fillStyle = f0; } else { ctx.clearRect(left, top, Math.abs(right - left), Math.abs(bottom - top)); } } }; }; })(); /* * File: Polar.js * * Defines the class. * * Description: * * The class, just like the class, is used by the , and as a 2D point representation. * * See also: * * * */ /* Class: Polar A multi purpose polar representation. Description: The class, just like the class, is used by the , and as a 2D point representation. See also: Parameters: theta - An angle. rho - The norm. */ this.Polar = function(theta, rho) { this.theta = theta; this.rho = rho; }; Polar.prototype = { /* Method: getc Returns a complex number. Parameters: simple - _optional_ If *true*, this method will return only an object holding x and y properties and not a instance. Default's *false*. Returns: A complex number. */ getc: function(simple) { return this.toComplex(simple); }, /* Method: getp Returns a representation. Returns: A variable in polar coordinates. */ getp: function() { return this; }, /* Method: set Sets a number. Parameters: v - A or instance. */ set: function(v) { v = v.getp(); this.theta = v.theta; this.rho = v.rho; }, /* Method: setc Sets a number. Parameters: x - A number real part. y - A number imaginary part. */ setc: function(x, y) { this.rho = Math.sqrt(x * x + y * y); this.theta = Math.atan2(y, x); if(this.theta < 0) this.theta += Math.PI * 2; }, /* Method: setp Sets a polar number. Parameters: theta - A number angle property. rho - A number rho property. */ setp: function(theta, rho) { this.theta = theta; this.rho = rho; }, /* Method: clone Returns a copy of the current object. Returns: A copy of the real object. */ clone: function() { return new Polar(this.theta, this.rho); }, /* Method: toComplex Translates from polar to cartesian coordinates and returns a new instance. Parameters: simple - _optional_ If *true* this method will only return an object with x and y properties (and not the whole instance). Default's *false*. Returns: A new instance. */ toComplex: function(simple) { var x = Math.cos(this.theta) * this.rho; var y = Math.sin(this.theta) * this.rho; if(simple) return { 'x': x, 'y': y}; return new Complex(x, y); }, /* Method: add Adds two instances. Parameters: polar - A number. Returns: A new Polar instance. */ add: function(polar) { return new Polar(this.theta + polar.theta, this.rho + polar.rho); }, /* Method: scale Scales a polar norm. Parameters: number - A scale factor. Returns: A new Polar instance. */ scale: function(number) { return new Polar(this.theta, this.rho * number); }, /* Method: equals Comparison method. Returns *true* if the theta and rho properties are equal. Parameters: c - A number. Returns: *true* if the theta and rho parameters for these objects are equal. *false* otherwise. */ equals: function(c) { return this.theta == c.theta && this.rho == c.rho; }, /* Method: $add Adds two instances affecting the current object. Paramters: polar - A instance. Returns: The changed object. */ $add: function(polar) { this.theta = this.theta + polar.theta; this.rho += polar.rho; return this; }, /* Method: $madd Adds two instances affecting the current object. The resulting theta angle is modulo 2pi. Parameters: polar - A instance. Returns: The changed object. */ $madd: function(polar) { this.theta = (this.theta + polar.theta) % (Math.PI * 2); this.rho += polar.rho; return this; }, /* Method: $scale Scales a polar instance affecting the object. Parameters: number - A scaling factor. Returns: The changed object. */ $scale: function(number) { this.rho *= number; return this; }, /* Method: interpolate Calculates a polar interpolation between two points at a given delta moment. Parameters: elem - A instance. delta - A delta factor ranging [0, 1]. Returns: A new instance representing an interpolation between _this_ and _elem_ */ interpolate: function(elem, delta) { var pi = Math.PI, pi2 = pi * 2; var ch = function(t) { return (t < 0)? (t % pi2) + pi2 : t % pi2; }; var tt = this.theta, et = elem.theta; var sum; if(Math.abs(tt - et) > pi) { if(tt > et) { sum =ch((et + ((tt - pi2) - et) * delta)) ; } else { sum =ch((et - pi2 + (tt - (et - pi2)) * delta)); } } else { sum =ch((et + (tt - et) * delta)) ; } var r = (this.rho - elem.rho) * delta + elem.rho; return { 'theta': sum, 'rho': r }; } }; var $P = function(a, b) { return new Polar(a, b); }; Polar.KER = $P(0, 0); /* * File: Complex.js * * Defines the class. * * Description: * * The class, just like the class, is used by the , and as a 2D point representation. * * See also: * * * */ /* Class: Complex A multi-purpose Complex Class with common methods. Description: The class, just like the class, is used by the , and as a 2D point representation. See also: Parameters: x - _optional_ A Complex number real part. y - _optional_ A Complex number imaginary part. */ this.Complex = function(x, y) { this.x = x; this.y = y; }; Complex.prototype = { /* Method: getc Returns a complex number. Returns: A complex number. */ getc: function() { return this; }, /* Method: getp Returns a representation of this number. Parameters: simple - _optional_ If *true*, this method will return only an object holding theta and rho properties and not a instance. Default's *false*. Returns: A variable in coordinates. */ getp: function(simple) { return this.toPolar(simple); }, /* Method: set Sets a number. Parameters: c - A or instance. */ set: function(c) { c = c.getc(true); this.x = c.x; this.y = c.y; }, /* Method: setc Sets a complex number. Parameters: x - A number Real part. y - A number Imaginary part. */ setc: function(x, y) { this.x = x; this.y = y; }, /* Method: setp Sets a polar number. Parameters: theta - A number theta property. rho - A number rho property. */ setp: function(theta, rho) { this.x = Math.cos(theta) * rho; this.y = Math.sin(theta) * rho; }, /* Method: clone Returns a copy of the current object. Returns: A copy of the real object. */ clone: function() { return new Complex(this.x, this.y); }, /* Method: toPolar Transforms cartesian to polar coordinates. Parameters: simple - _optional_ If *true* this method will only return an object with theta and rho properties (and not the whole instance). Default's *false*. Returns: A new instance. */ toPolar: function(simple) { var rho = this.norm(); var atan = Math.atan2(this.y, this.x); if(atan < 0) atan += Math.PI * 2; if(simple) return { 'theta': atan, 'rho': rho }; return new Polar(atan, rho); }, /* Method: norm Calculates a number norm. Returns: A real number representing the complex norm. */ norm: function () { return Math.sqrt(this.squaredNorm()); }, /* Method: squaredNorm Calculates a number squared norm. Returns: A real number representing the complex squared norm. */ squaredNorm: function () { return this.x*this.x + this.y*this.y; }, /* Method: add Returns the result of adding two complex numbers. Does not alter the original object. Parameters: pos - A instance. Returns: The result of adding two complex numbers. */ add: function(pos) { return new Complex(this.x + pos.x, this.y + pos.y); }, /* Method: prod Returns the result of multiplying two numbers. Does not alter the original object. Parameters: pos - A instance. Returns: The result of multiplying two complex numbers. */ prod: function(pos) { return new Complex(this.x*pos.x - this.y*pos.y, this.y*pos.x + this.x*pos.y); }, /* Method: conjugate Returns the conjugate of this number. Does not alter the original object. Returns: The conjugate of this number. */ conjugate: function() { return new Complex(this.x, -this.y); }, /* Method: scale Returns the result of scaling a instance. Does not alter the original object. Parameters: factor - A scale factor. Returns: The result of scaling this complex to a factor. */ scale: function(factor) { return new Complex(this.x * factor, this.y * factor); }, /* Method: equals Comparison method. Returns *true* if both real and imaginary parts are equal. Parameters: c - A instance. Returns: A boolean instance indicating if both numbers are equal. */ equals: function(c) { return this.x == c.x && this.y == c.y; }, /* Method: $add Returns the result of adding two numbers. Alters the original object. Parameters: pos - A instance. Returns: The result of adding two complex numbers. */ $add: function(pos) { this.x += pos.x; this.y += pos.y; return this; }, /* Method: $prod Returns the result of multiplying two numbers. Alters the original object. Parameters: pos - A instance. Returns: The result of multiplying two complex numbers. */ $prod:function(pos) { var x = this.x, y = this.y; this.x = x*pos.x - y*pos.y; this.y = y*pos.x + x*pos.y; return this; }, /* Method: $conjugate Returns the conjugate for this . Alters the original object. Returns: The conjugate for this complex. */ $conjugate: function() { this.y = -this.y; return this; }, /* Method: $scale Returns the result of scaling a instance. Alters the original object. Parameters: factor - A scale factor. Returns: The result of scaling this complex to a factor. */ $scale: function(factor) { this.x *= factor; this.y *= factor; return this; }, /* Method: $div Returns the division of two numbers. Alters the original object. Parameters: pos - A number. Returns: The result of scaling this complex to a factor. */ $div: function(pos) { var x = this.x, y = this.y; var sq = pos.squaredNorm(); this.x = x * pos.x + y * pos.y; this.y = y * pos.x - x * pos.y; return this.$scale(1 / sq); } }; var $C = function(a, b) { return new Complex(a, b); }; Complex.KER = $C(0, 0); /* * File: Graph.js * * Generic , and classes. * * Used by: * * , and . * */ /* Class: Graph A generic Graph class. Description: When a json graph/tree structure is loaded by , an internal representation is created. In most cases you'll be dealing with an already created structure, so methods like or won't be of many use. However methods like and are pretty useful. provides also iterators for and advanced and useful graph operations and methods. Used by: , , and . Access: An instance of this class can be accessed by using the _graph_ parameter of a , or instance Example: (start code js) var st = new ST(canvas, config); st.graph.getNode //or any other method. var ht = new Hypertree(canvas, config); ht.graph.getNode //or any other method. var rg = new RGraph(canvas, config); rg.graph.getNode //or any other method. (end code) */ this.Graph = new Class({ initialize: function(opt) { var innerOptions = { 'complex': false, 'Node': {} }; this.opt = $merge(innerOptions, opt || {}); this.nodes= {}; }, /* Method: getNode Returns a by _id_. Parameters: id - A id. Returns: A having _id_ as id. Returns *false* otherwise. Example: (start code js) var node = graph.getNode('someid'); (end code) */ getNode: function(id) { if(this.hasNode(id)) return this.nodes[id]; return false; }, /* Method: getAdjacence Returns an array of objects connecting nodes with ids _id_ and _id2_. Parameters: id - A id. id2 - A id. Returns: An Array of objects. Returns *false* if there's not a connecting those two nodes. */ getAdjacence: function (id, id2) { var adjs = []; if(this.hasNode(id) && this.hasNode(id2) && this.nodes[id].adjacentTo({ 'id':id2 }) && this.nodes[id2].adjacentTo({ 'id':id })) { adjs.push(this.nodes[id].getAdjacency(id2)); adjs.push(this.nodes[id2].getAdjacency(id)); return adjs; } return false; }, /* Method: addNode Adds a node. Parameters: obj - An object containing as properties - _id_ node's id - _name_ node's name - _data_ node's data hash See also: */ addNode: function(obj) { if(!this.nodes[obj.id]) { this.nodes[obj.id] = new Graph.Node($extend({ 'id': obj.id, 'name': obj.name, 'data': obj.data }, this.opt.Node), this.opt.complex); } return this.nodes[obj.id]; }, /* Method: addAdjacence Connects nodes specified by _obj_ and _obj2_. If not found, nodes are created. Parameters: obj - a object. obj2 - Another object. data - A DataSet object. Used to store some extra information in the object created. See also: , */ addAdjacence: function (obj, obj2, data) { var adjs = []; if(!this.hasNode(obj.id)) { this.addNode(obj); } if(!this.hasNode(obj2.id)) { this.addNode(obj2); } obj = this.nodes[obj.id]; obj2 = this.nodes[obj2.id]; for(var i in this.nodes) { if(this.nodes[i].id == obj.id) { if(!this.nodes[i].adjacentTo(obj2)) { adjs.push(this.nodes[i].addAdjacency(obj2, data)); } } if(this.nodes[i].id == obj2.id) { if(!this.nodes[i].adjacentTo(obj)) { adjs.push(this.nodes[i].addAdjacency(obj, data)); } } } return adjs; }, /* Method: removeNode Removes a matching the specified _id_. Parameters: id - A node's id. */ removeNode: function(id) { if(this.hasNode(id)) { var node = this.nodes[id]; for(var i=0 in node.adjacencies) { var adj = node.adjacencies[i]; this.removeAdjacence(id, adj.nodeTo.id); } delete this.nodes[id]; } }, /* Method: removeAdjacence Removes a matching _id1_ and _id2_. Parameters: id1 - A id. id2 - A id. */ removeAdjacence: function(id1, id2) { if(this.hasNode(id1)) this.nodes[id1].removeAdjacency(id2); if(this.hasNode(id2)) this.nodes[id2].removeAdjacency(id1); }, /* Method: hasNode Returns a Boolean instance indicating if the node belongs to the or not. Parameters: id - Node id. Returns: A Boolean instance indicating if the node belongs to the graph or not. */ hasNode: function(id) { return id in this.nodes; } }); /* Class: Graph.Node A node. Parameters: obj - An object containing an 'id', 'name' and 'data' properties as described in . complex - Whether node position properties should contain or instances. See also: Description: An instance of is usually passed as parameter for most configuration/controller methods in the , and classes. A object has as properties id - Node id. name - Node name. data - Node data property containing a hash (i.e {}) with custom options. For more information see . selected - Whether the node is selected or not. Used by for selecting nodes that are between the root node and the selected node. angleSpan - For radial layouts such as the ones performed by the and the . Contains _begin_ and _end_ properties containing angle values describing the angle span for this subtree. alpha - Current opacity value. startAlpha - Opacity begin value. Used for interpolation. endAlpha - Opacity end value. Used for interpolation. pos - Current position. Can be a or instance. startPos - Starting position. Used for interpolation. endPos - Ending position. Used for interpolation. */ Graph.Node = new Class({ initialize: function(opt, complex) { var innerOptions = { 'id': '', 'name': '', 'data': {}, 'adjacencies': {}, 'selected': false, 'drawn': false, 'exist': false, 'angleSpan': { 'begin': 0, 'end' : 0 }, 'alpha': 1, 'startAlpha': 1, 'endAlpha': 1, 'pos': (complex && $C(0, 0)) || $P(0, 0), 'startPos': (complex && $C(0, 0)) || $P(0, 0), 'endPos': (complex && $C(0, 0)) || $P(0, 0) }; $extend(this, $extend(innerOptions, opt)); }, /* Method: adjacentTo Indicates if the node is adjacent to the node specified by id Parameters: id - A node id. Returns: A Boolean instance indicating whether this node is adjacent to the specified by id or not. Example: (start code js) node.adjacentTo('mynodeid'); (end code) */ adjacentTo: function(node) { return node.id in this.adjacencies; }, /* Method: getAdjacency Returns a object connecting the current and the node having _id_ as id. Parameters: id - A node id. Returns: A object or undefined. */ getAdjacency: function(id) { return this.adjacencies[id]; }, /* Method: addAdjacency Connects the current node and the given node. Parameters: node - A . data - Some custom hash information. */ addAdjacency: function(node, data) { var adj = new Graph.Adjacence(this, node, data); return this.adjacencies[node.id] = adj; }, /* Method: removeAdjacency Removes a by _id_. Parameters: id - A node id. */ removeAdjacency: function(id) { delete this.adjacencies[id]; } }); /* Class: Graph.Adjacence A adjacence (or edge). Connects two . Parameters: nodeFrom - A . nodeTo - A . data - Some custom hash data. See also: Description: An instance of is usually passed as parameter for some configuration/controller methods in the , and classes. A object has as properties nodeFrom - A connected by this edge. nodeTo - Another connected by this edge. data - Node data property containing a hash (i.e {}) with custom options. For more information see . alpha - Current opacity value. startAlpha - Opacity begin value. Used for interpolation. endAlpha - Opacity end value. Used for interpolation. */ Graph.Adjacence = function(nodeFrom, nodeTo, data) { this.nodeFrom = nodeFrom; this.nodeTo = nodeTo; this.data = data || {}; this.alpha = 1; this.startAlpha = 1; this.endAlpha = 1; }; /* Object: Graph.Util traversal and processing utility object. */ Graph.Util = { /* filter For internal use only. Provides a filtering function based on flags. */ filter: function(param) { if(!param || !($type(param) == 'string')) return function() { return true; }; var props = param.split(" "); return function(elem) { for(var i=0; i by _id_. Parameters: graph - A instance. id - A id. Returns: A node. Example: (start code js) Graph.Util.getNode(graph, 'nodeid'); (end code) */ getNode: function(graph, id) { return graph.getNode(id); }, /* Method: eachNode Iterates over nodes performing an _action_. Parameters: graph - A instance. action - A callback function having a as first formal parameter. Example: (start code js) Graph.Util.each(graph, function(node) { alert(node.name); }); (end code) */ eachNode: function(graph, action, flags) { var filter = this.filter(flags); for(var i in graph.nodes) { if(filter(graph.nodes[i])) action(graph.nodes[i]); } }, /* Method: eachAdjacency Iterates over adjacencies applying the _action_ function. Parameters: node - A . action - A callback function having as first formal parameter. Example: (start code js) Graph.Util.eachAdjacency(node, function(adj) { alert(adj.nodeTo.name); }); (end code) */ eachAdjacency: function(node, action, flags) { var adj = node.adjacencies, filter = this.filter(flags); for(var id in adj) { if(filter(adj[id])) { action(adj[id], id); } } }, /* Method: computeLevels Performs a BFS traversal setting the correct depth for each node. The depth of each node can then be accessed by >node._depth Parameters: graph - A . id - A starting node id for the BFS traversal. startDepth - _optional_ A minimum depth value. Default's 0. */ computeLevels: function(graph, id, startDepth, flags) { startDepth = startDepth || 0; var filter = this.filter(flags); this.eachNode(graph, function(elem) { elem._flag = false; elem._depth = -1; }, flags); var root = graph.getNode(id); root._depth = startDepth; var queue = [root]; while(queue.length != 0) { var node = queue.pop(); node._flag = true; this.eachAdjacency(node, function(adj) { var n = adj.nodeTo; if(n._flag == false && filter(n)) { if(n._depth < 0) n._depth = node._depth + 1 + startDepth; queue.unshift(n); } }, flags); } }, /* Method: eachBFS Performs a BFS traversal applying _action_ to each . Parameters: graph - A . id - A starting node id for the BFS traversal. action - A callback function having a as first formal parameter. Example: (start code js) Graph.Util.eachBFS(graph, 'mynodeid', function(node) { alert(node.name); }); (end code) */ eachBFS: function(graph, id, action, flags) { var filter = this.filter(flags); this.clean(graph); var queue = [graph.getNode(id)]; while(queue.length != 0) { var node = queue.pop(); node._flag = true; action(node, node._depth); this.eachAdjacency(node, function(adj) { var n = adj.nodeTo; if(n._flag == false && filter(n)) { n._flag = true; queue.unshift(n); } }, flags); } }, /* Method: eachLevel Iterates over a node's subgraph applying _action_ to the nodes of relative depth between _levelBegin_ and _levelEnd_. Parameters: node - A . levelBegin - A relative level value. levelEnd - A relative level value. action - A callback function having a as first formal parameter. */ eachLevel: function(node, levelBegin, levelEnd, action, flags) { var d = node._depth, filter = this.filter(flags), that = this; levelEnd = levelEnd === false? Number.MAX_VALUE -d : levelEnd; (function loopLevel(node, levelBegin, levelEnd) { var d = node._depth; if(d >= levelBegin && d <= levelEnd && filter(node)) action(node, d); if(d < levelEnd) { that.eachAdjacency(node, function(adj) { var n = adj.nodeTo; if(n._depth > d) loopLevel(n, levelBegin, levelEnd); }); } })(node, levelBegin + d, levelEnd + d); }, /* Method: eachSubgraph Iterates over a node's children recursively. Parameters: node - A . action - A callback function having a as first formal parameter. Example: (start code js) Graph.Util.eachSubgraph(node, function(node) { alert(node.name); }); (end code) */ eachSubgraph: function(node, action, flags) { this.eachLevel(node, 0, false, action, flags); }, /* Method: eachSubnode Iterates over a node's children (without deeper recursion). Parameters: node - A . action - A callback function having a as first formal parameter. Example: (start code js) Graph.Util.eachSubnode(node, function(node) { alert(node.name); }); (end code) */ eachSubnode: function(node, action, flags) { this.eachLevel(node, 1, 1, action, flags); }, /* Method: anySubnode Returns *true* if any subnode matches the given condition. Parameters: node - A . cond - A callback function returning a Boolean instance. This function has as first formal parameter a . Returns: A boolean value. Example: (start code js) Graph.Util.anySubnode(node, function(node) { return node.name == "mynodename"; }); (end code) */ anySubnode: function(node, cond, flags) { var flag = false; cond = cond || $lambda(true); var c = $type(cond) == 'string'? function(n) { return n[cond]; } : cond; this.eachSubnode(node, function(elem) { if(c(elem)) flag = true; }, flags); return flag; }, /* Method: getSubnodes Collects all subnodes for a specified node. The _level_ parameter filters nodes having relative depth of _level_ from the root node. Parameters: node - A . level - _optional_ A starting relative depth for collecting nodes. Default's 0. Returns: An array of nodes. */ getSubnodes: function(node, level, flags) { var ans = [], that = this; level = level || 0; var levelStart, levelEnd; if($type(level) == 'array') { levelStart = level[0]; levelEnd = level[1]; } else { levelStart = level; levelEnd = Number.MAX_VALUE - node._depth; } this.eachLevel(node, levelStart, levelEnd, function(n) { ans.push(n); }, flags); return ans; }, /* Method: getParents Returns an Array of wich are parents of the given node. Parameters: node - A . Returns: An Array of . Example: (start code js) var pars = Graph.Util.getParents(node); if(pars.length > 0) { //do stuff with parents } (end code) */ getParents: function(node) { var ans = []; this.eachAdjacency(node, function(adj) { var n = adj.nodeTo; if(n._depth < node._depth) ans.push(n); }); return ans; }, /* Method: isDescendantOf Returns a Boolean instance indicating if some node is descendant of the node with the given id. Parameters: node - A . id - A id. Returns: Ture if _node_ is descendant of the node with the given _id_. False otherwise. Example: (start code js) var pars = Graph.Util.isDescendantOf(node, "nodeid"); (end code) */ isDescendantOf: function(node, id) { if(node.id == id) return true; var pars = this.getParents(node), ans = false; for ( var i = 0; !ans && i < pars.length; i++) { ans = ans || this.isDescendantOf(pars[i], id); } return ans; }, /* Method: clean Cleans flags from nodes (by setting the _flag_ property to false). Parameters: graph - A instance. */ clean: function(graph) { this.eachNode(graph, function(elem) { elem._flag = false; }); } }; /* * File: Graph.Op.js * * Defines an abstract class for performing Operations. */ /* Object: Graph.Op Generic Operations. Description: An abstract class holding unary and binary powerful graph operations such as removingNodes, removingEdges, adding two graphs and morphing. Implemented by: , and . Access: The subclasses for this abstract class can be accessed by using the _op_ property of the , or instances created. See also: , , , , , , . */ Graph.Op = { options: { type: 'nothing', duration: 2000, hideLabels: true, fps:30 }, /* Method: removeNode Removes one or more from the visualization. It can also perform several animations like fading sequentially, fading concurrently, iterating or replotting. Parameters: node - The node's id. Can also be an array having many ids. opt - Animation options. It's an object with optional properties - _type_ Type of the animation. Can be "nothing", "replot", "fade:seq", "fade:con" or "iter". Default's "nothing". - _duration_ Duration of the animation in milliseconds. Default's 2000. - _fps_ Frames per second for the animation. Default's 30. - _hideLabels_ Hide labels during the animation. Default's *true*. - _transition_ Transitions defined in the class. Default's the default transition option of the , or instance created. Example: (start code js) var rg = new RGraph(canvas, config); //could be new ST or new Hypertree also. rg.op.removeNode('nodeid', { type: 'fade:seq', duration: 1000, hideLabels: false, transition: Trans.Quart.easeOut }); //or also rg.op.removeNode(['someid', 'otherid'], { type: 'fade:con', duration: 1500 }); (end code) */ removeNode: function(node, opt) { var viz = this.viz; var options = $merge(this.options, viz.controller, opt); var n = $splat(node); var i, that, nodeObj; switch(options.type) { case 'nothing': for(i=0; i class. Default's the default transition option of the , or instance created. Example: (start code js) var rg = new RGraph(canvas, config); //could be new ST or new Hypertree also. rg.op.removeEdge(['nodeid', 'otherid'], { type: 'fade:seq', duration: 1000, hideLabels: false, transition: Trans.Quart.easeOut }); //or also rg.op.removeEdge([['someid', 'otherid'], ['id3', 'id4']], { type: 'fade:con', duration: 1500 }); (end code) */ removeEdge: function(vertex, opt) { var viz = this.viz; var options = $merge(this.options, viz.controller, opt); var v = ($type(vertex[0]) == 'string')? [vertex] : vertex; var i, that, adjs; switch(options.type) { case 'nothing': for(i=0; i Parameters: json - A json tree or graph structure. See also . opt - Animation options. It's an object with optional properties - _type_ Type of the animation. Can be "nothing", "replot", "fade:seq" or "fade:con". Default's "nothing". - _duration_ Duration of the animation in milliseconds. Default's 2000. - _fps_ Frames per second for the animation. Default's 30. - _hideLabels_ Hide labels during the animation. Default's *true*. - _transition_ Transitions defined in the class. Default's the default transition option of the , or instance created. Example: (start code js) //json contains a tree or graph structure. var rg = new RGraph(canvas, config); //could be new ST or new Hypertree also. rg.op.sum(json, { type: 'fade:seq', duration: 1000, hideLabels: false, transition: Trans.Quart.easeOut }); //or also rg.op.sum(json, { type: 'fade:con', duration: 1500 }); (end code) */ sum: function(json, opt) { var viz = this.viz; var options = $merge(this.options, viz.controller, opt), root = viz.root; var GUtil, graph; viz.root = opt.id || viz.root; switch(options.type) { case 'nothing': graph = viz.construct(json); GUtil = Graph.Util; GUtil.eachNode(graph, function(elem) { GUtil.eachAdjacency(elem, function(adj) { viz.graph.addAdjacence(adj.nodeFrom, adj.nodeTo, adj.data); }); }); break; case 'replot': viz.refresh(true); this.sum(json, { type: 'nothing' }); viz.refresh(true); break; case 'fade:seq': case 'fade': case 'fade:con': GUtil = Graph.Util; that = this; graph = viz.construct(json); //set alpha to 0 for nodes to add. var fadeEdges = this.preprocessSum(graph); var modes = !fadeEdges? ['fade:nodes'] : ['fade:nodes', 'fade:vertex']; viz.reposition(); if(options.type != 'fade:con') { viz.fx.animate($merge(options, { modes: ['linear'], onComplete: function() { viz.fx.animate($merge(options, { modes: modes, onComplete: function() { options.onComplete(); } })); } })); } else { GUtil.eachNode(viz.graph, function(elem) { if (elem.id != root && elem.pos.getp().equals(Polar.KER)) { elem.pos.set(elem.endPos); elem.startPos.set(elem.endPos); } }); viz.fx.animate($merge(options, { modes: ['linear'].concat(modes) })); } break; default: this.doError(); } }, /* Method: morph This method will _morph_ the current visualized graph into the new _json_ representation passed in the method. Can also perform multiple animations. The _json_ object must at least have the root node in common with the current visualized graph. Parameters: json - A json tree or graph structure. See also . opt - Animation options. It's an object with optional properties - _type_ Type of the animation. Can be "nothing", "replot", or "fade". Default's "nothing". - _duration_ Duration of the animation in milliseconds. Default's 2000. - _fps_ Frames per second for the animation. Default's 30. - _hideLabels_ Hide labels during the animation. Default's *true*. - _transition_ Transitions defined in the class. Default's the default transition option of the , or instance created. Example: (start code js) //json contains a tree or graph structure. var rg = new RGraph(canvas, config); //could be new ST or new Hypertree also. rg.op.morph(json, { type: 'fade', duration: 1000, hideLabels: false, transition: Trans.Quart.easeOut }); //or also rg.op.morph(json, { type: 'fade', duration: 1500 }); (end code) */ morph: function(json, opt) { var viz = this.viz; var options = $merge(this.options, viz.controller, opt), root = viz.root; var GUtil, graph; viz.root = opt.id || viz.root; switch(options.type) { case 'nothing': graph = viz.construct(json); GUtil = Graph.Util; GUtil.eachNode(graph, function(elem) { GUtil.eachAdjacency(elem, function(adj) { viz.graph.addAdjacence(adj.nodeFrom, adj.nodeTo, adj.data); }); }); GUtil.eachNode(viz.graph, function(elem) { GUtil.eachAdjacency(elem, function(adj) { if(!graph.getAdjacence(adj.nodeFrom.id, adj.nodeTo.id)) { viz.graph.removeAdjacence(adj.nodeFrom.id, adj.nodeTo.id); } }); if(!graph.hasNode(elem.id)) viz.graph.removeNode(elem.id); }); break; case 'replot': viz.fx.clearLabels(true); this.morph(json, { type: 'nothing' }); viz.refresh(true); viz.refresh(true); break; case 'fade:seq': case 'fade': case 'fade:con': GUtil = Graph.Util; that = this; graph = viz.construct(json); //preprocessing for adding nodes. var fadeEdges = this.preprocessSum(graph); //preprocessing for nodes to delete. GUtil.eachNode(viz.graph, function(elem) { if(!graph.hasNode(elem.id)) { elem.alpha = 1; elem.startAlpha = 1; elem.endAlpha = 0; elem.ignore = true; } }); GUtil.eachNode(viz.graph, function(elem) { if(elem.ignore) return; GUtil.eachAdjacency(elem, function(adj) { if(adj.nodeFrom.ignore || adj.nodeTo.ignore) return; var nodeFrom = graph.getNode(adj.nodeFrom.id); var nodeTo = graph.getNode(adj.nodeTo.id); if(!nodeFrom.adjacentTo(nodeTo)) { var adjs = viz.graph.getAdjacence(nodeFrom.id, nodeTo.id); fadeEdges = true; adjs[0].alpha = 1; adjs[0].startAlpha = 1; adjs[0].endAlpha = 0; adjs[0].ignore = true; adjs[1].alpha = 1; adjs[1].startAlpha = 1; adjs[1].endAlpha = 0; adjs[1].ignore = true; } }); }); var modes = !fadeEdges? ['fade:nodes'] : ['fade:nodes', 'fade:vertex']; viz.reposition(); GUtil.eachNode(viz.graph, function(elem) { if (elem.id != root && elem.pos.getp().equals(Polar.KER)) { elem.pos.set(elem.endPos); elem.startPos.set(elem.endPos); } }); viz.fx.animate($merge(options, { modes: ['polar'].concat(modes), onComplete: function() { GUtil.eachNode(viz.graph, function(elem) { if(elem.ignore) viz.graph.removeNode(elem.id); }); GUtil.eachNode(viz.graph, function(elem) { GUtil.eachAdjacency(elem, function(adj) { if(adj.ignore) viz.graph.removeAdjacence(adj.nodeFrom.id, adj.nodeTo.id); }); }); options.onComplete(); } })); break; default: this.doError(); } }, preprocessSum: function(graph) { var viz = this.viz; var GUtil = Graph.Util; GUtil.eachNode(graph, function(elem) { if(!viz.graph.hasNode(elem.id)) { viz.graph.addNode(elem); var n = viz.graph.getNode(elem.id); n.alpha = 0; n.startAlpha = 0; n.endAlpha = 1; } }); var fadeEdges = false; GUtil.eachNode(graph, function(elem) { GUtil.eachAdjacency(elem, function(adj) { var nodeFrom = viz.graph.getNode(adj.nodeFrom.id); var nodeTo = viz.graph.getNode(adj.nodeTo.id); if(!nodeFrom.adjacentTo(nodeTo)) { var adjs = viz.graph.addAdjacence(nodeFrom, nodeTo, adj.data); if(nodeFrom.startAlpha == nodeFrom.endAlpha && nodeTo.startAlpha == nodeTo.endAlpha) { fadeEdges = true; adjs[0].alpha = 0; adjs[0].startAlpha = 0; adjs[0].endAlpha = 1; adjs[1].alpha = 0; adjs[1].startAlpha = 0; adjs[1].endAlpha = 1; } } }); }); return fadeEdges; } }; /* * File: Graph.Plot.js * * Defines an abstract class for performing rendering and animation. * */ /* Object: Graph.Plot Generic rendering and animation methods. Description: An abstract class for plotting a generic graph structure. Implemented by: , , . Access: The subclasses for this abstract class can be accessed by using the _fx_ property of the , , or instances created. See also: , , , , , , . */ Graph.Plot = { Interpolator: { 'moebius': function(elem, delta, vector) { if(delta <= 1 || vector.norm() <= 1) { var x = vector.x, y = vector.y; var ans = elem.startPos.getc().moebiusTransformation(vector); elem.pos.setc(ans.x, ans.y); vector.x = x; vector.y = y; } }, 'linear': function(elem, delta) { var from = elem.startPos.getc(true); var to = elem.endPos.getc(true); elem.pos.setc((to.x - from.x) * delta + from.x, (to.y - from.y) * delta + from.y); }, 'fade:nodes': function(elem, delta) { if(delta <= 1 && (elem.endAlpha != elem.alpha)) { var from = elem.startAlpha; var to = elem.endAlpha; elem.alpha = from + (to - from) * delta; } }, 'fade:vertex': function(elem, delta) { var adjs = elem.adjacencies; for(var id in adjs) this['fade:nodes'](adjs[id], delta); }, 'polar': function(elem, delta) { var from = elem.startPos.getp(true); var to = elem.endPos.getp(); var ans = to.interpolate(from, delta); elem.pos.setp(ans.theta, ans.rho); } }, //A flag value indicating if node labels are being displayed or not. labelsHidden: false, //Label DOM element labelContainer: false, //Label DOM elements hash. labels: {}, /* Method: getLabelContainer Lazy fetcher for the label container. Returns: The label container DOM element. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST var labelContainer = rg.fx.getLabelContainer(); alert(labelContainer.innerHTML); (end code) */ getLabelContainer: function() { return this.labelContainer? this.labelContainer : this.labelContainer = document.getElementById(this.viz.config.labelContainer); }, /* Method: getLabel Lazy fetcher for the label DOM element. Parameters: id - The label id (which is also a id). Returns: The label DOM element. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST var label = rg.fx.getLabel('someid'); alert(label.innerHTML); (end code) */ getLabel: function(id) { return (id in this.labels && this.labels[id] != null)? this.labels[id] : this.labels[id] = document.getElementById(id); }, /* Method: hideLabels Hides all labels (by hiding the label container). Parameters: hide - A boolean value indicating if the label container must be hidden or not. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST rg.fx.hideLabels(true); (end code) */ hideLabels: function (hide) { var container = this.getLabelContainer(); if(hide) container.style.display = 'none'; else container.style.display = ''; this.labelsHidden = hide; }, /* Method: clearLabels Clears the label container. Useful when using a new visualization with the same canvas element/widget. Parameters: force - Forces deletion of all labels. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST rg.fx.clearLabels(); (end code) */ clearLabels: function(force) { for(var id in this.labels) { if (force || !this.viz.graph.hasNode(id)) { this.disposeLabel(id); delete this.labels[id]; } } }, /* Method: disposeLabel Removes a label. Parameters: id - A label id (which generally is also a id). Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST rg.fx.disposeLabel('labelid'); (end code) */ disposeLabel: function(id) { var elem = this.getLabel(id); if(elem && elem.parentNode) { elem.parentNode.removeChild(elem); } }, /* Method: hideLabel Hides the corresponding label. Parameters: node - A . Can also be an array of . flag - If *true*, nodes will be shown. Otherwise nodes will be hidden. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST rg.fx.hideLabel(rg.graph.getNode('someid'), false); (end code) */ hideLabel: function(node, flag) { node = $splat(node); var st = flag? "" : "none", lab, that = this; $each(node, function(n) { var lab = that.getLabel(n.id); if (lab) { lab.style.display = st; } }); }, /* Method: sequence Iteratively performs an action while refreshing the state of the visualization. Parameters: options - Some sequence options like - _condition_ A function returning a boolean instance in order to stop iterations. - _step_ A function to execute on each step of the iteration. - _onComplete_ A function to execute when the sequence finishes. - _duration_ Duration (in milliseconds) of each step. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST var i = 0; rg.fx.sequence({ condition: function() { return i == 10; }, step: function() { alert(i++); }, onComplete: function() { alert('done!'); } }); (end code) */ sequence: function(options) { var that = this; options = $merge({ condition: $lambda(false), step: $empty, onComplete: $empty, duration: 200 }, options || {}); var interval = setInterval(function() { if(options.condition()) { options.step(); } else { clearInterval(interval); options.onComplete(); } that.viz.refresh(true); }, options.duration); }, /* Method: animate Animates a by interpolating some properties. Parameters: opt - Animation options. This object contains as properties - _modes_ (required) An Array of animation types. Possible values are "linear", "polar", "moebius", "fade:nodes" and "fade:vertex". "linear", "polar" and "moebius" animation options will interpolate "startPos" and "endPos" properties, storing the result in "pos". "fade:nodes" and "fade:vertex" animation options will interpolate and/or "startAlpha" and "endAlpha" properties, storing the result in "alpha". - _duration_ Duration (in milliseconds) of the Animation. - _fps_ Frames per second. - _hideLabels_ hide labels or not during the animation. ...and other , or controller methods. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST rg.fx.animate({ modes: ['linear'], hideLabels: false }); (end code) */ animate: function(opt, versor) { var that = this, viz = this.viz, graph = viz.graph, GUtil = Graph.Util; opt = $merge(viz.controller, opt || {}); if(opt.hideLabels) this.hideLabels(true); this.animation.setOptions($merge(opt, { $animating: false, compute: function(delta) { var vector = versor? versor.scale(-delta) : null; GUtil.eachNode(graph, function(node) { for(var i=0; i. Parameters: opt - _optional_ Plotting options. Example: (start code js) var rg = new RGraph(canvas, config); //can be also Hypertree or ST rg.fx.plot(); (end code) */ plot: function(opt, animating) { var viz = this.viz, aGraph = viz.graph, canvas = viz.canvas, id = viz.root, that = this, ctx = canvas.getCtx(), GUtil = Graph.Util; opt = opt || this.viz.controller; opt.clearCanvas && canvas.clear(); var T = !!aGraph.getNode(id).visited; GUtil.eachNode(aGraph, function(node) { GUtil.eachAdjacency(node, function(adj) { var nodeTo = adj.nodeTo; if(!!nodeTo.visited === T && node.drawn && nodeTo.drawn) { !animating && opt.onBeforePlotLine(adj); ctx.save(); ctx.globalAlpha = Math.min(Math.min(node.alpha, nodeTo.alpha), adj.alpha); that.plotLine(adj, canvas, animating); ctx.restore(); !animating && opt.onAfterPlotLine(adj); } }); ctx.save(); if(node.drawn) { ctx.globalAlpha = node.alpha; !animating && opt.onBeforePlotNode(node); that.plotNode(node, canvas, animating); !animating && opt.onAfterPlotNode(node); } if(!that.labelsHidden && opt.withLabels) { if(node.drawn && ctx.globalAlpha >= 0.95) { that.plotLabel(canvas, node, opt); } else { that.hideLabel(node, false); } } ctx.restore(); node.visited = !T; }); }, /* Method: plotLabel Plots a label for a given node. Parameters: canvas - A instance. node - A . controller - A configuration object. See also , , . */ plotLabel: function(canvas, node, controller) { var id = node.id, tag = this.getLabel(id); if(!tag && !(tag = document.getElementById(id))) { tag = document.createElement('div'); var container = this.getLabelContainer(); container.appendChild(tag); tag.id = id; tag.className = 'node'; tag.style.position = 'absolute'; controller.onCreateLabel(tag, node); this.labels[node.id] = tag; } this.placeLabel(tag, node, controller); }, /* Method: plotNode Plots a . Parameters: node - A . canvas - A element. */ plotNode: function(node, canvas, animating) { var nconfig = this.node, data = node.data; var cond = nconfig.overridable && data; var width = cond && data.$lineWidth || nconfig.lineWidth; var color = cond && data.$color || nconfig.color; var ctx = canvas.getCtx(); ctx.lineWidth = width; ctx.fillStyle = color; ctx.strokeStyle = color; var f = node.data && node.data.$type || nconfig.type; this.nodeTypes[f].call(this, node, canvas, animating); }, /* Method: plotLine Plots a line. Parameters: adj - A . canvas - A instance. */ plotLine: function(adj, canvas, animating) { var econfig = this.edge, data = adj.data; var cond = econfig.overridable && data; var width = cond && data.$lineWidth || econfig.lineWidth; var color = cond && data.$color || econfig.color; var ctx = canvas.getCtx(); ctx.lineWidth = width; ctx.fillStyle = color; ctx.strokeStyle = color; var f = adj.data && adj.data.$type || econfig.type; this.edgeTypes[f].call(this, adj, canvas, animating); }, /* Method: fitsInCanvas Returns _true_ or _false_ if the label for the node is contained in the canvas dom element or not. Parameters: pos - A instance (I'm doing duck typing here so any object with _x_ and _y_ parameters will do). canvas - A instance. Returns: A boolean value specifying if the label is contained in the DOM element or not. */ fitsInCanvas: function(pos, canvas) { var size = canvas.getSize(); if(pos.x >= size.width || pos.x < 0 || pos.y >= size.height || pos.y < 0) return false; return true; } }; /* * File: Loader.js * * Provides methods for loading JSON data. * * Description: * * Provides the method implemented by the main visualization classes to load JSON Trees and Graphs. * * Implemented By: * * , , and classes * */ /* Object: Loader Provides static methods for loading JSON data. Description: This object is extended by the main Visualization classes (, , and ) in order to implement the method. The method accepts JSON Trees and Graph objects. This will be explained in detail in the method definition. */ var Loader = { construct: function(json) { var isGraph = ($type(json) == 'array'); var ans = new Graph(this.graphOptions); if(!isGraph) //make tree (function (ans, json) { ans.addNode(json); for(var i=0, ch = json.children; i and transition classes. * */ /* Object: Trans An object containing multiple type of transformations. Based on: Easing and Transition animation methods are based in the MooTools Framework . Copyright (c) 2006-2009 Valerio Proietti, . MIT license . Used by: , and classes. Description: This object is used for specifying different animation transitions in the , and classes. There are many different type of animation transitions. linear: Displays a linear transition >Trans.linear (see Linear.png) Quad: Displays a Quadratic transition. >Trans.Quad.easeIn >Trans.Quad.easeOut >Trans.Quad.easeInOut (see Quad.png) Cubic: Displays a Cubic transition. >Trans.Cubic.easeIn >Trans.Cubic.easeOut >Trans.Cubic.easeInOut (see Cubic.png) Quart: Displays a Quartetic transition. >Trans.Quart.easeIn >Trans.Quart.easeOut >Trans.Quart.easeInOut (see Quart.png) Quint: Displays a Quintic transition. >Trans.Quint.easeIn >Trans.Quint.easeOut >Trans.Quint.easeInOut (see Quint.png) Expo: Displays an Exponential transition. >Trans.Expo.easeIn >Trans.Expo.easeOut >Trans.Expo.easeInOut (see Expo.png) Circ: Displays a Circular transition. >Trans.Circ.easeIn >Trans.Circ.easeOut >Trans.Circ.easeInOut (see Circ.png) Sine: Displays a Sineousidal transition. >Trans.Sine.easeIn >Trans.Sine.easeOut >Trans.Sine.easeInOut (see Sine.png) Back: >Trans.Back.easeIn >Trans.Back.easeOut >Trans.Back.easeInOut (see Back.png) Bounce: Bouncy transition. >Trans.Bounce.easeIn >Trans.Bounce.easeOut >Trans.Bounce.easeInOut (see Bounce.png) Elastic: Elastic curve. >Trans.Elastic.easeIn >Trans.Elastic.easeOut >Trans.Elastic.easeInOut (see Elastic.png) */ this.Trans = { linear: function(p) { return p; } }; (function() { var makeTrans = function(transition, params){ params = $splat(params); return $extend(transition, { easeIn: function(pos){ return transition(pos, params); }, easeOut: function(pos){ return 1 - transition(1 - pos, params); }, easeInOut: function(pos){ return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2; } }); }; var transitions = { Pow: function(p, x){ return Math.pow(p, x[0] || 6); }, Expo: function(p){ return Math.pow(2, 8 * (p - 1)); }, Circ: function(p){ return 1 - Math.sin(Math.acos(p)); }, Sine: function(p){ return 1 - Math.sin((1 - p) * Math.PI / 2); }, Back: function(p, x){ x = x[0] || 1.618; return Math.pow(p, 2) * ((x + 1) * p - x); }, Bounce: function(p){ var value; for (var a = 0, b = 1; 1; a += b, b /= 2){ if (p >= (7 - 4 * a) / 11){ value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2); break; } } return value; }, Elastic: function(p, x){ return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3); } }; $each(transitions, function(val, key) { Trans[key] = makeTrans(val); }); $each(['Quad', 'Cubic', 'Quart', 'Quint'], function(elem, i) { Trans[elem] = makeTrans(function(p){ return Math.pow(p, [i + 2]); }); }); })(); /* Class: Animation A Class that can perform animations for generic objects. If you are looking for animation transitions please take a look at the object. Used by: Based on: The Animation class is based in the MooTools Framework . Copyright (c) 2006-2009 Valerio Proietti, . MIT license . */ var Animation = new Class({ initalize: function(options) { this.setOptions(options); }, setOptions: function(options) { var opt = { duration: 2500, fps: 40, transition: Trans.Quart.easeInOut, compute: $empty, complete: $empty }; this.opt = $merge(opt, options || {}); return this; }, getTime: function() { return $time(); }, step: function(){ var time = this.getTime(), opt = this.opt; if (time < this.time + opt.duration){ var delta = opt.transition((time - this.time) / opt.duration); opt.compute(delta); } else { this.timer = clearInterval(this.timer); opt.compute(1); opt.complete(); } }, start: function(){ this.time = 0; this.startTimer(); return this; }, startTimer: function(){ var that = this, opt = this.opt; if (this.timer) return false; this.time = this.getTime() - this.time; this.timer = setInterval((function () { that.step(); }), Math.round(1000 / opt.fps)); return true; } }); /* * File: Spacetree.js * * Implements the class and other derived classes. * * Description: * * The main idea of the spacetree algorithm is to take the most common tree layout, and to expand nodes that are "context-related" .i.e lying on the path between the root node and a selected node. Useful animations to contract and expand nodes are also included. * * Inspired by: * * SpaceTree: Supporting Exploration in Large Node Link Tree, Design Evolution and Empirical Evaluation (Catherine Plaisant, Jesse Grosjean, Benjamin B. Bederson) * * * * Disclaimer: * * This visualization was built from scratch, taking only the paper as inspiration, and only shares some features with the Spacetree. * */ /* Class: ST The main ST class Extends: Parameters: canvas - A Class config - A configuration/controller object. Configuration: The configuration object can have the following properties (all properties are optional and have a default value) *General* - _levelsToShow_ Depth of the plotted tree. The plotted tree will be pruned in order to fit the specified depth if constrained=true. Default's 2. - _constrained_ If true, the algorithm will try to plot only the part of the tree that fits the Canvas. - _subtreeOffset_ Separation offset between subtrees. Default's 8. - _siblingOffset_ Separation offset between siblings. Default's 5. - _levelDistance_ Distance between levels. Default's 30. - _orientation_ Sets the orientation layout. Implemented orientations are _left_ (the root node will be placed on the left side of the screen), _top_ (the root node will be placed on top of the screen), _bottom_ and _right_. Default's "left". - _align_ Whether the tree alignment is left, center or right. - _indent_ Used when alignment is left or right and shows an indentation between parent and children. Default's 10. - _withLabels_ Whether the visualization should use/create labels or not. Default's *true*. *Node* Customize the visualization nodes' shape, color, and other style properties. - _Node_ This object has as properties - _overridable_ Determine whether or not nodes properties can be overriden by a particular node. Default's false. If given a JSON tree or graph, a node _data_ property contains properties which are the same as defined here but prefixed with a dollar sign (i.e $), the node properties will override the global node properties. - _type_ Node type (shape). Possible options are "none", "square", "rectangle", "ellipse" and "circle". Default's "rectangle". - _color_ Node color. Default's '#ccb'. - _lineWidth_ Line width. If nodes aren't drawn with strokes then this property won't be of any use. Default's 1. - _height_ Node height. Used for plotting rectangular nodes. _Width_ and _height_ properties are also used as bounding box for nodes of different shapes. This means that for all shapes you'd have to make sure that the node's shape is contained in the bounding box defined by _width_ and _height_ parameters. Default's 20. - _width_ Node width. Used for plotting rectangular nodes and for calculating a node's bounding box. Default's 90. - _dim_ An extra parameter used by other complex shapes such as square and circle to determine the shape's diameter. Please notice that even if these complex shapes (square, circle) only use _dim_ for calculating it's diameter property, the complex shape must be contained in the bounding box calculated with the _width_ and _height_ parameters. Default's 15. - _align_ Defines a node's alignment. Possible values are "center", "left", "right". Default's "center". *Edge* Customize the visualization edges' shape, color, and other style properties. - _Edge_ This object has as properties - _overridable_ Determine whether or not edges properties can be overriden by a particular edge object. Default's false. If given a JSON _complex_ graph (defined in ), an adjacency _data_ property contains properties which are the same as defined here but prefixed with a dollar sign (i.e $), the adjacency properties will override the global edge properties. - _type_ Edge type (shape). Possible options are "none", "line", "quadratic:begin", "quadratic:end", "bezier" and "arrow". Default's "line". - _color_ Edge color. Default's '#ccb'. - _lineWidth_ Line width. If edges aren't drawn with strokes then this property won't be of any use. Default's 1. - _dim_ An extra parameter used by other complex shapes such as quadratic, arrow and bezier to determine the shape's diameter. *Animations* - _duration_ Duration of the animation in milliseconds. Default's 700. - _fps_ Frames per second. Default's 25. - _transition_ One of the transitions defined in the class. Default's Quart.easeInOut. - _clearCanvas_ Whether to clear canvas on each animation frame or not. Default's true. *Controller options* You can also implement controller functions inside the configuration object. This functions are - _onBeforeCompute(node)_ This method is called right before performing all computation and animations to the JIT visualization. - _onAfterCompute()_ This method is triggered right after all animations or computations for the JIT visualizations ended. - _onCreateLabel(domElement, node)_ This method receives the label dom element as first parameter, and the corresponding as second parameter. This method will only be called on label creation. Note that a is a node from the input tree/graph you provided to the visualization. If you want to know more about what kind of JSON tree/graph format is used to feed the visualizations, you can take a look at . This method proves useful when adding events to the labels used by the JIT. - _onPlaceLabel(domElement, node)_ This method receives the label dom element as first parameter and the corresponding as second parameter. This method is called each time a label has been placed on the visualization, and thus it allows you to update the labels properties, such as size or position. Note that onPlaceLabel will be triggered after updating the labels positions. That means that, for example, the left and top css properties are already updated to match the nodes positions. - _onBeforePlotNode(node)_ This method is triggered right before plotting a given node. The _node_ parameter is the to be plotted. This method is useful for changing a node style right before plotting it. - _onAfterPlotNode(node)_ This method is triggered right after plotting a given node. The _node_ parameter is the plotted. - _onBeforePlotLine(adj)_ This method is triggered right before plotting an edge. The _adj_ parameter is a object. This method is useful for adding some styles to a particular edge before being plotted. - _onAfterPlotLine(adj)_ This method is triggered right after plotting an edge. The _adj_ parameter is the plotted. - _request(nodeId, level, onComplete)_ This method is used for buffering information into the visualization. When clicking on an empty node, the visualization will make a request for this node's subtree, specifying a given level for this subtree. Once this request is completed the _onComplete_ object must be called with the given result. Example: Here goes a complete example. In most cases you won't be forced to implement all properties and methods. In fact, all configuration properties have the default value assigned. I won't be instanciating a class here. If you want to know more about instanciating a class please take a look at the class documentation. (start code js) var st = new ST(canvas, { orientation: "left", levelsToShow: 2, subtreeOffset: 8, siblingOffset: 5, levelDistance: 30, withLabels: true, align: "center", multitree: false, indent: 10, Node: { overridable: false, type: 'rectangle', color: '#ccb', lineWidth: 1, height: 20, width: 90, dim: 15, align: "center" }, Edge: { overridable: false, type: 'line', color: '#ccc', dim: 15, lineWidth: 1 }, duration: 700, fps: 25, transition: Trans.Quart.easeInOut, clearCanvas: true, onBeforeCompute: function(node) { //do something onBeforeCompute }, onAfterCompute: function () { //do something onAfterCompute }, onCreateLabel: function(domElement, node) { //do something onCreateLabel }, onPlaceLabel: function(domElement, node) { //do something onPlaceLabel }, onBeforePlotNode:function(node) { //do something onBeforePlotNode }, onAfterPlotNode: function(node) { //do something onAfterPlotNode }, onBeforePlotLine:function(adj) { //do something onBeforePlotLine }, onAfterPlotLine: function(adj) { //do something onAfterPlotLine }, request: false }); (end code) Instance Properties: - _graph_ Access a instance. - _op_ Access a instance. - _fx_ Access a instance. */ (function () { //Layout functions var slice = Array.prototype.slice; /* Calculates the max width and height nodes for a tree level */ function getBoundaries(graph, config, level, orn) { var dim = config.Node, GUtil = Graph.Util; var multitree = config.multitree; if(dim.overridable) { var w = -1, h = -1; GUtil.eachNode(graph, function(n) { if(n._depth == level && (!multitree || ('$orn' in n.data) && n.data.$orn == orn)) { var dw = n.data.$width || dim.width; var dh = n.data.$height || dim.height; w = (w < dw)? dw : w; h = (h < dh)? dh : h; } }); return { 'width': w < 0? dim.width : w, 'height': h < 0? dim.height : h }; } else { return dim; } }; function movetree(node, prop, val, orn) { var p = (orn == "left" || orn == "right")? "y" : "x"; node[prop][p] += val; }; function moveextent(extent, val) { var ans = []; $each(extent, function(elem) { elem = slice.call(elem); elem[0] += val; elem[1] += val; ans.push(elem); }); return ans; }; function merge(ps, qs) { if(ps.length == 0) return qs; if(qs.length == 0) return ps; var p = ps.shift(), q = qs.shift(); return [[p[0], q[1]]].concat(merge(ps, qs)); }; function mergelist(ls, def) { def = def || []; if(ls.length == 0) return def; var ps = ls.pop(); return mergelist(ls, merge(ps, def)); }; function fit(ext1, ext2, subtreeOffset, siblingOffset, i) { if(ext1.length <= i || ext2.length <= i) return 0; var p = ext1[i][1], q = ext2[i][0]; return Math.max(fit(ext1, ext2, subtreeOffset, siblingOffset, ++i) + subtreeOffset, p - q + siblingOffset); }; function fitlistl(es, subtreeOffset, siblingOffset) { function $fitlistl(acc, es, i) { if(es.length <= i) return []; var e = es[i], ans = fit(acc, e, subtreeOffset, siblingOffset, 0); return [ans].concat($fitlistl(merge(acc, moveextent(e, ans)), es, ++i)); }; return $fitlistl([], es, 0); }; function fitlistr(es, subtreeOffset, siblingOffset) { function $fitlistr(acc, es, i) { if(es.length <= i) return []; var e = es[i], ans = -fit(e, acc, subtreeOffset, siblingOffset, 0); return [ans].concat($fitlistr(merge(moveextent(e, ans), acc), es, ++i)); }; es = slice.call(es); var ans = $fitlistr([], es.reverse(), 0); return ans.reverse(); }; function fitlist(es, subtreeOffset, siblingOffset, align) { var esl = fitlistl(es, subtreeOffset, siblingOffset), esr = fitlistr(es, subtreeOffset, siblingOffset); if(align == "left") esr = esl; else if(align == "right") esl = esr; for(var i = 0, ans = []; i < esl.length; i++) { ans[i] = (esl[i] + esr[i]) / 2; } return ans; }; function design(graph, node, prop, config, orn) { var multitree = config.multitree; var auxp = ['x', 'y'], auxs = ['width', 'height']; var ind = +(orn == "left" || orn == "right"); var p = auxp[ind], notp = auxp[1 - ind]; var cnode = config.Node; var s = auxs[ind], nots = auxs[1 - ind]; var siblingOffset = config.siblingOffset; var subtreeOffset = config.subtreeOffset; var align = config.align; var GUtil = Graph.Util; function $design(node, maxsize, acum) { var sval = (cnode.overridable && node.data["$" + s]) || cnode[s]; var notsval = maxsize || ((cnode.overridable && node.data["$" + nots]) || cnode[nots]); var trees = [], extents = [], chmaxsize = false; var chacum = notsval + config.levelDistance; GUtil.eachSubnode(node, function(n) { if(n.exist && (!multitree || ('$orn' in n.data) && n.data.$orn == orn)) { if(!chmaxsize) chmaxsize = getBoundaries(graph, config, n._depth, orn); var s = $design(n, chmaxsize[nots], acum + chacum); trees.push(s.tree); extents.push(s.extent); } }); var positions = fitlist(extents, subtreeOffset, siblingOffset, align); for(var i=0, ptrees = [], pextents = []; i < trees.length; i++) { movetree(trees[i], prop, positions[i], orn); pextents.push(moveextent(extents[i], positions[i])); } var resultextent = [[-sval/2, sval/2]].concat(mergelist(pextents)); node[prop][p] = 0; if (orn == "top" || orn == "left") { node[prop][notp] = acum; } else { node[prop][notp] = -acum; } return { tree: node, extent: resultextent }; }; $design(node, false, 0); }; this.ST= (function() { //Define some private methods first... //Nodes in path var nodesInPath = []; //Nodes to contract function getNodesToHide(node) { node = node || this.clickedNode; var Geom = this.geom, GUtil = Graph.Util; var graph = this.graph; var canvas = this.canvas; var level = node._depth, nodeArray = []; GUtil.eachNode(graph, function(n) { if(n.exist && !n.selected) { if(GUtil.isDescendantOf(n, node.id)) { if(n._depth <= level) nodeArray.push(n); } else { nodeArray.push(n); } } }); var leafLevel = Geom.getRightLevelToShow(node, canvas); GUtil.eachLevel(node, leafLevel, leafLevel, function(n) { if(n.exist && !n.selected) nodeArray.push(n); }); for (var i = 0; i < nodesInPath.length; i++) { var n = this.graph.getNode(nodesInPath[i]); if(!GUtil.isDescendantOf(n, node.id)) { nodeArray.push(n); } } return nodeArray; }; //Nodes to expand function getNodesToShow(node) { var nodeArray= [], GUtil = Graph.Util, config = this.config; node = node || this.clickedNode; GUtil.eachLevel(this.clickedNode, 0, config.levelsToShow, function(n) { if(config.multitree && !('$orn' in n.data) && GUtil.anySubnode(n, function(ch){ return ch.exist && !ch.drawn; })) { nodeArray.push(n); } else if(n.drawn && !GUtil.anySubnode(n, "drawn")) { nodeArray.push(n); } }); return nodeArray; }; //Now define the actual class. return new Class({ Implements: Loader, initialize: function(canvas, controller) { var innerController = { onBeforeCompute: $empty, onAfterCompute: $empty, onCreateLabel: $empty, onPlaceLabel: $empty, onComplete: $empty, onBeforePlotNode:$empty, onAfterPlotNode: $empty, onBeforePlotLine:$empty, onAfterPlotLine: $empty, request: false }; var config= { orientation: "left", labelContainer: canvas.id + '-label', levelsToShow: 2, subtreeOffset: 8, siblingOffset: 5, levelDistance: 30, withLabels: true, clearCanvas: true, align: "center", indent:10, multitree: false, constrained: true, Node: { overridable: false, type: 'rectangle', color: '#ccb', lineWidth: 1, height: 20, width: 90, dim: 15, align: "center" }, Edge: { overridable: false, type: 'line', color: '#ccc', dim: 15, lineWidth: 1 }, duration: 700, fps: 25, transition: Trans.Quart.easeInOut }; this.controller = this.config = $merge(config, innerController, controller); this.canvas = canvas; this.graphOptions = { 'complex': true }; this.graph = new Graph(this.graphOptions); this.fx = new ST.Plot(this); this.op = new ST.Op(this); this.group = new ST.Group(this); this.geom = new ST.Geom(this); this.clickedNode= null; }, /* Method: plot Plots the tree. Usually this method is called right after computing nodes' positions. */ plot: function() { this.fx.plot(this.controller); }, /* Method: switchPosition Switches the tree orientation. Parameters: pos - The new tree orientation. Possible values are "top", "left", "right" and "bottom". method - Set this to "animate" if you want to animate the tree when switching its position. You can also set this parameter to "replot" to just replot the subtree. onComplete - _optional_ This callback is called once the "switching" animation is complete. Example: (start code js) st.switchPosition("right", "animate", { onComplete: function() { alert('completed!'); } }); (end code) */ switchPosition: function(pos, method, onComplete) { var Geom = this.geom, Plot = this.fx, that = this; if(!Plot.busy) { Plot.busy = true; this.contract({ onComplete: function() { Geom.switchOrientation(pos); that.compute('endPos', false); Plot.busy = false; if(method == 'animate') { that.onClick(that.clickedNode.id, onComplete); } else if(method == 'replot') { that.select(that.clickedNode.id, onComplete); } } }, pos); } }, /* Method: switchAlignment Switches the tree alignment. Parameters: align - The new tree alignment. Possible values are "left", "center" and "right". method - Set this to "animate" if you want to animate the tree after aligning its position. You can also set this parameter to "replot" to just replot the subtree. onComplete - _optional_ This callback is called once the "switching" animation is complete. Example: (start code js) st.switchAlignment("right", "animate", { onComplete: function() { alert('completed!'); } }); (end code) */ switchAlignment: function(align, method, onComplete) { this.config.align = align; if(method == 'animate') { this.select(this.clickedNode.id, onComplete); } else if(method == 'replot') { this.onClick(this.clickedNode.id, onComplete); } }, /* Method: addNodeInPath Adds a node to the current path as selected node. This node will be visible (as in non-collapsed) at all times. Parameters: id - A id. Example: (start code js) st.addNodeInPath("somenodeid"); (end code) */ addNodeInPath: function(id) { nodesInPath.push(id); this.select((this.clickedNode && this.clickedNode.id) || this.root); }, /* Method: clearNodesInPath Removes all nodes tagged as selected by the method. See also: Example: (start code js) st.clearNodesInPath(); (end code) */ clearNodesInPath: function(id) { nodesInPath.length = 0; this.select((this.clickedNode && this.clickedNode.id) || this.root); }, /* Method: refresh Computes nodes' positions and replots the tree. */ refresh: function() { this.reposition(); this.select((this.clickedNode && this.clickedNode.id) || this.root); }, reposition: function() { Graph.Util.computeLevels(this.graph, this.root, 0, "ignore"); this.geom.setRightLevelToShow(this.clickedNode, this.canvas); Graph.Util.eachNode(this.graph, function(n) { if(n.exist) n.drawn = true; }); this.compute('endPos'); }, /* Method: compute Computes nodes' positions. */ compute: function (property, computeLevels) { var prop = property || 'startPos'; var node = this.graph.getNode(this.root); $extend(node, { 'drawn':true, 'exist':true, 'selected':true }); if(!!computeLevels || !("_depth" in node)) Graph.Util.computeLevels(this.graph, this.root, 0, "ignore"); this.computePositions(node, prop); }, computePositions: function(node, prop) { var config = this.config; var multitree = config.multitree; var align = config.align; var indent = align !== 'center' && config.indent; var orn = config.orientation; var orns = multitree? ['top', 'right', 'bottom', 'left'] : [orn]; var that = this; $each(orns, function(orn) { //calculate layout design(that.graph, node, prop, that.config, orn); var i = ['x', 'y'][+(orn == "left" || orn == "right")]; //absolutize (function red(node) { Graph.Util.eachSubnode(node, function(n) { if(n.exist && (!multitree || ('$orn' in n.data) && n.data.$orn == orn)) { n[prop][i] += node[prop][i]; if(indent) { n[prop][i] += align == 'left'? indent : -indent; } red(n); } }); })(node); }); }, requestNodes: function(node, onComplete) { var handler = $merge(this.controller, onComplete), lev = this.config.levelsToShow, GUtil = Graph.Util; if(handler.request) { var leaves = [], d = node._depth; GUtil.eachLevel(node, 0, lev, function(n) { if(n.drawn && !GUtil.anySubnode(n)) { leaves.push(n); n._level = lev - (n._depth - d); } }); this.group.requestNodes(leaves, handler); } else handler.onComplete(); }, contract: function(onComplete, switched) { var orn = this.config.orientation; var Geom = this.geom, Group = this.group; if(switched) Geom.switchOrientation(switched); var nodes = getNodesToHide.call(this); if(switched) Geom.switchOrientation(orn); Group.contract(nodes, $merge(this.controller, onComplete)); }, move: function(node, onComplete) { this.compute('endPos', false); var move = onComplete.Move, offset = { 'x': move.offsetX, 'y': move.offsetY }; if(move.enable) { this.geom.translate(node.endPos.add(offset).$scale(-1), "endPos"); } this.fx.animate($merge(this.controller, { modes: ['linear'] }, onComplete)); }, expand: function (node, onComplete) { var nodeArray = getNodesToShow.call(this, node); this.group.expand(nodeArray, $merge(this.controller, onComplete)); }, selectPath: function(node) { var GUtil = Graph.Util, that = this; GUtil.eachNode(this.graph, function(n) { n.selected = false; }); function path(node) { if(node == null || node.selected) return; node.selected = true; $each(that.group.getSiblings([node])[node.id], function(n) { n.exist = true; n.drawn = true; }); var parents = GUtil.getParents(node); parents = (parents.length > 0)? parents[0] : null; path(parents); }; for(var i=0, ns = [node.id].concat(nodesInPath); i < ns.length; i++) { path(this.graph.getNode(ns[i])); } }, /* Method: setRoot Switches the current root node. Parameters: id - The id of the node to be set as root. method - Set this to "animate" if you want to animate the tree after adding the subtree. You can also set this parameter to "replot" to just replot the subtree. onComplete - _optional_ An action to perform after the animation (if any). Example: (start code js) st.setRoot('my_node_id', 'animate', { onComplete: function() { alert('complete!'); } }); (end code) */ setRoot: function(id, method, onComplete) { var that = this, canvas = this.canvas; var rootNode = this.graph.getNode(this.root); var clickedNode = this.graph.getNode(id); function $setRoot() { if(this.config.multitree && clickedNode.data.$orn) { var orn = clickedNode.data.$orn; var opp = { 'left': 'right', 'right': 'left', 'top': 'bottom', 'bottom': 'top' }[orn]; rootNode.data.$orn = opp; (function tag(rootNode) { Graph.Util.eachSubnode(rootNode, function(n) { if(n.id != id) { n.data.$orn = opp; tag(n); } }); })(rootNode); delete clickedNode.data.$orn; } this.root = id; this.clickedNode = clickedNode; Graph.Util.computeLevels(this.graph, this.root, 0, "ignore"); } //delete previous orientations (if any) delete rootNode.data.$orns; if(method == 'animate') { this.onClick(id, { onBeforeMove: function() { $setRoot.call(that); that.selectPath(clickedNode); } }); } else if(method == 'replot') { $setRoot.call(this); this.select(this.root); } }, /* Method: addSubtree Adds a subtree, performing optionally an animation. Parameters: subtree - A JSON Tree object. See also . method - Set this to "animate" if you want to animate the tree after adding the subtree. You can also set this parameter to "replot" to just replot the subtree. onComplete - _optional_ An action to perform after the animation (if any). Example: (start code js) st.addSubtree(json, 'animate', { onComplete: function() { alert('complete!'); } }); (end code) */ addSubtree: function(subtree, method, onComplete) { if(method == 'replot') { this.op.sum(subtree, $extend({ type: 'replot' }, onComplete || {})); } else if (method == 'animate') { this.op.sum(subtree, $extend({ type: 'fade:seq' }, onComplete || {})); } }, /* Method: removeSubtree Removes a subtree, performing optionally an animation. Parameters: id - The _id_ of the subtree to be removed. removeRoot - Remove the root of the subtree or only its subnodes. method - Set this to "animate" if you want to animate the tree after removing the subtree. You can also set this parameter to "replot" to just replot the subtree. onComplete - _optional_ An action to perform after the animation (if any). Example: (start code js) st.removeSubtree('idOfSubtreeToBeRemoved', false, 'animate', { onComplete: function() { alert('complete!'); } }); (end code) */ removeSubtree: function(id, removeRoot, method, onComplete) { var node = this.graph.getNode(id), subids = []; Graph.Util.eachLevel(node, +!removeRoot, false, function(n) { subids.push(n.id); }); if(method == 'replot') { this.op.removeNode(subids, $extend({ type: 'replot' }, onComplete || {})); } else if (method == 'animate') { this.op.removeNode(subids, $extend({ type: 'fade:seq'}, onComplete || {})); } }, /* Method: select Selects a sepecific node in the Spacetree without performing an animation. Useful when selecting nodes which are currently hidden or deep inside the tree. Parameters: id - The id of the node to select. onComplete - _optional_ onComplete callback. Example: (start code js) st.select('mynodeid', { onComplete: function() { alert('complete!'); } }); (end code) */ select: function(id, onComplete) { var group = this.group, geom = this.geom; var node= this.graph.getNode(id), canvas = this.canvas; var root = this.graph.getNode(this.root); var complete = $merge(this.controller, onComplete); var that = this; complete.onBeforeCompute(node); this.selectPath(node); this.clickedNode= node; this.requestNodes(node, { onComplete: function(){ group.hide(group.prepare(getNodesToHide.call(that)), complete); geom.setRightLevelToShow(node, canvas); that.compute("pos"); Graph.Util.eachNode(that.graph, function(n) { var pos = n.pos.getc(true); n.startPos.setc(pos.x, pos.y); n.endPos.setc(pos.x, pos.y); n.visited = false; }); that.geom.translate(node.endPos.scale(-1), ["pos", "startPos", "endPos"]); group.show(getNodesToShow.call(that)); that.plot(); complete.onAfterCompute(that.clickedNode); complete.onComplete(); } }); }, /* Method: onClick This method is called when clicking on a tree node. It mainly performs all calculations and the animation of contracting, translating and expanding pertinent nodes. Parameters: id - A node id. options - A group of options and callbacks such as - _onComplete_ an object callback called when the animation finishes. - _Move_ an object that has as properties _offsetX_ or _offsetY_ for adding some offset position to the centered node. Example: (start code js) st.onClick('mynodeid', { Move: { enable: true, offsetX: 30, offsetY: 5 }, onComplete: function() { alert('yay!'); } }); (end code) */ onClick: function (id, options) { var canvas = this.canvas, that = this, Fx = this.fx, Util = Graph.Util, Geom = this.geom; var innerController = { Move: { enable: true, offsetX: 0, offsetY: 0 }, onBeforeRequest: $empty, onBeforeContract: $empty, onBeforeMove: $empty, onBeforeExpand: $empty }; var complete = $merge(this.controller, innerController, options); if(!this.busy) { this.busy= true; var node= this.graph.getNode(id); this.selectPath(node, this.clickedNode); this.clickedNode= node; complete.onBeforeCompute(node); complete.onBeforeRequest(node); this.requestNodes(node, { onComplete: function() { complete.onBeforeContract(node); that.contract({ onComplete: function() { Geom.setRightLevelToShow(node, canvas); complete.onBeforeMove(node); that.move(node, { Move: complete.Move, onComplete: function() { complete.onBeforeExpand(node); that.expand(node, { onComplete: function() { that.busy = false; complete.onAfterCompute(id); complete.onComplete(); } }); //expand } }); //move } });//contract } });//request } } }); })(); /* Class: ST.Op Performs advanced operations on trees and graphs. Extends: All methods Access: This instance can be accessed with the _op_ parameter of the st instance created. Example: (start code js) var st = new ST(canvas, config); st.op.morph //or can also call any other method (end code) */ ST.Op = new Class({ Implements: Graph.Op, initialize: function(viz) { this.viz = viz; } }); /* Performs operations on group of nodes. */ ST.Group = new Class({ initialize: function(viz) { this.viz = viz; this.canvas = viz.canvas; this.config = viz.config; this.animation = new Animation; this.nodes = null; }, /* Calls the request method on the controller to request a subtree for each node. */ requestNodes: function(nodes, controller) { var counter = 0, len = nodes.length, nodeSelected = {}; var complete = function() { controller.onComplete(); }; var viz = this.viz; if(len == 0) complete(); for(var i=0; i= b._depth); }); for(var i=0; i 0 && n.drawn) { n.drawn = false; nds[node.id].push(n); } else if((!root || !orns) && n.drawn) { n.drawn = false; nds[node.id].push(n); } }); node.drawn = true; } //plot the whole (non-scaled) tree if(nodes.length > 0) viz.fx.plot(); //show nodes that were previously hidden for(i in nds) { $each(nds[i], function(n) { n.drawn = true; }); } //plot each scaled subtree for(i=0; i method (end code) */ ST.Geom = new Class({ initialize: function(viz) { this.viz = viz; this.config = viz.config; this.node = viz.config.Node; this.edge = viz.config.Edge; }, /* Method: translate Applies a translation to the tree. Parameters: pos - A number specifying translation vector. prop - A position property ('pos', 'startPos' or 'endPos'). Example: (start code js) st.geom.translate(new Complex(300, 100), 'endPos'); (end code) */ translate: function(pos, prop) { prop = $splat(prop); Graph.Util.eachNode(this.viz.graph, function(elem) { $each(prop, function(p) { elem[p].$add(pos); }); }); }, /* Changes the tree current orientation to the one specified. You should usually use instead. */ switchOrientation: function(orn) { this.config.orientation = orn; }, /* Makes a value dispatch according to the current layout Works like a CSS property, either _top-right-bottom-left_ or _top|bottom - left|right_. */ dispatch: function() { //TODO(nico) should store Array.prototype.slice.call somewhere. var args = Array.prototype.slice.call(arguments); var s = args.shift(), len = args.length; var val = function(a) { return typeof a == 'function'? a() : a; }; if(len == 2) { return (s == "top" || s == "bottom")? val(args[0]) : val(args[1]); } else if(len == 4) { switch(s) { case "top": return val(args[0]); case "right": return val(args[1]); case "bottom": return val(args[2]); case "left": return val(args[3]); } } return undefined; }, /* Returns label height or with, depending on the tree current orientation. */ getSize: function(n, invert) { var node = this.node, data = n.data, config = this.config; var cond = node.overridable, siblingOffset = config.siblingOffset; var s = (this.config.multitree && ('$orn' in n.data) && n.data.$orn) || this.config.orientation; var w = (cond && data.$width || node.width) + siblingOffset; var h = (cond && data.$height || node.height) + siblingOffset; if(!invert) return this.dispatch(s, h, w); else return this.dispatch(s, w, h); }, /* Calculates a subtree base size. This is an utility function used by _getBaseSize_ */ getTreeBaseSize: function(node, level, leaf) { var size = this.getSize(node, true), baseHeight = 0, that = this; if(leaf(level, node)) return size; if(level === 0) return 0; Graph.Util.eachSubnode(node, function(elem) { baseHeight += that.getTreeBaseSize(elem, level -1, leaf); }); return (size > baseHeight? size : baseHeight) + this.config.subtreeOffset; }, /* Method: getEdge Returns a Complex instance with the begin or end position of the edge to be plotted. Parameters: node - A that is connected to this edge. type - Returns the begin or end edge position. Possible values are 'begin' or 'end'. Returns: A number specifying the begin or end position. */ getEdge: function(node, type, s) { var $C = function(a, b) { return function(){ return node.pos.add(new Complex(a, b)); }; }; var dim = this.node; var cond = this.node.overridable, data = node.data; var w = cond && data.$width || dim.width; var h = cond && data.$height || dim.height; if(type == 'begin') { if(dim.align == "center") { return this.dispatch(s, $C(0, h/2), $C(-w/2, 0), $C(0, -h/2),$C(w/2, 0)); } else if(dim.align == "left") { return this.dispatch(s, $C(0, h), $C(0, 0), $C(0, 0), $C(w, 0)); } else if(dim.align == "right") { return this.dispatch(s, $C(0, 0), $C(-w, 0), $C(0, -h),$C(0, 0)); } else throw "align: not implemented"; } else if(type == 'end') { if(dim.align == "center") { return this.dispatch(s, $C(0, -h/2), $C(w/2, 0), $C(0, h/2), $C(-w/2, 0)); } else if(dim.align == "left") { return this.dispatch(s, $C(0, 0), $C(w, 0), $C(0, h), $C(0, 0)); } else if(dim.align == "right") { return this.dispatch(s, $C(0, -h),$C(0, 0), $C(0, 0), $C(-w, 0)); } else throw "align: not implemented"; } }, /* Adjusts the tree position due to canvas scaling or translation. */ getScaledTreePosition: function(node, scale) { var dim = this.node; var cond = this.node.overridable, data = node.data; var w = (cond && data.$width || dim.width); var h = (cond && data.$height || dim.height); var s = (this.config.multitree && ('$orn' in node.data) && node.data.$orn) || this.config.orientation; var $C = function(a, b) { return function(){ return node.pos.add(new Complex(a, b)).$scale(1 - scale); }; }; if(dim.align == "left") { return this.dispatch(s, $C(0, h), $C(0, 0), $C(0, 0), $C(w, 0)); } else if(dim.align == "center") { return this.dispatch(s, $C(0, h / 2), $C(-w / 2, 0), $C(0, -h / 2),$C(w / 2, 0)); } else if(dim.align == "right") { return this.dispatch(s, $C(0, 0), $C(-w, 0), $C(0, -h),$C(0, 0)); } else throw "align: not implemented"; }, /* Method: treeFitsInCanvas Returns a Boolean if the current subtree fits in canvas. Parameters: node - A which is the current root of the subtree. canvas - The object. level - The depth of the subtree to be considered. */ treeFitsInCanvas: function(node, canvas, level) { var csize = canvas.getSize(node); var s = (this.config.multitree && ('$orn' in node.data) && node.data.$orn) || this.config.orientation; var size = this.dispatch(s, csize.width, csize.height); var baseSize = this.getTreeBaseSize(node, level, function(level, node) { return level === 0 || !Graph.Util.anySubnode(node); }); return (baseSize < size); }, /* Hides levels of the tree until it properly fits in canvas. */ setRightLevelToShow: function(node, canvas) { var level = this.getRightLevelToShow(node, canvas), fx = this.viz.fx; Graph.Util.eachLevel(node, 0, this.config.levelsToShow, function(n) { var d = n._depth - node._depth; if(d > level) { n.drawn = false; n.exist = false; fx.hideLabel(n, false); } else { n.exist = true; } }); node.drawn= true; }, /* Returns the right level to show for the current tree in order to fit in canvas. */ getRightLevelToShow: function(node, canvas) { var config = this.config; var level = config.levelsToShow; var constrained = config.constrained; if(!constrained) return level; while(!this.treeFitsInCanvas(node, canvas, level) && level > 1) { level-- ; } return level; } }); /* Object: ST.Plot Performs plotting operations. Extends: All methods Access: This instance can be accessed with the _fx_ parameter of the st instance created. Example: (start code js) var st = new ST(canvas, config); st.fx.placeLabel //or can also call any other method (end code) */ ST.Plot = new Class({ Implements: Graph.Plot, initialize: function(viz) { this.viz = viz; this.config = viz.config; this.node = this.config.Node; this.edge = this.config.Edge; this.animation = new Animation; this.nodeTypes = new ST.Plot.NodeTypes; this.edgeTypes = new ST.Plot.EdgeTypes; }, /* Plots a subtree from the spacetree. */ plotSubtree: function(node, opt, scale, animating) { var viz = this.viz, canvas = viz.canvas; scale = Math.min(Math.max(0.001, scale), 1); if(scale >= 0) { node.drawn = false; var ctx = canvas.getCtx(); var diff = viz.geom.getScaledTreePosition(node, scale); ctx.translate(diff.x, diff.y); ctx.scale(scale, scale); } this.plotTree(node, !scale, opt, animating); if(scale >= 0) node.drawn = true; }, /* Plots a Subtree. */ plotTree: function(node, plotLabel, opt, animating) { var that = this, viz = this.viz, canvas = viz.canvas, config = this.config, ctx = canvas.getCtx(); var root = config.multitree && !('$orn' in node.data); var orns = root && node.data.$orns; Graph.Util.eachSubnode(node, function(elem) { //multitree root node check if((!root || orns.indexOf(elem.data.$orn) > 0) && elem.exist && elem.drawn) { var adj = node.getAdjacency(elem.id); !animating && opt.onBeforePlotLine(adj); ctx.globalAlpha = Math.min(node.alpha, elem.alpha); that.plotLine(adj, canvas, animating); !animating && opt.onAfterPlotLine(adj); that.plotTree(elem, plotLabel, opt, animating); } }); if(node.drawn) { ctx.globalAlpha = node.alpha; !animating && opt.onBeforePlotNode(node); this.plotNode(node, canvas, animating); !animating && opt.onAfterPlotNode(node); if(plotLabel && ctx.globalAlpha >= 0.95) this.plotLabel(canvas, node, opt); else this.hideLabel(node, false); } else { this.hideLabel(node, true); } }, /* Method: placeLabel Overrides abstract method placeLabel in . Parameters: tag - A DOM label element. node - A . controller - A configuration/controller object passed to the visualization. */ placeLabel: function(tag, node, controller) { var pos = node.pos.getc(true), dim = this.node, canvas = this.viz.canvas; var w = dim.overridable && node.data.$width || dim.width; var h = dim.overridable && node.data.$height || dim.height; var radius = canvas.getSize(); var labelPos, orn; if(dim.align == "center") { labelPos= { x: Math.round(pos.x - w / 2 + radius.width/2), y: Math.round(pos.y - h / 2 + radius.height/2) }; } else if (dim.align == "left") { orn = this.config.orientation; if(orn == "bottom" || orn == "top") { labelPos= { x: Math.round(pos.x - w / 2 + radius.width/2), y: Math.round(pos.y + radius.height/2) }; } else { labelPos= { x: Math.round(pos.x + radius.width/2), y: Math.round(pos.y - h / 2 + radius.height/2) }; } } else if(dim.align == "right") { orn = this.config.orientation; if(orn == "bottom" || orn == "top") { labelPos= { x: Math.round(pos.x - w / 2 + radius.width/2), y: Math.round(pos.y - h + radius.height/2) }; } else { labelPos= { x: Math.round(pos.x - w + radius.width/2), y: Math.round(pos.y - h / 2 + radius.height/2) }; } } else throw "align: not implemented"; var style = tag.style; style.left = labelPos.x + 'px'; style.top = labelPos.y + 'px'; style.display = this.fitsInCanvas(labelPos, canvas)? '' : 'none'; controller.onPlaceLabel(tag, node); }, getAlignedPos: function(pos, width, height) { var nconfig = this.node; var square, orn; if(nconfig.align == "center") { square = { x: pos.x - width / 2, y: pos.y - height / 2 }; } else if (nconfig.align == "left") { orn = this.config.orientation; if(orn == "bottom" || orn == "top") { square = { x: pos.x - width / 2, y: pos.y }; } else { square = { x: pos.x, y: pos.y - height / 2 }; } } else if(nconfig.align == "right") { orn = this.config.orientation; if(orn == "bottom" || orn == "top") { square = { x: pos.x - width / 2, y: pos.y - height }; } else { square = { x: pos.x - width, y: pos.y - height / 2 }; } } else throw "align: not implemented"; return square; }, getOrientation: function(adj) { var config = this.config; var orn = config.orientation; if(config.multitree) { var nodeFrom = adj.nodeFrom; var nodeTo = adj.nodeTo; orn = (('$orn' in nodeFrom.data) && nodeFrom.data.$orn) || (('$orn' in nodeTo.data) && nodeTo.data.$orn); } return orn; } }); /* Class: ST.Plot.NodeTypes Here are implemented all kinds of node rendering functions. Rendering functions implemented are 'none', 'circle', 'ellipse', 'rectangle' and 'square'. You can add new Node types by implementing a new method in this class Example: (start code js) ST.Plot.NodeTypes.implement({ 'newnodetypename': function(node, canvas) { //Render my node here. } }); (end code) */ ST.Plot.NodeTypes = new Class({ 'none': function() {}, 'circle': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var cond = nconfig.overridable && data; var dim = cond && data.$dim || nconfig.dim; var algnPos = this.getAlignedPos(pos, dim * 2, dim * 2); canvas.path('fill', function(context) { context.arc(algnPos.x + dim, algnPos.y + dim, dim, 0, Math.PI * 2, true); }); }, 'square': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var cond = nconfig.overridable && data; var dim = cond && data.$dim || nconfig.dim; var algnPos = this.getAlignedPos(pos, dim, dim); canvas.getCtx().fillRect(algnPos.x, algnPos.y, dim, dim); }, 'ellipse': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var cond = nconfig.overridable && data; var width = (cond && data.$width || nconfig.width) / 2; var height = (cond && data.$height || nconfig.height) / 2; var algnPos = this.getAlignedPos(pos, width * 2, height * 2); var ctx = canvas.getCtx(); ctx.save(); ctx.scale(width / height, height / width); canvas.path('fill', function(context) { context.arc((algnPos.x + width) * (height / width), (algnPos.y + height) * (width / height), height, 0, Math.PI * 2, true); }); ctx.restore(); }, 'rectangle': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var cond = nconfig.overridable && data; var width = cond && data.$width || nconfig.width; var height = cond && data.$height || nconfig.height; var algnPos = this.getAlignedPos(pos, width, height); canvas.getCtx().fillRect(algnPos.x, algnPos.y, width, height); } }); /* Class: ST.Plot.EdgeTypes Here are implemented all kinds of edge rendering functions. Rendering functions implemented are 'none', 'line', 'quadratic:begin', 'quadratic:end', 'bezier' and 'arrow'. You can add new Edge types by implementing a new method in this class Example: (start code js) ST.Plot.EdgeTypes.implement({ 'newedgetypename': function(adj, canvas) { //Render my edge here. } }); (end code) */ ST.Plot.EdgeTypes = new Class({ 'none': function() {}, 'line': function(adj, canvas) { var orn = this.getOrientation(adj); var nodeFrom = adj.nodeFrom, nodeTo = adj.nodeTo; var begin = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeFrom:nodeTo, 'begin', orn); var end = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeTo:nodeFrom, 'end', orn); canvas.path('stroke', function(ctx) { ctx.moveTo(begin.x, begin.y); ctx.lineTo(end.x, end.y); }); }, 'quadratic:begin': function(adj, canvas) { var orn = this.getOrientation(adj); var data = adj.data, econfig = this.edge; var nodeFrom = adj.nodeFrom, nodeTo = adj.nodeTo; var begin = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeFrom:nodeTo, 'begin', orn); var end = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeTo:nodeFrom, 'end', orn); var cond = econfig.overridable && data; var dim = cond && data.$dim || econfig.dim; switch(orn) { case "left": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(begin.x + dim, begin.y, end.x, end.y); }); break; case "right": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(begin.x - dim, begin.y, end.x, end.y); }); break; case "top": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(begin.x, begin.y + dim, end.x, end.y); }); break; case "bottom": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(begin.x, begin.y - dim, end.x, end.y); }); break; } }, 'quadratic:end': function(adj, canvas) { var orn = this.getOrientation(adj); var data = adj.data, econfig = this.edge; var nodeFrom = adj.nodeFrom, nodeTo = adj.nodeTo; var begin = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeFrom:nodeTo, 'begin', orn); var end = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeTo:nodeFrom, 'end', orn); var cond = econfig.overridable && data; var dim = cond && data.$dim || econfig.dim; switch(orn) { case "left": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(end.x - dim, end.y, end.x, end.y); }); break; case "right": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(end.x + dim, end.y, end.x, end.y); }); break; case "top": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(end.x, end.y - dim, end.x, end.y); }); break; case "bottom": canvas.path('stroke', function(ctx){ ctx.moveTo(begin.x, begin.y); ctx.quadraticCurveTo(end.x, end.y + dim, end.x, end.y); }); break; } }, 'bezier': function(adj, canvas) { var data = adj.data, econfig = this.edge; var orn = this.getOrientation(adj); var nodeFrom = adj.nodeFrom, nodeTo = adj.nodeTo; var begin = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeFrom:nodeTo, 'begin', orn); var end = this.viz.geom.getEdge(nodeFrom._depth < nodeTo._depth? nodeTo:nodeFrom, 'end', orn); var cond = econfig.overridable && data; var dim = cond && data.$dim || econfig.dim; switch(orn) { case "left": canvas.path('stroke', function(ctx) { ctx.moveTo(begin.x, begin.y); ctx.bezierCurveTo(begin.x + dim, begin.y, end.x - dim, end.y, end.x, end.y); }); break; case "right": canvas.path('stroke', function(ctx) { ctx.moveTo(begin.x, begin.y); ctx.bezierCurveTo(begin.x - dim, begin.y, end.x + dim, end.y, end.x, end.y); }); break; case "top": canvas.path('stroke', function(ctx) { ctx.moveTo(begin.x, begin.y); ctx.bezierCurveTo(begin.x, begin.y + dim, end.x, end.y - dim, end.x, end.y); }); break; case "bottom": canvas.path('stroke', function(ctx) { ctx.moveTo(begin.x, begin.y); ctx.bezierCurveTo(begin.x, begin.y - dim, end.x, end.y + dim, end.x, end.y); }); break; } }, 'arrow': function(adj, canvas) { var orn = this.getOrientation(adj); var node = adj.nodeFrom, child = adj.nodeTo; var data = adj.data, econfig = this.edge; //get edge dim var cond = econfig.overridable && data; var edgeDim = cond && data.$dim || econfig.dim; //get edge direction if(cond && data.$direction && data.$direction.length > 1) { var nodeHash = {}; nodeHash[node.id] = node; nodeHash[child.id] = child; var sense = data.$direction; node = nodeHash[sense[0]]; child = nodeHash[sense[1]]; } var posFrom = this.viz.geom.getEdge(node, 'begin', orn); var posTo = this.viz.geom.getEdge(child, 'end', orn); var vect = new Complex(posTo.x - posFrom.x, posTo.y - posFrom.y); vect.$scale(edgeDim / vect.norm()); var intermediatePoint = new Complex(posTo.x - vect.x, posTo.y - vect.y); var normal = new Complex(-vect.y / 2, vect.x / 2); var v1 = intermediatePoint.add(normal), v2 = intermediatePoint.$add(normal.$scale(-1)); canvas.path('stroke', function(context) { context.moveTo(posFrom.x, posFrom.y); context.lineTo(posTo.x, posTo.y); }); canvas.path('fill', function(context) { context.moveTo(v1.x, v1.y); context.lineTo(v2.x, v2.y); context.lineTo(posTo.x, posTo.y); }); } }); })(); /* * File: AngularWidth.js * * Provides utility methods for calculating angular widths. * * Implemented by: * * , * */ /* Object: AngularWidth Provides utility methods for calculating angular widths. */ var AngularWidth = { /* Method: setAngularWidthForNodes Sets nodes angular widths. */ setAngularWidthForNodes: function() { var config = this.config.Node; var overridable = config.overridable; var dim = config.dim; Graph.Util.eachBFS(this.graph, this.root, function(elem, i) { var diamValue = (overridable && elem.data && elem.data.$aw) || dim; elem._angularWidth = diamValue / i; }, "ignore"); }, /* Method: setSubtreesAngularWidth Sets subtrees angular widths. */ setSubtreesAngularWidth: function() { var that = this; Graph.Util.eachNode(this.graph, function(elem) { that.setSubtreeAngularWidth(elem); }, "ignore"); }, /* Method: setSubtreeAngularWidth Sets the angular width for a subtree. */ setSubtreeAngularWidth: function(elem) { var that = this, nodeAW = elem._angularWidth, sumAW = 0; Graph.Util.eachSubnode(elem, function(child) { that.setSubtreeAngularWidth(child); sumAW += child._treeAngularWidth; }, "ignore"); elem._treeAngularWidth = Math.max(nodeAW, sumAW); }, /* Method: computeAngularWidths Computes nodes and subtrees angular widths. */ computeAngularWidths: function () { this.setAngularWidthForNodes(); this.setSubtreesAngularWidth(); } }; /* * File: RGraph.js * * Implements the class and other derived classes. * * Description: * * A radial layout of a tree puts the root node on the center of the canvas, places its children on the first concentric ring away from the root node, its grandchildren on a second concentric ring, and so on... * * Ka-Ping Yee, Danyel Fisher, Rachna Dhamija and Marti Hearst introduced a very interesting paper called "Animated Exploration of Dynamic Graphs with Radial Layout". In this paper they describe a way to animate a radial layout of a tree with ease-in and ease-out transitions, which make transitions from a graph's state to another easier to understand for the viewer. * * Inspired by: * * Animated Exploration of Dynamic Graphs with Radial Layout (Ka-Ping Yee, Danyel Fisher, Rachna Dhamija, Marti Hearst) * * * * Disclaimer: * * This visualization was built from scratch, taking only the paper as inspiration, and only shares some features with this paper. * * */ /* Class: RGraph The main RGraph class Extends: , Parameters: canvas - A Class config - A configuration/controller object. Configuration: The configuration object can have the following properties (all properties are optional and have a default value) *General* - _interpolation_ Interpolation type used for animations. Possible options are 'polar' and 'linear'. Default's 'linear'. - _levelDistance_ Distance between a parent node and its children. Default's 100. - _withLabels_ Whether the visualization should use/create labels or not. Default's *true*. *Node* Customize the visualization nodes' shape, color, and other style properties. - _Node_ This object has as properties - _overridable_ Determine whether or not nodes properties can be overriden by a particular node. Default's false. If given a JSON tree or graph, a node _data_ property contains properties which are the same as defined here but prefixed with a dollar sign (i.e $), the node properties will override the global node properties. - _type_ Node type (shape). Possible options are "none", "square", "rectangle", "circle", "triangle", "star". Default's "circle". - _color_ Node color. Default's '#ccb'. - _lineWidth_ Line width. If nodes aren't drawn with strokes then this property won't be of any use. Default's 1. - _height_ Node height. Used for plotting rectangular nodes. Default's 5. - _width_ Node width. Used for plotting rectangular nodes. Default's 5. - _dim_ An extra parameter used by other complex shapes such as square and circle to determine the shape's diameter. Default's 3. *Edge* Customize the visualization edges' shape, color, and other style properties. - _Edge_ This object has as properties - _overridable_ Determine whether or not edges properties can be overriden by a particular edge object. Default's false. If given a JSON _complex_ graph (defined in ), an adjacency _data_ property contains properties which are the same as defined here but prefixed with a dollar sign (i.e $), the adjacency properties will override the global edge properties. - _type_ Edge type (shape). Possible options are "none", "line" and "arrow". Default's "line". - _color_ Edge color. Default's '#ccb'. - _lineWidth_ Line width. If edges aren't drawn with strokes then this property won't be of any use. Default's 1. *Animations* - _duration_ Duration of the animation in milliseconds. Default's 2500. - _fps_ Frames per second. Default's 40. - _transition_ One of the transitions defined in the class. Default's Quart.easeInOut. - _clearCanvas_ Whether to clear canvas on each animation frame or not. Default's true. *Controller options* You can also implement controller functions inside the configuration object. This functions are - _onBeforeCompute(node)_ This method is called right before performing all computation and animations to the JIT visualization. - _onAfterCompute()_ This method is triggered right after all animations or computations for the JIT visualizations ended. - _onCreateLabel(domElement, node)_ This method receives the label dom element as first parameter, and the corresponding as second parameter. This method will only be called on label creation. Note that a is a node from the input tree/graph you provided to the visualization. If you want to know more about what kind of JSON tree/graph format is used to feed the visualizations, you can take a look at . This method proves useful when adding events to the labels used by the JIT. - _onPlaceLabel(domElement, node)_ This method receives the label dom element as first parameter and the corresponding as second parameter. This method is called each time a label has been placed on the visualization, and thus it allows you to update the labels properties, such as size or position. Note that onPlaceLabel will be triggered after updating the labels positions. That means that, for example, the left and top css properties are already updated to match the nodes positions. - _onBeforePlotNode(node)_ This method is triggered right before plotting a given node. The _node_ parameter is the to be plotted. This method is useful for changing a node style right before plotting it. - _onAfterPlotNode(node)_ This method is triggered right after plotting a given node. The _node_ parameter is the plotted. - _onBeforePlotLine(adj)_ This method is triggered right before plotting an edge. The _adj_ parameter is a object. This method is useful for adding some styles to a particular edge before being plotted. - _onAfterPlotLine(adj)_ This method is triggered right after plotting an edge. The _adj_ parameter is the plotted. Example: Here goes a complete example. In most cases you won't be forced to implement all properties and methods. In fact, all configuration properties have the default value assigned. I won't be instanciating a class here. If you want to know more about instanciating a class please take a look at the class documentation. (start code js) var rgraph = new RGraph(canvas, { interpolation: 'linear', levelDistance: 100, withLabels: true, Node: { overridable: false, type: 'circle', color: '#ccb', lineWidth: 1, height: 5, width: 5, dim: 3 }, Edge: { overridable: false, type: 'line', color: '#ccb', lineWidth: 1 }, duration: 2500, fps: 40, transition: Trans.Quart.easeInOut, clearCanvas: true, onBeforeCompute: function(node) { //do something onBeforeCompute }, onAfterCompute: function () { //do something onAfterCompute }, onCreateLabel: function(domElement, node) { //do something onCreateLabel }, onPlaceLabel: function(domElement, node) { //do something onPlaceLabel }, onBeforePlotNode:function(node) { //do something onBeforePlotNode }, onAfterPlotNode: function(node) { //do something onAfterPlotNode }, onBeforePlotLine:function(adj) { //do something onBeforePlotLine }, onAfterPlotLine: function(adj) { //do something onAfterPlotLine } }); (end code) Instance Properties: - _graph_ Access a instance. - _op_ Access a instance. - _fx_ Access a instance. */ this.RGraph = new Class({ Implements: [Loader, AngularWidth], initialize: function(canvas, controller) { var config= { labelContainer: canvas.id + '-label', interpolation: 'linear', levelDistance: 100, withLabels: true, Node: { overridable: false, type: 'circle', dim: 3, color: '#ccb', width: 5, height: 5, lineWidth: 1 }, Edge: { overridable: false, type: 'line', color: '#ccb', lineWidth: 1 }, fps:40, duration: 2500, transition: Trans.Quart.easeInOut, clearCanvas: true }; var innerController = { onBeforeCompute: $empty, onAfterCompute: $empty, onCreateLabel: $empty, onPlaceLabel: $empty, onComplete: $empty, onBeforePlotLine:$empty, onAfterPlotLine: $empty, onBeforePlotNode:$empty, onAfterPlotNode: $empty }; this.controller = this.config = $merge(config, innerController, controller); this.graphOptions = { 'complex': false, 'Node': { 'selected': false, 'exist': true, 'drawn': true } }; this.graph = new Graph(this.graphOptions); this.fx = new RGraph.Plot(this); this.op = new RGraph.Op(this); this.json = null; this.canvas = canvas; this.root = null; this.busy = false; this.parent = false; }, /* Method: refresh Computes nodes' positions and replots the tree. */ refresh: function() { this.compute(); this.plot(); }, /* Method: reposition An alias for computing new positions to _endPos_ See also: */ reposition: function() { this.compute('endPos'); }, /* Method: plot Plots the RGraph */ plot: function() { this.fx.plot(); }, /* Method: compute Computes nodes' positions. Parameters: property - _optional_ A position property to store the new positions. Possible values are 'pos', 'endPos' or 'startPos'. */ compute: function(property) { var prop = property || ['pos', 'startPos', 'endPos']; var node = this.graph.getNode(this.root); node._depth = 0; Graph.Util.computeLevels(this.graph, this.root, 0, "ignore"); this.computeAngularWidths(); this.computePositions(prop); }, /* computePositions Performs the main algorithm for computing node positions. */ computePositions: function(property) { var propArray = $splat(property); var aGraph = this.graph; var GUtil = Graph.Util; var root = this.graph.getNode(this.root); var parent = this.parent; var config = this.config; for(var i=0; i 0 && subnodes[0].dist) { subnodes.sort(function(a, b) { return (a.dist >= b.dist) - (a.dist <= b.dist); }); } for(var k=0; k < subnodes.length; k++) { var child = subnodes[k]; if(!child._flag) { child._rel = child._treeAngularWidth / totalAngularWidths; var angleProportion = child._rel * angleSpan; var theta = angleInit + angleProportion / 2; for(var i=0; i 0)? ps[0] : false; if(p) { var posParent = p.pos.getc(), posChild = n.pos.getc(); var newPos = posParent.add(posChild.scale(-1)); theta = Math.atan2(newPos.y, newPos.x); if(theta < 0) theta += 2 * Math.PI; } return {parent: p, theta: theta}; }, /* tagChildren Enumerates the children in order to mantain child ordering (second constraint of the paper). */ tagChildren: function(par, id) { if(par.angleSpan) { var adjs = []; Graph.Util.eachAdjacency(par, function(elem) { adjs.push(elem.nodeTo); }, "ignore"); var len = adjs.length; for(var i=0; i < len && id != adjs[i].id; i++); for(var j= (i+1) % len, k = 0; id != adjs[j].id; j = (j+1) % len) { adjs[j].dist = k++; } } }, /* Method: onClick Performs all calculations and animations to center the node specified by _id_. Parameters: id - A id. opt - _optional_ An object containing some extra properties like - _hideLabels_ Hide labels when performing the animation. Default's *true*. Example: (start code js) rgraph.onClick('someid'); //or also... rgraph.onClick('someid', { hideLabels: false }); (end code) */ onClick: function(id, opt) { if(this.root != id && !this.busy) { this.busy = true; this.root = id; that = this; this.controller.onBeforeCompute(this.graph.getNode(id)); var obj = this.getNodeAndParentAngle(id); //second constraint this.tagChildren(obj.parent, id); this.parent = obj.parent; this.compute('endPos'); //first constraint var thetaDiff = obj.theta - obj.parent.endPos.theta; Graph.Util.eachNode(this.graph, function(elem) { elem.endPos.set(elem.endPos.getp().add($P(thetaDiff, 0))); }); var mode = this.config.interpolation; opt = $merge({ onComplete: $empty }, opt || {}); this.fx.animate($merge({ hideLabels: true, modes: [mode] }, opt, { onComplete: function() { that.busy = false; opt.onComplete(); } })); } } }); /* Class: RGraph.Op Performs advanced operations on trees and graphs. Extends: All methods Access: This instance can be accessed with the _op_ parameter of the instance created. Example: (start code js) var rgraph = new RGraph(canvas, config); rgraph.op.morph //or can also call any other method (end code) */ RGraph.Op = new Class({ Implements: Graph.Op, initialize: function(viz) { this.viz = viz; } }); /* Class: RGraph.Plot Performs plotting operations. Extends: All methods Access: This instance can be accessed with the _fx_ parameter of the instance created. Example: (start code js) var rgraph = new RGraph(canvas, config); rgraph.fx.placeLabel //or can also call any other method (end code) */ RGraph.Plot = new Class({ Implements: Graph.Plot, initialize: function(viz) { this.viz = viz; this.config = viz.config; this.node = viz.config.Node; this.edge = viz.config.Edge; this.animation = new Animation; this.nodeTypes = new RGraph.Plot.NodeTypes; this.edgeTypes = new RGraph.Plot.EdgeTypes; }, /* Method: placeLabel Overrides abstract method placeLabel in . Parameters: tag - A DOM label element. node - A . controller - A configuration/controller object passed to the visualization. */ placeLabel: function(tag, node, controller) { var pos = node.pos.getc(true), canvas = this.viz.canvas; var radius= canvas.getSize(); var labelPos= { x: Math.round(pos.x + radius.width/2), y: Math.round(pos.y + radius.height/2) }; var style = tag.style; style.left = labelPos.x + 'px'; style.top = labelPos.y + 'px'; style.display = this.fitsInCanvas(labelPos, canvas)? '' : 'none'; controller.onPlaceLabel(tag, node); } }); /* Class: RGraph.Plot.NodeTypes Here are implemented all kinds of node rendering functions. Rendering functions implemented are 'none', 'circle', 'triangle', 'rectangle', 'star' and 'square'. You can add new Node types by implementing a new method in this class Example: (start code js) RGraph.Plot.NodeTypes.implement({ 'newnodetypename': function(node, canvas) { //Render my node here. } }); (end code) */ RGraph.Plot.NodeTypes = new Class({ 'none': function() {}, 'circle': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; canvas.path('fill', function(context) { context.arc(pos.x, pos.y, nodeDim, 0, Math.PI*2, true); }); }, 'square': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; var nodeDim2 = 2 * nodeDim; canvas.getCtx().fillRect(pos.x - nodeDim, pos.y - nodeDim, nodeDim2, nodeDim2); }, 'rectangle': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var width = nconfig.overridable && data && data.$width || nconfig.width; var height = nconfig.overridable && data && data.$height || nconfig.height; canvas.getCtx().fillRect(pos.x - width / 2, pos.y - height / 2, width, height); }, 'triangle': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; var c1x = pos.x, c1y = pos.y - nodeDim, c2x = c1x - nodeDim, c2y = pos.y + nodeDim, c3x = c1x + nodeDim, c3y = c2y; canvas.path('fill', function(ctx) { ctx.moveTo(c1x, c1y); ctx.lineTo(c2x, c2y); ctx.lineTo(c3x, c3y); }); }, 'star': function(node, canvas) { var pos = node.pos.getc(true), nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; var ctx = canvas.getCtx(), pi5 = Math.PI / 5; ctx.save(); ctx.translate(pos.x, pos.y); ctx.beginPath(); ctx.moveTo(nodeDim, 0); for (var i=0; i<9; i++){ ctx.rotate(pi5); if(i % 2 == 0) { ctx.lineTo((nodeDim / 0.525731) * 0.200811, 0); } else { ctx.lineTo(nodeDim, 0); } } ctx.closePath(); ctx.fill(); ctx.restore(); } }); /* Class: RGraph.Plot.EdgeTypes Here are implemented all kinds of edge rendering functions. Rendering functions implemented are 'none', 'line' and 'arrow'. You can add new Edge types by implementing a new method in this class Example: (start code js) RGraph.Plot.EdgeTypes.implement({ 'newedgetypename': function(adj, canvas) { //Render my edge here. } }); (end code) */ RGraph.Plot.EdgeTypes = new Class({ 'none': function() {}, 'line': function(adj, canvas) { var pos = adj.nodeFrom.pos.getc(true); var posChild = adj.nodeTo.pos.getc(true); canvas.path('stroke', function(context) { context.moveTo(pos.x, pos.y); context.lineTo(posChild.x, posChild.y); }); }, 'arrow': function(adj, canvas) { var node = adj.nodeFrom, child = adj.nodeTo; var data = adj.data, econfig = this.edge; //get edge dim var cond = econfig.overridable && data; var edgeDim = cond && data.$dim || 14; //get edge direction if(cond && data.$direction && data.$direction.length > 1) { var nodeHash = {}; nodeHash[node.id] = node; nodeHash[child.id] = child; var sense = data.$direction; node = nodeHash[sense[0]]; child = nodeHash[sense[1]]; } var posFrom = node.pos.getc(true), posTo = child.pos.getc(true); var vect = new Complex(posTo.x - posFrom.x, posTo.y - posFrom.y); vect.$scale(edgeDim / vect.norm()); var intermediatePoint = new Complex(posTo.x - vect.x, posTo.y - vect.y); var normal = new Complex(-vect.y / 2, vect.x / 2); var v1 = intermediatePoint.add(normal), v2 = intermediatePoint.$add(normal.$scale(-1)); canvas.path('stroke', function(context) { context.moveTo(posFrom.x, posFrom.y); context.lineTo(posTo.x, posTo.y); }); canvas.path('fill', function(context) { context.moveTo(v1.x, v1.y); context.lineTo(v2.x, v2.y); context.lineTo(posTo.x, posTo.y); }); } }); /* * File: Hypertree.js * * Implements the class and other derived classes. * * Description: * * A Hyperbolic Tree (HT) is a focus+context information visualization technique used to display large amount of inter-related data. This technique was originally developed at Xerox PARC. * * The HT algorithm plots a tree in what's called the Poincare Disk model of Hyperbolic Geometry, a kind of non-Euclidean geometry. By doing this, the HT algorithm applies a moebius transformation to the tree in order to display it with a magnifying glass effect. * * Inspired by: * * A Focus+Context Technique Based on Hyperbolic Geometry for Visualizing Large Hierarchies (John Lamping, Ramana Rao, and Peter Pirolli). * * * * Disclaimer: * * This visualization was built from scratch, taking only the paper as inspiration, and only shares some features with the Hypertree. * */ /* Complex A multi-purpose Complex Class with common methods. Exetended for the Hypertree. */ /* moebiusTransformation Calculates a moebius transformation for this point / complex. For more information go to: http://en.wikipedia.org/wiki/Moebius_transformation. Parameters: c - An initialized Complex instance representing a translation Vector. */ Complex.prototype.moebiusTransformation = function(c) { var num = this.add(c); var den = c.$conjugate().$prod(this); den.x++; return num.$div(den); }; /* Method: getClosestNodeToOrigin Extends . Returns the closest node to the center of canvas. Parameters: graph - A instance. prop - _optional_ a position property. Possible properties are 'startPos', 'pos' or 'endPos'. Default's 'pos'. Returns: Closest node to origin. Returns *null* otherwise. */ Graph.Util.getClosestNodeToOrigin = function(graph, prop, flags) { return this.getClosestNodeToPos(graph, Polar.KER, prop, flags); }; /* Method: getClosestNodeToPos Extends . Returns the closest node to the given position. Parameters: graph - A instance. p[os - A or instance. prop - _optional_ a position property. Possible properties are 'startPos', 'pos' or 'endPos'. Default's 'pos'. Returns: Closest node to the given position. Returns *null* otherwise. */ Graph.Util.getClosestNodeToPos = function(graph, pos, prop, flags) { var node = null; prop = prop || 'pos'; pos = pos && pos.getc(true) || Complex.KER; var distance = function(a, b) { var d1 = a.x - b.x, d2 = a.y - b.y; return d1 * d1 + d2 * d2; }; this.eachNode(graph, function(elem) { node = (node == null || distance(elem[prop].getc(true), pos) < distance(node[prop].getc(true), pos))? elem : node; }, flags); return node; }; /* moebiusTransformation Calculates a moebius transformation for the hyperbolic tree. Parameters: graph - A instance. pos - A . prop - A property array. theta - Rotation angle. startPos - _optional_ start position. */ Graph.Util.moebiusTransformation = function(graph, pos, prop, startPos, flags) { this.eachNode(graph, function(elem) { for(var i=0; i, Parameters: canvas - A Class config - A configuration/controller object. Configuration: The configuration object can have the following properties (all properties are optional and have a default value) *General* - _withLabels_ Whether the visualization should use/create labels or not. Default's *true*. *Node* Customize the visualization nodes' shape, color, and other style properties. - _Node_ This object has as properties - _overridable_ Determine whether or not nodes properties can be overriden by a particular node. Default's false. If given a JSON tree or graph, a node _data_ property contains properties which are the same as defined here but prefixed with a dollar sign (i.e $), the node properties will override the global node properties. - _type_ Node type (shape). Possible options are "none", "square", "rectangle", "circle", "triangle", "star". Default's "circle". - _color_ Node color. Default's '#ccb'. - _lineWidth_ Line width. If nodes aren't drawn with strokes then this property won't be of any use. Default's 1. - _height_ Node height. Used for plotting rectangular nodes. Default's 5. - _width_ Node width. Used for plotting rectangular nodes. Default's 5. - _dim_ An extra parameter used by other complex shapes such as square and circle to determine the shape's diameter. Default's 7. - _transform_ Whether to apply the moebius transformation to the nodes or not. Default's true. *Edge* Customize the visualization edges' shape, color, and other style properties. - _Edge_ This object has as properties - _overridable_ Determine whether or not edges properties can be overriden by a particular edge object. Default's false. If given a JSON _complex_ graph (defined in ), an adjacency _data_ property contains properties which are the same as defined here but prefixed with a dollar sign (i.e $), the adjacency properties will override the global edge properties. - _type_ Edge type (shape). Possible options are "none", "line" and "hyperline". Default's "hyperline". - _color_ Edge color. Default's '#ccb'. - _lineWidth_ Line width. If edges aren't drawn with strokes then this property won't be of any use. Default's 1. *Animations* - _duration_ Duration of the animation in milliseconds. Default's 1500. - _fps_ Frames per second. Default's 40. - _transition_ One of the transitions defined in the class. Default's Quart.easeInOut. - _clearCanvas_ Whether to clear canvas on each animation frame or not. Default's true. *Controller options* You can also implement controller functions inside the configuration object. This functions are - _onBeforeCompute(node)_ This method is called right before performing all computation and animations to the JIT visualization. - _onAfterCompute()_ This method is triggered right after all animations or computations for the JIT visualizations ended. - _onCreateLabel(domElement, node)_ This method receives the label dom element as first parameter, and the corresponding as second parameter. This method will only be called on label creation. Note that a is a node from the input tree/graph you provided to the visualization. If you want to know more about what kind of JSON tree/graph format is used to feed the visualizations, you can take a look at . This method proves useful when adding events to the labels used by the JIT. - _onPlaceLabel(domElement, node)_ This method receives the label dom element as first parameter and the corresponding as second parameter. This method is called each time a label has been placed on the visualization, and thus it allows you to update the labels properties, such as size or position. Note that onPlaceLabel will be triggered after updating the labels positions. That means that, for example, the left and top css properties are already updated to match the nodes positions. - _onBeforePlotNode(node)_ This method is triggered right before plotting a given node. The _node_ parameter is the to be plotted. This method is useful for changing a node style right before plotting it. - _onAfterPlotNode(node)_ This method is triggered right after plotting a given node. The _node_ parameter is the plotted. - _onBeforePlotLine(adj)_ This method is triggered right before plotting an edge. The _adj_ parameter is a object. This method is useful for adding some styles to a particular edge before being plotted. - _onAfterPlotLine(adj)_ This method is triggered right after plotting an edge. The _adj_ parameter is the plotted. Example: Here goes a complete example. In most cases you won't be forced to implement all properties and methods. In fact, all configuration properties have the default value assigned. I won't be instanciating a class here. If you want to know more about instanciating a class please take a look at the class documentation. (start code js) var ht = new Hypertree(canvas, { Node: { overridable: false, type: 'circle', color: '#ccb', lineWidth: 1, height: 5, width: 5, dim: 7, transform: true }, Edge: { overridable: false, type: 'hyperline', color: '#ccb', lineWidth: 1 }, duration: 1500, fps: 40, transition: Trans.Quart.easeInOut, clearCanvas: true, withLabels: true, onBeforeCompute: function(node) { //do something onBeforeCompute }, onAfterCompute: function () { //do something onAfterCompute }, onCreateLabel: function(domElement, node) { //do something onCreateLabel }, onPlaceLabel: function(domElement, node) { //do something onPlaceLabel }, onBeforePlotNode:function(node) { //do something onBeforePlotNode }, onAfterPlotNode: function(node) { //do something onAfterPlotNode }, onBeforePlotLine:function(adj) { //do something onBeforePlotLine }, onAfterPlotLine: function(adj) { //do something onAfterPlotLine } }); (end code) Instance Properties: - _graph_ Access a instance. - _op_ Access a instance. - _fx_ Access a instance. */ this.Hypertree = new Class({ Implements: [Loader, AngularWidth], initialize: function(canvas, controller) { var config = { labelContainer: canvas.id + '-label', withLabels: true, Node: { overridable: false, type: 'circle', dim: 7, color: '#ccb', width: 5, height: 5, lineWidth: 1, transform: true }, Edge: { overridable: false, type: 'hyperline', color: '#ccb', lineWidth: 1 }, clearCanvas: true, fps:40, duration: 1500, transition: Trans.Quart.easeInOut }; var innerController = { onBeforeCompute: $empty, onAfterCompute: $empty, onCreateLabel: $empty, onPlaceLabel: $empty, onComplete: $empty, onBeforePlotLine:$empty, onAfterPlotLine: $empty, onBeforePlotNode:$empty, onAfterPlotNode: $empty }; this.controller = this.config = $merge(config, innerController, controller); this.graphOptions = { 'complex': false, 'Node': { 'selected': false, 'exist': true, 'drawn': true } }; this.graph = new Graph(this.graphOptions); this.fx = new Hypertree.Plot(this); this.op = new Hypertree.Op(this); this.json = null; this.canvas = canvas; this.root = null; this.busy = false; }, /* Method: refresh Computes nodes' positions and replots the tree. Parameters: reposition - _optional_ Set this to *true* to force repositioning. See also: */ refresh: function(reposition) { if(reposition) { this.reposition(); Graph.Util.eachNode(this.graph, function(node) { node.startPos.rho = node.pos.rho = node.endPos.rho; node.startPos.theta = node.pos.theta = node.endPos.theta; }); } else { this.compute(); } this.plot(); }, /* Method: reposition Computes nodes' positions and restores the tree to its previous position. For calculating nodes' positions the root must be placed on its origin. This method does this and then attemps to restore the hypertree to its previous position. */ reposition: function() { this.compute('endPos'); var vector = this.graph.getNode(this.root).pos.getc().scale(-1); Graph.Util.moebiusTransformation(this.graph, [vector], ['endPos'], 'endPos', "ignore"); Graph.Util.eachNode(this.graph, function(node) { if (node.ignore) { node.endPos.rho = node.pos.rho; node.endPos.theta = node.pos.theta; } }); }, /* Method: plot Plots the Hypertree */ plot: function() { this.fx.plot(); }, /* Method: compute Computes nodes' positions. Parameters: property - _optional_ A position property to store the new positions. Possible values are 'pos', 'endPos' or 'startPos'. */ compute: function(property) { var prop = property || ['pos', 'startPos']; var node = this.graph.getNode(this.root); node._depth = 0; Graph.Util.computeLevels(this.graph, this.root, 0, "ignore"); this.computeAngularWidths(); this.computePositions(prop); }, /* computePositions Performs the main algorithm for computing node positions. Parameters: property - A position property to store the new positions. Possible values are 'pos', 'endPos' or 'startPos'. */ computePositions: function(property) { var propArray = $splat(property); var aGraph = this.graph, GUtil = Graph.Util; var root = this.graph.getNode(this.root), that = this, config = this.config; var size = this.canvas.getSize(); var scale = Math.min(size.width, size.height)/ 2; //Set default values for the root node for(var i=0; i depth)? node._depth : depth; node._scale = scale; }, "ignore"); for(var i=0.51; i<=1; i+=0.01) { var valSeries = (function(a, n) { return (1 - Math.pow(a, n)) / (1 - a); })(i, depth + 1); if(valSeries >= 2) return i - 0.01; } return 0.5; })(); GUtil.eachBFS(this.graph, this.root, function (elem) { var angleSpan = elem.angleSpan.end - elem.angleSpan.begin; var angleInit = elem.angleSpan.begin; var totalAngularWidths = (function (element){ var total = 0; GUtil.eachSubnode(element, function(sib) { total += sib._treeAngularWidth; }, "ignore"); return total; })(elem); for(var i=1, rho = 0, lenAcum = edgeLength, depth = elem._depth; i<=depth+1; i++) { rho += lenAcum; lenAcum *= edgeLength; } GUtil.eachSubnode(elem, function(child) { if(!child._flag) { child._rel = child._treeAngularWidth / totalAngularWidths; var angleProportion = child._rel * angleSpan; var theta = angleInit + angleProportion / 2; for(var i=0; i id. opt - _optional_ An object containing some extra properties like - _hideLabels_ Hide labels when performing the animation. Default's *true*. Example: (start code js) ht.onClick('someid'); //or also... ht.onClick('someid', { hideLabels: false }); (end code) */ onClick: function(id, opt) { var pos = this.graph.getNode(id).pos.getc(true); this.move(pos, opt); }, /* Method: move Translates the tree to the given position. Parameters: pos - A number determining the position to move the tree to. opt - _optional_ An object containing some extra properties defined in */ move: function(pos, opt) { var versor = $C(pos.x, pos.y); if(this.busy === false && versor.norm() < 1) { var GUtil = Graph.Util; this.busy = true; var root = GUtil.getClosestNodeToPos(this.graph, versor), that = this; GUtil.computeLevels(this.graph, root.id, 0); this.controller.onBeforeCompute(root); if (versor.norm() < 1) { opt = $merge({ onComplete: $empty }, opt || {}); this.fx.animate($merge({ modes: ['moebius'], hideLabels: true }, opt, { onComplete: function(){ that.busy = false; opt.onComplete(); } }), versor); } } } }); /* Class: Hypertree.Op Performs advanced operations on trees and graphs. Extends: All methods Access: This instance can be accessed with the _op_ parameter of the hypertree instance created. Example: (start code js) var ht = new Hypertree(canvas, config); ht.op.morph //or can also call any other method (end code) */ Hypertree.Op = new Class({ Implements: Graph.Op, initialize: function(viz) { this.viz = viz; } }); /* Class: Hypertree.Plot Performs plotting operations. Extends: All methods Access: This instance can be accessed with the _fx_ parameter of the hypertree instance created. Example: (start code js) var ht = new Hypertree(canvas, config); ht.fx.placeLabel //or can also call any other method (end code) */ Hypertree.Plot = new Class({ Implements: Graph.Plot, initialize: function(viz) { this.viz = viz; this.config = viz.config; this.node = this.config.Node; this.edge = this.config.Edge; this.animation = new Animation; this.nodeTypes = new Hypertree.Plot.NodeTypes; this.edgeTypes = new Hypertree.Plot.EdgeTypes; }, /* Method: hyperline Plots a hyperline between two nodes. A hyperline is an arc of a circle which is orthogonal to the main circle. Parameters: adj - A object. canvas - A instance. */ hyperline: function(adj, canvas) { var node = adj.nodeFrom, child = adj.nodeTo, data = adj.data; var pos = node.pos.getc(), posChild = child.pos.getc(); var centerOfCircle = this.computeArcThroughTwoPoints(pos, posChild); var size = canvas.getSize(); var scale = Math.min(size.width, size.height)/2; if (centerOfCircle.a > 1000 || centerOfCircle.b > 1000 || centerOfCircle.ratio > 1000) { canvas.path('stroke', function(ctx) { ctx.moveTo(pos.x * scale, pos.y * scale); ctx.lineTo(posChild.x * scale, posChild.y * scale); }); } else { var angleBegin = Math.atan2(posChild.y - centerOfCircle.y, posChild.x - centerOfCircle.x); var angleEnd = Math.atan2(pos.y - centerOfCircle.y, pos.x - centerOfCircle.x); var sense = this.sense(angleBegin, angleEnd); var context = canvas.getCtx(); canvas.path('stroke', function(ctx) { ctx.arc(centerOfCircle.x*scale, centerOfCircle.y*scale, centerOfCircle.ratio*scale, angleBegin, angleEnd, sense); }); } }, /* computeArcThroughTwoPoints Calculates the arc parameters through two points. More information in Parameters: p1 - A instance. p2 - A instance. Returns: An object containing some arc properties. */ computeArcThroughTwoPoints: function(p1, p2) { var aDen = (p1.x * p2.y - p1.y * p2.x), bDen = aDen; var sq1 = p1.squaredNorm(), sq2 = p2.squaredNorm(); //Fall back to a straight line if (aDen == 0) return { x:0, y:0, ratio: 1001 }; var a = (p1.y * sq2 - p2.y * sq1 + p1.y - p2.y) / aDen; var b = (p2.x * sq1 - p1.x * sq2 + p2.x - p1.x) / bDen; var x = -a / 2; var y = -b / 2; var squaredRatio = (a * a + b * b) / 4 -1; //Fall back to a straight line if(squaredRatio < 0) return { x:0, y:0, ratio: 1001 }; var ratio = Math.sqrt(squaredRatio); var out= { x: x, y: y, ratio: ratio, a: a, b: b }; return out; }, /* sense Sets angle direction to clockwise (true) or counterclockwise (false). Parameters: angleBegin - Starting angle for drawing the arc. angleEnd - The HyperLine will be drawn from angleBegin to angleEnd. Returns: A Boolean instance describing the sense for drawing the HyperLine. */ sense: function(angleBegin, angleEnd) { return (angleBegin < angleEnd)? ((angleBegin + Math.PI > angleEnd)? false : true) : ((angleEnd + Math.PI > angleBegin)? true : false); }, /* Method: placeLabel Overrides abstract method placeLabel in . Parameters: tag - A DOM label element. node - A . controller - A configuration/controller object passed to the visualization. */ placeLabel: function(tag, node, controller) { var pos = node.pos.getc(true), canvas = this.viz.canvas; var radius= canvas.getSize(); var scale = node._scale; var labelPos= { x: Math.round(pos.x * scale + radius.width/2), y: Math.round(pos.y * scale + radius.height/2) }; var style = tag.style; style.left = labelPos.x + 'px'; style.top = labelPos.y + 'px'; style.display = ''; controller.onPlaceLabel(tag, node); } }); /* Class: Hypertree.Plot.NodeTypes Here are implemented all kinds of node rendering functions. Rendering functions implemented are 'none', 'circle', 'triangle', 'rectangle', 'star' and 'square'. You can add new Node types by implementing a new method in this class Example: (start code js) Hypertree.Plot.NodeTypes.implement({ 'newnodetypename': function(node, canvas) { //Render my node here. } }); (end code) */ Hypertree.Plot.NodeTypes = new Class({ 'none': function() {}, 'circle': function(node, canvas) { var nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; var p = node.pos.getc(), pos = p.scale(node._scale); var prod = nconfig.transform? nodeDim * (1 - p.squaredNorm()) : nodeDim; if(prod >= nodeDim / 4) { canvas.path('fill', function(context) { context.arc(pos.x, pos.y, prod, 0, Math.PI * 2, true); }); } }, 'square': function(node, canvas) { var nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; var p = node.pos.getc(), pos = p.scale(node._scale); var prod = nconfig.transform? nodeDim * (1 - p.squaredNorm()) : nodeDim; var nodeDim2 = 2 * prod; if (prod >= nodeDim / 4) { canvas.getCtx().fillRect(pos.x - prod, pos.y - prod, nodeDim2, nodeDim2); } }, 'rectangle': function(node, canvas) { var nconfig = this.node, data = node.data; var width = nconfig.overridable && data && data.$width || nconfig.width; var height = nconfig.overridable && data && data.$height || nconfig.height; var p = node.pos.getc(), pos = p.scale(node._scale); var prod = 1 - p.squaredNorm(); width = nconfig.transform? width * prod : width; height = nconfig.transform? height * prod : height; if(prod >= 0.25) { canvas.getCtx().fillRect(pos.x - width / 2, pos.y - height / 2, width, height); } }, 'triangle': function(node, canvas) { var nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; var p = node.pos.getc(), pos = p.scale(node._scale); var prod = nconfig.transform? nodeDim * (1 - p.squaredNorm()) : nodeDim; if (prod >= nodeDim / 4) { var c1x = pos.x, c1y = pos.y - prod, c2x = c1x - prod, c2y = pos.y + prod, c3x = c1x + prod, c3y = c2y; canvas.path('fill', function(ctx){ ctx.moveTo(c1x, c1y); ctx.lineTo(c2x, c2y); ctx.lineTo(c3x, c3y); }); } }, 'star': function(node, canvas) { var nconfig = this.node, data = node.data; var nodeDim = nconfig.overridable && data && data.$dim || nconfig.dim; var p = node.pos.getc(), pos = p.scale(node._scale); var prod = nconfig.transform? nodeDim * (1 - p.squaredNorm()) : nodeDim; if (prod >= nodeDim / 4) { var ctx = canvas.getCtx(), pi5 = Math.PI / 5; ctx.save(); ctx.translate(pos.x, pos.y); ctx.beginPath(); ctx.moveTo(nodeDim, 0); for (var i = 0; i < 9; i++) { ctx.rotate(pi5); if (i % 2 == 0) { ctx.lineTo((prod / 0.525731) * 0.200811, 0); } else { ctx.lineTo(prod, 0); } } ctx.closePath(); ctx.fill(); ctx.restore(); } } }); /* Class: Hypertree.Plot.EdgeTypes Here are implemented all kinds of edge rendering functions. Rendering functions implemented are 'none', 'line' and 'hyperline'. You can add new Edge types by implementing a new method in this class Example: (start code js) Hypertree.Plot.EdgeTypes.implement({ 'newedgetypename': function(adj, canvas) { //Render my edge here. } }); (end code) */ Hypertree.Plot.EdgeTypes = new Class({ 'none': function() {}, 'line': function(adj, canvas) { var s = adj.nodeFrom._scale; var pos = adj.nodeFrom.pos.getc(true); var posChild = adj.nodeTo.pos.getc(true); canvas.path('stroke', function(context) { context.moveTo(pos.x * s, pos.y * s); context.lineTo(posChild.x * s, posChild.y * s); }); }, 'hyperline': function(adj, canvas) { this.hyperline(adj, canvas); } }); /* * File: Treemap.js * * Implements the class and other derived classes. * * Description: * * A Treemap is an information visualization technique, proven very useful when displaying large hierarchical structures on a constrained space. The idea behind a Treemap is to describe hierarchical relations as 'containment'. That means that if node B is child of node A, then B 'is contained' in A. * * Inspired by: * * Squarified Treemaps (Mark Bruls, Kees Huizing, and Jarke J. van Wijk) * * * * Tree visualization with tree-maps: 2-d space-filling approach (Ben Shneiderman) * * * * Disclaimer: * * This visualization was built from scratch, taking only these papers as inspiration, and only shares some features with the Treemap papers mentioned above. * */ /* Object: TM Abstract Treemap object. Implemented By: , and . Description: Implements layout and configuration options inherited by , and . All Treemap constructors take the same configuration object as parameter. Two special _data_ keys are read from the JSON tree structure loaded by to calculate node's color and dimensions. These properties are $area (for nodes dimensions) and $color. Both of these properties are floats. This means that the tree structure defined in should now look more like this (start code js) var json = { "id": "aUniqueIdentifier", "name": "usually a nodes name", "data": { "$area": 33, //some float value "$color": 36, //-optional- some float value "some key": "some value", "some other key": "some other value" }, "children": [ 'other nodes or empty' ] }; (end code) If you want to know more about JSON tree structures and the _data_ property please read . Configuration: *General* - _rootId_ The id of the div container where the Treemap will be injected. Default's 'infovis'. - _orientation_ For and only. The layout algorithm orientation. Possible values are 'h' or 'v'. - _levelsToShow_ Max depth of the plotted tree. Useful when using the request method. - _addLeftClickHandler_ Add a left click event handler to zoom in the Treemap view when clicking a node. Default's *false*. - _addRightClickHandler_ Add a right click event handler to zoom out the Treemap view. Default's *false*. - _selectPathOnHover_ If setted to *true* all nodes contained in the path between the hovered node and the root node will have an *in-path* CSS class. Default's *false*. *Nodes* There are two kinds of Treemap nodes. (see treemapnode.png) Inner nodes are nodes having children, like _Pearl Jam_. These nodes are represented by three div elements. A _content_ element, a _head_ element (where the title goes) and a _body_ element, where the children are laid out. (start code xml)
Pearl Jam
...other nodes here...
(end code) Leaves are optionally colored nodes laying at the "bottom" of the tree. For example, _Yield_, _Vs._ and _Riot Act_ are leaves. These nodes are represented by two div elements. A _content_ element and a wrapped _leaf_ element (start code xml)
Yield
(end code) There are some configuration properties regarding Treemap nodes - _titleHeight_ The height of the title (_head_) div container. Default's 13. - _offset_ The separation offset between the _content_ div element and its contained div(s). Default's 4. *Color* _Color_ is an object containing as properties - _allow_ If *true*, the algorithm will check for the JSON node data _$color_ property to add some color to the Treemap leaves. This color is calculated by interpolating a node's $color value range with a real RGB color range. By specifying min|maxValues for the $color property and min|maxColorValues for the RGB counterparts, the visualization is able to interpolate color values and assign a proper color to the leaf node. Default's *false*. - _minValue_ The minimum value expected for the $color value property. Used for interpolating. Default's -100. - _maxValue_ The maximum value expected for the $color value property. Used for interpolating. Default's 100. - _minColorValue_ A three-element RGB array defining the color to be assigned to the _$color_ having _minValue_ as value. Default's [255, 0, 50]. - _maxColorValue_ A three-element RGB array defining the color to be assigned to the _$color_ having _maxValue_ as value. Default's [0, 255, 50]. *Tips* _Tips_ is an object containing as properties - _allow_ If *true*, a tooltip will be shown when a node is hovered. The tooltip is a div DOM element having "tip" as CSS class. Default's *false*. - _offsetX_ An offset added to the current tooltip x-position (which is the same as the current mouse position). Default's 20. - _offsetY_ An offset added to the current tooltip y-position (which is the same as the current mouse position). Default's 20. - _onShow(tooltip, node, isLeaf, domElement)_ Implement this method to change the HTML content of the tooltip when hovering a node. Parameters: tooltip - The tooltip div element. node - The corresponding JSON tree node (See also ). isLeaf - Whether is a leaf or inner node. domElement - The current hovered DOM element. *Controller options* You can also implement controller functions inside the configuration object. These functions are - _onBeforeCompute(node)_ This method is called right before performing all computation and animations to the JIT visualization. - _onAfterCompute()_ This method is triggered right after all animations or computations for the JIT visualizations ended. - _onCreateElement(content, node, isLeaf, elem1, elem2)_ This method is called on each newly created node. Parameters: content - The div wrapper element with _content_ className. node - The corresponding JSON tree node (See also ). isLeaf - Whether is a leaf or inner node. If the node's an inner tree node, elem1 and elem2 will become the _head_ and _body_ div elements respectively. If the node's a _leaf_, then elem1 will become the div leaf element. - _onDestroyElement(content, node, isLeaf, elem1, elem2)_ This method is called before collecting each node. Takes the same parameters as onCreateElement. - _request(nodeId, level, onComplete)_ This method is used for buffering information into the visualization. When clicking on an empty node, the visualization will make a request for this node's subtrees, specifying a given level for this subtree (defined by _levelsToShow_). Once the request is completed, the _onComplete_ object should be called with the given result. See also , and . */ this.TM = { layout: { orientation: "h", vertical: function() { return this.orientation == "v"; }, horizontal: function() { return this.orientation == "h"; }, change: function() { this.orientation = this.vertical()? "h" : "v"; } }, innerController: { onBeforeCompute: $empty, onAfterCompute: $empty, onComplete: $empty, onCreateElement: $empty, onDestroyElement: $empty, request: false }, config: { orientation: "h", titleHeight: 13, rootId: 'infovis', offset:4, levelsToShow: 3, addLeftClickHandler: false, addRightClickHandler: false, selectPathOnHover: false, Color: { allow: false, minValue: -100, maxValue: 100, minColorValue: [255, 0, 50], maxColorValue: [0, 255, 50] }, Tips: { allow: false, offsetX: 20, offsetY: 20, onShow: $empty } }, initialize: function(controller) { this.tree = null; this.shownTree = null; this.controller = this.config = $merge(this.config, this.innerController, controller); this.rootId = this.config.rootId; this.layout.orientation = this.config.orientation; //add tooltip if(this.config.Tips.allow && document.body) { var tip = document.getElementById('_tooltip') || document.createElement('div'); tip.id = '_tooltip'; tip.className = 'tip'; var style = tip.style; style.position = 'absolute'; style.display = 'none'; style.zIndex = 13000; document.body.appendChild(tip); this.tip = tip; } //purge var that = this; var fn = function() { that.empty(); if(window.CollectGarbage) window.CollectGarbage(); delete fn; }; if(window.addEventListener) { window.addEventListener('unload', fn, false); } else { window.attachEvent('onunload', fn); } }, /* Method: each Traverses head and leaf nodes applying a given function Parameters: f - A function that takes as parameters the same as the onCreateElement and onDestroyElement methods described in . */ each: function(f) { (function rec(elem) { if(!elem) return; var ch = elem.childNodes, len = ch.length; if(len > 0) { f.apply(this, [elem, len === 1, ch[0], ch[1]]); } if (len > 1) { for(var chi = ch[1].childNodes, i=0; i Returns: A boolean value specifying if the node is a tree leaf or not. */ leaf: function(tree) { return tree.children == 0; }, /* Method: createBox Constructs the proper DOM layout from a json node. If the node's an _inner node_, this method calls , and to create the following HTML structure (start code xml)
[Node name]
[Node's children]
(end code) If the node's a leaf node, it creates the following structure by calling , (start code xml)
[Node name]
(end code) Parameters: json - A JSON subtree. See also . coord - A coordinates object specifying width, height, left and top style properties. html - html to inject into the _body_ element if the node is an inner Tree node. Returns: The HTML structure described above. See also: , , , , . */ createBox: function(json, coord, html) { var box; if(!this.leaf(json)) { box = this.headBox(json, coord) + this.bodyBox(html, coord); } else { box = this.leafBox(json, coord); } return this.contentBox(json, coord, box); }, /* Method: plot Renders the Treemap. Parameters: json - A JSON tree structure preprocessed by some Treemap layout algorithm. Returns: The HTML to inject to the main visualization container. See also: . */ plot: function(json) { var coord = json.coord, html = ""; if(this.leaf(json)) return this.createBox(json, coord, null); for(var i=0, ch=json.children; i 1) { html+= this.plot(chi); } } return this.createBox(json, coord, html); }, /* Method: headBox Creates the _head_ div dom element that usually contains the name of a parent JSON tree node. Parameters: json - A JSON subtree. See also . coord - width and height base coordinate object. Returns: A new _head_ div dom element that has _head_ as class name. See also: . */ headBox: function(json, coord) { var config = this.config, offst = config.offset; var c = { 'height': config.titleHeight + "px", 'width': (coord.width - offst) + "px", 'left': offst / 2 + "px" }; return "
" + json.name + "
"; }, /* Method: bodyBox Creates the _body_ div dom element that usually contains a subtree dom element layout. Parameters: html - html that should be contained in the body html. coord - width and height base coordinate object. Returns: A new _body_ div dom element that has _body_ as class name. See also: . */ bodyBox: function(html, coord) { var config = this.config, th = config.titleHeight, offst = config.offset; var c = { 'width': (coord.width - offst) + "px", 'height':(coord.height - offst - th) + "px", 'top': (th + offst / 2) + "px", 'left': (offst / 2) + "px" }; return "
" + html + "
"; }, /* Method: contentBox Creates the _content_ div dom element that usually contains a _leaf_ div dom element or _head_ and _body_ div dom elements. Parameters: json - A JSON node. See also . coord - An object containing width, height, left and top coordinates. html - input html wrapped by this tag. Returns: A new _content_ div dom element that has _content_ as class name. See also: . */ contentBox: function(json, coord, html) { var c = {}; for(var i in coord) c[i] = coord[i] + "px"; return "
" + html + "
"; }, /* Method: leafBox Creates the _leaf_ div dom element that usually contains nothing else. Parameters: json - A JSON subtree. See also . coord - base with and height coordinate object. Returns: A new _leaf_ div dom element having _leaf_ as class name. See also: . */ leafBox: function(json, coord) { var config = this.config; var backgroundColor = config.Color.allow && this.setColor(json), offst = config.offset, width = coord.width - offst, height = coord.height - offst; var c = { 'top': (offst / 2) + "px", 'height':height + "px", 'width': width + "px", 'left': (offst / 2) + "px" }; if(backgroundColor) c['background-color'] = backgroundColor; return "
" + json.name + "
"; }, /* Method: setColor Calculates an hexa color string based on the _$color_ data node property. This method is called by to assign an hexadecimal color to each leaf node. This color is calculated by making a linear interpolation between _$color_ max and min values and RGB max and min values so that > hex = (maxColorValue - minColorValue) / (maxValue - minValue) * (x - minValue) + minColorValue where _x_ range is [minValue, maxValue] and - _minValue_ - _maxValue_ - _minColorValue_ - _maxColorValue_ are defined in the configuration object. This method is called by iif _Color.allow_ is setted to _true_. Sometimes linear interpolation for coloring is just not enough. In that case you can re-implement this method so that it fits your coloring needs. Some people might find useful to implement their own coloring interpolation method and to assign the resulting hex string to the _$color_ property. In that case we could re-implement the method like this (start code js) //TM.Strip, TM.SliceAndDice also work TM.Squarified.implement({ 'setColor': function(json) { return json.data.$color; } }); (end code) So that it returns the previously assigned hex string. Parameters: json - A JSON tree node. Returns: A String that represents a color in hex value. */ setColor: function(json) { var c = this.config.Color, maxcv = c.maxColorValue, mincv = c.minColorValue, maxv = c.maxValue, minv = c.minValue, diff = maxv - minv, x = (json.data.$color - 0); //linear interpolation var comp = function(i, x) { return Math.round((((maxcv[i] - mincv[i]) / diff) * (x - minv) + mincv[i])); }; return $rgbToHex([ comp(0, x), comp(1, x), comp(2, x) ]); }, /* Method: enter Sets the _elem_ parameter as root and performs the layout. Parameters: elem - A JSON Tree node. See also . */ enter: function(elem) { this.view(elem.parentNode.id); }, /* Method: onLeftClick Sets the _elem_ parameter as root and performs the layout. This method is called when _addLeftClickHandler_ is *true* and a node is left-clicked. You can override this method to add some custom behavior when the node is left clicked though. An Example for overriding this method could be (start code js) //TM.Strip or TM.SliceAndDice also work TM.Squarified.implement({ 'onLeftClick': function(elem) { //some custom code... } }); (end code) Parameters: elem - A JSON Tree node. See also . See also: */ onLeftClick: function(elem) { this.enter(elem); }, /* Method: out Sets the _parent_ node of the currently shown subtree as root and performs the layout. */ out: function() { var parent = TreeUtil.getParent(this.tree, this.shownTree.id); if(parent) { if(this.controller.request) TreeUtil.prune(parent, this.config.levelsToShow); this.view(parent.id); } }, /* Method: onRightClick Sets the _parent_ node of the currently shown subtree as root and performs the layout. This method is called when _addRightClickHandler_ is *true* and a node is right-clicked. You can override this method to add some custom behavior when the node is right-clicked though. An Example for overriding this method could be (start code js) //TM.Strip or TM.SliceAndDice also work TM.Squarified.implement({ 'onRightClick': function() { //some custom code... } }); (end code) See also: */ onRightClick: function() { this.out(); }, /* Method: view Sets the root of the treemap to the specified node id and performs the layout. Parameters: id - A node identifier */ view: function(id) { var config = this.config, that = this; var post = { onComplete: function() { that.loadTree(id); $get(config.rootId).focus(); } }; if (this.controller.request) { var TUtil = TreeUtil; TUtil.loadSubtrees(TUtil.getSubtree(this.tree, id), $merge(this.controller, post)); } else { post.onComplete(); } }, /* Method: resetPath Sets an 'in-path' className for _leaf_ and _head_ elements which belong to the path between the given tree node and the visualization's root node. Parameters: tree - A JSON tree node. See also . */ resetPath: function(tree) { var root = this.rootId, previous = this.resetPath.previous; this.resetPath.previous = tree || false; function getParent(c) { var p = c.parentNode; return p && (p.id != root) && p; }; function toggleInPath(elem, remove) { if(elem) { var container = $get(elem.id); if(container) { var parent = getParent(container); while(parent) { elem = parent.childNodes[0]; if($hasClass(elem, 'in-path')) { if(remove == undefined || !!remove) $removeClass(elem, 'in-path'); } else { if(!remove) $addClass(elem, 'in-path'); } parent = getParent(parent); } } } }; toggleInPath(previous, true); toggleInPath(tree, false); }, /* Method: initializeElements Traverses the DOM tree applying the onCreateElement method. The onCreateElement controller method should attach events and add some behavior to the DOM element node created. *By default, the Treemap wont add any event to its elements.* */ initializeElements: function() { var cont = this.controller, that = this; var ff = $lambda(false), tipsAllow = cont.Tips.allow; this.each(function(content, isLeaf, elem1, elem2) { var tree = TreeUtil.getSubtree(that.tree, content.id); cont.onCreateElement(content, tree, isLeaf, elem1, elem2); //eliminate context menu when right clicking if(cont.addRightClickHandler) elem1.oncontextmenu = ff; //add click handlers if(cont.addLeftClickHandler || cont.addRightClickHandler) { $addEvent(elem1, 'mouseup', function(e) { var rightClick = (e.which == 3 || e.button == 2); if (rightClick) { if(cont.addRightClickHandler) that.onRightClick(); } else { if(cont.addLeftClickHandler) that.onLeftClick(elem1); } //prevent default if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }); } //add path selection on hovering nodes if(cont.selectPathOnHover || tipsAllow) { $addEvent(elem1, 'mouseover', function(e){ if(cont.selectPathOnHover) { if (isLeaf) { $addClass(elem1, 'over-leaf'); } else { $addClass(elem1, 'over-head'); $addClass(content, 'over-content'); } if (content.id) that.resetPath(tree); } if(tipsAllow) cont.Tips.onShow(that.tip, tree, isLeaf, elem1); }); $addEvent(elem1, 'mouseout', function(e){ if(cont.selectPathOnHover) { if (isLeaf) { $removeClass(elem1, 'over-leaf'); } else { $removeClass(elem1, 'over-head'); $removeClass(content, 'over-content'); } that.resetPath(); } if(tipsAllow) that.tip.style.display = 'none'; }); if(tipsAllow) { //Add mousemove event handler $addEvent(elem1, 'mousemove', function(e, win){ var tip = that.tip; //get mouse position win = win || window; e = e || win.event; var doc = win.document; doc = doc.html || doc.body; var page = { x: e.pageX || e.clientX + doc.scrollLeft, y: e.pageY || e.clientY + doc.scrollTop }; tip.style.display = ''; //get window dimensions win = { 'height': document.body.clientHeight, 'width': document.body.clientWidth }; //get tooltip dimensions var obj = { 'width': tip.offsetWidth, 'height': tip.offsetHeight }; //set tooltip position var style = tip.style, x = cont.Tips.offsetX, y = cont.Tips.offsetY; style.top = ((page.y + y + obj.height > win.height)? (page.y - obj.height - y) : page.y + y) + 'px'; style.left = ((page.x + obj.width + x > win.width)? (page.x - obj.width - x) : page.x + x) + 'px'; }); } } }); }, /* Method: destroyElements Traverses the tree applying the onDestroyElement method. The onDestroyElement controller method should detach events and garbage collect the element. *By default, the Treemap adds some garbage collect facilities for IE.* */ destroyElements: function() { if(this.controller.onDestroyElement != $empty) { var cont = this.controller, that = this; this.each(function(content, isLeaf, elem1, elem2) { cont.onDestroyElement(content, TreeUtil.getSubtree(that.tree, content.id), isLeaf, elem1, elem2); }); } }, /* Method: empty Empties the Treemap container (trying also to garbage collect things). */ empty: function() { this.destroyElements(); $clean($get(this.rootId)); }, /* Method: loadTree Loads the subtree specified by _id_ and plots it on the layout container. Parameters: id - A subtree id. */ loadTree: function(id) { this.empty(); this.loadJSON(TreeUtil.getSubtree(this.tree, id)); } }; /* Class: TM.SliceAndDice A JavaScript implementation of the Slice and Dice Treemap algorithm. The constructor takes an _optional_ configuration object described in . This visualization (as all other Treemap visualizations) is fed with JSON Tree structures. The _$area_ node data key is required for calculating rectangles dimensions. The _$color_ node data key is required if _Color_ _allow_ is *true* and is used for calculating leaves colors. Extends: Parameters: config - Configuration defined in . Example: Here's a way of instanciating the will all its _optional_ configuration features (start code js) var tm = new TM.SliceAndDice({ orientation: "h", titleHeight: 13, rootId: 'infovis', offset:4, levelsToShow: 3, addLeftClickHandler: false, addRightClickHandler: false, selectPathOnHover: false, Color: { allow: false, minValue: -100, maxValue: 100, minColorValue: [255, 0, 50], maxColorValue: [0, 255, 50] }, Tips: { allow: false, offsetX; 20, offsetY: 20, onShow: function(tooltip, node, isLeaf, domElement) {} }, onBeforeCompute: function(node) { //Some stuff on before compute... }, onAfterCompute: function() { //Some stuff on after compute... }, onCreateElement: function(content, node, isLeaf, head, body) { //Some stuff onCreateElement }, onDestroyElement: function(content, node, isLeaf, head, body) { //Some stuff onDestroyElement }, request: false }); tm.loadJSON(json); (end code) */ TM.SliceAndDice = new Class({ Implements: TM, /* Method: loadJSON Loads the specified JSON tree and lays it on the main container. Parameters: json - A JSON Tree. See also . */ loadJSON: function (json) { this.controller.onBeforeCompute(json); var container = $get(this.rootId), config = this.config, width = container.offsetWidth, height = container.offsetHeight; var p = { 'coord': { 'top': 0, 'left': 0, 'width': width, 'height': height + config.titleHeight + config.offset } }; if(this.tree == null) this.tree = json; this.shownTree = json; this.compute(p, json, this.layout.orientation); container.innerHTML = this.plot(json); this.initializeElements(); this.controller.onAfterCompute(json); }, /* Method: compute Called by loadJSON to calculate recursively all node positions and lay out the tree. Parameters: par - The parent node of the json subtree. json - A JSON subtree. See also . orientation - The current orientation. This value is switched recursively. */ compute: function(par, json, orientation) { var config = this.config, coord = par.coord, offst = config.offset, width = coord.width - offst, height = coord.height - offst - config.titleHeight, pdata = par.data, fact = (pdata && ("$area" in pdata))? json.data.$area / pdata.$area : 1; var otherSize, size, dim, pos, pos2; var horizontal = (orientation == "h"); if(horizontal) { orientation = 'v'; otherSize = height; size = Math.round(width * fact); dim = 'height'; pos = 'top'; pos2 = 'left'; } else { orientation = 'h'; otherSize = Math.round(height * fact); size = width; dim = 'width'; pos = 'left'; pos2 = 'top'; } json.coord = { 'width':size, 'height':otherSize, 'top':0, 'left':0 }; var offsetSize = 0, tm = this; $each(json.children, function(elem){ tm.compute(json, elem, orientation); elem.coord[pos] = offsetSize; elem.coord[pos2] = 0; offsetSize += Math.floor(elem.coord[dim]); }); } }); /* Class: TM.Area Abstract Treemap class containing methods that are common to aspect ratio related algorithms such as and . Implemented by: , */ TM.Area = new Class({ /* Method: loadJSON Loads the specified JSON tree and lays it on the main container. Parameters: json - A JSON tree. See also . */ loadJSON: function (json) { this.controller.onBeforeCompute(json); var container = $get(this.rootId), width = container.offsetWidth, height = container.offsetHeight, offst = this.config.offset, offwdth = width - offst, offhght = height - offst - this.config.titleHeight; json.coord = { 'height': height, 'width': width, 'top': 0, 'left': 0 }; var coord = $merge(json.coord, { 'width': offwdth, 'height': offhght }); this.compute(json, coord); container.innerHTML = this.plot(json); if(this.tree == null) this.tree = json; this.shownTree = json; this.initializeElements(); this.controller.onAfterCompute(json); }, /* Method: computeDim Computes dimensions and positions of a group of nodes according to a custom layout row condition. Parameters: tail - An array of nodes. initElem - An array of nodes (containing the initial node to be laid). w - A fixed dimension where nodes will be layed out. coord - A coordinates object specifying width, height, left and top style properties. comp - A custom comparison function */ computeDim: function(tail, initElem, w, coord, comp) { if(tail.length + initElem.length == 1) { var l = (tail.length == 1)? tail : initElem; this.layoutLast(l, w, coord); return; } if(tail.length >= 2 && initElem.length == 0) { initElem = [tail[0]]; tail = tail.slice(1); } if(tail.length == 0) { if(initElem.length > 0) this.layoutRow(initElem, w, coord); return; } var c = tail[0]; if(comp(initElem, w) >= comp([c].concat(initElem), w)) { this.computeDim(tail.slice(1), initElem.concat([c]), w, coord, comp); } else { var newCoords = this.layoutRow(initElem, w, coord); this.computeDim(tail, [], newCoords.dim, newCoords, comp); } }, /* Method: worstAspectRatio Calculates the worst aspect ratio of a group of rectangles. See also: Parameters: ch - An array of nodes. w - The fixed dimension where rectangles are being laid out. Returns: The worst aspect ratio. */ worstAspectRatio: function(ch, w) { if(!ch || ch.length == 0) return Number.MAX_VALUE; var areaSum = 0, maxArea = 0, minArea = Number.MAX_VALUE; for(var i=0; i area)? maxArea : area; } var sqw = w * w, sqAreaSum = areaSum * areaSum; return Math.max(sqw * maxArea / sqAreaSum, sqAreaSum / (sqw * minArea)); }, /* Method: avgAspectRatio Calculates the average aspect ratio of a group of rectangles. See also: Parameters: ch - An array of nodes. w - The fixed dimension where rectangles are being laid out. Returns: The average aspect ratio. */ avgAspectRatio: function(ch, w) { if(!ch || ch.length == 0) return Number.MAX_VALUE; var arSum = 0; for(var i=0; i h)? w / h : h / w; } return arSum / ch.length; }, /* layoutLast Performs the layout of the last computed sibling. Parameters: ch - An array of nodes. w - A fixed dimension where nodes will be layed out. coord - A coordinates object specifying width, height, left and top style properties. */ layoutLast: function(ch, w, coord) { ch[0].coord = coord; } }); /* Class: TM.Squarified A JavaScript implementation of the Squarified Treemap algorithm. The constructor takes an _optional_ configuration object described in . This visualization (as all other Treemap visualizations) is fed with JSON Tree structures. The _$area_ node data key is required for calculating rectangles dimensions. The _$color_ node data key is required if _Color_ _allow_ is *true* and is used for calculating leaves colors. Extends: and Parameters: config - Configuration defined in . Example: Here's a way of instanciating the will all its _optional_ configuration features (start code js) var tm = new TM.Squarified({ titleHeight: 13, rootId: 'infovis', offset:4, levelsToShow: 3, addLeftClickHandler: false, addRightClickHandler: false, selectPathOnHover: false, Color: { allow: false, minValue: -100, maxValue: 100, minColorValue: [255, 0, 50], maxColorValue: [0, 255, 50] }, Tips: { allow: false, offsetX: 20, offsetY: 20, onShow: function(tooltip, node, isLeaf, domElement) {} }, onBeforeCompute: function(node) { //Some stuff on before compute... }, onAfterCompute: function() { //Some stuff on after compute... }, onCreateElement: function(content, node, isLeaf, head, body) { //Some stuff onCreateElement }, onDestroyElement: function(content, node, isLeaf, head, body) { //Some stuff onDestroyElement }, request: false }); tm.loadJSON(json); (end code) */ TM.Squarified = new Class({ Implements: [TM, TM.Area], /* Method: compute Called by loadJSON to calculate recursively all node positions and lay out the tree. Parameters: json - A JSON tree. See also . coord - A coordinates object specifying width, height, left and top style properties. */ compute: function(json, coord) { if (!(coord.width >= coord.height && this.layout.horizontal())) this.layout.change(); var ch = json.children, config = this.config; if(ch.length > 0) { this.processChildrenLayout(json, ch, coord); for(var i=0; i= b._area); }); var initElem = [ch[0]]; var tail = ch.slice(1); this.squarify(tail, initElem, minimumSideValue, coord); }, /* Method: squarify Performs an heuristic method to calculate div elements sizes in order to have a good aspect ratio. Parameters: tail - An array of nodes. initElem - An array of nodes, containing the initial node to be laid out. w - A fixed dimension where nodes will be laid out. coord - A coordinates object specifying width, height, left and top style properties. */ squarify: function(tail, initElem, w, coord) { this.computeDim(tail, initElem, w, coord, this.worstAspectRatio); }, /* Method: layoutRow Performs the layout of an array of nodes. Parameters: ch - An array of nodes. w - A fixed dimension where nodes will be laid out. coord - A coordinates object specifying width, height, left and top style properties. */ layoutRow: function(ch, w, coord) { if(this.layout.horizontal()) { return this.layoutV(ch, w, coord); } else { return this.layoutH(ch, w, coord); } }, layoutV: function(ch, w, coord) { var totalArea = 0, rnd = Math.round; $each(ch, function(elem) { totalArea += elem._area; }); var width = rnd(totalArea / w), top = 0; for(var i=0; i constructor takes an _optional_ configuration object described in . This visualization (as all other Treemap visualizations) is fed with JSON Tree structures. The _$area_ node data key is required for calculating rectangles dimensions. The _$color_ node data key is required if _Color_ _allow_ is *true* and is used for calculating leaves colors. Extends: and Parameters: config - Configuration defined in . Example: Here's a way of instanciating the will all its _optional_ configuration features (start code js) var tm = new TM.Strip({ titleHeight: 13, orientation: "h", rootId: 'infovis', offset:4, levelsToShow: 3, addLeftClickHandler: false, addRightClickHandler: false, selectPathOnHover: false, Color: { allow: false, minValue: -100, maxValue: 100, minColorValue: [255, 0, 50], maxColorValue: [0, 255, 50] }, Tips: { allow: false, offsetX: 20, offsetY: 20, onShow: function(tooltip, node, isLeaf, domElement) {} }, onBeforeCompute: function(node) { //Some stuff on before compute... }, onAfterCompute: function() { //Some stuff on after compute... }, onCreateElement: function(content, node, isLeaf, head, body) { //Some stuff onCreateElement }, onDestroyElement: function(content, node, isLeaf, head, body) { //Some stuff onDestroyElement }, request: false }); tm.loadJSON(json); (end code) */ TM.Strip = new Class({ Implements: [ TM, TM.Area ], /* Method: compute Called by loadJSON to calculate recursively all node positions and lay out the tree. Parameters: json - A JSON subtree. See also . coord - A coordinates object specifying width, height, left and top style properties. */ compute: function(json, coord) { var ch = json.children, config = this.config; if(ch.length > 0) { this.processChildrenLayout(json, ch, coord); for(var i=0; i |wUf+g|Nx @_k^i;y\xoݽrW.N+@w4ώ;['~E]fͥo+ Sީ&=z= wQi: >yy9w!?oO\~VފQi: >yyU2W<]Vxcvjҳ+]ć^srƫXU{0OS}_CN{ftzk*& H?̬4´'ώךn;?$xάL|rVX%wm OW{.N`hi4z+ěK߄WZbWXj׵ˌyJa=xK$_y: >yyU2S{u4J9d&vg|1S?qaWpywp~蝆g\z'Ү0QSWKX>oOt|˕ט;j@y$wW]Mz^yCA|Q պɬ4´<'ώךޝ+}*˰;8oWݾG/aj?Ww3NN;⴪>p'1NMx%Vy~^rn/䔓~^wHS\'ZeTˣxOzf?gW7 I*Ϝy+NW߃X]{dTaZ9wWCuw +NJ+t}Omރ)3A Q:\\+ i'\V^wh7)s+?5ɛ;+-*SXjS {"rN_\w`jTsN&vHsW?epI[XKϞurw2ʳ=3yLBr"#uS?qRUWyU;nO.83;5ɟVXI,5S?q^}/cm;%jggFrW4Z9{m~g2×YU:ɝ_y+Mz~5SZ]ͬڿbO;8an8 KKː9ܫ8'US cFYLro.9wUc=ؤ_qpk7vO|%^;^iꧬx_ȱ&k>KWW~Egwf2O0i\}G\ 2tJ>3wt_KAz6\WK{9W{;ZҦf~Pg3ۚjnŝ`̔~rFS pd0k'$Z${eҦ_ʳOΚNg+;gNJa' תfN磎5SMS yg҉|RWLZ<ONrgvW\_aʤ_iymԲF5:>{(Ыͯ]tjwʳڥM9Ԝ`eXSw1S>~&͘tgYa@W/~r]-.ګ=)CÄW=/󮜩8LݝE5ϦNׯX;f <¥=kH,{v.xUnjvzJzΨtUr.{譕+Gk곦R$uzz<2ƽګMfOK5@WjgT{IGnK [8+9NOUS;V: ϕX4~&gvrɚWAw3YÄk}??S#wqyM亚jh;jg{ߙ!m;R[ųe{e_͘\;Xj.3xȽ~7/EXRW<}Wn)zfV:NiujZDzw9N#'ߕ$lv^y&}EuNݷk:ԝEM7%]+%\K_ ' ϳw琎>3SĽ)ޜT zOoKO<۪~:c< F_QlpɱW^UoMk9ULUOg>9 59T cvgnőO8\T/jƵTz3Pl<K_ W{ɹ_i:p-YUf7Hu XWorPCjrʓZ7Ye3ξvnvjj u%;C>5 8WLsMݪ风5u;5'hg2N:r8};5;N&5d:ޚ%o zY~ueӻS3xUSy2VSQ4˒nWea9;S\ԝ99 VZ>$DO?8`Mi͜LıW>yZy&?J]SϚڮ2de]XK!Բ,e]7@f[qO8W<ԙ#aֈbϚN9+~@>FRw 2YK"]N<5}Wu+_}s|5$eI-R܀Rg|%7:Zw^x/xSuuN}=ygLhÝhyQW}'ڼ>1ynnjei'='53zwo5c*㊧D{9vj\֫v*cLOK.y&UՌ3|h bDլ;|8I]Vy@ˇ,f]ͺ+ 1߅4.13j5:YU>YI̔/,-\j_uO Iԓ;1,R|2VJWY+)tswiYwzԲ6}SOyy@7jõ7oVװ?5^Wzf^e++gYfş]Y'ԾRw'}SO^[V!g`]L XScz3_jƷdarb8.-D+t~s} a|Nn[:GNy;+gXi[{@NWQ˚u1ثfo>1^x7{'=kj^zI-_3#{@8d(}U}53NŭzkRU/OKl3WjfjYi_1IևVȉɃ$Z]qj+{I\;}j˾v{55szyo5c "O_sQyzcve)Il9ȝ99]Ռ;9(@mWrOU}b 8ղ/uwIGI̮^[Ɛ_$c.R3Su\c0/;/GLuΚEq 1j3嬥Uݽ˩Ǟf3V.x} tN-kHʒZ֥xdi_GĈKxsO9fx.QMάݾU:M#X`tuQ'jɫתtϻ5Q|MF8W*zv5uI$G-r^_2 FjYCrT2㴞uYc21'u'}j˚Ӛ9'u7gAJK9 9> DÌ|r:\\j3y 򲟻s'%yUt*<3W5'Qڮ:| P>5 8WLsMݪ风5u;5'hg mhAзS_j2kvJg jg,Y۩9wrr*>֕؇VȉKojX3ɿ)Z YҬ^dmo<{a:gt==]yO;1;A(`}AݜNg&=+.w0ZyOaaz:;Ӛ3XPϜUM/|@~ afGOW+kzcڹIys=uSsUJc.:֓ lY~@.Mo»3Iȧ}jWx.i5UMO Zi*NoyU]ͥ0.ΜgN{쓯zc̎WY3-gW=1ʞXS7<[WR`78Ӈ3IwGέpM+/ݴruO1\Ҥμʾ6yJWiC4Yӟ5u?U癞z}K7Bw}9굘^ϥZK:䄓N{%q=i+nK {:{:_߰ pߩɛ͞t&9kb>~v뺽wWW.WwEGw֟bXG:rً#}k@wuw.J,Uόo>9u5?Ubzr'1'K}ך+nKI?i u?U>HwW ռΓg.}Wc,g 7Y%P{Lf \ ~IDATNo+LHϤ#'ߕ$lv^y&}EuNݷk:ث.ƿtuΘt2z>5;4Zcީ3ʬX=kw ϋɕӝpSL2ֽfL|u,5S_ZD]͋U}E13'ZŌx7Ou1?y}TU,}Y|XSԱN-Avut]Ϥ# [>~[wo~cS-k.+ó?p/O7'zSV 8{&^]9Sqϙ;)kM5:c.+2v9eRW m pf.Úq6nƤ5=˺;aTwI13;}0qZ'!I:֔}U^W^#jYSiYAr`Q$#: U`iS5Wvp]r8OU͜Gk꧚:ADO:z:vvp_S1VS3z1ۘwy|L^gTWV%vO].u'vjz?Oh?ԮqK{>SSibyAxruܵVY_q; =u!ǚ̠uzSQW/oqeM]سVfW狯4;s ss'Gl]W ƙ/5:ߤYX r-djkO]NYƳWM}՟bky%ovjW;)+9cr]M}[DݠNG|G-W3v0ג67;Ts+c|\wK]w6? CT_MyG_ek&@A|r;R{gqFbƩ7qUp.g^͘~&I55YSQD?䮮*tS.9t>W1Viѯ^gJN8IgYN+]b}oYajՓN3gn/yRc NOiO>j?t}Ȏpgƪ!}nO1Чڋg0g5cu.^fvǥ}YQpYsJG2TklZT>a^Ӟ]]y:"ǚ @#?T֒g}¥j/N8-]gvz*.lgN9+W{+2kTpԲr K^q´t\<[rw.v u^W^އv黣2:I NO'ˍ&zjW9OY;;XjN{^JS-?DwqKsU K^qƬgwr'Mǝ^W+=x?}|@v G-k[y*Mb5Oy; Ӳyתn^w ^i^M_iy?RqO:> >?T ]pht\WśW՟wSfO|.uWˬI?/Iw?|]pV|OWXJuO@d!og֤&4kDM=k}8kϪZ+LJ;Tkq?ȣ<.UO{W,5w,7j?k?  :9\+l3skW0-\ӓ;yNfNvN..w]aZՍyWg&W,5wS*{ֺY'wWlƴӻW:^γZyNy2&Nfs&vg?e-9H}hɱg e^9Jzb_qU{enNڎ;+mb{_yySAK:Ou}5`9cɩJ};ؤj]͜v;Mzس}2N.w9&Nx M܇g3L;+mb^wl!z坴/  r{+Mg ':}´wՙy+mǟvKMس~U+zY^|һW:^=w^ zZy'Nf'_$7}7Cx#1{Opz*_FxW+MǟvK;6> :w|ϸu~♭^7ywjwzjst3V ˬ;1KPٳ Gn8;agm8_8:<ۤ[w39wWIJΞW ctJI ':}´UWOJ]Ѥg'N?l ܳ^iwgLϫZ7åI>Zv4wWIJ5&JCU{+m wމ%'L7;={Нs4W&=YA N녯<++]bxS^@~=?+w\WΕxwiz'(C̯N#sTkٌi>yiTg0.j^ySYwx;+o+^hμL♽k9=s9֕ꓹ Wy2m=}PL3  ZzyӽA> "S~<\Vڬ??+-u,:xdW:Vgٙf%G>|\SUu Tnn98ρfmsYiy8֋וW7Nk\{0db9|Ró[{lFY ~x 6chxvj8g85ZGWz/;Jެwo#=#6q;<󨞁JSK7)ArƌCU?|@4<fn~5{},\❾yig_`7wvk>8o?+W:hxfuWs.Nz-_gڻs`/1vni9C,Uc}5AT?MU?{x<7é\~w~gYJ&+zs`jfztţm)Nm纰Js'OxlgdM;ZV,/@?یFZm٦9ӧ^ו=oOF'4<^3X7OqyT|8}qY\n2MO.6Ȍ{āq_N'͛q;V]s[?=\koZp;f8*i%O<UcýCoT3}3NeoW{kraqMygFF>b̛ T&ܴQ&6chxfi+ua-~̓7kJo^jo{79CpTi:=eyj|bjû̯rMU?{xܿb]sqzu4q&_{?1>jYѽqTvL7Cx6wj87é~ĉY;?;~dd9wy{y{A`gZ7g4.k˥G4焵'n8-\w_N4t?rTϯ8t;x=yZ2p|WmnaOLsR׹N8}5o(k4.5/uS=s+JxgxĶY~ߓWJ^5Msc΁UyON|{ T!'?y2qh;uqmSSyJƵlRksਚҵ>:7Jw_zA2dԋ)3#549a-Wo+}'8oe<3g<#OfprVj?zAy]93S[ƹwze|qͰؙ->5h\Ɠqʢ>Ԇ7ؘ5.rpT?ܬ6m9#N<ҏY߸zrT8?3xߥiMo<)ν3zvWZZ&oȳg3fŷ[gYi9ǹo`^Zރ7oBȨ=XU{>Ź ̄y_ӗ7^<|΁][aTrTϬ8`{y kv_5N׵OqS>- ^]ݙ\pM&sb=YOOAd^Qֵ;8>9 Nm']gj8Ϝb?XkZqudz˚`x1ƭ2;Y6cơĭk4\~Df-@` k2ϼ_ԖqNX}gW &{3ڪfţ.V73jϿbdȷzrmLES[ƹNM=˯O| eS5Y3'~n Bȃ­C^7oyLpޑO9^QG${GK_UMnq ϥ>rl4M_GM 9Zf9OοADtsey]aUVԖqNXg߼9w3ڨfX:]Rӷ {gj].s'}'nCզ9'޵o`Ff>i3NY>IN2'\Cƅ\싧y[,={'y~8:7ҴH3ɍjW\t?W^ ~I_yo:6Yk_y.=\KꊓŹzm+ʏi|ׅnƧc46s#o oxg}#OfԻLc/'&zfiq+&;f'J.e^;yO9f;'!7(Ȃc.O3.=Ky}▝qh8Z~ڬ&Ofԓ:ԥqΑ䲺ipUx%N} ywFO <>U85g85s޽Χߵ<5Kds^MbI/\+Nf55ψ'i~ə=/^h\zG3eZ~^&_# ャ'G.1zܷ'ս3,gvN88uQůnq~O9aϩggFjK'C!T3^u\r#<{*9?85盦~iIUVs+5ꥹ2rs>+ ژ5ZwYNzb*sZ]ۦA@ v짌֪?ž_i?s|@$ji8?"^hdT}8<#wһw5;uYu-qŝ,8ѨpTVX:Q^kwisV{&'yf~ ehM|SgEWΫc㜰kWgӛϹ\}[~Z>b9 k__8=u "3Vgd>]s`U-w68-pu{͇RFwn8OXw9rԣ%7>l.S+8qd޵V6uVKzq;K7T`eSRreF8'Y8r h͜4-frٯBhwtRqzfsT߮U}a隭%֪o焙soPل}zXTy }so΂_yGC[O{2 \b̛iIz-fk 9iQFu5s}N3ix'ʏʫxwƣyXynxxĽ x5t~ಢYhQ6˥6|F+_,#fUeʻ[yU}y?3v͠*3.8,4<'>kwi}@+HnUw2;f4\h' ktc556ν3Zow|ݹ[H 7;wTGk鍇c/#N!~^81_0܌5]πuǻ3} H#Ϯlkx8a4ʹp>trxUFt ͻ?=d9}@]w2'O˻DIʊc9˚2<ٓф# Cī̩}v=7VX;\'|hOG9`ׅ]㥗/tϸ3=wΣ={ ܮ(s;]򡷳3=ΑWՍOuNXy3af80駾fΉUދ9@0dhW^v>N4T}K>d?pxT}{u_==V\5_"M܉7;ȿ7{Uf9OYernd4$ws ;xQv2̋麜t_ >OKNv>T;2Y7Bp=V3v;s-#t2GLw_~9͎> ~T<ɡVNi~o ǣ῝kgp7Er=~Mr;uޙw'N'doi}@r?_^?:'4ߊOouOw{ ~Ot?}@>[o=;̮μ;pz>'{xLi[93kg3㞆v?> w]Ioi\'ݵ̑7WguosN'l^x ݃oI$3,g̊*]޴fsK'rwIĻ} rw܉/N4#NȋW3<9fs˹̓܉;7Unq'w|hzŁ=:+z~δ;>2sɜǝUstnn{ssdj+πc64x8y0*Xsw}Y-uק̉=FC9{;> "2;p3wxtvԒa-ӫy/N+}{\97ɟ3W3 Lc|8n7;Wٹgi1Ҥk;Sm]DxF3<׹|;)6dNFxwxgsCXUW?=syh<2's3<|04v2;Fz)7:3^'BV6x4ҴK^wyxϰeP8IDAT<Ӱ8^7y};> ̢zv|38 `n4'ygwgf4]Vy8ɷʱF~V/ ܪs .NqΧ}s 9#3k+CayW3sAslx7,sl{a4fy\ 璟lA?[ 0fϼ3Lc?@#ɝj8皮c:Su[FVξuG㬞lgGy<(졙w7ۏ|MI}5~1Ot-y{_\wģy΃gipSxo|V+uL|kl9bRekw|#}O\aVK/ZQȻxϲ;>Fu/+r@ݼ#}yZi+}N{x-ԋ}~7 ձ櫇~ksߌ_i uꑟY}3nh&|ь͆י2k0=>u㼰6kOm;,i *=6/涵+fY>νpЧ޵Įkj߱rٯfs֣ݩiXO>u0;^e9o3$M:Y8ŗfk s-}Ur6z0\+u>[90+L>g|Kלx،:Js?l|#Ͱde6Y9۩Ya7ǹS? l|YA|(gL8<5i6};T8-ٙ=*zQ~Z>b9ϳ/3Vq8[~@|# ?F3}Vr'޽3[ zﯮ9{syΪ]s<0Y~isx-qjnj.4hf;ݻKKg*<յS8sԼonV lO=>eiq4ׅ?n74;弼tvzbjȏy0Iu Y'3#/+gx>/5A|nZ.6I ^|'GONV^ ^]o3M:RK{0UY6͹]|As{}1?<7i#^s\c'3̦o~vyF|9:+~R{u~3C:*;Ϟ1{yj Åu}=ȑ^{98Q,eOi[}`!g$=,xV fO2^|<ҋs5˃~Co mZùnM}ֻvNܬ}i+9۩ uO&Rg8/b^zX2#yײȠ5\2'vݯW>4*nmunX{x?œ%L4dF܈g|Qxqn/5)q+ӻsШMV:b69?ӟ1yfMK{0pڴ|$^~-q29/y>x> n2.f8CsS<UrrL;i ,nT8f_ŧfYx8w+n/xw?<z:<kVrʰw+9U2MuSYqEpf=q} 3Uo>T7W^x35|\Cӝ÷Sv.ϔ6]R=XgTi<<_97QX7fkkY8rރK' 3sz|wtѳέp:^;Fsa|Tyf>wN3yҚ Z,7Nx|y2C~Π幋yqMs9JǷ[v 6saΒڨOdF,S}p|@w̝]+ė+x2s~xιFjث49ǜS`fҷ'\+n* 8g'3,Xʫ0䚆GOufi_z۩s¹ae|N9RdwqIps>3_sSW~٥zq r:2G98Л~#M|y+\SW:׌?kޯpfiYŻid+E`YqDA8-?5SsS?|0Yr9ޝo7uڬGj:˺0g8fvַ̊{ jtXO̝3k snCUfx\2\3yj[atqzw5E NN2[P dqP8zײ5NW0>jp_ӗ'Iy\ú6;Zzg=g7yZ>0O9~M|Шz;s93YF,pRMsn;}˧%I"4ާ5~+ռpz%_{)wL.^7yWpwgꝛᦍf>r&;=мͰ?}pu5黳?'YFyl˭8nIf>7z(k+|=^UeW2%NOGMs.u+K>{4jA=c?DXy}Frޯp>-]VS;Quϼ׉ne*f?#Qm? 7b?ʶ|j;EhCc㦻kV\ 9ϜyơQ}9zs~?-\?\_fϏg}@7;Oqyqpܨ23;wyCkqhsWڃiZo0-UojyqM3-8+JϹ>>޽`φS[fŹ~ ׃Uu]}w?H`uWQ}w_^לs,Ϫ9 gy֣Q8L7_qŜS lPU bvrEEՙo1/=8Tь' S/Nm]̹[>= e콰Ԝ癙߳,]+sgݲ+ݽ 5M\ӝ}f6\;:Mȗ޷o8 rKꏃ~KixVg4L^rkkf%?]Su60qhz1;i|{0@>1g>iZ\LԖoά,ϐwv2YZgc!zx33-/50ڪJf5ojُ|ߪ9/y+=:uQu<4s\3߶D-Zl<# ɡQW?s]xL>OnֻCS[=ŨA ?w}z s8YeMxşdG{h|\Kܼ+7ΔƝx=5|77AHfWs\+Z֗HW?xqh^=9.|zT6m} ~s3@55fxez礶9;wwo^͓ܬwIe]sCs+y7naUy+I~?6=7*yds ~sv_~ ٩䩞q'xj&fk 8O,c;Co>o]ٷy}nrܧ7>Yfr1s.~o G9mN 03Uzggfq~lӒ7/Ugԙi+[.o'X .4<;<3+鞿\M6>9k`3:˺9w_pkQ/mUSYg3#707?g%һFչ:Ә<+c7O07gpdV?gZ;ܿyo6mD7.ngj誻gIپ?;N۴o]rq6qJwoQvg^Zܬ{FgHs:4na> zfM&&״朗Jf5]|]iW7~+JgΪrFp9;Yi+ngvkxqQ[Cm䚷q[M|'{'zύu<Ғ#gZV9ǩe?6͹fD$7\bZ2 +tyGJԽ_QuV'umڊw LGu<7V{+Ϳis&~%?];x~o٬9s:kr1IENDB`Spreadsheet-ParseXLSX-0.35/nytprof/js/jquery.tablesorter.min.js0000644000175000017500000012652314576335353023553 0ustar michamicha!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(A){"use strict";var L=A.tablesorter={version:"2.31.1",parsers:[],widgets:[],defaults:{theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,resort:!0,headers:{},ignoreCase:!0,sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",duplicateSpan:!0,textExtraction:"basic",textAttribute:"data-text",textSorter:null,numberSorter:null,initWidgets:!0,widgetClass:"widget-{name}",widgets:[],widgetOptions:{zebra:["even","odd"]},initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssInfoBlock:"tablesorter-infoOnly",cssNoSort:"tablesorter-noSort",cssIgnoreRow:"tablesorter-ignoreRow",cssIcon:"tablesorter-icon",cssIconNone:"",cssIconAsc:"",cssIconDesc:"",cssIconDisabled:"",pointerClick:"click",pointerDown:"mousedown",pointerUp:"mouseup",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[],globalize:0,imgAttr:0},css:{table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},language:{sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",sortDisabled:"sorting is disabled",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},regex:{templateContent:/\{content\}/g,templateIcon:/\{icon\}/g,templateName:/\{name\}/i,spaces:/\s+/g,nonWord:/\W/g,formElements:/(input|select|button|textarea)/i,chunk:/(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i,comma:/,/g,digitNonUS:/[\s|\.]/g,digitNegativeTest:/^\s*\([.\d]+\)/,digitNegativeReplace:/^\s*\(([.\d]+)\)/,digitTest:/^[\-+(]?\d+[)]?$/,digitReplace:/[,.'"\s]/g},string:{max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},keyCodes:{enter:13},dates:{},instanceMethods:{},setup:function(t,r){if(t&&t.tHead&&0!==t.tBodies.length&&!0!==t.hasInitialized){var e,o="",s=A(t),a=A.metadata;t.hasInitialized=!1,t.isProcessing=!0,t.config=r,A.data(t,"tablesorter",r),L.debug(r,"core")&&(console[console.group?"group":"log"]("Initializing tablesorter v"+L.version),A.data(t,"startoveralltimer",new Date)),r.supportsDataObject=((e=A.fn.jquery.split("."))[0]=parseInt(e[0],10),1

<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK![axl/_rels/workbook.xml.rels (j0E}-IR"gS ٶ{ d4ӇM1f{}vxGG5 (&Ec*{ Hˮjnz^Ő;MIi]ٗΏBFi}{翵mY69>C,uGًjW!+-dybaZ;,^i:kK„&:%$ l!Zaa9%?%Rl%&LuZO cȾPK!:_vxl/workbook.xmlRMo0 Or-siڦq&94.H*I)9EtL찓%űTIŔΌzЯÔ\ =n'H]B Y@c%7S\e WRE,Qɥgs?XP< gEW;/qDq_ :4S-U N%r^+Byv db-q?M!%Ǎ4H9EkOlEB]>䙗XmBaVt5Vg (3pfWhO4u١n=l%q!l4aqi7PK! xl/worksheets/sheet4.xmlM0,C>w ݮCւMm'i},8f3@mJ&4\U!dן/(1˂7JBBOwU7SXiZ[E@bTbm:Bҁa9<܂DC-7 MB`=h(z @Y əX~  %a'\$>yn>B$S2&-1=^a|Ӥ]]?jw3<2w 5:ɝxDk[/i 6ol }!C׋PT=t 4tuj =fMMnyNu<'¬|X73*V>c/Q_8t73aԹ;ޘg6ݰ9-PCruhjG❞lWJHC(UBozlU׫8ݓV2+܀R);^ܣ%PK!}utxl/worksheets/sheet2.xmlN0H;uZ@U.BidXu{Ϸ^7oKPK!(|txl/worksheets/sheet3.xmlAo0 N YQlڴ-T=II?na7)F+AW|Iָ?n?Iv蠒!CyB(B%R`a8R: ΦѪ"Ԩ a]gx0 ăՑ3Y!-J>FOe."yA|M׶XhR(C1r}>i{B60[£.=EΩN wݤUɓTG:yZΚ"CP2`|R۰ *Cl\1'/;*lcNN#/YZ;3XDG:YoB@ctߴ BGlQ q^GVn 4lE;xޤKRPK!s_txl/sharedStrings.xmllAj0}wO$'M(AR='qio, vO74[ ]ϏK. /2e5o"Ikn{LyD/\RYnǂQҠwu @y"qo@M&|@c[ފl[]oeYq:_We7_a-˲kPK!0 xl/styles.xmlS0 ﻞإ-IR(lKaЫ؉A ~}$dOH$gσvU!r~|8p\k㚜?rQZw*磊EAJ!#s"vUSNV" J1YIXi/2FV!u,(ʃ "NZ5g|``R8O)0uY|HA\~ )5@"$ L[Ԙad7A@LYCMϡ" i}G#zKFmd2ŭb1N^ӄ~w؃fgӬ7,7; 6c`XG5]0; ZQL;TѹG?iN3KKi}7ƭ,66i(Kz.i"-$/a7Mo?Y?~Iq|Vk{PK!%Sxl/theme/theme1.xmlYOo6w tom'uرMniXS@I}úa0l+t&[HJKՇD"|#uڃC"$q۫]z>8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ K(NhwŘQ6㶷 [SYJ(p»g>X_xwu{\>k]Xy}钣M26PsFnJ'K,}䇦$Ǵ;@` >*8i"LI%\ xӕ=6u= r2f 3c (:jZ3sLs*UܚЅ ]M8kp6x"]$C<&>'eb. vJ|yXɾ8Ȯ]7R /=,.&'Qk5q&p(Kaݐ Sd›L17 jpSaS! 35'+ZzQ H )7 5)kdB|UtvaDξp|Fl&0_*3n'LE/pm&]8fIrS4d 7y` nίI R3U~cnrF:_*P}-p Tpl rۜ4LZéO !PLB]$K *++65vꦚeNƟf(MN1ߜ6&3(adE,Uz<{EUϲV)9Z[4^kd5!J?Q3qBoC~M m<.vpIYӦZY_p=al-Y}Nc͙ŋ4vjavl'S&A8|*~x1%M0g%<ҭPK!S>xl/worksheets/sheet1.xmlMO0 H(wv_ipZ%6- 7ۯ8hUW*1GgS̔.b{:3Y&:1"hҹf!MKaM-1 8梖J0a`6jЮR5'QHk 1yWb=" Nvq OY"X m~^2$_|n;/eC^(v柰N&#!ŘFmqEUi GjzMCWTбokU(U=t{Py: }cj^E6gi - '^0bMWqC>g%S;##sBHPK!)cLwdocProps/core.xml (QO M FI%jowPh/mZ=Dsog[UE`u$Ah^ zY+9ϴ`U@;phVP^[x%(h㽡;$8tWU̇]c'[N+L0p @D{|٪;L&z=XNtȩߙ0>-x/iIu1B~ݨ82r ׶|*z琀 (M)=+\%:\y*ZY&cY+ @K+Q6h1C;mŲ_ )XQV6&ClR?}|P0p;Z\7#HKCGWA #ssWAZ/}z_<0mP,wR)ߌ{P"(P[KA<ۉ76z z\y:;j_PK-!U6+w([Content_Types].xmlPK-!U0#L _rels/.relsPK-![alxl/_rels/workbook.xml.relsPK-!:_vxl/workbook.xmlPK-! i xl/worksheets/sheet4.xmlPK-!}ut xl/worksheets/sheet2.xmlPK-!(|tqxl/worksheets/sheet3.xmlPK-!s_tQxl/sharedStrings.xmlPK-!0 Kxl/styles.xmlPK-!%S@xl/theme/theme1.xmlPK-!S>xl/worksheets/sheet1.xmlPK-!)cLwdocProps/core.xmlPK-!YLe3docProps/app.xmlPK R!Spreadsheet-ParseXLSX-0.35/t/data/bug-md-7.xlsx0000644000175000017500000001457014576335353020063 0ustar michamichaPK!SA[Content_Types].xmlN1&C+<cX8j;6tۦSق/|v:n:֐_r^co3傇otr}5o# #ǚ9{)Q)!JR2J/px+u|r'Gheϻ$ rkY5W1:U\{s@A҃8.π&YlR~Quɍ!-CXM Mc5WI` ;'*:e44,蟃|ȑaxOs-=|PKt$X%=1 _rels/.relsN1 @%iBM{AH!4|I<&GI ӿ'Ebzcisqջ7PK!aI zdocProps/app.xmlAO0HwBc îgL ǶfhM!8%T4Šm@wlz\b0$ql#HLjkC^H?S⁁MW=_ ʥQ1):bըU!W(>Ჸy>-OPK!:U:kdocProps/core.xmlj0Eޖ<(vt@)- iZ$8IEAq g[YG`]UHעR. gJZ+(P 뫜ʵg X_I9M6%P!\i+WƆOKL0p'`D{|ٺ ;L+ł>9!e[C8[W `4I3?~ԸRݮ82r k[*Ѫ.'IŚ9 _U _ ߏBkt7!y?,l$NKR2GYQ(8Y8ى (ϿGPK{s$X xl/_rels/PK!p-xl/_rels/workbook.xml.rels݊0oVXd1Fz+B:6 Yoo\«L,q; ; KRh{*T_szpLH,>?k4!zO"R,)d:5%Σ/ (C+6[ݢ[[wLQ BY@TWخiz+gFBOC\@T: :wsū<7gwfػ9.Ar #\PK!:1S= xl/styles.xmlk0]n%vY 4*GޓȞt:>=]#3cVnB*u:_E0:**b>0R=osfxvF-7LR{LIfM0ZYI H3Y DR[ - #YJ FDM461j)I}Ghkw\뚗)Z$ _G7J҈}8OkE)/vwU#@{*a uTYSšsA:XX8Bĸs)t1 ؠkܓuvgtP$O-Ki2_~X0 fj'OhJ4YQXQs`ojcAqFhL'd|Eŋh@{r($QԋOfK&bC/4 (:A~ PK{s$X xl/theme/PK! xl/theme/theme1.xmlYOFe[%`vnv:)9ci#Ƅ@IN i[4@C/0 m!$%dSҲ6ؚ{޼y^RsAX6+W,F$4 !Q4BEmΰ0mU%b#f t\t#qMqccC$Srղ4"x&*>HãKgKѤp)7Nm0ψ}i mJ?fyjy)DelNn~rsѤqh)hێ],W3~_חR{|MyW?~_ë'"/uBۧ/=}WDptIq Y LI D R@ޚ!uj»2x=>VgzI'|1G"N7 %Yp4 ؇;sjzV6׵^)BZSOfP 7]n3O-ʴVCZ)Uk]2Aڻ.s6XNv[Ndlt:RqjSzC0 Š=}:O7^܇R2Kr*T_,^jnԪu%mZn[Fosfk4NRݩv,+[VB*5jc7:;y85|0okPK!N"hxl/workbook.xmlU]o8}_i❂ _AMGګ*mR+`0k&UIHmPF33g}Ujτ ꉎ.,]#urZo'tMH\d5/D߮rӚ' j1 )4EV ֐N6WXɷh8(Uiږ~@ Ќ$,k+R'%@_=Z 0j#cUkZRҁZۚq.!=r=?d`7ч*q&F^e".9@"w`h:_DsOh~u%?HWMWRX4Ȼ 6QKK0l߲Ǻyurm)@*OƴXt4aе9Nzp#BwXZˉI)V}Wմ_V[*vZ4};yY)R@v,@TAӴ4Ea̰,Q@t,vCkyǠ8$%$ &/!)\eڳ >2UN0D5FHcd{jl&PàJ)űW4}PK!SA[Content_Types].xmlPKt$X%=1  r_rels/.relsPK!aI zdocProps/app.xmlPK!:U:k2docProps/core.xmlPK{s$X xl/_rels/PK!p-xl/_rels/workbook.xml.relsPK!:1S= xl/styles.xmlPK{s$X  xl/theme/PK!  xl/theme/theme1.xmlPK!N"hxl/workbook.xmlPK{s$Xxl/worksheets/PK! e@xl/worksheets/sheet1.xmlPK zSpreadsheet-ParseXLSX-0.35/t/data/bug-38.xlsx0000644000175000017500000003006214576335353017543 0ustar michamichaPK!˛s[Content_Types].xml (N0EHC-Jܲ@5(`Icձ-{&N U U&c=Lfd-ٸ tJe/=0 qJddE[,Ye yRЈHӰ^ȕXt6yl5tX=sYkQ%-E$]<ꗻwVPdZ{ odshuaܪ8nU\7})X4B?fi_H{$ cS̃H}#*6:$!j8ZDj:8]M:橋N?PK!P|NL _rels/.rels (J1Ͷ4ۋ?n&$Ӻ}{|͏lw8Ա7.JP-7ϫPI;ؓ3%U7WPrSjTd Z'҈@>G|h{lHo^ fLwޭA!OuYzb{=d iw ]6׻IСibN)Jsql_u$tw|phe% H@ PK!xl/_rels/workbook.xml.rels (j0{-;-ȹB%}E^[&$}EIBzqfٙeqP_@U3}{xł!x20ê[ӀUNlW:I҈etDÎ,uY4Ҧybn?;moiH^Th\1u$`VE}iNiG%fisn'ҰnyprZ4ss:({?ܗƭXzt2鰃+NS,ҝDw)!oՈ;x|w,_EGmtйLАbZ+ٞ=K٥_כypzs|jVÝ?-p[!q&]@0ã?)rym-.=YA?;$)9MxAl"Y$&J('ѯU[Lܨ\x@á檙-,/+ ΂˗~PK!}qH|; xl/styles.xml[[o6} c*[8=$NͰʲХ;(Җe:>DH 틗~My/h=x_Z9 ț;/8v2 Q:џlskN.x~YIdxMFIi,M ԧ$wDzt^D$ ~߅Fc9q?X\olؓ!n岍]aO|Ֆ]=3YXrxM#䬬SjqECrf|ɠo+|f$B@a [ K]iw dt˸aAGDN|<'{VHb[ dP$, PBA 7 1\(Π @Y y.rƒp.0(<Pڭ: , Ua%Bq B"=[,Vx=[UX8 XP޹X܆t"%a{"b_vy:7#x vUUQvz ?^Ī({!Dʎ@*{B^L97jjEq7G{٬xhFLm^ۏwl)$}=b)ۃz&Vz7:&K"+6 ?8-<'?ףǹyuӻ}5lkv0_8z+oISߺM\M \Mtm a?PK!D߼%#xl/drawings/_rels/drawing1.xml.rels 0nzЫXIFooӰ;7;E'r k\;^í 8mqr4,PMq c:a,Ų!FR@3tlr:fi hؓgAO_LQB ŧlu3l̀!& ) ,P_7PK!<+$xl/chartsheets/_rels/sheet1.xml.rels 0nz^D*dmoo.mgf?Q)R oi4'tGHL z4bOE8ЧvJiB>˗ SS;Rبɀ)NVC<D3v0t6K?,2cGIRȠJ}U_PK!zX}xl/chartsheets/sheet1.xmlKO0HwRT$$ w7Vco^&q6+~r~m.JlckPHz]DLvcaLj2!K,HI#m0<1BAa`y y @r~L.G2'aJD OZ G<۶reb23DmzO |~ȌaNڃ31w=H@Kv+*{ PK!bmxl/theme/theme1.xmlYOo6w tom'uرMniXS@I}úa0l+t&[HJKՇD"|#uڃC"$q۫]z>8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ_^'܉M01UJS#]flmʒgD^< dB[_WE)*k;ZxO(c5g4 h܇A:I~KBxԙ \ YWQB@^4@.hKik<ʞ6b+jΎ9#U`δuM֯DAaVB[͈f-WY؜j0[:X ~;Qㅋt >z/fʒ"Z x Zp;+e{/eP;,.&'Qk5q&pT(KLb} Sd›L17 jpaS! 35'+ZzQ TIIvt]K&⫢ #v5-|#4b3q:TA1pa*~9mm34銗bg1KB[Y&[)H V*Q Ua?SE'p>vX`3qBU( 8W0 Aw 9Kä5$ PeD)jeI2b!aC]zoPnIZ diͩdks|l2Rn6 Mf\ļ=XvYEEĢͪgY [A+M[XK52`%p7!?ڊ&aQ}6HH;8`ҤiI[-۬/0,>eE;ck;ٓ) C cc?f}p|61%M0*<ҭPK!&t1xl/worksheets/sheet1.xmlTn0?# 5O!h96شޟ} D0أl#,Z }hݨXc 3̧kqȹ1ڧBGl~-;kf7B;"Qfd4 }8/JՈf8nC 7X qĽ:E LI5u1a{O:ɷgF4^ryA-2̞1J4SwDHX$&zKv&[+*˞&||c4dTM8֌Uc8ĝzvT !4N&q5 1<#fPK!D,= xl/charts/chart1.xmlVn7}/PJڂ@ E^(r$eKre_ZT1}w.gF֌QVH_gEfS؂/ގ0?bB5,KW?-,[±'ת38N[粞m()mɪ_?gCqd?YC4tf>PIÄLGI@ܝ--dVwSl󾜧GQu<7ߺZoCFnyߪ=Hx2g4>_ R75؄|)$Ov! ;KHOYj&xpn^<|XY,ԾeZʛ2I >nDˣ?+P,.!<d達Jہ%OMe_PJ"Knf!}u2$Nzj#WptGQ4PK!}-uxl/drawings/drawing1.xmlSj0By8$JĢdVJ}W~4Pr1ҮvvgfXպdNY`ș4R~9sL52'jysL.CF%tMy}D[<]qGe4瑫PB )}fx7iP/r6VYSFmT֞ dzq2LPvxҿ!Tk-6]#s؜%߻VL)sf*g^\BrՊonj`E(H~_ޢ^. uHzG@E4;fQI34eq3R#J̊ƷO; U90 fK*1){\87]#Q*N]`mc?PK!t RjdocProps/core.xml (|_k0%5I;Za>Mp-$W-kӒ\~j=&_ι$"0QnF^E8!Ci,*3rG]j* +[`1xqB3GNnƋʖh-ՇPj^a UhZQ(^[?,s<׾-nU'w88M ӷ˺+$MʂʦF,>MB{ /{~ (d'G'+9M++LoƸZuRLlBdV$g6&C[5 C8Nc?#ת6={u<;Gg'zj j4cwR/F m fbӚp%ω]5[.-%ܿԚϘ|Oj3mG,Ԕ|)PK-!˛s[Content_Types].xmlPK-!P|NL _rels/.relsPK-!xl/_rels/workbook.xml.relsPK-!jX xl/workbook.xmlPK-!}qH|; C xl/styles.xmlPK-!D߼%#xl/drawings/_rels/drawing1.xml.relsPK-!<+$xl/chartsheets/_rels/sheet1.xml.relsPK-!zX}xl/chartsheets/sheet1.xmlPK-!bmxl/theme/theme1.xmlPK-!&t1xl/worksheets/sheet1.xmlPK-!D,= '!xl/charts/chart1.xmlPK-!}-u5%xl/drawings/drawing1.xmlPK-!t Rj&docProps/core.xmlPK-!P)docProps/app.xmlPKl,Spreadsheet-ParseXLSX-0.35/t/data/bug-11.xlsx0000644000175000017500000001102414576335353017527 0ustar michamichaPK mIC _rels/.relsJ1}{wDdЛH}a70u}{ZI~7CfGFoZ+{kW#VJ$cʪl n0\QX^:`dd{m]_dhVFw^F9W-(F/3ODSUNl/w{N([qTup>g*كF,]z7g_]:WaΞͣ\Bʹ*MmQA6IS٥1ExTt2ҚK͢+|`Ynhk.:1m%,DXʁ.@`K$8z$S$=֚b#yMHB{fF/35l7C]EpEyRD,T"kAFpbwRp`ifu2,טv"/{F3*ŭkG.L))F|sb^ kmۮ|HWM68]a߀C \e-z{PK|PK mICxl/workbook.xmlRMo0 W/H8ТXڵgZc-hHL׏Vi'{^_:`LBYCօm<ܾ_hOkI_mޭw Nj1HҌ 2i)Rm`SȽ/eyY>1pP:7d=>D>unHznǓ!z} b"[T ~t[ hGǯO4,{,0VbEA,HyFc1RM%cDM$kqr7m5v_8C}LAV]nSj9zOr' )7o1Tqw6*@j$.Ƌr2wv'o$M R$Dl?v,\ߠg2PKӉlPK mIC xl/styles.xmlXQO0~߯>FIBPIL$.4$M'Z1i'۟rk竜'4bG>FTD2f")F.j|~)9(5̘(9Gvrb`ROX[{Cߟx9aXhɥ0 1ru}u;d0j0HXL@'޷ԭgn䌗Vsgnè%{L_b[0y[!v@/ch*7SEpq U Ǿ{bFR),%5-x_4Pp V,hdYcdÆvG;Cߓ@J) ^8KEN-^ڡ4(ihdvj>3zRa@(-`JUPWD\IO)&rL-CWVDY )`@V8X Z>.GOJ^Tm.3W[te+֋ {14X/Ӌb J IY#^e{.ަWyJ۲6Z EÒqDR !K_/|o nKaLA?-d+ RTDetd? ][ƻn$DgUy[ PK3PK mICdocProps/app.xml=k0ཿˆĘd)nfT霨XH-4;b 1:RW;?[R$N;ً;}R:rB ;J:ʱ裕x~Gf 隱‚42Wܝ_z/!{ qz}Q`>"H{Ӻ)[Content_Types].xmln E Ķ2$]TU'>mP(3I/HWE7eTz {'TPǣg{Y>H=–UrZQ˕7(Ŗ rgF.߀m{>d J&i e֋.bDz-@L%$|C3j$D8GŘ@q7=A|w6'_!->CX*eN[g.PKKWfCIK _rels/.relsN0 @|EnH &4>$nă@ iqg ,0|v$Ri];Ђ<&odà\9 IY{/GcuYW ֘j*TP] NK|]õ̇uvZ"1Y,_g9)RB|ސ>.>i3PKKWfCPyv docProps/app.xmlRAn01e( b8)rhQvZYD(n/%ÊTfgѐعD6J,(ЛP[WQ8![ImS"S%Z渖L"}4!uyLCrU_$}M q yO5'kRpp4蔜/U6ڡyKOTr>lpJal 6V={4RAwnm%_@8ĩDɂgqHKH"2)9#k~QPNA2~6[Hy1e.e ]ۓn+=}KפڵO]Oz̡bբxNPKKWfCɏc xl/styles.xmlQk0 )#I m zb%g`+e~r&w0C,%$[vtqV!D㱒JwߤP+*9BO2h@ +y"ElNT= {Z"ކ}cJrm6Se])H,e+ʲE]6 XA G<+k$U1˻$LqΠI,rid],e 7bc/#cU´pݣ/YK -qB0)"9cCyT6!3f X&a_Z;zѕQӿlfL$5-?B7Eiޕ]8K03eu:˽ ,g%W'h3%9{VGa`?PKKWfCً;xl/workbook.xmlQN0iJ"Zթ Poi'U 8xw4^oέb_d4CcryB6z0ỉ}84w(rUC-H} VEiQRUaeaZVd%"5sPkh İް B矅$8d{F9D-ejkz8Wi1NS{IY!;ffᲗ%9aR&Eq$,x~O+S8D 4`> IV24v+i}ީPU!X4˓41{.PKKWfCD,xl/_rels/workbook.xml.relsϊ1 >E}'3 "b˲UJ'gdw(+x~ AVЫyrP䬯:h>XLia]NV[ꍤn*AkhEmKriR8I16=psP1զ7Uj7z뺳@N_Iؐhϥ2vO/ͧw:}zM⒯ PKKWfC?!Sxl/theme/theme1.xmlYMF+FY&j7Pq{cLvɭcJUiKz" 5RT/GfdaAg~ǹrA!m9j"mΠe!p`ҶDZW.\*"1A@Mܶ"Mۖ>lcy${#.b`)B;̮jM;4Pcz{4>A5cc(mLD"c'Sebֶ@N䁲RU?uŞ1V矒$N9w7. ˸^9s~9>X,a~xjrw*^Xot:oo,Uk ]e;nyV9(b4/x#38nޚ%ekU'jU>}Ŋ&HMS2>8 3x`N˥Lj[*byWϟWϟ?|vGl P'|)w/eKOfҁ/~dz'/uD[l3 Cq6AiG4{*oM13:꼻 xmrA$&7u0s#3IBp1qdwO7I!e7"5D$! e=J+~ݥGQSKtDi qPW|{u83!U$f&Ux OțXE&%¯8\*tHGHi-uo`Dưi\E E&M̹nԨ3M"CbǕQ ^l qpߥD02'Hvg"ʮ]1MNkƌB7Ќgmx4Jd ^{${rCwǾksq/^9$(cjMf J}9|&O#,Up5\}BUt8PCR.$`')y3 Aφs6*F`]ao')kJs<4TiMӬ!c0#A,,"န1r85z4iNtq q9D%{YR]#ʫ{qڶF0Ie?5 ¤m4|`sZ:WDB,*5{u,{n1ЍӢrC-쓡%ՊŲ'(8BC6v gF}Pnx/+:0K#\_uWz Д9⽿d ck#T0m[\CJ# , AYd*!ot%U(\}"AөHJ;_̩Օi;$ mf[(u9dlSu xqWL> AYfWkڣ`T8㣶nM/hTl1>D'JxU|s:42VAkEsԜXŽ=]m/dO|xdAi”,&=fw[PKKWfCaWXxl/worksheets/sheet1.xmlRN0 Q,Ni!$Ā{ֺm6wi ⫩7h9ER07LN OF /U|@ 6>Q;Wg4ڏ˕]+ojjuEaEa2Xa5`i0qPk2i{"|5*͟!#~)a[](>Qgv݇zu"Bw5LYLVt;<8 `>jQɥpTK/Xؐ&(}v][ן.򴺄Jc`h4 {Lh*9?!&Rt"?EPKKWfC8>[Content_Types].xmlPKKWfCIK o_rels/.relsPKKWfC $PdocProps/core.xmlPKKWfCPyv docProps/app.xmlPKKWfCɏc xxl/styles.xmlPKKWfCً;2xl/workbook.xmlPKKWfCD,xl/_rels/workbook.xml.relsPKKWfC?!S xl/theme/theme1.xmlPKKWfCaWXxl/worksheets/sheet1.xmlPK >Spreadsheet-ParseXLSX-0.35/t/data/bug-7.xlsx0000644000175000017500000002067714576335353017472 0ustar michamichaPK!o} [Content_Types].xml (̔AN0EH!%njE%T`Iձ-[3Ih(t&Qo3JmcaMɈE`UY>fa@l>;?>`DSn8GC)0 ɬ/EONȵXFW\Z8Tl6}P-$<4qBz,Z4wʄs"Pr5klܔb ^BA(BF| @݃3{3y~jT*:I) s5Խ9zp+P#I𡀖Y7 `udp1qOr !fZ_𠞂-yuY/G{7p<;nPK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!;Yxl/_rels/workbook.xml.rels (J0nvutW] ӦlLӷ7I-,R}L2}YCl٘ZyiJZ$WWlH7=bH䜔NRb{4RYIBW^i3Mv(CvFUƂYw"胨t5z1E|l@ <0JIL01 ?AoG%0vMa]3K/ܭ 6L^|4Kk08!x|!?PK!*Ŗhxl/workbook.xmlRn0W?X$BʥT gocG!]A8QI RJ@FH-iL\ a#H]AkIiA2KM\k WF%,MIåg*Y‹) h&]-[GgJ*X޶ŝ҃(Kݷ{4OG4]E~Z"{(Ž~cÀ V$tPZja:KXuqe,;m?g䥗X v²f[Ht8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ K(NhwŘQ6㶷 [SYJ(p»g>X_xwu{\>k]Xy}钣M26PsFnJ'K,}䇦$Ǵ;@` >*8i"LI%\ xӕ=6u= r2f 3c (:jZ3sLs*UܚЅ ]M8kp6x"]$C<&>'eb. vJ|yXɾ8Ȯ]7R /=,.&'Qk5q&p(Kaݐ Sd›L17 jpSaS! 35'+ZzQ H )7 5)kdB|UtvaDξp|Fl&0_*3n'LE/pm&]8fIrS4d 7y` nίI R3U~cnrF:_*P}-p Tpl rۜ4LZéO !PLB]$K *++65vꦚeNƟf(MN1ߜ6&3(adE,Uz<{EUϲV)9Z[4^kd5!J?Q3qBoC~M m<.vpIYӦZY_p=al-Y}Nc͙ŋ4vjavl'S&A8|*~x1%M0g%<ҭPK!CZ=xl/worksheets/sheet2.xmlMO0 H(whj;! H{ֺm4.iڴ#H_'FF[4J[am[ȏ՝A /7E>;+X_ȎhXDZ:蕏p7 ^@sSo,In^i+6`wF;=xY`H8h yʸg짆ɟł T5"#'.%,ANUGxcX5|-,<>v^Q߆^qzvi"U'qjusTfcȰȠZxV  $ѭna10WWRc7ÒZIyPK!JK-xl/worksheets/sheet3.xmlPJ0 CMWY",m'm$YW޴eyyo^jĘ E }K} o۫{%5|cusyQ)Ӏ";TVRv@RA}f4E8"nZrV^txV?iqC$UO 3Ȧ0xLf1G⩫v;xC_8W);,,(&ΧlSc&DM'Y[DtLSNQPK!}xl/calcChain.xml*PK!VWa4JdocProps/app.xml (Mo0  9iQ HVavgUc$Oe:|HI[uxW"g8+{* IJY`'@v'?D2YpX(9G@pdVQJ6^ÑUP]C6:;_SHR܇`Vn)=G V([4tT쵲IƲVAsA<ꇶS&;c=mŲS(G o!)ʟ>b@(xjC8F^ )l F$\",z"zN<0#ξ[>Hioi$jTh۠In7S"O[E0(PM  M6r?<_C.Wxl/_rels/workbook.xml.rels (RMK0 0wvt/"Uɴ)&!3~*]XK/oyv5+zl;obG s>,8(%"D҆4j0u2jsMY˴S쭂 )fCy I< y!+EfMyk K5=|t G)s墙UtB),fPK!󚄏xl/workbook.xmlMo +@(N\Vm1 _\'-7z fy_1i%W͚Sx @w?'6%فi86/&_q>Ym[mezv"B'lb(1"JgP ]a&>)_.늲(#Al,DA+zq,sC˺^e/tŔ_S~[~+Uk/c(}⏓>JT9:hĽE Ia$:,XX5*毸{PK!] o)dxl/sharedStrings.xmlRAJ1 !doNAd҅Ppׅ ΤN`&Xw3#"z;7(Tp^$mq%nHy~E&Li.E ;6L$2,'ǃP\ )ӰOvw\cS TdɄIUPButMuƘ)r\@ȱ01  ~>f` 6dqx|~yUm+[]V04^;g63\fNP(un!">~)_m܁Lh\*`;7+,o ,lWт$Ju^'y, HRMAį­U0-=r_PK!;m2KB#xl/worksheets/_rels/sheet1.xml.rels0ECx{օ CS7"Ubۗ{ep6<f,Ժch{-A8 -Iy0Ьjm_/N,}W:=RY}H9EbAwk}m PK!+0xl/theme/theme1.xmlYn7;{O,ْcK6qbJˈ\݊@iKz(H^ܧQMBJZZTl'g%Ǚ|rx0t@<嫥4=F^}e-@RᴇOI=xx]$!r׃Xl}iI0UH"Z |r\*.%Jqb4$h|x|u1Qb%URLkęeAY#H6@HaA=(`i^'1`na^ )Ti]]ۚ7qV*OCX(^+7&2 q^vT-U\|Aʜ͵FQXd?Vk沃7 +fsůjo@1`nҧ>g^J9|lfVZk ~EȰ)RqIWP \@i._[1*Z=^'0rnH[d(h 5(@^zutO㣣,g6Nė~W?}~,_~O{ŗ|Snޡ 9D{<Ǹ8ߌN3 #bxg c~,z4ߊ9kpu-0ŰS'a );fL3wNHJϴ:~ݡz@QSK:$l6M .#j7;Q3ߪȁc|0Ǎ7P'Vtmb#q- azDJߜ[- l %.R(:ɼ9/"$LӸ}O E1n. }JpNh4Kd(*ޏq-~A#$ʸ 19!o)4Zg޳+ųT9F<FeIL#}<%Fm5--%HEu&{(M۳(=Q,-'Ka=U qVp̆IQ,P IY4k,͉܂ȄT[X65̣<Xj.UpE-fXY~tCK}b #Vr*CE~;D]6{¯SӣC #/pm]B8fYs%:d 7u<|`m^οSbϖXp,0ZP1b\lax Iw 9+Ô53X da|"Y.dT\Y䀰U(T7lӀ?{^AH79y?c/R)~a+y>SM59ZXs+^y nDHEȈIcvp+wBWl4AZzBdm2iQaɻ o_}&(grSMR(\ &PK!~ Uxl/worksheets/sheet1.xmln0b7I-H F}(P4]45 P!=H9,Nz`AYS<8#mLWw9 (L#kg~"kzPy?o 2q*6w|Gضm1?ϯSS]q@U!8X0*0q  =D!Iy?>+Tu;L}/jBh_ȳ]%)SrSkB<矠PK!cA'xl/printerSettings/printerSettings1.binb` 00a G #?& H:2PhvF(D31nPK!abFdocProps/app.xml (n0y{L9i N -jNv:YD) /1^6m"=I#xrجwNrӾ4n]շ,K\wP-$v)O>E"HYT18OF ɎF!q}U W^5 +< C68Z|iuǗnW@R| ^)}f_7cQ]4T,0'cY)@ׂ mLLR8kAY2hlg,t8kU4!aumC6$r{.=N؇3|Ӿ`"ueBY-T7ȧcap5wMx}ےp;݄R/c=.e" &mg2[C-ri;-PK-!A7n[Content_Types].xmlPK-!U0#L _rels/.relsPK-!>xl/_rels/workbook.xml.relsPK-!󚄏xl/workbook.xmlPK-!] o)d xl/sharedStrings.xmlPK-!;m2KB#Q xl/worksheets/_rels/sheet1.xml.relsPK-!+0S xl/theme/theme1.xmlPK-!xn  xl/styles.xmlPK-!~ U:xl/worksheets/sheet1.xmlPK-!O^Q=QdocProps/core.xmlPK-!cA'xl/printerSettings/printerSettings1.binPK-!abFdocProps/app.xmlPK &TSpreadsheet-ParseXLSX-0.35/t/data/bug-16.xlsx0000644000175000017500000002044014576335353017536 0ustar michamichaPK!B;>\[Content_Types].xml (Mn0z*1tQUE-RxB, n߉UPM~}vf<[ b 2pK1{EV;(PLW&fvX(G|h{lHo^ fLwޭA!OuYzb{=d iw ]6׻IСibN)Jsql_u$tw|phe% H@ PK!nxl/_rels/workbook.xml.rels (j0 }qҍ1F^Ơ-{c+qhbKɠMt\ 'g&WP%&w >׻'[= &$շ774OH"xR㳔dNҨ9ɨAw(7e(3O ރhm| sD"$4DSOUNh9.)k0՚0!!iɹS]٬ `2K9Gyvq/PK!Zxl/workbook.xmlRM W@lbV{CTU~Ycګ}Ǹi\f7nR.F8Y M-߾#癮Yg(pzf;{}2@Bobnez![j UGhD1񂰱aFrq0|PBĊyhߵw6 #Sa1珵.qW3v,M$Ǥ"ך;J bQ@͹{Μ:R|EӣԵW-t1/B^Zɋ=};*WP2X/ rgHpNg Fh>X !󋠘G-X4XY2>fuD:e8J5DtOiџ韉+ɭq+nY K‰;S,;SmմYޞԱ hNuFn[ZPK!Tbxl/sharedStrings.xmlJC1E0J6OA. ~~@2 &gfRQUqygõHUboWTBÈ/O7Oi nQ,#Ϊf^Ve!;z0TAf" Ã>2T[OvV&J R^)%F5yu]./PK!0kxl/theme/theme1.xmlYOoE#F{oc'vGuر[hF[x=N3' G$$DA\q@@VR>MԯNDJ++2a,/$nECA6٥D-ʵ? dXiJF8,nx (MKoP(\HbWϿ})zg'8yV#x'˯?oOz3?^?O?~B,z_=yǿ~xPiL$M>7Ck9I#L nꎊ)f>\<|HL|3.ŅzI2O.&e>Ƈ8qBۙ5toG1sD1IB? }J^wi(#SKID ݠ1eBp{8yC]$f94^c>Y[XE>#{Sq c8 >;-&~ ..R(zy s^Fvԇ$*cߓqrB3' }'g7t4Kf"߇ފAV_] 2H7Hk;hIf;ZX_Fڲe}NM;SIvưõ[H5Dt(?]oQ|fNL{d׀O&kNa4%d8?L_H-Ak1h fx-jWBxlB -6j>},khxd׺rXg([x?eޓϲكkS1'|^=aѱnRvPK!A* xl/styles.xmlVn0?'ݤH IA[h $z(J&E wVͼސL/Z;ἴ&%p[JSg)Fd^ߥ>tJ̅ 9+w֜"dӳrg)Bu4kg)B?y߭@p[ɾ8u]On4?Usm[$r$G3vLx Ѕra *y}v[GIGXCSbDTe׍I]4͇7ߑL%xorurAiI^-GOOoeFm}l$qʋcN;@TrMhWPK!sL@WdocProps/app.xml (n0 @VzH`I3'ӱ[2DHc$qz#>R7ua$|N'Yp~O7_҄|u|W1!%b)O+v ^2XҸU,Ň`_n=/iφ8E==omkgeJt6 %'Ks*Xk5n¹FL8k 5SBMեE2YCLަo mCr8wT!2i% C{DZ3c׍"5q\AOGwY|Ùcr%xbCӂ?_hw'JSM/S xuQ+XKA?ʚc-&d9y~_B?1ӻI)71iu/PK-!B;>\[Content_Types].xmlPK-!P|NL _rels/.relsPK-!nxl/_rels/workbook.xml.relsPK-!Zxl/workbook.xmlPK-!Tb xl/sharedStrings.xmlPK-!0k xl/theme/theme1.xmlPK-!A* .xl/styles.xmlPK-!#V‰3xl/worksheets/sheet1.xmlPK-!*docProps/core.xmlPK-!sL@WdocProps/app.xmlPK Spreadsheet-ParseXLSX-0.35/t/data/Test.xlsx0000644000175000017500000010534214576335353017461 0ustar michamichaPK!&xD[Content_Types].xml (MN0H!%nY vQ` (0$1lg U%QE65lU5%#VHS}ߓ,DfS@Ivlz}5Y M(I{44 u`0RYY__S@oG;ʭ`b[ 20tkWEwigmUI[+DhVEZ ͤ90wÁe<0H[_#@I0ĝ0p{>yo4 [3 pǾ]xNfG =GG|2.7<6h$7MoPK!}T  _rels/.rels (MN0H} PnRwLibv!=ECU=͛f0={E tJFkZ$H6zLQl,(M?peKc<\ٻ`0chGaC|Uw<ԀjɶJ@ت` %TKhC& Ig/P|^{-Ƀ!x4$<z?GO)8.t;9,WjfgQ#)Sx|'KY}PK!s?xl/_rels/workbook.xml.rels (j0 }05{R>@D2߾og0O׊/ x KR/W+(^oAkW;T0 !ڿa9~"$#NS{tSi2Բk4}a8 ±Q }LWUcś_C5?DF6:`!nwI,o ctknܼm É,"S`v[pZAF)wbggPK!3xl/workbook.xmlRMo0 tw(q,Xa(ўUYX!ɳa}tv.H4r^|RRsN}=&7 l)*ӻMp!`}N5c^?VYTxug[DkiO3B[:!`@Ui ;l@jD}[OM01"m? } %Pʜfx^p] fyyFY_CbX Լ2t ;UW2&PJVrYp)j.MԯNDJ++2a,/$nECA6٥D-ʵ? dXiJF8,nx (MKoP(\HbWϿ})zg'8yV#x'˯?oOz3?^?O?~B,z_=yǿ~xPiL$M>7Ck9I#L nꎊ)f>\<|HL|3.ŅzI2O.&e>Ƈ8qBۙ5toG1sD1IB? }J^wi(#SKID ݠ1eBp{8yC]$f94^c>Y[XE>#{Sq c8 >;-&~ ..R(zy s^Fvԇ$*cߓqrB3' }'g7t4Kf"߇ފAV_] 2H7Hk;hIf;ZX_Fڲe}NM;SIvưõ[H5Dt(?]oQ|fNL{d׀O&kNa4%d8?L_H-Ak1h fx-jWBxlB -6j>},khxd׺rXg([x?eޓϲكkS1'|^=aѱnRvPK!u -P xl/styles.xmlV[o0~`Ӟ֐d]d@UԇUI{5`U_1- EI3ws5e#8bJFx6bDe2&ZN/0 Joi/l9Pj@*ceT RMTI%|ɕVAUjJQ EcY?[AB 6]%$BB:=څ&*YfYW[1цB=B98pg׈W?o1A34]/CNs,5+6mTi]Q@WaH$ ۞(f RնD`ZWhv,zg^u BRo3>Nv4`ui]BKyQ{1R9FCRiDʒoWMQGڄ! /ݕg0=hRihؐ51~f}ܳvzMnfgkԕ6~ϐ>Kx$j+u_?M-WcO]kPbWA~=˴kJhA}"{FNj }0f77?BnVÌfnf^'WADxZnq OPK!44{xl/worksheets/sheet1.xmlUn0?<keGqHРi3MQ6ITIz {%ۍQ"n޼G宮 &C#6Yf`pS74CoTtū\Q`hdVJI5.oi'%5VKO€ }?jd^9'6ʒZa劵cGj,^z3ȩIrl CL:nxG_3"rγB|]xtA M:F^<3GsG#(QkBNWmx [>0Jc1QlChUez7)8zۍ,WzaZK(x]|JR3os* \NNtaA>*IQYKo "ǐ `Џkl&sp u!Zb(t# M-f`џgW -S,Skky91Q ]T`t0C 6PlQœHg[$SɣL|iLG_S$Hitoƒx>3[-^{,NEK>#P5e _Rs-ѝʌZ Jq '`<ʿ}Ojx ģ;BMÞ؆.y{vyZ>@fHn4/PK !4\g\gdocProps/thumbnail.jpegJFIFHHICC_PROFILEappl mntrRGB XYZ   acspAPPLappl-appl descodscmxlcprt8wtptrXYZ0gXYZDbXYZXrTRClchad|,bTRClgTRCldescGeneric RGB ProfileGeneric RGB Profilemluc skSK(xhrHR(caES$ptBR&ukUA*frFU(Vaeobecn RGB profilGeneri ki RGB profilPerfil RGB genricPerfil RGB Genrico030;L=89 ?@>D09; RGBProfil gnrique RVBu( RGB r_icϏProfilo RGB genericoGenerisk RGB-profil| RGB \ |Obecn RGB profil RGB Allgemeines RGB-Profilltalnos RGB profilfn RGB cϏeNN, RGB 000000Profil RGB generic  RGBPerfil RGB genricoAlgemeen RGB-profielB#D%L RGB 1H'DGenel RGB ProfiliYleinen RGB-profiiliUniwersalny profil RGB1I89 ?@>D8;L RGBEDA *91JA RGB 'D9'EGeneric RGB ProfileGenerel RGB-beskrivelsetextCopyright 2007 Apple Inc., all rights reserved.XYZ RXYZ tM=XYZ Zus4XYZ (6curvsf32 B&ltExifMM*>F(iNHHCC }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?9o64fqtuk$YIfv<ޝ/_fg : m +xQ|?WTvZ |O hXWN֤Ԭb`so >eNm_޿Kz>9ᶯ^8>j=o/nxsuq,+K#;I5 z?)N+3@ 8ci~2(FY$48K;AUAff (~=co%'ߎ>x./ _eiKx2y<  6}E[\}Nռ9sXxiFfP3׃Eah3׃EahǼeݟ߃E5o6VIKMEKO7A'6sK$@T̘$S? x?VfS? x?VfS? x?VfS? x?VfS? x?VfS? x?VfS? x?Vf?ƍy|2E? 5 _~qTѴi7M&/˝"TZ]ONuutS? x?VfS? x?VfS? x?VfS? x?VfS? x?VfS? x?VfS? x?Vf<:9Yx#7vĝM49b,&GW"jwaf}Aoox?<4+ַK'toäŪng)N+3@)N+3@><O٣㯉|5h^ S/KԴFGk{yUdh]C@o㧈9k& Wm5 2PJ+e%ڒ6Uvx; \Կi;K,|uB2Ɛ(]SNՃg}a{+"xGU-K3 G 6Wj25a䶟loU4I13FC-.fv FOx7 < ym {@SAztWE$hʮl+ecυsJ˱ jHPf$I|N"NJT/gRtܕJiIN-ju__GWM\?4y79p_-?io]͕7wMkwisMz{kk{%Z9'xEd6du*H'MMDm -?iSq[ ߁-.t]%\x:NH' .mt}>lG8ɿͿe@Um/:o{/O#«_&&G6Î V?? <8/@?Z[3g?CAxI_)/|1Z c]R6z64,}C ct߹V`w 8 cⱟYbթὟ49)EO~G{+kفa&)JpmuhF~#s\j3 #P_? Fg7<F?5y|#ӟg.JƇ#xJݼu+Ң_KNuGi>c#_? Fg7<F?5sox/k@~#s\jYG(^j.~0_)Bk<{?/Ĉ<-],G5B8Yx ] AW5'g<3N'A㶩,toGly5-+R+Ie9pƿࣿT\J|k_:bk $|3|v:xrDQ#&JY=7$C?a &ub1P^ ]czMU?>JWYT79G渟OWӳ.WbP@~2 yWG_9I~XsboS_gۅP@P@P@U3kK|Jtφ} }g|t7 ڎKwš̍kȯlt[;+ .@<_Isúg S߇? 3e=oz?ogxCL^M>%5-W>}{W]/5e(~#Xt ~i_x[OA.)? Sᆆ4-WK}xZ-潠E?aY4; %c_4߇?5|6~"G mxgx>-ռy=:/ֵ ij@[_$~&o~18_coO~/|#SG|+/D_ HGR?KztFX4𞧨imͧ^5ݵ?඿(?oDIء TX^UCk;oVq_" ûBUլI|[\^}`M:ƿ)/O<K*|SS;l|ŏ!|+!~dO VO/&oI=ՠ~5|9#|wtm4x ?B4?ڶ|?*bkNFŤyG>19| kn='X־VNj> >I}oz]K}}mqxԴS{=OgE_4gEx7+L=kC{3Pm-).ӿ୚xm3&C)xŚ'xGŷq5O|;f Ǟ<9gͪS_R4kx% F#S+bJgΤfڧ7W7NXJG(sFS(ǞIQGԮ`.#Eiɫ][l$R1"*=i>fpNwqv2f|hԅ~lƞ_'JJqdYeXaTiƜhQXIeZ8$ZU.6Y#͒3o08[t)c ym`]T7*u*{u#ԭ̣Tq^iF>-ϚQV3v:Kg;Z6zoL//--^H %hbM7YA,ج1Y[bN;  牯.֥̪Y#Iz(] 5jT(R*T#.isEJֿ-3V^ K++,5٦-n~-@:Dfc0uypWqRᣌʣ 51xIa':8|E*#'8Rub)Ң,,::)J<Ҝ$ۗ,Z>L`캥.cujO< Čz^?<ʲ э7pMBqV0edjQuiV3TmD̩a֛)˙SUpҩZR~)қi7v}j~!h?>|Ld,Z:K7C5 .+K=nagC7>[7l正 te]g\|'ɤea>OuK?4yhO(8Ɵ:fxMYhF#=֡i-;62IfKmpäl|4χ4C0fׅ|CkyMVqZ˥Z#Mnm󠺉Ж..>|aW~W^𥏍[}}m6ifşs= &[cDq_sq^FO>"CѭeaKOdaO/.#'>4{c(V} w>1x'Lk;^LKi,m5o xVtFoYZ'4=[Gm%7+@@P@~[1න_Lo?7!_ xE״OCv~?MUΩa"eh[D{9VԾx **w~~ 폅<'j|1Y-u\iռX<q޴PNo%15Ox+Uj~n>$x[P7|Itu˟M2kr>4չQ,ʛm+;_/X|Ih^ ͽ?-'u;}kS4mGXѵeG6?4HnIuMm_NWVqLv01?fA[A~*WRV^xXcQf4Xφ<;0P.m?>౾ w?S8|m°jC&HZ^kqXC^kz:3K,@?Bk¿\kzD-%mJ9cqcRHp`x n|äxBᏀXosxCՆ? د4Om/ɭnJ$}VH>H%5xumYW_K6~$Y@#5P(`&Z߇ѵKo1j0Gj6徹x S$l3kkS0qOĘC2&0qgJxLNAȳ(ƝHհx+I~+bpUp R\icMԆ*.XoEg8 %:?t/nkz֡$SXoM"Ɵo oKk ?Ac$U@c(Ⱉ[իC2'E1\a)ECmX[:Z٭xzDa.[2ۦ-Q}LNef.IC,mx,ڋTWSTҡC5g%\  1U:4beMR"eBW៲\҂Ge|_~, >Y4 #K(-|` ҮO2V%hd2@ D[i Yôpx.&Nk28Wຼ;p¨yv:Rx}z,Ds҄קL6UhiBj%R0W QTn%ʹ_)/ 4]OP!|qi7Pi -V2Ȓ=մGqnW$ɳ2:p+5j* b!15c*s NAW hԩpo7^mZ8֞gBiTFc$ԥ djBZ:m?/*Jo{I-,/4bJ]O׈<$3Z{ST[ۏyo"] e7n%q'XJ? ygDХF 8lj򜦦 JtKa*XW?˥QIUՔiۺ̽JS|Y>V)8K>B ;PMNǎblksbw7|վ3Gπ~$hg|1xz]R}3'#K_o߃b׺ֹ̓MXȟwm+cmyxoÿ> _i~7u`Qί'%EYw]^;τ/| j^d{Coqx?ve1Kd?h jXwߌ&6K/A Ÿ_u{@Ҽms>61,0jNgnм1ۭ@e?fߌ_o K?>?x7 |]cß|i+x¿ 2{Ii 67Ýn6e-}'_CG|5SZm_WwZh5Mi~9lWo)6>ִv[n 4n>ӿiieP??ZwTr-;*9@?_'Ὲ>5iS_ | ~~>M3xƚGt?ؿ8ѵ.qh+tmsOfF_=l)/3V~?|ڋه?#߅"K!9,GfM~zL,a~*?o?>G~ gm wvᡤ>9/W֯u ۯBŠ| i$ӵ!?-sJVI(xZy%eZ+[A~O3 H9T}½cᯁ]WԵ iw׷ZE7wSG$+FZIev,ij1$[Ś.ocO3+pnu?~_֮<_Mfx6-xUn|/>\Y݀}}3^25xakpA%A#}h|-Oy%΃$t 4wY؟Y$&~ pj*rju*T:$9Nrն1xj mpm[mO+y'GT8[0ŸWDOGOAK)O<-DQ@>ŸWDOGOAK)O<-DQ@>6O/Z{i,{+w͂; (nvFy@Ae9~*~ J$(s*\WPFJRv{u=+ J8C J8?4 J8?4 N?Mx_W?M><J'Z?4 J8?4 J8?4 J8P x?m'o2,&l͐'rhe}A/=} |9.6[sXb[-tY0hXXݔ@~i|:wwizx $w.<k> T-u^Bkm ̠W. 70߳msnqzր:D<){_ F? w L?vY-Q!M(~"ϧ/Xj<߈ ?7'x?F>cɵ ki#[>"J5ix_j6-$ЮHu Ym`#W>+|e?y? c~"ϧ/Xj<߈ ?7'x?F>c~"ϧ/Xj<߈ ?7'x?F>c~"ϧ/Xj<߈ ?7'x?FW_EIm>վW'GqnI1-Qu^oO@}<z#PDO^y?5oO@}bO~;[3mg-ku5ȇRF;@x¶ |kwo[\=)ִاUtsE%ʼr!uWFʰ@/|T{?ֿ.h$ux7潩Z|_"xsStwz"zI/O*kKk 9huk.0gUgK5¨ҲYpKIր+x#WғG4tƀ{lYt@ːAyt:Gtl:WM_;@ΑA]7~7~ƿ>;<9?ÿ'ω#/Z/K߄4χ[ͣ[,֮]i5شD8>x&o|JώߴO IEo)|'VĚyZk ՓZωua,(.>?+ugHֿv#oZ?t kh?+ugHֿv#oZ?t kh?+ugHֿv#oZ?t kh?+ugHֿv#oZ<7iixSdE#`ReH R_WM_;@ΑA]7:Gtl:WM_;@qUY8+ $zڤiynlfUVRWojڿ?jz"Pu{{u=rMsus5h~jfwbY,I$h;_,x#wX G б@!c'?lړ{OG~+#x[,:Gu/_֠nmu}/'x_5x[⶗_w#7}G~ t^; O>+"Ӡ 8M^{OG8Ӭ>;_,x#wX G б@!c'C%BLJO=xKOz? >/xsžYI G `DQx^BȆGy $nv$;_,x#wX G б@!c'C%BLJO=y xfᇏm|=[AMjHgJh[tu< A<k_R > jAbu=g^KKd[;KKGX^Y.--MB$cws@1u<}O xk/-XO7Q?4˽WDtOH|9sXOwZ,z4%)Kmr&+"0L%uec*䪗@̀]A,=?G,-<=KQ[Is/q%-| -zũi6I<-āq]WSu X[x~o5A[G u |9mn7xWOk9R"Z-$"^[FkHf5[˛I,{~0з o[k?ߌ?-5omw}  G;>[xmB_-Qao(@~0з o[k?ߌ?-5omw}  G;>[xmB_-Q9_|V;Czxđ"UKWOJm,nIqG<W~0з o[k?ߌ?-5omw}  G;~*]R9]S@sxcXXxWw[9|-mn<e15n+%se~; "kԼ ^&?_4^jī26?oMD67:m.1I0aB[i@N??nz@??hψ6;^-gğ7??gMx|Q` _oJZ#᫋n5d&=τI)IƓ_[{ ]xl4+jZρ}SZ߇|&뚷+OV<~1s]\$%-՝[A )ƪOω~ o|:gş| o{ϊ>.gk6-Io"VÚoN}{3W!nte iu"xgUӺ6bfRUP 0*zFho)q \MHiXjz].݂%HUP@¼ ?^xCrYf)ХagWV,5|}e"0JؼJrJPbGq9\n],,2 g7X>]BXhpӨS¾F֛5>m~-0x:]L׆im%֩aO뚑Mj;aikgy$Ci2Z=-h*o`X ƥ<i4c[O aS0J4NE P#v\FK5Rsbr N]:fV145r{1|iOMVmOH.lb=o@v?i흊hCuu54)&EM._^ϱ*c2 _ fYL3> b9uZuԭ49sS|Q]^311xʳF/a+<٥*0J|BS*r/]7\{v.6\5Ֆ"_kucYܭͺ%$!eyބ SxwFU3o7 >>UNJѯIBtc |;'^S_,mtX߬G$/cRէ*jE*5*rJ ;S߫Sή'`jЩg敳 5]iPx췈$^8RQZuW6}]\_vY=%Th.uZ9r4mGʊ e%*eV *geٮ.=+Ic]*ʎ*~; =*JHӌ)|[˜/cpyk`֔1ٶb0T)ԩ-)T'ǛK&]yrq*K BX|k%$xnuXaԩNTIƥ:#ԧSijjtcBiTjga,<ƥ?KԢ~5)էZt=BeV\=cOxWC״^[өK ܵ $Vւ?4%dSI ivWLR4&^MnJ}Y_>qOO6?/ uXWd2I!ze4,5q(;X#XRQn 1*<I|c_.~ASƖon>k6BU W|w~Zi[:nTt1#m<1Ὲ=f7' qJ%P|7ÚO}?xZ]wŞ+j>)/j4N/1q&kYckF3MST匃1a^eYJ<ӚRrԾXܽk]oMui}%`n&ѭӮ--w&7K^Ҿ6yJ1ؼ&#upӆ# ZjqѧFԣJ^ـ-1WcҡౘeU(ӞBz=zZi^H'%>moE "6X4h<̟=mGp8uJ40jPQ:)cp|2.XY|!4T9UbeZx^xS^ucJu+ey"I|us:N~ԓLg;YF+;]խFA4"gUl2 OriPy|! r=QchUC+½X<;֣NK8z:15,V"8F#7`1xp(NUqy^]M6# JSIf]*m@[M3Ff6!{i⑴y]Z_1 d5ӣyKUBj*NW^x2"h>a^JkZ%|6V :{װ}.VmCNavcY}7w-aWx\F&XI`k5ӣcpԪCĺQҫzg-fn8ajկbPV<"<%jNU9klWQ٣hoV[x^F#xNw />3m-<5zbb4Kxcp wCB}KBݺP*i K^;k[>;pc"35Nіp )xGTZ$yWKUC\ l@4EЙnTEЙnTEЙnTEЙnTEЙnTk:/\-Q8Mo4oT3n nph\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/\3V/O j4&y^iDŽ|.[rbreU'z_$Z @$Z @$Z @$Z @$Z @{g\.>x)/uK5Mٕ;>RMt dy6r=A~i|Z)뿶߄sŖ~|rMJ:&|:Uyk^ |.|]d%߂'m45GjMe(nɱm.1ܒaz7^[i (8sG_/΀;z( ( ( (; o3JR˽צnT7hϾ1B~ϟ >:i>&=d%ͣ]jZpLkK 帶A^w>Lk7J7^.%igޅ4j$] TbB :t<+>w8?:W;k@+ ϝ5N'P ¿yc| _u\S(:Klm2ޖL9Fp¼X?^xW|?qu<+>w8?:W;k@+ ϝ5N'P ¿ycy_Ʊ¼X?^xW|?qu<+>w8?:W;k@+ ϝ5N'P ¿yc<56䴻+m[HaWXτ31%lLDU^xW|?qu<+>w8?:W;k@+ ϝ5N'P|X?,~n-- >ʫ"YJZ9o^7VEdnd2/>! veh֚l~#|{,M2xOgxmn Z_6ɕ ]߄zgV_ߏ,~xgƾ)|T6~o"#]m/4?x;Z'| xgÚ&QhXdrEu/x? _<'P AԿyN/Ѓ@$^)R:<ƹ;~;wPKme&X%Kh͔hy2#Vw@ O"_Ė:Kq&o&Vm;}ZKXX:実)%$=}9|e5|E _ċx.AAߎ.iC-}5"k?6M7S:6i&ttWQ3#-Oȕ?Jh (?u/rW ( ( ( |35YCs@P@yO%?Q?jA>)|pӢ|Iޏ_i:o-;K ;O;{K++MZ+k[h#U 8@T@4'.T,ǩ. GuO]ZU $,:2T0CqC ^!(@ix8@@UP@Pn/zbrQ J<^} 1@%V69& X(DBgp&y/c8 ѾuH^g PC} Mh>|kuwR?9#Ɔ'c]mpsneGG]*9Ok<#a}2jӪK1~E `Mv&)c+J`*\;ݍ^.Kĝ#٘L ^ΉGw|9d:vɄ#7ޣo.s{CpZeQm[8ț~0Y&>in g2ݺ^,O%묦oPK!p[xl/calcChain.xml$nă@ iqgK;WAu@vH\t7(otknwӡHAk^OK2ZYT2hс&34iks*dF9bۡ HQ csST Y $N|Iqc>+bJ<0 +~OmP.-7| 0-Xg4h]-3\Ҟr[]bYt(nS,memy^b >S;)?c@7Sfè\8 ֓8^ƾ~1Zc~?/o㪩ԇSq@M%8X0e1 q"S$SܓxznW)HIe[J()#@uo 0PK ZUxl/UT R/Yc60Ycux PKZU*?^U>xl/workbook.xmlUT ;YcAYcux QMo0 WDhJ*Mۤu9#D Jh -z~/"`4:<ti~nnn)qkѐ8*fYo˘~rZ{.se wsӂƗ؆{v\k WF(RpYaiaJ`ʮ"eh1#$m(QG!=MWڻN$AB٨6Y}D@;74Q^­ ONjaF140F" 3}sH2]Mƛ~ y75.%&v-BإmP(*(N%U=roQglTPK ZUxl/worksheets/UT R/Yc0Ycux PKZU|#fQxl/worksheets/sheet1.xmlUT EYcEYcux Qo07?Fu+dMTb҄xpKb-#Fʷ眲0 ZΗ;_|kkkq:mM{)Tc &'zqOVas;M`C_~Z/Al $R.;}_3[kD6>5Q75Ol+u"N]%}P6rEoe{ [:Ǖ͟Z4q(};/nb8,8/fB`Uc_@j{ N@lkc(( nqP`bXJJcg{pA<,؆Ӧf]J3Kb˜?f Qaz@aq ?1|clg׼y)!_LS~VC%+Ew~CL"6Z">g5o Jk9 olcy${#.b`)B;̮jM;4Pcz{4>A5cc(mLD"c'Sebֶ@N䁲RU?uŞ1V矒$N9w7. ˸^9s~9>X,a~xjrw*^Xot:oo,Uk ]e;nyV9(b4/x#38nޚ%ekU'jU>}Ŋ&HMS2>8 3x`N˥Lj[*byWϟWϟ?|vGl P'|)w/eKOfҁ/~dz'/uD[l3 Cq6AiG4{*oM13:꼻 xmrA$&7u0s#3IBp1qdwO7I!e7"5D$! e=J+~ݥGQSKtDi qPW|{u83!U$f&Ux OțXE&%¯8\*tHGHi-uo`Dưi\E E&M̹nԨ3M"CbǕQ ^l qpߥD02'Hvg"ʮ]1MNkƌB7Ќgmx4Jd ^{${rCwǾksq/^9$(cjMf J}9|&O#,Up5\}BUt8PCR.$`')y3 Aφs6*F`]ao')kJs<4TiMӬ!c0#A,,"န1r85z4iNtq q9D%{YR]#ʫ{qڶF0Ie?5 ¤m4|`sZ:WDB,*5{u,{n1ЍӢrC-쓡%ՊŲ'(8BC6v gF}Pnx/+:0K#\_uWz Д9⽿d ck#T0m[\CJ# , AYd*!ot%U(\}"AөHJ;_̩Օi;$ mf[(u9dlSu xqWL> AYfWkڣ`T8㣶nM/hTl1>D'JxU|s:42VAkEsԜXŽ=]m/dO|xdAi”,&=fw[PK ZU xl/_rels/UT R/Yc0Ycux PKhZUD,xl/_rels/workbook.xml.relsUT AYc!CYcux ϊ1 >E}'3 "b˲UJ'gdw(+x~ AVЫyrP䬯:h>XLia]NV[ꍤn*AkhEmKriR8I16=psP1զ7Uj7z뺳@N_Iؐhϥ2vO/ͧw:}zM⒯ PKwZU8>[Content_Types].xmlUT 20YcAYcux n E Ķ2$]TU'>mP(3I/HWE7eTz {'TPǣg{Y>H=–UrZQ˕7(Ŗ rgF.߀m{>d J&i e֋.bDz-@L%$|C3j$D8GŘ@q7=A|w6'_!->CX*eN[g.PK ZUA_rels/UTR/Ycux PKZUIK @_rels/.relsUT6Ycux PK ZU AndocProps/UTR/Ycux PKhZU^wdocProps/app.xmlUTAYcux PKhZUm $PrdocProps/core.xmlUTAYcux PK ZUAxl/UTR/Ycux PKZU*?^U>xl/workbook.xmlUT;Ycux PK ZUAxl/worksheets/UTR/Ycux PKZU|#fQxl/worksheets/sheet1.xmlUTEYcux PKhZUɏc xl/styles.xmlUTAYcux PK ZU A xl/theme/UTR/Ycux PKhZU?!S xl/theme/theme1.xmlUTAYcux PK ZU A xl/_rels/UTR/Ycux PKhZUD,Pxl/_rels/workbook.xml.relsUTAYcux PKwZU8>y[Content_Types].xmlUT20Ycux PKSpreadsheet-ParseXLSX-0.35/t/data/tab-color.xlsx0000644000175000017500000006471714576335353020436 0ustar michamichaPK!EY)`[Content_Types].xml (T;O0ޑWjځ0%1K>K;T!-=t|ktْVN*۔m߱ Rhgd;@6]_M;b=X`΃H^T+Fr6y8lX=mz,{ؿJ&ת.{q47V˿L*7?+|xhNRKrJ JB!CVOVέzVHW U@@HlE #=xOm|a#]~LWH4$q/tHfGƣC瞈 Dk"'ݟ Ah;PK!}T  _rels/.rels (MN0H} PnRwLibv!=ECU=͛f0={E tJFkZ$H6zLQl,(M?peKc<\ٻ`0chGaC|Uw<ԀjɶJ@ت` %TKhC& Ig/P|^{-Ƀ!x4$<z?GO)8.t;9,WjfgQ#)Sx|'KY}PK!xl/_rels/workbook.xml.rels (j@ â{[J)YRCe&G$4m HhclD},ޅj rD]I's|ך\,DiB-LmlW~{@uᩖA({~5+ ЦQE&3ܓx3Iߊ/ iC"G] S~7/>:PK!Wwkxl/workbook.xmlRێ0}N dQXjט`dªwfj_ˌg3sf~ Kk ,bᶒ\ߎQTLY# "s?2,v}8Ja^^h 9w%ݬ֔H'|][gJ"pp,$#}޿+"LFtRA%=cQtt|pZ y&kv,׎fފX^Axsе6EkR#^b|_o;۰ATrNca\_?'7\t#~}>߅ 2":v%D5X؂UR_zPp6b.BXe + hؠ[pqxhTCmpY} *۷%Dn3WOCfWJCrF{ X)KDօ zٙ2w3. ΫC^q<)}8}zؼ"d*yZ@M`:kjU748ޛY\I9O&w{9E"'I2'rI|]UZ@aشqӲVWJ|sVף&|jV{PK!0kxl/theme/theme1.xmlYOoE#F{oc'vGuر[hF[x=N3' G$$DA\q@@VR>MԯNDJ++2a,/$nECA6٥D-ʵ? dXiJF8,nx (MKoP(\HbWϿ})zg'8yV#x'˯?oOz3?^?O?~B,z_=yǿ~xPiL$M>7Ck9I#L nꎊ)f>\<|HL|3.ŅzI2O.&e>Ƈ8qBۙ5toG1sD1IB? }J^wi(#SKID ݠ1eBp{8yC]$f94^c>Y[XE>#{Sq c8 >;-&~ ..R(zy s^Fvԇ$*cߓqrB3' }'g7t4Kf"߇ފAV_] 2H7Hk;hIf;ZX_Fڲe}NM;SIvưõ[H5Dt(?]oQ|fNL{d׀O&kNa4%d8?L_H-Ak1h fx-jWBxlB -6j>},khxd׺rXg([x?eޓϲكkS1'|^=aѱnRvPK!]xl/worksheets/sheet1.xml]o0'?XOdmh"jEjѺ ,TS"&<=-+k2:rJH[*Sg)Ek d <Ϳ~I}hBbSہ:-fs xIli  +w VFuDn&jUxPJ\=:Qw?Ď'VYo0E~yɖ Iy}9{6T1haL+Qmkqu-798ѿ+ɷnq'cH$Id͗ OeB2%f9Ou='[bߠ1? 08}bh^;ePK !6UHHdocProps/thumbnail.jpegJFIFHHICC_PROFILEappl mntrRGB XYZ   acspAPPLappl-appl descodscmxlcprt8wtptrXYZ0gXYZDbXYZXrTRClchad|,bTRClgTRCldescGeneric RGB ProfileGeneric RGB Profilemluc skSK(xhrHR(caES$ptBR&ukUA*frFU(Vaeobecn RGB profilGeneri ki RGB profilPerfil RGB genricPerfil RGB Genrico030;L=89 ?@>D09; RGBProfil gnrique RVBu( RGB r_icϏProfilo RGB genericoGenerisk RGB-profil| RGB \ |Obecn RGB profil RGB Allgemeines RGB-Profilltalnos RGB profilfn RGB cϏeNN, RGB 000000Profil RGB generic  RGBPerfil RGB genricoAlgemeen RGB-profielB#D%L RGB 1H'DGenel RGB ProfiliYleinen RGB-profiiliUniwersalny profil RGB1I89 ?@>D8;L RGBEDA *91JA RGB 'D9'EGeneric RGB ProfileGenerel RGB-beskrivelsetextCopyright 2007 Apple Inc., all rights reserved.XYZ RXYZ tM=XYZ Zus4XYZ (6curvsf32 B&ltExifMM*>F(iNHHCC }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?5SGOYtu;9tM`U:[|?Тյ7Se?׃?S x3 /<)ozeς:}6]O 'Y h p5ܰ%T>J@ W;5Cs|V CoFg8|ƶڞkۅݸ('Ə i>&xVjg< 1P¶^?&1Io]b/!S x3 /?׃?<?z95/xZK?W,.N|cZ018`LG (ƪ oS x3 /c0~Ox%x7 W$5}WE:]uiu [y ʹ]mfDvBq}N#O 7Ꮜ+Z#ZE񅗊~燼1;]'ºt&=Cçſ:vS x3 / T#~ #3"?ր<:o :y7~纻{yFgGgbI&=/¯'^ wKj'ogo >4kV[Jk=oHԴvϩ^YYGn€=7z_|#;\^C=$_ <)?jml]5|?7x_ W;5x/K^:މ |sƗjZfg/o-ID u)]X~0!(6Ml+im%߇x 2{AGrX/O<9=W_}CKVxV#\x@>'ĶY v/%of]ᯅ<?~VԴ:W~>6itȒ,l[-wI綶xg??{s%'#>7 s9'#Kvq_\moonIGvCqq#bB"vȑ# ^\wI@# |3JAqF@4 bP??ݏkml 0s0JKQӾO|aZi>흕ؼ=0-!M>$҈EO2iY6$^\wI@x>7=A|2sJE mmGOC^\wI@[W:ϊ6sQOxS6 .Ṷ76D7P vC5Hs᧏{c6V?|i_Dխ GVwrMwhP {%x#|Y#xsBX2| GQdž47"k}^ʒj0݋F75A|oSO:xkHh_u i#I-ȍ2xg4ox}_!Ws@Gm\xg4\kz!f$ NxePW1Q8v2EeY u?!Ws@Gm\xg4ox}_!Ws@k7Uw/j KٵpJٶ;Hox}_!Ws@Gm\xg4ox}_r~ֵuuYx5O.}fjKģ26 3)u!Ws@Gm\xg4ox}_5|#WVM1{l7o^HxwFT5_*JNEY5tUDY:PMxg4ox}_!Ws@Gm\WY&iȦ~i ג[5?I6pg ZYcfXy "3_ω߆xJZ ݥ׈4nm"mX'K)pRHC(柃6_6W:{Z'4~.Z^>_ hOQo|[}uWUZ_mx_QIs,6Zs$vD:Ep̱,Er;AJ<9A#vJ<9A#vJ<9A#vJ<9A#vJ<9A#v9K|IkzQ|)(OmYW"3y T}@_% _;@% _;@% _;@% _;@% _;@OyX G3zY+M_5@6@7mGTci P+M_5@Gž0CiR SelB-yXz뿱ikƨ? HV6jm#Zo?ikƨn=_LدV!SZUQʠikƨ? HV6jm#Zok@G#JrAI soDff,tlK'$I&:m#Zo?ikƨ? HV6j<֕iȞgn4ۂc !AyOjg$'Oҥ&ayPnOo^M ERKYF/,MK|}ↅ3{{Mӵy5-kRPu_IԡG}"mB(fk#Bmx=E xd 74W^"h$oj+4+gyRA:rzwiJ?eCNP/t%&撀ӣ)74gx IVOo&JFs_Ģ5jYl#/f꿳eCNP/t%&撀ӣ)74gx I;_4JM%rzN.;|3+$G  ̒ `?eCNP/t%&撀ӣ)74gx I;_4JM%r~XֺчĺT`x  .YȤx=#$@:ӣ)74gx I;_4JM%2GRoi(xc:F6qIp$@ׂ*xJgnU_Hc iعeCNP/t%&撀ӣ)74gx I⭇᧏^z]ŲK^iR4CN/Nu,eN퍌 }GK}:/58|/Z+5ço6|yI^6V g k|]sSⶑoZ|Gص桦6޻K^kWcj#$DX-[Cqss$J7P&!bVf^!n7&2f8elp@=GK?+KĿ K?+KĿ K2/Q ~N8?+KĿ K?+KĿ K?+KĿ WJ5Ų/&2ƶyyvy~r+KĿ K?+KĿ K?+KĿ S>%Y!Q11Bu16f;$ր:J?R/C/$?~J?R/C/$?~*eayR3HOPGO?Ϛ<k?ӵf\=C:oWޱٛ^[C~ǧŦCq@aVV0SX-`'I I$ e?T}~_Umo@lP?T\^Zw[/|XN |J~g?v/*ݷmm>g?v/*9 "uo|qg{umo@lP?T}~_Umo@.qx:=m>g?v/*ݷm^r}t@ǁo-$ ո#z(  :Alsր:ݷmm>g?v/*<ݫ|.sn &NqlO@94? > )>U>xVR<+_^\iK=nYdfwv$Id~wǏA1|s|=eOExB_^ik9qxC/nm|GkqP_^ּyx:e$i4XO WO6d*r7ƍALC¿./t!_to? 7 xWnD<+B_7@Dž<2Uo]׆4Y4{=46=߃.(#+5.dF%k|Ž$Z&MKW~Kѵ úڬ$ u+Yi.Ԇw"0soN6K:՜ 7 og72"$;dy!1!0RFj83t=?C 7@#ڇ>'|3j83thW1Y2¾!LWþj0%LJ^\MѦUޮ=?C 7@#ڇ>'|3j83t=?'W gգûT.;>ZFpNuj83t=?C 7@#ڇ>'|3j83tx?BZ#Ş#o|Sp5ҷ)ɴ{ :G|O|g??q?f{PφC>n9+S>Stx'Bxp(Þ\@G$؃_2G|ٲHOC 7@#ڇ>'|3j83t=?[C៏fx#op'Un S[i;dSy_I}05%i7u瑧lg0I5w#2_ S77촯 x#No=k%iFMu:io/Fm-~ ԍf*z%Эӿk@%Эӿk@%Эӿk@%Эӿk@%Эӿk@lj>6fkCl<߫xe{LikIO%Эӿk@%Эӿk@%Эӿk@%Эӿk@%Эӿk@w_xOFLX;K `&IL3d+g:K$[_րK$[_րK$[_րK$[_րK$[_ր9?xր߉eK,!Ysԉc'ld Ú?,oZ?,oZ?,oZ?,oZkB?W*<V9H|X4_tdb1IN-oIR Px?VWi?VWi?VWi?VWi⯉^᧏ >%zf{Ku4zw9X݂Bl|"Դ kiycFŮ[i3xOx6Xtua6ॊF*v";\8,B dHHVVVVVJxgLgc§{=UAUAUAUAUAm.3Ã|ŕpwsVVVVV?\ńfTnaoGPoGPoGPoGP$(r-?P1[qq#Z&AT?Zueݼv,v:(JmQ4d3|o' o5. !+LV]įA#h-q5;ItjPF-oJoү>uh9q~"<gX'S^?ß14QkP>XftV9wK*cVPRK/+/V >^$W_-/|I[@&Z_x _L'"mr-O_DTg_}_. t1<+0i0U >^$W_-/|I[@&Z_x _L'"miO%|EiJm<@VX:/u|;dcN2GD% aeϗ?+hK/+/V >^$W_-/|I[@&Z_x _9?xMZ i/J< 7Nzs"b$?2ğJeϗ?+hK/+/V >^$W_2U"Ams^ n+ ^ё~u%%Nd2 AtiO%|E?2ğJeϗ?+hK/+/VWzuOGiK^ >p+( (X"]<Ťgܻߜa@P$GQܒAcxDAkCymuTP@y%N.I?owVRxqMLj|CukMMR_9'V6 Ġ򵮹c~DŽ4?hǎ>gQ,<RMsUA{w+Ciul?B'%Zt} 3Xxk3y7Jm,$T.ҡ/@|'@ڏ%;Q?j?@ >YG ?]rn4?A3/u #ռ2w}#j lj?@ >YG ?]OgK ,vti^ŰLpEPL'"sn v4?.@|'@ڏ%;Q?j?@ >YG<1qk4icQlP7Qƿ-cI'4?.@|'@ڏ%;Q?j?@ xP#±Q .9>aif,/u#w8O( ?]OgK ,vt?.8/ ՗_]i;o C'/d kv  gu]_iVǿu+ i1\IexwEU-ȴ@nt3ãȶ§`]"eq7/",dKxI$j}"-J}zֿYY[ZšN{6uZ>&~\XL ]^,KFDbgRZEGFuX9=K:?:?:?:?:?Vox_WhZE1Z?H˴" UUVEhܺu_g'=g'=g'=g'=g'=rzL45O ^-U`l-ՐM䂡!:ϳ{X枀{X枀{X枀{X枀{X枀9?A3k:xIZלSq퉤Ɏ6 VB7:?:?:?:?Io-xO7ǡ9S 5O 'ú1eui%XΟod xO cz> xO cz> xO cz>*ǦS̖zC!x<ņi|CqrGx%UlASQek/7:coE>$PGJMe{I[l&|b~^jmfK~֛&~_m<@6^"G5h_g;iɪN~߲xgEg SQ;^/gZ]i\ u )n[(a+:R9@= _OxO i3=V ?c{'A? u?[@ߴf/.M%]n-gOS9Ma$]!\d/ypCdJhBčEm"eiBa)%[Y]r*[ƽUe y֢c*| e;磗1$`nChN_|S 6JNc*qnѼEG+9m@t!T,5B HZuа~aV P78_>RȤd PN^He0$qgAYm w|)`8Sa cW zmIRֽs;`o#0 +vJdd-?qU F`:D!*84*  Y {y/PK!}T  _rels/.rels (MN0H} PnRwLibv!=ECU=͛f0={E tJFkZ$H6zLQl,(M?peKc<\ٻ`0chGaC|Uw<ԀjɶJ@ت` %TKhC& Ig/P|^{-Ƀ!x4$<z?GO)8.t;9,WjfgQ#)Sx|'KY}PK!?d-xl/_rels/workbook.xml.rels (JA 0ftzlݝ&iuްbPKKȗ_֛i4G<`*J0|lYx۽=aqqc da&M}{~щ.q?$6B/49.b6ɉar~:UY>`6椗m;xz0Q '==D.w$N-eRJ xfuMѐd?2S_;<{r PK!Sixl/workbook.xmlRM W@llg*͇V=(,WU{Ǹi\a7Lq?}IKb榖R_N#癮Yg(pz>sE][-!B12iŨk/VڵBxkxA0M#8>(bEX !򋤘,,F4?.?QNiN4f9qgFe(7eoBM۝N4^ͭ3r'PK !K'FFdocProps/thumbnail.jpegJFIFHHICC_PROFILEappl mntrRGB XYZ   acspAPPLappl-appl descodscmxlcprt8wtptrXYZ0gXYZDbXYZXrTRClchad|,bTRClgTRCldescGeneric RGB ProfileGeneric RGB Profilemluc skSK(xhrHR(caES$ptBR&ukUA*frFU(Vaeobecn RGB profilGeneri ki RGB profilPerfil RGB genricPerfil RGB Genrico030;L=89 ?@>D09; RGBProfil gnrique RVBu( RGB r_icϏProfilo RGB genericoGenerisk RGB-profil| RGB \ |Obecn RGB profil RGB Allgemeines RGB-Profilltalnos RGB profilfn RGB cϏeNN, RGB 000000Profil RGB generic  RGBPerfil RGB genricoAlgemeen RGB-profielB#D%L RGB 1H'DGenel RGB ProfiliYleinen RGB-profiiliUniwersalny profil RGB1I89 ?@>D8;L RGBEDA *91JA RGB 'D9'EGeneric RGB ProfileGenerel RGB-beskrivelsetextCopyright 2007 Apple Inc., all rights reserved.XYZ RXYZ tM=XYZ Zus4XYZ (6curvsf32 B&ltExifMM*>F(iNHHCC }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?!k o["-c[o?Y?O*u'tF¯'^ wKj |2wu[ޙs ϧivMD䵰mCIekH w,1IpcU3)ٶxN[xYO9.^ЯS x3 /?׃?<?z95/xZK?W,.N|cZi018`MC ,qz)_Na 1h_'oO]n-<= [UѮKD:x.2";!:~&|G;{S||7~?>d;/ dǀ?7ţvOwi0Z%ؚ[4`:g_#P%AG!G ;g!IEyu umWu=OoBCo/=]]\K= N h5ց jia-|?^\:;V7vv.x] "=7{G#n< =Hj&~n/`կŵ߅߁Ҷ.e4[Qlx_ W;5x/K^~:މ |sƗjZfg/o-{ki%xdEVR8W(|F>.xJjL|#=ۭ"$]S]Kg\JgbwO?d|CռC 7F>t^]CvMN+B~MwVMg!f:_sd? E?;>X~>&?|% xGA=L񥾵k@Z_&u/hcK{tPJ(;_ pg`P}W)){|] <%{%%}A5W>Hq]üOO'lڛxO;p _ᠧhBU*$G"{ T_WLЫ&q?FO?0; ?C75QAGLЫ&qFO?0(VY?8> |Q*ɿ_4QE?}_AQ᪋ ?`Y72}+xAQ᪋ ?`Y72}+yrԟ7Ao~k- $~ ;-Eޫ3$VFvE$fWxqqe^2F*ZQVkJ7r$_@ ~gx}uf|CǴ[&ၫlayUXbcÚZ*R|ECDvS#Da+3(FhRۊRqq@`mO:+ڟ tW xGSϏu<]GEu .P)17e w>"SN?|ECx_Yycuw7>XMé=vD&t$Zfؼ.O/??_;j)_@'<%>"Ovl>;ʝ?EͿil )@|EC0*5ԙXFC<pzckE$WNdN$|EC|CmLr0sOšvROlmN'6E6𙤰2Lb< Lor\@;?A}5=ȬxQtaW<>ѕ4ؼ78|c c$$Z7@I$$$hOA}yg>(MCG| Rlt{F.ṷV)qneк;уh'Ư?ÿ:tMGNe}k$=վoдr+#v]߇Lѿ|83.M,ti|R$_i]>fk6.ZQk xܥ⇀|c VSƵ+qm<+#~ ~c۾Tp (/km?I9MܭR~ηѣJ_ۈ~z;"a?TK o?x&_]=_ߋG_ Z/wk E~.9='Of"|n._#i r{g?5@&_]=_ߋG_ Z/wxC[ꑡž)s @xe 3_ Z/wk E~.M|/Ah# -zd5Gr,.;7xnxVuHX;G"7Gknp k E~.M|/Ah# -z?5@oxv᧏m8 kCM:QAh@9-+Koel$OxyI,ݛL%2I$4 +k<~0|4m Lj=ӣH6 h[_ėJ?DC@kh NVKk;yod\ RѢR@$g_&?wg/?7|O (?6}k\Yy5JlOV3n_CxO"LQ|5d'%xȇx~(!1ߴ <_?€"O; Co""B( f\r3O|xo mWO|/.-S.ԣ:|fK_[Ovmoko ɹ5!@W>$<ٷ(t׉ϊO^u}JTIw5u,{Hi˽x[A}횧qW6?45 D^mTٳdڹ^Gy>:GC@ Oz44y>:GC@ Oz44y>:GC@!C :GC@ Oz44y>:GC@ o/ g9S 5 '7hڳʱg:kѣ\neDR!Tq@? Oz44y>:GC@ Oz44y>:GC@Xb>xxO^7 o\=ΡkqpTJu/7yӿg?y)xwX*8P@wܯf|=_Sg"w~X/??( e\|5WP@Pqo. (s/O|#bևƀ:(<߈'xM4 ~+Y{Z$wzK۔-RҬV{> enM>;*pđ|=m:x>uO|5ŶV~7'Jl-lN0]&[{;t{( ~jwI 6O|E3^j9]7$մtImEK#YU1MtY^n>LjW}O (?6Ik?P^ˏv~ũjZde=_m2gL' p~z;Ն+-}Wxn?A]{ OA]{ A]{ A]{ A]{ 9M+ŰCJc^)W>m6YKʍGp!6rzWzWzWzWzWCֺѐyŞ(vx1 k7HZ}oK+ewrXu....5sxX'P7wo̗ú4PӭٶEF|zWzWzWzWU~iǗPkͷ4~wz ZygH4f3X\_߽^'毥c"|^avnO_sM+樆5[{f7tVC,yӯ<#^5xÎ+*8P@z_gi-5+'}M3OeS /n+dwDm@HJlԉPou <_am@?1=\R[ſLj@&o# [ƭam@?1=rO^.)"X|;_ "v -l7W f:L-&5oG o [~-cVz?0տL-&5oGO*Z 5I@7N@vȹ$mV?0տL-&5oG o [~-cVzkأ??Xճ?7[ / RHn7"@VH#!Ԇh~-cVz?0տL-&5oG o [{<]4bxwS iGKH*(,Nt|:3ÿk~__~ŧ_4wƾ;n oHӵi2CBW5"tZ>N_&?wg/?7|ֿO (?6wNχJlOV3n__'P@~#돆; ( >-v4P@2Or _$GŭM@_C;?li=U wI=k%x#V̐!|srM\>ův?I"j'<=פHu{9bhn5/*?W>$,o ]XB{:]^%P%bܪ>1ɻ<MLj8kTp (,ll/k/Qsir/z403:| ~xƟZ>1;ԾkO^M'I':z-׃> <+hAnaH`m x?_yZ5^? g^t KYcogu4R4&ͪ]CXgN՞ @eqa,\@Pi_9om,Kmgӵ^gE-NI'JlOV3mMĿxZDža<^& ' l"OI9C[Ho(ß0h5?& ' l"9-':6r-ΧdBw1 M4OExs ?@$D$P 7?`?kcM4OEr>$td/JK-#gW_[) 24M4OExs ?@$D$P 7?`?kc/ 8 2URg!!o"]ѣ?h$oXnLWS2! ?& ' l"I9C[Ho(ß0h5 n>5"iEe$mTrxUPYM`|+qQk;VZ փOqsq.n<[4##gbY$ 6Z:þx/ēZꚺS)>hƶV!촫kig湾ozE { _h>4k4vx! m%T+N՞ @ew ڶHtRotz| {R^0%6qpVRӾ"UC&j|n]BZyu ]5MMc6p=#W xᦙ(|]a*j?4xx{LuIciM"1*cxO (?6U9>sI Υ,Y{`lׂN0=M؉C/]c] ?=tߡj/ W5!Ot+@?Qھ4GK·j/ P)j^/*k't֕NՈ-lld%||iBox( :_WƟ(V_У[ ?|iBox(| 鲆_B)Lٖ0?rU#~ݴuھ4GK·j/ POt+@?Q5OlGKVUss~ Լ^]6hWú0WWF4}4O峌1{'if#q鿵|iBox( :_WƟ(V_У[ ~*j>,ᯏ#mlז{O# ćdaF뜀_&xwMv.?/㶣|1p.c|{m+ƍk Y x s35Z}gčcϿpTJu/7yӿg?y)xwX*8P@wܯf|=_Sg"w~X/??( e\|5WP@Pqo. (Mr'?-hm (:$!exo>:!ͼK!'OFO񍥍 lV T_e?]{>:cc┗vDՆ4DbM]eutYO0]0~W|~~kBi>/|/ux_ -#8u{01.\F r">1ɻ<M8+Tp (0ktmO ^*'}"=KQd /iVݓ8m#0gjs]қ~.˭/NJ!MeyW6|O$RlYw##c*s@*|+w+|w)mZ/>izwo42g]?C3j"-:}[Z6 ڞ%p__W|9|_ax6o 檒?{eo *F6 ą 1&?wg/v;\@P[j?g}Bf)?gkі%e=lm9p ;" 6ڧjc~֧} dž_N<5?ȴq5E -xk Gh|eWkDsE}1Yʋb˂r(_/j?@'QZ?8" dž_N<5?ȴC^Z^ʦOxeAl.t- FY dž_N<5?ȴq5E -2Oxh})%$kW;+ x{F@,oM>X[fVH=s@?'QZ?8" dž_N<5?ȴUx { kDHu¨.ʋz;5/ ~V&g,uZޛy;G"<6N/t淑crsi &??~߲c>"ߴGş,'Ia]jooK-E#3uG:B] UU?1MtY]n?^8] P@Gl_7+Yk0gj.Dž'fO (8F vP@x/=5|[˺h dq@?IZ'm (ξ/-bws@ o |R־zPA,GjhOixOX .VV"5;@{o>[Mseto6oPiY#!jBc悀= h(c悀= h(cPO6?M]r0s3s~ x?­ b;s# W"o9m>6Aj >o&>6Aj >o&⭟ᯏ^g_ |?q4$q,)cc7|;O\<%[Eo8j{ h㸑& c0\@%h&fAuY>*jJt>*/yoMխk:մ?]k fϿp;uX5 GocMXG#6Xq?7yӿg?y)xwXU*8P@3EoѦ8iP 3,@'ڿ=M؉߶Qe?@۬"uZD_]q [Msuհόe?@۬"uZD_]2K/--~>z< yf ݰan"?ٶo Au_n__kt}-"/.YE|\Un MԯNDJ++2a,/$nECA6٥D-ʵ? dXiJF8,nx (MKoP(\HbWϿ})zg'8yV#x'˯?oOz3?^?O?~B,z_=yǿ~xPiL$M>7Ck9I#L nꎊ)f>\<|HL|3.ŅzI2O.&e>Ƈ8qBۙ5toG1sD1IB? }J^wi(#SKID ݠ1eBp{8yC]$f94^c>Y[XE>#{Sq c8 >;-&~ ..R(zy s^Fvԇ$*cߓqrB3' }'g7t4Kf"߇ފAV_] 2H7Hk;hIf;ZX_Fڲe}NM;SIvưõ[H5Dt(?]oQ|fNL{d׀O&kNa4%d8?L_H-Ak1h fx-jWBxlB -6j>},khxd׺rXg([x?eޓϲكkS1'|^=aѱnRvPK!{& xl/styles.xmlMo0 ['iW( ʶՇ!)_?RrtݺK|I)bygԶ3g>e,(=)?~}|J"/6~eJ-:-N]IxڤUZ,2-DXiןV"@ Yz}D0ay)=;N5zۆsemoή3$ykM; B4~2 8yaBeų2T[-ǝPP9 c+41Ӿp%NKrO{5`d(aW?;ցPGl/(1493i8IΉqto4Ewt]U ~ SM `9ȦWQ(`)ce]Ϳ)/\6 A=aCN)DgP8;bk]+21iúU-Q1j)Z/(ݩXNV XHCw1(5=JNb݆`ɟryi %Sf]ozJMɕiprlg qoID i?{uZ FZ%cDsЎ0aFl54XPc;ѴNsٶ=atT"-XR>rqb;g*G\>"A|VJ N,TJ&YIν9W@x(LWl[Đ@XRE*q?EQ>ۛXKV¨gY}cP u+ITeZ&ĄNQHĕh: .?dlfjvlmp&;z 6feBb,tpZ6(B.ó]ś6257`>> 2a;ZY,5’s,bدSiki. 6l>7%Ϗcc k 697PK!҇Q7EidocProps/core.xml (]O M -tNI%~%&h#n#J毗[ /7d*NV:GiBPWBMVE3-XYig7Wlez . $(79zo(ƎoA1⺲plc#B. 7Dt@ #ͻ-[JPioܟ2p*&t:޽s7u6Fȟc[5TdSn ?K2{-A\yOmktpQFGy|sZbDILf1 %S:zm1.!Ŀ)d6 EO>GPK!yt>$docProps/app.xml (Mo0  9]1 bH7bvgNc$Ovڍ/^>+zLdrQ J<|1\Xߩm ["[xDWRiZϝ&8 CXvYޖGGF_c} M`>zޟbsJhM .XρѠSr.Ss5Y>Ryv݀#TRPa}[yգ oEJ,x΀lJEB-"Y0pN/GA׈{{ ^ΉGw |9<u"`׎<7_)0z]T+KAmJL-gߍ˻E<)y9oPK-!XzZ<[Content_Types].xmlPK-!}T  _rels/.relsPK-!?d-xl/_rels/workbook.xml.relsPK-!Sixl/workbook.xmlPK- !K'FF docProps/thumbnail.jpegPK-!0k=Qxl/theme/theme1.xmlPK-!{& Xxl/styles.xmlPK-!v^7+-[xl/worksheets/sheet1.xmlPK-!҇Q7Ei]docProps/core.xmlPK-!yt>$`docProps/app.xmlPK bSpreadsheet-ParseXLSX-0.35/t/data/ahihi.xlsx0000644000175000017500000002050414576335353017620 0ustar michamichaPK!bhO[Content_Types].xmlUT CCux Mn0z[?n–2PK iU_rels/UT (mkcnkcux PK!U0#L _rels/.relsUT CCux j0 ѽQN/chCn]aGҧOB_eƏ<⇄]dv TPK iU docProps/UT (mkcnkcux PK!^YdocProps/app.xmlUT CCux Ao0  P bHWbgNcdOvY{|xDI[_b RGZvH5D bƸw|^('zO9ӽ*thDPZT p繖4dMLJT&* o2`}.hL1a20؁.j݄*b bK9n褔Wo[v)0@{iD`[%W*]=XuT:5,t+(O`!y%)kWrͪ7 vl/c!!,Ɉcğ7:=Oㄑx]߷_"PK iUxl/UT (mkcnkcux PK!4+eE xl/workbook.xmlUT CCux Un6}/P}UD*%Exɠ%:"KQE}K7]&5*&Z#_ ]cu~gZ+iӲHeuoWFf,}|%{JW7ZJVV&9,.͚,nucnrZΖ+ 8e+OFXJ&j*٤%iǞ M?;0,BD9-3˵lCS2{JA4S{VGD0N =}@kydX6pH<ß@ăRK,MWMd d`n?c|0 7g ejG^z[A&z,Cd'O0.Q  EŶ'R I c'B#J}Y{߫g 7$u{}kn^\5˩oʺ\U9.hTe!9S%+v|bAgad"țV3C~0A|b6[G.-cBb+$N"W}GwAVP!gf8ebVd#ۋ%P$)NA>2!Ib*'zf6B@nusU`@pKvspLߛd6Luo81<%=9-vT[nF{ѴŐ-O=J˖CO@g}XmIe1UQsxdFd/CH-X.:Z--uF;ngkk|&x-ر_ċ؛6: y^NBمDCm:_Lއ75gnv"vAiN*˼ Z{,` WhZ CMj^G<%Hbe.pQ\wj;):c,PK!F xl/styles.xmlUT CCux U]k0}?=G4Im&G+f0(}Pl9Ӈ'˝ӱ>rdIG{t]5g,+"x s3e!9nqJm)~`U 7JS׭ f:%!MvRbW&Q72LY׺t2JȊP-,ޮhE 4H$-*#(ԹuEQ ;q'.L4&?t&̱DIvu~;O͑nzψj$0B/F8bz%+I X Fm\[ΏV.Ft*H"=) KjtjK{-^@+!s o$P:@ƬJ9TJ75rւ#j(wFf})PϴZP40}6ݣD bMٛ*K ˴n6E)Ysw%E;l$/:LZSt%WQ_(0#{jB̛C;Se,#Zcx9YD;3TZ]L7ipL bN=/?VT{ÞaӲ'Ȼ}I GhGIC?X0 {]pÔp|,GuKN_k PK!]xl/calcChain.xmlUT CCux =A 1swg݃$YDM , {KCPz~^T%6FPľ,JťdCnw_@hm=! e%ͣZDY+EQ q<`ګj<K# PK iU xl/theme/UT (mkcnkcux PK! xl/theme/theme1.xmlUT CCux Yo6 J%u [4Av葖i1%$( ia0 ++v{Dj6-:,`=xIH#aQ,^MG>h0i, symϮ- -0)'[%|F  .YAoHmW4"ڽ%*HdOgJ(7m0π4  N?}Z Q#릟\`0.r|_ :TKM\کt*K})>Y-y͚j\T |M|yw6ݮa4kxUoU _Wf۩*P7ж[){.!CFohuVKs eek&ɼX !]EDN%}N2 &(bݵ9i+((#=P>'0oV3y秏?}7nh{7o?~/W|?ߤ^*{O5&G,GB,;ظBXf((ؑ3ETkaՄ9d z|p=x,x;.cŸv9ˉ~rgqw:9O N`>o4glF!]wϙ`Ci< F Iz/B7H~7ZԷ񑊄mN%XP4A2БUކ w.*K2!wcYd-gYM1E>ZL!I\w'Xo[߃ Iu[3u?Na&Dxƽ:<0=[dXg[HդaeRRhKxrNE!yՐ)M{+dII~JBSw;s@b?mzb}t "^$NXvk Igq?N /uRz5mGN˪沪?V5y{e.kVˬ+'J> i'ZaМOFm3A&0M1a$G˜0;-p f& k1VwKio$TId&SI5$峑(ŢaQ+ NJއΌ L~ t1e4˫;iD&T0 X`_zW4kk37Hǰ.Ѥa&h'L(j]2˄ F"GDbnPBg@bjg9kx8ľYuL{A0864wʭKkʊkj˖EtM3x^ɬ#e*Kg{ۅ֒fRbϰ*Y\Wo>%@P驕Ύ ,2UrV{QkeʴqmVc* >r Ev9FI|hM+^SvBm M-;nnJ(2l.OKt|>\W|Z,T8// yX)uzR݂n u*+^m{n}dG)i=ҩ*E+8;_NtZi>V]7/PK iU xl/_rels/UT (mkcnkcux PK!>xl/_rels/workbook.xml.relsUT C*mkcux Rj0b촔R" imؒn m3]o>Ac>xUQ@o}yyAC`BM}}~Asn"GYœ$pT>!3LurU25>; -fжm0o#z>c!!@4:u : ۯ܋Gx K%3|'Twn}8оp6_˜ #O.PK!8ߕxl/sharedStrings.xmlUT CCux 5A 0EwS]H.OILEoo\|xټHiy$лƊ.KAu9#(yiB\G.k2,(Hӌ=b ye]0+J?;+Yu>-fPK!bhO[Content_Types].xmlUTCux PK iUA_rels/UT(mkcux PK!U0#L _rels/.relsUTCux PK iU A docProps/UT(mkcux PK!^YOdocProps/app.xmlUTCux PK!Rݐk7_docProps/core.xmlUTCux PK iUAxl/UT(mkcux PK!4+eE xl/workbook.xmlUTCux PK iUA xl/worksheets/UT(mkcux PKƀiUU xl/worksheets/sheet1.xmlUTmkcux PK!F  xl/styles.xmlUTCux PK!]1xl/calcChain.xmlUTCux PK iU A xl/theme/UT(mkcux PK! Mxl/theme/theme1.xmlUTCux PK iU A,xl/_rels/UT(mkcux PK!>oxl/_rels/workbook.xml.relsUTCux PK!8ߕxl/sharedStrings.xmlUTCux PKSpreadsheet-ParseXLSX-0.35/t/data/bug-17b.xlsx0000644000175000017500000001721114576335353017703 0ustar michamichaPK!EkJ[Content_Types].xml (N1&ä[3-00T=4)肐Q"6=̶VHhoؘX^maU jE@ՁCO+mHNfRht'T|s'hyK$$g~_j%38K`q@(]}HIY̱3o7d4TstCl iŠtL5O!"Un%֫HF"!Rٟ<2}-?~PK!P|NL _rels/.rels (J1Ͷ4ۋ?n&$Ӻ}{|͏lw8Ա7.JP-7ϫPI;ؓ3%U7WPrSjTd Z'҈@>G|h{lHo^ fLwޭA!OuYzb{=d iw ]6׻IСibN)Jsql_u$tw|phe% H@ PK!?d-xl/_rels/workbook.xml.rels (JA 0ftzlݝ&iuްbPKKȗ_֛i4G<`*J0|lYx۽=aqqc da&M}{~щ.q?$6B/49.b6ɉar~:UY>`6椗m;xz0Q '==D.w$N-eRJ xfuMѐd?2S_;<{r PK!X1"xl/workbook.xmlRn0?˔) Kj(6M EYHRP߻A/e\qvfv7wVp^ZS"Hnki%pLn1򁙚)kD_ww˳Ɨ [y+4 :L|}+DЊ4]ͤ3m^ f' @߷4RYb]i=*P Ap} Ȗ7T*N5Ɔ_,y/y 6(Ov+xy SI֡,> ynhQ Kd(ԍnNɀ% 3h[K8S|g>5w|AH1O>Tw?n }%&sʏwyYoVy(ion罩6z\ooO{tT Ip5Wf亩/PK!N t xl/styles.xmlMo0 %A;aŀf,9BaHt׏;A.1E^Sڠ枋 ;/G`8BWBy;@Nؽ9VJUU7RV3(l2[9V|FAVaLlTg5^-UczDl̪I&dC;|#& |lX>*jŏK*TBn Uhz l^GHc^pR7"{ MIqL /2#o\$5md_aY%g5o7Q5ufxm->%hd(ʋ';4D%}IqE^nVNOA{xo0otFqO2KMԯNDJ++2a,/$nECA6٥D-ʵ? dXiJF8,nx (MKoP(\HbWϿ})zg'8yV#x'˯?oOz3?^?O?~B,z_=yǿ~xPiL$M>7Ck9I#L nꎊ)f>\<|HL|3.ŅzI2O.&e>Ƈ8qBۙ5toG1sD1IB? }J^wi(#SKID ݠ1eBp{8yC]$f94^c>Y[XE>#{Sq c8 >;-&~ ..R(zy s^Fvԇ$*cߓqrB3' }'g7t4Kf"߇ފAV_] 2H7Hk;hIf;ZX_Fڲe}NM;SIvưõ[H5Dt(?]oQ|fNL{d׀O&kNa4%d8?L_H-Ak1h fx-jWBxlB -6j>},khxd׺rXg([x?eޓϲكkS1'|^=aѱnRvPK!&@xl/worksheets/sheet1.xmlSMo0W|5~ Jv5R69{bLm"g{3nϪ%G0V.4:K9a:ޕ_d'mp:ƹ>e̊SC_*mw/%ղ$Lq!5`誒6Ztn1rm#{;)q f'B!v@)Q"};mź;F[])±AWlJUNbʊ,4U~w/ЂpP(i1! <Na m @xq?=im q kݾ5H(ԧ aے XR*6"3Dp($NcT+|K&>ū2cG%{5d-ɍ_",I|XGymy@q, x~9x9>g]?:ba"w]&E~ bWPK!nKdocProps/core.xml (Mn0rt!S lH bh!'k串nԞ# %يHw7g:2>(k$e$#Tf$wU:'I@n$/%!B8&o: $dnI4'9rΈ'@TLhPK!sL@WdocProps/app.xml (n0 @VzH`I3'ӱ[2DHc$qz#>R7ua$|N'Yp~O7_҄|u|W1!%b)O+v ^2XҸU,Ň`_n=/iφ8E==omkgeJt6 %'Ks*Xk5n¹FL8k 5SBMեE2YCLަo mCr8wT!2i% C{DZ3c׍"5q\AOGwY|Ùcr%xbCӂ?_hw'JSM/S xuQ+XKA?ʚc-&d9y~_B?1ӻI)71iu/PK-!EkJ[Content_Types].xmlPK-!P|NL _rels/.relsPK-!?d-xl/_rels/workbook.xml.relsPK-!X1"xl/workbook.xmlPK-!N t xl/styles.xmlPK-!0k xl/theme/theme1.xmlPK-!&@=xl/worksheets/sheet1.xmlPK-!nKdocProps/core.xmlPK-!sL@WTdocProps/app.xmlPK >5Spreadsheet-ParseXLSX-0.35/t/data/bug-17a.xlsx0000644000175000017500000001722114576335353017703 0ustar michamichaPK!EkJ[Content_Types].xml (N1&ä[3-00T=4)肐Q"6=̶VHhoؘX^maU jE@ՁCO+mHNfRht'T|s'hyK$$g~_j%38K`q@(]}HIY̱3o7d4TstCl iŠtL5O!"Un%֫HF"!Rٟ<2}-?~PK!P|NL _rels/.rels (J1Ͷ4ۋ?n&$Ӻ}{|͏lw8Ա7.JP-7ϫPI;ؓ3%U7WPrSjTd Z'҈@>G|h{lHo^ fLwޭA!OuYzb{=d iw ]6׻IСibN)Jsql_u$tw|phe% H@ PK!?d-xl/_rels/workbook.xml.rels (JA 0ftzlݝ&iuްbPKKȗ_֛i4G<`*J0|lYx۽=aqqc da&M}{~щ.q?$6B/49.b6ɉar~:UY>`6椗m;xz0Q '==D.w$N-eRJ xfuMѐd?2S_;<{r PK!cxl/workbook.xmlRn0?˔8a)p"蒜jd"Tȿw$m^pf7=nЊ|5].bJ[Is.路 ޕolz.O^_&v͘ h:|WZ$WLsi茰vaZ [i0aqx@妖 fE'(Q܇C%T1=*}I$O7U;Rwq.%O5ƆixA9uz/E06hAB`)lV*֣B3R31><7?}Y Jڠ枋 ;/G`8BWBy;@Nؽ9VJUU7RV3(l2[9V|FAVaLlTg5^-UczDl̪I&dC;|#& |lX>*jŏK*TBn Uhz l^GHc^pR7"{ MIqL /2#o\$5md_aY%g5o7Q5ufxm->%hd(ʋ';4D%}IqE^nVNOA{xo0otFqO2KMԯNDJ++2a,/$nECA6٥D-ʵ? dXiJF8,nx (MKoP(\HbWϿ})zg'8yV#x'˯?oOz3?^?O?~B,z_=yǿ~xPiL$M>7Ck9I#L nꎊ)f>\<|HL|3.ŅzI2O.&e>Ƈ8qBۙ5toG1sD1IB? }J^wi(#SKID ݠ1eBp{8yC]$f94^c>Y[XE>#{Sq c8 >;-&~ ..R(zy s^Fvԇ$*cߓqrB3' }'g7t4Kf"߇ފAV_] 2H7Hk;hIf;ZX_Fڲe}NM;SIvưõ[H5Dt(?]oQ|fNL{d׀O&kNa4%d8?L_H-Ak1h fx-jWBxlB -6j>},khxd׺rXg([x?eޓϲكkS1'|^=aѱnRvPK!ղxl/worksheets/sheet1.xmlSMk0/'n&-lgE"啔RHƥK5c73Y7).i2@+Mݒ}?yі1-,8zS|ݻDhݒw ƜA 762V 1Ye6\[q[W!@p79XIvn;>ef|e.[y| {>/6/ɔh/l6Xcܿ>K\wQcXXPK!`-1docProps/core.xml (N1+auhJd%('7C}#x^ ndU$yfyA%ad`SnzIQX%*gaIi!=.<DK$wS'IaS#0aC[:-o %PHvH%UPB,F&jo6tnC}qP?D=뺞i~F_]^wڶ^I BI+(N_ا d.R`x~2Ϗ/?@n=h{i[hjTLQ czQ"+*uּ{i~xPY+/+RN 6ˋi^ 8ߴˌ[ٍA=~@ظ&q4 PK!sL@WdocProps/app.xml (n0 @VzH`I3'ӱ[2DHc$qz#>R7ua$|N'Yp~O7_҄|u|W1!%b)O+v ^2XҸU,Ň`_n=/iφ8E==omkgeJt6 %'Ks*Xk5n¹FL8k 5SBMեE2YCLަo mCr8wT!2i% C{DZ3c׍"5q\AOGwY|Ùcr%xbCӂ?_hw'JSM/S xuQ+XKA?ʚc-&d9y~_B?1ӻI)71iu/PK-!EkJ[Content_Types].xmlPK-!P|NL _rels/.relsPK-!?d-xl/_rels/workbook.xml.relsPK-!cxl/workbook.xmlPK-!N t xl/styles.xmlPK-!0k xl/theme/theme1.xmlPK-!ղDxl/worksheets/sheet1.xmlPK-!`-1docProps/core.xmlPK-!sL@W\docProps/app.xmlPK >=Spreadsheet-ParseXLSX-0.35/t/data/encryption-standard-default-password.xlsx0000644000175000017500000003000014576335353026000 0ustar michamichaࡱ>  Root Entry CN`@EncryptedPackage"DataSpacesM`@N`VersionL <Microsoft.Container.DataSpacesh EncryptedPackage2StrongEncryptionDataSpace2StrongEncryptionTransformXL{FF9A3F03-56EF-4613-BDD5-5A41C1D07246}NMicrosoft.Container.EncryptionTransformDataSpaceMappDataSpaceInfomM` M`StrongEncryptionDataSpace4@TransformInfoM`PuN`StrongEncryptionTransform4 M`PN`PrimaryEncryptionInfo $$fMicrosoft Enhanced RSA and AES Cryptographic Provider (Prototype)c kD`ߟWj9i ``Iƴ}j,?9*P\ԣe}#I[I}+#TB;:HIbův@l_V-J'[˿v]/Ós3u ~CX!ur*$) $+R|g$KǼ wьȯs  92W/\vd8|uRM屢6pjZuƎs6aQhfJK:*p#ǖKxϨ@b M02{ޠcRѤHFҿ[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqixIC60og f|(bm=/tZ-DO WgƜNiڢ_iKa\y-fͦrU_,Z{\CZ) ^]u!0V6|=%FEn і+g#. p"I{D/mWQ;ߠ{dӺf${USè R$\K=QSd NLzVg=1[hT^P8/jG{;Q0',zo-N~Hs`t՗awGL'8'1Rr [NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqi[NGjBѸLqiȼi Trun@@,8ݥv:BGRm>ޚ $P )!LO.vBӛ!Si dv!VtueK=FGDLztP]rSUBn p s*ZS'lp—\a 3ܯ܆b{Q@h`_QDI&jq| :\ߴY @dZoRp^ 0A_bxUuG@ ݿuhs;o5|TWJ3"eX#CR%y 8F[vRg t˵_k;GBk&vхv͢zJ 6`K&f+,2㒝 ^5vN;yg'Ca-owF[kya`񣍊y@XLXr*O`\o DhOM#4ΞbE~$c, *@t5T:wGJL]b=p_ؐz$?cذTݿgiֻ"orG¿yOX*[Tl_3$N-|ۙզs9x[J G6'fDuv57|Vzq2Lrvu6цp̩n7S'`^N^Mے2~Á N=BgJP\@M%Y$r7vJRL4-w{_3Rq+h#gU,JN"=c6-W}/Mj֧MC&X8 Oxa3W#dN"ڏ+u云pKhۅSig|_U φdS: 8@iҐ32 ]p"Y& 5 ^/ 40"7;RL]h+ᄵvU֍3xLWx D 6*}k =2YH\ܽ`).AƲ4 oA!;#ϗ{]#6L(u}ǫ+˸a)#2kB^UQC@Lpx3 ]6CG_= ' .jX <fקZ)T;;q8*QQ~CBѕ;K,۞*/*10m.IQ &N48º|IeP>= CK*PxE0茹vP<52U2(Gpg̶c㿡@Z^U!4b#¡V|Xdi>mۗTi*Ó凍qƲV.=h1KfU.?X1#(J=4t T/V`EgUNC֐iF##\[$rFgD.G˫'&pN%#MF#EU`k]f<_ͻsZUt+|$rnfq.Rgl܆O X{jY^QONG*3tݐྲྀ=2v5p@To}$ef%Hm2$q] i;Nv+ò:[!_bÆA<#nEk`tw}&+51_?/ߝbR={-+c<ʭk mIJ+L9Z!'%ʟȊ>-{##{!B"__1m7Ɇ>`>0Ax #W{M ~I%&/O;Yn£U,9'`LdDD)1 QfO;z #h(1lM|^yS&N!^/쩆T@NSz6R@|;LO>j!yJGF+瀈rԚeU=4=|meW<^C]ln^_y WV~xrR7)e,]E+5hU|_ѸOmKZ- UZ `~?;Oyi8v8҇vRؼEQ.. ohM RS.sY'>aر ⏫G`=)ۢH/:+tFz -À Ur߾B/ݸ ۤqiRSk,F?W6ܡ әxm+`:CsU+V.龻;4~#K>c@!m]t簤|1kz2gB#s@hlB MYv(tQz#w$QCJ=.إA t2kUUh!R:oxo-alniEDVw{rUǴn{Pɳmy' mid e!}aJl7zdIt#>& K (TRgoi~ v45.o.@<0HOTJ|r4D詻ÅZ+F@A?0 hpRH,'$߃fN$,@;q@sf'69B'}ɳj 7>p|%yAMf0g#iGFlna*e@Oou9#5Wc !4Be黧,s/ Eފ'0Qrٖf`[IގtV7T+&GЦz./pζk%"P͜0Qr{ݾ!lEF_}b!)%9ipPi }֠.Ɯf@+ ->pvpW~ ]}`"8K3ڀ=ք ɜgf^MD,cE# HJ!vf  \y;ZTŁiVqQ5~D>ŴTKS lm: cE]5$o?`29iiD UtTÅzRdjJV!㒂w#hzH3:O9t|y!V:QN?&,gzG)Պ, GNĉ.0 CIKM%a0h_9% >vk| ~( 1&Nfo&0N:ЈG7-#㢥,qIMю46+d7q˲N._0&>CUM*UX'""feR&L{[:f!LA(d_ ;Q)V'}+ЀGAaGkiVЭl)ˎyV,֧Ej ,VMVE'+`~/Sw`bH이a'O=Ԧ)xa<ļ|nگIC1"9$NA$6[+Cbna_qci5\7G %/O7v 2TQ;˼=&"ZgqxYWb^rӁS߹53Wq38OW0^?'|ȁAPWv` [֛ZD;G[ҡ<$j|׷)Q@tx Uc9Q>4d~BʐɌW2zKs{t M25~R źc 1ڒk'`9ye"JI(Hl8 )fF&I6?I:2jI/>, '6i>~X΅R:vXPna(57d&~ND'a&ԨdTo%],ǢlHXpM (MVil(n#btOaVlc!%hV|Xdi>mۗTi*Ó_&#n7'x֤~pN+)HY×Jz(Agh'+:cRˬ0Bh[fn+')b].pl|ٗCnb<%nf0;ȇclct+[ g55H>Zx% NԶXfrkuǧ-1 (flib%5s۴³,JpѱV+Y;DSj&xqmЗvK {ԀL0d&f$RiVР#tBً`k@PFն̓'}'qqU ^p ZՁU]I.z ⮫-۱:Z2kR%vCDSX?[_?ĕvuiAg}_g`=\/%ihOo.?8JTP6aS8nA;|~Ǿ;kn(նKroPK@T&Hbmxl/theme/theme1.xmlYOo6w toeRuرۭM$niXS@I}úa0l+t&[6SifX[$?|"$Ir.6,D4 ;BBR$'c͈l~e"+R*ݰm4yJXscCځ7fvXcL %8c4XZs}_لľK)rl0q9=&f pH+ 1,,tFZnJ 4s:],~,`um;穁U޽pxkv Ļ+vcjV*xo_[.U|M&+,, cήm`U'nŊ&HR2>z8 3x`mT& I_TuS |gOg<=zÇG~6^I2㥎~K3P_?| -G:|Hc"Mrx 80´B#@}U7gp]Ru:Wu?SE Q\pκ\͹͙&Y=L{B۟e/"5wD$! ek|B.P_p ݥ%C:Rfk4L B+ٹo*3K*n Fqt "3W.D:$~@41T"cw,"\GnI/qjԙ&HN`b˕Q ^͐l qImPΖַi7H2 36$){R49l3 u}ٞ÷3%b]mny[:Z+"R!6QA/_$K| 0Tij;Вff9,ThĦbn*h2-7^5,8ڧ5ž 򑦞]k:GSwהlB lv,.Tġ \ -2^bge*xE. PT$U`4uΨ3 ueZa,{2-ͫIw_DqOaJS0q" r|/N-0oo$ɴa b㶪(8SCJ&`ZJ =MBXZ |YՃ$ҕvyʚ|ȩk 'ŶQ'p;>ZpGyN\Ib:C0B{'"(C$l8]-ɉG::$׸Teȯ/K~QL? 竹ܼ#xL@zcH50^Vwtػ^=,:#7U ut,9dg)Ў?d/ʎV?k Dd~_?PK@T&HYxl/workbook.xmln0_T`кMlgZEp88wHىSO\Q} ƒzrS=0uQP;3.%ׇ &EU"5Ӏ#Fc0g+{p8~3dS ]# i0MΪ\iU$yQ~ZuЛ^= 7zQ-j}wG$2-#͡ѥVf-C1CS_B]*%r(KDdl|dsnu)G$DBE%˺8/5)g6(>07pcNmh-oO(|Y).!}OPݯxbӄQỴg58f<}"b cLzBO*Rk 7LUPK@T&Hhxl/worksheets/sheet2.xml_&ǍU'U@愤{;/v9aJIjdnu8.C#jtty2???ӧOǿo?ӟ廟/~/v?~]?_y~ӿ_~/>ϟ~~/᯿|~~|o?旿i|_?_~/[OoSiSκ>oqO?~:>!7?^W_Ͽg?o%_>O?ܿ~_~ϟ7Wd}o7˯Of㷛.p~Zo?~1?m1aԸK6Sr#~]|X~GB!t*KWJ(HzMw,@[6"C,P\26|szOݧiPЁ>N諒ڂL &} jjć3N4 Қc5EQ76kWHk?jĐs4pmIl_i1HkKjē34ҼO4ZkXiKScxezԈ;uNi'w>ҏSݩw̝:Hv}}*ՉCuPjrz$<T'#bPT8ooޗ)e+̡:8}ԑr|Jڡ:qCMFu<,űSƛ)U[T'ՙEupFo<ڡ:qCM\N{tjՉEufQ,J';7󩶨N,3`Qǧk.o~EubQYH D]~*WA~{2jĢ=}]-K R?bFR6ILj2`R+L&%k]o6ILj2`R Dj[Y$&5IM0)ù?Iy[IM~m2MM^'%̟iRԇ/2Z3I=)'{ڸ*zRI;)s'w8O~nY/Ib}ڜ2sӜ慛(ͯf]Ͼv'%̝T@)I\|?tIٝ=ziOA(= )GI9R\JI\ʧSmNJI9i >*TsRfNA(nͩɩ'Zs2fNvPAO!t6YmNFɘ9Yzi2'}7'Ɉ93';i6\J ɟ/ڜ1sBq[7|lڜ1s20;(KdϾ6'#d̜ )74)JtɈ93'sJ-|?9YmNFr0tCߒ99ޘ{Ĝ94%>1Y^1ڝ1w2p[(Cw;npGZwZ̝S=u÷Qm[;OCi{Z̞S=ͶLWmObҵ#gU"?-3W{wٗ>>ϴ6E j1Z`PwQ _ٔ}ajZğ/KwVObҵOۏ$O?-OJWԥ;T"hH3OO}T}SHi? E-ۓ(i̟6Sӫ%]6}k{Ğ6 dO>q!k{Ğ6 dOMt_|ڞ6i=MOșڝ6qi;MEmt'ڛQZ&;mptg;Śήiw̝6Si7vMi3wNӓ^ݕ]&洙9m0}2'F=E9mbNshNc)?ڜ61v]tgx4|!/H,@-;zMW2fNX.v1Tyd,}}%UWT\\Ό\[EϥjYEkv/p,IWF~쭟jYE w/t̸H qv +]?3c,۞EE x/b_orҍ337T^Ex/p1͋Bz ূWrI)E]!7H_hfM7v3ā'ffܕ]=^YU'8r@'ffOޭ@04\̝6c sgks1KM P3]öFL.]4]H/83uDPKL/%^4@^H1hy1F|3Ո1E؋ ʐLcF/0rB#[w1E IE-05wLՀ!̸_/XkF0Ԁ!xƂ/ds@`Ԁ!-- 3Z6i1ٷXb4_n~T[eF Ό#־N!(x2{]c Z 2$U&I# \jiɐ?3n;iqJ# Zhʐľ?3+TZiS0Ef4`fHU83^T~,X6c z3$,&_j)KԀ!le|›bF!/[J@-4hHfK6wcCi4hӐT2M# i\55$U2ZmFԀ! b55h1PK= ָ\_yZe1K]  q7uy71F I gƗ*/B1ic Z6$8L۸g*d# bjݐܤ Q7l1PKM -7v15 IX#ʈx=n#\jjT÷F(_ xZ83!QQ,Ɓ1Lm x Zrab5BPI7W7dI÷Kas`TK "ZsLf&cz0:$FClk-t` R?Nhw~FH!f|[ Ylc;$Q[FvW!0;0rCruDvf xHπ!:ϺUhx@-f#,x~o^<@.u3xHdG0p<0rC%4Ubg(ΣCryDz g4Bȥ~P꡺|#X\jh@\A{` RC$Zx>F'{` RGć$d^0Bȥ+vj24bi (Cr};}X}` RKh}mo@.o. 0gK6yci1K- `-?c!Zj1Hi{^=ժ@ "<"s@굣+G7!1L- h $6ZΟ.q4i"> kǗZbh (De,yW4Ji\>B.3i">b-fU v!"B0B$G$HȔ7H n0!rBB$1["֛YF̌B4H˃}Zbf )00DRuęmNv efց"6g^HnG .c9Y\҈p!366|1PK'.DR+3Uգ>bDx /c vP^~gƫ LC4QfNy!x!*#Όg[}4RfNy!x!"z慸]o^@.m IegMwCTfNy!x!z69Y'Zffp!_蹷^Nҁ,|J\1K !" W6u ~MU=Bve1K x! }mށm /c B483voNp!*'\Hkst\@-54h* ~צ\@.54h W\6 .cB483h!oq4 ҁ@O9~n)Sy/c\ T/w%Wr /c :B4EL |'Xt TV:` RG`=C,^v 襖M}Ό{0S`T'\i T33-};1fH̐ME!> |WEm91jHԐMUgsSWwOt ԌghH>׸m؎h@.55hHpf_'ş뻇K<1C:et`h2x0C0j3DSMęqf{8Ct Tqf#ae_B MM z&4Eh;u'\jh ԩ'^IZԪ@ B:th*83^1C\h )00DSEę;1SbHb3~tw3t Կg`ȜٻF C:thjb0M4wc8t Tqf<ߌ M=Bn^@-u4h*836kH{8Åt Ҡ'\HכyFp!AO[v.\@-54h iү%?cNq!p!*"zƅGwk` R?\3u/kXq$Zg@ Ӡ'ZH*uiA[OF%n!B:B4CX:RkCPl!c B4C$BH|G>wBv?H?B@.3 Xje3!7Ļ#!` R;B^=Bzglʱ@B:%t X.XhgcOi;Z[j cB,D,w eRKA:tXXt6Y8]<#\gxaƲU'|ZgȠg><*wB.14ҁb"A|;@vBH]hnZ9Ո1BH ?Yruw z* S@H@V@ WB0r R+!֗U]ةB:B,WDl|x/}w\ժK!b"b$ >1PK- "v4sSaɬ.4FҁbAOݥ j;U.a` RSFF=1B^Ant1FH_9ܾN=1PK !!vx5~-oEe1K !!$$)kg Km Όgѝ6ժ=|'\h@ ̸v'S{U%cA)!(!!Όh}4BR}1P m&R5ęF Zfh0!!F„WXɳ cL&#cBOcGAb ev6bH5_` 2? TqfQJ@-3XjapfcZTqf<W}ā8@@.3X83^!Qq4T ZjgT1rIvTFTϖ T12 $ yH` R;@3) I-# J@`$BH|Z=ψ1BȠKM Ό,&p&7|K.142REH,XQ}TN4~ ""B[OxGA` R;DJD\{cK!BE @`dDͅX=*NFqxD@.54@` "$YFuepD@-54@T1"5( A` RGDJ%##Bf$ޱK!BE @Tqf<Mi#dPFFJm Fb@'` RGHJ] BB#b+Q^q`TK!! !+D/`݅]%ZjhY̸Ynk%\h Y bdHȾJ|7w 1K (!+512|M-zD(!рR3YŚi7Z\ \ji Y"b &$;h+`B0j&dz1!neW||D0!R=ę|LwL^%~(!RBPBVjapf<Sl-?k.3 2R33-'U#r)%d%dz(!۷nQ1K- 8!+D |7?H_'c:pBV.HMkN Zjh Y(G׫>P@.54xfw3K B% \I!ӗ1kzVq&\h@ Y$"B r{D5ш1RȠ+" mL1{E@!R A!SڶF,B `$PM^(_ ةBBVH+6I_ ~ "{r1]9!` RCRsEAH!рR `ϸ5jR@-54 x;?cAA!@!+DdPhюn[߫C0!rED„s}l ] ~+"V~؇CN@.54xaW?cA1!0!+083Lqr.磠- B )BBV.Ȥ(<Ϲ3 B ȥ"v#A` ROTEi|7Є1PK- H!+183^[d]!y` ROPJ Ό׷B-?R@.55 \H!-v6W{,1PK= H!+EdRHɖO1KM H!+WE$RHڹŚOcAI!H!+1S,h=/r1RȠ@wf#cT]"%b'LT13(͸P$Zg@!+Dh݇l4VOB e~6RQęܴB)5Dw1 m*dF3B|] 6[@.3 :Xhc.-nC3ZgH!+EL$&UC&!` 2?@ Y(b&RHshu3T#3\gH!+UED bK~1Pl)dNgƭ6}C޷U'` 2; Ygkj8 )c\J @ Y,bfRH`utQy&!` RGRJegƷx2 k[1PK @!+E f\F9 *c:BVepfOU{] 襮 W|M ةB&Bv*83^wWϕՕI!Smę|R?@Ѳ$Zji ٩6xƋZC0z0dgs-cP+!` RObN f"=}-+oaMB Đ#Ό53 0d@.4@Tqf 5 .c Bvjfpfe㪱B0r/dfgx)[lZN2SYDZ `W 1PK h!;UEFo *vu!bg@ ٩2̸@G_|s^bi 2)2d2d~gFW\oڇ+!` RKbN &C/Sҫjm1 1cZCvr_xbH!ӀSięq=d,.4 2SięTofc%$Zji ٩LƦ=VN3h2)/d/dv3Bf>jj0 /cZ ٩0b&^#ǗzQ Zji ٩0x>Zh\@-3Tqf<\ӀR=[bf2)-d-dfg=WܪYF`!S/a!>Vtd1K `!;EL\#~2 ,cBv "U|э^%f`!B&Bv* i0\ZPǨB&LxΩ/֖[_mZ@.u3x`:N ةB&Bv*83n{Ywnjժ@X!΀SILߏrKX!΀sMđz;gMvX@.3`fXh4Wr1XȤ  .w>1` RCXEh{6JB$Zjh ٹ&"BT?U_!Zjh ٹ&Z,dRXXN Όջ׺j1VȤ  ңӍ\s1VȤ k"V6n@v++'` RCXEwbcW2 ,c :Bv.Xx@AJߑ11PK X!;u3 ĵ)K l$Zg ٩g;e^,c Bv.Xx@Sݾj(V@-3`\qd ֥#^{1B ȥvB\nڋm^Z,c L5QoYDh!NZM+o[Үk=#0` RW;i!6/ ^A@B0r,cGƷ +B0rj"$B~i}h*T c9\h/5 C0rzH(2[#-B!;R`4pTqf<׽w!&` RCk`h(xkh*-B0j50TqfDu]$B0r5p@2.dn{K\@.uz7 γ{JD1c zZOKg=|m{RB!xZ83^ PsGp1dPd4TqfiOz a` RSk`j$fHÊ6gSci`j<Ʈ#CEHSK!`;FGC2c ZWK!"6dj1KmWϷݝʧKl!C"CgƷݐ(UajY{"1PK]!x51bPbtT!T> B!:Z83^4?q,.15  #ΌJ|l߭OceHSK !]M{<Ҥ?b@-ZH"\ ̒"S-%KK!O7( !` RK`i:xfAYZA` RK`iR/!r):DL-IDloa` RWpT%qf&qXwU'1PK=MRęNfU2 h~&g7;h@.54CK ΌG>r%BK!,Hs|X` R?T$qfr" %~ư!B!"gHxԍnQVY=]bh""ZHhBaV~W%ZjhzXjŏՉC0vʥQ0T%qf< Y `Vb!\jh $!mrX Zjh $ΌjSc](.4OK $Cs8SuC0jRg3kF}1PK$ڴh`&jPȥvCgw#խ A` RC;!6|θ_.1PKDڼ*${n_Ur@-"VL]98T :c\_P[(B!NrH+ȥ~vC'#Wᇄ WC0jWVLe^-< !` R?3@29$xjc#%$DO=I9ш1rPrY.Hj_Тzg1PKru}٘w_8c!|P^&Zg~zϻ(m?*rN" ,WG,㵏2KG18c? gޗq^ވn@-vk#G\=D(n@-vz? V\+1Kl!64?-_,p@.v#8$֯ 8D(8DYxi_%~!B!reDmgl?K} Ό%RQ''14FJH"\!ڭ,nN",F|+$+X-` R?g.bk߆it[1K m庈 w?ݥpC0j7!0kիyF!ЀRW3 #8~쉆M<#Zg i*"cC/Q?lj4I!rYN6"cD#Ƙ!B!̐"3dI}ڪf@-54`@>`hqVʉF 1C2C!-u5 ћE(9fJ! ̐"Όka6Ud@-s4dHKUgƫ(?O~p0C0r)0CZ*Pd\o P4i1r,Ԗ1P,MRaę\P3ˁP[@-4hHK 4CCVշi a 2KS@42vtMƮ֖S.(@CZ*83>G gh@-4TqfY~]=\B ȥԐ"Ό窶gocO!c(e(0CZjmpf*%Zf@ i&Z?>޼J7#\f@ ifZLj#^Vr1ZRZ-ʹK #ncB0j,3fуr4]#a` R3VHKg3zB f>p-:\LT@.u3@@3*$3s\sʬ.)A` R;THKQ!QV굍T@.3@TqfnQ+c :Bz*83^,$`[JP!SAę񬹾zq#Q ȥhfWd[+c :BzjjrnvxWsx((Bz*L z6>x O#Zi@ (B--H +czBz _~@۱j,V@/55`xH=jX@.u5xH}cXd1K] X!=Epx -]%Zjj *x};,̔V@/5`Tqf<6/ @X@.5@,$`%j%`!Ja! Q"X/VN .B3+'إK-*eB0r+ˆ3vlE_UG%\jj 0xL"aϗի.%\i 驳f^Ht]l'1K= x!=683^{Ʋ˙Fp!Sif\z}kc!`@0u5TqfK` 2C3?3>߈QܮrՎ12txw}_?>` 2C3txjw|-f1P̀23~K ػWwtB0v\Hwόg$ƺ Fh!΀2r2-dG_ŊZ{#\jg@  f E@V` R;^HW-Bٸ\23 f.kGGc yd1PK p!#۷ +:9Cmp1\Q\.d$%\[ul/-1Fx!̀2q/DuXK+r` S;LHόe׬1 ~!F![b\9Ѱ 1PK !#-1B8(0(&a` R?FH}K-6G!cBFor6wh!c BFf<4<_?c@HWόd#V~ !c BF["J-1411?3g{?r # F x/`%sG (Ā2U3~ ME~6IZ.31 1tU2 i|.` RC@H}K6}oW}&\hf{1lf$!` ROBHWόgpi~ڨ@@-4 M.BW@D[Yn1PK- !#XDWi_ x\ji oi׌&ŻIv,LA0jd$S5}0.4F1J1TW`H k^1BtayuҮx#RM3bh bb x MKn1K #όgQ,gqK AA # mU3vx ,A,gQ'` R?v]E 2smY _5Ac^J1\qdwEc%Lc Afu# ٜQU%~ F l( wqU!` R?2u fS_m"`Zg b/hs7F π 2sJ~#ͶX*?#`\go }{FPF  2aDYČA0jd25bnpֆA0rd:Dnx=6j*S7B)A 3WBd2i{"F Ѐ 2bxUwfEc2ȥhgc*= !A0jdZ^8 8SA` RG4_8FշD{j6@.4`\-ѨmN=ӈ18Q8d&Z>:F Ӏ2axxOg{_U}&x^j""A|?ȲTj1:Q:d抈-Ц{VuE`쐻(dd3)MC\`X1PdG[B0vppj"V ~ѸZBntgseser3np+Ag4֬66A0rd ~WVb18Ȣpp "Όuh%V AAf*83*-2Y 2]e4H.Nh+A bAj6@-2`T 7ap;Jr"lZd̸w ]#,w^/ةAAf83n9~+"lZje uY"6A0jd&Jl3b.NpJ!V\J9]_h[1K 3B֊L-zKAŃ,T Djr#|Zg B> D9ӈ1>Ȣ||Km]"c Af832?E[lcAf83^sI/.q4FY2S1Jx\3Bz+NW4)n .ȥW3B"cZ Bf*83^ܡs'#c Z0Bf*X0Bh|]1K !3UC:h`%xÄ, Y s2-/gՖB0)dgV_uU5/r1TȢJ"VFOAhn- ȥJ"BSfdD×C, Y (b%T]EEP!2S3׺KX!؀2SX!jAZQ &Zjl *beVȎÏu@Ud1L h!3F׈Glϣl1L !3F o|e1K !30X2[|^"~-61PK} !30X j߷>Փ, Y Tqf<-Aw7` RW^ʈx!FS ,@p1^ȢIgs Qzүvn\@-55Hapf<_tQ`Z@-4Hapf3tыrE`!"4x]Nj K,B,HXH 2EB0j-DRięTwqEX,cB$u183^ߕ_CG493F Y"Ӥ,\1K p!j#Vƅ"">ʱ@ BŅ,H83]fgvEp!;R\\ڈq!u5ߠ?r .c B$5283n8G/B0j-DR#h!"ԭ(.` R?Zʈ3Yjč;cEa! `! #Ό`Jf%AzZ1PK X! #ΌNyw@V{ ȥ~I Ό5f1PK X!,dF煨Iz7cEY! X!"Όc, qϭB- ȥvIegƫ^jxۛr?cEi! h!"V'k` R;ZVgƫAQ .c B$5383זB0j-DrUDlmD*1B0j-DrU7+Ej(CcEq! p!" gs NdB-3F Y"JyF B,HfpfLy B0j/DreT]E!"2b}٭a^@-u4Hjgpf<_TU}Q#\h x^3E9J"\h@ \!=h /9C0r1DryG9 fjg`N"<"CP=\ ȥI ΌmҶ{VyB0j/DR?3p5>A8.r1`Ȣm(?&,9 Zh \ W0@` RC\ #4[=ψ1\ȢI ΌDk,J Y@ `%ZHQ}P+cB$WG$VHT#Zu ` SG\gXVFB6lH؉op|NY:&\hp!ląOs5&Zhp!н,zJc{܄1,m/DRN1TոW6` 2K T ?\c5KC0mH83^-]kx 2c dgsB|S<4 C0jm Hjipf kÖ}ͻ6a` 2[ T qfou}K>MŷUM!6 C$UG߾~Ez֦S.lH83^(ѷ?QB ȥIM 6RC?Q݄1PKM !eAd[K!"6b'hAkǻM!Ԁ"8b#7]+` RGn3ՄׄnRބ1K !Dv*wZ߄1PK !ϧm|*FC6El@H83^4!F믣 ;dSvvˆ쐀O+8^C0v M;C|Ж_1K- !D(JS4BMm v{ Zbi)=d=DSeęqx kU=7` RCxʈ3v0q 9cC4Fχ?չ7 t@.54@hk:db  :dStt;C|tbJ5t@.54@h83^[C=bv@.54`hؙkT%!C6C4UFQ xy^|>ل1PK !Zco_|S^1PK !7c}VL4ȥMvM|81K !J#Ό(}oI :c:C4F︚Yh )8d8DS_3Ua>h5dSjjg]xw|4yCcАM!!J#Ό iׄ6a` R?f҈!lJ7wnbN4x|[n}W12c  C44 r=oxЪ&\jh `'dH`>~'bd@-3@h583:j]F /cB4ϋm3^ϖl %̸ d׈/?V@-u3`hjpfܗ3T3 q˝qXm[Wt1ZȦ MόvmWo$\jh v`W U .c\ ـ D bk2J %Zjh tyxU&-^r,^@.54hf<(]~.dS\\;BZ[uZ.q4 fN/| ȥM*@,B6lhf<edZ-q4 θ8J)c!\1\Ȧ MόgR?&VN4h)/d/Dx1_ j8xl ߙ}_z@x!рN8oRN4 Mw慬+/dS^^g%'bͷՕ ȥM3KFߦV!` RCb&g_ҚʑK C6lh0dJ`v3bh )0d0D3يٸ?A!ЀNĐZ}O^1dSbb&NĐ!>$$U8#lJ @ ߉x/)C0j1DL C4&Q=\B ȥ͗TL|8#lJ @ |u!A5^VK C6%l hL  W;GB ȥM!cxq[mb@-54 h!CEh\3h)1d1D}oh.#ݔ#l |o?Ch~0dS``&y?yW=ш1bȦĐ M3㩊Mr,`@-54h!m@? 1K !/XpM !` RGbuX ƈ!C6C4Qw&,ďQOY%`i D߉W!/4 ٔC` j1dȦȐ 7XW 1PK- !//2s_ i`@-u4X[t˪U8#lJ @ ?3zcr0G!bN拭Va<b@.u4 Xus}_;n0cC,O9=:'j1`Ȧ K3ZVkv?_ 1c ׹jsXV):"2wҘsC^o|Z|pBnJKR2txhc[P vƀ!C6Cfq;JGh=#~ƈ!C6Cfӡ%KX C0r2d -^Œ| /dS^^Lx!n muu.t /cZy(0/m߫~DN1H9жӪgU <ʬ/8Bv߾飜~~LͣNs0[Dsq)˝RΧC"m)| <ʬ/͸J{Z@ l??UH&vQw'|Iƕe R53;K3N̐8o?6cm/Q23$LαH/Q2s$4 /w D ENW )AFhT燾+fr L!S֔^+ϏR _||AJZw.??VhHq#'|is$Էoa2Gsd&~?aQT5B3@ 9Ks^eȈ\m% )}/yI#EP+;T!z E%9 B5G# 3A!(7A1R>}_|DhQ 悌EQ@# )mlGܯ.??UHH$'|IK$ˢIe넟.1Iؖ'r0:I f(RXo 13 dXp` );oPoǨ?)IAP%3A!}ʶbB?f V_d0T)gb8d`0drfL }cȰ%S<3)ێX ˜AJ23@/LNs a־O??]4ØD3 J6 9Жq~ $Q2@T)G}\D $8Dh2S䢂E $LDk2SH0omlef mQ7O࡫4  j&9 <絚J43drLa;ʋWV'Dv2SY|V\c x Ofj)cDFl+\aOܓ45].3TtA>IA]'3y@F/τ( Pf ItfF@(F(j> Lv#1*zU#PR5s# L} }{Xom}g\!:!Ţ%:Zr¸L_C/26Ge*H9G'vRREs+FL  ۴zM ))'eHyO>=kle[4BJ(BrRӴv_!$r—伲KȔg] LIA̍)3Շ@ʻH^ܪ$3#dr#tL5"Y?GKr#D2SFc>T sLTqg97nZIAMp++@oZJD p%Q2@`T[)g9<&ԕDRH9*|_A^IAM++0OF>ǒ1 0XV*6GvS1’({ XV*8s 7ڱLA@ QcYRA󕑯XR%s JM ӟtdȘ,P( _.aYMpA,)eH9h'n?RW fIA,KL@_狯FiZR5s HR2ih4| 4%Q3@@R}_i4[7>w&DزRH`_{Jw )/yM-qUqϳ D޲ %$A[R%sR.э9 cfjr—/ƽl-H??UH.HI.'|IKvcͶ1s5 %Q3A/( l[B2At9_%DIT/rף`]R5sR.[Q?f QwY5/ J:@ʱZFqY x[ `^֗Jy/%] )/yj^茞}3 ,^[ %!_VkEע^(~~LR_NWɩ5|%173 h4_:L/)f}Cٸi5u )/yji#^TrӞk/ j(eFPv\͚> j@ZV@ʡZEl"L dnYo*L4dȸ0d%aZUr43 dpr I%(@f##Y[Q'߂mƪGx1Dx1+H<s5,5 j6(YN-{70~ c1+)1ohJ{!K(AL]PR Hyw&dꆶ0\ Q2uA\J. PZAF3A fjQBGs~GqA dkQ$b|xTLL(.fR;,w59 Q3uA^J 0 kDqҩ#Ai1`@ʱck|3`5s ^ʥ(y1>|)53 ^ʥ(w6bH^ Ap1+)3bbh1+ŀw`h{bZ A`1+5ǀs3WSfHY1Y1P$bEmS\73Z Q4@Ŭ\rKPmх~),F8,Fr ʝr^@_4u.64RVpV+fr<5iFX1ɜ#Yk|X*0X Q3w@Ŭ\" )co,( bV.@SNBhk5F+( bV.@Ċi+PY_Ɗ Jh@M#8kWRVpV+f^[=g91X(`1|Ѵe5bV? `,螾RXpX,fIhQ_NWv4a fY| d/󅔿`Ts^/f>^IIj=1Z Q2@Ŭ\"H;~[T `%sZ(h1.7Y˧Ls}FM,bbH1;u䀔Om[`4o"b09)FS[H9wKfw1`%sN'91mu*A'(pbv>ĉh9Ŗn(1Dsɝ[XҹZs A  1;SN2_Ǘd͢ϏrF#f1;Z/xS*2J Q5wA\rTVb}#X. j.O!1q4>j}R$( @bv>SN0F Q3wA`ܡN\݀UBAb09$FsAHy[ɝ4a dٹN9/dͧ:k d fn@ٹD2%g F'!pbv.@h4Rhc-jSdj#ٹIdN̴+RA̍81;7SNj˧gM13L(wʻxVm>;sJQb0 %f;S906P >KP$b\k+.c bvnq;>+@悔##ٹGdN]F,/+Ka fnٹNm}=\ `%sL(01*g J+Pw}v3Gi,RbSb(1;Sޱ#:DVMrAT 1;wS>5k+֟\K(!F8!Fs$BXb;P_Q[-!(bv>$Dew} AT̽1;)]t遭߻̏bb1;7L YOf~##@ٹAǝaD+##Fu!b0"f;S_3`9C`%sDR|2]>QA1KI&D(p ܏bb1;SN5mdf##@ٹ=d:L4_O볍^)F8F\)/.?H>Ha0f=|}ItN.df##_JO&lE}<-4y avqWths+ F Jt$aVj} a0f>%ZΤJ ALPo2KN E2L$W0ɜ 7%yNpKsC`Es 0.:t  }ؾ֪,I{qy@4L|#~0D<07Ќŷւ,\IfH00*(N9wAg40]mƆ j((B #}G[?f怔 +"ϕ/|R4r4 X`n 3J8㺃0D,07Є]=}5_0D,0D)m- aaTsMlߨģb+c`5s T\ Ȇm)*GR H`5p\ q|>Eg-Fo r;>hQh j.hW&8L|T>bp dn&[E)gƊso;0D L0DhØzħb7dt dn&+" ]o'LaasIf3*ܥ A=檈;sm\W[R^V Js;mZKeae\ d<0S hQ:ZySa0v\q#CQƻ$3 \\`&NybJdH00sQ&0LeY (h m"4aD[` }"37[Ʋo @ʅQ΅"4qak`2 \\`*B3&h d\ fn,0E)~ԃ22 Q47&[E)gkuVBa0 p+B h?]Nu AMp ˆ; ˝[Fm㙹 (̕wg e(`5s.B7Z A]p fxt켸A 2a0 0+Bab?E!t (uw9">aHf Rn,bbĸ<750ϭNuSfH00za\r':}=o)3pp0͒>,)"(; qy=pGl[ܞcA ø伜t CtT]lF ht0Q4/*ۀ[jf| fn7FKIÈo|0 0Dx`ncch d dn 0~?# (R|1n95)F9F8꓅@ *F2> Q30q܇imYoe| dn ,07S޳5.0*WY0DX`nqdg621||]_OzKmUNt) F9 F7x<.+2b0n/';y`4w5^"{̝"cAn}oWb0n&N9}O|=繳E33AQ &eڊc:M6یAMp ~)@ٸ ||{ܴ%B0@ Q2 d6гC6}_KfH00s;S!ۺ@ǥ (]".q+yv72 RBrBn0/(;o^k[6ɬL"b#b(wʻ> (k>ok1D%(gtlOZc`%SL07S>wɣsX2 j.h)¾@b!R 1D 1O,CbS64 j&h\ri#J{0:L\#Fr!#zXs!C Q2uAFnhˌ|?{/ 1A dj" 1ϲ (3qA h((1}q ^ `$sJ%Frʝj6Iq`5sH ː|UKb$ @b$SNO8U% Pb$7S>%{(H`5sL"˘mFEc˖jcc\b 4Nƶ(( b$X.=O|A 11Ha #G(( b$wSqLƴcf6HI1I1e(w)jh KNF3A 11HBz|jm7Ac d\r|jlʹQ) b$S>/N*_@ J&M#C0Yq$dd0N";ЦѱE)(8(# NEwt9F jU(_C'T)(; b$S>p5N%/ s@ 11Hnq|6ﵘyRNqN'Frʝr]] bb @1P,b5ӗGZ,_@ jE(11}2h A-01F)3mIzꛠ1N Q3@Hacmb pb$X+nzvuF81D#'fF]ĈeHfH91915(w;0|_[',bbcb 01[F)gBӲV,+)'8'ƀ#gĝڶ &rì3@11H.AS!|ۦsOu81͜c\rsfj A=@1kPs@`kKeW-){ bdYI1t=K*1R Q2@ HntqEFlMyo `%sP";圄oDjPb0)Fs !)ßlb0)Fs ʝvE]O(({ b2i$^Q^* 1P Q3@hq:|c] `UsZRKk6EZb0 -Fs-ʝ98l3`1DN9x{t13Z&Eڎep5F J>M:,bzB/ ԫ|)-8-ƀ-fW#z`NHy1y1(w\e/P̀1D 0&qX<c00Fs;%nZe|]'Amh1{t)~`=t& AMp1%bO me d/(/hLp/>ffcc/(3>0|-C j&M:(;@c0 1FsCb}7sa9i0`~DIhC{,o0` A3cK)J'{G s:X1b Q4@ RTh$\}7c00FsKi>? T0({ c4wSyEkݷMKF jR},(>Dt A=1%c|KK]^cfH1Ɓ1RI0bTtA=1tX"g캮1\ Q2͕(wo/pkG%=k2(`dV-#cE3GT' NYǝ򩻋nU|`5S+l@\ҾPcYuic f 1QZav݇H]5zajr1-y^{URc d 1{uDq>ڐJ텍Qc06hn5Ƃ?y]3(afr1,[ ɜӀNy%f7)-n|O!c02Fs5JȘ}"1d Q37A@hnqPvLj1DUGKĘfy6ʡc'4 h.FSǬp1DN9Y_R^L㼘(wʩ\uEk13q1 p1;uپ`4? "gj A-1{u)zn@l?a dn\rܾV6`4s`L`j1mrS{ `%s`j;=[5^A\G`%s ^^w93JYc fܫN9yO{=SfF j(wʹh9w^Qyc d\rm>ѻ 2R^L㼘˕( y1/Ooe|hA-x1[uċfz x1DcSǝ_A!s@ icN9L_')/q^L^J;|Ì5:b0.r!ʝrW)3Z Q27@Xn-&>k`5sZFwʹl'*G? ic Nys=xʡ b4X.CiƊB33@JiӀcN90Q#h,.; b,SaEghQib0-r;|+sW`5s\;ͽ5) `$sZLZ;>=}_Kf d\r|'3+(; b,wh춟3LQL88m8Zyr8y!Ë88,_S)-Ca /7j?EMhŰ|۾!㉻onwb>yrK;/٢*aQa3@K5[Z6 ܣ^%ģ8005+67  q2m޾M -4;?˷[0lY;/0,_uSNvfb>}2%o K3_̧/XF)S_o׿% O???%˿߿۟?__/PK@T&H#Axl/sharedStrings.xmlXnH`@< D%KD3~ȖަiGo!~~|ɞ&%V Ȯ>uT7:j+{Fu[?^з쇋ܹ旫+LnTmmlcT\)WW?Uǎ~Mr>Ft>V4Y02GO1[G3S0׳UL }Yw$ Ew!-e<q9}s/4?>h~YGKԏp9kp6Ite9G z$y].8x4\F>E\Ehx'ne0 1`.R~ON}jţy C&5~p0A,( g3k"HYq&4>7|2{%hvCӣx}\uYgvZYʔMި rmIʴruEib̞Re_ifaTom]%E1PRrOYJL1𣛤萩lH3(ךRbUxˤ¿icKi?**) g[V%'F8Ql޿m7W#W8׻@K%/Z3uumC{wI,N8'[61_; *h=4ErHnϲ:1We uYjkG$-Smӫe01xM'NuQUSY…AAoПcub?wCZv]nO=]kjj- %L֪3+O7dv\1IZ9o"-ӏdx!֙v{j@w8Fx5re(iCfǒ[~ }XvkP Phfj 6E_pL{` B S!!grˠ!`Uhj&q.4tN(fsog<*N9gO;Fcpqe32;Rr "W3mXGpxm<Qr F9@T.D|lhլtE0/HHUYW.Rw͙8ҶJp^BFJi)JA7rqKw~j-EwY(YQg~,T-DUP n\#&S 'Hs#+ue4pKTIO[]h'r9ϸ.,oeQQ@[]!H-#:Z6id2SЕ0pa\UdR}Ϲ*z^(R"<'q- um0`¾ndTζEx~!̾tZOiԓ0ۍp?p A.~ecRҬOE{5^ѭb?dAúBEaPvCW0FsMd -e@ܕ9%zd:w t2Bv#-$;R J$I;Q;'[ƍzSQodN/{z@ѽĔ*>/'3s |Ny):~ӳ>@2fD5+\lICهP;m1t\|W܎"IOq,3 3}EugS+DY wu8S;,rկޢЕ#ຏG!er1#՗ .oNdQ حTv_G\ѡA^܀DiV|Uݳ|'vk'sEo_BDDWpxɅ):p`uZM]$i.`1nApXa}44Wڕ?PK@T&HH[Content_Types].xmlPK@T&HX. y_rels/.relsPK@T&HES 3gxl/_rels/workbook.xml.relsPK@T&H hHjdocProps/app.xmlPK@T&HHYAZdocProps/core.xmlPK@T&Hbmpxl/theme/theme1.xmlPK@T&H_pn| _ xl/styles.xmlPK@T&HYxl/workbook.xmlPK@T&Ha mhxl/worksheets/sheet1.xmlPK@T&Hhxl/worksheets/sheet2.xmlPK@T&H#Axl/sharedStrings.xmlPK Spreadsheet-ParseXLSX-0.35/t/data/TestHyperlinks.xlsx0000644000175000017500000002213614576335353021531 0ustar michamichaPK!bh^[Content_Types].xml (N0EHC-Jܲ@5*Q>ēƪc[iiBj7{2hnmƻR U^7/%rZY@1__fqR4DAJh>Vƹ Z9NV8ʩji){^-I"{v^P!XS)bRrKs(3`c07M4ZƐk+|\|z(P6h_-[@!Pk2n}?L %ddN"m,ǞDO97*~ɸ8Oc|nEB!$};{[2PK!U0#L _rels/.rels (MO0 HݐBKwAH!T~I$ݿ'TG~xl/_rels/workbook.xml.rels (RMK0 0wvt/"Uɴ)&!3~*]XK/oyv5+zl;obG s>,8(%"D҆4j0u2jsMY˴S쭂 )fCy I< y!+EfMyk K5=|t G)s墙UtB),fPK!/xl/workbook.xmlSM0#,v&+X@VJ3i#$ ,{o7'A9s1qVR}ο\q"' xj}ts16YY0u Z:7)$4 5b4:IgUb@Y> d%wNm@L hwUqJPPEb1\+aA|ӽ9RE,s 6o[T,'/)<+V{ayMjꍎ-Du6?_zڑ:3~oG2EG[/ vbZs-v HܞcҀx4!Q۸-!}CoVu.eGeKw|E4fהGU:zI>בWd|?LA r3E )E-I.tXE2h PK!Axl/sharedStrings.xmlSn0#C87r((ʦb[.dX̤Iz&.T"̛q~=u1cZ'*kGŻ$Zgu\/_".:ic3cjrCg[#}@[K;oެVWxW y,qLq]1M,r3#BnȲ Zqy7RÈӝKDUYIfo48l}y"GΚ g\bPu lt_;w\UT_dLi6ɏz섕TӔnUZ[m7w>b7gPK!nXxl/theme/theme1.xmlYϋ7? swkfl/{lg&!䨵eɻ1!PcP^ P%kMiSȿ'#nn -Y27ߓ4/ݍsSNXv*dvop1,mw{i.-;?[FB̶e>f/Nل1pNݘkJPI\'A16vҤ4ާp.F4ݗCaLJU 9B8cvd&` /}'<Ó?f;(_|ٟ_㹎O~s;&[x{W# >$1U|`1Mydc!b@ض^] ju[) xy~sA,#_b+r,y2u lc(1B۟@Ydau8‘!Ɩ&pn%Cr`$Ri -˨m=|d"@B~h.Pl39D1Dd#HG:Dz)sc̹ϵ ={tTC]Ę0Bʙ$B":63yq@p"BptUT$|2O->.a2 $9SONԳtZ;)Z;|?(=4Ocxg ;~^7څPuv7.'}x;4@Vj+72(iT'e#"`_U)MO3cVYm)j08۱VrwGhvm 4]ʼNnyI@'$Lu Ʋw$΅E¢)/C@mX?9j Qr_{PK!M&K xl/styles.xmlUmo0>i;%!K"jUڪJ}u$VȦ n]~I|=w6y˙HTMHPp#\T>sȩ5fRIZ;uZWkϫ>SJűSRI }qL< ꡩ\ kB{!1sxid-K}p,K,W4.еFڜ~Gqy <>X`N:BQ̌3h|MpOsɤr(HK 83|]ٔS=4]5Q" 0u & =0wR0rFΕƌSt0ZVZCҸx/fF!_@99aΌIUm鈆g\_60Fa 3oI!9UŎ7 ٩Yr6Ѿ`t/81Sl­JCf@#nu uؙdIfu|L]v:}pMk"O|1,AaZ Ȼ2M!n/97clH6L:9Ohڼ9vN %n?m&h\&m8SuK ןMFO5<4&j{,D*lh~n?'O@Põ3b{w/AoW¿f~x.͢ .曫(&ܣ^t_C>Zk ЫCS/4 NxW0PK!q[[ xl/worksheets/sheet1.xmlK0ܛb{Tu8H6|ؐpy^=Ϝ=b^:"f_tH7i^}PK!AيdocProps/app.xml (Ao0  9: bH7bvgMc$׏i{ڍ{xDI]:_Pk* $jcJŵAmrL-QZIJsgۼih:$/AH@1%z:ځvZ}K;kocC\TLuU[k<9X7#(2P`m˨UO,\k0T7ٙ@5ئf}Bw̏*Ɇi8svr4pqn&wxl/_rels/workbook.xml.relsPK-!/xl/workbook.xmlPK-!A xl/sharedStrings.xmlPK-!s}/ # xl/worksheets/_rels/sheet1.xml.relsPK-!nXxl/theme/theme1.xmlPK-!M&K pxl/styles.xmlPK-!q[[ xl/worksheets/sheet1.xmlPK-!Aي)docProps/app.xmlPK-!ٔWjdocProps/core.xmlPK w!Spreadsheet-ParseXLSX-0.35/t/data/bug-2.xlsx0000644000175000017500000002105414576335353017453 0ustar michamichaPK!|ll[Content_Types].xml (̔]K0Cɭ4&Ⱥ]q&!'ۿ4@n z}4pjLقye`Km߲ Jg`k@6]^ kQł1;!ȝK3 fr.g ލ(`c[ 6>@%&f+! `e֫`{KT,o8u+`ӡ`B[l"C| a.ߝ"t ʕv 1<bi]_>cO8#"=$I`\3v#z̹k g}$8(N߅]dݹ'!Q>4.ޑtoڼS:E'PK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK! (xl/_rels/workbook.xml.rels (j0 }qne:A[&Q6'o?C@.$}?ЧjU%)Z(8>< ֶҝ`@CqNsD$%襤`)qm.cuy 8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ_^'܉M01UJS#]flmʒgD^< dB[_WE)*k;ZxO(c5g4 h܇A:I~KBxԙ \ YWQB@^4@.hKik<ʞ6b+jΎ9#U`δuM֯DAaVB[͈f-WY؜j0[:X ~;Qㅋt >z/fʒ"Z x Zp;+e{/eP;,.&'Qk5q&pT(KLb} Sd›L17 jpaS! 35'+ZzQ TIIvt]K&⫢ #v5-|#4b3q:TA1pa*~9mm34銗bg1KB[Y&[)H V*Q Ua?SE'p>vX`3qBU( 8W0 Aw 9Kä5$ PeD)jeI2b!aC]zoPnIZ diͩdks|l2Rn6 Mf\ļ=XvYEEĢͪgY [A+M[XK52`%p7!?ڊ&aQ}6HH;8`ҤiI[-۬/0,>eE;ck;ٓ) C cc?f}p|61%M0*<ҭPK!~`txl/worksheets/sheet2.xmlj0 qڭA)a0ƶ(il]۷27 Ir>mQXuƿ|-Z<_w77!t^5`K RW 90dZ'a|$$VVAu0`q@};?ьgBЭʙQɮdާT{HF+NBw^ R6mgι G/f/ʌ}^8VB%m t%iWH"-G72Hvwjm=k9s#&(τ,04SuGUaJzPK!~`txl/worksheets/sheet3.xmlj0 qڭA)a0ƶ(il]۷27 Ir>mQXuƿ|-Z<_w77!t^5`K RW 90dZ'a|$$VVAu0`q@};?ьgBЭʙQɮdާT{HF+NBw^ R6mgι G/f/ʌ}^8VB%m t%iWH"-G72Hvwjm=k9s#&(τ,04SuGUaJzPK!?xl/worksheets/sheet1.xmln0 l]WvQ,(Àaze"$ۏ@w)ST}b ;B]7E8vc~YLҠ!a'Ĉbç|%DTX πDiEd?_FlR;VCu `d"q>4ރ2JhqF] PK!HH xl/styles.xmlM0#MId RH *Շiv=k4=zg4rJNXU#r]pU%> YGUAV,gfcClYݑ1l+Bl~dډRILMElm-$H +DRAeM?pݹca$sRv7y<7MGtYU$K4.rQjhU*KGNTgIZhTuE%#6T>s+'9  GCu3* \d]zF ;08z\\i,X@яN=hi\pZiE3!v~wDtEM}.&$2=x-gw㑿A@ thp\Y~RvDJ|72v"WZb`D >eQ׋`̓| z͖anIFYbG@v+߿D2EpX(9GApd^Q:=mk4y҃#,*)q=6^g>|CShEѣo|`"ՠ_,EM TVR @_ilKVTbF9JX6(05rFFC*.9`I%ΐnU#;lҐ8G|3;8jQ>_q`3>S\6EݩMI?7}H9d)Sȏi)fQ>f=BPK!GAadocProps/core.xml (OK0ߡަ&@e'۪hoon2/O$_d}uV"I"P\J ^Ʒ(r)j@GphQ^_P- ͧ;j$!J.5e&;f އCડ4ML:O{j\vVP N-}{tGk*z[;zYu=DhN6YJ&q:ٚ͌[{`!O&N3e#PSPK-!|ll[Content_Types].xmlPK-!U0#L _rels/.relsPK-! (xl/_rels/workbook.xml.relsPK-!Dht xl/workbook.xmlPK-!bm xl/theme/theme1.xmlPK-!~`tgxl/worksheets/sheet2.xmlPK-!~`txl/worksheets/sheet3.xmlPK-!?xl/worksheets/sheet1.xmlPK-!nwxl/sharedStrings.xmlPK-!HH Hxl/styles.xmlPK-!=YdocProps/app.xmlPK-!GAadocProps/core.xmlPK  Spreadsheet-ParseXLSX-0.35/t/data/bug-61.xlsx0000644000175000017500000026153614576335353017553 0ustar michamichaPK\3H@&xl/workbook.xml (A0 Dy Ѫjˆ [nRF4qXp$@ϖxƲPK\3HuYHxl/worksheets/sheet.xml (_[W2=TVy6R)Փ4"Kio`H3`1la2"~~*mݪE{9ba"]d<[ϗo?w_?_6OX^ofٻw߽Y/~OXȲlb\LobrvuY]lT?'~?s~iN{sÿ?>ned/.7˫M7Ob6orG,ɋb\>??>Vo?~}qy&n_|v?M)c~MiuTFg{3 ?Z/[ce^ͽl{λߕ2>4O{Ϊ?doyz_8bv}zc^N7wǬ[0R@~C^X_zbj2],&gf|خ;l=-7z6i7&|z'Mwz~qu19zٮe՛O\VgyO6nLo7f\mft7M^϶g} N#Oot}'|w|y?m??_/ͻzf qf#lGn֫C6~^';ƞ,W_Y.&nti^-tZ_N2ߚM^}?T~[W7}ڦ)g_̶?t3-j}n~cq;o{r3|Znu'y=[owvgt[Z/7[~]w]E>=_w`͗?b}{-~,X-l1Uܩ|c힥#/j_k'ɛbk/~&Vg?NnCU1_~_r˧ӳrlotv.]^m>Wi/m<? {֩~ٿ~|_Ɋdm ُ_?<E_> rybaSw?V)o]?Ƚ_]>/oGr.?ٶ wϟgZS%n:Nziܩm6fnWΛon=0-Tӳz_ṊoۿsR;CWv2Q~]7jL^^|u{7ooz$]^Cc򻃶sj:m Yɑ'$5yqPZM"/`c$&^InQuG><.iRfEYDNr8#<xhRյ}|/^}'ɩKm82t\r=WﴤUX*EN2 ?[osXM/V G>qRn5s3[~^]HlE8'U9xpq\^8c/'E烣9ؐVQ9h+9S{ᘪN8'>8|'ꃣ(p$7pzw ,+#o2tDnznnU%^=77q^O۝DV k( ]'8\CRYpɀOsµ8V|p5N{pt}9EpN8N8\Tu1UpLU1Vc:(p\pu߷.\Ǫꁫ `' Gue uɪk8X脫y!/G |p-1 Gkxq..gx Tu1U}pe KpLU\88x|p1 N8|'p$AO`)W"J/\;n9ys^9W_N'a9\S#v˱/3TDrpXϜ[OU9'QC f[)u.NtSFZf[+G&4'rr>ks9\G/G>#ιx|rUK /\>_8hr<T_N9\wr^9V\C+l6W+>9^˱ʎg'WQzjrkcQ}y娾rT_^9/\M>#+ˑxJrd%^9YK[7r>9Nx|r%rNJ}rk]Àq)ǻN9N{J2aq'W:jfWg)̹X!\r=՗_g'G +^9#j9ϜGyrkrT{8̦ȘSjqqW[|'~_g'Mwy[rԭ^9V՗Sn[-GV f[g+G&+N9Vq+GQ{}rC8ycmɵdn99\3馻嘭.9#ι嘭>q__g#W?l[+j>+Wkc*fW'WpN/luɕ5ϜS嘭^92ar.bq[G-GV#+ʑxJ\r ^S`n9V7ڌsN9# ޘs[-lU|-G+G'n999YOlSkʑzV\sSre 瓣pJr #r=wz\+^6[g)W#+x);9Vq+Gꕣr˱e+ϜOcj9ϜS[L'!rk㻆N+WsN'yzOo̹8WهUtvʱ:Ȅr}^&'%"}2/: 1XQyb7bjOb|bJEX)w 3^5!v#3f{wgnĘV1؍uIsJX!؍ϘMLeO.R%lb5EXW0+bJ-Į_1cO#v'J [2bLxddf2&o$kv22#YSf? 'd23g dl5L} [2+4dzLd %f2zv2 ȮJpݐ11d*6Y:ȌdݐqJ{2VL+g2d$VXf&u/+YnJֳbɈef2&H2ddV24d9JVbf2¿v2r3LFa%Ei;LĴqNFa&#ɈeVXf&3JX8c'cbX1d11ddFLFYn&,7dɺXf'$+dKRdlʙ:ȬdV2zv2jL3Jƽv2r;_0֯LF, _+rv2V2.|vJFLF7u] cLV@f#&H f2Z.[n%o'c4]b&#YڢHFJdd'c�dd4dRs)}OR|z $kL G>bU&gyiQmnt[11ثzhYj:3-8ɏR4:C1OZKJQʁ#Cz."פjrme=2JMBѴ+ }0 iI͞?{%yuWkő{@O ILTm&G> &id d{dcԳu\:2:Q:˳ՅD׊Mb8:2҉O-cNlawNawNlawNawNlawNe;`GEύs^/G#t3]NC9^ v~&_/Vl^?Mk摡^Lޕ'G+<_{kVfyVƑWJ~`Em֊ǑbbbPBVLc{Z(X%N2ŷL }PJQ{:N\mݔϪ_v/ɯ }T8`}Īŷwi5ZgZah}5j\]N3;[:mh[Бɉ鞯T-kJ<<4n|&~vej$ҼVy^б&fGqu9]WRQ|H-ҝbװ rdGN5?$3*:5#;2t4fƱ7:V"CY9V'S~u%n7uUԟ˳rZN\L֭_k?2t,dnv eT>*JtSOn`jy>aMB6yתm^7弾i}d,x: <5OIwmic micJmicԮ x~Z )<Ir$9ВHmǒSעwHO}QCzacՈ豗ѣNQkiu>}Z_/}Gx;iD#E{ U\zߐ_Dq^%G# q^[B|Qu:B|T!>UGzNASQe]~?}xX =0 f{fuӘ}6So>֬'͈gv3ٵt1y9[ͤ7_~9_~Q@j'npXĎ:!Z|R׍ LGYoS=b7b)B>NL_!&S>ݒbX1ddd3L]bɨd$fO[F#<_-{xގOMkZ778zڜ//WID*84tz#|*$_L6ye験DZ ;?~^]Hvg6;`S?P;O݁z!=Z~~Te+wV$бw؀wϏWǓ=uxX0xOr)Y('ƹzlz:zr#C5Wx)6ՊB>|dhjjZPC펚xv;j-j5mt&9-Z*>tyۊg:B>B8!m멙\Q{G>B/SxϋJ)K% ;JռGA#尣q҃ƓfGSQ4ZC41́FÁF@@Ԑv~(h-%[O-X;5Yz5ppwI,T]]Lg~۫S?Hם5>=7ySfud#jkįMYZ|dhд6/hwд/hwԘg4q3}4Q:h<-LqjZ]5šGQ5VG5%PWިUvPQVSQXC=jTT5**کWTt}%lQ2̓#CTQ]Uc//CC[57?21l2qБi?dOYS`W%:ТlVd:g)nܴ nb=71 9W/%7QE'pdx؊^}p&WsSsi;zwh-eGK1J^1_]\kYo}PPC@U!v!R@%)jKXzY7TeP~ʢ cVb=xr=[u^ͧl-juQVg,̮Ug!vvԅYiށB˳6ン!^[:)!_x]{/w9s1:"61G? o+e-x.Zqщ/bCwN]N׳ղ)]ū '}ϑAs>kOR9x>޿9-)*eQꀻ?Uyp'ĭ/ΧmW9l0]mK^]zG %7{ˈ݊M\>O!v+FW&!v+F䷊"v+&9Zba.x:ʢ''.L%NSM[^ԯ5}D3#C1|Yc/[1:1159 ˍI_.B!:*8*T LÅ5NN+ p 'T^4SoU:6;qxvso'ox"v%;:u6xБщWA.qtj9s.KO0tdEٍYY/f{SSl,a77KACSm'̓@FAG#Yњ́& mM<>պM< g$U9Шh4+ZWhLO;Z^.gF}@QFHnh|K$hh]Q9Шh5IsOӀtQ{Zz4ӁiG5AԐe!p1=hT4R;ZǓ@Iq,^^wtQ{:xcŁF@, G`FxۃF@cz:8fFKQ;Ш=hԞ4jO<́FfG/F#r3<__i:SŤnxd\n4[:{0_NԤ-կ}h϶vb駛>%ɗ5(,$GP{V X]nkQ[{iz - ˟%YK"/,"j G_N}XI~º#瑡Ol>]L^gKQLmq 1i(z8zjL%7^8sQʺS_~@!-Ye2<Sɻɺ;CGB&N3ʹپū47q~]:&J=pxpb>NX)wNp8'1 mwrpQ98p,N8`\cqpp_ʻqw-5rXMZ]-7O(vID>br ?Z}=#C/ًfuNΦSCG4 f]v&L|{0= L}k0'Fo#l`]v fc4LI#G0;yc5bbbqحX!v+&3q*Fnjb'#YňcV1QLb1q*F3 Y8f#YňcF1z>Ǭb1q(~[1U8f#8b#YňcV1Q'YňcV1U8f+8k#YňcV1Qsf1U8f#8k#YňcV1Qsf1U8f#8k#YňcV1Qsf1U8f#8k#YňcV1Qsf1U8f#8k#YňcV1MY8f#YňcF1ňcV1U8fY8f#YňcF1ňcV1U8fY8f#YňcF1ňcV1U8fY8f#YňcF1ňcV1U8fY8f#Yňc6sf1U8f#8k#YňcV1Qsf1U8f#8k#YňcV1Qsf1U8f#8k#YňcV1Qsf1U8f#8k#YňcV1Qsf1U8f#jňcV1U8fY8f#YňcF1ňcV1U8fY8f#YňcF1ňcV1U8fY8f#YňcF1ňcV1U8fY8f#YňcF1ňcV1U8fk8k#YňcV1Qsf1U8f#8k#YňcV1Qsf1U8f#8k#YňcV1Q3bD~*F7qr,FǬb1'b1q*F3qr,FǬb1Xaq*Fnjb6Ǭb1q(aq*Fnjb6Ǭb1q(aq*Fnjb5Ǭb1q(9Xq*Fnjb5Ǭb1q(9Xq*Flb`b1q*F3q,FǬb1`b1q*F3q,FǬb1`b1q*F3q,FǬb1`b1q*F3q,FǬb1`b1q*F*Ƭ1+bN7Ǭb1q(tq*FnjbN7Ǭb1q(tq*FnjbN7Ǭb1q(tq*FnjbN7Ǭb1q(tq*FnjbN7Ǭb1q&uJVAf%c9HVxʌdOHd66[ak|l7>s >7#~X7ɳZ:Q:o|59Mt9W \Uy#fC/jt}31m䟴f~n|v|{././įmމ!G)w]~[iMӾlxp装$/QM)fhCG&݀2dN)Z*kԩZ>bɓq91|m!jq.Y//>UZTt1=hy h/_=40`ng8: }X} }t/S:,y)y%BM" Cdž^LO]/ƮrF쌨co|?;OL؞M_;vSs2x?ϗɿN/BrE|--[t:|K/G B|ľSQknYxđO\JRim'TZՖ*|x+&/.Sh>zɳ7ltb3ulxlm49qӡns(G>~?7¹8뮪TS}۾.:_jIB/oϿ!Jm^#rSBs;\9^}UW$C1\'tpeWБ'Oll/5R}PN=;1cwN|_vXfwwOVBCiՉJbDۉ7/.܉U#S:Щ1tЩ%tVXs݃bM&k'BBnܲRS_# 1ɩ9݉Ƚmެ^zWUr2^gˡQσPs'QkpD)/?~7 OZ#%n"U T1D))R&Re'V<'/Ue>QJvQJ,:R=ZH56OA"Rn2>Q^*UR-9*Ӥ]"NRݙ㖚|Zouvj=Wދk=zĻ;WT}~ÄuVrpPNx!"w@ "?YÄ$AR}!ª0HX7 A鍊j/8~'z|V<^U>AWl;5KY+,_ͷla~|'~wBLun6є4Ch*g)Ba"4zX)qwsJ[P_&H -";p>qO\b&>O}~RGb0V]]7^gMle^k1t؍=~fv-]RՆ>fb1_m&e[Qru=7nw=\n θsc^gknV^<>~L5-[^.GN}t^1tmЩݧ﵁tMY{&E+gvCG~xmSux"xkNKln11NMyn?LZ= M\Ə6[DT\U;8t4hGP@CS;h.Vty.|owϛߛ?2t$bb }3mlL[717ӖMʹ}3-lL+17Tif n8A3k݌5l&~}3Thhu&i j+#CSߍ?zma(oG>٪  pL \= i90rČrZ?bە`%^9SM׉'$@s U)?ԃ㖚|58{Go:2t^,f891bbFbbbbQnă݈YNBL߿J-Vcrg(nZq>3s8q>Xw.qpĸpgor}PZӺ*zxz?exrE4CG'Oū4VӳՅ(En%xij%R<]GM|P3Cr}\ladqvRkl(lw+|5*Ԗrqo{4j9}P}Ar c_KdxxW-u%׵x^^⋑x]{W(uON Llv &MJf 3QE(#`EF0}ca-w!^Yfy'n~5Sjԛ#>v5xr>Zzǎz~FߴX}lmUfm=GKc`^1eyЧ~KV!׵k>zu䥥^'%[6!BϑAphhbmML4@Z->^j ɆzAVt9#CT8!+qbՙxoXرpk&mWIG/6y5[Fn)3Q"gs1w:2:q!FOF궯ľqɉ5ZŧmkeE Qu奖ʼQSM.7b5r"-V;qE`n /-Wڋ icF(`F0"``DF0 #u(]^ĮŪ*6+$VxvkB}OObU]TZlbMNuEˬe?9ol'x #h&h&h&h"+a%:욬r#H2d$f2 [׿l v2¿,ZZbXfʚHedlʙh1Hed62;__ x+MV6xWЧ %fa#'Ÿeu.frd(|[1[푉@L P^S^,>G3lhh52=ɟg]Н零VO\õU!V[CL~ԹZɟ0~ZO߬bS=T<tTpm݃S?}95;)W'vNWckOvwXg/=+zV\^D#{ua(nՏTlT? aPpPC83ÄL0!K ESCIبb4%,k ZD v+f891fQLf0bŘV1fULͱS_@V8fEs-Q,prbdV1 XMEnK23z dddd_ݒ+fU=̜9Oߖhr9jvvpZq Z^8'\ĵ691 GsfPU%srf%?}9Vzt(tTn:-(`UI=cpӱLX&t,^:*X?%n:7ɉMGr+|uQ;j+A=#%vӑX&t,n: 7ՄjKGJ짣cpӱLX&t|s_6!ɉMGrcpҵ9utԹqoa^߮oG-x[;G;`GoGgωwn;%ߎumW2gvv|1`ZlsoǜVV\;yEq*oGⷣ෣&۱coQc=wYcꊀuߎoGQW+v~; uߎw0RW+v~; uߎoG]ᷣQW+v] QW+v~;rcߎm9a;Yw[8ԸУVqe:`i؈m.6bb荋S7.6ܸبl yFb#qH@<; uI2nw nwܨ|n >7>7,yύ:Sf|UFs#{}n>77o{n}N7^yύFs#Q/q-fWrE JWrWxHF\p 5\pDG+3r"gn\>7[E±Mc F @pLU'S G#W2UpLU'Sp#9qv\ٳj[WWUvs^9W8kEϜ5ǁ/gWd%.ͳ$^ͧlv~БѵcC;|-vOV|v5f>SBJk Wيx}zu \=Xm/xG>bWӶJA<2t$dZ lL # ; 13 vʹ< }317lL17#.PmyөlGVڴ̛T XvGM;j j5BCy&Q_{Am_oaDGVAm__Em_?]5msjZj5YG,rL2*CGVPS?Zaӄ+Km)É7hwNA p8'xp רW^9ZM#Cǧ'+0<{+ a>0w#W1yC|!>XwO: |##q yC|a#wK#c'[;'^E[#6}!>b_9'ޡ5o#8ehև:B|2 QH#|tD&B| B| B| "|lXyC|!>V+oC1>b Z>." Fe#vs$KoЏޘ=m焂~C~61c~1?_̏ȀȀ#Ǿeȏ$~Ŀ_~QvVЏ7G4(֏'_b~ߐ__b~c~c~b~C~|6s̏9G#?8G/QC~|?4GcQDj ~jЏ}̏#ȟc~1?1?!?_ߐ_ Q?b~1?B~ Ӡ7䗳c_b~Կ1?c~B~c!ȉ#G9G*G?Q?B~ Qȟc~1?_b~G̏G̏7G/GA?_̏K̏#eA?귘K̏%Gc(Gc(Ge1G̏%cuB~ ???~8?#1c~Կ!?_~^̏sЏ#_# ȍȉȉWEFb~Ŀ8PЏ9G#?Q?b~1?ꏘGȏO~1?s̏9GA?ߘoȯcQ.ȍ%#tЏW1?W!?Kįoȏ1?#1c~1?1?ꏘG̏iȏˠsȏ}Џ%Gxb~<1?_O*G*G*o1?K̏_įɘ?"GcX?b~1?~TЏG̏}̏-G~?x&G#_b~/1?1?1??b~1?ꏘG̏#GQ?B~Qȟc~1?_̏/ד_b~Oc~1?Әs̏9G3K̏%Gcr/c~/1?W1?_̏K̏/G+b~ȟc~1?s̏ȉ#G1?s̏9G/G?~c~Կ!_̏Ȁ93!1?Οȟc~Ŀo1?߂~1?1?1?b~1?A?_̏/G#?b~Oc~1?s̏9GA?K̏7A?ߘK̏Ȕ/G*G ב_b~/1?K̏7׳_b~/1?K̏_įX?b~1?!?_G1/G G Gc???q{Џ/G#b~!/G#ȟc~1??Q?B~#?ȟc~1?s̏9A?s̏9G#?b~OC~#?ȟc~1?s̏9G2K̏73c~1?ȍ9G̏#Wb~Ŀ_I#b~/!? 蟆8#%ȍ7G/G?_b~c~c~_?;GQ?b~1?ꏘG̏#G_̏/G#8G/G#b~B~"Xc~1?W1?W1?_N/G*G#?ȟc~1?_A+Qb~o1?귘_ȏ~/1?_y̏K̏7c7c~X?b~q%G%Gȏc~Ŀ_A?ꏘG̏#ȅ-G~Qx7+Y?B~_b~1?1?!?՜ߏu/!Uį#?b~b~b~1?1?xB~Gȏb~=_į1/EaĘ_Q*ÊEߋ}Ƃ@YL((M FmxȘИؘQl&x1lQ(C qFV~)Gc0gw_`<ȤNe 1ƖDF$,1I$ad: #9+uFV$IYS0tS0vI95(O07&a$oLHޘ1#wFeILH1LX$adI-$IGgNH1 #$0oLH*& #ULFWY`<%& #KLF$4R0r1 #$4ʒ0~'aQ*& #ULFwOa<Ә罘4II0~'a$NHM$)6 #ycF$I07&a$oL$) $$<)K607`E$Б!6&aQ1 #ycF$4ʒ0(KHޘ*&cKޘ1 #ycF$$bO/ KbZfWY)~Бid{dZA@G%i &d{dA&Gi&d,nF4f3 {I?nFCnFGnFKnFOnF`7Qͨf&-ϙ݌٦޴QoAwXɆ}mbbqڼ󢮫bWz^\l; ~?|mg&}e B|ľ/G Gew;_K ctX:"|tc| B|,!>K>FP*y\S szrrԖrnrtrd%N9}9Vzrj}9/oJөuбHX%tn:~7ɉeӱºXatn:VX7+wCG~%t,n: 7˄eK'~t_{Hǎ17;bn:u^:vtLX7MGMG5l3[Hpm.fG>bjYI`BWdG>F6XfUV7ᡏil1ty Aedϧ0LUV>2jT(\Kʲ8Jzd'%N2-n}nj1GLkv &`6z3.RiOZQvX΅fM|ix|fԦM%C#br6W-yYG@K==׵Wթ56U֕U#wiMM@^,jw#jwT;jbE5PZwvG5ԣQc5p4P&voQQc zԨC=jd5jwĽ9pNU#y5Pu]\7yԨ=jܱRc QQyԈk5k52w,x:2ϚGMGl>6樋m*Fk9̎jKh.6E]l4?\lt?<߽bNU*FbJpQ%x~fJbc%uzzK%ƒbcI|K}l, .6K%A9n$X\l, .6[0.6jy8`c#؈m.6bLŕFqb#qH@\l$ .6ނq㙼c#uzjb76]鮇6dFls\l.6UR!TG=lc#q؈m6ڔ>6KC>6m.6bb#uosososQzj6yƒbcIqJbc%uqqqqtS\ؘ.6&Ibcz8c&q$sc#跹跹(\lW.6+[ [MVa㤸bczZ6[m.6cO#.6`\ll؂qQʻ؂qդ6cJp }lLR[Gbqbqbqa>6&Iakxl=gw]l66<;تƑRFbc%uQ%؂q|BJbc%uXI=l-l6jR+0Ƈ6}laxFlsQبI]lW.6.6sqaFax\l6VR5"yƑ)bXK]l%]l tٶF)bJpٚC>6bb#8:bbcW%C.6v}l6G.6jR[a{Up}l6#6u\lm.6`\l6{ .6jRgw=l`ccIp$X\la;W>6: .6: .6: .66[O`+3[0>6 Fb#qƉ#uu\lm6}lm6v\lccIpQʻX\lԤ6dq}RZ؈m.6ڔ.6ڔ68`bcFƒbbcIp5Ԥ>66ŕƆƉ# b#q$耸耸8bc/oHw]l.6}Ry֩/:2:mi6 ;@-=+un:11!]5{@^x::7΄!KW ~{:apӕZ t5+_JߎEoGo2+os緣ۑu=+3_ٱVX+v~; vCv=}}}+v~; uߎmG=`Gvys۱߹JzP~;zP~;zP~;j2ߎoGn#7ۑ϶bwȎ9cκ/ (vw~; k޽mq\i=2)--JZ&},BZ(@R7_(no:=,8`=#gĜ3"#va;z vq;֊kE܎"l'~!;֊kE܎"nZJ+Kb;Σ89`G]QW+vN#7ۑȍvq;rq܎8nGn; vq;ٸl܎u6n:dbՙZV|`tABPhk;+.LНЩvNV;t't&1ݟe"L2cӱLX&%l2cӱLX&bt :0s].LGJDjvZHruѶQQ;PK5l7u ~~j߰_2ʕdSO7짞oO-????@#Ks=~,wu/fb絚+$8(09 cb1@qip PL&\98c$҉$҉$҉$҉$҉$isB8NlLdLxyCj ` ]TA҉ UGiL ҙN5*Hc+1,HM*HM*HM*HMxֈS秄oů;;g|D qBpP, 'LvP, '; ի!%TapPi19I2!I*a a2!^2!^*aNJ_I)M^X>c=31lLL1{͊z),Yb˕3R Ŵ[=Zz6Aپao훑hf iffd f{fb}3=V;Tkgug^|/ȁ%{\/@7@%#Н҉w[pNK`;b#PCli$Jcn:nn17%Cȭc]=o;cEE(p[18z"Q8B5GpqA8 p'phh+;rQ9pTA8* C!7/<.G# ‘Z C!cqQ(p9y\q^{xۿU I5ķ; UfS:Cu.ބߘ( _" n" s`" p`"""""Xɱ$$$$jԎ8Gp\u8U8U8u_>}C_l7w~N8^tݸ]t;C/lNV_4/˹zS!2A_jwċ P&yi\MىY p(+ʼ ^bg/?'/ ϗ~Ox^yux}R{x}x}{4ؓ81!eGIL.gd#0s1ؓQ銉{c3Ũ*m1r~SL'11SLC '1c-F䊉i=QWbNR3ѻ0Էl2e{5OMFndH`d' {&#ɰH23t2l2:6 NMFabdd6e{RV'2f=d6MF*k/_.&`Hem2 &}L{c3J&~=33ߌ78ͨ}3jMߌb7(7}3Mیf3ߌ:7h Qf5oFQff6?H.⬖w\\4ƇNJQ7;;8Nĩ: ttbS:)NLs;K^:0*j"LG5Su.Jeq;p۩y{}c@n)|(+vwܸbB;P:!6isFln1d+uS3`C75 W}V}[5GN y{-fPLJNM^!p;yp~}̍~o̍~o̍~H̍z!F;KNs#bno17 17bn 17GWLʹ*o+2>jZZXvQHtDC$-}֣+>j-E>j1ZjZDEvh1o9Uz"\-.&zlEwx*yEeqwY\]yh\tY\WuqwY\]WI0Z\x\O%'.ftԷEjq-.wY\,. KO\-.VFz|Y2xonpwE9yyQy^CE>a}M/|y^ةW=/Uϋ|"_W_Eyy^_EeyE>yOx^E>yOx^sr^.m 6(M0n f1`a&ŷ Fw;=1`a&s i `4M0&ŷ Fm`$& Fu"sL00<#3L00<~Sa%xlsmˇ?&>9EQƇNGMP;Ta %llb!vvְ&/vw{}nݟ[.Cp|E-7;XduJ"b_ľkڼ]Us~t2okʚӂK昄/Շn)i#&tRpcIEx,VqynEӊw:%7u^+Ldvm#-C'][A^2XVy'6. }S=Sn_ :K3C%''ttZ VTA70iI.ttZA +lNK\\l7rNJrxj\c6k6yŻ~xߕrj=-6JoķWƇ~Rm+Pt8|r-,-93tb3س!,MN= <`@<3dLe6YՑ52d{dnN`wjw؝7ԎwK ?Ւ3C'c&>;YmuJ^]mCI[;[lWK5G,rڼ_ [UW,_w[G^QS7uooV]4C#U'~#"R]6LJNCL(bObbsTddĥMF`ړ^짿ٛ?k*`.%$ ũ,,> kuZ]b1_M0L6]x]1g +1ՃǕD0z3C'%רqqs :5˃E"LtНЩ[BНБHNt⑧ky08S!=}?A \qֵJd7ŬtG_ۻͺ_~z}*tLJ==:tjv Ӱ{f{Yh M5:5;qnNȰSYN׃x7SYX.X/r<ak]FHUHUX0X0QjN޽:^LF~oTQwo9zN77[MKܹ΋-՛MGN;J' ^FWv"ؙ6{J7>WwU&gNMH筝%Waj󶗾s'Y)KG!b?Kg^۫7?ihbZY~ztTĻA;@vƳQS?ھ=kP{|іP1ӭF,` ۫Pӯvy|ĦlהCOq߆doo] <ܠܑYG՞ɘIhh > L+غ]^z*[_2 g^"vQ+F>;:vcT֩E"FJ=΍z),R7'M5{qb--3>M&]oNz`ͽ^ G z+U G:ԺFNNk*c~K2C'Ħ?Bw'NʬZ66tZt7;_߄.uM [zeU-55*ڎd+M;b2:rQTò[$ЉUb 4U7u@CS_m-Y<}4R-W(m#F@#rH9h>|h{h5MnįvB߀Fr@# 1hz7(hhhh4R)6WZV,kwA_h䗻G^4w׋j!/0>t2h׈& >Z;hh /&^u>~:h'ZD$byJ)QԋP;xڄلs\|{zN~%^-m[1zVz$f9SCLJNLg3;hhdԛq@{FX11xh>x0hh&ޛ OZPG7P@;@cN ԛPWRY^pھ;5 :jjW~.ZD|-FQ#_tט"jk5浈Z[wvFڋ5T!6JAa!64FJ^;Q\(Blt@"lsClŇبBlT !6gUB*!FbJQ%ب"l\c#ݍqB8بBlT !6UBڧQ%!aKQ\EبICl\bc{9F^%*UBQ-F(Fb#o)cl$ !6 H4JaXICli -bltZpb[9܉܉JADNl w"'P;KZ9CDN,;S?܉5DT"*G QCD!rQ9j5DPNr'rQ9j5DLΈ֠a9湨\P9a95*GFlFE2E2j5*G7=*Gj5DT"*<k֨q)*G uQ9֨kkT5*cmʱ~a:a:0pp\c &%+l.z2G: ttgFgNgVgsaQ:.EQM&tTa:0Dj"LG5QMDCdG,NG5QM&tTa:0D$9 ӑHNt$'a:0I$LG3LG3JMq:(btua:0y].LG^8)q.LG^# ӑׅtuA9Gt&tTa:0Dj"LG5OJ#%ӑHta:R0)q8LGJ)q8LGJ#%]}J\/cUtmiǙ6@&}vT$UQY3K.'5nyw?j>+ˢMzf{}R?J3oLƇNoҼ.Wo~VЩىKxx"׌Wׅ__H~b.gr3>r> `EV]U'>ogNL!Kf:11WLm EL EL{:f/Vrjg^ֹ٢nJ3AgNMȕ_lo.T]iů+ztKCY4g^=kbYgx5˱# qw)pכ65bbեx˥{fٯf?7;.Di_ mjg^,\Z>N: 1C싘V ,pubZؓXp}dZv3 3CL&vl!{&o߅왬$+Ń=[J=1devi[o=@GjBGރl&c&dOdld6yMƊib6GXl2ΰ L sw7c6{6u~)8Wug>3tZr˩u#w,qrb*z9t'tНЩWCwB^qI:2cӱLX&t,ڟe"L2cӱLX&tW{.s`T'}+#x}*juW f/7m&:!6hZq S#'n;S7XpÉw ' 1\Ƶ‘?-Lvx|JU-;#RpjN](;? #Tcp GSs9pGpj#8  p86΁;+Ȁ*rr?pꍍp`oͭ^W]ңC^ۡjnno1k6w^pw^xZ|o|SjOW6EЉ%;\C+1\RK 1:1:q/S:1`;'0NĥSu"nBc۱TX+%]܎.n|c;3TbO)kv:5;qsxu(xCx"׌lq3THU>Be֥x +.|| 7ȧ +/|C|ujį*7'~Y !*'x^-{>0a7`{ {₋^K?vWfvy6D'Vߗ\d`EĞgUq3C/9d+4SàA;@#<}4>X&񃶏F@c!b3}4d퇯cʲV=euҚ8컇w{LLw8`2u/oY6$zb_zV 1:j`|ku9tt۔}]^97U~'PxzRBPPKf:1STBfȞf22%S`yT[=dL6ӿK&٬Sw.1{6c3bi)fMuש+u et:YdxX,bf!|<|cl԰oO^d][_~fh/ u}t*j;u悪#u*PăPujU'~amT.o{ON~_mBb<z[Jz+W֩_;3t \G/y룗K.%Wx}u+ʼȿ, `_X!M00LoL(O`-Y FZaǷFc#3L0&}L`_N`n$`HfwLzO`C>gF{42<09`a^jQMb4]]1b+Fjq3[{#p.\1 SLb_x\1 tX+]1J[#*7rNb.\1f~W|ctX+Mg3T"E1bD)F3/)8bUdbc3+oUcb|#p.\1 W"gm11Wyc3v+V0bc)Vbc)Fhѵ.oIl[\1*qS۴s-~)F%yO#58E`wንc+<ѵv.L)F?1b؜yQWb-u+FJnŘ]1f~WcwŨM*?1bcESli.0dMF`d0L4Lt86q'#0m2%OF`dKL?>i.'|2�]2NdMF`dLt86i96q'#0m2%、OF`dKL>i. |2�]2dMF`d-%>i./JdMF`dcdMF`dcdMF`dcdMF`dcdMF`dcdMF`dcdMF`d(6OF`dIq'#0m2%OF`dKL?>i.'|2�]2NdMF`dLt8`6q'#0m2#+ 1}2�]21}2�]21}2�]21}2�]21}2�]21}2�]2n0Lt8`6q'#0m2$+'#0m2%OF`dKL>i.>i&YM6q'#0m2%Lt86Lt86q'#0m2%OF`dIְ6qV'#0m2%、OF`dK>OF`dK>OF`dK>OF`dI66q'#0m2%L4ZRYL}LL'#0m2%LKL?de6sK)FL&LS>OKF'cLOF`dIVq'#0m2%OF`dKF'#0m2%6ii6qOF`dKFW'#0m2%+6OF`dKvOF`dKvOF`dKƫ>i.odMF`d]6i96q'#0m2%OF`dKL>i. |2�]2dMF`d0Lt8`6i0Lt8`6q'#0m2%、OF`dK">i.'|2�]2NdMF`dLt86q'#0m2$8`6q'#0m2%、OF`dKL>i. |2�]2dMF`d0Lt8`6U>i.>i.>i.>i.>i.>i.>i&Y>i.>i.>i.>i.>i.>i.>i.>i.cdMF`d>i.%>i.%>i.%>i&Y6i.odMF`dte}2�]2.Lt.L4j?>i.LOF`dKF6q$'#0m2%HOF`dK >i.7dMF`d %>i.%>i.ge}2�]21}2�]21}2�]21}2�]21}2�]21}2�M9cdMF`d0Lt8`6q'#0m2%、OF`dKL>i. |2�]2dMF`d|'#0m2$k9`6q'#0m2%、OF`dKL>i.>i.>i&YNj>i.>i.>i.>i.>i.>i./JdMF`d0Lt8`6OF`dGVg0Lt8`6q'#0m2%、OF`dKL>i&Y>i.]YLOF`dKFW'#0m2%+6ѕLtx'#0m2%/L׾|2�M>i. |2�]2dMF`d0Lt8`6i6LthdMF`d4|2�]2?>i.odMF`d]6vOF`dK%>i&Y%>i.'|2�]2NdMF`dLt8`6q'#0m2%c'#0m2%c'#0m2$LtLtLtxQ'#0m2%c'#0m2%}LL}LL}LLa'#0m2%c'#0m2%c'#0m2%}LL>i./JdMF`dLt86q'#0m2%OF`dI6OF`dKL?>i.'|2�]21}2�]21}2�]21}2�]21}2�MLLL}2�]2^Lt8`6q'#0m2%、OF`dKLc'#0m2%c'#0m2%c'#0m2%c'#0m2%+6ѕLȚ+}2�]2LtLtLtLtx'#0m2%、OF`dK>i.'|2�]2NdMF`d'|2�]2NdMF`dLt86q'#0m2%OF`dKL?>i.'|2�]2NdMF`d5]YLOF`dKF*6i9+6qV'#0m2%㬬OF`dKFW'#0m2%+6q$'#0m2%HOF`dIrOF`dK>OF`dK>OF`dK>OF`dK>OF`dKƝ?>i.odMF`d]YLOF`d}22%6sΗdMF`dt2|2�]2jLLrL}2�]2^Ltx'#0m2%OF`dIV6钱6钱6qV'#0m2%、OF`dK>OF`dK>OF`dK>OF`dIV6钱6qOF`dKL>i. |2�]2n0Lt86q'#0m2%OF`dIVq'#0m2%OF`dKL?>i.'|2�]2NdMF`dLt86q'#0m2%OF`dIVs'#0m2%、OF`dKL!LڜLtɨ1}2�]2jLLC>i.ge}2�]2dMF`dL4 K|2�]2>i.OF`dI!i.>i.qdMF`d0Ltɸ'#0m2$khdMF`dcdMF`dte}2�]2>i.odMF`dLȺOF`dKF'#0m2$+y'#0m2%#Lt8`6QcdMF`d0Ltx'#0m2%/L#y>i&Y>OF`dK>OF`dKvOF`dKvOF`dKvOSɘm2$i&WLth1dMF`d}2�]2Z>iOd^UDyЩy[-`v[Ma;`SQ:4FR2[ Va F8a;`KF2i հ*+imЦ EؘBlW-֑(Bl$ !6[˒b H4>i}nt7FbbJQ%بBlT !6[GbJQ%بBlT !6UB*!VWvFb#o 54cl!6ksZ A7ҘB̍-<[̍-s#퍹..a].Dn(3vCnq;t M̍8 ɟaЍ8!7Nni̍8rAܨOc\xbnc7174FϊIsc~1ܘbnx/+ i̍4zsc~i̍7Ocnn\F]my,A8 ^4H ʱ<娺rrA9rCT"x'>߮UA+(GV jpT"*G)(G>ErGr\^c+*Gݨ. ʑ sZ뛅'W͍ \?>e3bRAͅ9:b~yXWVR듗x}R 볗gLl^-k펲+c8>[Ňzfo541e)WԇJ1Q:21lL])l]n6&e7:Á7'6u͙]ybiP:99||<}^?lkdy|E[0~/yVvRo\JT#2iCJY HlmAiZgҭ.$V@+݊]RdEy[1I;snܮ[1Vse`n׭u+v݊]bnۢsnܮ[1VFYy OX .2ӻ# ~ah4C3CFMU4ahфGًvI7)6޺8;/ż;svEk6uH h_$I?y)twE+vv%;O3&3C/ZK¤LKUzf˵5ǘԞ7D^x#H ɳПzR^N+vQ UZ ήwzZW/Dvިt7B#+;ϪNZAvffi ffi!ffZz6m7_l^fbsoQ랶3C/i]w;K|Bq|z%e#TDyf1ln,V%oyi%s\@7@ Љ NS: ] Dv&?pY O^-} 0N.ł)21;3vW~|]q_ޮ% G1uc~'~yw޶FNCL A_,#=1db )nbdٌ"ho76*;黱g^s<_;҇^ݶιHOc'hW ĭw慘y֠C'&f_}Sw{IAIL,t{Ĭ'1 DIL{c3ZlYCLF~?edcٳbJv5٣ܛ^S2SyZ-D~PgYwKew;wof?/w2wpY^֪KꮗfWU)Neg^:%4ua:3idkDSt*=4کm]i]񡗎㇛VjH( :9o·Y1 3C/w&KCGבթf>3Z"4Z"4Z"4ցz=4h{h4:4x)h{h,(*A FE@"QШh$>J{͸#NrUQ9*UT"*GRڊʱ XʱA9髐~&UC'& =iW&wFPScZ+(j{jr7=59EmO#&W%k5VEmO54Q5妿W!~(y-g^ꅯꍺ.:%d+uӚk17۱x#5.3C+v&sElVO|FڙAӊ|e%gNOOG5loU;Eg~+mO}z^,n7o%". 83tnGbnGpD*iub_7e4M|}4A{F+Yh,4 A &^?>Ü,ڿ:Vފ²7f \*G1m&ЉȞ$ddMtx f{fn'f{fY29ffx f{fT9oFN뛑f❅QfYMᛑkfoƺ雱nf++1fg7c?7c?7Fͨ}3|3uoFQff3O>ZI%ࣉavF@#I H9 Xh,4 b>hhԞ4hCqO Xh,4`2)G'-F?-F?-F?-F?-F?G/G3F@# hi4%i4y&~43FxX Q{Ш=hԞ4jg.Cm6Fr@# qj(FE@"QШ7(SШhT4*4R34>A#<}P֐F2F?-@c:3I24x_r`z(hQhi4{4yZ|m鼒u?rڪz`w#g-v\o6(\raZ;ډW5fM' &ĥf/noE/qªL]8LJNK|&&;1/: 0qYDILBn6On7 Nex9Wy1N:%d+uܩ+魺乜Սn*XܥkdZDGHt5ZZ^vZbG-ug G-2yGK=c*Oho9Z[Eho9Z[%pe಺6pYm \V+.ՌFe#5{r^}w7 سǿ />bl|e; P0!u||eéoRѪlKqSi|Doށv&hh Zœzll'wxBltbvMo ؉c7`^{=vJԘhٸSOXb7:ݩz^YNS/S\oO A>0kSoU/oO !Nm7WV߯p$sԷ{I,jn%Q_yb|v]|_\?>v ICɻ;/se֪z^KmMyW_;3tJnmƵi VnwYzqi t:jbځvLqjbځrv&ՈЀZiÑpqpcBz@^f\ޕo.ժ[|^8>BF=QuR8Q_=.6ߙ %?Z;/\l|$c& '0}ľQ.G$,& b}AIL}A/bc[Ub &֑bc+F>抱Vbt]1 W,6nyWbtԇ7Kȸ%c\܎J C74G[;kսtHEpj'#8 Ht$G_$Gc$|;dqA8 s\9.Gw$'^1m(m m m m-7Xp,A8 C~\ ͚(  8{xQ9 |pGpqA8#A8#A8#A8 E~"?'~P8 y\<.G# ‘hdhd: y\P݃MPU酱aYBlš_>m%!&߹ >KBMaa;`c% $+a;`#HClm*!ƒbJ)1ԍE!ƪscY.6QQch 䏓 ps{/⒪ȳ,Nn.НЩb@wB|c9s>ݛj18&} pprC8 pu\~wx>!'7;;s11;7;l˻±8WL;7;#1HcpEI#ʑGwʱ~Q@D rz9V+DT"* q$~G?_/Xf:]EE|t3bYE( VZ?7:t[05/pP ]05蘭?,5*B9o 1:/q볗K% 'R}/`F`V`f`S}c*0,YjJ#U悉}S_  FꁩG恩߇ OV O& F큱 1y`l`l`t+L00m6&*`jB4ؗtL0Bc##ؗt<uX6 Ƥ1{`l`L0&}ԏ0MhQ`'BFf1y`]0^05L00e4踚`aX[Ulz`|#7<0n-,Ѱpb4]1zG,\1G.eռ'S{cqW׋˛ŝd%eeS78:1:nKb͵A<<- o͵%xCO^^^'CoX\/WIzDnB'v2Ҵ3 Qji{)zڦ5zzv,zz4RXzi:*^f{ z Qk$Qk$hk)zTj zXR{ zm Q&葱$c8ǒG*EMȖv$ytjU_ӦJcw#% z'|kx]"|;O#KH?l07$cNs2PUӗr.////94>^H#xNӓ%gMxZǑ4>$>ZI|JGޗFh$qD(5ޚ/נR^#g#A-$>$>$>$>j$>.I#mNHHHH8rG:Rns_ő|294>$>>ڥ|K%Z&Gіv!_4?:i~Ti~i~H9͏%͏7͏7͏7͏7/zWh~֔]zRý]3C/XrĴnJu\[8 .d{dZ\BGpudS=ep07v03n훑^~%g-uvq;v#NcnZ'c7Ice±4Xp,18P:p'pt*pN2p'p4-pt.cpVܫ7/%RMVѡbS!65MM{a;%&Xbn 17BMd͖oۥp^_U+ڢ =3rT?3Zsqi"$&3Y!^x=22{llrZln%:V;3.48,63C/՛$5,c ilGlbvFC6B-*Ļa;fs }PkeNKuKU/,\ƇNL߼ًۭĔ˝:-Z< -tX49qk=wۿkUk<>>cUjtN N<W&~_,BV$+.C/KNwt1-ڹz)ynGt5"YȈ`֔ 83O=ړe#&1gNP| KxCVǿ{f7o%KmzȵKyQ% x%1%詷ݠ7GQݦQߦQ&7o7GƒG/>En|KKˡޛj1Q0]Zcq;Vٰ]K] H~e۬짇۷ EE'R%Oyrr== =*=J=Bl9EM#r >|93__9/7ꂷIfM4?:i~/)~DIK^2V%!Z&2&&& 'X҈Nd)D: p$+H */ďx88'i&$5O`* s` `]q< I ̈́D=D@.I;;O$N#H;+ 㽩N&34@1HN|Ɇ90U8E$E$E$nL" ݘ$Ws` i-2&H'ƤIIvp"`AHG:X^\DH3!Œe8Q~LR}@&޳e2Ӟ3C/kv3zfyUI͙AWIJ C5m @PM[ Q;Px"j,|.~iihGL,CR:51[ً~iZkM'OKЪ}&Be\ ]W3ߪ%n BOЋ2b&e[Xµ!`_īh(OwQU prkQjљ߸V V;+ԭfmf&/Kf?> l4bsvTb5~f%yEeza\V7[I.z8N|SJ|;-+zvWyw,A8B5GNr$Soߝ:/unn2 -\OW'yш=3C/J"ujò.3C'B-?et`⭁}q0aT˲[ T'dyш83t ^W5 *fڼݬ0NVrrLpA6ˮ֯VV).oLƇ^&rņcU3C},qDVr:dp}3 >roH]\5(\ꙡ]Њ- m/֙5{rAG(m[lWVM۩ILJ^?n۲Q&4]]ɠX@;x#gBQ;PO^i(]uSNүŗɁ%2\ 3C;')cC/Vo lChwƇ^x=3mM :y|4UOĭP QmQXh$4qo 爨tD:"jk5AGz!5"WkАUhDM<ځŻVzXl,!6VKB@اͻcQ]+~KT[fuZ}P?vf7t|P$LǯQ@%tpTU\>UZ`UsrPيJů^aUԥV;+2QժΪfz0y^"cC/XMQ=6gNK/bؓzGv!\zulx cGP_zb˛fS.m)+ DOqb^Ud߸xĩﶻ[ hxn[/EY,[l?pi㌦~"r&C/ǛJ׃*ģ^YB -IygNOQwnsxTzZrVVQw78>t:nŌۑ[2ƕ[ unnݪB}<*C/Wj߮ߡuSw7%}SS",%L\rfZln9Ul4>tZr+;wd;֨ˉeLxܭ!C'"&ALh푉 {& 3xg2VLL< 3xg2푑e;_mwNUVx~xJ籢-ď5:!t+ug9܎j#7淘Xv䦾aWLp;rc]^܎ܘBn%iMlv&q;>bn!v/}˘B̍u!ƺs'ܨOCnq܎Cbn-cn-cn!9u}̍4zsCbn!!7V2܎݈}7F-*S:IdkTz;Àp&pP)ÀLp90<0 PQ@J4@VHG8HHH(~Q@B8N?`G?0D:Ux?FyѡSwN= -pGpL;KָV8(8pG Soj!Gr‘*  p8A8bpO\<.G;^"K,*qЩii/ffZMLjכ5u%: 1rb;YS_k?nZ Otw;oKΎsQ-Iy9WA@|`:ԁU5gͪjNzKNѪ\EnW.crb}9"+G0ķۗ}l_/񉓬VMOkzb-i @^į>q7} h?駟4:PlC:Ә߶t驩oY#Mea}Ӳl:-ģG՗i+q9SGlO:uk~YbqH{3xPadVX:?tERR|{!g]n.Ro&Gh\{V3!ԓMięgP.>}>LM5zLL0{`&&=0W6׌M#ΚZHAj#v/0:1unBFLF` b7~Դl]p }Qݫ8SZ1Kkz8\Or<Lge6՗L83P#[],˹jlږG6yciWd#G/e~bq?q ?1|wOGMki~R?GZD?I~HDR>@p" 9L$&*jZC&/TAr$*W&#+(Nd RIdcNP+O͊"WMV`{&QM7wBʯb6&aa*zeAODa/j~D-QL~~Ĺ}:q΃n?uft Xҕ XN}:M'nAG~bįXcWk:hHGTH|&Hz3A' W@>~Hh \&y )yR>qH]ȟ7Gq-qF+K+Kѓ}Ȭ{znZ7^b$kJ5yuyYU)/GL=}t0hzjՒ)F|G_rx^)rcfRՙx+M_`+_kU2#Z Ā ZߵW~кh}h}REJ "EђKhm]6ZZTh}נbh1Gd-ӈVDy+g Υ?6MY#Mb&=<#4t#4-Zш@ՠ=ĺ5jմ(=VΤXQΨXu)vy8)55G|Q#_sל}Q9Y.U;G6|<__^|kMȧv)WSw;=u+| 57͏GM#K7j~i~i~I~??I~y2111?'7MAK__K_:8GM#9cKcKcKcy" )L" 9L" IL" YL"ӘVGW M_x(1* T&cHeL碔4R1R1R R$H_ %3T3%R>UاJRxj]bRd|EL?(J0'5y\̗Z?ݦyiܑrqu"nn$ۮ۽ϛN EGȭsV(>͗g/V],/P9͗35(8dc{Z]jd~-fl~.щQEaeb x_*tw[-mYy#MOWjZ]eMj݃E20-d#:m7X ^l>Vx ׹t9Τt8-g*x c>r~m^% %0|r@~N 1C릝mw<7喳)1N=7ύq눧,,&+(t >{{1ۜ|mIc/ksBFa!/ٯzuE^AY=EokKjڊSȴ^~|9[}T*JHӡKxOjzV3-ߓy^G'&oߟ2=%oĕFM`FİԵ:^^4݁Â#R]v060dL-vrSv VG#NFHbdA)bA1nŘb,bbRz [1汨hu 6(ƦHX?*`3:aUXf,LF?LF#HV30d/ÕE0ddea2AdU&c. 0ۗa2a2R00(q2"f&#bɈa2"f[q2Ja20yY,LF^&#/ ݓM/'u$FH07 H5XpGM8V&kSf`qτ#3L88<΃L8z ǹplԘ,L8V& GT5ሪ*#8p`<9ʑϹrs\<1Ϲrs)ײʱ[M+<1ϹrsȄ]92azCn)\9j%•#B7S[KsW!\9L\<\9W+ޗ+GĕVQ+e刭Օ#ra¦#Lt 0POG鈰6֦#tDXҜ6&l:`m:6am:V6 ՄKߧct5Wt6)M\gQt(: tm::Υ^M6֥먜tTNl:*'66{6:}OB̥Dإl:zMB̦c!fӱXt,l: 6kX5Kǝ> Ħ#9鈰.>Φ#3ڒU:=XM.]ŀ6Ub1X"MWqݧc >\1`m:6'l:v\:nMHm:MGΦrbӱkӱu"MG鈰6֦#tDX>sM\gM(ut.]͎M֤QtXtyMGH]:HN\:u6֦#ºt#fӱ&La}:zMGrbӑtt88aӱpxȧ#Lt 0a&L.goӱXtu6yK=v?/׊X!dqpk. 5x8x\o|mq6?WY?:M%v:rU ѩ!=d҉y//G&=_ξ>(f{Wl3;P7iiQ*m~#|kMO_bYw[|{QNj\47qGMOmvS*Wm`Ҙ'D CC@PꓑR9T%4v( JF7z((9JID(@"=Pz"9JjJ%BGPQ"y E%B14(ȣD((~=ӳަjswuSR#^7^x2zEML,vZQkGj򍪨=P5u}=RSyBZ2(Ոqkl 66b#ZlΦ>4c6BFH }c6q l,-66M}lDRA강6ǎRb# !b#osئ,-6z&~s#6Fmy u8q1Ylm[1H-6 H@6ηylmsqc4æއc6"f1Yl$ ~<6VM,66A5I-6`,6B2YlmsqccZl RmAjg1Yll9lq,66 <6BFHpj Ky,6V <6ze}Rf5\b1H6>بYlmyFbfqF氱I-6"F$؈bX) = eJ=66a0Fo3ڌ Fb#Zlm`+X[l,-6ʔ+U*b#ݵHw6N{lmyFfI-6"ƍZ!b#$Xl,-6"1H=6I-6FkOgȑnF0܈s#:n\7F\܈ qXV%ߖnlcyncynou$ύ:zscq7F湑yno>F湑yn{=7꽎[85rc]oX{n=7zύuzp3܊s#<77ύs#C<7꽞^ˍzzsc๱^pJsczn=7zύuƺsc]oլ=7 qs#.xnǭ!@ύx,&q;J׍uF湑ynoSύqjuoF\܈ qq먿nxn8qsc๱^X/nSޭp<77ύs#<77ǭC)nF湑ynoFQدwZO=70oύzsc`5L7Fʑyr or9Sl9b+GluL>L9 rlr\9kW\92aW|Δk548yhˑ rd®+GVʑr刭+GVʑr\99W|Γk3WĕKr}rd%Y)9a[>gq-G3qޖ>1Ϲrd®“xYÖ#BrՕ#s rd®%G*DGtkU6Lu6sIrOlj&#M6gl::#Lt 0a&l:„MߦQ9騜xtuYt$'6ɉMGrbӑt訜t$'6ɉMGrqݕOG6a¦#Lt3t:G „MG6NRMgN6yMG^qO\g1tus|1`m:rkXΦ#Lt 0^qMGrbӑt$'6ɉMGrrGf?w,Qt:ƭQXvox 7qmM\v&p{0yno[yno湑yno[݇ێs#Zn{M7k`1RM8BGlpV gV}s&s G%΄g‰WۅK+xp]8*p؃+J<8E7m `Q49L}]8vL8Jfjvs0s0s0s0s0s0s`˱rX<2Yvr\9^+/W+˕cʱe1P׭ʺRM_zM]y 6ByYoh\X;W-WT3~UઙB\]!.sWk WkTbq1ՇC\5\."c+C\D1TҏubmG%A,Jb^+yq$:)A|y'q1/c̋b ?הb<ƎOļ'b^_1/v=}̋>|b}B}51x}F>"y1żB_Oļ1/c̋b ]@|yMc^ǘ1|P̋Ǡ1vD̋|"b H>">o%>Ƽ1/c̋+t/1E| ^M|yc^ǘWwc̋|#">Ƽ1/УǘA/c̫+W̋+|bL1" G>"yOļBdRωyϰc^ǘ1z">&>Ƽ1/c̋+6Ƀ^ǘ1E|yc^_/ z_"yO'b^1/毈^ǠC^A/D̋>D̋">Ƽ1/毀WvЋ">1/c̋+}iA/c̋">Ƽ1/毈A/K z1c^oȿ^_1/Oj~4+f/; \\S\+p C\Gp}窉!.sWK-@u` qwE-lX5y϶~X6m{;ϮIm"&?.>..B9WCN5w§nw޷Xm"OMej^Ȉrz^=/z! x(I%1%1xa筗Շ-fj)n2~wmvmq&VzMVص0fy^Vꌔ:~L= -x* [0q -v޽ -X1ɀua(XXL,gCv; 0, 10d.Yl.UL}{2[QM*eL>pԒ)FP{&fQ{#.P{F_sd j&j< 54C5F4pԘ 1B55Gy-ִPGM3F#4ֶ55Gh਑9jDG=AYcSbSHbSO҇Fkl ֲJbc`J([l,,6W+F`++W+ŕa b#$Xl`QosNO6Ra+U*RM~uy)t7=y7G խmJqc)]7: G3ԧہSnN, 'ۅK+1p;KUy s '́ہSgnN,O P5#WؕBbMyΕcs\99WR+G-0\9+GɕQez 9ޚ_GM~{4>hAGSM) _Ɯf1hDݯX8h 4@uisƜf1h, 4Qz8hiT#p:5GQ#pؔr({;j=PcR#ur5\G,76Q{ePG,Q#ˍ Ʈ8C_XQZ,5N4k"GJ~hXmKP{Ƽ19jkc 5oX:jkFᨑy8jd{ZEQpԈQLF 5Nu|Hls N}':ަbK'Z/Ia{ĦGMa{FH !b#$8lp,6BFH0ؚbS`dz`{F$-yDRHjI-6BV5c=ޘyn=7nݨ[K2b܈F⹑xn!|n(#ynoF؍,ύ%^#f_7 >+4=IiVEt*t+uj2_K* 45Z@~Z_44Bهb3*;x7x$4uGO6z^bvԓݛ03KAGkA3C_/_nWSRv7N\w'Nyc{'&W6}n?~]4_:|K5LsV*su῁rl4T'ΐY)tGri%/ni:/-Ku륥xzii^wKz݂``LA0 ~L+pv-S_݋XH-dM5^j-jݴ+Kd*} aSM^~__\[B=WUy%27}1vrN-/(7$_x Q Cd8#7]x 2 vxcgU CX["v:xpģz!X k@![f#yMb&k2[-fOcWiU6}PeR?䏗gfdFU^!Voӓ>>ܺɏX}Mo"#''܎܏/zcD6=}7G N2n'Q/UTr*s}MONgK'?MF'w%vmO?+^bO.Ս'e;_Dnޫ#ށٮlkKKK\+TkyעKfR+J=,3vAe2Hw^cWHH:RXT֨Ϗ,mSexV]ͼ_VXux"VWVTd+rx&݊MJܬjkEAqƪf"gЭt+vBޱvV Vt+8U X1u+ƠjU1VA݊1ZՌcPb VSƠl`bҭT1b VA2cPb VԐ#VA݊1ZQC֭Et++ՊZ_Ċ1[1OxkηVW++݊J| z͛b_DNM!cY-X,2XWXL2Vŵa,3N % K}+,2xf[uu yUSұzV!EŚzڛ4_]+vOvb 'Ȳ 1Kozr?|}ZiQKVwo%mZM&݂ [01nHʱ1؝9dwdz z^6%%dԢ"fYK7KrBvT>]oA[%~vԏd{ 7Uw6ہK+z8Ncn<΄#3ԓz's\9+Gpkr9W>3.r9L)؍զcQIXtl:r2K1`m:Pnґt8'a&l:„MG^gӱ( 1Qؽ^)vw_||!tԏ3ہSn)΄c35 '.YۅS nN-pp{s+G&ʑʹrrz#rrY)ܻPV>v_ӡ3|@{4y{4Phh.\ݣ9yF(0jƪQcY਱.pԈNL1oXՉ Y3mŘt` cq!mTJ^M&@f9]k5{[UjMjv)nԕbb*[1uح#v+~l؍|[1ET"*06>S FNXcTFXWĦz kN޽ۋ}~1ߜ|Z5In:,8ucnrZ擃YĎXYZQjm:J&Qvn&1zX,Yal`LA0z!`7`݂1$c`i7Sw,#q g{#V2*``LA0dL0,`J>؍bb%bQ1R|b7bybb݈> v#Fv#ɧE*ĂbdQ NfXTX#VFňA1r3T?*c揊Q珊q*(؍ET"*Fv<>V2EQ1FeT?*F?*Fc1MF§5|LO3z5r{dݐ1W@'#b?o&͋?T*#lmߜyج"od͸0#n7KhM`3ڌpY{J];nF1jVr(nF0cl͸5Id>3ͨm5f5fifu@;%UyEF+h5 (A#OuӊFOW<.wv0A++G ?,Vv 060dLޡL1`LA0& \w #VH+`!V? 5C2Ɛ c`KFH\`D ~I?&;X͐F&GXmľubA1汨 bTSu@u߸ٍY 9n_avk?uJ]p]< ٝYt ?3̘fgwf&k٪B˶}M&w%33]]ə``ru,F:v F / #q g;(b`A0& ~A0 C2F1V0Â`aA0 X¸ڜ!# QχQAǢb$Q1RETRTRT6*Q}2بlT 6*F#F`bdQ12dQ12بlT 6*F#F`bd+-`bdQ1XT|,*F>#Eo"EŨ(F`bdQ12بlT 6*F” 6*F#F`bdQ12بlT 6z<lT 6*F#F`bdQ12بl2بlT 6*F#F`bdQ12請dQ12بlT 6*F#F`bdg`bdQ12بlT 6*F#F`b`bdQ12بlT 6*F#F`bn#F`bdQ12بlT 6*F`bdQ12بlT 6*F#F`bh#F`bdQ12بlT 6*Fk`bdQ12بlT 6*F#F`cb]F#F`bdQ12بlT 6*F6lT 6*F#F`bdQ12ؠ_r`bdQ12بlT 6*F#+,F#F`bdQ12بlT 6$VPJQ)q2zYIqVٿ(y"<0\k(.fal،zfq3nFA#jp<6n6,jq363f]ՑkyIY;lV5g?CfmJiB,Y;/d>iR ]щgM =t8Nv]8=Z‰arB'ZMEmgiو&̾ [wWU,]lFE 5>~=~bk~brdU!ΔM'~c{Nd 57s#7: G3ĸ:Xjq|%A|Z#MOWjl#yeZ귂MB&~9t?\o&^XQWG0ClV_5=yXo`Qw푦of(v:,KN>eeciyl1a#MO|mq6?jqȶT[]i:rC;8VpZUYrӓB`tbjjZ(R|Hᨉ+jljj-xM"o#7GKN\O!'V@F!_WVxHᨩ+PM zj?ĕgpy]❍G *d VC%``x݀5}c~}+2d +a10mnj-XẌ10 5 XI݀VH+坼=]cQ1BVz"v/&>صX[+cUhmc\$Ub11g˥jݬi'@Rr6w}i:4K49b&?+cmڦnUiz\w mB۶+{!4[1R7&^ۮrpJuu8z^7m#M(^:.b.?񆈮+eבS{|v;[ۮ:R_0+8x6uߒR]MB>ٽ8cLM}nhS=@#vHmZ8'Ѳ)2EƌmwOI;rx xuي@OB0{``7q=βdesѺV-EPMDP_L v2^lm 艇I;mŪ%z"F.v_di϶SOcw0d\ſS^^M'v'⬇A=qC#7AD/AOJKH{[/_֫_ϗm*\5UjG~eP#ni#/GsI }9-2 /Wi;@Lg1`]:xi_@w0a&l:2b҉RCw0a1t̖?_//gOôhb4=}1Ⱥ_V}*ۧndt? ]4+v#M(b;q " & /͗Z (>rXOkp0WLfTEWP]#ط$_FOpJ6sHb^-Z4Q+m5Ulo*!G 5A"}Qt#a GGdm5 p҉1~O܅˝-&b݊3O8k:^^|u8Swy։#MO\k6[)nsAy&ލ{l|Tǁ'_$&!v"^rp'\Q{L1N5LMlq0_.[3F Ee{}M'^ q-w@O~hzzZzb1zBCz$SExzd)zd)zd)zXR{D=2=Hv⤗OVMF'2/\io4nN=ݞ] 2b;vvbANz};XF=wgSf*>1tp||L ||ԭ1%;ȧn錈ٙר56SO<adQ iMS }S}#|$E_,SwO=Ԃa?囼;_^5GS%7Y^C45;RAGaݣڂMM#@Gov~8J,hH9hΠ=D vVDZA{nǀM݃AdNs 4q4i V 4zF2V3< 4JCfqKa8W =bK\lS@G1=dRpHag+r鎆١λL9e«[l5b9lb#$Xl,Ҭ)G*V [ovV2H6]MmakHjJ3ZBsd#$!Ԣ9u+oEyAk<7a8깑nS^;ܼEK\Fjͻqj/2[nS;,qݩEJn<7o7ύ$yFb~Go29u$׍s#{=7^íO'߬o'߼ noF湑9nSJ7ύQ캑ynoFO,7Ӎ=`wC55o8pyVrnNBąc:pM޲2҄D:72iU=؀N8 6k2qu]O ./ NqH[e9=t.˚9΄Mz989΄c3>,UPůg|bd%gXuVO&QՃkJwʼM_2X!4ls6_W3El|?[K^LY[f_ϗՇsMq{(pp8 ǹp-هFZ{~X/uQz\߹/ZfOVC2VKW=,b`糀Y._Æ٭~E8fwf5K;ɫ/smiAL pr6V#6a?.,lԣ=b+ܰ=d#$Xl l>'lP`{6ens/ba{&_C6+X\YlmVHh1Ff SL7‚T yύ_, L? C6Xaoۄ!~ {cc`+<6"V駞a{ u% V,6BFHM8k7oO&pg^ l㵰=bcl]K{n^-շRn׎ݬ;Ƭoǘ *o|1vJc|;;ێBqcַcv #vSoGo۷v\ `ǙDߎηc:;ߎ11f6R8G' x|5z~YmyߖkSΖϙrܕʕ$&}Δ3妬]9~Wʱ7[M9LY+GVʑrDW'L>guȹ;8%iMG^bӑxtM:u/Ok?t8l@(-!:?[̖ͷ\BSkBnWNB}9M'NӉ}:>>] ,&?Vw&Woҩj$JKA#@t(dbfDٽ:Glj/%:9)!˥j'FѦm;7} v?n3GNyt`tSqbwN<Š;Ƭo۩Xryqi:_$?Md%]P3#ǂba1XLlʹ},(F ǂb쉇cA1},&R bb},,F 5_']/|%<]tM֠8V&oO|^Ty=wv鉲tyXZɧM.c<׷̊V{6mFmM{6@m[5r[v Gl-l[8 FkZlT@,6CZ,¶Fos ֤6- F<sRbc)oH@,6W++U*bc`J}1l׋/׫LL2SO7Z5b<`^^oe:.f}X1F.U.0zޫGzV ¶qr2V#8>H|G1 Gqb G1icM|G8vq$^?#82?>c]'9p|Q<ځO8xԑ39R|G3zYG.0 u4Z 9M_S]jT(܊i]+ks5+Z+ޖm~t8jGjΰޮ//> ^b ȻP?ozZz*W;NWS;7}jj'e]dف/COݶvۘ$6UvoZ|hHӗN:5Z׈S~gjt dɦG֏lLd@r ަCS nNbʘ zx>j{>ܾ+GQsXBr`eky#W5+”c a˱pJ\9)~ۈܮ'm92aON}9rsJf^^*>zMGĦb^ >~ϊTf|강۰!b|5ⱱX[l, $ݵHw-6]tb#u(?d{7_WB7Cne$Ք#}.'xj|^gӱi҉/BwĦcl:6 m:.tam:ql::Υkl::Τ,Oǀ8MYt,l:b6 1KB̧#l:ְ6'Cb&`l1vw]e&Qx}|%QMI#K+Rj.H#K눿i~?3Mkȟi~쫥?'Tא%_O$I$Id2"VZZT@D@p" 4(HLlY%$Nd-'FISꁩD@H" A$ ȩT@ ƤRI$N$N$N$N<ER #QM[oiUME!$&̄Ʉ $vN ~-fl~MאHt^kӱul|X}^~Q-,W*$r h4kې/KMΥw[gJ4W_Z驣7+Ŭz3K#T-F0B<_Ϳͤ)Cwivy>[V0Lܮ Um%M&P{L1J5RC5 'jԘ51yE푚XEz#6'h՚$n;ݍtM~=y{,εq%$EGG>n1C$1C1Cދ1C41C-_!M:𘡶Æ&A"RyD3 VyD+πjY<"\[}~ū *EU˳0nyFV.YY< #ga$yF0ȶs0<͗grdᛌ2r?-wO$i~Z->?_ůǯoj :::#`/ s`" s`" s`" D@* ;IDD@p" Q8(HN$ 'ROz;z;z;c^ǘ1E|yc^ǘq毘Wc VaA0z-|9?2bGƸ#M&7vijgpol.XnN, 'iۅ ‰vX6p<΄#3L88<΄#3.iH>կa4n;nK%cM=8f8)΄c3w܀ۅ_InN|eQՄ#pDUN|]85cvħۅ#6HM8`Kg‘Ǚpq&y 7<|9|k*n?W]Z=$Vgxf,М4=U'YfʬқK4xxUZlLj݁i c`݀݁iZ`w`aA0 yX<,F#q H\`$A0 k5F<,F# Â`a10[Â`aA0 k6ػfZ|}V&gOXɪi&^s)cݕ^%^Tdyt~ '~_9~=~'_wOk/OU?oi~ȟX%X$I S ‰E@p" A$:V" D@*Y=uyV{3M(^\SQ,8ud\?fp<(/q<(oxQHc2'?> S,i 53Ay&HV5ɲ Y<$ g$!H} $IBL$IBL$IBL$9r8_$XNj{RT/nu;$V[9ߪ䦧;Hr,/ՃnN}:F|Ļۧ#tb>x4ttڲt2 y]J=_/Ovee⢭ۗɉ+XUr{";H9z)zbiz Xu򂭷 })#eVQizbߟ_>˻\$=d&Vgawu;wG/v1[.b;t_V/@5fZ|fMvS{M^}KY-̦+-o;t8jb_ڻ|!·nZ#k|)ZFvyt`rb>Φ: >BOPo zsi_7BYNLf΋M_[\eEboCkZm*kT]6qi8jGGoD{o˵֪{A{u~-'oo[WĬ( Xӑ'jeZ\ `3U9Ĺ5H.˺Vl7[^CnGBΓ+ ~v*Ld0a8[ [>ܿkwߏ4}f[:i:thvE)A=X鉟mwXGHo)F^2ɨ;'^BA=\Xk$%RKc1rSXR*$=FK޷ixMlQԝ' %wV+Vm ??nǤN-9ۦϪizPrz5X5 4X%&b#kwxݴN8^{#z7oi:5pjGzNj_Po©`MA c"S ?/M\,uEщqӓWfAsS?);y3[߬SEGp)ʁjJ{jV䇍5qY_l? R45/Mf^ݾZ@o_jc=BcO7m|6jO+ 9m:4M CG[51G0O.Valpz,jA*nxveTtd졙z=8&/Ņ'.K4W ~]:Nݟi 4]޸_k</f-ƊiY$7֙;4fBcvهvamEDO,5$nJTGM|!/&WM&>h M'x~l? _^tBƾZ\?L^mf'.{om!vĕppb$nNoLp/_VS;ߘW}#ԋO\o?5BJk@ӁKmA) ]3'5|–%t~Z͖"VxeUQFoa-\UE&~C2QˉOĽԑȩJ|'.W{ 8.YcpLUv j۝ˑ۝3BJ݉|ΦϪC$ XN}:"MǀuN0v;ߎnnϒ_^祺t|tK677;ȧ^ca>o7O;ȧ>a> a>q%a>|s#t$:RcіǢ-%%O}|K)|Y4(X%בG/eі$>V)|c&1x꒒A k4>ּI|yXțܗM+)|RZ$z_7g1i|>>LHA ߔ$>$>$>*.I|$.I|D>6*)|KH\$1oJwޗ,ڒ)|K=Z-6g:{%OS }]/EO]w ]wHt%AO>Y=u!=ukCzjuCz5Rjd)z=bn17ErKK=u/CzTRXkHcZ#EFk _Ɉ)zD=FQ#EG*E U=*T z9=)z5RXkHcZ#El9El9A [N#sS4I*AU=bn+=Vj)zd, zK17E|=2=bn^MMѣJGƒGƒG%E%E%Al)z=bnz{ z|YusK#7E=ֹ zNwK8K$==Vj)zR)z=Vj z@K#cIK7ȥQ[NEג--'qK#8Gǽ)z&RH#cIѣGƒG}/A$jQ%H#sS z5#7A2#4>jTI|Xo$xș(T%H#mN9Ɨi|I|}I|HHRxa-z_y_y_y_y_$>$>>NHcՑǪ#////6*(X%yI|D$>"o ;mi|D$>H\H\mfsTTA&TAFq y$ u*J.M,H-+UX(XSũTAVu<*[bq 8UX*4 Sf;TATA"I Gیy0Uso% TAbq TATAbq ;Md3O$DD)$Q6*(Nd$YL $MdԩTATA* |*H,Nd],Ț$UTASY &IdM*Ț$Q/Y$@'L&dULȲ$uI2! o׫rFԂJ~uy鋁|wSKmg9M)Xɇ!#P 2ק@KH/L&$"'uk{ 5}N ]NXgdBI2!$pLH8I%^NH8I&d 'ǻ #]ʟL@KS2!IM"a#25r*a9:N\JX1$5G3V'ɄdBJɄDdBRTœk2!9JX2 O!%dL>r*!̅Ʉ̅ɄɄɄTj ;I&ؕLHjJ8%N&$N&$N&$N%lɄ dBr2!kdB$RfH&pٯfXV trfaa2 + 17C [.05Sl { )Ɇ6`H\N7 _N1L7$- { "coH0ٰ#?L53r!c9ݐr!aUtCr!utC }%RsH7bk|n}!1%հ1L6,X/' 9 ̇'7`k:%ݐuJ!1%ݐnȹdCj`:%ݐ:v!a!a!MaK\N7d>L7d>L7dnHLI7dlS )̇̇!dCzCj E15$.2&rf)ݐg0l3ۤ^N7$.'RN63 )醌dCC Ɇq9ِCaG?Lߦ#Gofjdv {dE^t*feqE+Ў4\Xp{pZP+rrr97j0, r ݁DӉǟ;@Gjұ;Vۯ^Xte5Gt:Һ].rUoGev7E)3lK툳oGۑvYߎ5(|ǘ5튬mF_\~4W\vU)^tn>o*slĝ묑oAk}v ]dAmx4/r187xH^-/fN 1C? bmaMu}E]T޾zIѠkwXV pL|cgVb:`ɫL Y^MD2mXHs:J<wj6? 8]BVS5d6ZfMݣS?hwhz(h¦z`~jzZSZ@4C;tE?%M8/Wxj?B8eGZCnWN-Fg{'NF`nv|u!5vYΊM1V8qӁ2[]..ƚ6ڊ,L<:z ʴ^5t+yi%B&bb J݋i ],ζ9V-Wzż)rW_Η.qnN+giҩUV@X[d1a;ǚ0f |R#/r0PoӓVS%/Vzɏ [zO>7c\(&^".o:8zKyʯr66xpLABMK?t&ʼQSZO~^>V|82+70dh#jR,/Ď= #SE(ddLQ29EL ;2J=yYL;2"}Zg#g>rӁɧqv|=;?v{v녲rmKN.!#'/]˻ 1tbj>Q¦#Ltrnto|mq6N_;KʪV7b5rp>pL^V]b{ ͖\ LNHAx5ddZ .bYMξ%2캨4=A32_M^mf'|\=֩In/CMir4Z̳f*~6sİa>M^{og3h_)66M&bK[ٿDYp)MsZ{43yQs]. cԇRގdb|R c^.ʳYdŬzGV"+  l5 bhHL 휱bɾS;[&)hѬkX"a}*Q9c g[6^ְ`ɵ}S7'(׆rS*0}֥BWseJ1:0rh~:;Zݻ ?蝘kXӥՠ{r1;قk3؁{]~}01`3V+$F 5=97S_ݍ(j/vUII*I]$j$$)$f,fhX4KeJ"̀DI 7i߿'PK\3H5xl/_rels/workbook.xml.rels (N0 _%& -Ӳ]p!qjmlƁGƁUOfw'* vSvw춛=N: HxR0לpTL\HΥM=u\ tˀ%.B ΍9/`ґ SY?O?1k سUo}'[!;nW-0ov/R;ҵݣucj|W! PK\3HsO xl/styles.xml (Wn0~@(jZjf1[ X,/H!Hs CED9b{<,~?UR}brSm\b@r Ի j @0)5.k@!fVdQYM>2; XkvI^^@.CRΎ73p1'\x"+" A7R[ k 8$FW~\{0hO LȻ u& 8ER&`ɼfv]t-}JkE6-RiGJ,w5\JN`qw3֗"lArԭyŶ9!|R!KN#9 1K 4'h7OYM]J<k`P%Wr5ZQ.ˣ@0 FCE`LzYQNW%XL`Dv N&xKL=)b[Hʵκ^nhYIPK-\3H@&xl/workbook.xmlPK- \3H8r(( _rels/.relsPK-\3HuYHzxl/worksheets/sheet.xmlPK-\3H5\xl/_rels/workbook.xml.relsPK-\3HsO ]xl/styles.xmlPK-\3HmW`[Content_Types].xmlPKaSpreadsheet-ParseXLSX-0.35/t/data/bug-5.xlsx0000644000175000017500000003276714576335353017473 0ustar michamichaPK!A7r[Content_Types].xml (n0EUb袪*>-L<$my IxB<M؞{u<ֵMVx~ k\|O?g )r` W;EE^ĢZa8X+Xʠ*A>zOQJ`5ǒv]ʅ B+ M˚3  jh'@PȓAw2lae>p3f|]h4$cS՜]q1~]5e2n]}ol _A|@[he6iȕ'ħڗ|pK].[N A$&9uDn;E>6PK!U0#L _rels/.rels (N0 HCnHLH!T$$@Jc?[iTb/Nú(A3b{jxVb"giaWl_xb#b4O r0Qahѓeܔ=P-<4Mox/}bN@;vCf ۨBI"c&\O8q"KH<ߊs@.h<⧄MdaT_PK!>xl/_rels/workbook.xml.rels (J0nӮ""Ej}Lm2㟾ۅef2k&WP%&w ޚ[= &$W4KH"xR㣔dNҨ9ɨAw(7ey/O ނhm| }Dg"$4FY.2#59鳔Y]bd @%s"ݚ0tB)[ȓPK!xl/workbook.xml]O0M!JJ F.I]XC?8 xU9MJONШR:3\]BW{Jg3i4$ }L&c% PL +yvJqń'a\dlO yt4B䈰\0s%%9…!JS{(BbiM.-ᐳ+1xǣ:^%9nJhNJ*e,a&Љ9ϒĊ+W*wl;$h۷C*BքV5$q&f.>x&5yEu!i>jݔG ˫/ą֛UށXsnƵn`1p`{\o~S wbԖ=֗O@1]ٞ ݣ2p߄Pe\5~ۛC2VN{OpLp n?~_j}= 3A$wsJy$W'_PK!;m2KB#xl/worksheets/_rels/sheet1.xml.rels0ECx{օ CS7"Ubۗ{ep6<f,Ժch{-A8 -Iy0Ьjm_/N,}W:=RY}H9EbAwk}m PK!bmxl/theme/theme1.xmlYOo6w tom'uرMniXS@I}úa0l+t&[HJKՇD"|#uڃC"$q۫]z>8h{wK cxLޜH]ś*$A>J%aACMʈJ&M;4Be tY>c~4$ &^ L1bma]ut(gZ[Wvr2u{`M,EF,2nQ%[NJeD >֗f}{7vtd%|JYw2Oڡ~J=L8-o|(<4 ժX}.@'d}.Fbo\C\ҼMT0 zSώt--g.—~?~xY'y92h!ы/ɋ>%mGEFD[t3q%'#qSgv 9feqwW@(^wdbh a8g.J pC*Xx8rbV`|XƻcǵYU3 Jݐ8b3+(QuK>QELKM2#'vi~ vlwu8+zHHJ:) ~L\E\O*t@G1lm~C*uG.R(:-ys^Di7QR8,b?SQ*q7C;+}ݧ;4pDZ_^'܉M01UJS#]flmʒgD^< dB[_WE)*k;ZxO(c5g4 h܇A:I~KBxԙ \ YWQB@^4@.hKik<ʞ6b+jΎ9#U`δuM֯DAaVB[͈f-WY؜j0[:X ~;Qㅋt >z/fʒ"Z x Zp;+e{/eP;,.&'Qk5q&pT(KLb} Sd›L17 jpaS! 35'+ZzQ TIIvt]K&⫢ #v5-|#4b3q:TA1pa*~9mm34銗bg1KB[Y&[)H V*Q Ua?SE'p>vX`3qBU( 8W0 Aw 9Kä5$ PeD)jeI2b!aC]zoPnIZ diͩdks|l2Rn6 Mf\ļ=XvYEEĢͪgY [A+M[XK52`%p7!?ڊ&aQ}6HH;8`ҤiI[-۬/0,>eE;ck;ٓ) C cc?f}p|61%M0*<ҭPK!+Y+ xl/styles.xmlZo6}(uQZptT4i7M!q{$$m_=w;~(1 Ǧ ]p>6{M#fN9hlnPl(f1X\0ZV.PmD!(p /#x1' tVД$pղ`0<e;4i@]=MyA}݈gm`gQ.*X 8MF*,6\ m 'Tz⧋_?aZ)vݩ/3p砐&4Vȧa J>[8忁6@E(n<;f:Bt'@r!S`]>aIӒ aկۗK zhy }iXܑVY4Udf;T! ;XEhz"qLLDɘ\kp #y~,!CPYȖ|o]z1%yh~۾04-Lh)puU=x%!rF#sZr@953Z %QƠMFv4t6Ul eWskh&D8"k h9H:MhRd*I$8h85ת $q@r!AZ _` #VilU&ܡz]aݟhRlX%.#Q)$ampN͏/nTΐh\}mﱕ#:8u;yy.{T {3U o!S1~"J\Vjl l.j=/ *qpM6T\x:dX+d~,Yuy}5BHSF d8$!(*`JNP+i9Yi-ɜ2=AC'J>:jM))/^&m(֗h=I[5:u܉A.CeR#hR\urQޝcl~T$ zm 2Hp"O)@.BblIή y>ŲK~E{%^yϥnIט EkB?k%1f}.=iVLquNp=Ίc3{EtV"y?S&X3oE:V࿱ۺ\zekpys׺Mnpl:#DE3+BڽaL4JM?dscSH`C4BXv/PK!OQWxl/worksheets/sheet1.xml[wH;Br0yv'4,̧_rJ6M3yUR_mj|ɷ靴i[>=\5gal]-Wi^\Omif p^.~N1Pylۀdl c W]yz}ySilżSs̿}cJl٬?.U>U_kAYU>m61T ijl_~G ̇+_ar\!(J Wrg/Q|x퓳dM%P5fNzIϾ?.W 6xY_xlUË(K?m?ɏ;9Zn:~VWPX I2V sNl %FsA)*v%k9s#}]pdT!:5 5 Y ~B2 t [Af9"i۶P=b>:]E @ԟԟU돈%)mln r+L9'vC?>2v2"^|F4Fh"Y@d5D ҐTA 2.z~'Mv>QM'vRSot4<7"OyD Ґ#f)YY*;LdΉ-DOl8EBج?s42}Gh  %D4<"S gHJ~軆܌7Ոoѹ/̴QiΉxG {?y 酠#qk'"GEV@o">B@Ȕ|"HJUhFL9'cw[G} HFZγ1>|FF_[SN4V|! +42$%Kh4 5@4J2րz~[By>he[EN|F4DB@GkD@``_O2vёU9e^jꂁ-t.x$3>M<).zLeqo}>p7dpЋԔƨ.t,x$3 >[&trbE=aʂo:*),^vFdpЋԔƨ) ) 5Ɍh,,䂗=oBO)'vYscRXV+i㣒m> }BƄL t7ʉrb'JzIA|lWf '#+Sh1 ȊPHUBb"Hʉ,u3rׇm$\UH\!6}L1@PKϕzm\az /pOτEȤaD'.pL(((bib$Neaǘ0$s6|"#+Wh2CDK t"Hʉ+u»a kIy2&d) }1J|,B& )'vԭ@-J}R'){v #"S/DB"BV0(+!+*7ةRs)q7C(xf+%јFcDDFFFWBD5$%R)Q[cS/bBӁ13x H(H$H,H"DHeQ~Y4{U AR"emza\pn$1 ITv{WHLѻpI$lbA"!=!Ӯ\w   !׋_ramMc",˂DĂ$D*BvD?ҲW"Cv;[sI(H$H,HB"Wu~DPDĂ$DdWu~DXȂDĂ$D*B~UGPDĂ$D*B~UGPDĂ$D*B~UG,ITݏ퇡ITl_^zgGDĜ _ǵ<-)c/?,_n7o.!| ~*o?Ûxl}WӃ]nA`[7|Iq7zx >=n{VY'e][?bD*(!*\x8hH Zevp8pЩ \.UU|ަxH[u]zH1lW{ *Q~8hhq&hotJ6(&pը*+l|5V=glpmy=W_Yy Tg=?:O=#6uuڝ~ꞩo6VVUUs9oXmR~aEw/jMp9+XªbA1Z#[-Z)!0^r8^8^c YgOx>X;XZTBg{. PK!R")a}docProps/core.xml (KO1&S6BA#>&mv]lϹ_ϹihҚ#0{m:L-x/./rQ1a8[ %xI3Q"40QYyG7'K>Nk!p'50DGJqDV+h0ڢi@8uU촏{ʖb'_Κ1?%IS5)M+ȥ`SPJs P+rrwY n[<Ƿ%ߦVSm Hò] C\S%i'Rv3wz.K;*;!EPK!LB'xl/printerSettings/printerSettings1.bin얱JA;NԂ A,"J I vg),|rѳ8D,v`wfٝ.f{6h+ҧ_)k)K12bxYxH,M 㬋5X͉V)[9o5XY*i²i O &̍z. <-AWMYh7s}cdjxPAd 2 ϯڎd1H^xr%d)RќHKR[Zʏ䏤ipξm;p)s7/ic 3zz>PK!docProps/app.xml (Sn1#ƗoJPuRJHZhfږ=]%|=ެ63y,/wMZ 8$ vۜo?r l=F~޾<2Y1 u ImBJԆpei4^9Ԡ%qemŹ⼥׊Nwfa%F[/F]INc-S0WV5ԸLª:ǁAB[ Qɖ-jrE+6'D伅`RP>RP]x"E)1w\xkAvcti C5Ư #q(k}$ŧ;hـ[c" 'tWR 51}Or]A"Ā&=m;e%[ n/I>K6Iq\7PK-!A7r[Content_Types].xmlPK-!U0#L _rels/.relsPK-!>xl/_rels/workbook.xml.relsPK-! xl/workbook.xmlPK-!-Kyf xl/sharedStrings.xmlPK-!;m2KB#c xl/worksheets/_rels/sheet1.xml.relsPK-!bme xl/theme/theme1.xmlPK-!+Y+ *xl/styles.xmlPK-!OQWxl/worksheets/sheet1.xmlPK-!R")a}+docProps/core.xmlPK-!LB'N.xl/printerSettings/printerSettings1.binPK-!/docProps/app.xmlPK &2Spreadsheet-ParseXLSX-0.35/t/data/bug-57.xlsx0000644000175000017500000074545114576335353017563 0ustar michamichaPKEHFGp[Content_Types].xmlSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#WKN0E Ӫq!>C@,$V[T*Ԏ;oxU6GOҚ TVHӔyr׿d05XN!eQmdmsZ@uhz !N}TSh& wyt<;kQ5iOii|ЈNI ۯ !iXތcف89`gF-znH{;3{Ii~|LX^4(:NG1ݳ1S#oѶ? ;*P`2 zAPn)T>ɝiY.-wV/N8@:kb_{(W?Ȱ¯>7V~wsX&A/da_=I Fj}0󞕅* ]H;smY5K[wΜ|lHvoa!  zq$ ]F}K >!kIm!1̹V7[w+Ġn틔0jZ|l\uwvJvl*)-RaKn_ !+MԷ/N8 ~d E2_灟IQIt+ g\kjX 3%֌4EҬ)&X!HS"p{Z:./xΙ :Pf\Y F~ݞ* 7y6!i̐zXSj t aSnH:"ӝ!^q᭩X!P36CQaMᎶZעk m)u m[Pb³1 K9֖O2A3/*4V_挶6*[{{ݝjaww[Kmkk[j/<ڶjW1܍r&85[FL4ƕGE۫f&zq 1frxvB, 5 Yq~3!B+[jN+*T.8ɡܾ6gNB2 ][w>('h@JRfJFdV֗FPx4 XJiD:jrN`b?wo_֖Qf젾l!)L?#YJ:a|\fqt`&2m60diRrt4Ò}}aL91f6:yq~2 s~loeA)CJBドE@.)iȺ_1zNMyyGH {+KU1GlF!>(zU^;o8/œ|ǤI]7(r^'a(! $!;E|\Ƅ3@ tql/8Ѹ3lwU 4p'qҳ#^ЉPNv~j{:3=h@@ qZ`sul]/v9.,FQ \` n"bеF,/V?p@hD2 U'nB۫rS(GED`Blaj1 2>aAlw#}mJ%%9ufzW,xRB/wOM~41 d&;@i <8Z: NRgTF7ls }[@6Y@_7C9,~3G3Vy؜ngissy ~ތx.78ϣ!ԣυy5z5rPgC R\ ap ߔjoŸi9ƾ~/0o"Pn,v+aIAGOi1=&J?8͔w_cgRSTb|N(:Ƣ_瘎vfjXGh\a$(Q~?=yOhǑ~'#Ǜ K2 IA%Fau=!nҝGZgE9-WѷރrI.Frw5d5OJW?=cMlgHX8g;cCX8 arH/LoxMRb Sz˼|켑MLn݃&3K<+ 4(,c-d7-K^!P,?^l,Н"8^ >ElmE 1R!V#۟h{_oi`!!L0N--,Хeك dCѦIKc zcE"eoTg?b93:N)/g?CHzk. ͠{:Qڦoc~cXゑ9Y=&Al!uA]cPXle8 g2=$c=fD"?&Wk0c @ϧ&MƘ+"f8=&C*0ET9\xptQ=¼bbÉ:-EݥA:#X^δbX,jX,,nV Is.; RtUec7V"Ӄ(L'ѐ #Y H%tv44n~ 9FK?q_\BVԱ]>+fpfz Ke-HIOvH߀' fPKJL: U"C1p!c87(.t.`9M;[f6l:tmql5͛1XafNlE ѱ ;M ;vΥe`i?FaMu Su L`. jf GXPax ?j>㧂Bw\x}xc ֣*.(*jt|9#"rPu@ʢ$H]$:@P!- ϡ`;z= wV;uXX0I;h#ql'L NCXmD2`Ⱥa0ѵ:>|Al`uk0Oc/+Mf5>1{sv<;J- \lWZ):c~Kw>_&FZ5t 2sQ[j[-g[&(0$2;;5V:vwoo:N.8Ѡ.,Bj+yu'c[w1wVL充qf=RKt<}' K(Q&2IM$gR7|f{uoڐ+" ܑB@FQf)qgAH"scXClUNw/sc*#r*]4-H'32DNzaٌC"LM ((NLDFvw Qw $abC|KbkRV+M}LX?YQrJi:ԇnbFFV0pZdC ,jaUoԧ" Pd9Lj*PS8? ?4Ҡ!At |;2Car%X fNRN+i9 lXTб"e ufН8?߁ؖ]M7uׅIMshUPj0@\s:9:(0+PtH%,zV+%vt1Yc[M zw s֖u-Q>'q pn2PrH_˥$|KuH<4= կpo{1 l/DL/4H-BEnŠ冘u5&Bǹ*W9|rת:ɥvpNu]l: M3v)#*q(4la{ȥbVUHRA: ZdT;4Cfz ?ƢQedH.x"Jܭ !$)X&[,aVH'8<Br{@:=:]\ vf|p߲] F,)R,"qRl߬;MQ:WZE!*Vi%v)?.ٰ$d<5柀fq\v 0TQj\*Uj>̒jL9XyLjXfU0xmg \qK$x4EYw/C"nmm^BË ϝ~%5Ap .XH)"-six8%/P aqB/FғZJd7y):yϾ44S<iAΠ1hj"́> yM͝%VP/ dbJ$ef dU/AWQ*79Va+ͭ&zG^wc6qء2CePEk4Ʀ^auHUo*ˀ=!Dь3d:JcEYWv#}A6KU nKKj6,Z#Nj֍[r|dz.x*uPK`6c"H\ 8pFV CIǽV n٭|uL3Шif)ǭ_;% Rq\pjXS"=]SqA5A6p:Lp12@˫l Cbm_v. 焔R0uB1llZ@Ppl*qt|<]&KJVCRehW?k>ɽU)t~Qźp'S Ƽ*O11Vu%f Z?i-G)=ii91o[i6X4'&;~2 ۓVd0d<ߝƝ6V;|fYuYǙ&gLn2N b&8I= {%V*x e3jeIh |nM֝ZRғ~—Wk#7QDd^24TnBZSrfjٓ!~5yDV{+8E!?'?:]%sL6 iy.׽MM=rkv|]:kou;#'Fݹalv Bv1<;|$IyC@[:b!.%hMvj"(iVbc >EZ~EW555lOISbkO1O$8:BIw? 2d|N~ 3CҖξDL,WJ ĉc \In:MЂSD ~TNqP/+B,2CWu-.;% Uag=#ǐ3̠WLác 1Vt Kr +9 v)E"ebCGc@QJkiѲ,Ѱx9lR+dkQ+vֺ";/6+ZZv ]"vlnoAgf0p k[.%r.1y?˚L%|p=i0}WOTY_{()|GȽ`|:!E?P4^E(-:e%H!RGG"&53{{8᠅Oyë#}#O>`9u.#ct;rNφX&G~"k!ڪc(Ә 2&dPX]W/c%=|A?N#=ϙnD& ]vE'SM{{AֿȞdskzwf2N$:4 }ݽm|2hL]K 27rs[%SŝySrb^3;=c1#aBoC`1j_`m+䐾0=N"m D%ɕe⒐aN.;+~lB:uVfCA9ғ=>Gm4|w'췐ȆF\`Ї4Ü,_7D$3.!;fl'P8RFim,؎ iH=K+h}w')V́y7%l^,Cۖ"uP/+Y{W+}eeD#R'ꭁ!QBwKql%,;tmJX"Ng*bgϑ",Gѳ9CoPUtBΰPb@9s8 JqґLgplgàX? rvHp|h10aYa b4x e=e9ըەQO~|p{kGvM|yƅz6ÅFR;I4͕~w{r"ORx\vo;-|a/ZOTa'B˪B^t֏hz/ġ+b5_P4YL]4ĴBƈJʀITSm,n8{38 L|74@ʱѫ!wpϓ[' % bEJsq*rXq%\CF8omuC`d1SSL >Nߍ#&|ߌA cLEN1$#z2pƠ$r4+"3G9I^E[Lqhw #* :!˕M-xGVÌQ S,X #/9dP!ee`80(1b"IP?<^SsM{Dfᔍq !Mg'LMǯLf, fhB lp! _{t]&炆Hc`mA}̓>v]ӻqV3tK*hp_#P4T w|lÏRgws!`C !3mU@י!;)5i_X7l?org)Jl'6l viva#g :My%ruP#ϒTPfyu A<8+"OJZtɒB+CTBu*NstP'E+.cZ՟:"G,F5^)hoLݽ[U4:shy5 ҒnÜp@EOc 4;lu,Y P#<}!6eq!1w ΃~ Eq"3(«?e y0VmbV <4JuS83yr$Hwi}(ƒ,^HF(|Phs NtShA-35fi2kva-Ndt06vv޽1aWX#]4Ǐ¶ZpML($ 2!4~@#tP4ĩ з l" tM`]d@F@ XPV:ؠ<1'VBA:Af Y 6xB b߫3o;X  mĒW܇º!J*dl|#n-c)1VhE""G$늘 i P_|ULd]AbkHxHhf(VU@Q@R!.fƕmШbIUhDÑ"po8V,rBEqcl0 $-[ a5 6h5{5@{.,1ѯ8b{.2D">OC/;*DH@Pb *?@ hv"2 <˱̶Twb#UhJ{0{wW0cy)} L!N [9IzJ!fwB! -y* =F8٪8bNZPN;xFVIri#,JnخvbgZ6d>+Gt=^ >95|-~ yFP*F͞S5UE(dB&dS 7=īHnP3<ax#S F`$v"! W#KzUɣ^j/"WrѐnqSdWRNw5&-ˆ?ƈzP>cWoiY(nq< wuNn& | ~,t_n8x? Fj?Ԁ@# ykt|Ùv:Pv.К;jeJ9~ Q>ch߃+[{ڻew7wkDNinjX m "ӘL q9$Z Ϭh? $^|=Ɣ5V;DwF- .[>G,_lQ681y#T)!ֹ>1wz;7z`pds@#ZM̜;m7>1O(xƨѴA?n&,oYrbH88eq:V;YĐƥ56oOcƇ >ξ8]Nioluv Vg~cԒ\J/2NJΆA;#k>GУWI&_KR׏2 2D:ٸ*jGP!=(=DtvujXo˼߳n*=l}9H{yl|+vKBW^E.*կW\j֜+ЊL5g.]1 Bh | G'y8{@ |TޞGK|jvo`/HaoaG{/!?KEr*RT$?,?zg{%??5w#n:nX>%O{fb.lbmB,O-c~aѶQT>FJ1U[\kŅVmS1U04;sAXmn4[Mce;~,Oznov@@ BJ'e6,LDy_|g v| i찇/s+k4{;8`r@Ыil;7[k΂ջ ywp%;D]òL yj<n"{o_ /Lײ%;ga^qj}xY]6P Y=16:kƦѼ#Y@{cn.zV?TkJt'<˞J]tOwB%FYALiɠ:Mtl Mp rCwvt7Ӿ˂ A ? # Q7 }}]:;weu5<#(e&CAU@cZ(-2ZzeLYHU(/PWǕɽ:1_~JgT& !CԐlf!ύ%!*'mX?fu=3(0?38d]Pa 5 f"1yl-܅  l ?EGM)`q9V-G'NNJNҚ#&{kO Z9g#MIv"#u3ZVǸ%pZP#i)F xSZ%q'oѹA}nmucչ$o}Hp58B\_9;ŭwIq%D>{E:;t2dlAM~.v:,% Pbߌ*/QD\`A)*/"nj%m=W#mtpW֦QFĕ [L >| oRj2ke\H/L*&SFp94NYZ o|ºh3}Zu,l#NA Y~tePc#=|KZP>Ƞ0[o\gw}m/.W`oz=_ " 4B>d)uq0ig0v~N cqoDbT^GyeDëܥjD ' yᱍΑ)Q}ow~RޓDpi½GѷW3W1ZԊKD3˓TRH)/8l+Cz8Feҍ8Sp$olN|8zY͚mg#6߲8 }b-+F&&2q,iq8u|G#Kr|ⷚ7#mVH+[u0V@DdiUطMF۪ot;jDoi1*lKk mnQ+jSVC@ Y}B XJ@*ľ,{{D64FXNY2O] ˓6ϠT }1u¼!{ CP@w3f$]mն":*EZQqO+GMy}Ұ@;$MoI+@¶ '?$752#2FߓvFO E H_g?QCH;2,(OF8 zj"_y,;,WGiRvtq)_>IER}.=FK#Sz"]J%Z,Y;sk3$U ٮ)ː$ڹUȎ$ z[7F`@ݖOyopRHxI3(rK#{l]8vϸ`֮w{}cMln5/3AU,R74-s^XcR^#*:),.K 5C<+9f;3joА?س1&1 _7Gp ť4H)"@&IOo 5=+ȇJިn gܓԈi!WX H~%o~ xcCZ44yLo/M=nLycUJmXuY2 D獅;nlG1.Iف@% %BN0{BS^2~w]޺a,o$lmono[,@>[2WiJ-&Q 0Sb(πf 3͈fI.~V#vO=>}:>]l",ěR6G/syX4mxXn cw~62_ӎQ5nC@[f{b}uǬs*ީ>Z# aHԐk 6B:uU!0o4IW]e,Qr\Q0"nG$0849^)XP6`* Q|ڜnBWtF ?2 $,5 i@S&`)?igʧn߅ 7o,l^,03B bbUw2Ko1y-`I94^Ʀ\fglZ_T'߁uy{;o-FUPsy!ǴWv F#Z"{mȾ!?>_\w _jwQO$^n= ^&YrFCX6!.F~nY!@l-c" @8rOeMREȵ>.ՒEf5 0m6L$WVw< Qs۽I"I&T3KUj5";^wR`ok]ej ǜ}Ρh] c3n^ p$2-t2y!c741u{ w+g6M^Ilz!㟧m.M~#yʚߒ[Tclkeh0c9)y7AcLxy Z2➣!68NoZX^h ϫrp6- Sz_xspf'C4ڽј8{;i'Ьg!T^[>9?\4_ݠ}lKN>f}]$璓 *:P9Z]޴gE 70mv@t96I*D5aqMMp/eo҄iN SE5v1y`=6\\GfDb\Q>0=! uø9 LnQF&YřPgыOch#*"hMn>ue0N}'PP]~(oPPf+Nq`'c6u(vK(}ePA7"6kI =uu0=k]L_j9)%E +Iٚ`pUIGʠ2UK= ؿ 5?V-3BL=Ils+89U?sc;V jX>n_1 Iy@0\P ߁")Bzh#H2F| o dd08N( ϥ $T0.ST[iTq}B s pWr@Z\׫P+']=  /AJq"q(4=R9eFɘ:k4eJwmk"Z4)-M=D_T"-vc9|O &ȇ-M< v`(Y2woW\fo ͽ)z˅^݇wc"At9Dg*Yg`oWg9sFh6/plG.KXD 55-%l'((o0¿7M8N~9k 9a,VWMT$*ٳ"Z Z#BH`9p_)9Z--J'Y@؄T dUneJ`}0P>`פuhU6|8s)yrCœ$ENJA]Z*8F wn]lʌ$0cz=DV2'/ޜ XǁvbUCĚV"D88` n2 [4m/n ^b z/{=wb"H j,_(c 75G !H,#dʹ S!"S@H-# 3-$fyr4ᑹ ND(ပ"%Wd,S.r7"L(o]bH3@e e9/q](NkВ2zt-CӶLtn]|>i!V16tOeY82S1hـ\γ^ҍ^R"KJ"]VŇz%ʝ ~dDFwgnO}_z;|{a > \mNfbAΌe\[7)Y;N=ޚW:ٵJ5+!ovz=?k|ȉ;n^϶nV?aKF:2elsl  "d솺 Y!M9g,+.SWAH?>0*9J(#%XBKo 0%,{ \ yEO9"l`Zk<d؝llM^Lga(w.1= ?'5훗0#ͦCi$H\DDHn E&qppukzҹ؂i/牁 f<; t-AlM;Al3Ē8٠t.n2|ڡF"K;O083 'ޗ"3Ni+[=c{cOM)r},kMË+|ƻi'SE8 ]3=7R4j9ndmyŠ^q/&Ky_0%h\#yKh`A.C&f}! '}d,woλD;~͘5;ZdCG8~QT=YL׻7٢؎}71[x:NTES!|J$m6#z:,hW ]qCmt,]dhζ]Xm,>"C `H4zμc~Su;ĉ9p(OZ0>D"fW]&89zKF== R%csޱ)B#s;i5K6!˝ֶ Vo{oXEaRUsnm3[_{jlۖP\BWF\#n}tUEttU%^[F4RvyF:_ÿ!IG[=d\>CUN߶ L*rBYɶNmUE0/!a[8 TCMbé^W[M8^aF,PurT y(/gp*'"P>D1=jd9)5}Ns3\ .yYfM"-f9,"+̱1},,U9$.q&pFtխm` gI4r!!n"@9RD}}{Cd%Pڤ@2*/#@2pu!}a:^8%a9dHLda jN 9 CbܕS = /d&t_o1[K| -qטBH }|ǘ7l#iZL9Zl= ]CnQSF\ҢiuL,]L|>NJhT; F&CAH{Td ԅ98ϜxpNqNX5I8.z!]l-_\0ڝVs{6QD,t:D@ɰSھY[Z^ tVĈQS2hb(0\O}iھmݐz2Cl.Mr;90q@"Tk?j'5P% I 3x5_?55xh+=J>Ao]gS$&C,y#>+/Gc${Z`:;ߒ)=8~J@X-טKGJy`嫴w):"> 5OP!4MPR Ǵقޚo.a"x$~(~&\)L,=(=1,h)3hDFLC&$=qi?rSnOC;vsI&"@N{"|8GPݤvWO'U8$:p>G'w>i9J鵻;=cgLKl _<1I;ds $|Ӈ˯sXv{C✟d;p$I/>4Gj,%=6 Oɨc֊vHB#/1 S+KB%/Ȳ&mSbKJ[zy079K#'BHOS4Qt8|ZC/cw/G=;&==IM/`YXd.xcvϫl~}Hu;% Ϫ㱊/#j 7TKq/Cx}\%voC/߈yud5[yaT/4Zh4'ړ披>#!H@r^5ef;G89Fhҷ~v}۹:Meq4h;ږ ʵ˵̋U"bJN$ꋛ y2/BJHYBRαPoɯT2Ȇ , 1nTũM4YVjDF#Q|n"ؔ<J6ϹlcInJ7W/5[9*̗2ȰBdU9ELFKA2 UZIvx؊SX&*u\j ԫ&(dIqdD)E *BIˉ%SZыQaurf z^*eUXҕBTSR1|n`5m@6j-Y.@JF<" 8 L.S !.!#k{~[0I7W ǿ}pa 5QdQ%ܒIPy46!+@H-0Z M֢lЧPmOR68 e.6FeB(:E2ƽJ8pt.~yBYY},a Y#ƫ&qU0ɞd)kQ}=3HcF#P^3K!k ZbYšɉ{Wez.duFYzic+97f|/o9C tղWD HgUd.Ab~dl@!iRÊm4QqEbUGRGC7cH }jX0eH; \Sln! =斣1Q7СX{ R̠`Sxl=2=&A搐!Ō9,hּ%`lJozFoϸhv+pqި4L#bk[Yh9kݳs2$H c Cr}*p{sT李NScap.^GSr3 2"݈S/8C4ꕝN%|-+ &/4xgEJ[4}&p[aF <2@ HC|HzCjSũcW8sWysQP|R`3FZY괯./-1-i&v=kێڣ|SrZM  ul`!vwdhه!ꄲFloQU"$8B\=1{Ƚͫ5VKY,5"qNLt=򕶉[@ l%Ӊ )gԽ`_rq%V檱rti;VY< n,W3665AeBdH嘪}mB]p`*o3÷v)kr6\ǎW{0;U_!}gEraR];cx k,xFZkv[2n.{s%8Y^)Q~ѭ`WUbaW= xوlr<2$'`V0lZ[^x4({x:Nbǣ.oUAyxjhE#tl C.h3kjٞ^. Z˶s}䥈^ Ì,|2q/-W[_nv,GţPGGs,v߻~SjQ耫,!-Xo'O8N; 佖Mȝt$xg{'P,s,s>zӲgA t-=K0{hTKʑR,5˒g2>޹H{UIhY&S(JJƴhtz9)a};;0SdK~XmaZmʑ]EbgenC>%d_7nk[s0IQEg/g[-GGm(i4!/nQ2[,? ؋lJ/ Z^˦Tq\RNE.\,p;@VFJ(0kc1uaФn37f+q +c 9$KR!Y v8h0XR157? {0"J;I& ć}y IJ IgׄEB-(9G+,#MU@tP ϳ0_o__m2 d1isfpNX=pc6ʹCBE &iAD"NUe"J2Vl\pRSpSV ܊SYQXr˘_Xl`t<$12I܊KƱ}lKDšhT[()ddSB\ :a97U2*OQ^3 pzKPm-Q1q)s|D%+TfI|sLBZ0'Ml#'` wB]lۨǜr5vWni?b i'B֚;|KvRԨ[NY.[kX"hL VHW|zL!-΋ArLs2sT} m@[)A1ڨU(1ז#]TN<.%icF~?cTCo ̝T6v 5psqo쳪ϟ*y,'[jjSzB)k;vLKhU4(PL[}%,cwWx)\uߎE}0&|_2d(Kۢe$i[幰n gC8) Xۏ[36{G+ƹi4oww*ے-B![ 2V0(+9GoYz3F}_"he)(]ՋE`VƎl'($%Buq'"b lz;ˤRPrdc*L4{zcimD?^,h/!_nTG1ifҗCn/U[b=R$OgTսJԵgzd‚&cE@Aհj§PrYaթ ^G8> LRVuN=_E=@mC!}.IUkBv DjgwYX"˸k\j_&b[S]=s7"_htTJ NEh5l,?j {9M*^m%K2!l8R>n cx%6 B<៵B"z_A&28kkk.{ִL{L{:n/n:>kg>g"TTNk.~GMvgƛep㙈H.9$Ա kZ 8~ZN"R=HOBХJ⇡jW-v+~bUљ!f\0̝YZ僿Z $`g} ܈f@>Xų:L^T[+Guz-wUz}XPSeq61x2UclLέ}'9"YC60K:(  Xu-o*agvE [ME_b]_ 593D߲5Jcֲ$N-ןUИ5≈9*|)z|A,x}mla|m^B*|u `JMgn81Y,N&Y{ К7Xb ^`g'[ '%_-<%*N CCYt$A5!F_%c0qЬ&IIZ(e6>PT0HPW2DtB}^Rd`AvU 7?CT4-6kP ^s2Qx~7ZrLJQd5ًXt5-:^A.X;k"B*\֠*|AuF܃ MNIWUqUD _FXDr2U%UkRJ)$K E9 /ңPAխ`#̗զ*)FRW+rO3`VT%K:dӭ,F54AarJG/MC:Ik&6 ʃ'ēiG % 2kG&َt;\OHUɢwYkՁsאjqU~9~~$|HmķTOJY/ ҆;ضlFIxQk=U54dQ4#% )YhH6BHF\&a)M͛8 = &cZ7H|_NKMxc8;Y˄u/DGGŜoKe $nuӶkdˋ?YDOD=Xt-~-[5ZǂVWÒߠv F逇^d=A@/;)Ɋ{ϿΈ6e&yuAM:΄XsgK⹯sH/^fib"zeL@ݹ <sQQP9M@=pcnAaG߄c/xT]>fqh 8zD& g NN[$>p0JHB~sUf[͹+ M]xsfKT7^R+ i߇ n7xo7W/5[TU& LۣOqbY|%E8sCI_3_U(=;(R]Ԇo!JJ{zSSP^Qְ-_$\|M\CvI.7K=![|[#OlNbP'CNJ8X IoGݹ~o05ߒ*br]yƞn pQ)Md7VlW:rWmQ@@2.c;Ȑ/7z޷"(c Jg7)bebebߣ#d*hsFE\^)EE:9dWJTEYrAB`b(Oғ.ma $'eʘ"͐,^2SPBȗPPf4v U9H|G{S$uM%" >Z4-FN4 >dK\5CO`rXCjiÆ֠H:7S'_gtC̒EEqߪ XQ0tˌ//hnC 'ز Q e.B`cU 0C ZE1RO/˧,S'r x4!b7ԅTzd?U`%L8V`ema~âՈ7Ch*wxqbx'YTzd/`/hx&:{w|ћł\_l lb g|CA;Nԯ%c&I\mT Qx9韉 .,W ]-.,(N^.XL/|-L&|ҝn f ##YFY*@ ,(s^o_t#2/ -M.8(ⱜ)cmiX:=rM ^J.c?]@I$ -"lW3$O=UtJqt [c9Dͼl&o>7R&<M%FlOY-7lҡ 69"C(q.`Rda,k*"10qgi}i6 }[J}_'L,d̕-Kƙqg9=z$6s8u [||[EzOJ i! u90uDi;h7B}n&ہKnXW([Mhm Y/S Φŷ p pNLd_-6q) YGS Š++#A::BI Rhߓ^ yo3ćU- 1lQئ$u j)ȟEL'q<\FlkXa|7ǎ_uKmS+oSu> 7 LyٹKhғJ{%-FfA3>P&~IN(4?&Q?oh7tΉ~ս~+.wG)\tk9Vh[ 'C)vx;׻׫ Q1S쒢TV/c& JK {rS F,WňAmݻc,o&w+Dc!KLMnKۊCK1f[zHǦ})Q;H6kid\"Z`iuEr$m,5-VwkWTM<)rwO&YB$wG'2ލs`gΨae[f _jO{s2$`+b>0:7#tMjp(&~FƁ0׶oHҡ'$;t^fj9v4R̛1EAbM3AR3aEP̓}lʱ -e~KQ>zrv)aѻĩtj>Eހf8tD[=@s&jcy]w7AO* c?oy(bG;ʜTWRJr984Y2B*Y؀ϩgxs񆳓e;^$I1w#H@ w{wqnba%C1HGMb~M~ķOҐ 4S.[sm~_11_Mt*_c*z2c+ ~J/?RGW!7DƜtFw.؈џF|hG/xafĔxboVVeW8X5o>ohy_p_ZRU3q%k\h!}}=bVvnLYgi\܌;N &u_6M f9,j T)Nn:jpFQa +[ SH27@8aXe~*3@Q4Oen`D.[_i;*$xM GOo/$LjE{]>+)YX7^~BL Lɛ)zvь;y+Ke|;Y}()~2,[l@ -?Lo2ki9WpD\7b@\ smMtxHZNAgPapʃ$q2S46iÆcNƗC+?4 -#<.LL9!pnWKJJD=Lzr/ ^FtO&8=vb[l'~4-#~n>M/:WqgπC 7Y{09f#t61yǹPxd'71r&"Nf:xVM0By[:8Cd {2Y~+Aj(ŕ(_E^r۝`zdD-myО^B9EC&WW+I `s[I%:'yҥ- OL:sbnb: {B]C2i!p1^&)4zN:?R{7 3!VŴc zՋ6 Ȏ16z>V8 d޲ccYNٵFAqmlz`w.df۰K䷘l)R\Xu6C~'('A}IH|=-b]gZta,+9ՙ)V.\Yf˱e?^RiT=f?6+;;5RεeJZռ&H+yǵhM#u2`Ws0<{r;qt'lnuq!s @`gb/*C#`\ ϗGpxAj5WKjhFU ,ZCl/M_NGĚ3,4=Eg+jbahwԡW&ErZcY@nH+ $͒~ʹbaDpo) IB{JR[#4:UӃZ=]y,=QdBc1 @|'@חK^G׿}{}mFRcNRWC f*d `݆[YFR5h&s4W>B>~B)9ux\;SKXZavhZk+|k!["Kؓ\h#]x{CK6PlavvvBL,!ٖP :iő:Yly,y2IۃWkg}4ZF&{ ȳSQC`z-lڐ6e8:b\('2{>bGuSmQ+={P/`q5x#=rRD o5w`fGDxFg^vQG¼hciq Ck0…ѝ%>PN8$l@1kDV u:0a!(+kX8 x|% CQDV$7C|'nw}kMUƎrsG{|(^ېmHI @3e)ۥ<u48FC[~ʹSz0F;~e|g@htFhNGGsi5Q ̈Mm&t42rYΨ-G彘k*Œ/r]G*,OEe{<(O9bVӮO|]Ow ^Ư{<;lh}$O>:7JP"~g\ל6 ^8ZCv@ 툓1FʄӒɽYu=넎J5K6&Є2ni_pn MH^Ύb& y.끣]dtٹͷgZ3&r!$ȇ T!tq֞&ia#0|.|D=Fk~ ?vqOf}f)CGhef)mD0\ǩ=!VXL&'ǂNt,1L8L,z J3{i@9ߩ \U o$S3{\i 󄽛p0UӶ\ύ 'y0kҘal?0Xh3Ա9n&[|v)3r縲w3wa3 5MLWmDsm^;w*9+EuDV:QPbs(]e)}jUQ1UUӲw// ^!@/thxQqJT:Q; Ū1jFZIqPJ<红࠼eCHj}HGZAh~i6/Xrgٔ,<059>: &:GQ\j6S=NN0F?,Wk7 7Q7IJ׫)7_7p ~2~u@cqYB=Y/ZRE_ɘ-}:^ד6^O![zu[W Gf8.2q5^ 21"'9!*b} `7۷~}WƦѼt~\i*`>YL{Aj>ERgN G]˄+Cَ/٣ސ']𐩬 6}RwJ]\ي%>ƘN+WܓkuYzRFKѿdhܥU&xKc;a; !Pi`̴hI'A#`G $}'^'ER8\*ǧItR&̄Ԓ@U$[`NRt*YjJ$(@ $#ΨȯAz* f1{׏1dYJiUk"c(hv`g(j#yJ7 !\&x4LpktX,3pt=2tc ]ˆXtc/`AS\LOϧ kc|*QJ:3?aL LJzt:+ka"-tLD eGa*a*F& B_KVgJ Xt U_B(Tm81~]8H_W2N)۶dUzs4>#214!Ɏ1Y >~S:e"cj#/`#Dn$SCUS0>qb)ROo*+lTf83P"L Ԃ@c[!~%N8wyiC-zqB~7-yJTlE< =yHxھ<$),r EhTFLCgHp"%MO 1]Q 'ىA}=2RdٹKx-⸀G0xա,tW̺m-rT"C;(JE4K =~TCcj޷l3G|D؃?0xI(ؤ8N xUVf,Jܔ0lFC(KW]ݝXw&Lbq3A{ vxLԬ̌: >!O&Ǐ`F٣*H+6jB(3Ù+1z)E?qgQJ6 \%Qr3X~$ gHB&er7WV*!͘g%FR>k0סAxm&xFۓ[@y0zH45m^ÐW-P9*n x̮Тt~\8WNx58EiO~s`4ߞZZ^7ǃ/Qgia|a?Z= ߵY>*lxn$f%VH, J h&\*Li"}[γO_Lʧfd pow]fXlx/QU$/q% LSV(5-uюW|.h.lg v2/Rg^ot9;R) jd9*H?cHFYPr8ӗl6gt3_A{DO눢Gٕ )8ۈհ_'/(#ɰHpNpnc؃hz8ޕotَ[.!A~t*':K,F2[j)"_?MCyӰ UiҍPڤ^{} y_oVMߠqt>g~k~jKaCSؖv;*|yL#?0 8l7bonвGyᰃxꇰs$w0:Wҭ:d`]\k&l2nGGq\|g-Y |[+6hJj:pG4'4 EM$Q~Tt :L} 6 }s5iq p#_ju+L[~=҄zhE B87zʮo>/~g5b,qRU*[Ȓ1E^IE)rO<)6NO&BXqv96wETX@q{qu\֡ `HxG ơ re|<>Oi8qnvA><' zhâo_0\lU+dˋLA3 $dt$.6i4SCcIx&<[: 2b҈qDQU/zYN 0tŠcI!oq4dLF|P7񾞿 !ޭ:ORCgCRFbdod2HT7EUF#)+$,`$=ҩ2df3ShSB@Qҝa "eK]:[#y֬JtO$jQZG1"VPX*ƹPL]2U΍ݮ{Mb߫ړuy/( r} i3Vـ+t?r>fI0Gџ9jD+ˏʏ8&I()!.:A) K&aTFpE_+* [_3-xRس9%x$.opCmpW$lDf4 (+e.06uSZՋqGR .5R i`WԲƗx,ixHuLP((HJNXx2+9? @˦ b-r S̰MgqXV80΋;Tiwл2]e" .h?7@F؉d %55AÕ<"3mfr8sw/a~&M2OLLzsXc?Aa| 8`H/$l#wɐb3u4& +̀SAn+[hGxD; R;lz|pPjhIx[YRp]A'v$g Clأ?GxK5 ya3ݰx!Ul  5+}HV;ɿևl 8ls۱աen XaV37;h.!T=qc*U+ab@  ?qt,(Kn!{i { i'-su6wq+Kxx<3%"0G~ȉ軦! j97]'y]Z+ưmVB9#`/b%'B$(A,Yi >Xogr}I]_È9u"XRR<ǚqC6-xvJИb-p~-_Ȋux'He>!i4X#UP"VA >o!U2g[ &iW% 篱O9%D w`^PcڋݥLAS9%?n#&mz2.9,B 솷iI\XAiF)ȯOc&V.׍{^*Vz7iiq7K0$p: (x$EYN _31AiGV!=*QH.T9}Oe9Mgz>H*3f$!S cafmntgleILNN>;q+ʀjSe;g=ni Զ&lJ-y9ޙNʴ pfo9\3Xl%pc<+8)0Ω2.vuNDs*EmV If`V&MЛAL$(Ф1 )U! .mMpH+)MCBT2JQhP@F e84Ч R©!aqa?wLʐһilV8:9o]ىJk^ e/C$ -hf}ޜ![Wx*G}Dn@w'f1%E{<\=F@Hf96} ۴N#vU25<,QpkQB9_!t4]QII Mrj.~MރKzU&'Rmb92yt,ajHg I(Y1REH4.Mh@Jxo#cuiYcFߕ␦4ƫ,}vhLŨS$GCMTU$W%5ACLZhq^:nr6R ky*eC b(GF[hhXQ 5k^5ۗȸ^QT kާF|UyD3~Bz.vC,#`G:.svY]m0Ϝav6v3:a)a:af#fJo}KztpflD6UK9b[WWs뽽ƕ=; ͅw:Q%{Bڵy̮(7Qռ?/t\`|TK!""(He4;J$@VBRl@B}ve&!u^F~*)MB71mWT* ]5A }Lo~xx d+0@p]<|7~% 5t>3\}oYVb VΜ=-.PX5:u]/SŢZBDws=mul)uȴ#cn[kƹvnarzqF eꅝ#bPX׳<63\sӤ`Gtx%^Dj|t)' lTV u_'F#jx$bizI uM#a:ᔞi$T G\^ OxѫL1jp/nC nscwiOGB4EzSqGFc?;4UžiiHwƁ@\2ppx%Jzfxhپٽ~k-Cd1r9AreyrL #M%!clW`1< g)vVq{?Z$:FC# 9Zr0'{{֍~[H9`섻~9C{̒XpNiQOhDc2z=zq7Cz{[&z0KH)ȼ)H'ŕNϳ4< yP0~(8w<KFTB_T$~ ˚.f6t *1yEpln\N~,~T7RT+T5Bˡ6kk1;*(XhyЯIѬc 頊&?1F?MÇi&N9&uI>׽m8X,T^e=\gR|ZX2%Fd\^ǗX *qVcvZ 0V@G;9eΠZZ&_.u)1pfr]I. 4s!eQZfmu׈xs <Lz{-@{efc[. 4Z.ih]4>Hhy$ȑ$9$'Q8;ߟh|6 w|H+㜷9hفrl tE4XNF7qzjBDrj<䯙EjjLy0C9Ǯ房N|BT QXh uijq#dؾO:ƹO?'pX|:+=ͽt?n3ɘ.r{[ȿSg?e jmȳ)ͺ\GU+XHZ)Y)5qMN\).PN]NOZ0%˷;U/LCMZքesBZքe ǥh062aE6R)Lmm t)FF ydu}ҪHK >i5&Ka|d }jIK Vi 10i/[m٘n)Ҧ\yPA9P$eO. MkShA9h:6n'0[+ Z@,S;"+@sɫڝz%9.ϙ+̆hCsmmGۮˈ,IedڶnP4nP 6y䥈KBiҨB 'HK& dK+RD;T7:wܺbC ξa,wNmy0y0֠mt'w77 ȹO5dɡb)ݽNp;=[4.E1mbuZ +]YI?|vѸݺ~hnonwkGkΨ6r'!/YvlŞ5t1аfV b.=LvlFTGưWJrCD\+G׺`3'rkEzA{i(\:b+uN:KƘ`] ';ջ.9 86V)!]Yc b7q3Jwdf1YU(NR/pNl,vXlmlvZҪqe1Z7ErpCq]WVF] GZO1٤3+TldR}%*P+,PRuA#7C;R)g|QtT0'$8ʌZ~]yCﯡ+M1,?S]nj9̂*+CBY;NPXWs{=j[f $%Șڻ'LAoL,iBَ ?|˯Ϳ?AY|_sfkFe\YXn6Ͷ VjwYfi]T_Yc=JF̆OzkYe'APN% &4h [fՌ %:ָ[Xe^(Ŕgy˜`F,U?&c˞ڐπo/ȷ/E/'Q|JdC_J?=wHvn~7e :EXB,wV <1SӃbvZK+tmgBzB)ރz>h=a@k op4ke>&V| 1+%`yaqʪtHZy)],HR&,x^} rY-woλXPb8 b : ͅ%/zs7{[qXH"X#|(.x:d{8S&p)0Lj_޼|B8J.-0ec}[,ɔe"Vn4)R0ܹ\ FA+S2W; ;E+ltY[m a6PRu[@&{μOܫ>rk~}q)>6 reɊ6,䐵sJ4V~wsX3%ac&{eõKPmo]˞E&m!j{}cT+Ѓ"&Kxްlb ud,[jXZU(&Wq*:x$ĊaЀPqtF^]cqo}Z%h$V]˪k;D ZMgnΪ> Efw!ov2L< +cb$nx+vpoV)<ĝ$J灪Y&S9lM!mKtHzάWG!Qȗ<9]k~APKG@)VL+#.^akĆZhXF͎Y8<ͥUZHkD %5C(Um{'&0Evbc`hQkضK46[[@V8RF|,ti8Ӿ1]"T[ Oν}kFICƈFՄ k}MMwth`Ĉma!&'եvj0_&8SdT:rgLhaðB"Pwe.8@}B2nlz(a!O|lt%y̯_2.o\^i1{}yee#ڇn6QFUYcş!x6F{mta"? 9jwDGs-,ox7'(]`j6VgC`6(?yTevo)oӆ}e..!_8Gp\7;1Cӌ:!YX;VX&3l7 n~|nzXPBUz!}m^uƦѼ߂D&ٙ=͉2}шTFz=X|`iY*H~OV vq#-}={Li^f{8g$ iy}i};U##" \/^i6mlD~ }x^b>|SPoA{=#zA2iYf.aIGfaa}NHU^\*I}(nĒmg9d(':Y.zjѧO 1瓿 3 FoK$= ga.@ZqHxjzbϮoc<-ļ`yyU#a/Hݸcnw=g@+b!!;E #Vd"$/),Tp_;7W٭ /S,1on.,Ag@#P']ac5]@'w^7A:;+A54q䄮HI1H=?o *t$!s"loWގKsWťvǸݽd8غ~XcnnWV*эrװrR/$)+H Uɤ% !lLeBaLH9~u% }E% N\tu&^T:W< = Zw5CQsxu3orBlP@& 9%L)̥%ds=!!7Ȳ9:z9Sx@]=9EtBضK6C g#HZdN`B n&#r`pmxQ ILƱAA8߰DOpbd40=HåWۋ,b5˜X# -L Lp.@Dd"K9="Hķɐ{/-PNx&4~AO8~2>N_0QqB40WA]`Y]F%;8x)lhd|ۛ[) $ LHaؐcWڊxuj%Gxū8NN9Rg5wiyaOz$8dByND'i=G($A^$GC{Šbe"70Vɔcg߃ney I2j&hDh̛`+^Ab,,uQB3=3ḅiTdF~ݰ,0~h]%(Bk px5A?:JPu).zڢj]~ !j!"|P|dh;c sv(3xiSMaCŠeJHFҵ61U`B64Z|k$ד`WJ4Aϫ T+si&,y4WVz Icδn,ʎSevV`s(wJYϒ?=2;lC@qj\%L=<²1r(n-@М E0i[XE4Vk gI! 0I^1qDDZp2CF%=2Nx0JU\$4sJr 8kRjAWYt&i(EkӏWPbM&Db >Ua^*>atf%k\E̠XS遰'F=ZΒ;FHgIMΐJ^3P{X郹B"č䝊].+@,?X+'ߝMhoEbd̝P=O#0 DbV(}Te)9s[`/X(.QhW_=POP?ih ${g(C|A"z}vi&6>F)b""D< Ӄ3/QO&\56ڣ5ЭF%ޫ}y=WpzxD>?d7׾4kZRГQ(;"mɘr jmmk5H'Cnϭ/>zsB1rS!Ȍ9cV> 2؅߻(BҫM[ yL7*F U!3?6tag0=" %;#-$v/d= )<1K"}x8}VHR06]0E_aՌHVL~D :E_&:P3+`u r2WHG,%v 1,j`Jns]T^DmԜWtU.!̟(Vr~_pB.fV.Ͷ6ڠ*TF\i"ooZ.z//>|v$:<'@j"6n3#1$EAjuYd5C]v/K%#eSc(g;͛^}}iVs+KkfNGRrPKEH<<$ pxl/styles.xmlSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#WYKn0]@ hOJ`'1P- -&JEv.E;tYEW(EJlNd$oBg޼ G$5d13C4 Pg~uFzWO1A Abqx0!iX ( S6AljQ-׶V1Ancc@DŽ{fCJ3ł@ϩ/*Eg^N~55ehܲҨ$d9D(Gи3 ;h7Jz1C#b咭*}%2a KWJ@Dm/02 YoRpˈ+/":ۮ՚ Sҭ0[m]!Lq"9d+$F:M#aȻW,q!ϣ>RY«}wcݿ V93[_o9Ywn7/CU(_U2z8nMR67d*=V$~@Ʌg~~}2I戔_(/$/t8c8Z0c{z3qx>kS|>y9KPKEH|waPpxl/workbook.xmlSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#WQN0'~҇{שhgo4@"hY0Z}PKEHYˏpxl/drawings/drawing1.xmlSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#WA 0m Ҵ C3f2ճH^@oSO7L qăzlqL^$6]JU>S ҏP sy0m#t>YKVFm6?4n~PKEH7#pxl/drawings/_rels/drawing1.xml.relsSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#WMA 0{[=H|vM&d<$`at3,Y(M e,rh!h^0UwJIMZ#iK5aNq׶{PKEH ΈT pxl/worksheets/sheet1.xmlSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#WͲ$;f"|3_I =(!`ʐg_{छ+>wABO?/o~?_??o?/?|?__~ON/?>Bcݟ~??k͟?O/oO߾o/oo~?oO˿o/oO?/OL>~>g??_ǿOۿ߾_¿}>eן>o?>no~_ӯ/wx|=?~~_~O?????%gן1ݺnǺo7O^f'̟ßa?jyO~fi0?j{7Qg?cn ?lwo/_7~|_w_?2?2~ӟ??=w1q'}T_>o鏿Ҕ D_Qi+"IK߻ROʍ}s2rH'_bozQ*f~-c]OUĚ%A^0oD߰\G_~5y`A~Dy}ʈ/`Ry%T}kUo5PZIG>E:uBnS~x^@ו}Z y>JuH=IIqGf53c>zoR{<*ߍk(2Q# Ԩz Ty*mUV*O=UTG}5UCꑆOWlO?oQIUة2Q湧̿t }\._CY:i@D$nS˝JI%~ e˘/DR4|R#:#p>3 E̫*(S浥+CꑆOjLS~d•깊Ө]ƦcQϭ[K=7'Q# Ԩ\=dznTMf=2؍QϽ{K=w'Q# Ԩ'nwN۾*VdSRI!Hà܍6-@fgPPOr9>5=!z%_2i=?]Ox2V][(RI!HèϤuLVOC:ƿQ['RI!H'55̀f̈2MAj5c4MBzaTfhҏbd-iQeXŪ/=hlF#j#GF&FF#iMXu={آFFHR4JMZFF?zXu={($U96BzaTH=e~V??ŒD~-*ڪXmddV%R# L3Ī Uh742=FS3 R# RR@gt'2URN%/c&if=Bzaj0U2Ce'% WxIzYmk!uH=0)5* W:P}~-9CzaRlKEjԨDY;/ί{zaQf׷%2C_8=6|)cwKEn>mɂ:iX];z2ӞE.*YnJ-sKZKڵ]%!uH=Ұ(/b%-SڟH* ]R# B;,\B.iisI2V]Hk3KBzۂ. MJE֫蒐:iX:/EJ!*>Je^%!uH=Ұ*/tŰ@WrIk۾$ݰUC/WtIHR4 z1,3TfrIk۾$.sKZK2KBzaU^dL.i.ˬ%Ug_*%ǯ̸/ GVVdLV2V^{D*EER# N*3m_UKZ{D*EաyVUHR4J:z7PIT8ae=jʌ CꑆUIA>eLjۗ2V[SJSEuFS!Hê[UZs:Xm{^[k{Tg|mCꑆU7<2DuWYWYJFuF!Hê{ [:7M0& CꑆMYoe꼑 ۤ:Xmo6۪DR4 }"}~ƀݦF)zt&uO6UHR4lrC}HXmRXS}ʰM +,4+G6e&CThRVTV\h^e{&ϓBBꑆMAA~&wWZ7HMJ+,4Z+G6e=U)CThV_Ņڪ=jj R# VzS䭶V2V]oIoFq!H&ŕ/!*4mUg&X 0k*+4nBOo deS=nin ΐ<7KHR4lR.OɥmծK4|R# K0];٥]nBXu{6ZrUhi!HîvM 0]дjo{mOjEwkw5e Mh;\j }]%J㘥ϯDR4 }"}VHmjggԡwFwF!uH=pȝQz~K(+m:^i%cZ [*r˥7L|Me%z[EݦF)z4ҡ5{:i8Fj2D?h^D]Wy/ңШ:i8F2D&ti$.tF:F!j$G`J QI#mIj =Ҫz`bkkSXsLޯyTãG4}U͵;Nby51CVM$"k WG~tKqc3[5;8t kN"_syHgk~g"6jsnu kN+5=jxHk6-ƞqتסSXsګa5u +Fmf%Wc4VVɻڠy&,{!bS),9 ABU]>m>MoiF {c 0q Q/(6wU]pY/L`X c8\}232VvWm<dpk^ X@1CVMa)XlWFmG226n%Გ/KN1Å5UsۏJ ݋X,֐׬櫬9kN1ÅC1vvkn{*ku|5kN1Åogݭ9:]ɳ?ҹ-gޒj-5'{FgݭneWlW:6CZjC[c 筰Q( vnvͼj.cs]͏[/Ϧ5?p5c 6}_Cel*K%-h|c _^Pn/cQus$;>Ğq t.Ѥ_vKՍ ul[]ЊL;ƞq㯿s *uyqk]Vs35g3OHaQR:f]**O?!9X^rVy=paC1vv;:stC<)vC{ӛUEGw()7Z1hmX3Eg36hryCpz] ]b3t&$|uPm.eRY.kwhkgI,/:[;ĞqqG&kw;~ÚXc>ҪZ$c8\ظYϐ1v1e<ʧUmV5׮&5Gm36~a Nݭy'.Vж}|hjjX {y+zC3v%V*ߎ[ey&P1ÅǷpVJm1OŐV:6Ujg|ؼh)V@36gm,u+]Y]V|i %1Å! _xU zGZI,o=QS: )RF~m +K~٬Z$c8Dl\?ԅЎ)Uri6Pӭzs6+60s6%G3/~ݯŧ__ cޜ:A@=Lby'd/?- /rk(m zi' Z g:cGOHQ' )ZPwt8:E/+vaʙ#D缐’\HjaUr|3%g3[%+SXK.uի2f]lH'~I,/9;?Ğq*£Sp8In-y@/fܱߡ]܏X ;ƞqXvBYy1tTn:A?= Lby'C Oy8оH8Cֽqu&^Vs`xqkjg.l@7{CP d]rorO>X^t{=paٯ>1cwkvoPX*.ޠLNby!Å/:򌹻E}}?:.L7]*o*O>X^vVy=Q>=fI)y?v}|y'H]\΂bz5c脱KZ($ub36. yK E7!V8v9Q;>=$Lby/C [l^hq6O%F-`y{b8\8cn/`?蕪7{ƱKZgˋg"6@H/^Wel2X%||z`Cso9{}PM{ul{?v Q ==/LbyY!Åkzr7dvF`}[=b8\8g9^^<Y!v=pafC^7߮^^҂ւYւc8\&+8M!wq+Xm+tQBĎg.l [^{N@J?nlNn&vc8Dl+)mlbjR>`l{LMwBĎg._Dgݼ(LpjMYêyI,9AĞqQszgj QI[w.!8i!*X"v=pagݭ9I=S_ƩN&6c8\ب9$y .S8iS"v=paC g7ɶxäUb~ϩ N C$ b8Dl’οI;$לb8\HX^rŽg"J N2f*-֩Vٵ%X }&{ƁۅեVעw< /Ďg.lly{rE]pI+cqU]ݖs_1xv5cOoV_1[EKKж3Ua3[?mK*HklŌ2QiX#%>׎n"v=kG]`kYNHI, b3.,]`*$K_׿g˫B1Åõ 3(oibJCVSjzWuh>Cc8Dl}TՖ^yױrzkjVrmq3%g3[%)Kj*Kc5[Ǻ;լ,w;ƞqت)uHQ'(wޘW+غXo QZaѭ@[cןVXZANZ^`ŬV5D5kUk,oŽg"Zց262u.[Vt+[cVCu [A|)cϤult' np_cy+v= ^V 2X4Ypt¡[a3[@FVhڍ==t+k,kĎg"6_yBZak:mSsU7봍dl9`ۆVqecVeNa+ M`TƮVRQrv&X*"CV+QƦVe _b^a뒍3,7c8Dl,u [ajji+XWغlm Ư6"CV+Ql㦵!(c ]qӶQ$&6"CFQʭriÃs܋OvН꯱;ƞqت),!rf\{16e%ta5c1OHa iF<[1nm:ak,Žg":V: GI8<;V[ff0NX c8Dlu8WNhշϸnŬNf X~@1CV'PN Y^P'܊YpԴ 4\;ƞqZj9G2UunŬN:i Z1 c8DlԔR)yh bV'ܒlY'lhX c8Dlue ;An铋o1tnŬN{{=3bg?]X=[U{{4 k, =Ğq"ަg/>c{x"jwQ uOD.whGcxc8\*;]~;;#Sأ1+07ˋN1' +0wt9C;54~SC{!bkB@ ^=vʎ- ul7]RRM:X ,{!bBjptȡg2սptICK5/}TC{!bYTCnBhÒMC.vhFjc8DluvNQ`Xuɻ١ =؞!v=Ur0:% N"?үV'Y?pV+tC3=Lby+>CVS X!P"lǧ+2u;W[,k]-wnŽg"6J+u [\Ck]_ ,]ΎfW~g":2pȋ :+>Xxi zuV`{!bR G 1utzv}U+Uc[w1CV+U#ʝv1tTzGZu2v= kqG ZACnk[<$CĞqjXQ!!]Jby"CViG(w#_/::KI,V= :lR_6E(c%RV0^)%gE3[%U`"mPƪ[x$;BĞqhS -zcv+}GaR[!b8Dla(^G㷖dNt$ub3[CNރIVVrv0<(g"ZV2ŭo&OJ񭡌N]pҎ%{!b:).^H~9[[AVrv0=(g"6ZBá1O0ұKNZ$w+BĞqXwBä R8vB99AI,6= 8l24|j32V{8uICN`s3[@k&s89̡UN˜$!b8DlֆM0~{LmPƪ[Nœ$CĞqhS MpR εN $CĞqjZ6VhS2V s::4I,kĎg"ZV20Y4ձas""$I,/9+BĞq*9,eKpnF(cs""SD$!b8Dl2% g!:6M.8kMX^rV=QroS\rcNY(2ŝдpf R(4 k,o= 8lz EukP\P\iBcNšLa'MPֶ e] JPV6c8Dl,e[wm;e]pp'+CĎg"JCõMX"\*JMVVc8Dlfefe۵k# !6Y"v= )CB.CjCH#OV6c8Dlu- g"m䉌ՎXMCy9D{!b`(S ފ43]daڋisHP66c8Dl,e[AE[L]5Xq264 ec1CV+Q^D}ؤ1NoDvBhܴhI(FĎg"6:&wڼE}uMExQD{!b:).>ΐmJQƪ[K)nZ)$"b3[@&?ʭy[۞C.iHP66c8Dlu-{=2V].uiuHP6Vc8DlMpnm0Xu'tMC9D{!bhLq'hsA(2V ]p|g"ZM3u! g(c]p&;ƞqjXŽmOd]p׊&;ƞq*9eK>|w bm+t)]+B"D{!b`u(S -+zw)]+B"D{!bhLq'a`wCe4 ]p&;ƞqjX g26[8YХwicVa:ܥ:r<(Kje]pF;ƞqZ46]nFkRN"⮍"MH("v= fl24tMPjfT5cQܵQ);EĎg"6:w6diWj 4V264 k,o6= fl2ܻTfXԣK(Z(|"b3[KFN8^D؀vHш\XGh>Ƭ;ƞqZ6ģC݌,X;KGPLM BIby+ DVE` {1tW.A8hAPX ,{!bhm$ +܊Y%0$%g3%':%߱JrI p$b8DlV{MoU?+նeGmaIZcVULa+-&pTJo}):FYeGmaI;M b8Dlu,e;eIL X+#eGmaI[ !b8Dle[rS w4eGmaI; !b8Dlt6)8M\rkKޥGaIK*g"JC7OC!Xa3eGmaI; !b8Dlu !-I 5V260$g"ZMpP?SX!4إGaI[!b8Dl-a(r !ڕB99'I,6= 0DZ')'ֱڗK.8j3OX l{!bhdGhTf *V SPP'I,Ďg":20I0ɭ 2V ]BqB&$X("CV'QP$}"Ln}ױw .8iPX {!b`(S ?eYIC.yS88'I,/9CĞq(9L<).9IC.yS88&I,/9CĞq*9eK{'oO]p҆&$l{!bk2ӂ%JKe'maTIK&g"JN&8,S[m򔱡 Y%I,o6= k2n5D{!b`(S +Uz@,UKR4de}1CVay(S\r!~ֶc e*NOVևc8Dle[_C^/wiUj& ;ƞq(9M8).9_(c%ҁց4de1CVa'S\rԁjLz2V{ڥWi:cӲIMCW7Xu+tU@e D{!bhdWj*{W(| ]oҏf,;ƞq*9-뚤ߺ5}?nzrm+tIUK?eC{!bhLq+,5d.y[ܣY&_cyY!CVi$>SJJ.-^eɷ.iG3K6xc8Dl{2%ߚ^7ޤ(dx s={{4`1CV+jOܓߓo1dt]&U$ޡ9!v= kr{GGJZA&m.whG@v~c8Dl4c=Vrv4`1CV+ƏrCɾB+턵pi+|w5a3.t]9đ򢣛cU"5wpel=v#_I,/:9ƞq*^QNv.Rx ]ڢlHVˋ~g"wp &Hk_E9Y]E&1I,/:8ƞq*6q:Es".tH:6+gG}Ui!ҍcBN:,:mxAGm׮okLHbyQ1CVi!'EZ[WeμBXE%҆蟦h2 i!%cOo w8/lTE.V$Wc\>uQv<Blz&CN] %߮rKO9:C\Ǧj2uٳI3=Lby'=C=)&=X.k<TKZgZcVNQ+z>x87be gm 3g"Zևk?^$cOoψҥhTJ c,! *EzH*ܘgJޥ؍3%g3[ŃaHQqݢ؊Pdl^x.K:[:C7$b8Dl&/n[~5WcwIEJVgˋΖ g"#CTKM&bAׯdn\׶neeiiŦ cnpn9bh ,];!<2]xKb3eg2eoSȽqW7ctɸEʸc1Cf7گܥiWݢ]\Fk1iC[oKBrc8Dl v-nQ mx,rXޖ.H6\c8DlUxRaG ^Y.Yԣ>$ם"b8Dl֋ú]R1uu;HD=LryY""Cfai1; K7Ы126[%XUڔ9>˫N1' ҥvyzʙC/#앤?4Xw%F<4FƆN]>oǮI.y=UV~b n;};&B]nq'I.:;Ğqج:좄Vwz~bqlU`3UgC3UmêoXufuWUl㖭wTr&{!b02bXuܰ˝w3퓗:Ъzq)g˫ g"6N<êㆽ]v{U]&T%GX;@!)g˪1CVOQㇹYͦ^Hq7> ]ۦǧI.om= ȃ6`%&|YNƵK3 g"6~f@w( fUK3Ug3.,wt)Bp&,{!bO)/sgZ[-uPymrp88rC{!b4b9ϑ:Ǫz;ĕb3U噎a9Zs&Zs.9w+9Ďg"6ہh:r= )a;-;vB+_sy ;ƞq`dvaB#.U.}v>3Ďg"6BX8PʃM_ս˫>zGZV]oSLri;ƞq,ަ1]ߌYUdiUu~<\^ud=U>I1:Jwf̪zH˪뽈I.: 1ƞqجދH1: HooŬU;\^u|g"6w"R NoFj3coŬ^%{!bz5G1UWlߊYUjiYuZ͡Vc{!b괚GU'[1=Z#-LryQ1CF1:mmxUc>Ҳ괚C{1Cfi5ҍN,R$uUmiYuZ6Ǝg"6N9 N["][1=n#-N9tsc8DlVVsMn.Tեd@oƌ]nnn:ncͪjNǰAI6]򪳛C`q ]nny+I.oVv= 1nbv3܊Yemf`3k?fZAXfK Z 0%g"6: 7τxf 3g"6Vmo@7(Ƕ^̪z7v$Wb8DlU]2yBް.n7í ]:pGI.oց= RlӁCVj.K8%ԣX$7[BĞqlZ)Yafzc{1Ɨ$X"Cf3JM7 }vVh)aI˚cfa36x/fU)aI˫Ng"SM U~ߊYU#Cj 1b({fN` 3g"6V:b -bV3tY ,r&"Cf3JQǸCj-bV3ܒC j8ga$7a3.l]`,]oCf\^x=p-^-cj&GQ 3~{~;]&ocl\^x6y=pao  .o' tn[Vd2O:\^xy=pc1x$l筞I./ 0Ğqp>TOl[chͿwYW$LL<\,{F;lpx3oâTY㇣:V71x] &'X!ÅvЏ&1xqwEUvPq2j.OLry;OC {!錾g n+IJ(]6;=M+k fK'!X!Å͆1x!P-J#>SiXv,]mͦ$W5b8\8?]WZ~0*[}dڥVo0VĎg"6WUomtn[˷U.˷i_3egˇ3e_e{oׇnnG2>*W]oӊovLry3Cfuwm-V]n[۴̅C{!b0BǸ::%v-wuc8DlVVȘCnC~ױi{۵Y!v=UszHKIw%Zy߻ݮ0{&X!Cf3ʏbBG_]}:սwy]{qSC{!b|7Ũ긧ol;tlm{lۥl蔼{ƁۅkC.U.׶k6® c/\5>1FEmI/ !fmUKZ?I.:6Ğq,\7>1FUo1e?L cvoLry7C҉vnM|ݠ./7I.p= b z] )}XV7tĜqX!v= V1sH΍¨ѥPsZYI.;b3uu!ĨʹCU26Xpwɹƒb3Uu!İ~Oױ. wר3Ug 3[S.!UG wcdlX] 7:` 1Cfa1zˈCZ6|BjoɹfhX}@1Cf32b j8y3tʠbW.'xhNcf_< r,ڵ_< Nc'1Cfi KT.%x;$7+AĞqت*1le}!kBH3vr8A}͙v`'3@k6'xH' q-CͣK gZ+D{!bhئ^z2ʊv\w=zDGZv^,&;ƞqXtCًHk~ױniYuXLryQ2CfbbXS"u˃#?ҪLry7@d{nM6b:}:Wm=b#-A/\ ({!bbb Z,1e[ VZ=f#-A\ h{!bjb ,lb dG-~e7j"c3@&cj(!ѣ?ҲZD1CfiؤsG-Ɛ]Ϭc^GZHfw̝!n1d}AjŏlZ-Zd{!bhؤsA$W7 ˃@ETc8Dl6-avZ&X+"Cf3M+t`",cKB?„$W!b8DlV֊mpε)kG }`ݶK azd˺cn"Ĩ⇹s{ ݽ4Xa#xE+f`3kEa3 p9*CIƖ[K, a\˻"b8DlU>{R AXQyCȱK7aX˛u#b8Dl6!@FjV2V>[^E%{!bVV}ƪ+HoƬw!Jry"CfiMGt2^ul^K aL˻"b8Dlv- 7&R7DzԤs+.8j8ڙ~`3`ĸZ&rav蒈r&X""Cf;°M"?JFe GScHZǼI.= `l3ip~Aq۞8uII9\c8Dl$u av\Wr%ХgЈ0%g"6Vmqv Rx̍{.8G-I.o=0b-/@#@zAG#Ȗ$7{DĞqlZyĹi, uCFA#̖$wkDĞqZ-ia=p4G*'lKF\@#̖5"b3HnX-׆E W9k[L&,l;ƞqXGC4EXK_\/4"b3[@\t]\nC| cGm.]qHS[c8DlV֋:UoڤM8Ij':-]vqHS[n`3Enz,JKTy/tY#MmY:"v= ^lz-rQ{XxK:. icfbtcYHAXh9.icni.: #5CEݻt9#rY9"v= ls:pmqET.]qH\Vc8Dl6-!۔㢕#d]Dcsw.市ra.++GĎg"6:ݰ0UnQ\hu cS`+E沲XD{!bV1|+"Wg\,`ifcvq.:fq; Wz cw"MsY,"v=YuXW'z3-dvv "m˫g"6?7UD| c*]qHc[V6c8Dlv- ⊯9R:f>ޥ WP4eeU1Cfiצ W?W\a~2VqR+Bϲ*D{!bh>q7HUvhΏg\팿 i@ʮcnUa+\+kCdv% W4eeY1Cf7jMZካ~Q^2W;k벅Bܲ-D{!b`cMo(2gޥ 7Ѕ4ec]1Cfac\v|y%6܍uY b "v=UuŢc\u}X"\74X휦n` iƶcnuq74C&c#ܶ.E!-_sy7EDnuq7HH͠l8/ [Q[F@#5"b3@6Fܤ9'K#niJcͪӲM#n+V]e}2V;o҅օpz& {!b|3b1~nߔH2Vi҅օ3bX"v= ,lӅօ8qSޏgX쾭KnZ4ec]1Cf7вMnR£MY?~!Aj_HػdeLXvc8Dl6, u !~{`2GXH!!4eg1Cf7bQǸCu뭃 Aj$]nqnqA,;EĎg"w8ܕ ,LӹewmgED{!b\1rMuիJwi]kęf|g"6֋: 5"{AA檯]qq+;kDĎg"6ہVm1~[3r4NS.k8,"b3@ 6]婇8Uj]vqH3Wvc8DlUfW]EMr\0׽K/izcvb^ܛNKxv՞w" ]Y/"v= \lӋ1 锱1GG<#p="b3UUatx(7怫:7T=>Ɛl ;ƞqج;,uG7K!wc"sV .ex2*+CĎg"ځƫÏʰz)pH%Yurs%4\`1Cf7PǸCWQd{+]cHU1DͺPǸ?>Ct! NIry;1Dv)vPCw\}R(Cv`e3KCvo7})1d=yh(sj.8KQ+I.ov=d1nܔ{Tuv>ti! UIryY"Cfiئ 11˺~'X&`aJ˻m"b8Dlv-l m"ی)kGϗdr>td" [Iry7LDna+n2QCFU0ܣ}蒉Dv`3@+68轊t!%7f:WyX2&w럒_ry ;ƞq`dvA lTa,E䲲 v=K'-ĺ}n^Zշo%PwX}u'{!bR]=p~q戼Cnn[r/kQ?Iry;v=UWB1l:0RkM/Bn+/,^V kc8DldúƿQ8˿̍Vo麬3Vc_sy ;ƞqج;:a?K7*wXoY/)0$'{ƁۅRVnɳ;wRvv='J-q'l:f紺<˺a/(I.Žg"6ʺq7lMݰuv-wu@봝cnuVn -g^ wAjZ c8Dlv>솣nnޤG\ c8DlvB;E2B!D͢zPŸ$O˽wE@D͢ӺOŸ$ӵ6ݼ.cKF.7!I.+:b3Euag}}xd̟-? EB\^t}=YtX}=.z؛A$b8\xvcy'0?؋%.R>wĞ<\^t{=MJÇ{sٛnB(juCٛA*g˻b8Dlv\>!07urwn OW9\ {!bm nhr~|ۖAnr~38?=_Lry7Cn : !CF3i*` O]9\ ,{!bOq34+\D4]`̕36g"6mㇹw|Bul޼4 P\9\ {!bhٶ_pFO?}:V/paO˧3X 3eEF{Ɓۅ[еQoqG3Xwc8Dl~ʘoG3)=x ժK-jie~@1' (wte=fLryY,;Ğq#f_6u:Tuhݢ[h\^w>g"6 )&So1.7ss^UC}hݢ1I.;Z3F1;κXLrGMu:ݢO[3e{!b~(Aˊeږ Bn*tCsj5םϡCP aqC"wM8NƖ}B+s=Ywy1;[cŻ,)ݸ~@aW\^wŽg"6(F7GMV \e`kq&;ƞqج+C⇹>(ֹq]c-V=ւہZ v=b-Jn[ 'U-%#a3[u۞vMv| Pw{[ gg"6OH!u+2 ޱӚQ6ET *ہU b3 vQ;HWhjmm;t !3Y"v=p 1l9G\(uQi׮v매є;ƞq`dvaVY bOOr9\^{=pc\g _oyKv}oNX2k[Q.gہ}b8\8o1x7jr,6_Ιk.4+@Ďg.7xzZxU9q=pX9#. }$ub3;Vv>)}7M0]ƹKmhc Zi񇕗QmrOݎ uqm]og;I.o=pa!n0q¦}27 .%U+AĎg"WD"60pSjA[>%74k.o= m{H } ][u ]6p'I.= {1upݺ26E-nA=8Lryy b8Dl.z i6n3[QV3t L#4"v= dkӌԌ2-#W/ZkХ7Ќz^`͈3@#Ӷ6Ǹ5ؤ,|Xg齺A嶣1nirƎcDIv}@?J4Xaҋ;EE;\ c8DlV^4.c]ntafCs9ꑅgہ#b8DlNRڡeOá:7u.㸃q;GĎg"loӍ; ҆ 26W0ڻdQN<\ ,{¹~}}#8]}=F2Z4Zw3g.ø?M9ƿ]q6!AnAn.kg I.o=pac7'>cvCwk#_ TnVVǨI./X/"v=paKm[)!Xa%-W=VLryC`D  1=舣1zK#4rOq Gd!⇹5P&oZiπU> 8O?=\ {!b蚭6CfC~_ cSG; tcn=:ݠf2{ 2Vwm8=>#-A%;ƞquanuCLY-AJVoL$@ƞqj>1nPŔy>pژ~k&,{!bk"i9h`m/X,~Duc _cyqg,ޒgޒ7Tǡ}ey$c8DlW.RA9̄\ѳ#-˫yˋ{!bk,/|IzͅczRrҲB1CfyicyiG[*n˃Vq{GZ[(;ƞq,.,.xzKx~ȍ]k\V^Ďg"6 /z>rxnX ``d} g" [X^%,cg/GZ&'g"6 ˪/4>#ŕKb `|ˋ g"6 *[=ϫjKo `yz g"6맟?~i[TﴊUr f',{!b8q@5䮭/ @1#ݬvɭ䖾?\^^[=U^=5^Y媯]k̓\^]X=Y]ik,.JAʨBuAurX8,=Lryua!Cfu.=w;\sb `l3e3eZ- -Lb@nU]kg9\V^Ďg"6 +bL}g.>27ugKo 3ug3B1;zQ Rۛu2_#/=Lry|!CfAPJl/[#*%FbzC(QQzÃo27m{meҍ㧀6Z$םcOo- lg * ,Ďg"6W쒱x>̽|ݑfCBzmꆞ?K?n{Ɓۅ՗_v*K[$b8Dl}Ia ;֨wWr uG!chUgF g"6Nksk ڂ2U. L.?\l{֫y8 !Ő \^jrf83䲆@{vC/tݺBLR^{L]2mޓ\,{vCf鬳~tznfSf@3 g.lw<;;wb:*ܸ׍o=.6`; c Sagw2^ZD2W?umW`ުs&!xb8\nxp>}ns"BT7:M[禹Aԥ'P;؆ b3OMg]߭یIɽ_ģRp&@Z ѵ)nMq;lxSb3$-njp}w<ǐutun^.9KM#;ƞqFBFJ)!d8D{v->pV^{;*em b36AqH(Cbڑ:EۏrKˠo_sy?v=VVYJ%C{1M-RGFbz .:V_.w8#wc @S+92V]&p&p$@Ğq di31_+]jޥ6LryY!Åxt)[1w\w{[;gjg.l}m_K[ڃm_rt#*cޢަe$=ĞqhS{ˏ%݌ wC[v{c8\os{]ʵ6Lry?C is~t}gq?ו+a~~c @6鷶HUn-:f=ڡk7nz/ݙv =pabm[2ah .׸j׸tgہ]#b8\nX\]#]Rr?Xu?tUM{&5"Å~556UJCn9\ Q_x$FĞqب͠b͕d/XLս}v>Lry+~DV V TLU 2eZH`$3Fg"6[6Q N\nVizDǬ#n+I$w IĞqd}3o/io3{cs@]q$ם#b8\8b2z[ K8Q:6~*{_\/g~g.l}w=M~1~JkUH cK-7ڃI.Ďg.l1[_pBepDLryY$"Cj^0x>̭63p/f5CF@#pGFD{E4&5|!ZƿXQV^,Qq&""Åv["n?^#lr?LХ7Јz|&X#"Å5J;X-k! ScqaCJ@%` 6Vc8\nZ(ʭU3\ =.׸l -Ҡ# xs0Ч:ۍ+fQ~X_RУ+ZHAh, xxqXWԖ{!M|]zzOegh5@wYË7z;ck7c9Z@X7#+:" -}n>y%ﷀxq&rccB5.;w <ӡwt='3%?`Vf.n';9+'[vQ+e~-+>9\s(hL}]A72]196k节D <\ rۺB*J:f]g60zÙ(Mͮ+t_C;'X\m_y&Ek"w <\ QrXۮz%nй#oz-\ۢ:.nޡ\-h9bUV~<sgs"w <\ x%rh9TjO$ۢ 9.nޟIAդ-y|{*cU'9G3 ]/pq+葈qWmsl|>Y,NƂD xbh i+jcۙfW9N4ǂD xt"s4qi1JWI)g9s/8.n݈\/>MZHY93*7j}s˹Ӛk苂D <\ B_̲/h+Nݾ^\s9/ +p_f_н9Gω/pq/YssSjFD :.nޥqnc >9<.:.nޥQN8] r{.>9(N}}AQeuBJKV:W>9LF V/[c0J~1d 4:'0'-0= +p_%n0dp JwsCmDEנQD <\ܬ?^D4sgw xLjֿOHNZHz1$rWË?#|%9ISwȭuS_ }NrNrMCI"w <NԦ%'x5T5䤵/g4Z%/nn4k>mKP36) f+p_ւB\aA!$mĝ&S:l>19i1 NihD <\l \eIIluOKZKQg̛+p_fSл`2M1K-IsgiTjI>-9k- GXihD <\l z!s/YoX1?~Ѽrѧ+gЕz(J;2W v4.\~lwAWxUB㶗>MԿg4:)/nv~y%w|]טmYP:W*>ԗ3 Q0}/d> !%&ݕ~Un[ K\@bN$1(HLË[q'1xc-JS7\Oo.7'қKAo"w <wbi44r;ް Ds)N};oN%"%'.ALBg\ug9Ds)8N};oN5Ҷ?sQrqÿYl>͹Hs.͉/vkIn e,Kw'2W}wg:0Υ`:^jciFٹbd~(}.nmhTUoěXd s"d'rWË?sVLM1^ δ>hg4+p_⃸#W,-8dfU!I_F^x5 5^J=g}U'ܴU\?/g }Ak }*b/x|`TX |  @/V+ZE,4CeK}r} }ABk }޶YC,%J 7DV74  @/VM*UaHz$*W /ء/셾 xxq/Ӫ;"ԸURcՍqq@c֧A1^h ðw1x; }r}=.,`]/n]0¦#ִUrS[ }!s}q}1лr4hqWË[ !{bSK}r}qkd#A/^ Zxn=p Mjc/T/Pd3 }QP}7B<^}!&j٤´roe[@ac4hEAa"^  3}7lB>\ln/V_h67i6q}!f/T/fSwA/ f/V_ຳlnrw$oWE@x.$ṁ\Hxn/V_QxnRxMB_7ǫ έ;^ zB5MNzrIY w;{w"w <fotK}!s}1NLF_|'r_ŭF߹KI퍾S檽>Ε|נ߉xxq/k퍾3}֝{;Ε|^]/n}.}'U7ٔ;ϕ^]/n=P%7 ϽIx[9e/s%'rWË[Hp(>GFk m6s#Iڜih$D <\j:Wh@ u[|~CLF | r_f H+}ȝ_|m+>wǪihC <\l\ \6n9q6n] Y,>ALF ,r_f bP -s }S}z=OrA B/pqp1(ssxPrwqLY 0w _8/i8|!rWrQ g8i-SE"x$hԿ`/nr9"+hiDzcb8ɭv >0йZ4i 4"ͱOF4"r_@' ֈ+9N7>8F4"rW_1[&̭?wdL}p_HǓQ/D 94hEAu".n:eunY9|Pvg;gz|A3 /pq3' Ѥ;grޣ3}\z.}syi0 }AKOߒE OjEoĝ:`,}sg|ihD <\l Zy\-Ķ?flm>ݹs4hEAw".nݹYWKAw"w <1?K&΅7q.JQ;/0e:G>s4h@Am".n^@0+\檮8 rKOm.6,3 mQP}mׅ6ߋt֛?_ڕd\@aAbg4_P}6=f` H䈍u7T4[UrTK y[KU"w <Ǩw>0[LV}VrVP?`] sӍyOk懛uO?R?~w;.n֟k~+jמryUzׂgD xY2WGo=й'W)K}Q]7ndp]ykhgD r3 *?jg4 @{Bdh:Ir_/ *[*_(E}}mF1~{%W- `>ӸJӈ/pq/i*<΅ >jN}{%W.n6.% UŃV.֧$7P8zn+(I}mA LFIzx#yh /cl}rU#鶂D xxqq&KXWnRWy6{OWn+qVЕ] 8N 8-&6IW t%N +p_f_&+ԕZWr[\[@WԻA- /pq-b\-Hl "w!Wh 8ug^\[@l tg4ڢ 6B?NzBMbs#q^S;Ӡxl)b*_#X~h n>4hEAk".n.9۴֤5c*/5ㇶs>4hEAj".n.9ۤ&&!(xm!s8w->c4rWͶ%q[RjR[z%Yg-m4wpzݙ(8Mŭ+|B2W{ ާ9wМzݙ(hNͶ%BjNl 7\Hrvg4ڢ`97ۂ2Wh 72W}s˩ihD <\l Zr\-1u-d-,S;Ӡˉxl;nU{ˉ/pq-pڢ}}ڶ賜;XN=7LF[,'r_f[rr=߮MBj'hNLF_4'r_f_MsRsҮ]mœC'dNmSX;Ӡ͉xlӜԜ.>:ܠu<ϩgi0 }}AN8E`NӍW[8W8ϩgihD <\j }~BsҚC_Ȝ5싱/@t!kg4 :7V2W BN m:kb 0zڙ(N;UBN2VZuE<@u1kg4:72W ::+f<0ûT+ű]/u)kg4:7m󐮓!e-d-\SOY;Ӡ׉x\-'#v&8שihD <\l \uCNl 32W};:Pzڙ(NͶEg&X O1Dv @bzg4%&s_&A/8=&ظ . CQpKZY|h6 x(gjJ]qB]#z ?d 8j86g4ڠ/n^ v4đu⨬0n (ÜiAPPh^o4 /nљo1zvBI2THH8>8jGKihjD <\ܺwUcgy/(Yץnb8 |A B/aĞ-obRPy&G49 Q}CQ=tXp3ݿyuxF֙.(xF_ zAJ-qTp^? >Vf I$z}A /pq虓̕Z%\4I=s$Q>`]Z@zBI8r@IƩ0N`ir4Z`/n/(l' KB_N}qYi肂`D <թ,' KB0df "NF"r_ŭ.8L~1Ҥ>*n(N}q (HGËgStx#$QV}vqHדxxq x('ܱXkA`@0ig4 /.qܱXׂ>8II L/y:4ĉM⤄|x:NG$N`3 ]P0}e]2q;KrUPd2Q?9Ӡxxq X#4ĉ}$֮@dug]3 ]/V+ n g%dpYkϵL q"8L#rWË[qLt{o6.P]gg0ƹ`^isi4z+6[kG}qըihjD <#;m[hi#۠O* '_F"r_6x1sTY*  ?}mFV]'gIŹ ^ܾQ*,g] _>8TH*/pqk3D'e\(J .5l>8Q%/pqhת̕Zu,Nr>C0>8NLF t"r_V 2Wjv_X z^nS`3"~ -@/P{qu&wŭ -}o7R|]7t&sLXy{}{/@ʧK[@ʹ_ +p_f_R_[VH){  //pqH\X-rxCpj>ۛYRp{]Z7\X-rjT8*[-z5h@!.nR (V٭SCk|XsR} >}sA5 /pq5p(M_5A\#tpk}pi茂D <\ \=JX 2vR >/\pQY]7; :ck eghm[4;O. \kt!rWŭMg2W 9;Cbg`}gH\`GtrA3 ;7;r;b3r5Jgz]fvy}hk0 }ۋ+]qB}qҦ`.n~siqK:}sWpI28WZޤ{A3 r/pq3h:C\&Juxq282d3 Q=Ӡ-qi1N' UNgTW2 ̻U '89"OCgPgp8qgpkʝ""GmQ8Dȓ HqlV}i88.TN0nx2<NJ1ƥqVdSI8D_Cc3 3Mވ|7< L3Ɛq#) yEbb-n!n\piF\xh \f*1ƥq&v|RyYܖ6ΐ6~0i#dx.<42CR.,>-l!lcGa` 6"O#cT:c 5SecwdHpi\Rrb*%'s1h)ulEJRScݜv9Җr.r\Lʉ|7< AO3Y*Y_!Ȱrq)0Wޢ +-?r" OCgS3rǣKQ~8@ 2XLL<  @L3w0;CQQv苶sS/Lĉ< |*S/FT$ [-\ p5iL\xh\M^2>$Rp*+ᖶr̒`2K\x:>#Ȓaź&-\ɍdN" OCPE. R8޲ U.&D υjX3B.*L?!]t:4F[ @ Q1bRH\x` :c quY9MWmqFE'sU)^ejh.k~k7:noTnx2<:Rg'Wv+±|;mcF ĊwÓp:W#]ge|劫{&\nx2<:RgHêa.W %ڎk[d8$wÓ8Kqxr=}t7y茶qՑcW9" O#g6gI\P'R8,04F[$׋Q$ȓEK1',()f[$NҫI"'sAt$4T8p5jm J P" OCgVZBJی*mQ䪣K&D υƵ(sΕP ҔIa}֖PnPb$wÓxѷԱ168@q;@ F耶$r$;No&D υZ8TOPrn}hK"7H"fH\xʢ8M&K)pjX$r$n&D υ\K"7y{0o¿ XakK"7H"oa D"OCgQ3%L"g֐IіDnDb$wÓzqL"eItSR8jqomII$6L|7<  kII&řh)|J"?%l^=v- @|7< |su/jK7HfAlzvyepߦE'SymvR[TpTm&D oe4<Q5_yjm}bop<?l|7<m? ^:a?5 9$4AS -&Ac@\0CwGQ7&/`6-݇[S-&a`N'˂ Z< 0 |TPޖnk?ܚol2O7L+m^>_8@)By5erex6y2 0:|h@8E˛M\Ã00'̓ͣ6NZtI@QŃuCԻ[rp.@ φ? KpRR=j{#dR=\x-j~-?'7PHWF][AG=&C υGZg|!;?ҟ vzsk }GbT- Na` !OCc6O18d7TVBB?|0dx.<4k1Em9`9 u>_y2<JCNa`mӵED `"@\xh\J^*{ɤf wt)*- ־a0&C υG}ɕгN9c uC- rGa` "OPƸ * u/22B{0!dx.<_u+_PBVEVnC!u=?}|7< )|saj'nUf}[(C(Ia&D υ [ pJg|tce*ٷ=3 aRI\x43tl .>u=?kqӡo{9A8ďȓ;I'teh}[,C,Ia&D υƠ$\ث 0i]-!&a`?"OCQ@*G\gæusCߖ??R׃00'spըulګAp/V}[0C0I^&D υGL^I/Tauy jגmd$z=_\y2<גJ7E&_ 4T\|n+o{A'sQs}bO4TX5C[8@H}[G υO+Fs*8]3MKNrhKHA¤ȓ:c ]IW *C[8@H\&{D υGfZgl!+"qWՈZMHHRσ0 $'s-h)u\9ȋ Q 6-w wԍRGa0&wD υOH3ϱ ctZZ8;~q{&~O|7< |su~ Fȓ̓*68|9/䕂'tC[68@6H-X&D o̡^xysȀv*s携js*9L@<\qzqG9tZsJ?_|Ժ A|7< |s'x4Bc[7|o7{܏B υO[>@(=?STܱIP{yؖ:tQ{ȓ4K^*:wVhauؖ:tQ$|ȓ=@6}`9Ɛ?E\uړMc[7oGa` !OCctb,2*[^/UW_rv lB nx2<0jeKp@B_vG#Dk`'s{>@ti۳) p wI'sh(u3d|oR-Wmi i"7M|7< -@Gs4qV`6a)M`s[8C}~  4y2<ZVR,iBeFpZjDl44nx2<ZVR,i,M s]QZ-M!MHI's;9 j@gfnqU*oBBFl4nx2<:WCƙCYB7~p^"ahq$&bD υUňq#N*)n7c \֮vvhgGl2F\xh \=^gg.pڶ١-c!c.I'spx1c4qVv3Pma a"6JM|7< ,YYe)Jy= Qi\xhZ&Ja2͜^ee ( ,`D\xhZ&J!}f!ɮzMH.HS0p $'s3pMy1|'3t[jg 䔺1( arJ\x 9sEvQ>B]Em9 9nAu? ?-|7< -@kJ3xs*;4A '-\!MGa _"OCgRS3rSJɡ-\!}Ga`S"OC КRdN ɡ-\!Ga S"OCgКR3.唫<agm)W)uQ8ȓ$: Y9ΐdz3zgŗ+ėQ8ėȓԼ_~ɷ ';.ӴUfWk[B[Uݏ&D υTs&:CRMs? gTy2<:֔R!SMZSnXwwú+)f[[TsԍvGa j"O#g9gTnۮRxbhK57jةf3&dx.`nz@*u@[C( <`L\xݖ:`G^R u,L@~0&dx.wKa-u9X0p 7's3h *uK;g(9-u9X0p<'s3h*u2b-<ጶ tA{fݏ&E υΠ9gL+k7Ծ Q痓wu? y2<zWˑK+GYZA_)?|MmA夃I4@ υգ L\Z9ɖ}m)uhDrD[.M&D υG:kkd$~npj $'$oa` H"O:Cc@RY0\JuKbj#'#dH\x8Rtr,:7Nr-)股mn@r?  y2<%@qWK=~aڂ Gl2nx2< %6N[{L7K0KS[8AˆR&0" OC P:'>k ])Eb[8AˆP&0" OC P:L$[ps3 F2nx2<:%б3d$:CŇӼ))R3r rGl2nx2<:Zqu]Μ>2}tD>NKeҖ>.>V1wÓh(u@Z`q B .+#-}\ }ԝbGa`>"OC rPLI.*,\7!6WqQLʈ< -@As*nQPVjiKHuQXȓ:gd\Tn S mݢ~ ' φ? yဴex dxf1dx~3S*Q,W\SEEq}O}]_an[,&C oiׇExF͟ImAAns? y2t!z墴U^ǟږt mbQ~  φ? |DMhhS##ݛ~ ?Gnx2<>>sm;~DbG'óßoQ_#t*Y|D{xDi[dx.<|Di :~D9rTtB/-g/Sӧ0  υ/cpJ+c7,UwÓ- 37ݪ tRkSiԧ&i;_  υ9c+uoMNsh+f|uQ8nx2<0rFKpNT.. OgL|rrS MN)u9֖m:fR0\xh* N[\ytckK6~j3dx6amұ#wY~ A1BwÓuùs ]xk]{J> i~Z00dx.<4u1u|/o}yO[~1 OC@>:c ^8:]Wk[. 00o̓|1o/| O9V·o5p|7<  ;0|{զӭ)|K@zy2<w`>`Mfripdx.<2.}6/ Kvvu}˕1tQ=\xh @$XCEw26FoJvAnx2<0"ax8BGwGWuyt'sᣋz}&>S}]u:! OCв^G{62u\wMor9GӲ001Og?\ȿG-{ {Fa0B&{C υ(vK]ul5ս}˥puowÓ|Vҝ~y_{ӺwS۷\Aޘ'óßo._\&x4B}[8C8[uޏB υGn~ =cSZWz{Ӎ:Ga`S<  zUF[~@U^=m[< y2<×w3{y_RW?˗7濅1'óßo^ȿG-4!4=1Ga0B&4C υ.AǏЬI]VC!00)dC υGO>Hg^\Ӣ7S52t@[(C(bޏ&C υ<]8U;(aDbB r=r!( ,`b9\xh*|:czuhJn/ .uQ 8dx6aԢ<<WU Fnx2<>T`.uIJqB;@f14uKcPo1's1צc~Ic R8tQaJh굡֠a` \xh JhYSրF_/Ur[*{NCSo/ dx.<R|5s^}p+OC[B7 `n   OC Pt+u\57Bk4#XV'shE)u|fugVR8W^g Au[QX[2O# 9 p7n7Kx-t7ܷ\YZA(dx.<Y@5̋:p0<:5o6XtDwÓ7W/i;.:莝3u<⎝̓͗ψcSˣ5ᅃ v1R܂Eᐷe~d~( d~ȓaȡۣyAercTcĕn؂됢۲:@63޾c[r7Brmޏ&C oanog#KFEe? KՍQЃ00'Fs?r,7t/E\8mnz? 6dx~s9T3<ן;}tApҷ_HR؃0kl盫 /jN7ýJ8\x覴Yt _IpjKƶRJAX!Oá/\ 74kEL?,eJF(ӝXGa`S < N-p >a0B>8\xRY!`mRj] `:@ ꖢ09܊< iWM@m裾?,־»Iwn*z?  y2<Z;3n~h &- ,`;\xhr:c& REmݤûE'Lx< -@UZg,ݤ2aY mݤûE7(Lx< -ݤ2B ƥ2»Iw 6Lx|7< , :XûIǭ"Vyrn f-ءq6dx.<--0sx7 RX? mݬûE7Lx< -@A3n  ocܹYWۜGa`s_dx.<-X fU(疃ZXY iM:|7< -@A3tpW݋@ O8<-8ٴ`c`ĉ'óßo{_v u}{?Fi@ φ? !ӧ!Ei3Dir6Qdx.?O=RU%Ϝ~gu1_H%f3$f( F$fȓp7,{ifySH?sHm7-m0Xsdx6a$knxy8 m=g}sfӞȓhiFΜϓ*+?b,mB}(t  υGR 35ö9NhtBhSefX00dx.<2:gfL6D?!ύ˩Xv- A|7< Ay9gXb5jJ7OX |Ao/'s/苚_bU^'8)ܢ1z}bAwÓȔ:gK]VUz\cHmkk7V0pdx6a>] Y~ " υ.eR]./[e[QYX vt#3  Og?\>&ey8BRGtҏ~#D|7< Qݖ:U785Q4:-[!ӍBGa!OCbr>)Bڪfi\b/f& φ? )P[B IWʻdx.<|FE36WܟJ 4k[pBp;ޏ&8C υlc,|ӗ?, }cM(dx6a$,IIHy3adx.<|tkԹGWϤ̘U [[b_0pC υΠZ1sX3;Jz ~pkv%ٶ®j~ c Og?\N(fj6t}? 2dx.ӎMR % A|7< |sR<B[(Q{? ?Gnx2<>:~ϹnURV/R_Г[nx2<6pR|eY/9sϵp\¬k:--oa`y2<ZjR,_yw.>z90uQIk苶+u[Qg υGГt0|e# lb.~˕/tQnx2<R|1+C{X( Tl-$d orMwy{y<Y}QCΫ 򞻦r [x;0O.:g+enE/{ZF-_C?_p\x 0s{@j&FƱ29jܾ :_ OC_bL _`1/tXw7ܵ%L}qaEl盫Dmbg.~3gnx2<0j)Pәoȯ( F\2OƒuAu֙{m{ZW{9ܷnQmjo's/ws຺^%t| ^B;M}˥pǘ'sh&ux 7le{vcLdx.<4ƤgW2 G uwߖ zT|y2<0rUIGtvF)C or_LK [/ )U][Cp0sȓ7Oy8Bms.1B~nx2<u;܏]̺^\ի̊/oк/)dx.<Ns0UbhKH`6l盫%l$lQIؐ'sKURgA&le0Vf""66ؐ's1(a:gK5usƐ]1ڊ:J1̑Vl9iy8BmXG`1\xR6&uѕGZqNIau/n mp_|7< , MsX6g}[* w|[dx6aʎok<mZ`LΆ<h=ܱ-g{}QMΆ|7< |s"R<mlwÓJKRgܑO*sW Hac[6B0dx.<ER,p)Q)U }L"R_2=Ej3'óßo.o<nv;- F]2Og?\7<lkld[wÓpvlK*-Z2t;ƶ㬗x0dx6aKKpڒ7/&yB υGO.>@\yRת)GМSc[f1Ldx.<4UI3{&U ʪ ww T[]ȓcw~ϹU/dYY/Sqׇ/K@ υ+NM @ ЖM ؟L|7<  @}sUkd. zceldl%'! O#c识9cȌNM**sPz_HK(dx.<-%Mp:|th+TndJ's/h)u|$O}9b>G<ņĆ#.%Ml|7<  Kɋ$cCST'*&óC υŊ9 U|th +'+G\`nx2<Bz䦋- p%iBI\xh\I^ %_bX)uh +'+'\Jnx2<9VNJVVyلwÓ”:9Yef!u;Taz͝0dx6aՇi_#&&N8B&LD υO.=2LhV2+CNm'`M] _ȓ7O)׋y8Bm DzwÓeVй' jSW)>>}3}xYl>\xh ڽI3袚jSW)7F[7C7m6ydx.<4ޤOWJaڒi&C υ}d{NN x3-!q`?\xh \Lf.CUBghfxoa!O#t2ڣ[a#Zx3popob=\x ZOJqr)[TH )2 *ZO0ȓ:g YHh{m"6_L|7< ALs m ".\L-"dx.rST|m W7l5a dx.<өYt*^Ux7t6~ ~B5]aFa-dx6am<mm« ߐ'sF1Mݗ֮2|{W (ږ:}~0dx.LTgh5}˥/ |eh̓pH/4x m5ur 8pഎy2<iu/|!ת_ºfA:\xh8.uֽ@g[. +I's 9\)r{B}q*.rQփ0dx6a5%ir~0!NҘ's )ֹ'Wܟ 'w }#?_ Og?\> Pt[.\::'s _A[=nux>O9]苶TTO7 /L< }FLh-sM- cg\nx2<:iR省o/$եҵ%x$x! OC@]9\J:y;- cg nx2<9Nksgx;hYq7׾* `B<\x#u8 vCh :&C υƠ@1\R]xi{_Mxr ܂r!dx.O k-U UGa` *"OCcba} <-[S6p'spt;`lPeCߖOOzO" O#Ps3e> /ycHa1J~0%dx.<4m4RasFc %7F[>C>I]&D υƠ2sƸTw_zɾ-![g&D υƠ3sƸ[aha1N_٫+wÓ7W_)P[CH}`L<vI{Du%?EnїPVsh;!;+tz0'd'óßo.]sB6NN iM|7<3\U;Rgt*KPyV6@ۂ/]S|7< t*~:.eTg̫Sc۽w#{kHG/'óßoft_#V6BBIoa0B y2<>T,ufFɥKҺhm41Ldx.<4-K3}ρD *ƶmML†< 'Fs _ӾкZ_%l#$l+}yM†|7< }A% R|1*_PIK9ѹV6BuJ{dx.<B|NWW&C υŸoqUj|thKF-X>nx2<0rohҾ#Ԗ0idx.<|rq p1eڧ) 3wHa9c[7Bp's36ȼ8RO(EUC 1UMPP&S|7< A3Θd՛\)zg%$Ԯ aF\x HsLKue"/nv Lnx2<0j!Kpڢ @]}? 2Q dx.<|ti 'uѕQ 'U4δU>maaF[ɄwÓE:Kaप3d^3NŁEӿ}Q8nx2<0rV7ux1GT0ޝ{+% " φ? !_#vs?>CT)[9< %n:7ӟxSONm$_*ÛL0|7< }AexR|!9d_(]/Nr3:s73 Og?\ĿFhnf}l1\x=RgYcW/tl?0UJΔ^\xh :&uq"8)7Ʃtc5j- A|7< |s5#R<S[w[wխ3Ga0BwÓ7#DKpRYT')JgR! O£UzM?rrG拇EV6˚``TS's1h-u5cFRWmll&C φ? M6pڲ1]us? 2dx.<|t):.?`@UemK]u-!ӓ( `B0\xhJ_ ܭ,g yZ1ڊfY[iS|7< [itrfPdJWm-d[ dh nx2<@}`!ʌ/m[OdlwÓڗ: ѝQU6Yڎ.߿/-%:'s/h))uׂ^)Pzcս-1Ldx.<4-1Cֽu'l`|th{Za.&OD υ9_%sJBWma+L" O#sЍhN>^y<Ըv]a׿`\bîwÓļx{Ul-Ъ0a -\ piJ\x \b^L+_b)uh 11\anx2<WCg$dɞyaȒF[X@X9R҄wÓV~ɉAe]8)ܺʺ-\!hnx2<CP}c!No>z󹶥+#-1Wb" OCcS1t)?Ev1cc\M|7< AkLsƐ1&=V2ּJUcc\M|7< AL32Ƥ5*rsm1 1&λnx2<֞R|!/]Sm-4VB- |aZh Og?\!R<qq́'G~1f;[\įumpOR=lG\p?<nx2<t':Mܣ{lqUS\ےnN- a@\xh 9M1.% /[[A8QwÓto_l2m< ũUuUK _ Og?\)п@=ML |7< \_NJE>m*@z'u} v2x'>NlGԜ y8Bm>x? 2dx.k!+m͸7dx.<4./FoМ3m5~͸ 75~wÓtK9gMYЖmd3dx.}O]p,vF[A( a=\x ݫ: QΦB:k %5zkJWq~nx2<҉ v;[.e[ac υ-sr*` YXmzo4m18>d υƀZ3>R]p<\팦o5gpAdx.Eq< ]uѽTJ.Tږ)n_sǍwÓu7s#K8۰ ڵ(dx.<%iFw4it ORX=itmAdA$;wÓw:3di& -4ڢH~0Q$dx.<{:g d|[׮-q qa`8"OC.Q!~'| }G~0#dx.<4AB| Pz4`婁O 3 Og?\ȿG- a0B&C oyZxGHeƇ ;1ZW{cڵE|D|T~0dx6ak"#um'3dx~?^/F|ݵSI]~jݶo1L‡< ]Y::[V~閑7jJ7AxcJo0 /'óßot_#:ft@x? 21dx.~Q_kߖ:0dx.<2nx3\.xef OT9wo:ga`l˹ mn.ttq(!\xnZ#:\+tֺڞK >00 's1h3-u2/y_(]/7}-( |a7\x JKnLg9cі ( a7\xh H3Lߨ~5lIP%v-{ {( |a7\x䋞6R| CmE υöt!cht%^T! OCcb!poKv͕xC[8@ЈQ`F\xh \{^ kAÍ!*-i iqiF\x \|^L_'ؕSd3!}mp*ƦGa` \xdןJ笱)k~u2Qؖ||M|7< }AO3xS(+hYis?[&D υ֠9kgy2<:VRׯgѩ{1|nҡb bN69's[s*tPzřę"Qęȓԃur,:i} R[ͩ- a`["OÁUҹ`bq/݂ohcCk?wÓ7WG)P[N8ANH=`LN<<_sI焸9ႷiPij ' uQĄȓ?1ӣCƄt$> }2)}SQnx2<0rJ'x4Bs[M YLduwÓpEo}Ytj5l_p٭uE&*gfZu&C υ/pI/rr>&C oU^LL>**Y]hSާ6m~  oiEx~nF'tՓd-M:^뿅@ φ? z#R<lolob=\xZ_i.u]dGeY6׍]F ׭v{9}>=uC-M\ucդwÓ#_ʧGnj \aJuV]00C o{ p>oUuvnbꉡ>oy|ݏ>y2<0*~Fx8Bm)Sɯ&eD υ{|peUXtrq ӅhW'x6~5q"dx.<4V'ԭRASmiDGa &"O#_`ksxb1)]d-5tjc7ͤwÓI6İsmLy3!dx.<}:nPd)SO m ML<|7< @kFsy^9M|JXpaB\x :#u2 McV$hK7HucQ$ȓ:CAcpKBbJgED5( aC\x <~9CFqz=Eܔ!;.WOm.40wÓXH4otnQ@hr[jo&D υ 9.M_;EBgedS{3Y&dx.Tۭ)Kc@AsN\xh 8Cu2DcȜCh9pAsN\xh +!_tlvk3t8d υG /cۭ)+c00̼̓gt'd!+W;)_swÓtks 4OQ]0)Kc@}ŜZXoS71Lȉ< A9c\)|ZX[gum)g)Z? gy2<:osΐ՜rI.Lg~v~00 ?'s1(:g ~D滈VO~0'dx.<2`:gK\d!jg[( aO\x \~^ ?;~BKu]~vmgO~" OCctϩ*ߨ/nڲO+|0'dx.<_>IwNe[Py &}[CIOc Otdvr면pkі}}R0p>'sSaұ3kЕX n2z5L< AAָt%}|H<]]mg'=cy2<qK=] PcOK @x3'óßo..cx8Bm1d1n|? 21$dx.<|vi u&SSU{] umycy#;wÓDKsxJ\ Ж++R0p's:+7^^vﶾ-X!Xdg`nx2<:w*{,3t }mb"u=ghy2<:7Jq-ZUDh&:tЖ--3-" OCg3dYO4zE{0"dx.<Hއ')22Dv'sh)u=;@7Pz ?"aJ:wÓ7W/j+Yd^Eˇ| ?f~Tv21ڲBQ~0Y!dx~xp1,d"Yzhth1ADȓCcb8ȚE*@d1-Y YԝGa` ,"O7A}3_ƐѢSd睡thKHyhE3iKx+dqq,Nvs#ɍGalˍ/ţےʊG! O£Fou3(<: =<#D|7< oÍ;s?UnXmqNbj& 7:5nx2<RgIFxtݤfIoҕxÍRy2<RsWU"sPz_ņ '" OC_P u==#L a!uV-5tjh|aRC\x ~B^p)]苶r܏/dx6aw]p? 2dx.<|ri.uM$ӹÖmRwu\oҹzwÓJshIv$q5 ?~0dx.<J.#g 9C'h' {? g(y2<0o#Nv8B& D υ. uٕQ *枟])gwn gQ \x '8cβ,o;Z8̕x8p8Ml@\x $Hs2Y5sm BGa "OCg&A3d s,tsm `O{DwÓG:K=OfY!8 vm _V3'óßoȿGT(e]c4B#D|7< ]K ~LMz"Xy|*YF8 O£q/]0\7m`@7Fgq>}L?8 Oq_`oV1gm^a0g\x8TK3بqVe]A>yq`'s8Sy/]0,3t㼜J>y8:s's8:s"xޖy{i;/tz}0g\x4#~qY>gYUs{gZL|7< Ǚat8-v 8+]8]b 0δ- ƙnx2<3~qxe ~?K]mai[3dx.<gZ<8˛8+]8a a#L|7< a--vm8ˋjU{? 6dx~U7b bJHK]Hb b",&C o9 ޘ#͹r1ږMZM.|7< csU}Rjm DbwÓpir.r.r0g/vrrWŐ's8j\l\l=/nՂk[.B.B&C o7lr0r0BgW|CkVy]ʹ- Dcȓ̓^"C*i-ݝ׶lll i^M6|7<<hlr8r8BhUt[8B86j5dx~`gallll}[ye7( -[!7#ޏ`M6<<h9[9[Uhۢ1}( Dcȓh=8s0r0ro푺e s[0B06Sj1\x8tsXlXl|<`qb b1me3dx~"YG+qU}*8ES4( nx2<0 /jK6Ho&B υGBf7N6N6N ˊUZZ m6k! OÑ-ƱƱ֦);RX?m^ߏ`M< G̿tHstʎ֏t[AТy3dx.<iZ4okmkm*#-#}*\Ij%E( Fnx2<0r%EKp 76&B υGb#thƠ.E[A( |a,\x \a+'[Jm$[wÓw(3G^.o 8 0|7<  w^Cϙ7CQEx ta/-cK_}Q+ OC_}/jQO. oGa` OC(+8za[GBK&?4303< ~@(+8x@tuE -Q Q\xh]k:g@%tM_BK?5_`gnx2<BoA|A_~@( R?5`!\xhi3ll<۹z/Ѝ[Т0EK?Ŧގ2 υЧc<\|e @ ;rT7-ru#\x8\ @a/:e:7 C_3憆'spwx)7,:iRSE N"tmaFkwÓ>@g Q~^ak'H׭h;&"D υ9 pDC ͿHg>CEGh}0!dx.<4# MH7Oh;nx2<>I3G93~.2NhSaaWPC=600dx6aÿG-ebQY( Fnx2<0r)PKm3D[`M\x8^Z UTAS)ܶOݩ8 C_q  υDžA!.C іuG0E005< |s9cP:}>~t)Qdx.\STKW [ Ҩri F's1 R1dNZߦ3T@Qnx2<0rN'x8Bml.duQ)dC oyÊu *dsèV'z(ztppc&C φ? |tM8p±±1&C υGo]ݑ:pLՅcM8|7< A;lUcϢ;=k܊ԍQyEhpXNGa` !Og?\&y8BmXX[l! OGñ9HJw(DNc[ᦷRQ l盫g| oa0BwÓ7#)P[N5@NTwÓpvRgfׁV/Sԧp's軱9pU֠{v8x}:`*8`4  υGg"sꨥu;T @'s4WZZ.hx-X[8/e3< |sRKG4/a0BwÓ7#DKpNeI (jfQ\x8҇#s誒 9g) c*OMFd苶kk=I's/pu1zs ֠( x*x_wÓ:9W#2Kь/mEe#KGa ST< |1~L/dQ|)Pz_eu#du#F! OC_.M/dMSd& nJagЩ-z zh'= nx2<vR!7ӧ9mD;dowÓÖ:g Q&;]-zceodoz?a7\xh ڿI3pWꤰm\pcLnx2<c9cLqN Vl7A~0vȓXl='qO Nθ4Q dx.<4.>/FqyWg\|ӫwÓx\cȫݜ1m$DwÓt9c\ 'A:c"Ocl` :[nx2<Csؔ1?c(a1ssJI>'s1"3ƘeI3|5zc%3$ M|7< AR|5zc%3$ M|7< A7I3FRXss"DwÓʔ:qRj)h)oW"~  φ? ЍKpڲƅ'sѣ/ |=2kP JmY Y5" O7rtYУ;c׺ 'n+/BB'o*" Oé>CH3 񭮲ץ_굹FYވK_!~ _'óßo._F##3dx.<|rqGv1SLft}pN,2-⭴![L|7<  @23X":6UTXq[/nk¿'óßoh_#t- Fnx2<0r)P[@x1dx.I3÷ @ Ж:;&;D υsR p=|RWopt I's1H=@ 6V9(]"UG~0!dx.<4/FxŪ^Z_E׌&"D υ5ňp9CkN3;C qnq~08's5@9kL&Ȱy(]_׌'vL|7< ϋ6_3RWosSw1L< ϋķѧ- Ga }"OC_bO7F[Aߏ&D υ{cP( Vl=(5[S-րAa \xd }:F=%/} k%ݭ)+g0pǟ̓:Ͼ5ݚbo4,3s2OC2Std(zN5@Xh :<kp< +Ms֐A'}.8C[Bot,5t2OCgRS3F~k\rYMq\g2 O#9ȳްx.L \ T-WSGa 3's3pAy-|N/khJ4Dnx2<Z{NN<ۅJa.tm[O@tޏi2OCgJZY~|B7s> ^=g4r \ir|7< +kf='I>1u'F- :G/'s//:hG*x13Mݡ~0&dx._2O4f1bbH)w01$dx~Oct6o/搣!QZg!?w [8nx2<0rw@Kh4p4P{~~dx.II=tqN&|D υ q#E7 Cq*{4 fA|7< sؔ1k?y_(]/s3$wÓ!:Y&`Oũ[ܩoC/'óßoU R<q&{D υGO.6{:쑖,&FHU.mE.B00)BD φ? |tMbjk=C xg" OGvoRK), WI}vW?Om[&D υݛ9_\=ZB EyR@l;nx2<6oR|q,ӼjJ]Ծ6_@ mxg" OC_b 8Uf9_Z_5!6I's/ 9_\: =BB  oa "OC_b='*sU˭ ؂w1! dx.<;b! /_H]/({N/L#dx~R~5" /iy'}!O2k]th苶qQw8/L<<-2d_G> Fhz\Qw8/L#dx~OBIPՋ='n,^ڪ;3bN/V}OgS{e@򖝥q`SL< *nz,:iYcL#]h:L~0 &dx~`EF<lUQe+`qm/&D oNEfl +ox cץ2qLRw-L&<,uCe*LbYEmay܏O_ Og?\U R<tptptp5 dx.<\S$u&5^e:H_VyA"u{*ݶ|p|ph5 dx.͋O)^|nm!!F̈́wÓ:g r)Mf1pUVAmm!!.&3Lȉ< Msΐ!'6t3lc rVLRM &D υŔs)'5oXzúN91Lʉ|7< A9cȔW:4Pzc9]~? cy2<CO ?M֖~n:\nth39vOQ96oM118d υƀ9cȘ91dYm[.O9's1`cu2愂*5Pd[7֔s~˕3Q8sN\x%r{N:C:vFS-'ǜwÓ/ssKue"<_&M)\>18d υƀO#Z猱]2.ZXa>@ υƠctW<_3V][A3'dx.<4-?Q!3F[A0'dx.<2:gKgw5zced1L< [Zq`փ}ז}v}p^ aO\xh ťCx3.dzg ?'s3(: ~~}SM2sa ~"OCgsθ祺0ey][AIm&D υGœ9c𓾗t:4Pzced#.?M|7< ϋg'O*fRXded aO\xh \~J][<.^dMX!uK!2Fߖ}}RwÓ:6?Yc3v.kM ?A8Äȓ:3T9/ЍCݕ}~~R00 ?'s181kP!-~Cƭrٷ=Կ aO\xh Z}j1p*Ĝϋ֍`}~~R00 ?'s1hu5c s[@7Emg'u>cy2<WRg1]30'2nN$}[CI-&D υŧc׌":*_L߷E=D aO\xd a :c1Tf 1ڢOjb}0'dx.<4.>cf aCg資蓺X1L< O3+UU%\]J[߿7l%DOc Og?\bx8Bm$5?2$dx.<|ti{ u}sSe?_2hHj(}0 $dx.<Z9"m$[dwÓT-u2AV`7|ka_mrRmGa` B"O#k&9kLZiauCC3L |7< A{GsθrKuaΐ9- a C"OCgQ3t4t &~DD3L|7< AI9C` /U{޵~h ""uQȓtT1~A !-.aqQIGa`9"OC &bO'- EpVW9B]v(dx.<5.:c9Uug@R-}0# j" OCgfC3d)?E8c y}bbM~0&dx.@!CMܛ[5VWRRMvI5's3pz1|{Y:g#h ;G;&D υΠV9cSΠ(F·/`9cj@'@@'s3(ϐ:Ift$L -wF[:AJM&E υΠNsθT9(Zz:ed " OCgP!u2Eg(9C іN>0p@'s3h*u?+;??NZX\LmaN( L؉< ,n9 Ȱ~9W#E[9DwÓ9: utmJWsA :'s/hk*u32T0-sVS[9<wÓgN @U(]bIǖn+? y2<7cIƖcs)ܢ^1RIn*? cy2<J3L-2|4uRX]?- -'s1h)u -gСH:-uh0p -'s39gВ>t̺ORX?ee,Wlx=nx2<Rqns#/2z1,?n%!U|1'óßonAx8Bm >x? 2"dx~3t3Gv]M9LyD9e3dؓ|6"dx~*2Ty1 **U00 'G-Ex|ׁd1-l!lphFA4i\{G&:g(]3NU7}( A|7< |s$x8Bmq q`G8y2<n0ө±v]u3(dx6aCKp8}~#d8\x\C\Hȣ=>R-_nb8+W>3zyD*WXK[qࢋמH/8nx2RX hk6&߹3Lއ< AVIs_OQX^?!uhK6H&l&C υΠ9g 9gHa32 2?]2|? gy2<:6Rq&1 C_>ׁ\Qnx2<0rHKpJ 7(-pLi!dx.<|ri 'uX|o).E[QNGa "O#_#й]F8Ckm53L|7< av) dg@X댭θ?0q dx.i,xGw0ҍ}TC-ƠY5twÓ#:c1T-41n1BB6*:c y2<0jKpBB6}l~#dB6\xҎL[՗**IF ٺM_y? g y2<:6R!c6(yoTxkݩV/.>n% A|7< |s9->߻1![dx.rSTѪʜAW~˥+h?[ \x *L:tלsKY߮к袘rOWt n[nx2<դά_\j4Jau۟>у1h[nx2<ctW{.C і4voa` \xh Z^JG\\,.#n;8Baiq[ ?dx.<~Z\J/ᗺo:-Ï ?dx.<~\Ed/{/uVf0\ O>CKÏ9^K]e. M|7< __K?'J<)u}~1d$wÓpq'sث| lQ=mbsM_? 7"dx.<~\] U :@t (~\x8:KUg_ꇿ-)tR?( $ȓpiu\5\d%_tn1n*#-)tR00I 's1ti݃t2)?ER7ԖZ_ ԊMu/'óßoJE)P[7N- Fnx2<0r)P[!ޠ 6ݺ~#d 'sJ;.e/\ulstiݷ\Qnx2<$ ۠ab#h;6;cu>cȓp th X'u}u2C%tri- 1OÁwCNd7x2TiMCWߏwÓh#25cȠ.z0 JcmuG}Zw1's1Hη/YtHpƶC>Ļ~009ċ< AIб1rQFn t}mvXwԇu7jp{0u'sh1 :6úx-!ukŷ\1dx.<4-2AಾQWPa ,oԲ `#O£cpaߨ ƍgy\zےFjYz0I#dx.<4./&#'J Dž:]%#$( `F\xh\^LǟI㉵N 1~HZ~0 $dx.<4./&r!mɤ-z? cdy2<Z29ʃJtadki-W cdy2< @g2%di^2}eLm  nPy? ? |7<  @IСk $D:gڊAk c Og?\U R<pPwy2<> 28wO//Ѻ򞈩- 6a`"OÁ:_ҡks:lEh5-" ">a` "O£>cc׌![{ %JS[t8AtHm&:D υƠ"Eб1kƐE|usqѩM9p[4@ φ? \cP[7AG},`L< ]:ҧu|vcM*;pn8Mޘ({?wÓtO1e{Ɛ^.8mm3d{00's1p{ u5cnxߨtP5`nfl2?\xd !{1_fm|ArƘ۪g:=Ga` Su< A3ƐW WŸ" 1W[ʤinguSQDȓ:c ypX_Ȃ-jJ6.іAΐA{0p 's3hu2YfJXrRz3L< AO3A*L\1n+m! !nv? cy2<CGc\ !g&.|R Gh)˘Q5Le#dx.<.@XZe*17a )-{sSw5L< KЋ|-UEe?tKWbnm!=Ga` "OCc b9_?gc\&uctujhsS1L<  Ћ|-U9ݸR7-\ ľ[?'s1ֱ1k"sLGƵqiO\xh \{^>kLcH]u,mƐ?0=M|7< kϋr-\Tib 1ڂE4'dx.<4=/ wyYd'携p.2E 8'spy1\ *.Z-p4rږp2UjN\x %u뵄sUIe𾝡}t#ehs?13Wq" OCk:S5t'2+GnCce8inx2<֙Rq-\eƹbM3F[ƹʌ֙8's1h)uJ=i^?BõE>^䶅+޴Q„ȓ;a#bF: R B_e+d{( |a2H\x  }q-\ey񄡄Kt92AnAbwÓ9:6v-T.x7ԅAC_䏺( |aG\x >@g|qrG̡9薨uq苶qQ/L< }A O3>n9_c#Kqѭ-~ ~ԽGa` ?"OCcS1d%#$yGέ-~ ~ԽGa` ?"OCcS1Φ-:ce:O ǿ-e eԭGa0&eD υ+L2_ 7Bꪣ=( |a*)'s/:Y0 Y0s4.ڢ M݀~0&dx.<0E۵hsȹNh Mݗ~0&dx.<.0E۵㛊(<0۔- Ga` m"OCcZ]67mNXy-K}o[.+σwÓ:4Kv/Y&]ZW{Mxk-_Xy/gdx6am_#Ԕ2~ՓKq< \wuɽ2bY4*ٵBFjvy2<ڠi6.6 @W;?dK ƟD\x8KK_d|ɂ^*/F勨P苦[.}u12OC_@G]31d/K?|!uQR)cK_@C݃0g̓PW/.~ɂŝ!*֔1~˕/~y2<B7{RU|[.}K's/p}y)c|NbN~H]_wRb5Er \wr|7< }KK&G:tIykegD\x8:ZWB"?hK_0WI2OC_R/.UI t{&ũſl0dx6aUŒKpN%A}衭( Fnx2<0r)P[A֧+Ga0B&C υGs]?qϢ;= IWtma_an#w? cy2<6iRq-{3v[?uuO1Lڇ< A4sƸSnsOw1L܇< 7sƸ+&UҖu&r00's1ptNwk]d&>t? c Og?\n)PVC$Q9BwÓս`zG''ӥnhztQdrȓ=:gk\ ;cVTCQnw? cB\xh H]!ϢS_qzy]`84@[`ՃlS=|7<  {u@ބ ))R00's@9Y>oya RK00's9Lly1-"!"ցa`"OCRg k]T Og?\)P[$C$G=`L$< P8unv-q0ԺOVC p<c<\xh \<epƣrjWA9wÓpi.uvplq*2|vWxvq^ͳK|7< |sR<jUG^`Lv< ]juݮ=2Ԛ/Ѣ-k:Ai ߮RExBχ}TgY. C`-sGaS< '*X:^}>6x*!x}|}( Ɵnx2<0Kp F]8 0!S8< P:S62rب n-umQ|?  y2<I3s,'R7Εύməߏ&9C υł !,2!u\' F]h]Ga` Sh< >@![!T &Qq]m~ _4lŞ)@y8Bmh.@Q)@C υO.nǔl~֟)pN~oM Gt+Q'sbZuf_9nE(Ɖ:}M-l盫ffԳ Ffȓ /aRgN~JUF,]ꆩ2HJ&(5a Sj< |A=k&U3 RՖOm995'>y2<NH3lB(m gj&7AwȓT&u\6&ʏt6ݢDM|7< |s#x8 ⱏ RGٿ Og?\)7y8BmA/oE/a0BwÓpE,7Ϣs:!u-P9gUM+Wӫ1dx.<2g:g&upr[nLN}`Fa`\xh\MNEwhmRgn*m |cPB[i \x8='Ϫ"mR7T0;Ga` l盫U/j5{xtiU[dx.<|iUG:yz2"9 n2m2A[O  υGCuIGalJHݴUSiاF0a's@RF:4a<Ւ0cTڧ&0c's@qOҡ,{v\(\m=ˀ8nx2<$.@{fUNPzޖ͐00I's@ut\2s70ѺKɬ? ͞Bڏk[Bo1L< %ҡ1kƐ!o]WvZiQ7^1L< 'ZB^'?EU.l )_۲Ug3L< FǞdZg(gn0ΐ>+:cms({Vnx2<:)3X/LU &n,6gu0pI.'s30]r<<gHa?TL@sӁfݏOg OCgTseSq9n밵N9{~0)'dx.<?B V:_j_e8{]q? _y2<B_ 8*tPz_py0Ƕ? 'óßo.K@x8 "Ǐ,^E O"G0۵8۰ tE ۩N  oyBf_EZ0rucpy8mwn3 ?g3wÓ?*G!q̾H7pOƟ~ ' oo=PL qϿE_0?U9+?V3wÓͣ_E(_f823t 2T o0T[?dx~,t!~˃]Q꺥. ;\?:?Ɵnx2cW\9P\Tg]qFT 8LL0|y2<ZǮv2cWh[.]J>H|7< ]JcW\jRgmqFڢ-;6O00dx6aevDKhӼrR[9BwÓi =.0~"Ot<ܳߚma!F=7!dx.<~8E:ZxJ[CHQ`M< *Aa`- <% - ! a0& D υO=y~d~=~ ߤ~ȓh)*xQIg5=zo=\x8ؤܳߚm9^9==79dx.<~\]_ No zA 'sb`_ k)Yh%ri \wÓ$:6,)?E?q(~\x4tpNki)Y8miiz? 7i dx.<~ZRd-RRB~0)!dx.<-AǶZzxJڢ-= = CGa` "OC[tl Nk)Y8Ïoÿ*ޏ`'óßo"R<ozy2<>T :~@/ )nk7fR_҃0dx6aKKpڲ9݁~#d9\xv\{pevd-22;ݕ~0dx.</fv^ޟ-Z3- ӝZGa` !OC[:bf7pf7\Nɢp>Ï|7< |s:Gx8Bm{? 2dx.<|@i:|@kx-V;% m&0Ր'sJc[px->;% ->!>ӽrGa0&>C υOǫ@?\jd-ڊF( tGa` S< mA@ǶZ)Yh,o,?ig޸%'tk Z ۧ ¸<\xX z r\k.o>h7&>{ 0'sa-piyq8_ŵ}Z Q ā&A-@D υw3&kXX68j8иS0ȓ(kkXX68j8ЬS0ȓ(Z-ŏbQ-&LtX0q{ 'ówÿ^\yD 6c9\!lWC )I+f 2Jy25A!:'@<@S0gȓeUߌ+ܸ28mlQF3oOF!O V9W+ohbH1{:)0< *u!*&9vy- V9fn{vo8wÓ9S߆6#׹[`;jJֽ0['sah9(s|>?T_2x[+sӛ8=\xXZʜY*' Vpl\dx.<-eU%,]6rP)8!@AF"O£ Pwȹ z舏SZWAD υʹ MY=(؏g0@LA\xX\^3YI@- a vh"? O rz/fg8Dk6vax2<VvpVziֶ;fc'sQpb̹ ^@f8k1vax2<V2g*\3^@bvga-"? O rP\.JGd_av_-"? O rP\.zC W.`qb dx.<-eU"%߭ `FB!@\iT9TA\xT!(slu} `@AAD υE;\@W@\T9TA\xX\^ EJ>C젞LAD υE;\s2X-fz:~0vy2<VvpU@+жwp;'T`Pc'sQH;\.r ma56 fWzJ~Wax2<V2g*\3:X-젞TAD υ̹ \3uzfWzZ~0vy2<V2*vp?~c~ ? OgziC MrWwzv~W;\x!WϨTppr^'tRqs0Ó_/.?WM p.jdx.<\2q~c+~sc6͵p,j\dx.1x= ru򧤢{4` F؋6#s01rȓ$eeבϿ¦l[:U$OA+C υ O 9`III7q&Ua>=j? |ȓ`7mj+@;аmp~<  @ FqXnZ7W jpf6!? O£ .-yA檿lF<"? O^rr)Ur {#Cb ܣvA1{D υfn\ϵz9r}/-[[z@=iG9¨G\xX y}L9o0WPYM[H=h?V< Z1;.}䦼l[9A[z~ax2<_B wxoiDa5w+ A0< bhvY-BO ? O_޿/y%C{̉/'>n1(vM|?? OO=;xF? +\kQ.V A0<_ʅHw`s0dx~qt+>(vؠh6E't_.;ҜS#? Og>#/w~);y ? O£O_w)_}5sRG=? O 0`Iw7Ӟ E/hzq;. @wnA'sᅄMa:׍z7ym?%~}gؠ6S \xX z9N)rp^FPGg UAhG{'saC+قOT`d7!Vk6=ك)d`P''sahE)s> ;!w۬e֒FA/D υ̙^+i\WwܷI%%;o%dx.<4LכiKiytn+@?ڥ 4 za%dx.<e j/0vB\Y,i)8K\x \Jܠ W} PVwro,i)(K\g1s_e/Gtv\hs=8K=9n?fg< 2Wq3xb4]k=آJzN~ax2<~7f% {p4~ qȓEtO~'RM0mBp݂G=w _lWP+O << ?7@x=nANj@nSO>`p'ówÿ^\~B?P `p@\x %.s:OSѹ!{ 3's's.s]}$B)u:C phЏZpl_<D 5W\=p?+g1O£xJQ\E.Um ktBw\W|Bdx.<UB'䃒P*Wߋ##'sa/F3;gZ3kB{ ;Ԃax2<ւ̙Zlw亵4;.kAwÓڔ!ǵx9L>6!zx֢M獠h )<\xX ZsʜŕI"2Wm{E5`P \xX ZsʜEjs:;=hS#E}~0jy2<ւ2gj!7b{̏:R#fG0z~0y2<ւ2gj!#~[׈M-kյ8B" jH'sQ-CB"FB"EAsـ9hN\xX \r^Ӝ%9Jij!5gu-4SҸA-D υ%59JIˏrZHY]ӝ?/.9Z? Ogzlxxڄ‘2y2<~pi\pxoިLSun^u f ax2<^gW s=IH_Г4">,hj3D8x 0y2<Ղ&ꜩoEMjT& 7y2<^z!Ou'_?mNp''-`pD υןޯ9s׫&M-;s =q?? OgZ#(^`p?lWyxO'W,>Ó_/.Po?3/[ _ ? O_M Jؽdt'JJ.v䋟=s(x P K6b94 J`\ OKͅh33C;TC"d g6~ ,m^b9^lW?P[@Ũ<\xe%m$n[!u0 i*ZD"%/F!? O [2*o hx h<}L~0y2<V^r9W=zv-xb ]*lF[94ø=\x zU\3-JmO,e+63s01{ȓG\-0 .sӥ- *`dx.<UUޢ䜭 ~P6ًzÓJT9W}&-@}㿥M- aTdx. hRqY\':d~ υu5u (h+Y0@9 *!dx.<gNV@ @ *4,2? O:;|d oh/v@qaP ? O£ !:g*{o埒|(Į'v a|"dx.n#M=f< AJsOR?XTY,#M< ˈ< *Eرe,?6i8S0ьȓ|;֌: O^@ggi^)txF\x\(^ϿP>ecLNF?"Of~X?vD7I˰c2C*W0(dx6n׋1GWo363ʹ:߯dx.{곾Æs0hdx6n׋ou+O ~ f2 y2<}viuUrJR}RZ*fAeC υ /slzel lmؠL'saH˜ؔkwd][Sy4|dx.<v3An[sjm*ΎAC υ=2*J `} aE`P'sQhXι A4C AC~ φ zquφxxL&Ne < ?en}w"cJ*\:2MkAX67Ss0(qȓheCz8zKc\ 짡n2m`մA16;\xX 22g1bCAmhb]{kWfh{7ӣs0(ȓ}CL1 z5:5l@^`c'sQX;LV XTp}`Wyj2lm'7`P 'sa1prۥ i ;X8T m[F0z~ax2<V2?y1! mPz"Ob*SL1.mZq= ѩHa16` a"dx.<,2eCQ p{oG~p$ü0< '0!g!_ƟYck69ԣs0(Qȓ9SK{ G8otB)zMq8 a'dx.<,.>)Q*N]tO8m[ GjJ`P y2<~7c++Gp4 qȓK d|t/;}ʷ*Ea/ WA/D υGU:gz! $Bn.aփ}ı@` i|)H\xX ژ*s>1֑odp*hOmqHӫN ? OоTL'qKtp+BL9ŷeeͮ:? OgZ!(^-==k?+ddx.<9$&p>?HD/h{==k?b< AWL1ܣ[I::MM뷩Mmro adx.<*u)%7!f oS{z~0ry2<̙bHGg Oэ춮m'ؿG`P y2<̙b!/n1`c"ڜNQ)"ObSSܝhv`M*N Qz9HE\xX \|^<) !`#N`uys0hȓzrۥ ݓBR8I@~ υŠUq1fKglSmjsk5a9øFlWC m$5<ٸF\xѥC d|tYAdmRqf#'sah̙HH1hܑ ֻM* qDl"dx.<*(9S )uYAdmRqf#'sa1h̙b\:pRCdA4I"(TD~ υŠ2gqYAƐ/Eׯ1DA*ԲHE\xX \e^%8wm=I"-TD~ υ58TG|aIf*68TęeATD υ Xpf̙HHKʼnT*6h HE\xX ZecR~3_Xn[*OXYU\K N7 a^F υŠU̙bȗcG-o]cm]2'sa1h)sM.TCŐ.Qa1bhŹг(N\xX Zeʜ)ƥ}4RG1˭tۊg`P 8'sQ1?rRq77L6ŹhŹe9(N\xX \|^ST!_nS7\־Z)E+EO-Fq"Ob\ĻSҶorъsCs0(Qȓ88}/RqǨ2XuihŹX9(N\xX \|^S?bH<4ck+6  a'dx.<*9S i>1"ͧ2X16Q1Ó9.*'}c|-:Xm3+O*0< AO3Ő!ٙ/;6QS1Ó9SK#W)0|ߙm\|՘O\xX Z|ʜ)4X ̗k'ZD~ υGT2gqis*7w5 ֯1ڎ\|Ⱚ՘O\xX \|^34W)0Jt*cmsgM`P c>'sa1py|Э(dFh3+O=kj?b< ks<*ͧ[cHYhܹԳs0(1ȓf>Wܹ77ɐ[#uk 8H ȓk|RpSyʿ?Bǩ[@pIS9^ \xX Zcc~16)0tp+ט[@pIS9N\xX Zcʜ)ƥ= {@Nb 4A1D υŠ5̙bHRpG1a1fkoz'M`P 3[y2<~7 W4n`qTfL#dx.<ҹQ2g>XnR vK&,Fi4⨪͘F\xT U%sXnz %o~mmqӈ6c'sa18)3Ÿ&1%;708j3ax2<-9S iCFcJwLmm{,708j3ax2<-9S J$7dͯmk+(H=ij?b< k |X eݛ_:Xz;;o`~ υGb?buC*H,co~`_,,>O 'sa1`sW.>:X1[,,>Oǒy2<:gqe3jޚw\`P 6̓9S+{,=V{vw\5A1|2O£bи&3Ő!'{ z6'k:bd υ%Ys>S]']o&'O\xX \|^2r+ ~P&'O\xX \|^2Ϙc<_@XoM;.LVÓʼ8˟CgB1.Fצ8;P4|/dx.<*k9.F8Ugtm.IsNe"OrRL˔DJ*2OX Ck״;.AθL\xX ZNʜ)t]0籯]IqY ZNve"? ObrRL1 z`Vn^2D~ υŠU̙bPqnڵIAD υG ӊ3 z_YN}]Ӿl.'D~ υ 5;I;8諃/ij;'`P c''sa1p9yNvNңNI>L]NI9I\xX \N^NJFo@NAI94I\x\7^?G|dVYmvvr|/dx.<(ƪ!L>JS mҲrs0(ȓʔ9S )-꟒Co? A1D υŠU̙b\Co? A1D υŠU̙b\܀~J)iۀkiI9HK\xX Z|ʜ)ƥ C.!X}W7zW/.`P 2'sQ1X;L1ezä͐.7eezP~ 0.y2<6W\f/]&mtL2WMY~e1pi\&dx.<,2^L\L\u:Xtw\We"? Ob*|9C_%`?~cl-GP}AAI9ax2<~7TGWhh:o;.?p)~'sG&-t۟~y*"]i)øF\xX 8TL1.m(q ) a1\&-A1kD υŀHuAohS!EG0 hHEt  0Ry2<6N9Ӏ %zC{Z6{8=I`c'saz3 -|ݚ)`9&|[^ӐS0hdx6n׋=jxheCTQ >v }m1ڤRQωF*"ObSL1X* R/ۤRQF*"O*SL.mI2t2X_:mIaK"I:b-ȓʼ%|&,F*mgB8iL)(N\xT sRq3QT4`ac[#(Nt 0y2<WxIqT':X=}[1@qҘS0(Qȓʼ8G8C+Ns_g}iAqҘS0(Qȓ8·Rq':X=djS(Nt ax2<2ŘbLz 7 S 'ID~ υG1I2g!~-O.ZDhU>$Mq"? OfSL3.=)U9o4֞79 'ID~ υŠէ̙b\3)oKdo699IQÓ9S >-I9-. St(iX%'P8'i2ax2<WocOJU n[m"Mq"? O£@$3 IN /8U8 d&N>D~ υ 59IIceMfN 3qdd&dx.<,.'̉!/Omrk#~k< k|xC#"gmrkfc-'sa1h(s\YZKz2:_=BR6f`-ql%dx.<*N>9S i-cz 3=āHÓʔ9S )-i9뷽ykMZ -q l%dx.<,2eCJK#$e6i9āHÓ9S )-C4?%zfOIAZ@HK\xX \|^3KYnx7C妉%DD~ υG H2gr:F?m{|if#-'sap9yMZC!ߏmo`'ql$dx.ғoد[p=LA3'ówÿ^\cxx% qjzLEVg ޖcۭiw\ !t ]̓_/.tje]0`px!dx.<wș-T'*뷑+7l&OWӒs0({B\xX /sWN?|.CZ/F>b6S0(C\xX FsWU?Sbn( /l&}ŀm`P և̓@L1D8zP /FUb6S0([E\xX FsW^R~m]psX&'[E\xT rhB4YUd~ υ srO"2b4*~:bld υݬsR6oVcbtmHNb ? Ob9.FweO3y1tM{$bD\xX 2g!$%ퟒ?h[ ޸TMqv8i$)(N\xX Ԡs=2;36ev2i)4L\xs dk@@ZҐS0hȓ9)-ac3=hf`7E)a1F|e1p9i%dx.<,.'I<>H;Y߀3uQ4S0hdx6n׋gW?&D~ υQ2g>˥/o}!^5́b==D~ υGS3ŸF3uVck+C=j?b{< Ad=.=*8s݋[t w\6/"? Obba/h@%짡n{7bC\xX ڼ s7F/hvŐo4i\w\Ó9S+0>S/4Ci}Ӹ,->{#'sx^&QkR$i+e8΋^"? V kD~ υŠŧ̙bH: ?%꟒6K/ŧqÓg${9N{-V A_OAax2<6H6Hj]cȝk6K|"? Obğ%0m12/FOc>'sQ1#;L1m'->:!lD$2D~ υ U5/&FGTj_vBe`\&dx.v<0mWu:E%,GN;. :b? Og(^67cs0BF!OÏ.ɽ1d\ʸZhRX67Ss0(xȓ&F>qoQ2XfFuz|~ 0y2<6lx֍0OTn^xٺlA1C υGж9S iҹb`}16Y7SsÓqe/~3&yf9[^Z94X9\xZ6ʜi[I=w'rz~ 0Vy2<6֍2gVn1M hK8^B==k?ȓn9>Uq!2XH&~8Uqѻvضp8(xUHTMCΠ!|/dx.<,2e1=bɈ:x=cn38Cs0(ȓʔ9S gj`Cm rR[FN"OjRLXNr_ep5<ܤAD υŤ̙iJkmnr7'`&'sQF;LY5)&!gzz~ 0y2<6$̣]f=x:zV h;Wqۨ'`c'sapx6μqv5@жq$`'sap!xM+άge'mޮ?Y6D ?dx6n׋ W#Z霿"~ υP)s*;Lo)~U\%GnMB|dx.<Elj!8WעM.v  ja"dx.<-/eBEZEtz mRT.6؁]Ss0腱ȓ9 w;: qa7okپl.0q\x \`^پs>zWz6!1ւ-Ys0hdx6n׋e)s0B8dx6n׋+PP@вs0BF!O£oRZ9M*՞~CB PmĊ$>M}t b ? Og"(^6փfSs0BF!OÏ.7tg^3k)v#Ó_/.?WM QaȓK72g>R7KGW*Xmsa=0Nw0. y2<nleC0,4Z2X_6փ t`P 'sQ1`>L1.[RTM`p9è0\xX z"s4 a7;|ȓxpm7_Oo\ș `_o۸=^w 0'sap9ym^O|2X߀4-|n @0< C m,+0< ?}r6iZ5c67hÌs0hxȓ=\p^χP>nmן^m6fA/6:\x ZrB ~^mp`P c'sa1h/sb1C/F==aZ9C\xX 9S q`}1aÓfiip`}1>oì$s0(dx6n׋F+fmz@yW=\xх se]RW7`}ca494X?\x ?fuSb!h7]}=L<j]}ȓxpmW@߼y#@mqԺ{'saV@fG%{4ax2<nd_ny"(<< #*!gW7M  `"dx.@趙L!L<bS< +kG) i(wb`}1[t"~0o"OgN7oY ,nA1eC υGwșbmzlnCѶMomzz~0'sa16@L16=)\1dmo'`P 'sa16#7Iw!h~H?=t?f< ko')2S뗙m'wf dx.rWEPq`p'sSNJn}YhUzv+4qidx~|nzҽDr?XYjuп6 s嘗yv o3 ~ /C|/ϻ/!X g.F!? OKL)G) ;E:9,sStX sK G? O£ G!\+.q`P'Y;,Z?E?:Xfz~0vy2nQn\& vke6AsÓR QVwksd  2AC υg [omP~U3Z O!O£K41}|Ƿ - LAC υ 9Us*@[A9T:\xXZB+n;ܷ  TAC υqXխr^gz^ +&VuzH~0y2<V:/H2qj!Rی+ԣ s0h?< 0X;L3UmSmpp3s0ȓJ( Wrso*8S*MZz~0y2<VWpU~ hX-IMKA ? O *QKMPkd[`k!A4D υUΙ 4ܤ4LdV`kA4D υG'O)g*pSotж& 7- }~0y2<V:g*pp1MnZ *`!dx.<-uT&_5su+& 7- ~0y2<Vpxc[4ܴ4 *`!dx.<./JÍ7mJMV[6;i;8q9TA\xT=N9S|حdpjvPO"O rnJުmvp;G`Pc'sap9xnl7%NiZ*)V\xXXB+̉ qLd0\DhqUu `;< +Aș |l~dU~e`9x `;< +Aș | `Q +dd;0< +kvВT@R u&; A\xX\^Ϝ|,!8TnnMv;.+AÓ4 rh8z,eV5︪M[: d υ5; g-T[ݚw\Vl'sap9x>sr[ |rTv`i)^\xXZWc;MVvmv;HN"O rPLvJc:Xq`vf*AD υGg0)g*vSo':8s@G9TA\xXZꜩN1A^vmv;HN"O rPLv?C7hAt 0vy2<V`vvBrmv;HN"O rvRo`9f;4B *` dx.<N 얃*8,k@S0ȓh;|Aw`kA=g? ;< +vc;IoVGmv;HN ? O rP=^ l6V`i)TA\xXZꜩ^A@f{z8~0vy2<U@¹ST`/Y `Zo=A=g? ;< +@A3`;_:Xm6;؃1`Pc'sah9sl{ibXܷAD υE;س>^V mv;`Pc'sap9xl{%cepA  9 ;< *'l)g*vWouPe}o=A=c? ;< +AɵW sMUfńhs=A=c?7< /$  ?%y1Nb mpc{1'srb l y!@ z ~0y2<^H@9,@'`p3y1Tmq`P c's֓8b N1x:EZ@-!9¨E\x yۉ .6vYmjq'`P'sah5sv}mjq'`P'sapxQ-vy̨gUuCZ@-!9TE\xX\9^TAB*V4Ah 0< .p)g*jqP0>QyhPVM-Z-z4~0jy2<V7yQv&-G=d? < +x8ȳ͓fjϧ45G{'sah9s\5stp}!ql AHD υΙ Q=h* MZz4~0y2<U@?ST7Kuұz4~0vy2<V:g*vpzh QQ"O rPLR `}G`Pc'sap9xlGv!6;8j;8 9TA\xX\^#Q]* h#A=d? ;< *p)g*vpvU3V`h *` dx.<./(%h#A=d? ;< +vpd;8J* vP ? O rPIn2䷒enf1 ܠ AD /-K=P}}]d*mpASM~A< pΙ/vOJa ss퐃N` qd!dx.<så^('8 sISJ@%ɨD\x zYL/X%NSen}}ujD~20<  @o0˜Y1L%IA>EM/Nq&d"dx.<,L9rz=͐5SR,xooLmq` 's=_7ohNBp_KX691ÓRB cUŐuSRy ^2 {Ѧ''Г8Pc2zax2<W*gVl''y_|P ^&&gp8Mc6nax2<^ZH\w|)SR*/6e9QÓ8bC\/XV=*sCU*q`P*'saIA Ͽg͂A 3s [IÓ_/ީ6' ;6$'2y2<~P_?s*?^Q\tkX6u8:#Fs0QȓYIoz=Y*ӏ PO"OfDs͐`g^f[_o3C=d?f{< !!!IŶPl$ 11%9C\xX (sqV~7`wC(A1%9TB\xX\fG9ag*qe.2a/\ݪ]ݤ` 'sa/?_]U|28PlmVnVnSsÓdk޿7>pS]iJ7JwpɿWax2<^i2g~gu[7@j7n^ A/'sa/蹿̹^~im)7M֘̍Gny^ Z3 ~ υG3ys&6yoJ 7r} uGA/'sa/h(sb/ tZmc7Nz~0 'sa/p%y W[A[m_Nz~0 'sa/pݩr|>@փ2Gf7m'$e?o dx6n׋+;xx6c's'˜vP/|Xpo+іmzp=6'sQ1p#ߍ$[\_woax2<^~xst)q8Zѹ_n2w\pS0Ó_/.~?P(,O c υPXZ.1 '`\nk"l@ y2<6ΙOs>hqqY`Pq̓~x?}zdN naw\5@``6o̓K@ACiG޶:wEVPlz*~`<  u.@ PZEl]\xZa/y`~d3ߚw\Vo1? O]wޘv/;=q| VykrxqY؝} `< +7׎{d{k@6ׁȣa{'seϿ'|B6UiKw\n^@\x T^i}O|GoӇC=m?o!dx.{]mpҖpss0"OOKEIFjg֢N4 ja,!dx.<-!ek!-o) PZmIęFڝA-̖D\xT is\QB.XԅZ`}-nGMM"? OZ򒛜xdj.-lI $$D~ υאLAqRp)27aOmqۨG `pmD υ*ǗQ? 2畚# I7I $QA+D υ% k>Pb~*V٦SMⰵɸI\x &s 8I i~*dv0I$$ZD~ υ2旛g98:ue[+9?oL_OP .?dx6n׋]&WMΠqlt dx.{;cخ`vBҶnuz<~0'sa-h(sݢ^X>%ͻ떏t={z= k?? OgGPJO蝬mpG`` 'sa/h[̙^\iW~B| sZD~ υGaN2:UrMn=\T:å. qb!dx.<,x9WZ1˶Y`\41*,FL\@&D\xX \xL1kŐRbѹɐKK\%8ŸD\xX \y+vM\؁\"*d| M;^ lW2C |2y2<}t;6=>>W?ԮA_mO { Za!OV9ӊZ+kVģA+xD υ2g&?k:qUq&-L6yԣs0(1ȓ@\1kR!rӭrڦWPz~0y2<@6K4v MK3 :`<#dx~ZQrx*߷hdnk ڔ JGF)"? O£ dά' j*O3_ *7վ\ " [PD~ υ ,srs"α͉Z#kW m:q#V'sa-3˜<NxZk?j!sDnm;7رc6cax2<ւ,q-6cNx䛶nq׹ڵf0708jl3ax2<ւ7Ȝ%B?"ڏw$d[+7om s60'sQ-p̙Zci3&_GDnKέan0q$f&dx.<-9eB*L;١>[֢`n`0į ja &dx.<-9eBZ(.BDR_"OZSnZȭPjܠ\ ֦47Pz~0Jy2<ja3L[ܴ\_A-D υX$;L-eMiƆBסgng.8j3>ax2<|&}&..?'nm>s>sWÓ373&79m!sѰíg~e-`qy Ղax2<:(Gxg7W:7Tעg~e-`qy `< kK3>k$Ȃ\34" j>y2<ՂFd霩ŕ'TcrKVc5︬,9O3'sa-`ɩsgʯ?%}2W#3<Zd υ%ΙZH '?S a-|w\3'sa-pyg?'๟hq_27֝3ܚw\ל,4'sa/pyIh>c~Ƣ^Ћ6h2q u `< zAótBZ~M;.kNÓ"3L'XyBpk2qY \vd~ υeOd{OM^SÓ_/.^gPFxBǺC&;z~0y2<9Rw3 U`P lwWu`~W>\xճ3z =cD}:7TʾMu  zaddx.<Y`3w\E0s &\̩oþF=k?{0< {AXR/+=>LԹ$mègz` c'sa/h̙^\:j~G27~_ 赟A/aD υ2gzq0Iйߑ6؃al?^È< zGh!gz0G: ~/?j!'T-9Yi9lC φ zqe?PvѰS0Bf;dx~;]oiev׶#oyz3~0;'љv=Ҡ{suM, Óv_?5{>scm/ڄQA/pD υD3@|e> id)FB6WE8J٨Sb9[jG. cm6걈9tFp4ݸ&G=2E6n #t<n<_\t}9n{&=S+{^jlS#(G=6s?j<_oD"dx.{0< {AH^<϶7r3\f3gm3W=0< kAK3f2;)egdn36+D~ υU̙^\gDF,-gc1'sQ/pO̙^2Bߋ6S9kSS< ?-/e\K6WJ6B‡"a-$%劣g#)'sa-puyMR>^̝f|![N`؋6y9kyKჍo<.퐜Y몗mbsbss0ȓ;ʜΐbNtPn=qnS3M= }?b< ߍCCn?%e!3s)lUODÓ_/6J"(]mDϖ8Tw !? OÏ*[Uď"7;qGnvZ>Ҋt?;ax2<}2gz!_Цg*sSUoƕZP  jA0< kAYL-{q2׾G m$Z? OZl9S=X3J a-ƶZzk~ ~ υGS3Q5V[LmL-'sa-pymX"]#(e-T#^jKԂax2<^FEoxw0(dx.<)XR+7@v5G+T`P\xt)1wqET@o^ +r 9Tax2<VxW`t3!1Fg'(Xim3+J^~ax2<B.k^D;u?z!s[`ꡣ9L\xt}!9wq/g[2B̹`n`0q f &dx.<;/#?йhIl~e/`y ax2<֝^^Sd;3ޚ|w\֝` ̓wq/^Ho /G?(W{5 :^d υu'wsg*fBÝ϶|' A:^d υu5YSF?z_]_4;w2? O^,χ[B=M;.{NÓ;9牣rM[&dx.<ջSg*8<8?zrKoMO|J$dx6n׋S"?.Hf;m7It _!\xA{~/\'!};%Wxk:o!dx.aX^L'w`oDeIf: ?ZA< Dcj4Sj? T'WQOs8'B'⣽~ؠxk? O"k' Ot ?:rcƾiw\vwax2<Mr/ɏ++Og tPs *@0< *w ]{&?K^ɶL|KC `Pz_g}߽D?o+^[4 rs0hrf υ_2(g\LEF??!] { ;tax2<7n1Bl8ڠ>(8Tc1mjHNF-"OBx[jjԹi;2wbjQIF-"O؁jgrx6щabjf9AZD /ށ7=o^w!.= b;hs=8D=s?<_<0t4{9"%|G ƾ"`i|)XD-uMEسE OsQ68EԣPsÓgzQcֈҁ3Y\ЦЈ4 :`4"dx~ MӪKKG\y?: TN68E?9tXDgE \q-s /@C!ҀS0qȓ߂ %%gmpWU~0y2G>ʅhD=z?<_˅hDF "OtozrD? Ay@= 7/V2QF"O nD.Á4`NT-q 80<_y~Mj?j<_<~7t>E7 _@~<_ -h3‰|l|!dx~-}̾p mpc811D~ /`^}D?oY10mOE~- ~ φ zq1C tL:w0BF!O£ی?ؐ*9!UNM?nl 6OٿAC υ!`7+%> Mg{Ó_/.?PjAt=Ն0<_<ؙٯ݊jt)JN~Njnep+mm6 QmÓţ{~^Vm>oH͵f6 ax2<(͜kk2F[ʹ-`f^iC~ /t`VD??9= T\ >~j?r<_^`T_tV"_2x[+O\dp-?Ó㕧~^}"_I i؂ l[.fdx~q:iћoQ`WꨥI.$l?'<_\P墓\I.Is2nXڜNr!''0<_\|E'\W v$6)\HJ.FJ"? O,(%o+V})6[\VV"? Oƚn(֋r}݄--OJ`%N9XI&=X/ZɕZ?L*F?"OZ"zQ?-pUo 3.k^< QA gD /zF~B^+{U‰׌:8j < q%;xF/8^d)*}·:8GϬmqѸh\hD~ /W6><^RhWϨ3WZvI&79~0by2nMz;.+|dx~p-xD8\Z]Wtkr{qY0`Pv{̓õ*{?'%?C 9 +$qfAX1O7a3}OLM`W9p5︬S0; ~\twOX8!AROMqY0`PT<_<\ වRh*0r@3=cӭ~eA2Op.gLV@M![r~eA2Oo |df}ЃR[&;;x `;<_n;N~QrԵ9A3D /%ye`g)w3c:umΰgY"O+@Z ;QѢn2mQw F"O4 ,;=_U&`nP ` dx~^7`'+467؃ "? O `n ȑos=`o dx~`)p3q ZE~GdpDзܠ "O+@ ޙX]67؃WAO "OCp {0zCPC{p= "Oa`/Njj7mn7ؓD~ />! \=^:w >zc? 9<_<# ?_=^:>VbԷ`Or7rax2q?9<_<',{}&C2.5*0Ԃe?+0<_<,@7Fp_n; mrp99TA`&t|kG°IGp#ѸA{?Qa2m[J GrAD /%q Jo[ GrqÓ'Gv8Z@or>mnp78D~ υGC4%qX bRqcA E~ 0jy2y? g<_<^W0D/k4$@3ss0qȓCmLh& '}$Gؓi6i84`P# 'Gwa4]KI?L7Mmpi844D~ /*5i84K T{& 'IHC#Xkp| @sNdgc'j5;87F_.qV`"O`wvC vP빟AD /AQ8_3YEȏtpo=>g? ;<_qa?m<_<.\+[U?s T0>o[A- p ? Og xxڌFO2Fy2<}6z'srp t Óns/s\@<>m <? OJPLp7_л骿w\6V`\xX i{ 2X|G}{7`p'ówÿ^\ܞ3(^|GrRh)\!lWC 5m9 =;9\!r< 4tcN.^K]_(P\Mf;.>kROÓ_/.?Wiw\}t19\!#< >;\_)`Hu.܃iw\xdx.< _VMl 7ax2<6 x= {OI xȸ΍]N0j̓`)ǽ;h) v4H a/v}e/6w0Tc υ 9EJ^\}/ڌZ'7Qy2<~7=jڨW\F F5\x r$=;|s?~sҳkړmƧ`Pޓ< /%l3V7=oC08VMu r5xÓR[o|k D+P)6li(dx.d]/e\7zarq  z1O^-?UK^ZԹ򥵹os=8‘~bG< .c1/ >P/6q؃8֠7ax2<n ǽT/BiA EM&N46ax2<mb/b/>^xJǸT1'\xLj0< { ϋQoSb@o\9~^K@b? Ogt W`'70ax2<~t ayZܼԝD4m(8ѭ`6 "? O£o^ r 9A^V3E{=tk00< {A^\(8#fZ.s\68{`0ax2<n ǽT  Oo {p3 ="? O^Эå 9¼ o" mq8w0(qȓCG>P/68{qi#dx.z1 'Mb>{0< zWwq/F>)p`}fAD υ̙A283sfA'ówÿ^\=DPm徿M  oȓJBM_-_,fFl4 `,dx.<,6󁂣f넚]9(lt6o67ӃsJ#? O+M 5ÏlRZm2yI{3xA7C υ)Q؏MҏMz_O#NJ=~ȓJW.<0c3̕+&&-zv Wڈ6\xxi6hXMҗ=ޓ8W}OmmҢi`phC υWjrf6)1f _66iX1jÓJBFmbl~\imԢ`n3j6jJ0< ~~W$ԣgr<}dYNU~>)s?+M0< %j3a6a㷟2& y2<~iWvI.sU= I 2 #Ȑ'sa/^{I`/\s77q&ldx.<,b|bԬ_en+sNA4\x !9 -mP/`+s/mmf#ߐ'sa/ML/MHPmƬGn `Fn OgZ#(^66Kñ{2. y2<}DqΙx[)4խr_mmcfcސ'sa/hsfynހ7{2Wor397!0<  k?M]| udn\*Im;f#DZ{A1̎8\xX \_|y!['CѦ gІ\ 'sa1-E3Őڐә[|:U1ikA/6D υG)gz!__cfyފK\xSbi D=5o?{0< {At{HHX4^l"\MD~ υ1tBDY;p|<ai D 0< {AcťQ!Q!2W}Ҷo8-w0< {AN3?%[2W}Ҧ6P8-w0Qȓ8-PL/x"]P<zis 8L0<  ̋|oHetiS ME0< { ̋j|i4 ̶ܙfg"dx6n׋WM1.Խ QȓKY']\McÇ##J;J~? Og(]`p>jdx.<|>熫$G6? 7 M뭠p@jdx.<,uV &|n(sP_ΰ[v=N aΰC φ zqxx M" Æ< ?DGW6aZny|Ͱ`, za dx.<-uBo?%y1b̛tA1yC υŠ:gs}*bԛ9è7\xT =BN9S CUskM+l*ԣs0T< {Aۍu[1z2W]63s0(1{ȓļhV6{2t].\W[]+s0(%<  kɋW~x\m6q8CsÓf9.&ҽ&P\ڼP za!dx.<v~X3)ϋ!sh~@=n?bȓf9SK{ՎlROV"O^RRL/$)[G ?z'{TҺ}d+ߞ3lz ~ φ zqC i #2y2<~r@'Wnot9MсUa/ڬP"O^Ek]{ySoT֦ 7Іz~0y2<CSڻț~@\3[N@'9D\xX 7\~I҂~ckӉD=n?<_|yto1 lM{+n7^߻&,&Me)x? ϜhMm|xI<_>U)\xl{iwP]!+| Wax2<}Yp|3&?rƍL]_3˭x︺d?O0< ?l ֹMoG*1yY27Խpܚw\^{ ןax2<^xOW1xe{2a~ ןax2<~7/4j2oqx`pؼ1OO(YNV(ߍj@.:!.lEvVʚdx.Fd -@ur*O<[uq\:\x\Nx+P:Ц:;l?< ;>LpW3h:sX6oio7yw9Tx;\xX\Iog*o> hoc~ υGЛGn?q_T_2 9c/tmb1ǩ`P #'sa-p( >9A-g,с,?z!7(m]ǩ{/'sa/h(s܋uaߺ+rҷd7y2<^Z4ʜ, {P!6m^Oش 1Ogzxxd^2O/ <_}0^k@=Q_ג iչcؖM adx~fZr3F ڪK'7%uu/}AS0hȓŃ"n0 ^7p Vs3drҷi4nA3&D /ތ}gh`Q}藹m}&AS0фȓ+0/-rm|>MԹj` a!dx~f̷^KfhgA?c*S碳j "Mg<j<_ ŸՐp+͐h;qԌ!|odx.ڜN&SA+D υu_|Q?2o{.,㤷}uF~ φ zq C d!M<+dd!dx.<$CL(_Jp"<oї{X6W8+3s0qȓIq5Q<͸E Gzj~0y2<VVuj\ - +& Gzl~0y2<vb׊E}j1T*QsF%"ObJg,x,r\Drl#D=q?b< A6r\ OŸ \?; A1PD υGXoc\PjpmO27Db)A1RD υ'H,z鍋rZh#XE=q?b< OXZ1W&C=U1l sÓc]*Ƥަx-kjO=_p?b< AOq15I[N-VrN`9( *`,'dx.<959 ncm3$SFr"Of:SW2վ=9 %A/D υe̙^JXp/Ct.zI5EЕI]h2) ]A φ zqC \ܷ2y2<~rau7Lz=H7,[4^|? |r鍩Ó_/.?WMpddx.<@CIZ 9C~ υ%_h{3Vw*ZTy6|?C~ υYu.Z؇h}3>8ۇ0< kAX|¬UB]{?? iA-D υ ,sCOIE;LQyN5kϪS=p?? Og @P< ۴yip"~ φ zqy?P.Yq lv!? Oƒ lj*18mz>LǴMZ8q6 ax2<6*gGr-Lz^q؀}{޷7fdx.;7e?aSY6[7k[7:\xX\Q>df#6/7k/7x9\xTUYMr(@i0< A[d & h3@_;4@\xi#sl7-̏ 8Im#Ϊn8lWK~+f60t~W:\x.376t|\?U 7~y2<^r2go8d_27D}^ A/C υ s/s6hdnf׿Mm p\fddx6n׋_n#b\Ow\~Bau} ]!\x յ9LEʯbw\ݧ`P vu̓4NTL1:%9r[Vpw80FVgVk"I[I gMagOOڌAU23o ЍWT/ixw)3ןWvSVۏxo_ZxÊ직/?/qQyaEws]_ ݲ?¸ou?O_L ^MrZzl?fZjWwt7|44?/?/xޟGɿ-q=rZ|iPiwoo7iAi f*NwןB>? |qyo7wa؏΋xǰ|qovS}7wsۓw/17Z}- XSI<ŴYMrZ~?fZ๻/׿=vQk|>|qovSt[؎{yFwc?7`"9? |1-nvSx>s/*7k|(zfo7woo:w?~>w_[gyyqGռ)yO\׿}ix{vqǛMz?׿}w_"XE0v_̀7?/gh>Ng:wP h>S3G>< 7MM_ݝ_^ml[Pߧ/6?꯾G)ίw=>JQa?58584̸YMrf*y;ffo0{iCg=Ġ7MM_uB_[:3X: O_\3?/uLߵrfWo},k'֬?-iqsb o7ˉwĚ5kOo2ƫg_ʜE}3?nW3q<W漏^r|meae> |1nVvS6ێmvLYI/'(qfo7ˉAKo?,|:ma> |11nvSt;َxYm5  A:%4ĸ9HGĠvt~6ma? |1nvS}(7w3X˄_&t^&|cqx/.8on?RǮ|myciBn/ xFߖFOoJ|2{ݿ:0V~xS_X[y?k'@{HU _Mwߙ}툜t|_LxS_^H:>K;>wxw |ƀW#j?3sW8~~g9yxS_̀E` H>З߫WL~}珀ځ-L_LxSԿc]:^:A:?/EƎƵ+?}g}vorb|m/a[fo7 Lx4[o9؃7myee>_̋eK26S?U ~<ĸyo7 o4FV>,ٛ_$iyEW /͢"n0Hh}4ښbkOfMo7ˉA+Gb{~?0~Ӹk+ٯ(>_̋E?/wcorb|mA1yqG[~!`)/uƛiܫyx#mW;/M~SvSzʄ?vWkw`paͯB7vS#a8z>ϋy@ov}o&GxS_^`q81~v|??/?_Q_CAſ5@ko?66mu횷]u^VZ[h몮WӸ5NU|mWf۫yjWf۫Wռz5^ͫWռz5^ͫWռz5^+k{eW]Wv^+k{eW]Wv}Y+zemꕵWʯ^y+zmꕷW߼_W~+o{^+o{WU\Wq*^[W*ymUW*^E۫zmիj]Zmիj]jZWV۫ujZWV۫ujZj{^Wy*^~ʫW*^e۫zmUʫW*^e۫UʫWj_m5v۫}jWv۫}jϫj_mի[U۫}j:WN۫s괽:WN۫s괽:i{uyu^um{u^WDVEf]_zݎ>Gݐ>;Gݒ>{҇W+}m飿/}ԍ飿3}ԭ飿7}飿;}Y7t7;z=]n^7pg[{=u?;QS Wu?;Qu?Q =})GF/aտ0zb0 ( 00z =0 _oQ( F`.^e0(^x0z0aFZWPFQaVQ0 (0^ 0z3B0 w(8^0z;Ňa F/Q!F!bY1 (J01zM=1 H-_Q+Ʈ^h1z[u1(`^cWzcB1wZW5Facō{c8F/Q9ƩŎѻc_/Q=FcG˻~1{1,1{1,QK?fcCK},1{1,1{DŽm0hA } hm5^6`A ߠ qЖCY?fcci?fY?fcc?fY?fcc?fY?k_cc?fY?fcc?fy1,+5_c?}.|?fcc?fY?fcK},1{1,1{1,3k1{1kccc?fY?fcc?fY?c?fy1,1{1,1{̣#pfB&SaaaaaaaaaaCN??????????MWVVVVVV08COpIǞܓ>'}OpIǟ@ (SP:\???????aa?a??}jzXX+X+X+X+X+X+X+X+X+X:Da?a?????????Cs:ܟD.x/x/x/x/x/x/x/x/x/x:??????????|0|߿p}aA xCbz<Wpx&CeSz,(8 !C!PG?E}c?v]ؽ?vcc?v].{죨JQXJR8?o)qzq)qzqW8?N8?NS8?N8q)g*_8qj8{zq)qzq1E+qzq)qzq)Ƿ?NS8?N8?NS8?N_?NS8?N8ح?NS8?N8?NS8?N8?NS)qzq)qzq)qzT[߿q)qzq)qzq W85AHT *p98c)DHI(B"|R3HX$'JTx:BOLd‡ MP8 '|@>CH(|(> >T‡ UϰL WP` ,|@fCH-|(BrCх.|(> $>A =UR 1|@CAH2|(Y> 8>hDÇ" iPR 5|@ßSE> p>o|ÇpP2 9|@C19|(IE> > =U<|@CH=|(> d> PO!$ > zCOćP C|@CqC|(E"> P">\ćg3THG|(BBCH|($)$> '$%>ćP\ =Ud2 M|@jbK+|B=ćPxO|@~CHP|(B(> E8NI(wrS3Νܟ^e?C)N`wJvFc3ݟg;%?#)N)C=g;%_?z {g;8Nw|S3rߟ~g;?)}Q g gG(ߩ?z*G98ʷz r9Qr\rpQr9Q^/ SpQ򣞂B pTQ 9*Q!G8*GਐrTBrTB pT 9*Q!G8*G pTQ 9*Q!G8*uਐrTrԷ POQ!G8*GਘਐrTB pTQ 9*Q!G8*GਰਐrTB pTQ 9*Q!G8*ਐrTB pTQ 9*Q!G8*GEл'SpTQ 9*Q!G8*GਐrTB pTQ 9*Q4OQ; rTB pT,<GਐrTB pTQ 9*Q)8*Gਐڏ pTQ 9*Q 9*QSpTh?*Q!G8*G~TyGG=Gѽ8*G<GrT{ڏ pzTO8j=>tQ ?钣8jQ ZԿ~G-gbQKQ ZrG-9j8jQ ZrG-9j<G-9jQKQ ZqT_)8jMSp~G-9j%G-pԒ8jQKZ%G-pԒ8ji?jmKrG-WOQKZ%G-prZrG-_3rG-9jQKZ%G-p~G-9jQKZ%G-pԒ8jQ ZrG%G-pZਥZڏZ%G-pԒ8ji?jQKZ%G-pԒ8jQ to8jQ ZrG-G-pԒ8jQ ZrG-G-p~G-9j-pԒ8jQ ZڏZਥZrG-9j8jQ ZڏZਥJ9*QG~TRJpTQ J9*Q)G%8*GਔrTRJpTQ J9*Q)G%8*Gਔ:ח~TRJpTQ J9*QYAM>RJpTj?*Q)G%8*)8*਴y਴O@Oਔz>*Q)G%8*~TRJpTQ J9*Q)G%8*ԹG~TSpTQ J9*Q)G%8*GrTRJpT)8*cS9*Q)G%8*CਔڏJpT J9*Q)G%8*GROQ)G%8*GਔrTRJpTQ J9*Q)G%8*GਔڏJpTQ J9*Qs} J9*Q)G%8*G~TRJpTQ JKpTQ J9*Q)G%8*GਔrTRJpTj?*Q[68jQ rGm9jQ[-GmpԖ68j\Gm9jQ[-GmpԖ68j\Gm9j{Q[-Gmp~Gm9jQ[ਭ ڏ]>[rGm9jQ[QQ[-Gmp~Gm9j68jQ :׷Q[-GmpԖ68jQ rGmGmpԖ68jQ rGmGmpԖ68jQQ[-GmpԖ68jQ rGmGmpֹ rGm9jQ[-GmpԖ68j~GQ; Q[ਭs} rGm9jQ[-GmpԖ68jQ :׷Q{k68jQ rGm-GmpQ rGm9jQ[-Gmpԑ8Qu:rG9ꀣuQG:ਣ8Qu:rG9ꀣuQG:#Gp~G9ꀣ8Qu:ڏ:#Gpԑ8QuuQGQuuQG:#Gpѹ:rG9ꀣuQG8Qu:rG9ꀣuQG;#GpZ;#Gpԑ8Qu:rG9ꀣoBO:rG9ꀣuQG:G9ꀣpԑ8z ::wQG:#Gpԑ8Qu|G9ꀣpԑ8Qu:ڏ:#Gp~G9ꀣuQGQu:rG9ꀣuQG:#Gpԑ8Qu:rGGpԑ8Qu:rGGpԑ8Qu:rGg‣uQG:#GQQO=jSh{zLh{z\h{zBh{zՖ>>m}U;tz;ꪩz;]+|" PO{G]5wU[C=5U_i飼jz:5O{G]5wUSO{G]5wUSO{G]5w|z; }zji飼y;ꪩ{G])W{G]5w|{G]5QWM=uQWM=u4O{G]5QWM=uQWπz;ꪩz;ꪩz;iji飼QWM=u4O{GRO{G]5wUSO{G]5wUQWM=uQWM=uwUSO{GG~jSz;iji飼ji飼y;ꪩcwT飼y;iji飼ji飼ji飼ji8z;ꪩz;ꪩz;ꪩz;ꪩz rG 9j5QC!G pԐ8jQ5rG 9j5QC!G pԐ8j 5z rG 9jPOQC1SpԐ8jQ5z rG5QC1SpԐ8jz 5QC!G pԐ8jz 5QC!G pԐ8jQ5=>!G pp5rG 9j5QC!G pԐ8jQ5rG 9j5QCQ 5)8j,5rG 9jROQC!G pHSpH5rG 9j5QC!G pԐ8jQ5rG 9j5QC!G pԐ8jQ5rG 9j5QC!G pԐ8jQ5rG 9j5QS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 ڏ)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 ڏ)GMpԔ&8jQ5 rGMWOQS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jj?j5QS)GMpԔ&8jQ5 ڏ)GMpL<GM9j5QS)GMpԔ&8jQ5 rGM9j<GM9j5QS)GMpԔ&8jQ>5QSy4OQS)GMpԔ&8jQ5>y rGM9j5Q&G8(G٣ e p-}OM2p=&G8*?' e( erl( erl( erL2pQ29Q&G8(Ge( erL2pQ29Q(Ge( ey 2s}z*G8(Ge( erL2pQ29Q&G8(Ge( erL2pQ29Qwb( erL2pQSpQ29Q&G8(Ge( e:g( erL2pQ2G8(G erL2pQ29Q&G8(Ge( erL2pQ29Q&G8(Ge( erL2pQ2G8(Ge( erLQ29Q&G8(Ge(U_SFS~\rpQrG98(Gr\rpQQ6upQr9Q.G98ʵ(rk 9Q.G98(G(r\rpW~T}O(r\G98(G(~\rp(G( POQ.G98(G{r\rpQr9Qr\rpG:8ʵ(r\rp{+|Br\rpQr9Qs}r9Q.G98(G(r\rpQr9Q.G98(G(r\rpQr9Q.G98(G(r\rpQrspQr9Q.G98(G(GQ.G98(G(r\rpTQ G8*GਐrTB pTQ 9*Q!G8*FpTQ G8*t/Q!G8*GਐrTB pTQ 9*Q!G8*GਐrTBQ 9*Q!G8*GrTBڏ pTQ 9*Q!G8*ਐ}pTQ G8*GਐrTBQ 9*Q!G8*GrTB pTQ G8*t/Q!G8*Gਐڏ pTQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*GuਐU_)8*GਐrTB pTQ G8*GਐrTB pTQZrG-G-pԒ8jQ ZrG-9jQKZ%G-pԒ8jQ ZrG-9jQKZ%G-pԒ8j\G-9jQKZ%G-pԒ8jQ ZrG-oQKG-pԒ8jUo}OਥZ[_)8jQ ZrG-G-pԒ8jQ ZrG-9jQKZ嚧%G-pҹZڏZ%G-pԒ8j{+|BQKZ%G-pԒ8jQ ZrG-9jQKZ%G-pԒ8jQ Zz>jQKZ%G-pԒ8jQ ZrG-9jQKZ%G-pԒ8ji?jQKQ ZrG-9jQKZ%G-pԒ8jQ ZrG-9jQKZ%G-pTQ JG%8*GਔrTRJpTQ J9*Q)G%8*u/Q)G%8*GਔrTRJpTQ J9*QGਔrTR=OpTQ J9*QY9>RQ J9*QG~TRrTRQ J9*Q)G%8*GਔrTRJpTQ J9*Q)G%8*]rTRQ J9*Q)G%8*ਔrTRQ JG%8*ਔrTRJpTQ JKpTQ J9*Q)G%8*GਔrTRJpTj?*Q)G%8*GਔrTRJpTQ J9*Q)G%8*GਔrTRJpTQ J9*Q)G%8*GਔrTRJpT\_RJpTQ J9*Q)G%8*G-GmpԖ68jQ rGm9jQ[-GmpԖ68jQ rGm9jQ[-GmpԖ68jQQ[-GmpԖ68jk?jQ[ਭ rGm9j,npԖ68jQ ڏ-Gmp~Gm9jQ[-GmpԖ68jQ rGm9jQ[Q rGm9jQ[Q rGm9jQ[-GmpԖ68jQ ڏ-GmpԖ68jQ rGm9jQ[-GmpԖ68jQ rGm9jQ[-GmpԖ68jQwyQ[-GmpԖ68jQ rGm9jQ[}GmGmpԖ68jQ rGm9jQG:ਣs}u:rG9ꀣuQG:#Gpԑ8Qu:rG9ꀣuQG:#Gp8Qu:rG9ꀣuQG:#Gpԑ8Qu:rG9ꀣ8Qu:rG9ꀣuQGQu:rG9ꀣuQG:#Gpԑ8(?ꀣuQG9u:rG9ꀣuQG:#Gpԑ8Qu:rG9ꀣuQG:#Gpԑ8Qu:rG9ꀣuQG:#Gp{8Qu:rG9ꀣuQG:#Gpԑ8Qu:rG9ꀣ8Qu:rG9ꀣuQG:#Gpԑ8Qu:ڏ:#Gpԑ8Qu:rG9ꀣuzG٣U_Ch{zզ>>>]+|bh{zRh{zն>}z:QWM=uQWM=uQW- PO{G];m}z:Q'QWmπNwUSO{G]5wUSO{G]5QWMwU;i飼jz;ꪩz;ꪭuQWM=u4O{GQWM=uQWM=uQWM?O{G]5QWM=u;ꪩi飼6ouQWM=uQWMwUSO{G]5wU<u;K=uQWM=uQWM=uQWMz;ꪩi({z;{wUSO{G]5wUSO{G]5wU<u{wUSO{G]5w=z;ꪩz;ꪩz;ꪩz;iji飼QO{G]5wUSO{G]5wUSO{G]5wUSO{G]5wUSO{G]55rG 9j5QCQQ>􉾧C!G pԐ8jQ5rG 9j5QC!G p)8j 5S=G 9jTOQC!G pԐ8jQ5rG5QC!G pԐ8jQ55QC!G pԐ8jQ5rG 9j!G pԐ8jz rG 9jF!G pԐ8jQ5rG 9j5Q#SpԐ8j,5[_)8jQ5z rG 9j5QC!G pԐ8jQ5.G} 55QC!G pԨs}>5QC!G pԐ8j T!G pԐ8jQ5rG 9j5QCqSpԐ8jQ5 u'S)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 rGM9j5QSu/5QS)GMpԔ&8jQ5 rGM9j5QS)GMpԔ&8jQ5 rGM9j5QSQ5 rGͥy rGM9j5QS)GMpԔ&8jQ5LLpԔ&8jj?j5QS)GMpԔ&8jQ5wC਩ rGM9j5QS)GMp~GM9j5QS)GMpԔ&8jQ5 rGM9j&8jQ5 29Q(Ge( erL2pQ29Q&G8(GY'SpQ29Q&G8(Ge(ӹ>Ge( erL2pQ29Q&G8(GY'4OQV=O@O(Ge( erL2pQ29Qf( erL2pQ29Q&G8ʴe( erL2pQ2<Ge( erL2pQ29Q&G8(Ge( erLQ29Qs}2G8(Ge( erliL2pQ2G8(Ge( erL2pQ29Q(Ge( erL2pQ29Q&G8(Ge( erL2pQ29Q&G8(Ge( er\rpQr9Q.G98(G(r\rp?穃\Qr9Q.G98(G>G(ڏrpQr9Q.G98(G(r\rpk?Q.G98ʵ(~\rpQr9Q.G98(G(ڏrpQr9Q.G98ʽr\rpQr9Q.G98(G(~\rpQr9Q.G98(G(r\rpQr9Q.G98(Gr\rp(G(ڏrpQr9Q.G98(G(r\rpQr9Q.G98(G(r\rpQr9Q.G98(G(r\rpݟ\rpQr9Q.G98(GਐrTB pTQ 9*Q!G8*G~TB pTQ 9*Q!G8*ਐrTB pTQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*GਐrTBQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*Gਐڏ pTQ 9*QGਐڏ pTQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*GਐrTB pTQ 9*Q!G8*GũR 9*Q!G8**?'SpTQ@OGਐZrG-9jQQ6]ਥ-pԒ8j=RF%G-pԒ8jQ ZrGQtQKZ%G-pԒ8jQ Zz_G-9jQKZ%G-pԒ8jQ Z:׷QKZ%G-pԒ8jQ ZrG-9jQKZ%G-pԒ8jQ Z^H,pԒ8jQ ZrG-9jQKZ%G-pԒ8jQ ZrG-9jQ+; ZrG-9jQKZਥZrG-9jQKZ%G-p~G-9jQKZ%G-pԒ8jQ Zz_G-9jVS9jQk)8jQ ZrG-9jQKZ%G-p~G-9jQKQ QKZਥZrG-9jQ)G%8*GਔڏJpTQ J9*QGco{rTRJpTQ J9*QGਔrTRJpTQ J9*QG{rTRJpTQ J9*Q)G%8*ਔrTRJpTQ J9*Q)G%8*GਔrTRJpTzy?Q)G%8*ਔrTRJpTQ J9*Q)G%8*GਔrTRJpTQ (pTQ J9*Q)G%8*GਔrTRJpT= J9*Q)G%8*Gਔ}pTQ Jg"Q)G%8*GejRJpTj?*Q)G%8*GڏJpTQ J9*Q)G%8*Gਔ[=GਔrTRJpTj?*Qy4OQ)G%8*G<)8jQQ[-GmpԖ68j\Gm9jQ[-GmpԖ68jQ rGm9jQ[-GmpԖ68jQQ[ਭ rGm9j KrGm9jQ[-GmpԖ68jQ VR rGmgbQ[ਭ rGm9jQ[-Gmp:3Q[-GmpԖ68jQ Q rGm9jQ[68jQ rGm9jQ[68jk?jROQ[-GmpԖ68jQQ;68jQ ڏ-GmpԖ68jQuo׷Q[Q?}|??o?ݟ_oC_?ӟ_۟?/PKEH3#pxl/worksheets/_rels/sheet1.xml.relsSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#W; 1Z;Mv-Dh#&!Yx$`,,,g~X]ȇ 9πQV7/6hl! W ZQXRLPBUS[G&%4J8THLl*IXVx[UǎLEhT.+8>a USz.PKEHLh(Dpxl/_rels/workbook.xml.relsSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#WN0 @ 4@fIB(qjmfƁOBNm~}W/ v^AU Л`{)xj֗ zLHZ^8hMH"S<)pNJ2GMEs iԜɨVw(ey#Ӝzv mf|h}0#zI< y!+AuJ}H[r-qHeϧq:}o>_<}PKEHٟ]1 p_rels/.relsSD[cd`ia``0` fd3YE&oW?-qz͌[!,-QVLI@Ę b @BVUT #W#W#W=0 $yiBQ8JgcH\QheW&- b`.|ysْF:mg[CUq,( 7kΝ.":l a%7R5D%u2bY iT=KudiK6g& (wI>j}PKEHFG [Content_Types].xmlSDUT#WPKEHorM9 xl/SharedStrings.xmlSDUT#WPKEH<<$  Gxl/styles.xmlSDUT#WPKEH|waP fxl/workbook.xmlSDUT#WPKEHYˏ dxl/drawings/drawing1.xmlSDUT#WPKEH7# xl/drawings/_rels/drawing1.xml.relsSDUT#WPKEH ΈT  xl/worksheets/sheet1.xmlSDUT#WPKEH3# jxl/worksheets/_rels/sheet1.xml.relsSDUT#WPKEHLh(D xl/_rels/workbook.xml.relsSDUT#WPKEHٟ]1  h_rels/.relsSDUT#WPK TSpreadsheet-ParseXLSX-0.35/t/bug-8.t0000644000175000017500000000055114576335353016014 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-8.xlsx'); is($wb->worksheet_count, 3); my $ws = $wb->worksheet(2); my ($rmin, $rmax) = $ws->row_range; my ($cmin, $cmax) = $ws->col_range; is($rmin, 0); is($rmax, -1); is($cmin, 0); is($cmax, -1); done_testing; Spreadsheet-ParseXLSX-0.35/t/author-eol.t0000644000175000017500000000302414576335353017147 0ustar michamicha BEGIN { unless ($ENV{AUTHOR_TESTING}) { print qq{1..0 # SKIP these tests are for testing by the author\n}; exit } } use strict; use warnings; # this test was generated with Dist::Zilla::Plugin::Test::EOL 0.19 use Test::More 0.88; use Test::EOL; my @files = ( 'lib/Spreadsheet/ParseXLSX.pm', 'lib/Spreadsheet/ParseXLSX/Cell.pm', 'lib/Spreadsheet/ParseXLSX/Decryptor.pm', 'lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm', 'lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm', 'lib/Spreadsheet/ParseXLSX/Worksheet.pm', 't/00-compile.t', 't/ahihi.t', 't/author-critic.t', 't/author-eol.t', 't/author-no-tabs.t', 't/author-pod-coverage.t', 't/author-pod-syntax.t', 't/basic.t', 't/bug-10.t', 't/bug-11.t', 't/bug-12.t', 't/bug-13.t', 't/bug-14.t', 't/bug-15.t', 't/bug-16.t', 't/bug-17.t', 't/bug-2.t', 't/bug-29.t', 't/bug-3.t', 't/bug-32.t', 't/bug-38.t', 't/bug-4.t', 't/bug-41.t', 't/bug-5.t', 't/bug-57.t', 't/bug-6-2.t', 't/bug-6.t', 't/bug-61.t', 't/bug-7.t', 't/bug-72.t', 't/bug-8.t', 't/bug-md-10.t', 't/bug-md-11.t', 't/bug-md-7.t', 't/cell-to-row-col.t', 't/column-formats.t', 't/encryption.t', 't/garbage-collect.t', 't/hidden-row-and-column.t', 't/hidden-sheet.t', 't/hyperlinks.t', 't/page-Setup.t', 't/rich.t', 't/tab-color.t', 't/target-abspath.t' ); eol_unix_ok($_, { trailing_whitespace => 1 }) foreach @files; done_testing; Spreadsheet-ParseXLSX-0.35/t/page-Setup.t0000644000175000017500000000224714576335353017110 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/page-Setup.xlsx'); my $ws1 = $wb->worksheet(0); # Header/Footer Text is($ws1->get_header, '&CHeader'); is($ws1->get_footer, '&CFooter'); # Margins is($ws1->get_margin_header, '0.3'); is($ws1->get_margin_footer, '0.4'); is($ws1->get_margin_left, '0.5'); is($ws1->get_margin_right, '0.6'); is($ws1->get_margin_top, '0.7'); is($ws1->get_margin_bottom, '0.8'); # Page Setup is($ws1->get_print_scale, '75'); ok(!$ws1->is_portrait); is($ws1->get_paper, '4'); # Code for 11*17 # Cell Border Formatting is($ws1->get_cell(0,0)->get_format()->{'BdrDiag'}[0], 1); is($ws1->get_cell(0,1)->get_format()->{'BdrDiag'}[0], 2); is($ws1->get_cell(0,2)->get_format()->{'BdrDiag'}[0], 3); is($ws1->get_cell(0,0)->get_format()->{'BdrDiag'}[1], 6); # Double Line is($ws1->get_cell(0,0)->get_format()->{'BdrDiag'}[2], '#FF0000'); # Red is($ws1->get_cell(2,0)->get_format()->{'Rotate'}, 90); is($ws1->get_cell(3,0)->get_format()->{'Shrink'}, 1); is($ws1->get_cell(4,0)->get_format()->{'Indent'}, 1); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-29.t0000644000175000017500000000031614576335353016076 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-29.xlsx'); pass('it parses successfully'); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-6.t0000644000175000017500000000163214576335353016013 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-6.xlsx'); is($wb->worksheet_count, 8); my %cells = ( 7 => { 0 => 'mfg fdproc', 1 => 'Tom Forsythe', }, 8 => { 0 => 'ent bartend-402 data max prodigy max 203 dpi', 1 => 'Dave Levos ; Tommy Holland', }, 9 => { 0 => 'ent bartend-402 inter px4i 400 dpi rw', 1 => 'Tommy Holland; Dave Levos', }, 10 => { 0 => 'opr-mfg asmb inst ro', 1 => 'Chris McGee', }, ); my $ws = $wb->worksheet('DSGroups'); for my $row (sort { $a <=> $b } keys %cells) { for my $col (sort { $a <=> $b } keys %{ $cells{$row} }) { my $cell = $ws->get_cell($row, $col); next unless $cell; is($cell->value, $cells{$row}{$col}, "correct value for ($row, $col)"); } } done_testing; Spreadsheet-ParseXLSX-0.35/t/garbage-collect.t0000644000175000017500000000304214576335353020103 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Scalar::Util 'weaken'; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/Test.xlsx'); my $ws1 = $wb->worksheet(0); my $cell = $ws1->get_cell(0,0); ok(defined $wb && defined $ws1 && defined $cell, '3 object references'); weaken($wb); weaken($ws1); weaken($cell); ok(!defined $wb, 'workbook freed'); # note explain $wb; ok(!defined $ws1, 'worksheet freed'); # note Devel::FindRef::track($ws1); ok(!defined $cell, 'cell freed' ); # Now find out whether the XML::Twig instances get freed. my @xml_objects; my $xml_twig_new= \&XML::Twig::new; sub trace_xml_ctor { my $self= &$xml_twig_new; push @xml_objects, $self; Scalar::Util::weaken($xml_objects[-1]); $self; } { no warnings; *XML::Twig::new= \&trace_xml_ctor; } # Create multiple spreadsheet objects, and let them get freed for (1..3) { Spreadsheet::ParseXLSX->new->parse('t/data/Test.xlsx'); } TODO: { local $TODO = 'Maybe a bug in XML::Twig?'; # I can't figure out why, but the most recent XML::Twig object remains # un-collected until the next XML::Twig gets parsed. This would indicate # that rather than a self-reference, there is a global somewhere that is # referring to it, and that global gets overwritten on next construction. # I don't see any globals or 'state' variables in this module, so assume # it must be XML::Twig or one of that one's deps. is( scalar(grep defined, @xml_objects), 0, 'All XML::Twig cleaned up' ) or note explain(\@xml_objects); } done_testing; Spreadsheet-ParseXLSX-0.35/t/author-pod-coverage.t0000644000175000017500000000056714576335353020754 0ustar michamicha#!perl BEGIN { unless ($ENV{AUTHOR_TESTING}) { print qq{1..0 # SKIP these tests are for testing by the author\n}; exit } } # This file was automatically generated by Dist::Zilla::Plugin::PodCoverageTests. use strict; use warnings; use Test::Pod::Coverage 1.08; use Pod::Coverage::TrustPod; all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' }); Spreadsheet-ParseXLSX-0.35/t/bug-13.t0000644000175000017500000000033314576335353016066 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-13.xlsx'); is($wb->get_filename, 't/data/bug-13.xlsx'); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-57.t0000644000175000017500000000031614576335353016077 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-57.xlsx'); pass('it parses successfully'); done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-4.t0000644000175000017500000000062514576335353016012 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $parser = Spreadsheet::ParseXLSX->new; my $wb = $parser->parse('t/data/bug-4.xlsx'); my $ws = $wb->worksheet(0); { my $cell = $ws->get_cell(0, 0); is($cell->value,'Order Number', 'cell check 1'); } { my $cell = $ws->get_cell(1, 0); is($cell->value,'364968', 'cell check 2'); } done_testing; Spreadsheet-ParseXLSX-0.35/t/bug-15.t0000644000175000017500000000147214576335353016075 0ustar michamicha#!/usr/bin/env perl use strict; use warnings; use Test::More; use Spreadsheet::ParseXLSX; my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-15.xlsx'); my $ws = $wb->worksheet(1); my $b2 = $ws->get_cell(1, 1); ok(exists $b2->get_format->{Hidden}); ok(exists $b2->get_format->{Lock}); ok($b2->get_format->{IgnoreProtection}); ok(!$b2->get_format->{Hidden}); ok($b2->get_format->{Lock}); my $b3 = $ws->get_cell(2, 1); ok(exists $b3->get_format->{Hidden}); ok(exists $b3->get_format->{Lock}); ok(!$b3->get_format->{IgnoreProtection}); ok(!$b3->get_format->{Hidden}); ok(!$b3->get_format->{Lock}); my $b4 = $ws->get_cell(3, 1); ok(exists $b4->get_format->{Hidden}); ok(exists $b4->get_format->{Lock}); ok(!$b4->get_format->{IgnoreProtection}); ok($b4->get_format->{Hidden}); ok(!$b4->get_format->{Lock}); done_testing; Spreadsheet-ParseXLSX-0.35/dist.ini0000644000175000017500000000245314576335353016111 0ustar michamichaname = Spreadsheet-ParseXLSX author = Jesse Luehrs license = MIT copyright_holder = Jesse Luehrs [FileFinder::Filter / NonBinaryScriptFiles] finder = :ExecFiles finder = :TestFiles skip = \.xlsx?$ [Prereqs / TestMoreDoneTesting] -phase = test -type = requires Test::More = 0.88 [GatherDir] [PruneCruft] [ManifestSkip] [MetaYAML] [License] [Readme] [ExtraTests] [ExecDir] [ShareDir] [MakeMaker] [Manifest] [TestRelease] [ConfirmRelease] [MetaConfig] [MetaJSON] [NextRelease] format = %-5v %{yyyy-MM-dd}d [CheckChangesHasContent] [Test::NoTabs] [Test::EOL] [Test::Compile] [Test::Perl::Critic] critic_config = .perlcriticrc [PodCoverageTests] [PodSyntaxTests] [MetaResources] bugtracker.web = https://github.com/MichaelDaum/spreadsheet-parsexlsx/issues repository.url = https://github.com/MichaelDaum/spreadsheet-parsexlsx repository.web = https://github.com/MichaelDaum/spreadsheet-parsexlsx [Git::Check] [Git::Commit] commit_msg = changelog [Git::Tag] tag_format = %v tag_message = [Git::NextVersion] version_regexp = ^(\d+\.\d+)$ first_version = 0.28 [Git::Contributors] [OurPkgVersion] [PodWeaver] [ReadmeAnyFromPod] type = gfm location = root filename = README.md [UploadToCPAN] [MetaProvides::Package] [AutoPrereqs] skip = ^warning|strict|utf8|base$ [Encoding] encoding = bytes match = ^t/data/ Spreadsheet-ParseXLSX-0.35/META.yml0000644000175000017500000003242514576335353015720 0ustar michamicha--- abstract: 'parse XLSX files' author: - 'Jesse Luehrs ' build_requires: Data::Dumper: '0' File::Spec: '0' IO::Handle: '0' IPC::Open3: '0' Spreadsheet::ParseExcel::Utility: '0' Test::More: '0.88' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 0 generated_by: 'Dist::Zilla version 6.031, CPAN::Meta::Converter version 2.150010' license: mit meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Spreadsheet-ParseXLSX provides: Spreadsheet::ParseXLSX: file: lib/Spreadsheet/ParseXLSX.pm version: '0.35' Spreadsheet::ParseXLSX::Cell: file: lib/Spreadsheet/ParseXLSX/Cell.pm version: '0.35' Spreadsheet::ParseXLSX::Decryptor: file: lib/Spreadsheet/ParseXLSX/Decryptor.pm version: '0.35' Spreadsheet::ParseXLSX::Decryptor::Agile: file: lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm version: '0.35' Spreadsheet::ParseXLSX::Decryptor::Standard: file: lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm version: '0.35' Spreadsheet::ParseXLSX::Worksheet: file: lib/Spreadsheet/ParseXLSX/Worksheet.pm version: '0.35' requires: Archive::Zip: '1.34' Crypt::Mode::CBC: '0' Crypt::Mode::ECB: '0' Digest::SHA: '0' Encode: '0' File::Temp: '0' Graphics::ColorUtils: '0' MIME::Base64: '0' OLE::Storage_Lite: '0' Scalar::Util: '0' Spreadsheet::ParseExcel: '0' Spreadsheet::ParseExcel::Cell: '0' Spreadsheet::ParseExcel::Worksheet: '0' XML::Twig: '0' perl: '5.010' resources: bugtracker: https://github.com/MichaelDaum/spreadsheet-parsexlsx/issues repository: https://github.com/MichaelDaum/spreadsheet-parsexlsx version: '0.35' x_Dist_Zilla: perl: version: '5.038002' plugins: - class: Dist::Zilla::Plugin::FileFinder::Filter name: NonBinaryScriptFiles version: '6.031' - class: Dist::Zilla::Plugin::Prereqs config: Dist::Zilla::Plugin::Prereqs: phase: test type: requires name: TestMoreDoneTesting version: '6.031' - class: Dist::Zilla::Plugin::GatherDir config: Dist::Zilla::Plugin::GatherDir: exclude_filename: [] exclude_match: [] follow_symlinks: 0 include_dotfiles: 0 prefix: '' prune_directory: [] root: . name: GatherDir version: '6.031' - class: Dist::Zilla::Plugin::PruneCruft name: PruneCruft version: '6.031' - class: Dist::Zilla::Plugin::ManifestSkip name: ManifestSkip version: '6.031' - class: Dist::Zilla::Plugin::MetaYAML name: MetaYAML version: '6.031' - class: Dist::Zilla::Plugin::License name: License version: '6.031' - class: Dist::Zilla::Plugin::Readme name: Readme version: '6.031' - class: Dist::Zilla::Plugin::ExtraTests name: ExtraTests version: '6.031' - class: Dist::Zilla::Plugin::ExecDir name: ExecDir version: '6.031' - class: Dist::Zilla::Plugin::ShareDir name: ShareDir version: '6.031' - class: Dist::Zilla::Plugin::MakeMaker config: Dist::Zilla::Role::TestRunner: default_jobs: 1 name: MakeMaker version: '6.031' - class: Dist::Zilla::Plugin::Manifest name: Manifest version: '6.031' - class: Dist::Zilla::Plugin::TestRelease name: TestRelease version: '6.031' - class: Dist::Zilla::Plugin::ConfirmRelease name: ConfirmRelease version: '6.031' - class: Dist::Zilla::Plugin::MetaConfig name: MetaConfig version: '6.031' - class: Dist::Zilla::Plugin::MetaJSON name: MetaJSON version: '6.031' - class: Dist::Zilla::Plugin::NextRelease name: NextRelease version: '6.031' - class: Dist::Zilla::Plugin::CheckChangesHasContent name: CheckChangesHasContent version: '0.011' - class: Dist::Zilla::Plugin::Test::NoTabs config: Dist::Zilla::Plugin::Test::NoTabs: filename: xt/author/no-tabs.t finder: - ':InstallModules' - ':ExecFiles' - ':TestFiles' name: Test::NoTabs version: '0.15' - class: Dist::Zilla::Plugin::Test::EOL config: Dist::Zilla::Plugin::Test::EOL: filename: xt/author/eol.t finder: - ':ExecFiles' - ':InstallModules' - ':TestFiles' trailing_whitespace: 1 name: Test::EOL version: '0.19' - class: Dist::Zilla::Plugin::Test::Compile config: Dist::Zilla::Plugin::Test::Compile: bail_out_on_fail: 0 fail_on_warning: author fake_home: 0 filename: t/00-compile.t module_finder: - ':InstallModules' needs_display: 0 phase: test script_finder: - ':PerlExecFiles' skips: [] switch: [] name: Test::Compile version: '2.058' - class: Dist::Zilla::Plugin::Test::Perl::Critic name: Test::Perl::Critic version: '3.001' - class: Dist::Zilla::Plugin::PodCoverageTests name: PodCoverageTests version: '6.031' - class: Dist::Zilla::Plugin::PodSyntaxTests name: PodSyntaxTests version: '6.031' - class: Dist::Zilla::Plugin::MetaResources name: MetaResources version: '6.031' - class: Dist::Zilla::Plugin::Git::Check config: Dist::Zilla::Plugin::Git::Check: untracked_files: die Dist::Zilla::Role::Git::DirtyFiles: allow_dirty: - Changes - dist.ini allow_dirty_match: [] changelog: Changes Dist::Zilla::Role::Git::Repo: git_version: 2.34.1 repo_root: . name: Git::Check version: '2.049' - class: Dist::Zilla::Plugin::Git::Commit config: Dist::Zilla::Plugin::Git::Commit: add_files_in: [] commit_msg: changelog signoff: 0 Dist::Zilla::Role::Git::DirtyFiles: allow_dirty: - Changes - dist.ini allow_dirty_match: [] changelog: Changes Dist::Zilla::Role::Git::Repo: git_version: 2.34.1 repo_root: . Dist::Zilla::Role::Git::StringFormatter: time_zone: local name: Git::Commit version: '2.049' - class: Dist::Zilla::Plugin::Git::Tag config: Dist::Zilla::Plugin::Git::Tag: branch: ~ changelog: Changes signed: 0 tag: '0.35' tag_format: '%v' tag_message: '' Dist::Zilla::Role::Git::Repo: git_version: 2.34.1 repo_root: . Dist::Zilla::Role::Git::StringFormatter: time_zone: local name: Git::Tag version: '2.049' - class: Dist::Zilla::Plugin::Git::NextVersion config: Dist::Zilla::Plugin::Git::NextVersion: first_version: '0.28' version_by_branch: 0 version_regexp: (?^u:^(\d+\.\d+)$) Dist::Zilla::Role::Git::Repo: git_version: 2.34.1 repo_root: . name: Git::NextVersion version: '2.049' - class: Dist::Zilla::Plugin::Git::Contributors config: Dist::Zilla::Plugin::Git::Contributors: git_version: 2.34.1 include_authors: 0 include_releaser: 1 order_by: name paths: [] name: Git::Contributors version: '0.037' - class: Dist::Zilla::Plugin::OurPkgVersion name: OurPkgVersion version: '0.21' - class: Dist::Zilla::Plugin::PodWeaver config: Dist::Zilla::Plugin::PodWeaver: finder: - ':InstallModules' - ':PerlExecFiles' plugins: - class: Pod::Weaver::Plugin::EnsurePod5 name: '@CorePrep/EnsurePod5' version: '4.019' - class: Pod::Weaver::Plugin::H1Nester name: '@CorePrep/H1Nester' version: '4.019' - class: Pod::Weaver::Plugin::SingleEncoding name: -SingleEncoding version: '4.019' - class: Pod::Weaver::Section::Name name: Name version: '4.019' - class: Pod::Weaver::Section::Version name: Version version: '4.019' - class: Pod::Weaver::Section::Region name: prelude version: '4.019' - class: Pod::Weaver::Section::Generic name: SYNOPSIS version: '4.019' - class: Pod::Weaver::Section::Generic name: DESCRIPTION version: '4.019' - class: Pod::Weaver::Section::Generic name: OVERVIEW version: '4.019' - class: Pod::Weaver::Section::Collect name: ATTRIBUTES version: '4.019' - class: Pod::Weaver::Section::Collect name: METHODS version: '4.019' - class: Pod::Weaver::Section::Collect name: FUNCTIONS version: '4.019' - class: Pod::Weaver::Section::Leftovers name: Leftovers version: '4.019' - class: Pod::Weaver::Section::Region name: postlude version: '4.019' - class: Pod::Weaver::Section::Authors name: Authors version: '4.019' - class: Pod::Weaver::Section::Contributors name: Contributors version: '0.009' - class: Pod::Weaver::Section::Legal name: Legal version: '4.019' name: PodWeaver version: '4.010' - class: Dist::Zilla::Plugin::ReadmeAnyFromPod config: Dist::Zilla::Role::FileWatcher: version: '0.006' name: ReadmeAnyFromPod version: '0.163250' - class: Dist::Zilla::Plugin::UploadToCPAN name: UploadToCPAN version: '6.031' - class: Dist::Zilla::Plugin::MetaProvides::Package config: Dist::Zilla::Plugin::MetaProvides::Package: finder_objects: - class: Dist::Zilla::Plugin::FinderCode name: MetaProvides::Package/AUTOVIV/:InstallModulesPM version: '6.031' include_underscores: 0 Dist::Zilla::Role::MetaProvider::Provider: $Dist::Zilla::Role::MetaProvider::Provider::VERSION: '2.002004' inherit_missing: 1 inherit_version: 1 meta_noindex: 1 Dist::Zilla::Role::ModuleMetadata: Module::Metadata: '1.000038' version: '0.006' name: MetaProvides::Package version: '2.004003' - class: Dist::Zilla::Plugin::AutoPrereqs name: AutoPrereqs version: '6.031' - class: Dist::Zilla::Plugin::Encoding name: Encoding version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':InstallModules' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':IncModules' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':TestFiles' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':ExtraTestFiles' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':ExecFiles' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':PerlExecFiles' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':ShareFiles' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':MainModule' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':AllFiles' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: ':NoFiles' version: '6.031' - class: Dist::Zilla::Plugin::FinderCode name: MetaProvides::Package/AUTOVIV/:InstallModulesPM version: '6.031' zilla: class: Dist::Zilla::Dist::Builder config: is_trial: 0 version: '6.031' x_contributors: - 'Alexey Mazurin ' - 'Daryl Anderman ' - 'Dave Clarke ' - 'Fitz Elliott ' - 'FL ' - 'Gareth Tunley ' - 'Meredith Howard ' - 'Michael Conrad ' - 'Michael Daum ' - 'Nick Moore ' - 'oharakouhei ' - 'rdboisvert ' - 'Ricardo Signes ' - 'Robert Boisvert ' - 'Steve Simms ' - 'Stuart Watt ' - 'theevilapplepie ' - 'zhouzhen1 ' x_generated_by_perl: v5.38.2 x_serialization_backend: 'YAML::Tiny version 1.74' x_spdx_expression: MIT Spreadsheet-ParseXLSX-0.35/META.json0000644000175000017500000005133514576335353016071 0ustar michamicha{ "abstract" : "parse XLSX files", "author" : [ "Jesse Luehrs " ], "dynamic_config" : 0, "generated_by" : "Dist::Zilla version 6.031, CPAN::Meta::Converter version 2.150010", "license" : [ "mit" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "Spreadsheet-ParseXLSX", "prereqs" : { "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "develop" : { "requires" : { "Pod::Coverage::TrustPod" : "0", "Test::EOL" : "0", "Test::More" : "0.88", "Test::NoTabs" : "0", "Test::Perl::Critic" : "0", "Test::Pod" : "1.41", "Test::Pod::Coverage" : "1.08" } }, "runtime" : { "requires" : { "Archive::Zip" : "1.34", "Crypt::Mode::CBC" : "0", "Crypt::Mode::ECB" : "0", "Digest::SHA" : "0", "Encode" : "0", "File::Temp" : "0", "Graphics::ColorUtils" : "0", "MIME::Base64" : "0", "OLE::Storage_Lite" : "0", "Scalar::Util" : "0", "Spreadsheet::ParseExcel" : "0", "Spreadsheet::ParseExcel::Cell" : "0", "Spreadsheet::ParseExcel::Worksheet" : "0", "XML::Twig" : "0", "perl" : "5.010" } }, "test" : { "requires" : { "Data::Dumper" : "0", "File::Spec" : "0", "IO::Handle" : "0", "IPC::Open3" : "0", "Spreadsheet::ParseExcel::Utility" : "0", "Test::More" : "0.88" } } }, "provides" : { "Spreadsheet::ParseXLSX" : { "file" : "lib/Spreadsheet/ParseXLSX.pm", "version" : "0.35" }, "Spreadsheet::ParseXLSX::Cell" : { "file" : "lib/Spreadsheet/ParseXLSX/Cell.pm", "version" : "0.35" }, "Spreadsheet::ParseXLSX::Decryptor" : { "file" : "lib/Spreadsheet/ParseXLSX/Decryptor.pm", "version" : "0.35" }, "Spreadsheet::ParseXLSX::Decryptor::Agile" : { "file" : "lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm", "version" : "0.35" }, "Spreadsheet::ParseXLSX::Decryptor::Standard" : { "file" : "lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm", "version" : "0.35" }, "Spreadsheet::ParseXLSX::Worksheet" : { "file" : "lib/Spreadsheet/ParseXLSX/Worksheet.pm", "version" : "0.35" } }, "release_status" : "stable", "resources" : { "bugtracker" : { "web" : "https://github.com/MichaelDaum/spreadsheet-parsexlsx/issues" }, "repository" : { "url" : "https://github.com/MichaelDaum/spreadsheet-parsexlsx", "web" : "https://github.com/MichaelDaum/spreadsheet-parsexlsx" } }, "version" : "0.35", "x_Dist_Zilla" : { "perl" : { "version" : "5.038002" }, "plugins" : [ { "class" : "Dist::Zilla::Plugin::FileFinder::Filter", "name" : "NonBinaryScriptFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::Prereqs", "config" : { "Dist::Zilla::Plugin::Prereqs" : { "phase" : "test", "type" : "requires" } }, "name" : "TestMoreDoneTesting", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::GatherDir", "config" : { "Dist::Zilla::Plugin::GatherDir" : { "exclude_filename" : [], "exclude_match" : [], "follow_symlinks" : 0, "include_dotfiles" : 0, "prefix" : "", "prune_directory" : [], "root" : "." } }, "name" : "GatherDir", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::PruneCruft", "name" : "PruneCruft", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::ManifestSkip", "name" : "ManifestSkip", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::MetaYAML", "name" : "MetaYAML", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::License", "name" : "License", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::Readme", "name" : "Readme", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::ExtraTests", "name" : "ExtraTests", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::ExecDir", "name" : "ExecDir", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::ShareDir", "name" : "ShareDir", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::MakeMaker", "config" : { "Dist::Zilla::Role::TestRunner" : { "default_jobs" : 1 } }, "name" : "MakeMaker", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::Manifest", "name" : "Manifest", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::TestRelease", "name" : "TestRelease", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::ConfirmRelease", "name" : "ConfirmRelease", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::MetaConfig", "name" : "MetaConfig", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::MetaJSON", "name" : "MetaJSON", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::NextRelease", "name" : "NextRelease", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::CheckChangesHasContent", "name" : "CheckChangesHasContent", "version" : "0.011" }, { "class" : "Dist::Zilla::Plugin::Test::NoTabs", "config" : { "Dist::Zilla::Plugin::Test::NoTabs" : { "filename" : "xt/author/no-tabs.t", "finder" : [ ":InstallModules", ":ExecFiles", ":TestFiles" ] } }, "name" : "Test::NoTabs", "version" : "0.15" }, { "class" : "Dist::Zilla::Plugin::Test::EOL", "config" : { "Dist::Zilla::Plugin::Test::EOL" : { "filename" : "xt/author/eol.t", "finder" : [ ":ExecFiles", ":InstallModules", ":TestFiles" ], "trailing_whitespace" : 1 } }, "name" : "Test::EOL", "version" : "0.19" }, { "class" : "Dist::Zilla::Plugin::Test::Compile", "config" : { "Dist::Zilla::Plugin::Test::Compile" : { "bail_out_on_fail" : 0, "fail_on_warning" : "author", "fake_home" : 0, "filename" : "t/00-compile.t", "module_finder" : [ ":InstallModules" ], "needs_display" : 0, "phase" : "test", "script_finder" : [ ":PerlExecFiles" ], "skips" : [], "switch" : [] } }, "name" : "Test::Compile", "version" : "2.058" }, { "class" : "Dist::Zilla::Plugin::Test::Perl::Critic", "name" : "Test::Perl::Critic", "version" : "3.001" }, { "class" : "Dist::Zilla::Plugin::PodCoverageTests", "name" : "PodCoverageTests", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::PodSyntaxTests", "name" : "PodSyntaxTests", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::MetaResources", "name" : "MetaResources", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::Git::Check", "config" : { "Dist::Zilla::Plugin::Git::Check" : { "untracked_files" : "die" }, "Dist::Zilla::Role::Git::DirtyFiles" : { "allow_dirty" : [ "Changes", "dist.ini" ], "allow_dirty_match" : [], "changelog" : "Changes" }, "Dist::Zilla::Role::Git::Repo" : { "git_version" : "2.34.1", "repo_root" : "." } }, "name" : "Git::Check", "version" : "2.049" }, { "class" : "Dist::Zilla::Plugin::Git::Commit", "config" : { "Dist::Zilla::Plugin::Git::Commit" : { "add_files_in" : [], "commit_msg" : "changelog", "signoff" : 0 }, "Dist::Zilla::Role::Git::DirtyFiles" : { "allow_dirty" : [ "Changes", "dist.ini" ], "allow_dirty_match" : [], "changelog" : "Changes" }, "Dist::Zilla::Role::Git::Repo" : { "git_version" : "2.34.1", "repo_root" : "." }, "Dist::Zilla::Role::Git::StringFormatter" : { "time_zone" : "local" } }, "name" : "Git::Commit", "version" : "2.049" }, { "class" : "Dist::Zilla::Plugin::Git::Tag", "config" : { "Dist::Zilla::Plugin::Git::Tag" : { "branch" : null, "changelog" : "Changes", "signed" : 0, "tag" : "0.35", "tag_format" : "%v", "tag_message" : "" }, "Dist::Zilla::Role::Git::Repo" : { "git_version" : "2.34.1", "repo_root" : "." }, "Dist::Zilla::Role::Git::StringFormatter" : { "time_zone" : "local" } }, "name" : "Git::Tag", "version" : "2.049" }, { "class" : "Dist::Zilla::Plugin::Git::NextVersion", "config" : { "Dist::Zilla::Plugin::Git::NextVersion" : { "first_version" : "0.28", "version_by_branch" : 0, "version_regexp" : "(?^u:^(\\d+\\.\\d+)$)" }, "Dist::Zilla::Role::Git::Repo" : { "git_version" : "2.34.1", "repo_root" : "." } }, "name" : "Git::NextVersion", "version" : "2.049" }, { "class" : "Dist::Zilla::Plugin::Git::Contributors", "config" : { "Dist::Zilla::Plugin::Git::Contributors" : { "git_version" : "2.34.1", "include_authors" : 0, "include_releaser" : 1, "order_by" : "name", "paths" : [] } }, "name" : "Git::Contributors", "version" : "0.037" }, { "class" : "Dist::Zilla::Plugin::OurPkgVersion", "name" : "OurPkgVersion", "version" : "0.21" }, { "class" : "Dist::Zilla::Plugin::PodWeaver", "config" : { "Dist::Zilla::Plugin::PodWeaver" : { "finder" : [ ":InstallModules", ":PerlExecFiles" ], "plugins" : [ { "class" : "Pod::Weaver::Plugin::EnsurePod5", "name" : "@CorePrep/EnsurePod5", "version" : "4.019" }, { "class" : "Pod::Weaver::Plugin::H1Nester", "name" : "@CorePrep/H1Nester", "version" : "4.019" }, { "class" : "Pod::Weaver::Plugin::SingleEncoding", "name" : "-SingleEncoding", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Name", "name" : "Name", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Version", "name" : "Version", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Region", "name" : "prelude", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Generic", "name" : "SYNOPSIS", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Generic", "name" : "DESCRIPTION", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Generic", "name" : "OVERVIEW", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Collect", "name" : "ATTRIBUTES", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Collect", "name" : "METHODS", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Collect", "name" : "FUNCTIONS", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Leftovers", "name" : "Leftovers", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Region", "name" : "postlude", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Authors", "name" : "Authors", "version" : "4.019" }, { "class" : "Pod::Weaver::Section::Contributors", "name" : "Contributors", "version" : "0.009" }, { "class" : "Pod::Weaver::Section::Legal", "name" : "Legal", "version" : "4.019" } ] } }, "name" : "PodWeaver", "version" : "4.010" }, { "class" : "Dist::Zilla::Plugin::ReadmeAnyFromPod", "config" : { "Dist::Zilla::Role::FileWatcher" : { "version" : "0.006" } }, "name" : "ReadmeAnyFromPod", "version" : "0.163250" }, { "class" : "Dist::Zilla::Plugin::UploadToCPAN", "name" : "UploadToCPAN", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::MetaProvides::Package", "config" : { "Dist::Zilla::Plugin::MetaProvides::Package" : { "finder_objects" : [ { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : "MetaProvides::Package/AUTOVIV/:InstallModulesPM", "version" : "6.031" } ], "include_underscores" : 0 }, "Dist::Zilla::Role::MetaProvider::Provider" : { "$Dist::Zilla::Role::MetaProvider::Provider::VERSION" : "2.002004", "inherit_missing" : 1, "inherit_version" : 1, "meta_noindex" : 1 }, "Dist::Zilla::Role::ModuleMetadata" : { "Module::Metadata" : "1.000038", "version" : "0.006" } }, "name" : "MetaProvides::Package", "version" : "2.004003" }, { "class" : "Dist::Zilla::Plugin::AutoPrereqs", "name" : "AutoPrereqs", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::Encoding", "name" : "Encoding", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":InstallModules", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":IncModules", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":TestFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":ExtraTestFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":ExecFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":PerlExecFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":ShareFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":MainModule", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":AllFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":NoFiles", "version" : "6.031" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : "MetaProvides::Package/AUTOVIV/:InstallModulesPM", "version" : "6.031" } ], "zilla" : { "class" : "Dist::Zilla::Dist::Builder", "config" : { "is_trial" : 0 }, "version" : "6.031" } }, "x_contributors" : [ "Alexey Mazurin ", "Daryl Anderman ", "Dave Clarke ", "Fitz Elliott ", "FL ", "Gareth Tunley ", "Meredith Howard ", "Michael Conrad ", "Michael Daum ", "Nick Moore ", "oharakouhei ", "rdboisvert ", "Ricardo Signes ", "Robert Boisvert ", "Steve Simms ", "Stuart Watt ", "theevilapplepie ", "zhouzhen1 " ], "x_generated_by_perl" : "v5.38.2", "x_serialization_backend" : "Cpanel::JSON::XS version 4.37", "x_spdx_expression" : "MIT" } Spreadsheet-ParseXLSX-0.35/lib/0000775000175000017500000000000014576335353015211 5ustar michamichaSpreadsheet-ParseXLSX-0.35/lib/Spreadsheet/0000775000175000017500000000000014576335353017460 5ustar michamichaSpreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX.pm0000644000175000017500000011627414576335353021620 0ustar michamichapackage Spreadsheet::ParseXLSX; use strict; use warnings; use 5.010; our $VERSION = '0.35'; # VERSION # ABSTRACT: parse XLSX files use Archive::Zip 1.34; use Graphics::ColorUtils 'rgb2hls', 'hls2rgb'; use Scalar::Util 'openhandle'; use Spreadsheet::ParseExcel; use XML::Twig; use Spreadsheet::ParseXLSX::Decryptor; use Spreadsheet::ParseXLSX::Worksheet; use Spreadsheet::ParseXLSX::Cell; sub new { my $class = shift; my (%args) = @_; my $self = bless {}, $class; $self->{Password} = $args{Password} if defined $args{Password}; return $self; } sub parse { my $self = shift; my ($file, $formatter) = @_; my $zip = Archive::Zip->new; my $workbook = Spreadsheet::ParseExcel::Workbook->new; if ($self->_check_signature($file)) { my $decrypted_file = Spreadsheet::ParseXLSX::Decryptor->open($file, $self->{Password}); $file = $decrypted_file if $decrypted_file; } if (openhandle($file)) { bless $file, 'IO::File' if ref($file) eq 'GLOB'; # sigh my $fh = ref($file) eq 'File::Temp' ? IO::File->new("<&=" . fileno($file)) : $file; $zip->readFromFileHandle($fh) == Archive::Zip::AZ_OK or die "Can't open filehandle as a zip file"; $workbook->{File} = undef; $workbook->{__tempfile} = $file; } elsif (ref($file) eq 'SCALAR') { open my $fh, '+<', $file or die "Can't create filehandle from memory data"; $zip->readFromFileHandle($fh) == Archive::Zip::AZ_OK or die "Can't open scalar ref as a zip file"; $workbook->{File} = undef; } elsif (!ref($file)) { $zip->read($file) == Archive::Zip::AZ_OK or die "Can't open file '$file' as a zip file"; $workbook->{File} = $file; } else { die "First argument to 'parse' must be a filename, open filehandle, or scalar ref"; } return $self->_parse_workbook($zip, $workbook, $formatter); } sub _check_signature { my $self = shift; my ($file) = @_; my $signature = ''; if (openhandle($file)) { bless $file, 'IO::File' if ref($file) eq 'GLOB'; # sigh $file->read($signature, 2); $file->seek(-2, IO::File::SEEK_CUR); } elsif (ref($file) eq 'SCALAR') { $signature = substr($$file, 0, 2); } elsif (!ref($file)) { my $fh = IO::File->new($file, 'r'); $fh->read($signature, 2); $fh->close; } return $signature eq "\xd0\xcf"; } sub _parse_workbook { my $self = shift; my ($zip, $workbook, $formatter) = @_; my $files = $self->_extract_files($zip); my ($version) = $files->{workbook}->find_nodes('//s:fileVersion'); my ($properties) = $files->{workbook}->find_nodes('//s:workbookPr'); if ($version) { $workbook->{Version} = $version->att('appName') . ( $version->att('lowestEdited') ? ('-' . $version->att('lowestEdited')) : ("") ); } $workbook->{Flg1904} = $self->_xml_boolean($properties->att('date1904')) if $properties; $workbook->{FmtClass} = $formatter || Spreadsheet::ParseExcel::FmtDefault->new; my $themes = $self->_parse_themes((values %{$files->{themes}})[0]); # XXX $workbook->{Color} = $themes->{Color}; my $styles = $self->_parse_styles($workbook, $files->{styles}); $workbook->{Format} = $styles->{Format}; $workbook->{FormatStr} = $styles->{FormatStr}; $workbook->{Font} = $styles->{Font}; if ($files->{strings}) { my %string_parse_data = $self->_parse_shared_strings($files->{strings}, $themes->{Color}); $workbook->{PkgStr} = $string_parse_data{PkgStr}; $workbook->{Rich} = $string_parse_data{Rich}; } # $workbook->{StandardWidth} = ...; # $workbook->{Author} = ...; # $workbook->{PrintArea} = ...; # $workbook->{PrintTitle} = ...; my @sheets = map { my $idx = $_->att('rels:id'); if ($files->{sheets}{$idx}) { my $sheet = Spreadsheet::ParseXLSX::Worksheet->new( Name => $_->att('name'), _Book => $workbook, _SheetNo => $idx, ); $sheet->{SheetHidden} = 1 if defined $_->att('state') and $_->att('state') eq 'hidden'; $self->_parse_sheet($sheet, $files->{sheets}{$idx}); # Do we have a rels for for this sheet? if ( $files->{sheets_rels} && $files->{sheets_rels}{$idx}) { # Yes - now parse the rels to extract the hyperlinks $self->_parse_sheet_links($sheet, $files->{sheets}{$idx}, $files->{sheets_rels}{$idx}); } ($sheet); } else { () } } $files->{workbook}->find_nodes('//s:sheets/s:sheet'); $workbook->{Worksheet} = \@sheets; $workbook->{SheetCount} = scalar(@sheets); my ($node) = $files->{workbook}->find_nodes('//s:workbookView'); my $selected = $node ? $node->att('activeTab') : undef; $workbook->{SelectedSheet} = defined($selected) ? 0 + $selected : 0; return $workbook; } sub _parse_sheet { my $self = shift; my ($sheet, $sheet_file) = @_; # The XML::Twig instance does not clean up properly. If we give it callbacks with # strong references to $self or $sheet, we end up with a memory leak. Scalar::Util::weaken($self); Scalar::Util::weaken($sheet); $sheet->{MinRow} = 0; $sheet->{MinCol} = 0; $sheet->{MaxRow} = -1; $sheet->{MaxCol} = -1; $sheet->{Selection} = [0, 0]; my @column_formats; my @column_widths; my @columns_hidden; my @row_heights; my @rows_hidden; my $default_row_height = 15; my $default_column_width = 10; my $row_idx = 0; my $sheet_xml = $self->_new_twig( twig_roots => { #XXX need a fallback here, the dimension tag is optional 's:dimension' => sub { my ($twig, $dimension) = @_; my ($rmin, $cmin, $rmax, $cmax) = $self->_dimensions($dimension->att('ref')); $sheet->{MinRow} = $rmin; $sheet->{MinCol} = $cmin; $sheet->{MaxRow} = $rmax ? $rmax : -1; $sheet->{MaxCol} = $cmax ? $cmax : -1; $twig->purge; }, 's:headerFooter' => sub { my ($twig, $hf) = @_; my ($helem, $felem) = map { $hf->first_child("s:$_") } qw(oddHeader oddFooter); $sheet->{Header} = $helem->text if $helem; $sheet->{Footer} = $felem->text if $felem; $twig->purge; }, 's:pageMargins' => sub { my ($twig, $margin) = @_; map { my $key = "\u${_}Margin"; $sheet->{$key} = defined $margin->att($_) ? $margin->att($_) : 0 } qw(left right top bottom header footer); $twig->purge; }, 's:pageSetup' => sub { my ($twig, $setup) = @_; $sheet->{Scale} = defined $setup->att('scale') ? $setup->att('scale') : 100; $sheet->{Landscape} = ($setup->att('orientation') || '') ne 'landscape'; $sheet->{PaperSize} = defined $setup->att('paperSize') ? $setup->att('paperSize') : 1; $sheet->{PageStart} = $setup->att('firstPageNumber'); $sheet->{UsePage} = $self->_xml_boolean($setup->att('useFirstPageNumber')); $sheet->{HorizontalDPI} = $setup->att('horizontalDpi'); $sheet->{VerticalDPI} = $setup->att('verticalDpi'); $twig->purge; }, 's:mergeCells/s:mergeCell' => sub { my ($twig, $merge_area) = @_; if (my $ref = $merge_area->att('ref')) { my ($topleft, $bottomright) = $ref =~ /([^:]+):([^:]+)/; my ($toprow, $leftcol) = $self->_cell_to_row_col($topleft); my ($bottomrow, $rightcol) = $self->_cell_to_row_col($bottomright); push @{$sheet->{MergedArea}}, [$toprow, $leftcol, $bottomrow, $rightcol,]; } $twig->purge; }, 's:sheetFormatPr' => sub { my ($twig, $format) = @_; $default_row_height = $format->att('defaultRowHeight') unless defined $default_row_height; $default_column_width = $format->att('baseColWidth') unless defined $default_column_width; $twig->purge; }, 's:col' => sub { my ($twig, $col) = @_; for my $colnum ($col->att('min') .. $col->att('max')) { $column_widths[$colnum - 1] = $col->att('width'); $column_formats[$colnum - 1] = $col->att('style'); $columns_hidden[$colnum - 1] = $self->_xml_boolean($col->att('hidden')); } $twig->purge; }, 's:selection' => sub { my ($twig, $selection) = @_; if (my $cell = $selection->att('activeCell')) { $sheet->{Selection} = [$self->_cell_to_row_col($cell)]; } elsif (my $range = $selection->att('sqref')) { my ($topleft, $bottomright) = $range =~ /([^:]+):([^:]+)/; $sheet->{Selection} = [$self->_cell_to_row_col($topleft), $self->_cell_to_row_col($bottomright),]; } $twig->purge; }, 's:sheetPr/s:tabColor' => sub { my ($twig, $tab_color) = @_; $sheet->{TabColor} = $self->_color($sheet->{_Book}{Color}, $tab_color); $twig->purge; }, 's:sheetData/s:row' => sub { my ($twig, $row_elt) = @_; my $explicit_row_idx = $row_elt->att('r'); $row_idx = $explicit_row_idx - 1 if defined $explicit_row_idx; $row_heights[$row_idx] = $row_elt->att('ht'); $rows_hidden[$row_idx] = $self->_xml_boolean($row_elt->att('hidden')); my $col_idx = 0; for my $cell ($row_elt->children('s:c')) { my $loc = $cell->att('r'); my ($row, $col); if ($loc) { ($row, $col) = $self->_cell_to_row_col($loc); if ($row != $row_idx) { warn "mismatched coords: got $loc for cell in row $row_idx"; } $col_idx = $col - 1; } else { ($row, $col) = ($row_idx, $col_idx); } $sheet->{MaxRow} = $row if $sheet->{MaxRow} < $row; $sheet->{MaxCol} = $col if $sheet->{MaxCol} < $col; my $type = $cell->att('t') || 'n'; my $val_xml; if ($type ne 'inlineStr') { $val_xml = $cell->first_child('s:v'); } elsif (defined $cell->first_child('s:is')) { $val_xml = ($cell->find_nodes('.//s:t'))[0]; } my $val = $val_xml ? $val_xml->text : undef; my $long_type; my $Rich; if (!defined($val)) { $long_type = 'Text'; $val = ''; } elsif ($type eq 's') { $long_type = 'Text'; $Rich = $sheet->{_Book}{Rich}->{$val}; $val = $sheet->{_Book}{PkgStr}[$val]; } elsif ($type eq 'n') { $long_type = 'Numeric'; $val = defined($val) && $val ne '' ? 0 + $val : undef; } elsif ($type eq 'd') { $long_type = 'Date'; } elsif ($type eq 'b') { $long_type = 'Text'; $val = $val ? "TRUE" : "FALSE"; } elsif ($type eq 'e') { $long_type = 'Text'; } elsif ($type eq 'str' || $type eq 'inlineStr') { $long_type = 'Text'; } else { die "unimplemented type $type"; # XXX } my $format_idx = $cell->att('s') || 0; my $format = $sheet->{_Book}{Format}[$format_idx]; my $formatstr = $sheet->{_Book}{FormatStr}{$format->{FmtIdx}}; die "unknown format $format_idx" unless $format; # see the list of built-in formats below in _parse_styles # XXX probably should figure this out from the actual format string, # but that's not entirely trivial if (grep { $format->{FmtIdx} == $_ } 14 .. 22, 45 .. 47) { $long_type = 'Date'; } if ($formatstr =~ /\b(mmm|m|d|yy|h|hh|mm|ss)\b/i) { $long_type = 'Date'; } my $formula = $cell->first_child('s:f'); my $cell = Spreadsheet::ParseXLSX::Cell->new( Val => $val, Type => $long_type, Format => $format, FormatNo => $format_idx, ( $formula ? (Formula => $formula->text) : () ), Rich => $Rich, ); $cell->{_Value} = $sheet->{_Book}{FmtClass}->ValFmt($cell, $sheet->{_Book}); $sheet->{Cells}[$row][$col] = $cell; $col_idx++; } $twig->purge; $row_idx++; }, } ); $sheet_xml->parse($sheet_file); if ($sheet->{Cells}) { # SMELL: we have to connect cells their sheet as well as their position my $sheet_addr= Scalar::Util::refaddr($sheet); for my $r (0 .. $#{$sheet->{Cells}}) { my $row = $sheet->{Cells}[$r] or next; for my $c (0 .. $#$row) { my $cell = $row->[$c] or next; $cell->{Sheet} = $sheet_addr; $cell->{Row} = $r; $cell->{Col} = $c; } } } else { $sheet->{MaxRow} = $sheet->{MaxCol} = -1; } $sheet->{DefRowHeight} = 0 + $default_row_height; $sheet->{DefColWidth} = 0 + $default_column_width; $sheet->{RowHeight} = [map { defined $_ ? 0 + $_ : 0 + $default_row_height } @row_heights]; $sheet->{RowHidden} = \@rows_hidden; $sheet->{ColWidth} = [map { defined $_ ? 0 + $_ : 0 + $default_column_width } @column_widths]; $sheet->{ColFmtNo} = \@column_formats; $sheet->{ColHidden} = \@columns_hidden; } sub _parse_sheet_links { my $self = shift; my ($sheet, $sheet_file, $rels_file) = @_; # First we need to parse the hyperlinks out of the rels XML my $rels; my $rels_xml = XML::Twig->new( twig_roots => { 'Relationships/Relationship' => sub { my $twig = shift; my $relationship = shift; if ( $relationship->att('Type') eq 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink' && $relationship->att('TargetMode') eq 'External') { # Store the target URL in a hash by relationship id $rels->{$relationship->att('Id')} = $relationship->att('Target'); } $twig->purge; }, }, ); # Run the parser $rels_xml->parse($rels_file); # Now iterate over the sheet XML again, this time processing hyperlink entries my $sheet_xml = XML::Twig->new( twig_roots => { 'hyperlinks/hyperlink' => sub { my $twig = shift; my $hyperlink = shift; # Work out our row and column my ($row, $col) = $self->_cell_to_row_col($hyperlink->att('ref')); # Get the cell my $cell = $sheet->{Cells}[$row][$col]; # Do I have a cell? unless ($cell) { # No - just create an empty value for now $cell = $sheet->{Cells}[$row][$col] = Spreadsheet::ParseXLSX::Cell->new(); } # Is this an external hyperlink I've parsed from the rels? if ( $hyperlink->att('r:id') && $rels && $rels->{$hyperlink->att('r:id')}) { # Yes - Check if we need to frig our destination a bit my $destination_url = sprintf('%s%s%s', $rels->{$hyperlink->att('r:id')}, $hyperlink->att('location') ? '#' : '', $hyperlink->att('location') || '',); # Add the hyperlink $cell->{Hyperlink} = [ $hyperlink->att('display') || $cell->{_Value} || undef, # Description $destination_url, # Target undef, # Target Frame $row, # Start Row $row, # End Row $col, # Start Column $col, # End Column ]; } else { # This is an internal hyperlink # Add the hyperlink $cell->{Hyperlink} = [ $hyperlink->att('display') || $cell->{_Value} || undef, # Description $hyperlink->att('location'), # Target undef, # Target Frame $row, # Start Row $row, # End Row $col, # Start Column $col, # End Column ]; } $twig->purge; }, }, ); # Now parse the XML $sheet_xml->parse($sheet_file); } sub _get_text_and_rich_font_by_cell { my $self = shift; my ($si, $theme_colors) = @_; # XXX my %default_font_opts = ( Height => 12, Color => '#000000', Name => '', Bold => 0, Italic => 0, Underline => 0, UnderlineStyle => 0, Strikeout => 0, Super => 0, ); my $string_text = ''; my @rich_font_by_cell; for my $subnode ($si->children) { if ($subnode->name eq 's:t') { $string_text .= $subnode->text; } elsif ($subnode->name eq 's:r') { for my $chunk ($subnode->children) { my $string_length = length($string_text); if ($chunk->name eq 's:t') { if (!@rich_font_by_cell) { push @rich_font_by_cell, [$string_length, Spreadsheet::ParseExcel::Font->new(%default_font_opts)]; } $string_text .= $chunk->text; } elsif ($chunk->name eq 's:rPr') { my %format_text = %default_font_opts; for my $node_format ($chunk->children) { if ($node_format->name eq 's:sz') { $format_text{Height} = $node_format->att('val'); } elsif ($node_format->name eq 's:color') { $format_text{Color} = $self->_color($theme_colors, $node_format); } elsif ($node_format->name eq 's:rFont') { $format_text{Name} = $node_format->att('val'); } elsif ($node_format->name eq 's:b') { $format_text{Bold} = 1; } elsif ($node_format->name eq 's:i') { $format_text{Italic} = 1; } elsif ($node_format->name eq 's:u') { $format_text{Underline} = 1; if (defined $node_format->att('val')) { $format_text{UnderlineStyle} = 2; } else { $format_text{UnderlineStyle} = 1; } } elsif ($node_format->name eq 's:strike') { $format_text{Strikeout} = 1; } elsif ($node_format->name eq 's:vertAlign') { if ($node_format->att('val') eq 'superscript') { $format_text{Super} = 1; } elsif ($node_format->att('val') eq 'subscript') { $format_text{Super} = 2; } } } push @rich_font_by_cell, [$string_length, Spreadsheet::ParseExcel::Font->new(%format_text)]; } } } else { # $subnode->name is either 's:rPh' or 's:phoneticPr' # We ignore phonetic information and do nothing. } } return ( String => $string_text, Rich => \@rich_font_by_cell, ); } sub _parse_shared_strings { my $self = shift; my ($strings, $theme_colors) = @_; my $PkgStr = []; my %richfonts; if ($strings) { my $xml = $self->_new_twig( twig_handlers => { 's:si' => sub { my ($twig, $si) = @_; my %text_rich = $self->_get_text_and_rich_font_by_cell($si, $theme_colors); $richfonts{scalar @$PkgStr} = $text_rich{Rich}; push @$PkgStr, $text_rich{String}; $twig->purge; }, } ); $xml->parse($strings); } return ( Rich => \%richfonts, PkgStr => $PkgStr, ); } sub _parse_themes { my $self = shift; my ($themes) = @_; return {} unless $themes; my @color = map { $_->name eq 'drawmain:sysClr' ? $_->att('lastClr') : $_->att('val') } $themes->find_nodes('//drawmain:clrScheme/*/*'); # this shouldn't be necessary, but the documentation is wrong here # see http://stackoverflow.com/questions/2760976/theme-confusion-in-spreadsheetml ($color[0], $color[1]) = ($color[1], $color[0]); ($color[2], $color[3]) = ($color[3], $color[2]); return {Color => \@color,}; } sub _parse_styles { my $self = shift; my ($workbook, $styles) = @_; # these defaults are from # http://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/thread/e27aaf16-b900-4654-8210-83c5774a179c my %default_format_str = ( 0 => 'GENERAL', 1 => '0', 2 => '0.00', 3 => '#,##0', 4 => '#,##0.00', 5 => '$#,##0_);($#,##0)', 6 => '$#,##0_);[Red]($#,##0)', 7 => '$#,##0.00_);($#,##0.00)', 8 => '$#,##0.00_);[Red]($#,##0.00)', 9 => '0%', 10 => '0.00%', 11 => '0.00E+00', 12 => '# ?/?', 13 => '# ??/??', 14 => 'm/d/yyyy', 15 => 'd-mmm-yy', 16 => 'd-mmm', 17 => 'mmm-yy', 18 => 'h:mm AM/PM', 19 => 'h:mm:ss AM/PM', 20 => 'h:mm', 21 => 'h:mm:ss', 22 => 'm/d/yyyy h:mm', 37 => '#,##0_);(#,##0)', 38 => '#,##0_);[Red](#,##0)', 39 => '#,##0.00_);(#,##0.00)', 40 => '#,##0.00_);[Red](#,##0.00)', 45 => 'mm:ss', 46 => '[h]:mm:ss', 47 => 'mm:ss.0', 48 => '##0.0E+0', 49 => '@', ); my %default_format_opts = ( IgnoreFont => 1, IgnoreFill => 1, IgnoreBorder => 1, IgnoreAlignment => 1, IgnoreNumberFormat => 1, IgnoreProtection => 1, FontNo => 0, FmtIdx => 0, Lock => 1, Hidden => 0, AlignH => 0, Wrap => 0, AlignV => 2, Rotate => 0, Indent => 0, Shrink => 0, BdrStyle => [0, 0, 0, 0], BdrColor => [undef, undef, undef, undef], BdrDiag => [0, 0, undef], Fill => [0, undef, undef], ); if (!$styles) { # XXX i guess? my $font = Spreadsheet::ParseExcel::Font->new( Height => 12, Color => '#000000', Name => '', ); my $format = Spreadsheet::ParseExcel::Format->new(%default_format_opts, Font => $font,); return { FormatStr => \%default_format_str, Font => [$font], Format => [$format], }; } my %halign = ( center => 2, centerContinuous => 6, distributed => 7, fill => 4, general => 0, justify => 5, left => 1, right => 3, ); my %valign = ( bottom => 2, center => 1, distributed => 4, justify => 3, top => 0, ); my %border = ( dashDot => 9, dashDotDot => 11, dashed => 3, dotted => 4, double => 6, hair => 7, medium => 2, mediumDashDot => 10, mediumDashDotDot => 12, mediumDashed => 8, none => 0, slantDashDot => 13, thick => 5, thin => 1, ); my %fill = ( darkDown => 7, darkGray => 3, darkGrid => 9, darkHorizontal => 5, darkTrellis => 10, darkUp => 8, darkVertical => 6, gray0625 => 18, gray125 => 17, lightDown => 13, lightGray => 4, lightGrid => 15, lightHorizontal => 11, lightTrellis => 16, lightUp => 14, lightVertical => 12, mediumGray => 2, none => 0, solid => 1, ); my @fills = map { my $pattern_type = $_->att('patternType'); [($pattern_type ? $fill{$pattern_type} : 0), $self->_color($workbook->{Color}, $_->first_child('s:fgColor'), 1), $self->_color($workbook->{Color}, $_->first_child('s:bgColor'), 1),] } $styles->find_nodes('//s:fills/s:fill/s:patternFill'); my @borders = map { my $border = $_; my ($ddiag, $udiag) = map { $self->_xml_boolean($border->att($_)) } qw(diagonalDown diagonalUp); my %borderstyles = map { my $e = $border->first_child("s:$_"); $_ => ($e ? $e->att('style') || 'none' : 'none') } qw(left right top bottom diagonal); my %bordercolors = map { my $e = $border->first_child("s:$_"); $_ => ($e ? $e->first_child('s:color') : undef) } qw(left right top bottom diagonal); # XXX specs say "begin" and "end" rather than "left" and "right", # but... that's not what seems to be in the file itself (sigh) { colors => [map { $self->_color($workbook->{Color}, $bordercolors{$_}) } qw(left right top bottom)], styles => [map { $border{$borderstyles{$_}} } qw(left right top bottom)], diagonal => [( $ddiag && $udiag ? 3 : $ddiag && !$udiag ? 2 : !$ddiag && $udiag ? 1 : 0 ), $border{$borderstyles{diagonal}}, $self->_color($workbook->{Color}, $bordercolors{diagonal}), ], } } $styles->find_nodes('//s:borders/s:border'); my %format_str = (%default_format_str, (map { $_->att('numFmtId') => $_->att('formatCode') } $styles->find_nodes('//s:numFmts/s:numFmt')),); my @font = map { my $vert = $_->first_child('s:vertAlign'); my $under = $_->first_child('s:u'); my $heightelem = $_->first_child('s:sz'); # XXX i guess 12 is okay? my $height = 0 + ($heightelem ? $heightelem->att('val') : 12); my $nameelem = $_->first_child('s:name'); my $name = $nameelem ? $nameelem->att('val') : ''; Spreadsheet::ParseExcel::Font->new( Height => $height, # Attr => $iAttr, # XXX not sure if there's a better way to keep the indexing stuff # intact rather than just going straight to #xxxxxx # XXX also not sure what it means for the color tag to be missing, # just assuming black for now Color => ( $_->first_child('s:color') ? $self->_color($workbook->{Color}, $_->first_child('s:color')) : '#000000' ), Super => ( $vert ? ( $vert->att('val') eq 'superscript' ? 1 : $vert->att('val') eq 'subscript' ? 2 : 0 ) : 0 ), # XXX not sure what the single accounting and double accounting # underline styles map to in xlsx. also need to map the new # underline styles UnderlineStyle => ( $under # XXX sometimes style xml files can contain just with no # val attribute. i think this means single underline, but not # sure ? ( !$under->att('val') ? 1 : $under->att('val') eq 'single' ? 1 : $under->att('val') eq 'double' ? 2 : 0 ) : 0 ), Name => $name, Bold => $_->has_child('s:b') ? 1 : 0, Italic => $_->has_child('s:i') ? 1 : 0, Underline => $_->has_child('s:u') ? 1 : 0, Strikeout => $_->has_child('s:strike') ? 1 : 0, ) } $styles->find_nodes('//s:fonts/s:font'); my @format = map { my $xml_fmt = $_; my $alignment = $xml_fmt->first_child('s:alignment'); my $protection = $xml_fmt->first_child('s:protection'); my %ignore = map { ("Ignore$_" => !$self->_xml_boolean($xml_fmt->att("apply$_"))) } qw(Font Fill Border Alignment NumberFormat Protection); my %opts = (%default_format_opts, %ignore,); $opts{FmtIdx} = 0 + ($xml_fmt->att('numFmtId') || 0); $opts{FontNo} = 0 + ($xml_fmt->att('fontId') || 0); $opts{Font} = $font[$opts{FontNo}]; $opts{Fill} = $fills[$xml_fmt->att('fillId') || 0]; $opts{BdrStyle} = $borders[$xml_fmt->att('borderId') || 0]{styles}; $opts{BdrColor} = $borders[$xml_fmt->att('borderId') || 0]{colors}; $opts{BdrDiag} = $borders[$xml_fmt->att('borderId') || 0]{diagonal}; if ($alignment) { $opts{AlignH} = $halign{$alignment->att('horizontal') || 'general'}; $opts{Wrap} = $self->_xml_boolean($alignment->att('wrapText')); $opts{AlignV} = $valign{$alignment->att('vertical') || 'bottom'}; $opts{Rotate} = $alignment->att('textRotation'); $opts{Indent} = $alignment->att('indent'); $opts{Shrink} = $self->_xml_boolean($alignment->att('shrinkToFit')); # JustLast => $iJustL, } if ($protection) { $opts{Lock} = defined $protection->att('locked') ? $self->_xml_boolean($protection->att('locked')) : 1; $opts{Hidden} = $self->_xml_boolean($protection->att('hidden')); } # Style => $iStyle, # Key123 => $i123, # Merge => $iMerge, # ReadDir => $iReadDir, Spreadsheet::ParseExcel::Format->new(%opts) } $styles->find_nodes('//s:cellXfs/s:xf'); return { FormatStr => \%format_str, Font => \@font, Format => \@format, }; } sub _extract_files { my $self = shift; my ($zip) = @_; my $type_base = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'; my $rels = $self->_parse_xml($zip, $self->_rels_for(''),); my $node = ($rels->find_nodes(qq))[0]; die "invalid workbook" unless $node; my $wb_name = $node->att('Target'); $wb_name =~ s{^/}{}; my $wb_xml = $self->_parse_xml($zip, $wb_name); my $path_base = $self->_base_path_for($wb_name); my $wb_rels = $self->_parse_xml($zip, $self->_rels_for($wb_name),); my $get_path = sub { my ($p) = @_; return $p =~ s{^/}{} ? $p : $path_base . $p; }; my ($strings_xml) = map { $self->_zip_file_member($zip, $get_path->($_->att('Target'))) } $wb_rels->find_nodes(qq); my ($styles_xml) = map { $self->_parse_xml($zip, $get_path->($_->att('Target'))) } $wb_rels->find_nodes(qq); my %worksheet_xml = map { ($_->att('Id') => $self->_zip_file_member($zip, $get_path->($_->att('Target')))) } $wb_rels->find_nodes(qq); # If we have hyperlinks in cells we need the rels file to get the link details my $worksheet_rels_xml; # Get each worksheet object foreach my $worksheet ($wb_rels->find_nodes(qq)) { # Split the worksheet xml path so we can my @sheetname_parts = split('/', $worksheet->att('Target')); # Insert _rels before the sheetname, and amend the filename to have .rels on the end my $sheetname = pop(@sheetname_parts); push(@sheetname_parts, '_rels'); push(@sheetname_parts, $sheetname . '.rels'); # Recreate the file path my $rels_name = join('/', @sheetname_parts); # Check if we have a rels file if (my $relfile = $zip->memberNamed($get_path->($rels_name))) { # Add the XML to our hash for access later on $worksheet_rels_xml->{$worksheet->att('Id')} = $relfile->contents; } } my %themes_xml = map { $_->att('Id') => $self->_parse_xml($zip, $get_path->($_->att('Target'))) } $wb_rels->find_nodes(qq); return { workbook => $wb_xml, sheets => \%worksheet_xml, themes => \%themes_xml, ( $styles_xml ? (styles => $styles_xml) : () ), ( $strings_xml ? (strings => $strings_xml) : () ), (($worksheet_rels_xml && keys(%$worksheet_rels_xml)) ? (sheets_rels => $worksheet_rels_xml) : ()), }; } sub _parse_xml { my $self = shift; my ($zip, $subfile, $map_xmlns) = @_; my $xml = $self->_new_twig; $xml->parse($self->_zip_file_member($zip, $subfile)); return $xml; } sub _zip_file_member { my $self = shift; my ($zip, $name) = @_; my @members = $zip->membersMatching(qr/^$name$/i); die "no subfile named $name" unless @members; return scalar $members[0]->contents; } sub _rels_for { my $self = shift; my ($file) = @_; my @path = split '/', $file; my $name = pop @path; $name = '' unless defined $name; push @path, '_rels'; push @path, "$name.rels"; return join '/', @path; } sub _base_path_for { my $self = shift; my ($file) = @_; my @path = split '/', $file; pop @path; return join('/', @path) . '/'; } sub _dimensions { my $self = shift; my ($dim) = @_; my ($topleft, $bottomright) = split ':', $dim; $bottomright = $topleft unless defined $bottomright; my ($rmin, $cmin) = $self->_cell_to_row_col($topleft); my ($rmax, $cmax) = $self->_cell_to_row_col($bottomright); return ($rmin, $cmin, $rmax, $cmax); } sub _is_merged { my ($self, $sheet, $row, $col) = @_; return unless $sheet->{MergedArea}; foreach my $area (@{$sheet->{MergedArea}}) { my ($topRow, $leftCol, $bottomRow, $rightCol) = @$area; return 1 if $topRow <= $row && $leftCol <= $col && $row <= $bottomRow && $col <= $rightCol; } return 0; } sub _cell_to_row_col { my $self = shift; my ($cell) = @_; my ($col, $row) = $cell =~ /([A-Z]+)([0-9]+)/; my $ncol = 0; for my $char (split //, $col) { $ncol *= 26; $ncol += ord($char) - ord('A') + 1; } $ncol = $ncol - 1; my $nrow = $row - 1; return ($nrow, $ncol); } sub _xml_boolean { my $self = shift; my ($bool) = @_; return defined($bool) && ($bool eq 'true' || $bool eq '1'); } sub _color { my $self = shift; my ($colors, $color_node, $fill) = @_; my $color; if ($color_node && !$self->_xml_boolean($color_node->att('auto'))) { if (defined $color_node->att('indexed')) { # see https://rt.cpan.org/Public/Bug/Display.html?id=93065 if ($fill && $color_node->att('indexed') == 64) { return '#FFFFFF'; } else { $color = '#' . Spreadsheet::ParseExcel->ColorIdxToRGB($color_node->att('indexed')); } } elsif (defined $color_node->att('rgb')) { $color = '#' . substr($color_node->att('rgb'), 2, 6); } elsif (defined $color_node->att('theme')) { my $theme = $colors->[$color_node->att('theme')]; if (defined $theme) { $color = "#$theme"; } else { return; } } $color = $self->_apply_tint($color, $color_node->att('tint')) if $color_node->att('tint'); } return $color; } sub _apply_tint { my $self = shift; my ($color, $tint) = @_; my ($r, $g, $b) = map { oct("0x$_") } $color =~ /#(..)(..)(..)/; my ($h, $l, $s) = rgb2hls($r, $g, $b); if ($tint < 0) { $l = $l * (1.0 + $tint); } else { $l = $l * (1.0 - $tint) + (1.0 - 1.0 * (1.0 - $tint)); } return scalar hls2rgb($h, $l, $s); } sub _new_twig { my $self = shift; my %opts = @_; return XML::Twig->new( map_xmlns => { 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' => 's', 'http://schemas.openxmlformats.org/package/2006/relationships' => 'packagerels', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' => 'rels', 'http://schemas.openxmlformats.org/drawingml/2006/main' => 'drawmain', }, no_xxe => 1, keep_original_prefix => 1, %opts, ); } 1; __END__ =pod =encoding UTF-8 =head1 NAME Spreadsheet::ParseXLSX - parse XLSX files =head1 VERSION version 0.35 =head1 SYNOPSIS use Spreadsheet::ParseXLSX; my $parser = Spreadsheet::ParseXLSX->new; my $workbook = $parser->parse("file.xlsx"); # see Spreadsheet::ParseExcel for further documentation =head1 DESCRIPTION This module is an adaptor for L that reads XLSX files. For documentation about the various data that you can retrieve from these classes, please see L, L, L, and L. =head1 METHODS =head2 new(%opts) Returns a new parser instance. Takes a hash of parameters: =over 4 =item Password Password to use for decrypting encrypted files. =back =head2 parse($file, $formatter) Parses an XLSX file. Parsing errors throw an exception. C<$file> can be either a filename or an open filehandle. Returns a L instance containing the parsed data. The C<$formatter> argument is an optional formatter class as described in L. =head1 INCOMPATIBILITIES This module returns data using classes from L, so for the most part, it should just be a drop-in replacement. That said, there are a couple areas where the data returned is intentionally different: =over 4 =item Colors In Spreadsheet::ParseExcel, colors are represented by integers which index into the color table, and you have to use C<< Spreadsheet::ParseExcel->ColorIdxToRGB >> in order to get the actual value out. In Spreadsheet::ParseXLSX, while the color table still exists, cells are also allowed to specify their color directly rather than going through the color table. In order to avoid confusion, I normalize all color values in Spreadsheet::ParseXLSX to their string RGB format (C<"#0088ff">). This affects the C, C, and C properties of formats, and the C property of fonts. Note that the default color is represented by C (the same thing that C would return). =item Formulas Spreadsheet::ParseExcel doesn't support formulas. Spreadsheet::ParseXLSX provides basic formula support by returning the text of the formula as part of the cell data. You can access it via C<< $cell->{Formula} >>. Note that the restriction still holds that formula cell values aren't available unless they were explicitly provided when the spreadsheet was written. =back =head1 BUGS =over 4 =item Large spreadsheets may cause segfaults on perl 5.14 and earlier This module internally uses XML::Twig, which makes it potentially subject to L on perl versions 5.14 and below (the underlying bug with perl weak references was fixed in perl 5.15.5). The larger and more complex the spreadsheet, the more likely to be affected, but the actual size at which it segfaults is platform dependent. On a 64-bit perl with 7.6gb memory, it was seen on spreadsheets about 300mb and above. You can work around this adding C to your code before parsing the spreadsheet, although this may have other consequences such as memory leaks. =item Worksheets without the C tag are not supported =item Intra-cell formatting is discarded =item Shared formulas are not supported Shared formula support will require an actual formula parser and quite a bit of custom logic, since the only thing stored in the document is the formula for the base cell - updating the cell references in the formulas in the rest of the cells is handled by the application. Values for these cells are still handled properly. =back In addition, there are still a few areas which are not yet implemented (the XLSX spec is quite large). If you run into any of those, bug reports are quite welcome. Please report any bugs to GitHub Issues at L. =head1 SEE ALSO L: The equivalent, for XLS files. L: An older, less robust and featureful implementation. =head1 SUPPORT You can find this documentation for this module with the perldoc command. perldoc Spreadsheet::ParseXLSX You can also look for information at: =over 4 =item * MetaCPAN L =item * RT: CPAN's request tracker L =item * Github L =item * CPAN Ratings L =back =head1 SPONSORS Parts of this code were paid for by =over 4 =item Socialflow L =back =head1 AUTHOR Jesse Luehrs =head1 CONTRIBUTORS =for stopwords Alexey Mazurin Daryl Anderman Dave Clarke Fitz Elliott FL Gareth Tunley Meredith Howard Michael Conrad Daum Nick Moore oharakouhei rdboisvert Ricardo Signes Robert Boisvert Steve Simms Stuart Watt theevilapplepie zhouzhen1 =over 4 =item * Alexey Mazurin =item * Daryl Anderman =item * Dave Clarke =item * Fitz Elliott =item * FL =item * Gareth Tunley =item * Meredith Howard =item * Michael Conrad =item * Michael Daum =item * Nick Moore =item * oharakouhei =item * rdboisvert =item * Ricardo Signes =item * Robert Boisvert =item * Steve Simms =item * Stuart Watt =item * theevilapplepie =item * zhouzhen1 =back =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License =cut Spreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX/0000775000175000017500000000000014576335353021251 5ustar michamichaSpreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX/Cell.pm0000644000175000017500000000310114576335353022457 0ustar michamichapackage Spreadsheet::ParseXLSX::Cell; use strict; use warnings; our $VERSION = '0.35'; # VERSION # ABSTRACT: wrapper class around L use Spreadsheet::ParseXLSX (); use base 'Spreadsheet::ParseExcel::Cell'; sub is_merged { my ($self, $sheet, $row, $col) = @_; return $self->{Merged} if defined $self->{Merged}; $sheet //= $Spreadsheet::ParseXLSX::Worksheet::_registry{$self->{Sheet}}; $row //= $self->{Row}; $col //= $self->{Col}; return unless defined $sheet && defined $row && defined $col; return $self->{Merged} = Spreadsheet::ParseXLSX::_is_merged(undef, $sheet, $row, $col); } 1; __END__ =pod =encoding UTF-8 =head1 NAME Spreadsheet::ParseXLSX::Cell - wrapper class around L =head1 VERSION version 0.35 =head1 SYNOPSIS use Spreadsheet::ParseXLSX::Cell; my $cell = Spreadsheet::ParseXLSX::Cell->new( Sheet => $sheet, Row => $row, Col => $row, ... ); my $isMerged = $cell->is_merged(); # see Spreadsheet::ParseExcel::Cell for further documentation =head1 METHODS =head2 is_merged($sheet, $row, $col) Returns true if the cell is merged being part of the given sheet, located at the given row and column. Returns undef if the current cell is not connected to any sheet: C<$sheet> defaults to the cell's C<{Sheet}> property, C<$row> to C<{Row}> and C<$col> to the C<{Col}>. =head1 AUTHOR Jesse Luehrs =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License =cut Spreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX/Decryptor/0000775000175000017500000000000014576335353023224 5ustar michamichaSpreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm0000644000175000017500000000633214576335353024605 0ustar michamichapackage Spreadsheet::ParseXLSX::Decryptor::Agile; use strict; use warnings; our $VERSION = '0.35'; # VERSION # ABSTRACT: decryptor for files of version 4.4 use base 'Spreadsheet::ParseXLSX::Decryptor'; sub decrypt { my $self = shift; my ($encryptedValue, $blockKey) = @_; my $key = $self->_generateDecryptionKey($blockKey); my $iv = $self->_generateInitializationVector('', $self->{blockSize}); my $cbc = Crypt::Mode::CBC->new($self->{cipherAlgorithm}, 0); return $cbc->decrypt($encryptedValue, $key, $iv); } sub _generateDecryptionKey { my $self = shift; my ($blockKey) = @_; my $hash; unless ($self->{pregeneratedKey}) { $hash = $self->{hashProc}->($self->{salt} . Encode::encode('UTF-16LE', $self->{password})); for (my $i = 0 ; $i < $self->{spinCount} ; $i++) { $hash = $self->{hashProc}->(pack('L<', $i) . $hash); } $self->{pregeneratedKey} = $hash; } $hash = $self->{hashProc}->($self->{pregeneratedKey} . $blockKey); if (length($hash) > $self->{keyLength}) { $hash = substr($hash, 0, $self->{keyLength}); } elsif (length($hash) < $self->{keyLength}) { $hash .= "\x36" x ($self->{keyLength} - length($hash)); } return $hash; } sub _generateInitializationVector { my $self = shift; my ($blockKey, $blockSize) = @_; my $iv; if ($blockKey) { $iv = $self->{hashProc}->($self->{salt} . $blockKey); } else { $iv = $self->{salt}; } if (length($iv) > $blockSize) { $iv = substr($iv, 0, $blockSize); } elsif (length($iv) < $blockSize) { $iv = $iv . ("\x36" x ($blockSize - length($iv))); } return $iv; } sub decryptFile { my $self = shift; my ($inFile, $outFile, $bufferLength, $key, $fileSize) = @_; my $cbc = Crypt::Mode::CBC->new($self->{cipherAlgorithm}, 0); my $inbuf; my $i = 0; while (($fileSize > 0) && (my $inlen = $inFile->read($inbuf, $bufferLength))) { my $blockId = pack('L<', $i); my $iv = $self->_generateInitializationVector($blockId, $self->{blockSize}); if ($inlen < $bufferLength) { $inbuf .= "\x00" x ($bufferLength - $inlen); } my $outbuf = $cbc->decrypt($inbuf, $key, $iv); if ($fileSize < $inlen) { $inlen = $fileSize; } $outFile->write($outbuf, $inlen); $i++; $fileSize -= $inlen; } } sub verifyPassword { my $self = shift; my ($encryptedVerifier, $encryptedVerifierHash, $hashSize) = @_; my $encryptedVerifierHash0 = $self->{hashProc}->($self->decrypt($encryptedVerifier, "\xfe\xa7\xd2\x76\x3b\x4b\x9e\x79")); $encryptedVerifierHash = $self->decrypt($encryptedVerifierHash, "\xd7\xaa\x0f\x6d\x30\x61\x34\x4e"); $encryptedVerifierHash0 = substr($encryptedVerifierHash0, 0, $hashSize); $encryptedVerifierHash = substr($encryptedVerifierHash, 0, $hashSize); die "Wrong password: $self" unless ($encryptedVerifierHash0 eq $encryptedVerifierHash); } 1; __END__ =pod =encoding UTF-8 =head1 NAME Spreadsheet::ParseXLSX::Decryptor::Agile - decryptor for files of version 4.4 =head1 VERSION version 0.35 =for Pod::Coverage decrypt decryptFile verifyPassword =head1 AUTHOR Jesse Luehrs =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License =cut Spreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm0000644000175000017500000000500214576335353025315 0ustar michamichapackage Spreadsheet::ParseXLSX::Decryptor::Standard; use strict; use warnings; our $VERSION = '0.35'; # VERSION # ABSTRACT: standard decryption use base 'Spreadsheet::ParseXLSX::Decryptor'; sub decrypt { my $self = shift; my ($encryptedValue) = @_; my $key = $self->_generateDecryptionKey("\x00" x 4); my $ecb = Crypt::Mode::ECB->new($self->{cipherAlgorithm}, 0); return $ecb->decrypt($encryptedValue, $key); } sub decryptFile { my $self = shift; my ($inFile, $outFile, $bufferLength, $fileSize) = @_; my $key = $self->_generateDecryptionKey("\x00" x 4); my $ecb = Crypt::Mode::ECB->new($self->{cipherAlgorithm}, 0); my $inbuf; my $i = 0; while (($fileSize > 0) && (my $inlen = $inFile->read($inbuf, $bufferLength))) { if ($inlen < $bufferLength) { $inbuf .= "\x00" x ($bufferLength - $inlen); } my $outbuf = $ecb->decrypt($inbuf, $key); if ($fileSize < $inlen) { $inlen = $fileSize; } $outFile->write($outbuf, $inlen); $i++; $fileSize -= $inlen; } } sub _generateDecryptionKey { my $self = shift; my ($blockKey) = @_; my $hash; unless ($self->{pregeneratedKey}) { $hash = $self->{hashProc}->($self->{salt} . Encode::encode('UTF-16LE', $self->{password})); for (my $i = 0 ; $i < $self->{spinCount} ; $i++) { $hash = $self->{hashProc}->(pack('L<', $i) . $hash); } $self->{pregeneratedKey} = $hash; } $hash = $self->{hashProc}->($self->{pregeneratedKey} . $blockKey); my $x1 = $self->{hashProc}->(("\x36" x 64) ^ $hash); if (length($x1) >= $self->{keyLength}) { $hash = substr($x1, 0, $self->{keyLength}); } else { my $x2 = $self->{hashProc}->(("\x5C" x 64) ^ $hash); $hash = substr($x1 . $x2, 0, $self->{keyLength}); } return $hash; } sub verifyPassword { my $self = shift; my ($encryptedVerifier, $encryptedVerifierHash) = @_; my $verifier = $self->decrypt($encryptedVerifier); my $verifierHash = $self->decrypt($encryptedVerifierHash); my $verifierHash0 = $self->{hashProc}->($verifier); die "Wrong password: $self" unless ($verifierHash0 eq substr($verifierHash, 0, length($verifierHash0))); } 1; __END__ =pod =encoding UTF-8 =head1 NAME Spreadsheet::ParseXLSX::Decryptor::Standard - standard decryption =head1 VERSION version 0.35 =for Pod::Coverage decrypt decryptFile verifyPassword =head1 AUTHOR Jesse Luehrs =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License =cut Spreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX/Decryptor.pm0000644000175000017500000001357614576335353023574 0ustar michamichapackage Spreadsheet::ParseXLSX::Decryptor; use strict; use warnings; our $VERSION = '0.35'; # VERSION # ABSTRACT: helper class to open password protected files use Crypt::Mode::CBC; use Crypt::Mode::ECB; use Digest::SHA (); use Encode (); use File::Temp (); use MIME::Base64 (); use OLE::Storage_Lite; use Spreadsheet::ParseXLSX::Decryptor::Standard; use Spreadsheet::ParseXLSX::Decryptor::Agile; sub open { my $class = shift; my ($filename, $password) = @_; $password = $password || 'VelvetSweatshop'; my ($infoFH, $packageFH) = $class->_getCompoundData($filename, ['EncryptionInfo', 'EncryptedPackage']); return unless $infoFH; my $buffer; $infoFH->read($buffer, 8); my ($majorVers, $minorVers) = unpack('s_agileDecryption($infoFH, $packageFH, $password); } else { $xlsx = $class->_standardDecryption($infoFH, $packageFH, $password); } return $xlsx; } sub _getCompoundData { my $class = shift; my ($filename, $names) = @_; my @files; my $storage = OLE::Storage_Lite->new($filename); foreach my $name (@{$names}) { my @data = $storage->getPpsSearch([OLE::Storage_Lite::Asc2Ucs($name)], 1, 1); if ($#data < 0) { push @files, undef; } else { my $fh = File::Temp->new; binmode($fh); $fh->write($data[0]->{Data}); $fh->seek(0, 0); push @files, $fh; } } return @files; } sub _standardDecryption { my $class = shift; my ($infoFH, $packageFH, $password) = @_; my $buffer; my $n = $infoFH->read($buffer, 24); my ($encryptionHeaderSize, undef, undef, $algID, $algIDHash, $keyBits) = unpack('L<*', $buffer); $infoFH->seek($encryptionHeaderSize - 0x14, IO::File::SEEK_CUR); $infoFH->read($buffer, 4); my $saltSize = unpack('L<', $buffer); my ($salt, $encryptedVerifier, $verifierHashSize, $encryptedVerifierHash); $infoFH->read($salt, 16); $infoFH->read($encryptedVerifier, 16); $infoFH->read($buffer, 4); $verifierHashSize = unpack('L<', $buffer); $infoFH->read($encryptedVerifierHash, 32); $infoFH->close(); my ($cipherAlgorithm, $hashAlgorithm); if ($algID == 0x0000660E || $algID == 0x0000660F || $algID == 0x0000660E) { $cipherAlgorithm = 'AES'; } else { die sprintf('Unsupported encryption algorithm: 0x%.8x', $algID); } if ($algIDHash == 0x00008004) { $hashAlgorithm = 'SHA-1'; } else { die sprintf('Unsupported hash algorithm: 0x%.8x', $algIDHash); } my $decryptor = Spreadsheet::ParseXLSX::Decryptor::Standard->new({ cipherAlgorithm => $cipherAlgorithm, cipherChaining => 'ECB', hashAlgorithm => $hashAlgorithm, salt => $salt, password => $password, keyBits => $keyBits, spinCount => 50000 } ); $decryptor->verifyPassword($encryptedVerifier, $encryptedVerifierHash); my $fh = File::Temp->new; binmode($fh); my $inbuf; $packageFH->read($inbuf, 8); my $fileSize = unpack('L<', $inbuf); $decryptor->decryptFile($packageFH, $fh, 1024, $fileSize); $fh->seek(0, 0); return $fh; } sub _agileDecryption { my $class = shift; my ($infoFH, $packageFH, $password) = @_; my $xml = XML::Twig->new; $xml->parse($infoFH); my ($info) = $xml->find_nodes('//encryption/keyEncryptors/keyEncryptor/p:encryptedKey'); my $encryptedVerifierHashInput = MIME::Base64::decode($info->att('encryptedVerifierHashInput')); my $encryptedVerifierHashValue = MIME::Base64::decode($info->att('encryptedVerifierHashValue')); my $encryptedKeyValue = MIME::Base64::decode($info->att('encryptedKeyValue')); my $hashSize = 0 + $info->att('hashSize'); my $keyDecryptor = Spreadsheet::ParseXLSX::Decryptor::Agile->new({ cipherAlgorithm => $info->att('cipherAlgorithm'), cipherChaining => $info->att('cipherChaining'), hashAlgorithm => $info->att('hashAlgorithm'), salt => MIME::Base64::decode($info->att('saltValue')), password => $password, keyBits => 0 + $info->att('keyBits'), spinCount => 0 + $info->att('spinCount'), blockSize => 0 + $info->att('blockSize') } ); $keyDecryptor->verifyPassword($encryptedVerifierHashInput, $encryptedVerifierHashValue, $hashSize); my $key = $keyDecryptor->decrypt($encryptedKeyValue, "\x14\x6e\x0b\xe7\xab\xac\xd0\xd6"); ($info) = $xml->find_nodes('//encryption/keyData'); my $fileDecryptor = Spreadsheet::ParseXLSX::Decryptor::Agile->new({ cipherAlgorithm => $info->att('cipherAlgorithm'), cipherChaining => $info->att('cipherChaining'), hashAlgorithm => $info->att('hashAlgorithm'), salt => MIME::Base64::decode($info->att('saltValue')), password => $password, keyBits => 0 + $info->att('keyBits'), blockSize => 0 + $info->att('blockSize') } ); my $fh = File::Temp->new; binmode($fh); my $inbuf; $packageFH->read($inbuf, 8); my $fileSize = unpack('L<', $inbuf); $fileDecryptor->decryptFile($packageFH, $fh, 4096, $key, $fileSize); $fh->seek(0, 0); return $fh; } sub new { my $class = shift; my ($args) = @_; my $self = {%$args}; $self->{keyLength} = $self->{keyBits} / 8; if ($self->{hashAlgorithm} eq 'SHA512') { $self->{hashProc} = \&Digest::SHA::sha512; } elsif (($self->{hashAlgorithm} eq 'SHA-1') || ($self->{hashAlgorithm} eq 'SHA1')) { $self->{hashProc} = \&Digest::SHA::sha1; } elsif ($self->{hashAlgorithm} eq 'SHA256') { $self->{hashProc} = \&Digest::SHA::sha256; } else { die "Unsupported hash algorithm: $self->{hashAlgorithm}"; } return bless $self, $class; } 1; __END__ =pod =encoding UTF-8 =head1 NAME Spreadsheet::ParseXLSX::Decryptor - helper class to open password protected files =head1 VERSION version 0.35 =for Pod::Coverage new open =head1 AUTHOR Jesse Luehrs =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License =cut Spreadsheet-ParseXLSX-0.35/lib/Spreadsheet/ParseXLSX/Worksheet.pm0000644000175000017500000000253014576335353023560 0ustar michamichapackage Spreadsheet::ParseXLSX::Worksheet; use strict; use warnings; use Scalar::Util (); our $VERSION = '0.35'; # VERSION # ABSTRACT: wrapper class around L use Spreadsheet::ParseXLSX (); use base 'Spreadsheet::ParseExcel::Worksheet'; # The object registry allows Cell objects to refer to Worksheets without # the overhead of a weakened reference, which can add up over millions # of cells. our %_registry; sub new { my $self = shift->SUPER::new(@_); Scalar::Util::weaken($_registry{Scalar::Util::refaddr($self)} = $self); return $self; } sub DESTROY { delete $_registry{Scalar::Util::refaddr($_[0])}; } 1; __END__ =pod =encoding UTF-8 =head1 NAME Spreadsheet::ParseXLSX::Worksheet - wrapper class around L =head1 VERSION version 0.35 =head1 DESCRIPTION This is a simple subclass of L which does not expose any new public behavior. See the parent class for API details. =head1 METHODS =head2 new() creates a new worksheet and adds it to the registry =head2 DESTROY() removes the object from the registry while destroying it =head1 AUTHOR Jesse Luehrs =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License =cut Spreadsheet-ParseXLSX-0.35/Makefile.PL0000644000175000017500000000401714576335353016415 0ustar michamicha# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.031. use strict; use warnings; use 5.010; use ExtUtils::MakeMaker; my %WriteMakefileArgs = ( "ABSTRACT" => "parse XLSX files", "AUTHOR" => "Jesse Luehrs ", "CONFIGURE_REQUIRES" => { "ExtUtils::MakeMaker" => 0 }, "DISTNAME" => "Spreadsheet-ParseXLSX", "LICENSE" => "mit", "MIN_PERL_VERSION" => "5.010", "NAME" => "Spreadsheet::ParseXLSX", "PREREQ_PM" => { "Archive::Zip" => "1.34", "Crypt::Mode::CBC" => 0, "Crypt::Mode::ECB" => 0, "Digest::SHA" => 0, "Encode" => 0, "File::Temp" => 0, "Graphics::ColorUtils" => 0, "MIME::Base64" => 0, "OLE::Storage_Lite" => 0, "Scalar::Util" => 0, "Spreadsheet::ParseExcel" => 0, "Spreadsheet::ParseExcel::Cell" => 0, "Spreadsheet::ParseExcel::Worksheet" => 0, "XML::Twig" => 0 }, "TEST_REQUIRES" => { "Data::Dumper" => 0, "File::Spec" => 0, "IO::Handle" => 0, "IPC::Open3" => 0, "Spreadsheet::ParseExcel::Utility" => 0, "Test::More" => "0.88" }, "VERSION" => "0.35", "test" => { "TESTS" => "t/*.t" } ); my %FallbackPrereqs = ( "Archive::Zip" => "1.34", "Crypt::Mode::CBC" => 0, "Crypt::Mode::ECB" => 0, "Data::Dumper" => 0, "Digest::SHA" => 0, "Encode" => 0, "File::Spec" => 0, "File::Temp" => 0, "Graphics::ColorUtils" => 0, "IO::Handle" => 0, "IPC::Open3" => 0, "MIME::Base64" => 0, "OLE::Storage_Lite" => 0, "Scalar::Util" => 0, "Spreadsheet::ParseExcel" => 0, "Spreadsheet::ParseExcel::Cell" => 0, "Spreadsheet::ParseExcel::Utility" => 0, "Spreadsheet::ParseExcel::Worksheet" => 0, "Test::More" => "0.88", "XML::Twig" => 0 ); unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) { delete $WriteMakefileArgs{TEST_REQUIRES}; delete $WriteMakefileArgs{BUILD_REQUIRES}; $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs; } delete $WriteMakefileArgs{CONFIGURE_REQUIRES} unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; WriteMakefile(%WriteMakefileArgs); Spreadsheet-ParseXLSX-0.35/LICENSE0000644000175000017500000000220714576335353015447 0ustar michamichaThis software is Copyright (c) 2024 by Jesse Luehrs. This is free software, licensed under: The MIT (X11) License The MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Spreadsheet-ParseXLSX-0.35/MANIFEST0000644000175000017500000003013014576335353015567 0ustar michamicha# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.031. Changes INSTALL.md LICENSE MANIFEST META.json META.yml Makefile.PL README dist.ini lib/Spreadsheet/ParseXLSX.pm lib/Spreadsheet/ParseXLSX/Cell.pm lib/Spreadsheet/ParseXLSX/Decryptor.pm lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm lib/Spreadsheet/ParseXLSX/Worksheet.pm 'nytprof/(eval 10)[Errno-pm-172]-92-line.html' 'nytprof/(eval 101)[XML-Twig-pm-5871]-218-line.html' 'nytprof/(eval 102)[XML-Twig-pm-1750]-219-line.html' 'nytprof/(eval 103)[XML-Twig-pm-7113]-220-line.html' 'nytprof/(eval 106)[XML-Twig-pm-1750]-223-line.html' 'nytprof/(eval 107)[XML-Twig-pm-1750]-224-line.html' 'nytprof/(eval 108)[XML-Twig-pm-1750]-225-line.html' 'nytprof/(eval 109)[XML-Twig-pm-1750]-226-line.html' 'nytprof/(eval 11)[Errno-pm-17]-93-line.html' 'nytprof/(eval 110)[XML-Twig-pm-1750]-227-line.html' 'nytprof/(eval 111)[XML-Twig-pm-1750]-228-line.html' 'nytprof/(eval 112)[XML-Twig-pm-1750]-229-line.html' 'nytprof/(eval 114)[XML-Twig-pm-1750]-231-line.html' 'nytprof/(eval 115)[XML-Twig-pm-1750]-232-line.html' 'nytprof/(eval 12)[File-Copy-pm-19]-102-line.html' 'nytprof/(eval 126)[XML-Twig-pm-5871]-243-line.html' 'nytprof/(eval 127)[XML-Twig-pm-5871]-244-line.html' 'nytprof/(eval 128)[XML-Twig-pm-5871]-245-line.html' 'nytprof/(eval 129)[XML-Twig-pm-7113]-246-line.html' 'nytprof/(eval 14)[XML-Twig-pm-159]-134-line.html' 'nytprof/(eval 15)[XML-Twig-pm-167]-135-line.html' 'nytprof/(eval 16)[XML-Twig-pm-5157]-137-line.html' 'nytprof/(eval 17)[JSON-pm-274]-143-line.html' 'nytprof/(eval 18)[JSON-pm-308]-144-line.html' 'nytprof/(eval 2)[Carp-pm-21]-14-line.html' 'nytprof/(eval 3)[Carp-pm-116]-15-line.html' 'nytprof/(eval 31)[JSON-PP-pm-82]-248-line.html' 'nytprof/(eval 39)[JSON-PP-pm-692]-147-line.html' 'nytprof/(eval 4)[Carp-pm-171]-17-line.html' 'nytprof/(eval 40)[JSON-PP-pm-692]-148-line.html' 'nytprof/(eval 41)[JSON-PP-pm-692]-149-line.html' 'nytprof/(eval 42)[JSON-PP-pm-692]-150-line.html' 'nytprof/(eval 43)[JSON-PP-pm-692]-151-line.html' 'nytprof/(eval 44)[JSON-PP-pm-692]-152-line.html' 'nytprof/(eval 45)[JSON-PP-pm-692]-153-line.html' 'nytprof/(eval 46)[JSON-PP-pm-692]-154-line.html' 'nytprof/(eval 47)[JSON-PP-pm-692]-155-line.html' 'nytprof/(eval 48)[JSON-PP-pm-692]-156-line.html' 'nytprof/(eval 49)[JSON-PP-pm-692]-157-line.html' 'nytprof/(eval 5)[Carp-pm-577]-18-line.html' 'nytprof/(eval 50)[JSON-PP-pm-692]-158-line.html' 'nytprof/(eval 51)[JSON-PP-pm-692]-159-line.html' 'nytprof/(eval 52)[JSON-PP-pm-692]-160-line.html' 'nytprof/(eval 53)[JSON-PP-pm-692]-161-line.html' 'nytprof/(eval 54)[JSON-PP-pm-692]-162-line.html' 'nytprof/(eval 55)[JSON-PP-pm-692]-163-line.html' 'nytprof/(eval 56)[Test2-API-pm-72]-171-line.html' 'nytprof/(eval 57)[XML-Twig-pm-1323]-172-line.html' 'nytprof/(eval 58)[XML-Twig-pm-7113]-175-line.html' 'nytprof/(eval 59)[XML-Twig-pm-5871]-176-line.html' 'nytprof/(eval 6)[Time-HiRes-pm-55]-26-line.html' 'nytprof/(eval 60)[XML-Twig-pm-7113]-177-line.html' 'nytprof/(eval 61)[XML-Twig-pm-7113]-178-line.html' 'nytprof/(eval 62)[XML-Twig-pm-7113]-179-line.html' 'nytprof/(eval 63)[XML-Twig-pm-7113]-180-line.html' 'nytprof/(eval 64)[XML-Twig-pm-7113]-181-line.html' 'nytprof/(eval 65)[XML-Twig-pm-5871]-182-line.html' 'nytprof/(eval 66)[XML-Twig-pm-7113]-183-line.html' 'nytprof/(eval 67)[XML-Twig-pm-5871]-184-line.html' 'nytprof/(eval 68)[XML-Twig-pm-7113]-185-line.html' 'nytprof/(eval 69)[XML-Twig-pm-5871]-186-line.html' 'nytprof/(eval 7)[Test2-API-Instance-pm-319]-71-line.html' 'nytprof/(eval 70)[XML-Twig-pm-7113]-187-line.html' 'nytprof/(eval 71)[XML-Twig-pm-5871]-188-line.html' 'nytprof/(eval 72)[XML-Twig-pm-5871]-189-line.html' 'nytprof/(eval 73)[XML-Twig-pm-5871]-190-line.html' 'nytprof/(eval 74)[XML-Twig-pm-5871]-191-line.html' 'nytprof/(eval 75)[XML-Twig-pm-5871]-192-line.html' 'nytprof/(eval 76)[XML-Twig-pm-7113]-193-line.html' 'nytprof/(eval 77)[XML-Twig-pm-5871]-194-line.html' 'nytprof/(eval 78)[XML-Twig-pm-5871]-195-line.html' 'nytprof/(eval 79)[XML-Twig-pm-5871]-196-line.html' 'nytprof/(eval 8)[Compress-Raw-Zlib-pm-15]-84-line.html' 'nytprof/(eval 80)[XML-Twig-pm-5871]-197-line.html' 'nytprof/(eval 85)[XML-Twig-pm-7113]-202-line.html' 'nytprof/(eval 86)[XML-Twig-pm-5871]-203-line.html' 'nytprof/(eval 87)[XML-Twig-pm-7113]-204-line.html' 'nytprof/(eval 9)[File-Path-pm-22]-90-line.html' 'nytprof/(eval 90)[XML-Twig-pm-5871]-207-line.html' 'nytprof/(eval 91)[XML-Twig-pm-5871]-208-line.html' 'nytprof/(eval 94)[XML-Twig-pm-5871]-211-line.html' 'nytprof/(eval 95)[XML-Twig-pm-5871]-212-line.html' 'nytprof/(eval 96)[XML-Twig-pm-5871]-213-line.html' 'nytprof/(eval 97)[XML-Twig-pm-7113]-214-line.html' nytprof/Agile-pm-169-line.html nytprof/Archive-Zip-Archive-pm-98-line.html nytprof/Archive-Zip-DirectoryMember-pm-113-line.html nytprof/Archive-Zip-FileMember-pm-112-line.html nytprof/Archive-Zip-Member-pm-109-line.html nytprof/Archive-Zip-NewFileMember-pm-115-line.html nytprof/Archive-Zip-StringMember-pm-116-line.html nytprof/Archive-Zip-ZipFileMember-pm-114-line.html nytprof/Archive-Zip-pm-73-line.html nytprof/Carp-Heavy-pm-96-line.html nytprof/Carp-pm-13-line.html nytprof/Cell-pm-170-line.html nytprof/Compress-Raw-Zlib-pm-81-line.html nytprof/Config-pm-20-line.html nytprof/Config_git-pl-23-line.html nytprof/Config_heavy-pl-22-line.html nytprof/Crypt-Cipher-pm-140-line.html nytprof/Crypt-Mode-CBC-pm-139-line.html nytprof/Crypt-Mode-ECB-pm-164-line.html nytprof/Crypt-RC4-pm-120-line.html nytprof/CryptX-pm-141-line.html nytprof/Cwd-pm-74-line.html nytprof/Decryptor-pm-138-line.html nytprof/Digest-Perl-MD5-pm-121-line.html nytprof/Digest-SHA-pm-165-line.html nytprof/Digest-base-pm-166-line.html nytprof/Encode-Alias-pm-104-line.html nytprof/Encode-Config-pm-108-line.html nytprof/Encode-Encoding-pm-107-line.html nytprof/Encode-MIME-Name-pm-105-line.html nytprof/Encode-pm-103-line.html nytprof/Errno-pm-91-line.html nytprof/Exporter-Heavy-pm-27-line.html nytprof/Exporter-pm-7-line.html nytprof/Fcntl-pm-11-line.html nytprof/File-Basename-pm-89-line.html nytprof/File-Copy-pm-100-line.html nytprof/File-Find-pm-99-line.html nytprof/File-Glob-pm-136-line.html nytprof/File-Path-pm-88-line.html nytprof/File-Spec-Unix-pm-86-line.html nytprof/File-Spec-pm-85-line.html nytprof/File-Temp-pm-87-line.html nytprof/FileHandle-pm-97-line.html nytprof/Graphics-ColorUtils-pm-117-line.html nytprof/IO-File-pm-75-line.html nytprof/IO-Handle-pm-79-line.html nytprof/IO-Seekable-pm-78-line.html nytprof/IO-pm-80-line.html nytprof/JSON-PP-Boolean-pm-146-line.html nytprof/JSON-PP-pm-145-line.html nytprof/JSON-pm-142-line.html nytprof/List-Util-pm-8-line.html nytprof/MIME-Base64-pm-167-line.html nytprof/OLE-Storage_Lite-pm-119-line.html nytprof/POSIX-pm-10-line.html nytprof/ParseXLSX-pm-72-line.html nytprof/PerlIO-pm-21-line.html nytprof/Scalar-Util-pm-6-line.html nytprof/SelectSaver-pm-77-line.html nytprof/Spreadsheet-ParseExcel-Cell-pm-126-line.html nytprof/Spreadsheet-ParseExcel-FmtDefault-pm-127-line.html nytprof/Spreadsheet-ParseExcel-Font-pm-124-line.html nytprof/Spreadsheet-ParseExcel-Format-pm-125-line.html nytprof/Spreadsheet-ParseExcel-Utility-pm-128-line.html nytprof/Spreadsheet-ParseExcel-Workbook-pm-122-line.html nytprof/Spreadsheet-ParseExcel-Worksheet-pm-123-line.html nytprof/Spreadsheet-ParseExcel-pm-118-line.html nytprof/Standard-pm-168-line.html nytprof/Storable-pm-106-line.html nytprof/Symbol-pm-76-line.html nytprof/Test-Builder-Formatter-pm-67-line.html nytprof/Test-Builder-Module-pm-4-line.html nytprof/Test-Builder-TodoDiag-pm-70-line.html nytprof/Test-Builder-pm-5-line.html nytprof/Test-More-pm-3-line.html nytprof/Test2-API-Context-pm-61-line.html nytprof/Test2-API-Instance-pm-28-line.html nytprof/Test2-API-Stack-pm-33-line.html nytprof/Test2-API-pm-24-line.html nytprof/Test2-Event-Bail-pm-56-line.html nytprof/Test2-Event-Diag-pm-53-line.html nytprof/Test2-Event-Exception-pm-57-line.html nytprof/Test2-Event-Fail-pm-63-line.html nytprof/Test2-Event-Note-pm-54-line.html nytprof/Test2-Event-Ok-pm-40-line.html nytprof/Test2-Event-Pass-pm-62-line.html nytprof/Test2-Event-Plan-pm-55-line.html nytprof/Test2-Event-Skip-pm-59-line.html nytprof/Test2-Event-Subtest-pm-60-line.html nytprof/Test2-Event-V2-pm-64-line.html nytprof/Test2-Event-Waiting-pm-58-line.html nytprof/Test2-Event-pm-41-line.html nytprof/Test2-EventFacet-About-pm-42-line.html nytprof/Test2-EventFacet-Amnesty-pm-43-line.html nytprof/Test2-EventFacet-Assert-pm-44-line.html nytprof/Test2-EventFacet-Control-pm-45-line.html nytprof/Test2-EventFacet-Error-pm-46-line.html nytprof/Test2-EventFacet-Hub-pm-52-line.html nytprof/Test2-EventFacet-Info-pm-47-line.html nytprof/Test2-EventFacet-Meta-pm-48-line.html nytprof/Test2-EventFacet-Parent-pm-50-line.html nytprof/Test2-EventFacet-Plan-pm-51-line.html nytprof/Test2-EventFacet-Trace-pm-29-line.html nytprof/Test2-EventFacet-pm-30-line.html nytprof/Test2-Formatter-TAP-pm-68-line.html nytprof/Test2-Formatter-pm-69-line.html nytprof/Test2-Hub-Interceptor-Terminator-pm-39-line.html nytprof/Test2-Hub-Interceptor-pm-38-line.html nytprof/Test2-Hub-Subtest-pm-37-line.html nytprof/Test2-Hub-pm-34-line.html nytprof/Test2-Util-ExternalMeta-pm-35-line.html nytprof/Test2-Util-Facets2Legacy-pm-65-line.html nytprof/Test2-Util-HashBase-pm-31-line.html nytprof/Test2-Util-Trace-pm-36-line.html nytprof/Test2-Util-pm-9-line.html nytprof/Tie-Hash-pm-12-line.html nytprof/Time-HiRes-pm-25-line.html nytprof/Time-Local-pm-110-line.html nytprof/UNIVERSAL-pm-130-line.html nytprof/URI-Escape-pm-174-line.html nytprof/URI-pm-173-line.html nytprof/XML-Parser-Expat-pm-133-line.html nytprof/XML-Parser-pm-132-line.html nytprof/XML-Twig-pm-129-line.html nytprof/XSLoader-pm-250-line.html nytprof/all_stacks_by_time.calls nytprof/all_stacks_by_time.svg nytprof/base-pm-66-line.html nytprof/bug-md-11-t-1-line.html nytprof/builtin-pm-101-line.html nytprof/bytes-pm-82-line.html nytprof/constant-pm-83-line.html nytprof/flamegraph_subattr.txt nytprof/index-subs-excl.html nytprof/index.html nytprof/integer-pm-111-line.html nytprof/js/asc.png nytprof/js/bg.png nytprof/js/desc.png nytprof/js/jit/Treemap.css nytprof/js/jit/gradient-cushion1.png nytprof/js/jit/gradient.png nytprof/js/jit/gradient20.png nytprof/js/jit/gradient30.png nytprof/js/jit/gradient40.png nytprof/js/jit/gradient50.png nytprof/js/jit/jit-yc.js nytprof/js/jit/jit.js nytprof/js/jquery-min.js nytprof/js/jquery.tablesorter.min.js nytprof/js/style-tablesorter.css nytprof/mro-pm-32-line.html nytprof/overload-pm-95-line.html nytprof/overloading-pm-16-line.html nytprof/packages-callgraph.dot nytprof/parent-pm-94-line.html nytprof/strict-pm-249-line.html nytprof/style.css nytprof/subs-callgraph.dot nytprof/subs-treemap-excl.html nytprof/utf8-pm-131-line.html nytprof/vars-pm-49-line.html nytprof/warnings-pm-2-line.html nytprof/warnings-register-pm-19-line.html t/00-compile.t t/ahihi.t t/author-critic.t t/author-eol.t t/author-no-tabs.t t/author-pod-coverage.t t/author-pod-syntax.t t/basic.t t/bug-10.t t/bug-11.t t/bug-12.t t/bug-13.t t/bug-14.t t/bug-15.t t/bug-16.t t/bug-17.t t/bug-2.t t/bug-29.t t/bug-3.t t/bug-32.t t/bug-38.t t/bug-4.t t/bug-41.t t/bug-5.t t/bug-57.t t/bug-6-2.t t/bug-6.t t/bug-61.t t/bug-7.t t/bug-72.t t/bug-8.t t/bug-md-10.t t/bug-md-11.t t/bug-md-7.t t/cell-to-row-col.t t/column-formats.t t/data/Test.xlsx t/data/TestHyperlinks.xlsx t/data/ahihi.xlsx t/data/bug-10.xlsx t/data/bug-11.xlsx t/data/bug-12.xlsx t/data/bug-13.xlsx t/data/bug-14.xlsx t/data/bug-15.xlsx t/data/bug-16.xlsx t/data/bug-17a.xlsx t/data/bug-17b.xlsx t/data/bug-2.xlsx t/data/bug-29.xlsx t/data/bug-3.xlsx t/data/bug-32-2.xlsx t/data/bug-32.xlsx t/data/bug-38.xlsx t/data/bug-4.xlsx t/data/bug-41.xlsx t/data/bug-5.xlsx t/data/bug-57.xlsx t/data/bug-6-2.xlsx t/data/bug-6.xlsx t/data/bug-61.xlsx t/data/bug-7.xlsx t/data/bug-72.xlsx t/data/bug-8.xlsx t/data/bug-md-10.xlsx t/data/bug-md-11.xlsx t/data/bug-md-7.xlsx t/data/column-formats.xlsx t/data/encryption-agile-123q.xlsx t/data/encryption-agile-SHA1-foobar.xlsx t/data/encryption-standard-default-password.xlsx t/data/hidden-row-and-column.xlsx t/data/hidden-sheet.xlsx t/data/page-Setup.xlsx t/data/tab-color.xlsx t/data/target-abspath.xlsx t/encryption.t t/garbage-collect.t t/hidden-row-and-column.t t/hidden-sheet.t t/hyperlinks.t t/page-Setup.t t/rich.t t/tab-color.t t/target-abspath.t weaver.ini Spreadsheet-ParseXLSX-0.35/nytprof/0000775000175000017500000000000014576335353016144 5ustar michamichaSpreadsheet-ParseXLSX-0.35/nytprof/Crypt-Cipher-pm-140-line.html0000644000175000017500000011234714576335353023212 0ustar michamicha Profile of Crypt/Cipher.pm

':"",d.$headers=A(A.map(d.$table.find(d.selectorHeaders),function(e,t){var r,o,s,a,n,i=A(e);if(!L.getClosest(i,"tr").hasClass(d.cssIgnoreRow))return/(th|td)/i.test(e.nodeName)||(n=L.getClosest(i,"th, td"),i.attr("data-column",n.attr("data-column"))),r=L.getColumnData(d.table,d.headers,t,!0),d.headerContent[t]=i.html(),""===d.headerTemplate||i.find("."+L.css.headerIn).length||(a=d.headerTemplate.replace(L.regex.templateContent,i.html()).replace(L.regex.templateIcon,i.find("."+L.css.icon).length?"":l),d.onRenderTemplate&&(o=d.onRenderTemplate.apply(i,[t,a]))&&"string"==typeof o&&(a=o),i.html('
'+a+"
")),d.onRenderHeader&&d.onRenderHeader.apply(i,[t,d,d.$table]),s=parseInt(i.attr("data-column"),10),e.column=s,n=L.getOrder(L.getData(i,r,"sortInitialOrder")||d.sortInitialOrder),d.sortVars[s]={count:-1,order:n?d.sortReset?[1,0,2]:[1,0]:d.sortReset?[0,1,2]:[0,1],lockedOrder:!1,sortedBy:""},void 0!==(n=L.getData(i,r,"lockedOrder")||!1)&&!1!==n&&(d.sortVars[s].lockedOrder=!0,d.sortVars[s].order=L.getOrder(n)?[1,1]:[0,0]),d.headerList[t]=e,i.addClass(L.css.header+" "+d.cssHeader),L.getClosest(i,"tr").addClass(L.css.headerRow+" "+d.cssHeaderRow).attr("role","row"),d.tabIndex&&i.attr("tabindex",0),e})),d.$headerIndexed=[],r=0;r'),t=n.$table.width(),s=(o=n.$tbodies.find("tr:first").children(":visible")).length,a=0;a").css("width",r));n.$table.prepend(i)}},getData:function(e,t,r){var o,s,a="",n=A(e);return n.length?(o=!!A.metadata&&n.metadata(),s=" "+(n.attr("class")||""),void 0!==n.data(r)||void 0!==n.data(r.toLowerCase())?a+=n.data(r)||n.data(r.toLowerCase()):o&&void 0!==o[r]?a+=o[r]:t&&void 0!==t[r]?a+=t[r]:" "!==s&&s.match(" "+r+"-")&&(a=s.match(new RegExp("\\s"+r+"-([\\w-]+)"))[1]||""),A.trim(a)):""},getColumnData:function(e,t,r,o,s){if("object"!=typeof t||null===t)return t;var a,n=(e=A(e)[0]).config,i=s||n.$headers,d=n.$headerIndexed&&n.$headerIndexed[r]||i.find('[data-column="'+r+'"]:last');if(void 0!==t[r])return o?t[r]:t[i.index(d)];for(a in t)if("string"==typeof a&&d.filter(a).add(d.find(a)).length)return t[a]},isProcessing:function(e,t,r){var o=(e=A(e))[0].config,s=r||e.find("."+L.css.header);t?(void 0!==r&&0'),A.fn.detach?t.detach():t.remove();var o=A(e).find("colgroup.tablesorter-savemyplace");t.insertAfter(o),o.remove(),e.isProcessing=!1},clearTableBody:function(e){A(e)[0].config.$tbodies.children().detach()},characterEquivalents:{a:"áàâãäąå",A:"ÁÀÂÃÄĄÅ",c:"çćč",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÍÌİÎÏ",o:"óòôõöō",O:"ÓÒÔÕÖŌ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"},replaceAccents:function(e){var t,r="[",o=L.characterEquivalents;if(!L.characterRegex){for(t in L.characterRegexArray={},o)"string"==typeof t&&(r+=o[t],L.characterRegexArray[t]=new RegExp("["+o[t]+"]","g"));L.characterRegex=new RegExp(r+"]")}if(L.characterRegex.test(e))for(t in o)"string"==typeof t&&(e=e.replace(L.characterRegexArray[t],t));return e},validateOptions:function(e){var t,r,o,s,a="headers sortForce sortList sortAppend widgets".split(" "),n=e.originalSettings;if(n){for(t in L.debug(e,"core")&&(s=new Date),n)if("undefined"===(o=typeof L.defaults[t]))console.warn('Tablesorter Warning! "table.config.'+t+'" option not recognized');else if("object"===o)for(r in n[t])o=L.defaults[t]&&typeof L.defaults[t][r],A.inArray(t,a)<0&&"undefined"===o&&console.warn('Tablesorter Warning! "table.config.'+t+"."+r+'" option not recognized');L.debug(e,"core")&&console.log("validate options time:"+L.benchmark(s))}},restoreHeaders:function(e){var t,r,o=A(e)[0].config,s=o.$table.find(o.selectorHeaders),a=s.length;for(t=0;t tr").children("th, td");!1===t&&0<=A.inArray("uitheme",a.widgets)&&(s.triggerHandler("applyWidgetId",["uitheme"]),s.triggerHandler("applyWidgetId",["zebra"])),n.find("tr").not(i).remove(),o="sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave "+"keypress sortBegin sortEnd resetToLoadState ".split(" ").join(a.namespace+" "),s.removeData("tablesorter").unbind(o.replace(L.regex.spaces," ")),a.$headers.add(d).removeClass([L.css.header,a.cssHeader,a.cssAsc,a.cssDesc,L.css.sortAsc,L.css.sortDesc,L.css.sortNone].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled","true"),i.find(a.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(a.namespace+" ").replace(L.regex.spaces," ")),L.restoreHeaders(e),s.toggleClass(L.css.table+" "+a.tableClass+" tablesorter-"+a.theme,!1===t),s.removeClass(a.namespace.slice(1)),e.hasInitialized=!1,delete e.config.cache,"function"==typeof r&&r(e),L.debug(a,"core")&&console.log("tablesorter has been removed")}}};A.fn.tablesorter=function(t){return this.each(function(){var e=A.extend(!0,{},L.defaults,t,L.instanceMethods);e.originalSettings=t,!this.hasInitialized&&L.buildTable&&"TABLE"!==this.nodeName?L.buildTable(this,e):L.setup(this,e)})},window.console&&window.console.log||(L.logs=[],console={},console.log=console.warn=console.error=console.table=function(){var e=1{MhjkӺJyMĿ֍BupdCz_E gB4'lN&P.2&p%ҳJ~D1@ؗ0‰0}F")_H$Aׅ1w,KP(K t/4yz~E!x>nGߴE-OCѦ9XʥNhKg@p7MY>!o^@ Y$„dfE12Y1lX,;Ήqs   E%$$$edd)++khh۠QjfggW777wwOO//oo__߭[ D"D  ޶-4 BP"Tj$5**:*&&..>n;vLLLJJNNIٕ;mϞ􌌽{ڿ?;;'ܼ:|8?ȑG +,<~ĉ'N*.>}̙gϝ;/u %%ee/^trEŕ+UUWVW_Ӹvں7nެu;wܽ{^CMM<|QesO<}j]]./^|kׯ{zz{}m``p͛!o߽{~xx$pdÇѱ'&&&'?}y:==3ׯss߾/,,..-}NKV#( H# 3 ĊBc ˁqprpqr@pC x11Hq))iY9YyyH%eeU555u5ȁZ::z L,--7YCp$pq$pw$زI@"@'rD5"2rł_,H޵+55-mۃ+h-0[`ȃ5 ;V-t:f@LLnU~'! 72y3P],ŬT6ݑCcWǙ-=s7ϑ_@L0Z@)X$G/+'KHJIm ]lihY`Zw~KIv6N7;WĻ=w?SWw_oӖ~~["T?(38!$z[h(%lkٌHBFEtǝ?=5nVd:i23~WQjbZn={ggy^=p;8/ a|\ܑ NK. x^^>w2EbK)BVBs%"^X&N1-W$dIi҉22첽r ֊BSJJםRWqQUWéMwiXhԭ?c'A@1iѨɈS4k&.1[;C{'M.4wO?> [@!2aq*)4j2F3y;waGU""%4VѰO,3%k("b../ IE!O{:VbWZxٳb2s :7n މih0Sf/^+o ,}Мb<Ad!22#dd &mk̚u(Cc Brs_9  /<-gQ$t$Yd&dP8(TDU5C4rWijsRJ6mT27iD3q2j4o+daϩds {G眷O?s8I/`OPiH6ZضP8+z.6+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0{MhjkӺJyMĿ֍BupdCz_E gB4'lN&P.2&p%ҳJ~D1@ؗ0‰0}F")_H$Aׅ1w,KP(K t/4yz~E!x>nGߴE-OCѦ9XʥNhKg@p7MY>!o^@ Y$„dfE12Y1lX,;Ήqs   E%$$$edd)++khh۠QjfggW777wwOO//oo__߭[ D"D  ޶-4 BP"Tj$5**:*&&..>n;vLLLJJNNIٕ;mϞ􌌽{ڿ?;;'ܼ:|8?ȑG +,<~ĉ'N*.>}̙gϝ;/u %%ee/^trEŕ+UUWVW_Ӹvں7nެu;wܽ{^CMM<|QesO<}j]]./^|kׯ{zz{}m``p͛!o߽{~xx$pdÇѱ'&&&'?}y:==3ׯss߾/,,..-}NKV#( H# 3 ĊBc ˁqprpqr@pC x11Hq))iY9YyyH%eeU555u5ȁZ::z L,--7YCp$pq$pw$زI@"@'rD5"2rł_,H޵+55-mۃ+h-0[`ȃ5 ;V-t:f@LLnU~'! 72y3P],ŬT6ݑCcWǙ-=s7ϑ_@L0Z@)X$G/+'KHJIm ]lihY`Zw~KIv6N7;WĻ=w?SWw_oӖ~~["T?(38!$z[h(%lkٌHBFEtǝ?=5nVd:i23~WQjbZn={ggy^=p;8/ a|\ܑ NK. x^^>w2EbK)BVBs%"^X&N1-W$dIi҉22첽r ֊BSJJםRWqQUWéMwiXhԭ?c'A@1iѨɈS4k&.1[;C{'M.4wO?> [@!2aq*)4j2F3y;waGU""%4VѰO,3%k("b../ IE!O{:VbWZxٳb2s :7n މih0Sf/^+o ,}Мb<Ad!22#dd &mk̚u(Cc Brs_9  /<-gQ$t$Yd&dP8(TDU5C4rWijsRJ6mT27iD3q2j4o+daϩds {G眷O?s8I/`OPiH6ZضP8+z.6{MhjkӺJyMĿ֍BupdCz_E gB4'lN&P.2&p%ҳJ~D1@ؗ0‰0}F")_H$Aׅ1w,KP(K t/4yz~E!x>nGߴE-OCѦ9XʥNhKg@p7MY>!o^@ Y$„dfE12Y1lX,;Ήqs   E%$$$edd)++khh۠QjfggW777wwOO//oo__߭[ D"D  ޶-4 BP"Tj$5**:*&&..>n;vLLLJJNNIٕ;mϞ􌌽{ڿ?;;'ܼ:|8?ȑG +,<~ĉ'N*.>}̙gϝ;/u %%ee/^trEŕ+UUWVW_Ӹvں7nެu;wܽ{^CMM<|QesO<}j]]./^|kׯ{zz{}m``p͛!o߽{~xx$pdÇѱ'&&&'?}y:==3ׯss߾/,,..-}NKV#( H# 3 ĊBc ˁqprpqr@pC x11Hq))iY9YyyH%eeU555u5ȁZ::z L,--7YCp$pq$pw$زI@"@'rD5"2rł_,H޵+55-mۃ+h-0[`ȃ5 ;V-t:f@LLnU~'! 72y3P],ŬT6ݑCcWǙ-=s7ϑ_@L0Z@)X$G/+'KHJIm ]lihY`Zw~KIv6N7;WĻ=w?SWw_oӖ~~["T?(38!$z[h(%lkٌHBFEtǝ?=5nVd:i23~WQjbZn={ggy^=p;8/ a|\ܑ NK. x^^>w2EbK)BVBs%"^X&N1-W$dIi҉22첽r ֊BSJJםRWqQUWéMwiXhԭ?c'A@1iѨɈS4k&.1[;C{'M.4wO?> [@!2aq*)4j2F3y;waGU""%4VѰO,3%k("b../ IE!O{:VbWZxٳb2s :7n މih0Sf/^+o ,}Мb<Ad!22#dd &mk̚u(Cc Brs_9  /<-gQ$t$Yd&dP8(TDU5C4rWijsRJ6mT27iD3q2j4o+daϩds {G眷O?s8I/`OPiH6ZضP8+z.6 Profile of (eval 108)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 108)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 6 statements in 169µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1117µs27µsXML::Twig::::BEGIN@1.52XML::Twig::BEGIN@1.52
1116µs17µsXML::Twig::::BEGIN@1.62XML::Twig::BEGIN@1.62
0000s0sXML::Twig::::__ANON__[:17]XML::Twig::__ANON__[:17] (merge of 2 subs)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14163µs474µs
# spent 17µs (6+11) within XML::Twig::BEGIN@1.62 which was called: # once (6µs+11µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 27µs (7+20) within XML::Twig::BEGIN@1.52 which was called: # once (7µs+20µs) by XML::Twig::_parse_xpath_handler at line 1
sub { no warnings;
# spent 31µs making 2 calls to warnings::unimport, avg 15µs/call # spent 27µs making 1 call to XML::Twig::BEGIN@1.52 # spent 17µs making 1 call to XML::Twig::BEGIN@1.62
2my( $stack)= @_;
3my @current_elts= (scalar @$stack);
4my @new_current_elts;
5my $elt;
6
7foreach my $current_elt (@current_elts)
8 { next if( !$current_elt);
9 $current_elt--;
10 $elt= $stack->[$current_elt];
11 if( ($elt->{'##tag'} eq "s:pageSetup")) { push @new_current_elts, $current_elt;}
12 }
13unless( @new_current_elts) { return 0; }
14@current_elts= @new_current_elts;
15@new_current_elts=();
16return q{s:pageSetup};
1726µs }
18;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 48)[JSON-PP-pm-692]-156-line.html0000644000175000017500000003205014576335353024001 0ustar michamicha Profile of (eval 48)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 48)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 11111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 127)[XML-Twig-pm-5871]-244-line.html0000644000175000017500000004055614576335353024435 0ustar michamicha Profile of (eval 127)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 127)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 127279 statements in 574ms
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1272761149.6ms49.6msXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs16µsXML::Twig::Elt::::BEGIN@1.71XML::Twig::Elt::BEGIN@1.71
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1127279574ms225µs
# spent 49.6ms within XML::Twig::Elt::__ANON__[(eval 127)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 127276 times, avg 390ns/call: # 127276 times (49.6ms+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 390ns/call # spent 16µs (6+9) within XML::Twig::Elt::BEGIN@1.71 which was called: # once (6µs+9µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ($_[0]->{gi} == 120) ? $_[0] : undef; }
# spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.71 # spent 10µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/ParseXLSX-pm-72-line.html0000644000175000017500000102406614576335353022417 0ustar michamicha Profile of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
StatementsExecuted 9186778 statements in 4.67s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
15608115.52s12.9sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443]
23927061861ms1.04sSpreadsheet::ParseXLSX::::_cell_to_row_colSpreadsheet::ParseXLSX::_cell_to_row_col
1818011218ms960msSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302]
111198ms70.6sSpreadsheet::ParseXLSX::::_parse_sheetSpreadsheet::ParseXLSX::_parse_sheet
11144.8ms50.0msSpreadsheet::ParseXLSX::::BEGIN@15Spreadsheet::ParseXLSX::BEGIN@15
11113.5ms50.2msSpreadsheet::ParseXLSX::::BEGIN@11Spreadsheet::ParseXLSX::BEGIN@11
157307113.4ms13.4msSpreadsheet::ParseXLSX::::_xml_booleanSpreadsheet::ParseXLSX::_xml_boolean
1116.82ms22.0msSpreadsheet::ParseXLSX::::BEGIN@14Spreadsheet::ParseXLSX::BEGIN@14
1113.00ms3.51msSpreadsheet::ParseXLSX::::BEGIN@12Spreadsheet::ParseXLSX::BEGIN@12
111688µs13.8msSpreadsheet::ParseXLSX::::BEGIN@17Spreadsheet::ParseXLSX::BEGIN@17
111671µs70.7sSpreadsheet::ParseXLSX::::_parse_workbookSpreadsheet::ParseXLSX::_parse_workbook
111648µs10.1msSpreadsheet::ParseXLSX::::_parse_stylesSpreadsheet::ParseXLSX::_parse_styles
111174µs241µsSpreadsheet::ParseXLSX::::BEGIN@18Spreadsheet::ParseXLSX::BEGIN@18
2831114µs147µsSpreadsheet::ParseXLSX::::_colorSpreadsheet::ParseXLSX::_color
1511105µs280µsSpreadsheet::ParseXLSX::::_get_text_and_rich_font_by_cellSpreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell
11190µs72.2msSpreadsheet::ParseXLSX::::_extract_filesSpreadsheet::ParseXLSX::_extract_files
151168µs715µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655]
73153µs19.6msSpreadsheet::ParseXLSX::::_zip_file_memberSpreadsheet::ParseXLSX::_zip_file_member
11151µs70.7sSpreadsheet::ParseXLSX::::parseSpreadsheet::ParseXLSX::parse
73131µs12.0msSpreadsheet::ParseXLSX::::_new_twigSpreadsheet::ParseXLSX::_new_twig
11128µs1.10msSpreadsheet::ParseXLSX::::_parse_themesSpreadsheet::ParseXLSX::_parse_themes
55126µs51.8msSpreadsheet::ParseXLSX::::_parse_xmlSpreadsheet::ParseXLSX::_parse_xml
11122µs50µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268]
11114µs98µsSpreadsheet::ParseXLSX::::_check_signatureSpreadsheet::ParseXLSX::_check_signature
55113µs16µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979]
11112µs72µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246]
11112µs14µsSpreadsheet::ParseXLSX::::BEGIN@3Spreadsheet::ParseXLSX::BEGIN@3
11110µs11.2msSpreadsheet::ParseXLSX::::_parse_shared_stringsSpreadsheet::ParseXLSX::_parse_shared_strings
11110µs24µsSpreadsheet::ParseXLSX::::_dimensionsSpreadsheet::ParseXLSX::_dimensions
1119µs49µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338]
2217µs7µsSpreadsheet::ParseXLSX::::_rels_forSpreadsheet::ParseXLSX::_rels_for
1117µs7µsSpreadsheet::ParseXLSX::::BEGIN@5Spreadsheet::ParseXLSX::BEGIN@5
1115µs16µsSpreadsheet::ParseXLSX::::BEGIN@13Spreadsheet::ParseXLSX::BEGIN@13
1115µs5µsSpreadsheet::ParseXLSX::::_base_path_forSpreadsheet::ParseXLSX::_base_path_for
1114µs27µsSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313]
1113µs19µsSpreadsheet::ParseXLSX::::BEGIN@4Spreadsheet::ParseXLSX::BEGIN@4
1112µs2µsSpreadsheet::ParseXLSX::::newSpreadsheet::ParseXLSX::new
0000s0sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:258]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:258]
0000s0sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:287]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:287]
0000s0sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:325]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:325]
0000s0sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:346]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:346]
0000s0sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:495]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:495]
0000s0sSpreadsheet::ParseXLSX::::__ANON__[lib/Spreadsheet/ParseXLSX.pm:555]Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:555]
0000s0sSpreadsheet::ParseXLSX::::_apply_tintSpreadsheet::ParseXLSX::_apply_tint
0000s0sSpreadsheet::ParseXLSX::::_is_mergedSpreadsheet::ParseXLSX::_is_merged
0000s0sSpreadsheet::ParseXLSX::::_parse_sheet_linksSpreadsheet::ParseXLSX::_parse_sheet_links
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseXLSX;
2
3224µs215µs
# spent 14µs (12+2) within Spreadsheet::ParseXLSX::BEGIN@3 which was called: # once (12µs+2µs) by main::BEGIN@7 at line 3
use strict;
# spent 14µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@3 # spent 2µs making 1 call to strict::import
4214µs235µs
# spent 19µs (3+16) within Spreadsheet::ParseXLSX::BEGIN@4 which was called: # once (3µs+16µs) by main::BEGIN@7 at line 4
use warnings;
# spent 19µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@4 # spent 16µs making 1 call to warnings::import
5228µs17µs
# spent 7µs within Spreadsheet::ParseXLSX::BEGIN@5 which was called: # once (7µs+0s) by main::BEGIN@7 at line 5
use 5.010;
# spent 7µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@5
6
7# VERSION
8
9# ABSTRACT: parse XLSX files
10
11398µs350.2ms
# spent 50.2ms (13.5+36.6) within Spreadsheet::ParseXLSX::BEGIN@11 which was called: # once (13.5ms+36.6ms) by main::BEGIN@7 at line 11
use Archive::Zip 1.34;
# spent 50.2ms making 1 call to Spreadsheet::ParseXLSX::BEGIN@11 # spent 10µs making 1 call to Exporter::import # spent 7µs making 1 call to UNIVERSAL::VERSION
12273µs23.55ms
# spent 3.51ms (3.00+512µs) within Spreadsheet::ParseXLSX::BEGIN@12 which was called: # once (3.00ms+512µs) by main::BEGIN@7 at line 12
use Graphics::ColorUtils 'rgb2hls', 'hls2rgb';
# spent 3.51ms making 1 call to Spreadsheet::ParseXLSX::BEGIN@12 # spent 40µs making 1 call to Exporter::import
13215µs228µs
# spent 16µs (5+12) within Spreadsheet::ParseXLSX::BEGIN@13 which was called: # once (5µs+12µs) by main::BEGIN@7 at line 13
use Scalar::Util 'openhandle';
# spent 16µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@13 # spent 12µs making 1 call to Exporter::import
14281µs222.0ms
# spent 22.0ms (6.82+15.2) within Spreadsheet::ParseXLSX::BEGIN@14 which was called: # once (6.82ms+15.2ms) by main::BEGIN@7 at line 14
use Spreadsheet::ParseExcel;
# spent 22.0ms making 1 call to Spreadsheet::ParseXLSX::BEGIN@14 # spent 600ns making 1 call to Spreadsheet::ParseXLSX::__ANON__
15279µs250.0ms
# spent 50.0ms (44.8+5.23) within Spreadsheet::ParseXLSX::BEGIN@15 which was called: # once (44.8ms+5.23ms) by main::BEGIN@7 at line 15
use XML::Twig;
# spent 50.0ms making 1 call to Spreadsheet::ParseXLSX::BEGIN@15 # spent 2µs making 1 call to UNIVERSAL::import
16
17278µs213.8ms
# spent 13.8ms (688µs+13.1) within Spreadsheet::ParseXLSX::BEGIN@17 which was called: # once (688µs+13.1ms) by main::BEGIN@7 at line 17
use Spreadsheet::ParseXLSX::Decryptor;
# spent 13.8ms making 1 call to Spreadsheet::ParseXLSX::BEGIN@17 # spent 1µs making 1 call to UNIVERSAL::import
1823.27ms2242µs
# spent 241µs (174+68) within Spreadsheet::ParseXLSX::BEGIN@18 which was called: # once (174µs+68µs) by main::BEGIN@7 at line 18
use Spreadsheet::ParseXLSX::Cell;
# spent 241µs making 1 call to Spreadsheet::ParseXLSX::BEGIN@18 # spent 1µs making 1 call to UNIVERSAL::import
19
20=head1 SYNOPSIS
21
22 use Spreadsheet::ParseXLSX;
23
24 my $parser = Spreadsheet::ParseXLSX->new;
25 my $workbook = $parser->parse("file.xlsx");
26 # see Spreadsheet::ParseExcel for further documentation
27
28=head1 DESCRIPTION
29
30This module is an adaptor for L<Spreadsheet::ParseExcel> that reads XLSX files.
31For documentation about the various data that you can retrieve from these
32classes, please see L<Spreadsheet::ParseExcel>,
33L<Spreadsheet::ParseExcel::Workbook>, L<Spreadsheet::ParseExcel::Worksheet>,
34and L<Spreadsheet::ParseExcel::Cell>.
35
36=cut
37
38=method new(%opts)
39
40Returns a new parser instance. Takes a hash of parameters:
41
42=over 4
43
44=item Password
45
46Password to use for decrypting encrypted files.
47
48=back
49
50=cut
51
52
# spent 2µs within Spreadsheet::ParseXLSX::new which was called: # once (2µs+0s) by main::RUNTIME at line 11 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
sub new {
531200ns my $class = shift;
541400ns my (%args) = @_;
55
561500ns my $self = bless {}, $class;
571200ns $self->{Password} = $args{Password} if defined $args{Password};
58
5912µs return $self;
60}
61
62=method parse($file, $formatter)
63
64Parses an XLSX file. Parsing errors throw an exception. C<$file> can be either
65a filename or an open filehandle. Returns a
66L<Spreadsheet::ParseExcel::Workbook> instance containing the parsed data.
67The C<$formatter> argument is an optional formatter class as described in L<Spreadsheet::ParseExcel>.
68
69=cut
70
71
# spent 70.7s (51µs+70.7) within Spreadsheet::ParseXLSX::parse which was called: # once (51µs+70.7s) by main::RUNTIME at line 11 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
sub parse {
721100ns my $self = shift;
731400ns my ($file, $formatter) = @_;
74
7512µs116µs my $zip = Archive::Zip->new;
# spent 16µs making 1 call to Archive::Zip::new
7612µs12µs my $workbook = Spreadsheet::ParseExcel::Workbook->new;
# spent 2µs making 1 call to Spreadsheet::ParseExcel::Workbook::new
77
781700ns198µs if ($self->_check_signature($file)) {
# spent 98µs making 1 call to Spreadsheet::ParseXLSX::_check_signature
79 my $decrypted_file = Spreadsheet::ParseXLSX::Decryptor->open($file, $self->{Password});
80 $file = $decrypted_file if $decrypted_file;
81 }
82
8312µs1400ns if (openhandle($file)) {
# spent 400ns making 1 call to Scalar::Util::openhandle
84 bless $file, 'IO::File' if ref($file) eq 'GLOB'; # sigh
85 my $fh =
86 ref($file) eq 'File::Temp'
87 ? IO::File->new("<&=" . fileno($file))
88 : $file;
89 $zip->readFromFileHandle($fh) == Archive::Zip::AZ_OK
90 or die "Can't open filehandle as a zip file";
91 $workbook->{File} = undef;
92 $workbook->{__tempfile} = $file;
93 } elsif (ref($file) eq 'SCALAR') {
94 open my $fh, '+<', $file
95 or die "Can't create filehandle from memory data";
96 $zip->readFromFileHandle($fh) == Archive::Zip::AZ_OK
97 or die "Can't open scalar ref as a zip file";
98 $workbook->{File} = undef;
99 } elsif (!ref($file)) {
10012µs1851µs $zip->read($file) == Archive::Zip::AZ_OK
# spent 851µs making 1 call to Archive::Zip::Archive::read
101 or die "Can't open file '$file' as a zip file";
10212µs $workbook->{File} = $file;
103 } else {
104 die "First argument to 'parse' must be a filename, open filehandle, or scalar ref";
105 }
106
107148µs170.7s return $self->_parse_workbook($zip, $workbook, $formatter);
# spent 70.7s making 1 call to Spreadsheet::ParseXLSX::_parse_workbook
108}
109
110
# spent 98µs (14+84) within Spreadsheet::ParseXLSX::_check_signature which was called: # once (14µs+84µs) by Spreadsheet::ParseXLSX::parse at line 78
sub _check_signature {
1111100ns my $self = shift;
1121100ns my ($file) = @_;
113
1141200ns my $signature = '';
11514µs11µs if (openhandle($file)) {
# spent 1µs making 1 call to Scalar::Util::openhandle
116 bless $file, 'IO::File' if ref($file) eq 'GLOB'; # sigh
117 $file->read($signature, 2);
118 $file->seek(-2, IO::File::SEEK_CUR);
119 } elsif (ref($file) eq 'SCALAR') {
120 $signature = substr($$file, 0, 2);
121 } elsif (!ref($file)) {
12212µs163µs my $fh = IO::File->new($file, 'r');
# spent 63µs making 1 call to IO::File::new
12313µs113µs $fh->read($signature, 2);
# spent 13µs making 1 call to IO::Handle::read
12414µs17µs $fh->close;
# spent 7µs making 1 call to IO::Handle::close
125 }
126
12712µs return $signature eq "\xd0\xcf";
128}
129
130
# spent 70.7s (671µs+70.7) within Spreadsheet::ParseXLSX::_parse_workbook which was called: # once (671µs+70.7s) by Spreadsheet::ParseXLSX::parse at line 107
sub _parse_workbook {
1311100ns my $self = shift;
1321300ns my ($zip, $workbook, $formatter) = @_;
133
13411µs172.2ms my $files = $self->_extract_files($zip);
# spent 72.2ms making 1 call to Spreadsheet::ParseXLSX::_extract_files
135
13612µs1292µs my ($version) = $files->{workbook}->find_nodes('//s:fileVersion');
# spent 292µs making 1 call to XML::Twig::get_xpath
13712µs1245µs my ($properties) = $files->{workbook}->find_nodes('//s:workbookPr');
# spent 245µs making 1 call to XML::Twig::get_xpath
138
13914µs32µs if ($version) {
# spent 2µs making 3 calls to XML::Twig::Elt::att, avg 700ns/call
140 $workbook->{Version} = $version->att('appName')
141 . (
142 $version->att('lowestEdited')
143 ? ('-' . $version->att('lowestEdited'))
144 : ("")
145 );
146 }
147
14813µs22µs $workbook->{Flg1904} = $self->_xml_boolean($properties->att('date1904'))
# spent 2µs making 1 call to Spreadsheet::ParseXLSX::_xml_boolean # spent 400ns making 1 call to XML::Twig::Elt::att
149 if $properties;
150
15116µs13µs $workbook->{FmtClass} = $formatter || Spreadsheet::ParseExcel::FmtDefault->new;
# spent 3µs making 1 call to Spreadsheet::ParseExcel::FmtDefault::new
152
15313µs11.10ms my $themes = $self->_parse_themes((values %{$files->{themes}})[0]); # XXX
# spent 1.10ms making 1 call to Spreadsheet::ParseXLSX::_parse_themes
154
1551700ns $workbook->{Color} = $themes->{Color};
156
15712µs110.1ms my $styles = $self->_parse_styles($workbook, $files->{styles});
# spent 10.1ms making 1 call to Spreadsheet::ParseXLSX::_parse_styles
158
1591600ns $workbook->{Format} = $styles->{Format};
16011µs $workbook->{FormatStr} = $styles->{FormatStr};
1611500ns $workbook->{Font} = $styles->{Font};
162
1631400ns if ($files->{strings}) {
16413µs111.2ms my %string_parse_data = $self->_parse_shared_strings($files->{strings}, $themes->{Color});
# spent 11.2ms making 1 call to Spreadsheet::ParseXLSX::_parse_shared_strings
1651600ns $workbook->{PkgStr} = $string_parse_data{PkgStr};
1661600ns $workbook->{Rich} = $string_parse_data{Rich};
167 }
168
169 # $workbook->{StandardWidth} = ...;
170
171 # $workbook->{Author} = ...;
172
173 # $workbook->{PrintArea} = ...;
174 # $workbook->{PrintTitle} = ...;
175
176 my @sheets = map {
17711µs11µs my $idx = $_->att('rels:id');
# spent 1µs making 1 call to XML::Twig::Elt::att
17811µs if ($files->{sheets}{$idx}) {
17915µs28µs my $sheet = Spreadsheet::ParseExcel::Worksheet->new(
# spent 8µs making 1 call to Spreadsheet::ParseExcel::Worksheet::new # spent 500ns making 1 call to XML::Twig::Elt::att
180 Name => $_->att('name'),
181 _Book => $workbook,
182 _SheetNo => $idx,
183 );
1841900ns1600ns $sheet->{SheetHidden} = 1 if defined $_->att('state') and $_->att('state') eq 'hidden';
# spent 600ns making 1 call to XML::Twig::Elt::att
18512µs170.6s $self->_parse_sheet($sheet, $files->{sheets}{$idx});
# spent 70.6s making 1 call to Spreadsheet::ParseXLSX::_parse_sheet
186
187 # Do we have a rels for for this sheet?
18811µs if ( $files->{sheets_rels}
189 && $files->{sheets_rels}{$idx})
190 {
191 # Yes - now parse the rels to extract the hyperlinks
192 $self->_parse_sheet_links($sheet, $files->{sheets}{$idx}, $files->{sheets_rels}{$idx});
193 }
194
19511µs ($sheet);
196 } else {
197 ()
198 }
19913µs1376µs } $files->{workbook}->find_nodes('//s:sheets/s:sheet');
# spent 376µs making 1 call to XML::Twig::get_xpath
200
20111µs $workbook->{Worksheet} = \@sheets;
20213µs $workbook->{SheetCount} = scalar(@sheets);
203
20416µs1463µs my ($node) = $files->{workbook}->find_nodes('//s:workbookView');
# spent 463µs making 1 call to XML::Twig::get_xpath
20513µs12µs my $selected = $node ? $node->att('activeTab') : undef;
# spent 2µs making 1 call to XML::Twig::Elt::att
2061800ns $workbook->{SelectedSheet} = defined($selected) ? 0 + $selected : 0;
207
2081590µs3354µs return $workbook;
# spent 354µs making 3 calls to XML::Twig::DESTROY, avg 118µs/call
209}
210
211
# spent 70.6s (198ms+70.4) within Spreadsheet::ParseXLSX::_parse_sheet which was called: # once (198ms+70.4s) by Spreadsheet::ParseXLSX::_parse_workbook at line 185
sub _parse_sheet {
2121200ns my $self = shift;
2131400ns my ($sheet, $sheet_file) = @_;
214
21512µs $sheet->{MinRow} = 0;
2161500ns $sheet->{MinCol} = 0;
2171500ns $sheet->{MaxRow} = -1;
2181700ns $sheet->{MaxCol} = -1;
2191900ns $sheet->{Selection} = [0, 0];
220
2211400ns my @column_formats;
222 my @column_widths;
223 my @columns_hidden;
224 my @row_heights;
225 my @rows_hidden;
226
2271200ns my $default_row_height = 15;
2281200ns my $default_column_width = 10;
229
2301300ns my $row_idx = 0;
231
232 my $sheet_xml = $self->_new_twig(
233 twig_roots => {
234 #XXX need a fallback here, the dimension tag is optional
235
# spent 72µs (12+60) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246] which was called: # once (12µs+60µs) by XML::Twig::_twig_end at line 2350 of XML/Twig.pm
's:dimension' => sub {
2361700ns my ($twig, $dimension) = @_;
237
23814µs226µs my ($rmin, $cmin, $rmax, $cmax) = $self->_dimensions($dimension->att('ref'));
# spent 24µs making 1 call to Spreadsheet::ParseXLSX::_dimensions # spent 2µs making 1 call to XML::Twig::Elt::att
239
2401700ns $sheet->{MinRow} = $rmin;
2411800ns $sheet->{MinCol} = $cmin;
2421500ns $sheet->{MaxRow} = $rmax ? $rmax : -1;
2431600ns $sheet->{MaxCol} = $cmax ? $cmax : -1;
244
24513µs135µs $twig->purge;
# spent 35µs making 1 call to XML::Twig::purge
246 },
247
248 's:headerFooter' => sub {
249 my ($twig, $hf) = @_;
250
251 my ($helem, $felem) = map { $hf->first_child("s:$_") } qw(oddHeader oddFooter);
252 $sheet->{Header} = $helem->text
253 if $helem;
254 $sheet->{Footer} = $felem->text
255 if $felem;
256
257 $twig->purge;
258 },
259
260
# spent 50µs (22+28) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:268] which was called: # once (22µs+28µs) by XML::Twig::_twig_end at line 2350 of XML/Twig.pm
's:pageMargins' => sub {
2611500ns my ($twig, $margin) = @_;
262 map {
26375µs my $key = "\u${_}Margin";
26468µs124µs $sheet->{$key} = defined $margin->att($_) ? $margin->att($_) : 0
# spent 4µs making 12 calls to XML::Twig::Elt::att, avg 367ns/call
265 } qw(left right top bottom header footer);
266
26713µs124µs $twig->purge;
# spent 24µs making 1 call to XML::Twig::purge
268 },
269
270 's:pageSetup' => sub {
271 my ($twig, $setup) = @_;
272 $sheet->{Scale} =
273 defined $setup->att('scale')
274 ? $setup->att('scale')
275 : 100;
276 $sheet->{Landscape} = ($setup->att('orientation') || '') ne 'landscape';
277 $sheet->{PaperSize} =
278 defined $setup->att('paperSize')
279 ? $setup->att('paperSize')
280 : 1;
281 $sheet->{PageStart} = $setup->att('firstPageNumber');
282 $sheet->{UsePage} = $self->_xml_boolean($setup->att('useFirstPageNumber'));
283 $sheet->{HorizontalDPI} = $setup->att('horizontalDpi');
284 $sheet->{VerticalDPI} = $setup->att('verticalDpi');
285
286 $twig->purge;
287 },
288
289
# spent 960ms (218+742) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] which was called 18180 times, avg 53µs/call: # 18180 times (218ms+742ms) by XML::Twig::_twig_end at line 2350 of XML/Twig.pm, avg 53µs/call
's:mergeCells/s:mergeCell' => sub {
290181803.06ms my ($twig, $merge_area) = @_;
291
2921818015.4ms1818012.4ms if (my $ref = $merge_area->att('ref')) {
# spent 12.4ms making 18180 calls to XML::Twig::Elt::att, avg 684ns/call
2931818050.7ms1818027.8ms my ($topleft, $bottomright) = $ref =~ /([^:]+):([^:]+)/;
# spent 27.8ms making 18180 calls to CORE::match, avg 2µs/call
294
2951818013.9ms1818080.2ms my ($toprow, $leftcol) = $self->_cell_to_row_col($topleft);
# spent 80.2ms making 18180 calls to Spreadsheet::ParseXLSX::_cell_to_row_col, avg 4µs/call
296181807.95ms1818053.1ms my ($bottomrow, $rightcol) = $self->_cell_to_row_col($bottomright);
# spent 53.1ms making 18180 calls to Spreadsheet::ParseXLSX::_cell_to_row_col, avg 3µs/call
297
2981818015.5ms push @{$sheet->{MergedArea}}, [$toprow, $leftcol, $bottomrow, $rightcol,];
299 }
300
3011818068.9ms18180568ms $twig->purge;
# spent 568ms making 18180 calls to XML::Twig::purge, avg 31µs/call
302 },
303
304
# spent 27µs (4+23) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:313] which was called: # once (4µs+23µs) by XML::Twig::_twig_end at line 2350 of XML/Twig.pm
's:sheetFormatPr' => sub {
3051300ns my ($twig, $format) = @_;
306
3071400ns $default_row_height = $format->att('defaultRowHeight')
308 unless defined $default_row_height;
3091300ns $default_column_width = $format->att('baseColWidth')
310 unless defined $default_column_width;
311
31213µs123µs $twig->purge;
# spent 23µs making 1 call to XML::Twig::purge
313 },
314
315 's:col' => sub {
316 my ($twig, $col) = @_;
317
318 for my $colnum ($col->att('min') .. $col->att('max')) {
319 $column_widths[$colnum - 1] = $col->att('width');
320 $column_formats[$colnum - 1] = $col->att('style');
321 $columns_hidden[$colnum - 1] = $self->_xml_boolean($col->att('hidden'));
322 }
323
324 $twig->purge;
325 },
326
327
# spent 49µs (9+39) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338] which was called: # once (9µs+39µs) by XML::Twig::_twig_end at line 2350 of XML/Twig.pm
's:selection' => sub {
3281400ns my ($twig, $selection) = @_;
329
33014µs214µs if (my $cell = $selection->att('activeCell')) {
# spent 13µs making 1 call to Spreadsheet::ParseXLSX::_cell_to_row_col # spent 800ns making 1 call to XML::Twig::Elt::att
331 $sheet->{Selection} = [$self->_cell_to_row_col($cell)];
332 } elsif (my $range = $selection->att('sqref')) {
333 my ($topleft, $bottomright) = $range =~ /([^:]+):([^:]+)/;
334 $sheet->{Selection} = [$self->_cell_to_row_col($topleft), $self->_cell_to_row_col($bottomright),];
335 }
336
33712µs125µs $twig->purge;
# spent 25µs making 1 call to XML::Twig::purge
338 },
339
340 's:sheetPr/s:tabColor' => sub {
341 my ($twig, $tab_color) = @_;
342
343 $sheet->{TabColor} = $self->_color($sheet->{_Book}{Color}, $tab_color);
344
345 $twig->purge;
346 },
347
348
# spent 12.9s (5.52+7.35) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] which was called 15608 times, avg 825µs/call: # 15608 times (5.52s+7.35s) by XML::Twig::_twig_end at line 2350 of XML/Twig.pm, avg 825µs/call
's:sheetData/s:row' => sub {
349156083.21ms my ($twig, $row_elt) = @_;
3501560813.4ms1560812.8ms my $explicit_row_idx = $row_elt->att('r');
# spent 12.8ms making 15608 calls to XML::Twig::Elt::att, avg 820ns/call
351156088.87ms $row_idx = $explicit_row_idx - 1 if defined $explicit_row_idx;
352
353156089.81ms156085.77ms $row_heights[$row_idx] = $row_elt->att('ht');
# spent 5.77ms making 15608 calls to XML::Twig::Elt::att, avg 369ns/call
3541560822.4ms3121618.8ms $rows_hidden[$row_idx] = $self->_xml_boolean($row_elt->att('hidden'));
# spent 13.3ms making 15608 calls to Spreadsheet::ParseXLSX::_xml_boolean, avg 855ns/call # spent 5.46ms making 15608 calls to XML::Twig::Elt::att, avg 350ns/call
355
356156082.34ms my $col_idx = 0;
3571560818.9ms156081.57s for my $cell ($row_elt->children('s:c')) {
# spent 1.57s making 15608 calls to XML::Twig::Elt::children, avg 101µs/call
358202907104ms202907100ms my $loc = $cell->att('r');
# spent 100ms making 202907 calls to XML::Twig::Elt::att, avg 493ns/call
35920290713.9ms my ($row, $col);
36020290739.1ms if ($loc) {
361202907127ms202907903ms ($row, $col) = $self->_cell_to_row_col($loc);
# spent 903ms making 202907 calls to Spreadsheet::ParseXLSX::_cell_to_row_col, avg 4µs/call
36220290723.6ms if ($row != $row_idx) {
363 warn "mismatched coords: got $loc for cell in row $row_idx";
364 }
36520290725.8ms $col_idx = $col - 1;
366 } else {
367 ($row, $col) = ($row_idx, $col_idx);
368 }
369 $sheet->{MaxRow} = $row
37020290735.1ms if $sheet->{MaxRow} < $row;
371 $sheet->{MaxCol} = $col
37220290724.5ms if $sheet->{MaxCol} < $col;
37320290799.2ms20290768.3ms my $type = $cell->att('t') || 'n';
# spent 68.3ms making 202907 calls to XML::Twig::Elt::att, avg 336ns/call
37420290713.7ms my $val_xml;
375202907102ms202907825ms if ($type ne 'inlineStr') {
# spent 825ms making 202907 calls to XML::Twig::Elt::first_child, avg 4µs/call
376 $val_xml = $cell->first_child('s:v');
377 } elsif (defined $cell->first_child('s:is')) {
378 $val_xml = ($cell->find_nodes('.//s:t'))[0];
379 }
38020290787.2ms127276678ms my $val = $val_xml ? $val_xml->text : undef;
# spent 678ms making 127276 calls to XML::Twig::Elt::text, avg 5µs/call
381
38220290715.6ms my $long_type;
383 my $Rich;
38420290751.4ms if (!defined($val)) {
385756317.31ms $long_type = 'Text';
386756317.09ms $val = '';
387 } elsif ($type eq 's') {
38812727611.8ms $long_type = 'Text';
38912727660.3ms $Rich = $sheet->{_Book}{Rich}->{$val};
39012727642.5ms $val = $sheet->{_Book}{PkgStr}[$val];
391 } elsif ($type eq 'n') {
392 $long_type = 'Numeric';
393 $val = defined($val) && $val ne '' ? 0 + $val : undef;
394 } elsif ($type eq 'd') {
395 $long_type = 'Date';
396 } elsif ($type eq 'b') {
397 $long_type = 'Text';
398 $val = $val ? "TRUE" : "FALSE";
399 } elsif ($type eq 'e') {
400 $long_type = 'Text';
401 } elsif ($type eq 'str' || $type eq 'inlineStr') {
402 $long_type = 'Text';
403 } else {
404 die "unimplemented type $type"; # XXX
405 }
406
40720290791.8ms20290773.0ms my $format_idx = $cell->att('s') || 0;
# spent 73.0ms making 202907 calls to XML::Twig::Elt::att, avg 360ns/call
40820290752.8ms my $format = $sheet->{_Book}{Format}[$format_idx];
40920290771.1ms my $formatstr = $sheet->{_Book}{FormatStr}{$format->{FmtIdx}};
41020290716.0ms die "unknown format $format_idx" unless $format;
411
412 # see the list of built-in formats below in _parse_styles
413 # XXX probably should figure this out from the actual format string,
414 # but that's not entirely trivial
415202907314ms if (grep { $format->{FmtIdx} == $_ } 14 .. 22, 45 .. 47) {
416 $long_type = 'Date';
417 }
418
419202907496ms202907180ms if ($formatstr =~ /\b(mmm|m|d|yy|h|hh|mm|ss)\b/i) {
# spent 180ms making 202907 calls to CORE::match, avg 886ns/call
420 $long_type = 'Date';
421 }
422
42320290786.3ms2029071.14s my $formula = $cell->first_child('s:f');
# spent 1.14s making 202907 calls to XML::Twig::Elt::first_child, avg 6µs/call
424202907147ms202907362ms my $cell = Spreadsheet::ParseXLSX::Cell->new(
# spent 362ms making 202907 calls to Spreadsheet::ParseExcel::Cell::new, avg 2µs/call
425 Val => $val,
426 Type => $long_type,
427 Format => $format,
428 FormatNo => $format_idx,
429 (
430 $formula
431 ? (Formula => $formula->text)
432 : ()
433 ),
434 Rich => $Rich,
435 );
436202907164ms202907810ms $cell->{_Value} = $sheet->{_Book}{FmtClass}->ValFmt($cell, $sheet->{_Book});
# spent 810ms making 202907 calls to Spreadsheet::ParseExcel::FmtDefault::ValFmt, avg 4µs/call
43720290778.1ms $sheet->{Cells}[$row][$col] = $cell;
438202907134ms $col_idx++;
439 }
440
4411560811.1ms15608604ms $twig->purge;
# spent 604ms making 15608 calls to XML::Twig::purge, avg 39µs/call
4421560856.2ms $row_idx++;
443 },
444 }
445118µs14.90ms );
# spent 4.90ms making 1 call to Spreadsheet::ParseXLSX::_new_twig
446
4471900ns170.4s $sheet_xml->parse($sheet_file);
# spent 70.4s making 1 call to XML::Twig::parse
448
44911µs if ($sheet->{Cells}) {
450 # SMELL: we have to connect cells their sheet as well as their position
45112µs for my $r (0 .. $#{$sheet->{Cells}}) {
452156082.69ms my $row = $sheet->{Cells}[$r] or next;
453156087.39ms for my $c (0 .. $#$row) {
45423245335.0ms my $cell = $row->[$c] or next;
45520290777.6ms $cell->{Sheet} = $sheet;
45620290726.6ms $cell->{Row} = $r;
45720290745.5ms $cell->{Col} = $c;
458 }
459 }
460 } else {
461 $sheet->{MaxRow} = $sheet->{MaxCol} = -1;
462 }
463
46412µs $sheet->{DefRowHeight} = 0 + $default_row_height;
46511µs $sheet->{DefColWidth} = 0 + $default_column_width;
46613.08ms $sheet->{RowHeight} = [map { defined $_ ? 0 + $_ : 0 + $default_row_height } @row_heights];
46712µs $sheet->{RowHidden} = \@rows_hidden;
46812µs $sheet->{ColWidth} = [map { defined $_ ? 0 + $_ : 0 + $default_column_width } @column_widths];
46913µs $sheet->{ColFmtNo} = \@column_formats;
470112µs $sheet->{ColHidden} = \@columns_hidden;
471
472}
473
474sub _parse_sheet_links {
475 my $self = shift;
476 my ($sheet, $sheet_file, $rels_file) = @_;
477
478 # First we need to parse the hyperlinks out of the rels XML
479 my $rels;
480
481 my $rels_xml = XML::Twig->new(
482 twig_roots => {
483 'Relationships/Relationship' => sub {
484 my $twig = shift;
485 my $relationship = shift;
486
487 if ( $relationship->att('Type') eq 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'
488 && $relationship->att('TargetMode') eq 'External')
489 {
490 # Store the target URL in a hash by relationship id
491 $rels->{$relationship->att('Id')} = $relationship->att('Target');
492 }
493
494 $twig->purge;
495 },
496 },
497 );
498
499 # Run the parser
500 $rels_xml->parse($rels_file);
501
502 # Now iterate over the sheet XML again, this time processing hyperlink entries
503 my $sheet_xml = XML::Twig->new(
504 twig_roots => {
505 'hyperlinks/hyperlink' => sub {
506 my $twig = shift;
507 my $hyperlink = shift;
508
509 # Work out our row and column
510 my ($row, $col) = $self->_cell_to_row_col($hyperlink->att('ref'));
511
512 # Get the cell
513 my $cell = $sheet->{Cells}[$row][$col];
514
515 # Do I have a cell?
516 unless ($cell) {
517 # No - just create an empty value for now
518 $cell = $sheet->{Cells}[$row][$col] = Spreadsheet::ParseXLSX::Cell->new();
519 }
520
521 # Is this an external hyperlink I've parsed from the rels?
522 if ( $hyperlink->att('r:id')
523 && $rels
524 && $rels->{$hyperlink->att('r:id')})
525 {
526 # Yes - Check if we need to frig our destination a bit
527 my $destination_url = sprintf('%s%s%s', $rels->{$hyperlink->att('r:id')}, $hyperlink->att('location') ? '#' : '', $hyperlink->att('location') || '',);
528
529 # Add the hyperlink
530 $cell->{Hyperlink} = [
531 $hyperlink->att('display') || $cell->{_Value} || undef, # Description
532 $destination_url, # Target
533 undef, # Target Frame
534 $row, # Start Row
535 $row, # End Row
536 $col, # Start Column
537 $col, # End Column
538 ];
539 } else {
540 # This is an internal hyperlink
541
542 # Add the hyperlink
543 $cell->{Hyperlink} = [
544 $hyperlink->att('display') || $cell->{_Value} || undef, # Description
545 $hyperlink->att('location'), # Target
546 undef, # Target Frame
547 $row, # Start Row
548 $row, # End Row
549 $col, # Start Column
550 $col, # End Column
551 ];
552 }
553
554 $twig->purge;
555 },
556 },
557 );
558
559 # Now parse the XML
560 $sheet_xml->parse($sheet_file);
561}
562
563
# spent 280µs (105+175) within Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell which was called 15 times, avg 19µs/call: # 15 times (105µs+175µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655] at line 651, avg 19µs/call
sub _get_text_and_rich_font_by_cell {
564152µs my $self = shift;
565152µs my ($si, $theme_colors) = @_;
566
567 # XXX
5681522µs my %default_font_opts = (
569 Height => 12,
570 Color => '#000000',
571 Name => '',
572 Bold => 0,
573 Italic => 0,
574 Underline => 0,
575 UnderlineStyle => 0,
576 Strikeout => 0,
577 Super => 0,
578 );
579
580152µs my $string_text = '';
581151µs my @rich_font_by_cell;
5821512µs1565µs for my $subnode ($si->children) {
# spent 65µs making 15 calls to XML::Twig::Elt::children, avg 4µs/call
5831525µs30110µs if ($subnode->name eq 's:t') {
# spent 100µs making 15 calls to XML::Twig::Elt::text, avg 7µs/call # spent 10µs making 15 calls to XML::Twig::Elt::gi, avg 660ns/call
584 $string_text .= $subnode->text;
585 } elsif ($subnode->name eq 's:r') {
586 for my $chunk ($subnode->children) {
587 my $string_length = length($string_text);
588 if ($chunk->name eq 's:t') {
589 if (!@rich_font_by_cell) {
590 push @rich_font_by_cell, [$string_length, Spreadsheet::ParseExcel::Font->new(%default_font_opts)];
591 }
592 $string_text .= $chunk->text;
593 } elsif ($chunk->name eq 's:rPr') {
594 my %format_text = %default_font_opts;
595 for my $node_format ($chunk->children) {
596 if ($node_format->name eq 's:sz') {
597 $format_text{Height} = $node_format->att('val');
598 } elsif ($node_format->name eq 's:color') {
599 $format_text{Color} = $self->_color($theme_colors, $node_format);
600 } elsif ($node_format->name eq 's:rFont') {
601 $format_text{Name} = $node_format->att('val');
602 } elsif ($node_format->name eq 's:b') {
603 $format_text{Bold} = 1;
604 } elsif ($node_format->name eq 's:i') {
605 $format_text{Italic} = 1;
606 } elsif ($node_format->name eq 's:u') {
607 $format_text{Underline} = 1;
608 if (defined $node_format->att('val')) {
609 $format_text{UnderlineStyle} = 2;
610 } else {
611 $format_text{UnderlineStyle} = 1;
612 }
613 } elsif ($node_format->name eq 's:strike') {
614 $format_text{Strikeout} = 1;
615 } elsif ($node_format->name eq 's:vertAlign') {
616 if ($node_format->att('val') eq 'superscript') {
617 $format_text{Super} = 1;
618 } elsif ($node_format->att('val') eq 'subscript') {
619 $format_text{Super} = 2;
620 }
621 }
622 }
623 push @rich_font_by_cell, [$string_length, Spreadsheet::ParseExcel::Font->new(%format_text)];
624 }
625 }
626 } else {
627 # $subnode->name is either 's:rPh' or 's:phoneticPr'
628 # We ignore phonetic information and do nothing.
629 }
630 }
631
632 return (
6331524µs String => $string_text,
634 Rich => \@rich_font_by_cell,
635 );
636}
637
638
# spent 11.2ms (10µs+11.1) within Spreadsheet::ParseXLSX::_parse_shared_strings which was called: # once (10µs+11.1ms) by Spreadsheet::ParseXLSX::_parse_workbook at line 164
sub _parse_shared_strings {
6391300ns my $self = shift;
6401400ns my ($strings, $theme_colors) = @_;
641
6421400ns my $PkgStr = [];
643
6441200ns my %richfonts;
6451400ns if ($strings) {
646 my $xml = $self->_new_twig(
647 twig_handlers => {
648
# spent 715µs (68+647) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:655] which was called 15 times, avg 48µs/call: # 15 times (68µs+647µs) by XML::Twig::_twig_end at line 2350 of XML/Twig.pm, avg 48µs/call
's:si' => sub {
649152µs my ($twig, $si) = @_;
650
6511516µs15280µs my %text_rich = $self->_get_text_and_rich_font_by_cell($si, $theme_colors);
# spent 280µs making 15 calls to Spreadsheet::ParseXLSX::_get_text_and_rich_font_by_cell, avg 19µs/call
6521510µs $richfonts{scalar @$PkgStr} = $text_rich{Rich};
653156µs push @$PkgStr, $text_rich{String};
6541524µs15367µs $twig->purge;
# spent 367µs making 15 calls to XML::Twig::purge, avg 24µs/call
655 },
656 }
65713µs13.96ms );
# spent 3.96ms making 1 call to Spreadsheet::ParseXLSX::_new_twig
65811µs17.19ms $xml->parse($strings);
# spent 7.19ms making 1 call to XML::Twig::parse
659 }
660 return (
66112µs Rich => \%richfonts,
662 PkgStr => $PkgStr,
663 );
664}
665
666
# spent 1.10ms (28µs+1.08) within Spreadsheet::ParseXLSX::_parse_themes which was called: # once (28µs+1.08ms) by Spreadsheet::ParseXLSX::_parse_workbook at line 153
sub _parse_themes {
6671300ns my $self = shift;
6681400ns my ($themes) = @_;
669
6701400ns return {} unless $themes;
671
6721312µs251.08ms my @color = map { $_->name eq 'drawmain:sysClr' ? $_->att('lastClr') : $_->att('val') } $themes->find_nodes('//drawmain:clrScheme/*/*');
# spent 1.06ms making 1 call to XML::Twig::get_xpath # spent 7µs making 12 calls to XML::Twig::Elt::att, avg 600ns/call # spent 4µs making 12 calls to XML::Twig::Elt::gi, avg 292ns/call
673
674 # this shouldn't be necessary, but the documentation is wrong here
675 # see http://stackoverflow.com/questions/2760976/theme-confusion-in-spreadsheetml
6761900ns ($color[0], $color[1]) = ($color[1], $color[0]);
6771800ns ($color[2], $color[3]) = ($color[3], $color[2]);
678
67913µs return {Color => \@color,};
680}
681
682
# spent 10.1ms (648µs+9.48) within Spreadsheet::ParseXLSX::_parse_styles which was called: # once (648µs+9.48ms) by Spreadsheet::ParseXLSX::_parse_workbook at line 157
sub _parse_styles {
6831300ns my $self = shift;
6841400ns my ($workbook, $styles) = @_;
685
686 # these defaults are from
687 # http://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/thread/e27aaf16-b900-4654-8210-83c5774a179c
688116µs my %default_format_str = (
689 0 => 'GENERAL',
690 1 => '0',
691 2 => '0.00',
692 3 => '#,##0',
693 4 => '#,##0.00',
694 5 => '$#,##0_);($#,##0)',
695 6 => '$#,##0_);[Red]($#,##0)',
696 7 => '$#,##0.00_);($#,##0.00)',
697 8 => '$#,##0.00_);[Red]($#,##0.00)',
698 9 => '0%',
699 10 => '0.00%',
700 11 => '0.00E+00',
701 12 => '# ?/?',
702 13 => '# ??/??',
703 14 => 'm/d/yyyy',
704 15 => 'd-mmm-yy',
705 16 => 'd-mmm',
706 17 => 'mmm-yy',
707 18 => 'h:mm AM/PM',
708 19 => 'h:mm:ss AM/PM',
709 20 => 'h:mm',
710 21 => 'h:mm:ss',
711 22 => 'm/d/yyyy h:mm',
712 37 => '#,##0_);(#,##0)',
713 38 => '#,##0_);[Red](#,##0)',
714 39 => '#,##0.00_);(#,##0.00)',
715 40 => '#,##0.00_);[Red](#,##0.00)',
716 45 => 'mm:ss',
717 46 => '[h]:mm:ss',
718 47 => 'mm:ss.0',
719 48 => '##0.0E+0',
720 49 => '@',
721 );
722
72318µs my %default_format_opts = (
724 IgnoreFont => 1,
725 IgnoreFill => 1,
726 IgnoreBorder => 1,
727 IgnoreAlignment => 1,
728 IgnoreNumberFormat => 1,
729 IgnoreProtection => 1,
730 FontNo => 0,
731 FmtIdx => 0,
732 Lock => 1,
733 Hidden => 0,
734 AlignH => 0,
735 Wrap => 0,
736 AlignV => 2,
737 Rotate => 0,
738 Indent => 0,
739 Shrink => 0,
740 BdrStyle => [0, 0, 0, 0],
741 BdrColor => [undef, undef, undef, undef],
742 BdrDiag => [0, 0, undef],
743 Fill => [0, undef, undef],
744 );
745
7461300ns if (!$styles) {
747 # XXX i guess?
748 my $font = Spreadsheet::ParseExcel::Font->new(
749 Height => 12,
750 Color => '#000000',
751 Name => '',
752 );
753 my $format = Spreadsheet::ParseExcel::Format->new(%default_format_opts, Font => $font,);
754
755 return {
756 FormatStr => \%default_format_str,
757 Font => [$font],
758 Format => [$format],
759 };
760 }
761
76213µs my %halign = (
763 center => 2,
764 centerContinuous => 6,
765 distributed => 7,
766 fill => 4,
767 general => 0,
768 justify => 5,
769 left => 1,
770 right => 3,
771 );
772
77312µs my %valign = (
774 bottom => 2,
775 center => 1,
776 distributed => 4,
777 justify => 3,
778 top => 0,
779 );
780
78114µs my %border = (
782 dashDot => 9,
783 dashDotDot => 11,
784 dashed => 3,
785 dotted => 4,
786 double => 6,
787 hair => 7,
788 medium => 2,
789 mediumDashDot => 10,
790 mediumDashDotDot => 12,
791 mediumDashed => 8,
792 none => 0,
793 slantDashDot => 13,
794 thick => 5,
795 thin => 1,
796 );
797
79817µs my %fill = (
799 darkDown => 7,
800 darkGray => 3,
801 darkGrid => 9,
802 darkHorizontal => 5,
803 darkTrellis => 10,
804 darkUp => 8,
805 darkVertical => 6,
806 gray0625 => 18,
807 gray125 => 17,
808 lightDown => 13,
809 lightGray => 4,
810 lightGrid => 15,
811 lightHorizontal => 11,
812 lightTrellis => 16,
813 lightUp => 14,
814 lightVertical => 12,
815 mediumGray => 2,
816 none => 0,
817 solid => 1,
818 );
819
820 my @fills = map {
821119µs114.73ms my $pattern_type = $_->att('patternType');
# spent 4.72ms making 1 call to XML::Twig::get_xpath # spent 7µs making 10 calls to XML::Twig::Elt::att, avg 720ns/call
8221024µs40344µs [($pattern_type ? $fill{$pattern_type} : 0), $self->_color($workbook->{Color}, $_->first_child('s:fgColor'), 1), $self->_color($workbook->{Color}, $_->first_child('s:bgColor'), 1),]
# spent 234µs making 20 calls to XML::Twig::Elt::first_child, avg 12µs/call # spent 110µs making 20 calls to Spreadsheet::ParseXLSX::_color, avg 6µs/call
823 } $styles->find_nodes('//s:fills/s:fill/s:patternFill');
824
825 my @borders = map {
82622µs1454µs my $border = $_;
# spent 454µs making 1 call to XML::Twig::get_xpath
82734µs42µs my ($ddiag, $udiag) = map { $self->_xml_boolean($border->att($_)) } qw(diagonalDown diagonalUp);
# spent 1µs making 2 calls to Spreadsheet::ParseXLSX::_xml_boolean, avg 650ns/call # spent 1µs making 2 calls to XML::Twig::Elt::att, avg 600ns/call
828 my %borderstyles = map {
82968µs5444µs my $e = $border->first_child("s:$_");
# spent 444µs making 5 calls to XML::Twig::Elt::first_child, avg 89µs/call
83056µs53µs $_ => ($e ? $e->att('style') || 'none' : 'none')
# spent 3µs making 5 calls to XML::Twig::Elt::att, avg 600ns/call
831 } qw(left right top bottom diagonal);
832 my %bordercolors = map {
83367µs524µs my $e = $border->first_child("s:$_");
# spent 24µs making 5 calls to XML::Twig::Elt::first_child, avg 5µs/call
83453µs595µs $_ => ($e ? $e->first_child('s:color') : undef)
# spent 95µs making 5 calls to XML::Twig::Elt::first_child, avg 19µs/call
835 } qw(left right top bottom diagonal);
836 # XXX specs say "begin" and "end" rather than "left" and "right",
837 # but... that's not what seems to be in the file itself (sigh)
838 {
839 colors => [map { $self->_color($workbook->{Color}, $bordercolors{$_}) } qw(left right top bottom)],
840 styles => [map { $border{$borderstyles{$_}} } qw(left right top bottom)],
841 diagonal => [(
842 $ddiag && $udiag ? 3
843 : $ddiag && !$udiag ? 2
844 : !$ddiag && $udiag ? 1
845 : 0
846 ),
847 $border{$borderstyles{diagonal}},
848110µs54µs $self->_color($workbook->{Color}, $bordercolors{diagonal}),
# spent 4µs making 5 calls to Spreadsheet::ParseXLSX::_color, avg 740ns/call
849 ],
850 }
851 } $styles->find_nodes('//s:borders/s:border');
852
853115µs1535µs my %format_str = (%default_format_str, (map { $_->att('numFmtId') => $_->att('formatCode') } $styles->find_nodes('//s:numFmts/s:numFmt')),);
# spent 535µs making 1 call to XML::Twig::get_xpath
854
855 my @font = map {
85645µs4652µs my $vert = $_->first_child('s:vertAlign');
# spent 515µs making 1 call to XML::Twig::get_xpath # spent 138µs making 3 calls to XML::Twig::Elt::first_child, avg 46µs/call
85732µs3128µs my $under = $_->first_child('s:u');
# spent 128µs making 3 calls to XML::Twig::Elt::first_child, avg 43µs/call
85832µs395µs my $heightelem = $_->first_child('s:sz');
# spent 95µs making 3 calls to XML::Twig::Elt::first_child, avg 32µs/call
859 # XXX i guess 12 is okay?
86034µs32µs my $height = 0 + ($heightelem ? $heightelem->att('val') : 12);
# spent 2µs making 3 calls to XML::Twig::Elt::att, avg 767ns/call
86132µs395µs my $nameelem = $_->first_child('s:name');
# spent 95µs making 3 calls to XML::Twig::Elt::first_child, avg 32µs/call
86232µs32µs my $name = $nameelem ? $nameelem->att('val') : '';
# spent 2µs making 3 calls to XML::Twig::Elt::att, avg 533ns/call
863 Spreadsheet::ParseExcel::Font->new(
864 Height => $height,
865 # Attr => $iAttr,
866 # XXX not sure if there's a better way to keep the indexing stuff
867 # intact rather than just going straight to #xxxxxx
868 # XXX also not sure what it means for the color tag to be missing,
869 # just assuming black for now
870 Color => (
871 $_->first_child('s:color')
872320µs24447µs ? $self->_color($workbook->{Color}, $_->first_child('s:color'))
# spent 404µs making 18 calls to XML::Twig::Elt::first_child, avg 22µs/call # spent 33µs making 3 calls to Spreadsheet::ParseXLSX::_color, avg 11µs/call # spent 10µs making 3 calls to Spreadsheet::ParseExcel::Font::new, avg 3µs/call
873 : '#000000'
874 ),
875 Super => (
876 $vert
877 ? (
878 $vert->att('val') eq 'superscript' ? 1
879 : $vert->att('val') eq 'subscript' ? 2
880 : 0
881 )
882 : 0
883 ),
884 # XXX not sure what the single accounting and double accounting
885 # underline styles map to in xlsx. also need to map the new
886 # underline styles
887 UnderlineStyle => (
888 $under
889 # XXX sometimes style xml files can contain just <u/> with no
890 # val attribute. i think this means single underline, but not
891 # sure
892 ? (
893 !$under->att('val') ? 1
894 : $under->att('val') eq 'single' ? 1
895 : $under->att('val') eq 'double' ? 2
896 : 0
897 )
898 : 0
899 ),
900 Name => $name,
901
902 Bold => $_->has_child('s:b') ? 1 : 0,
903 Italic => $_->has_child('s:i') ? 1 : 0,
904 Underline => $_->has_child('s:u') ? 1 : 0,
905 Strikeout => $_->has_child('s:strike') ? 1 : 0,
906 )
907 } $styles->find_nodes('//s:fonts/s:font');
908
909 my @format = map {
9101612µs11.01ms my $xml_fmt = $_;
# spent 1.01ms making 1 call to XML::Twig::get_xpath
911157µs15128µs my $alignment = $xml_fmt->first_child('s:alignment');
# spent 128µs making 15 calls to XML::Twig::Elt::first_child, avg 9µs/call
912155µs15130µs my $protection = $xml_fmt->first_child('s:protection');
# spent 130µs making 15 calls to XML::Twig::Elt::first_child, avg 9µs/call
9131595µs18071µs my %ignore = map { ("Ignore$_" => !$self->_xml_boolean($xml_fmt->att("apply$_"))) } qw(Font Fill Border Alignment NumberFormat Protection);
# spent 36µs making 90 calls to Spreadsheet::ParseXLSX::_xml_boolean, avg 399ns/call # spent 35µs making 90 calls to XML::Twig::Elt::att, avg 389ns/call
9141540µs my %opts = (%default_format_opts, %ignore,);
915
916158µs155µs $opts{FmtIdx} = 0 + ($xml_fmt->att('numFmtId') || 0);
# spent 5µs making 15 calls to XML::Twig::Elt::att, avg 353ns/call
917158µs155µs $opts{FontNo} = 0 + ($xml_fmt->att('fontId') || 0);
# spent 5µs making 15 calls to XML::Twig::Elt::att, avg 347ns/call
918154µs $opts{Font} = $font[$opts{FontNo}];
919157µs154µs $opts{Fill} = $fills[$xml_fmt->att('fillId') || 0];
# spent 4µs making 15 calls to XML::Twig::Elt::att, avg 293ns/call
920157µs155µs $opts{BdrStyle} = $borders[$xml_fmt->att('borderId') || 0]{styles};
# spent 5µs making 15 calls to XML::Twig::Elt::att, avg 320ns/call
921156µs154µs $opts{BdrColor} = $borders[$xml_fmt->att('borderId') || 0]{colors};
# spent 4µs making 15 calls to XML::Twig::Elt::att, avg 260ns/call
922156µs155µs $opts{BdrDiag} = $borders[$xml_fmt->att('borderId') || 0]{diagonal};
# spent 5µs making 15 calls to XML::Twig::Elt::att, avg 313ns/call
923
924152µs if ($alignment) {
92552µs51µs $opts{AlignH} = $halign{$alignment->att('horizontal') || 'general'};
# spent 1µs making 5 calls to XML::Twig::Elt::att, avg 240ns/call
92654µs103µs $opts{Wrap} = $self->_xml_boolean($alignment->att('wrapText'));
# spent 2µs making 5 calls to Spreadsheet::ParseXLSX::_xml_boolean, avg 360ns/call # spent 1µs making 5 calls to XML::Twig::Elt::att, avg 260ns/call
92753µs52µs $opts{AlignV} = $valign{$alignment->att('vertical') || 'bottom'};
# spent 2µs making 5 calls to XML::Twig::Elt::att, avg 320ns/call
92852µs51µs $opts{Rotate} = $alignment->att('textRotation');
# spent 1µs making 5 calls to XML::Twig::Elt::att, avg 260ns/call
92952µs51µs $opts{Indent} = $alignment->att('indent');
# spent 1µs making 5 calls to XML::Twig::Elt::att, avg 240ns/call
93054µs103µs $opts{Shrink} = $self->_xml_boolean($alignment->att('shrinkToFit'));
# spent 2µs making 5 calls to Spreadsheet::ParseXLSX::_xml_boolean, avg 320ns/call # spent 1µs making 5 calls to XML::Twig::Elt::att, avg 240ns/call
931 # JustLast => $iJustL,
932 }
933
934151µs if ($protection) {
935 $opts{Lock} =
936 defined $protection->att('locked')
937 ? $self->_xml_boolean($protection->att('locked'))
938 : 1;
939 $opts{Hidden} = $self->_xml_boolean($protection->att('hidden'));
940 }
941
942 # Style => $iStyle,
943 # Key123 => $i123,
944 # Merge => $iMerge,
945 # ReadDir => $iReadDir,
9461536µs1544µs Spreadsheet::ParseExcel::Format->new(%opts)
# spent 44µs making 15 calls to Spreadsheet::ParseExcel::Format::new, avg 3µs/call
947 } $styles->find_nodes('//s:cellXfs/s:xf');
948
949 return {
950111µs FormatStr => \%format_str,
951 Font => \@font,
952 Format => \@format,
953 };
954}
955
956
# spent 72.2ms (90µs+72.1) within Spreadsheet::ParseXLSX::_extract_files which was called: # once (90µs+72.1ms) by Spreadsheet::ParseXLSX::_parse_workbook at line 134
sub _extract_files {
9571100ns my $self = shift;
9581200ns my ($zip) = @_;
959
9601200ns my $type_base = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';
961
96211µs24.01ms my $rels = $self->_parse_xml($zip, $self->_rels_for(''),);
# spent 4.00ms making 1 call to Spreadsheet::ParseXLSX::_parse_xml # spent 4µs making 1 call to Spreadsheet::ParseXLSX::_rels_for
96312µs11.72ms my $node = ($rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/officeDocument"]>))[0];
# spent 1.72ms making 1 call to XML::Twig::get_xpath
9641100ns die "invalid workbook" unless $node;
965
96611µs12µs my $wb_name = $node->att('Target');
# spent 2µs making 1 call to XML::Twig::Elt::att
96712µs11µs $wb_name =~ s{^/}{};
# spent 1µs making 1 call to CORE::subst
96811µs12.27ms my $wb_xml = $self->_parse_xml($zip, $wb_name);
# spent 2.27ms making 1 call to Spreadsheet::ParseXLSX::_parse_xml
969
97012µs15µs my $path_base = $self->_base_path_for($wb_name);
# spent 5µs making 1 call to Spreadsheet::ParseXLSX::_base_path_for
97111µs21.08ms my $wb_rels = $self->_parse_xml($zip, $self->_rels_for($wb_name),);
# spent 1.08ms making 1 call to Spreadsheet::ParseXLSX::_parse_xml # spent 4µs making 1 call to Spreadsheet::ParseXLSX::_rels_for
972
973
# spent 16µs (13+3) within Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] which was called 5 times, avg 3µs/call: # once (4µs+700ns) by Spreadsheet::ParseXLSX::_extract_files at line 1004 # once (3µs+1µs) by Spreadsheet::ParseXLSX::_extract_files at line 981 # once (2µs+400ns) by Spreadsheet::ParseXLSX::_extract_files at line 985 # once (2µs+500ns) by Spreadsheet::ParseXLSX::_extract_files at line 1010 # once (2µs+500ns) by Spreadsheet::ParseXLSX::_extract_files at line 983
my $get_path = sub {
97451µs my ($p) = @_;
975
976519µs53µs return $p =~ s{^/}{}
# spent 3µs making 5 calls to CORE::subst, avg 680ns/call
977 ? $p
978 : $path_base . $p;
97911µs };
980
98125µs4600µs my ($strings_xml) = map { $self->_zip_file_member($zip, $get_path->($_->att('Target'))) } $wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/sharedStrings"]>);
# spent 362µs making 1 call to Spreadsheet::ParseXLSX::_zip_file_member # spent 232µs making 1 call to XML::Twig::get_xpath # spent 4µs making 1 call to Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] # spent 1µs making 1 call to XML::Twig::Elt::att
982
98325µs416.6ms my ($styles_xml) = map { $self->_parse_xml($zip, $get_path->($_->att('Target'))) } $wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/styles"]>);
# spent 16.4ms making 1 call to Spreadsheet::ParseXLSX::_parse_xml # spent 218µs making 1 call to XML::Twig::get_xpath # spent 3µs making 1 call to Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] # spent 800ns making 1 call to XML::Twig::Elt::att
984
98527µs517.3ms my %worksheet_xml = map { ($_->att('Id') => $self->_zip_file_member($zip, $get_path->($_->att('Target')))) } $wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/worksheet"]>);
# spent 17.0ms making 1 call to Spreadsheet::ParseXLSX::_zip_file_member # spent 260µs making 1 call to XML::Twig::get_xpath # spent 3µs making 1 call to Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] # spent 2µs making 2 calls to XML::Twig::Elt::att, avg 750ns/call
986
987 # If we have hyperlinks in cells we need the rels file to get the link details
9881300ns my $worksheet_rels_xml;
989
990 # Get each worksheet object
99113µs151µs foreach my $worksheet ($wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/worksheet"]>)) {
# spent 51µs making 1 call to XML::Twig::get_xpath
992 # Split the worksheet xml path so we can
99315µs11µs my @sheetname_parts = split('/', $worksheet->att('Target'));
# spent 1µs making 1 call to XML::Twig::Elt::att
994
995 # Insert _rels before the sheetname, and amend the filename to have .rels on the end
9961500ns my $sheetname = pop(@sheetname_parts);
9971900ns push(@sheetname_parts, '_rels');
9981600ns push(@sheetname_parts, $sheetname . '.rels');
999
1000 # Recreate the file path
100111µs my $rels_name = join('/', @sheetname_parts);
1002
1003 # Check if we have a rels file
100414µs229µs if (my $relfile = $zip->memberNamed($get_path->($rels_name))) {
1005 # Add the XML to our hash for access later on
1006 $worksheet_rels_xml->{$worksheet->att('Id')} = $relfile->contents;
1007 }
1008 }
1009
101027µs528.3ms my %themes_xml = map { $_->att('Id') => $self->_parse_xml($zip, $get_path->($_->att('Target'))) } $wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/theme"]>);
# spent 28.0ms making 1 call to Spreadsheet::ParseXLSX::_parse_xml # spent 253µs making 1 call to XML::Twig::get_xpath # spent 3µs making 1 call to Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:979] # spent 2µs making 2 calls to XML::Twig::Elt::att, avg 750ns/call
1011
1012 return {
1013111µs2169µs workbook => $wb_xml,
# spent 169µs making 2 calls to XML::Twig::DESTROY, avg 85µs/call
1014 sheets => \%worksheet_xml,
1015 themes => \%themes_xml,
1016 (
1017 $styles_xml ? (styles => $styles_xml)
1018 : ()
1019 ),
1020 (
1021 $strings_xml ? (strings => $strings_xml)
1022 : ()
1023 ),
1024 (($worksheet_rels_xml && keys(%$worksheet_rels_xml)) ? (sheets_rels => $worksheet_rels_xml) : ()),
1025 };
1026}
1027
1028
# spent 51.8ms (26µs+51.7) within Spreadsheet::ParseXLSX::_parse_xml which was called 5 times, avg 10.4ms/call: # once (6µs+28.0ms) by Spreadsheet::ParseXLSX::_extract_files at line 1010 # once (5µs+16.4ms) by Spreadsheet::ParseXLSX::_extract_files at line 983 # once (6µs+4.00ms) by Spreadsheet::ParseXLSX::_extract_files at line 962 # once (5µs+2.27ms) by Spreadsheet::ParseXLSX::_extract_files at line 968 # once (4µs+1.08ms) by Spreadsheet::ParseXLSX::_extract_files at line 971
sub _parse_xml {
10295500ns my $self = shift;
103052µs my ($zip, $subfile, $map_xmlns) = @_;
1031
103254µs53.15ms my $xml = $self->_new_twig;
# spent 3.15ms making 5 calls to Spreadsheet::ParseXLSX::_new_twig, avg 630µs/call
103359µs1048.6ms $xml->parse($self->_zip_file_member($zip, $subfile));
# spent 46.4ms making 5 calls to XML::Twig::parse, avg 9.28ms/call # spent 2.20ms making 5 calls to Spreadsheet::ParseXLSX::_zip_file_member, avg 440µs/call
1034
1035510µs return $xml;
1036}
1037
1038
# spent 19.6ms (53µs+19.5) within Spreadsheet::ParseXLSX::_zip_file_member which was called 7 times, avg 2.80ms/call: # 5 times (38µs+2.16ms) by Spreadsheet::ParseXLSX::_parse_xml at line 1033, avg 440µs/call # once (9µs+17.0ms) by Spreadsheet::ParseXLSX::_extract_files at line 985 # once (6µs+356µs) by Spreadsheet::ParseXLSX::_extract_files at line 981
sub _zip_file_member {
103971µs my $self = shift;
104072µs my ($zip, $name) = @_;
1041
10427118µs21393µs my @members = $zip->membersMatching(qr/^$name$/i);
# spent 303µs making 7 calls to Archive::Zip::Archive::membersMatching, avg 43µs/call # spent 82µs making 7 calls to CORE::regcomp, avg 12µs/call # spent 8µs making 7 calls to CORE::qr, avg 1µs/call
104371µs die "no subfile named $name" unless @members;
1044
1045722µs719.1ms return scalar $members[0]->contents;
# spent 19.1ms making 7 calls to Archive::Zip::Member::contents, avg 2.73ms/call
1046}
1047
1048
# spent 7µs within Spreadsheet::ParseXLSX::_rels_for which was called 2 times, avg 4µs/call: # once (4µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 962 # once (4µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 971
sub _rels_for {
10492200ns my $self = shift;
10502300ns my ($file) = @_;
1051
105222µs my @path = split '/', $file;
10532400ns my $name = pop @path;
10542400ns $name = '' unless defined $name;
10552400ns push @path, '_rels';
105621µs push @path, "$name.rels";
1057
105824µs return join '/', @path;
1059}
1060
1061
# spent 5µs within Spreadsheet::ParseXLSX::_base_path_for which was called: # once (5µs+0s) by Spreadsheet::ParseXLSX::_extract_files at line 970
sub _base_path_for {
10621100ns my $self = shift;
10631400ns my ($file) = @_;
1064
106512µs my @path = split '/', $file;
10661300ns pop @path;
1067
106812µs return join('/', @path) . '/';
1069}
1070
1071
# spent 24µs (10+14) within Spreadsheet::ParseXLSX::_dimensions which was called: # once (10µs+14µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:246] at line 238
sub _dimensions {
10721300ns my $self = shift;
10731400ns my ($dim) = @_;
1074
107513µs my ($topleft, $bottomright) = split ':', $dim;
10761300ns $bottomright = $topleft unless defined $bottomright;
1077
107812µs110µs my ($rmin, $cmin) = $self->_cell_to_row_col($topleft);
# spent 10µs making 1 call to Spreadsheet::ParseXLSX::_cell_to_row_col
10791900ns13µs my ($rmax, $cmax) = $self->_cell_to_row_col($bottomright);
# spent 3µs making 1 call to Spreadsheet::ParseXLSX::_cell_to_row_col
1080
108112µs return ($rmin, $cmin, $rmax, $cmax);
1082}
1083
1084sub _is_merged {
1085 my ($self, $sheet, $row, $col) = @_;
1086
1087 return unless $sheet->{MergedArea};
1088
1089 foreach my $area (@{$sheet->{MergedArea}}) {
1090 my ($topRow, $leftCol, $bottomRow, $rightCol) = @$area;
1091
1092 return 1
1093 if $topRow <= $row
1094 && $leftCol <= $col
1095 && $row <= $bottomRow
1096 && $col <= $rightCol;
1097 }
1098
1099 return 0;
1100}
1101
1102
# spent 1.04s (861ms+176ms) within Spreadsheet::ParseXLSX::_cell_to_row_col which was called 239270 times, avg 4µs/call: # 202907 times (746ms+157ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 361, avg 4µs/call # 18180 times (68.0ms+12.2ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] at line 295, avg 4µs/call # 18180 times (46.6ms+6.55ms) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:302] at line 296, avg 3µs/call # once (12µs+2µs) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:338] at line 330 # once (8µs+2µs) by Spreadsheet::ParseXLSX::_dimensions at line 1078 # once (3µs+600ns) by Spreadsheet::ParseXLSX::_dimensions at line 1079
sub _cell_to_row_col {
110323927026.6ms my $self = shift;
110423927040.6ms my ($cell) = @_;
1105
1106239270579ms239270176ms my ($col, $row) = $cell =~ /([A-Z]+)([0-9]+)/;
# spent 176ms making 239270 calls to CORE::match, avg 734ns/call
1107
110823927024.0ms my $ncol = 0;
1109239270104ms for my $char (split //, $col) {
111023927026.3ms $ncol *= 26;
111123927077.4ms $ncol += ord($char) - ord('A') + 1;
1112 }
111323927022.0ms $ncol = $ncol - 1;
1114
111523927044.2ms my $nrow = $row - 1;
1116
1117239270587ms return ($nrow, $ncol);
1118}
1119
1120
# spent 13.4ms within Spreadsheet::ParseXLSX::_xml_boolean which was called 15730 times, avg 851ns/call: # 15608 times (13.3ms+0s) by Spreadsheet::ParseXLSX::__ANON__[lib/Spreadsheet/ParseXLSX.pm:443] at line 354, avg 855ns/call # 90 times (36µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 913, avg 399ns/call # 19 times (9µs+0s) by Spreadsheet::ParseXLSX::_color at line 1131, avg 468ns/call # 5 times (2µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 926, avg 360ns/call # 5 times (2µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 930, avg 320ns/call # 2 times (1µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 827, avg 650ns/call # once (2µs+0s) by Spreadsheet::ParseXLSX::_parse_workbook at line 148
sub _xml_boolean {
1121157302.05ms my $self = shift;
1122157302.83ms my ($bool) = @_;
11231573068.9ms return defined($bool) && ($bool eq 'true' || $bool eq '1');
1124}
1125
1126
# spent 147µs (114+33) within Spreadsheet::ParseXLSX::_color which was called 28 times, avg 5µs/call: # 20 times (85µs+26µs) by Spreadsheet::ParseXLSX::_parse_styles at line 822, avg 6µs/call # 5 times (4µs+0s) by Spreadsheet::ParseXLSX::_parse_styles at line 848, avg 740ns/call # 3 times (25µs+8µs) by Spreadsheet::ParseXLSX::_parse_styles at line 872, avg 11µs/call
sub _color {
1127283µs my $self = shift;
1128285µs my ($colors, $color_node, $fill) = @_;
1129
1130282µs my $color;
11312816µs3814µs if ($color_node && !$self->_xml_boolean($color_node->att('auto'))) {
# spent 9µs making 19 calls to Spreadsheet::ParseXLSX::_xml_boolean, avg 468ns/call # spent 6µs making 19 calls to XML::Twig::Elt::att, avg 289ns/call
11321931µs4915µs if (defined $color_node->att('indexed')) {
# spent 15µs making 49 calls to XML::Twig::Elt::att, avg 314ns/call
1133 # see https://rt.cpan.org/Public/Bug/Display.html?id=93065
1134 if ($fill && $color_node->att('indexed') == 64) {
1135 return '#FFFFFF';
1136 } else {
1137 $color = '#' . Spreadsheet::ParseExcel->ColorIdxToRGB($color_node->att('indexed'));
1138 }
1139 } elsif (defined $color_node->att('rgb')) {
1140 $color = '#' . substr($color_node->att('rgb'), 2, 6);
1141 } elsif (defined $color_node->att('theme')) {
114222µs2900ns my $theme = $colors->[$color_node->att('theme')];
# spent 900ns making 2 calls to XML::Twig::Elt::att, avg 450ns/call
114321µs if (defined $theme) {
1144 $color = "#$theme";
1145 } else {
1146 return;
1147 }
1148 }
1149
1150115µs113µs $color = $self->_apply_tint($color, $color_node->att('tint'))
# spent 3µs making 11 calls to XML::Twig::Elt::att, avg 245ns/call
1151 if $color_node->att('tint');
1152 }
1153
11542016µs return $color;
1155}
1156
1157sub _apply_tint {
1158 my $self = shift;
1159 my ($color, $tint) = @_;
1160
1161 my ($r, $g, $b) = map { oct("0x$_") } $color =~ /#(..)(..)(..)/;
1162 my ($h, $l, $s) = rgb2hls($r, $g, $b);
1163
1164 if ($tint < 0) {
1165 $l = $l * (1.0 + $tint);
1166 } else {
1167 $l = $l * (1.0 - $tint) + (1.0 - 1.0 * (1.0 - $tint));
1168 }
1169
1170 return scalar hls2rgb($h, $l, $s);
1171}
1172
1173
# spent 12.0ms (31µs+12.0) within Spreadsheet::ParseXLSX::_new_twig which was called 7 times, avg 1.71ms/call: # 5 times (22µs+3.13ms) by Spreadsheet::ParseXLSX::_parse_xml at line 1032, avg 630µs/call # once (4µs+4.89ms) by Spreadsheet::ParseXLSX::_parse_sheet at line 445 # once (4µs+3.95ms) by Spreadsheet::ParseXLSX::_parse_shared_strings at line 657
sub _new_twig {
11747800ns my $self = shift;
117572µs my %opts = @_;
1176
1177729µs712.0ms return XML::Twig->new(
# spent 12.0ms making 7 calls to XML::Twig::new, avg 1.71ms/call
1178 map_xmlns => {
1179 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' => 's',
1180 'http://schemas.openxmlformats.org/package/2006/relationships' => 'packagerels',
1181 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' => 'rels',
1182 'http://schemas.openxmlformats.org/drawingml/2006/main' => 'drawmain',
1183 },
1184 no_xxe => 1,
1185 keep_original_prefix => 1,
1186 %opts,
1187 );
1188}
1189
1190=head1 INCOMPATIBILITIES
1191
1192This module returns data using classes from L<Spreadsheet::ParseExcel>, so for
1193the most part, it should just be a drop-in replacement. That said, there are a
1194couple areas where the data returned is intentionally different:
1195
1196=over 4
1197
1198=item Colors
1199
1200In Spreadsheet::ParseExcel, colors are represented by integers which index into
1201the color table, and you have to use
1202C<< Spreadsheet::ParseExcel->ColorIdxToRGB >> in order to get the actual value
1203out. In Spreadsheet::ParseXLSX, while the color table still exists, cells are
1204also allowed to specify their color directly rather than going through the
1205color table. In order to avoid confusion, I normalize all color values in
1206Spreadsheet::ParseXLSX to their string RGB format (C<"#0088ff">). This affects
1207the C<Fill>, C<BdrColor>, and C<BdrDiag> properties of formats, and the
1208C<Color> property of fonts. Note that the default color is represented by
1209C<undef> (the same thing that C<ColorIdxToRGB> would return).
1210
1211=item Formulas
1212
1213Spreadsheet::ParseExcel doesn't support formulas. Spreadsheet::ParseXLSX
1214provides basic formula support by returning the text of the formula as part of
1215the cell data. You can access it via C<< $cell->{Formula} >>. Note that the
1216restriction still holds that formula cell values aren't available unless they
1217were explicitly provided when the spreadsheet was written.
1218
1219=back
1220
1221=head1 BUGS
1222
1223=over 4
1224
1225=item Large spreadsheets may cause segfaults on perl 5.14 and earlier
1226
1227This module internally uses XML::Twig, which makes it potentially subject to
1228L<Bug #71636 for XML-Twig: Segfault with medium-sized document|https://rt.cpan.org/Public/Bug/Display.html?id=71636>
1229on perl versions 5.14 and below (the underlying bug with perl weak references
1230was fixed in perl 5.15.5). The larger and more complex the spreadsheet, the
1231more likely to be affected, but the actual size at which it segfaults is
1232platform dependent. On a 64-bit perl with 7.6gb memory, it was seen on
1233spreadsheets about 300mb and above. You can work around this adding
1234C<XML::Twig::_set_weakrefs(0)> to your code before parsing the spreadsheet,
1235although this may have other consequences such as memory leaks.
1236
1237=item Worksheets without the C<dimension> tag are not supported
1238
1239=item Intra-cell formatting is discarded
1240
1241=item Shared formulas are not supported
1242
1243Shared formula support will require an actual formula parser and quite a bit of
1244custom logic, since the only thing stored in the document is the formula for
1245the base cell - updating the cell references in the formulas in the rest of the
1246cells is handled by the application. Values for these cells are still handled
1247properly.
1248
1249=back
1250
1251In addition, there are still a few areas which are not yet implemented (the
1252XLSX spec is quite large). If you run into any of those, bug reports are quite
1253welcome.
1254
1255Please report any bugs to GitHub Issues at
1256L<https://github.com/MichaelDaum/spreadsheet-parsexlsx/issues>.
1257
1258=head1 SEE ALSO
1259
1260L<Spreadsheet::ParseExcel>: The equivalent, for XLS files.
1261
1262L<Spreadsheet::XLSX>: An older, less robust and featureful implementation.
1263
1264=head1 SUPPORT
1265
1266You can find this documentation for this module with the perldoc command.
1267
1268 perldoc Spreadsheet::ParseXLSX
1269
1270You can also look for information at:
1271
1272=over 4
1273
1274=item * MetaCPAN
1275
1276L<https://metacpan.org/release/Spreadsheet-ParseXLSX>
1277
1278=item * RT: CPAN's request tracker
1279
1280L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Spreadsheet-ParseXLSX>
1281
1282=item * Github
1283
1284L<https://github.com/MichaelDaum/spreadsheet-parsexlsx>
1285
1286=item * CPAN Ratings
1287
1288L<http://cpanratings.perl.org/d/Spreadsheet-ParseXLSX>
1289
1290=back
1291
1292=head1 SPONSORS
1293
1294Parts of this code were paid for by
1295
1296=over 4
1297
1298=item Socialflow L<http://socialflow.com>
1299
1300=back
1301
1302=cut
1303
130412µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/URI-Escape-pm-174-line.html0000644000175000017500000015152314576335353022544 0ustar michamicha Profile of URI/Escape.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/URI/Escape.pm
StatementsExecuted 274 statements in 707µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs10µsURI::Escape::::BEGIN@3URI::Escape::BEGIN@3
1118µs19µsURI::Escape::::BEGIN@147URI::Escape::BEGIN@147
1115µs18µsURI::Escape::::BEGIN@191URI::Escape::BEGIN@191
1113µs18µsURI::Escape::::BEGIN@4URI::Escape::BEGIN@4
1112µs2µsURI::Escape::::BEGIN@153URI::Escape::BEGIN@153
0000s0sURI::Escape::::_fail_hiURI::Escape::_fail_hi
0000s0sURI::Escape::::escape_charURI::Escape::escape_char
0000s0sURI::Escape::::uri_escapeURI::Escape::uri_escape
0000s0sURI::Escape::::uri_escape_utf8URI::Escape::uri_escape_utf8
0000s0sURI::Escape::::uri_unescapeURI::Escape::uri_unescape
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package URI::Escape;
2
3223µs211µs
# spent 10µs (9+1) within URI::Escape::BEGIN@3 which was called: # once (9µs+1µs) by URI::BEGIN@41 at line 3
use strict;
# spent 10µs making 1 call to URI::Escape::BEGIN@3 # spent 1µs making 1 call to strict::import
4253µs233µs
# spent 18µs (3+15) within URI::Escape::BEGIN@4 which was called: # once (3µs+15µs) by URI::BEGIN@41 at line 4
use warnings;
# spent 18µs making 1 call to URI::Escape::BEGIN@4 # spent 15µs making 1 call to warnings::import
5
6=head1 NAME
7
8URI::Escape - Percent-encode and percent-decode unsafe characters
9
10=head1 SYNOPSIS
11
12 use URI::Escape;
13 $safe = uri_escape("10% is enough\n");
14 $verysafe = uri_escape("foo", "\0-\377");
15 $str = uri_unescape($safe);
16
17=head1 DESCRIPTION
18
19This module provides functions to percent-encode and percent-decode URI strings as
20defined by RFC 3986. Percent-encoding URI's is informally called "URI escaping".
21This is the terminology used by this module, which predates the formalization of the
22terms by the RFC by several years.
23
24A URI consists of a restricted set of characters. The restricted set
25of characters consists of digits, letters, and a few graphic symbols
26chosen from those common to most of the character encodings and input
27facilities available to Internet users. They are made up of the
28"unreserved" and "reserved" character sets as defined in RFC 3986.
29
30 unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
31 reserved = ":" / "/" / "?" / "#" / "[" / "]" / "@"
32 "!" / "$" / "&" / "'" / "(" / ")"
33 / "*" / "+" / "," / ";" / "="
34
35In addition, any byte (octet) can be represented in a URI by an escape
36sequence: a triplet consisting of the character "%" followed by two
37hexadecimal digits. A byte can also be represented directly by a
38character, using the US-ASCII character for that octet.
39
40Some of the characters are I<reserved> for use as delimiters or as
41part of certain URI components. These must be escaped if they are to
42be treated as ordinary data. Read RFC 3986 for further details.
43
44The functions provided (and exported by default) from this module are:
45
46=over 4
47
48=item uri_escape( $string )
49
50=item uri_escape( $string, $unsafe )
51
52Replaces each unsafe character in the $string with the corresponding
53escape sequence and returns the result. The $string argument should
54be a string of bytes. The uri_escape() function will croak if given a
55characters with code above 255. Use uri_escape_utf8() if you know you
56have such chars or/and want chars in the 128 .. 255 range treated as
57UTF-8.
58
59The uri_escape() function takes an optional second argument that
60overrides the set of characters that are to be escaped. The set is
61specified as a string that can be used in a regular expression
62character class (between [ ]). E.g.:
63
64 "\x00-\x1f\x7f-\xff" # all control and hi-bit characters
65 "a-z" # all lower case characters
66 "^A-Za-z" # everything not a letter
67
68The default set of characters to be escaped is all those which are
69I<not> part of the C<unreserved> character class shown above as well
70as the reserved characters. I.e. the default is:
71
72 "^A-Za-z0-9\-\._~"
73
74The second argument can also be specified as a regular expression object:
75
76 qr/[^A-Za-z]/
77
78Any strings matched by this regular expression will have all of their
79characters escaped.
80
81=item uri_escape_utf8( $string )
82
83=item uri_escape_utf8( $string, $unsafe )
84
85Works like uri_escape(), but will encode chars as UTF-8 before
86escaping them. This makes this function able to deal with characters
87with code above 255 in $string. Note that chars in the 128 .. 255
88range will be escaped differently by this function compared to what
89uri_escape() would. For chars in the 0 .. 127 range there is no
90difference.
91
92Equivalent to:
93
94 utf8::encode($string);
95 my $uri = uri_escape($string);
96
97Note: JavaScript has a function called escape() that produces the
98sequence "%uXXXX" for chars in the 256 .. 65535 range. This function
99has really nothing to do with URI escaping but some folks got confused
100since it "does the right thing" in the 0 .. 255 range. Because of
101this you sometimes see "URIs" with these kind of escapes. The
102JavaScript encodeURIComponent() function is similar to uri_escape_utf8().
103
104=item uri_unescape($string,...)
105
106Returns a string with each %XX sequence replaced with the actual byte
107(octet).
108
109This does the same as:
110
111 $string =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
112
113but does not modify the string in-place as this RE would. Using the
114uri_unescape() function instead of the RE might make the code look
115cleaner and is a few characters less to type.
116
117In a simple benchmark test I did,
118calling the function (instead of the inline RE above) if a few chars
119were unescaped was something like 40% slower, and something like 700% slower if none were. If
120you are going to unescape a lot of times it might be a good idea to
121inline the RE.
122
123If the uri_unescape() function is passed multiple strings, then each
124one is returned unescaped.
125
126=back
127
128The module can also export the C<%escapes> hash, which contains the
129mapping from all 256 bytes to the corresponding escape codes. Lookup
130in this hash is faster than evaluating C<sprintf("%%%02X", ord($byte))>
131each time.
132
133=head1 SEE ALSO
134
135L<URI>
136
137
138=head1 COPYRIGHT
139
140Copyright 1995-2004 Gisle Aas.
141
142This program is free software; you can redistribute it and/or modify
143it under the same terms as Perl itself.
144
145=cut
146
147348µs329µs
# spent 19µs (8+10) within URI::Escape::BEGIN@147 which was called: # once (8µs+10µs) by URI::BEGIN@41 at line 147
use Exporter 5.57 'import';
# spent 19µs making 1 call to URI::Escape::BEGIN@147 # spent 6µs making 1 call to UNIVERSAL::VERSION # spent 4µs making 1 call to Exporter::import
148our %escapes;
14911µsour @EXPORT = qw(uri_escape uri_unescape uri_escape_utf8);
1501200nsour @EXPORT_OK = qw(%escapes);
1511200nsour $VERSION = '5.27';
152
1532211µs12µs
# spent 2µs within URI::Escape::BEGIN@153 which was called: # once (2µs+0s) by URI::BEGIN@41 at line 153
use Carp ();
# spent 2µs making 1 call to URI::Escape::BEGIN@153
154
155# Build a char->hex map
1561800nsfor (0..255) {
157256128µs $escapes{chr($_)} = sprintf("%%%02X", $_);
158}
159
1601200nsmy %subst; # compiled patterns
161
162111µs26µsmy %Unsafe = (
# spent 6µs making 2 calls to CORE::qr, avg 3µs/call
163 RFC2732 => qr/[^A-Za-z0-9\-_.!~*'()]/,
164 RFC3986 => qr/[^A-Za-z0-9\-\._~]/,
165);
166
167sub uri_escape {
168 my($text, $patn) = @_;
169 return undef unless defined $text;
170 my $re;
171 if (defined $patn){
172 if (ref $patn eq 'Regexp') {
173 $text =~ s{($patn)}{
174 join('', map +($escapes{$_} || _fail_hi($_)), split //, "$1")
175 }ge;
176 return $text;
177 }
178 $re = $subst{$patn};
179 if (!defined $re) {
180 $re = $patn;
181 # we need to escape the [] characters, except for those used in
182 # posix classes. if they are prefixed by a backslash, allow them
183 # through unmodified.
184 $re =~ s{(\[:\w+:\])|(\\)?([\[\]]|\\\z)}{
185 defined $1 ? $1 : defined $2 ? "$2$3" : "\\$3"
186 }ge;
187 eval {
188 # disable the warnings here, since they will trigger later
189 # when used, and we only want them to appear once per call,
190 # but every time the same pattern is used.
1912225µs230µs
# spent 18µs (5+13) within URI::Escape::BEGIN@191 which was called: # once (5µs+13µs) by URI::BEGIN@41 at line 191
no warnings 'regexp';
# spent 18µs making 1 call to URI::Escape::BEGIN@191 # spent 13µs making 1 call to warnings::unimport
192 $re = $subst{$patn} = qr{[$re]};
193 1;
194 } or Carp::croak("uri_escape: $@");
195 }
196 }
197 else {
198 $re = $Unsafe{RFC3986};
199 }
200 $text =~ s/($re)/$escapes{$1} || _fail_hi($1)/ge;
201 $text;
202}
203
204sub _fail_hi {
205 my $chr = shift;
206 Carp::croak(sprintf "Can't escape \\x{%04X}, try uri_escape_utf8() instead", ord($chr));
207}
208
209sub uri_escape_utf8 {
210 my $text = shift;
211 return undef unless defined $text;
212 utf8::encode($text);
213 return uri_escape($text, @_);
214}
215
216sub uri_unescape {
217 # Note from RFC1630: "Sequences which start with a percent sign
218 # but are not followed by two hexadecimal characters are reserved
219 # for future extension"
220 my $str = shift;
221 if (@_ && wantarray) {
222 # not executed for the common case of a single argument
223 my @str = ($str, @_); # need to copy
224 for (@str) {
225 s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
226 }
227 return @str;
228 }
229 $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg if defined $str;
230 $str;
231}
232
233# XXX FIXME escape_char is buggy as it assigns meaning to the string's storage format.
234sub escape_char {
235 # Old versions of utf8::is_utf8() didn't properly handle magical vars (e.g. $1).
236 # The following forces a fetch to occur beforehand.
237 my $dummy = substr($_[0], 0, 0);
238
239 if (utf8::is_utf8($_[0])) {
240 my $s = shift;
241 utf8::encode($s);
242 unshift(@_, $s);
243 }
244
245 return join '', @URI::Escape::escapes{split //, $_[0]};
246}
247
24815µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Digest-base-pm-166-line.html0000644000175000017500000006324214576335353023037 0ustar michamicha Profile of Digest/base.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Digest/base.pm
StatementsExecuted 6 statements in 246µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs12µsDigest::base::::BEGIN@3Digest::base::BEGIN@3
1114µs20µsDigest::base::::BEGIN@4Digest::base::BEGIN@4
0000s0sDigest::base::::add_bitsDigest::base::add_bits
0000s0sDigest::base::::addfileDigest::base::addfile
0000s0sDigest::base::::b64digestDigest::base::b64digest
0000s0sDigest::base::::base64_padded_digestDigest::base::base64_padded_digest
0000s0sDigest::base::::hexdigestDigest::base::hexdigest
0000s0sDigest::base::::resetDigest::base::reset
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Digest::base;
2
3220µs213µs
# spent 12µs (10+1) within Digest::base::BEGIN@3 which was called: # once (10µs+1µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 3
use strict;
# spent 12µs making 1 call to Digest::base::BEGIN@3 # spent 2µs making 1 call to strict::import
42223µs236µs
# spent 20µs (4+16) within Digest::base::BEGIN@4 which was called: # once (4µs+16µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 4
use warnings;
# spent 20µs making 1 call to Digest::base::BEGIN@4 # spent 16µs making 1 call to warnings::import
5
61300nsour $VERSION = "1.20";
7
8# subclass is supposed to implement at least these
9sub new;
10sub clone;
11sub add;
12sub digest;
13
14sub reset {
15 my $self = shift;
16 $self->new(@_); # ugly
17}
18
19sub addfile {
20 my ( $self, $handle ) = @_;
21
22 my $n;
23 my $buf = "";
24
25 while ( ( $n = read( $handle, $buf, 4 * 1024 ) ) ) {
26 $self->add($buf);
27 }
28 unless ( defined $n ) {
29 require Carp;
30 Carp::croak("Read failed: $!");
31 }
32
33 $self;
34}
35
36sub add_bits {
37 my $self = shift;
38 my $bits;
39 my $nbits;
40 if ( @_ == 1 ) {
41 my $arg = shift;
42 $bits = pack( "B*", $arg );
43 $nbits = length($arg);
44 }
45 else {
46 ( $bits, $nbits ) = @_;
47 }
48 if ( ( $nbits % 8 ) != 0 ) {
49 require Carp;
50 Carp::croak("Number of bits must be multiple of 8 for this algorithm");
51 }
52 return $self->add( substr( $bits, 0, $nbits / 8 ) );
53}
54
55sub hexdigest {
56 my $self = shift;
57 return unpack( "H*", $self->digest(@_) );
58}
59
60sub b64digest {
61 my $self = shift;
62 my $b64 = $self->base64_padded_digest;
63 $b64 =~ s/=+$//;
64 return $b64;
65}
66
67sub base64_padded_digest {
68 my $self = shift;
69 require MIME::Base64;
70 return MIME::Base64::encode( $self->digest(@_), "" );
71}
72
7312µs1;
74
75__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 128)[XML-Twig-pm-5871]-245-line.html0000644000175000017500000004101114576335353024422 0ustar michamicha Profile of (eval 128)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 128)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 127279 statements in 627ms
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
12727611299ms364msXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1115µs15µsXML::Twig::Elt::::BEGIN@1.72XML::Twig::Elt::BEGIN@1.72
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1127279627ms12727864.5ms
# spent 364ms (299+64.5) within XML::Twig::Elt::__ANON__[(eval 128)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 127276 times, avg 3µs/call: # 127276 times (299ms+64.5ms) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 3µs/call # spent 15µs (5+9) within XML::Twig::Elt::BEGIN@1.72 which was called: # once (5µs+9µs) by XML::Twig::Elt::_install_cond at line 1
sub { no warnings; ; return ( $_[0]->gi eq "s:f") ? $_[0] : undef; }
# spent 64.5ms making 127276 calls to XML::Twig::Elt::gi, avg 507ns/call # spent 15µs making 1 call to XML::Twig::Elt::BEGIN@1.72 # spent 9µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 54)[JSON-PP-pm-692]-162-line.html0000644000175000017500000003205614576335353024001 0ustar michamicha Profile of (eval 54)[JSON/PP.pm:692]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 54)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm:692]
StatementsExecuted 1 statements in 500ns
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm line 692
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Line State
ments
Time
on line
Calls Time
in subs
Code
11500ns 11111111111111111111
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Ok-pm-40-line.html0000644000175000017500000007525114576335353023251 0ustar michamicha Profile of Test2/Event/Ok.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Ok.pm
StatementsExecuted 13 statements in 424µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.23ms4.67msTest2::Event::Ok::::BEGIN@8Test2::Event::Ok::BEGIN@8
11115µs17µsTest2::Event::Ok::::BEGIN@2Test2::Event::Ok::BEGIN@2
1115µs64µsTest2::Event::Ok::::BEGIN@9Test2::Event::Ok::BEGIN@9
1115µs19µsTest2::Event::Ok::::BEGIN@22Test2::Event::Ok::BEGIN@22
1115µs22µsTest2::Event::Ok::::BEGIN@3Test2::Event::Ok::BEGIN@3
0000s0sTest2::Event::Ok::::causes_failTest2::Event::Ok::causes_fail
0000s0sTest2::Event::Ok::::extra_amnestyTest2::Event::Ok::extra_amnesty
0000s0sTest2::Event::Ok::::facet_dataTest2::Event::Ok::facet_data
0000s0sTest2::Event::Ok::::increments_countTest2::Event::Ok::increments_count
0000s0sTest2::Event::Ok::::initTest2::Event::Ok::init
0000s0sTest2::Event::Ok::::set_todoTest2::Event::Ok::set_todo
0000s0sTest2::Event::Ok::::summaryTest2::Event::Ok::summary
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Ok;
2223µs219µs
# spent 17µs (15+2) within Test2::Event::Ok::BEGIN@2 which was called: # once (15µs+2µs) by Test2::API::BEGIN@92 at line 2
use strict;
# spent 17µs making 1 call to Test2::Event::Ok::BEGIN@2 # spent 2µs making 1 call to strict::import
3237µs240µs
# spent 22µs (5+18) within Test2::Event::Ok::BEGIN@3 which was called: # once (5µs+18µs) by Test2::API::BEGIN@92 at line 3
use warnings;
# spent 22µs making 1 call to Test2::Event::Ok::BEGIN@3 # spent 18µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
82102µs14.67ms
# spent 4.67ms (1.23+3.45) within Test2::Event::Ok::BEGIN@8 which was called: # once (1.23ms+3.45ms) by Test2::API::BEGIN@92 at line 8
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 4.67ms making 1 call to Test2::Event::Ok::BEGIN@8
912µs159µs
# spent 64µs (5+59) within Test2::Event::Ok::BEGIN@9 which was called: # once (5µs+59µs) by Test2::API::BEGIN@92 at line 11
use Test2::Util::HashBase qw{
# spent 59µs making 1 call to Test2::Util::HashBase::import
10 pass effective_pass name todo
11155µs164µs};
# spent 64µs making 1 call to Test2::Event::Ok::BEGIN@9
12
13sub init {
14 my $self = shift;
15
16 # Do not store objects here, only true or false
17 $self->{+PASS} = $self->{+PASS} ? 1 : 0;
18 $self->{+EFFECTIVE_PASS} = $self->{+PASS} || (defined($self->{+TODO}) ? 1 : 0);
19}
20
21{
222202µs233µs
# spent 19µs (5+14) within Test2::Event::Ok::BEGIN@22 which was called: # once (5µs+14µs) by Test2::API::BEGIN@92 at line 22
no warnings 'redefine';
# spent 19µs making 1 call to Test2::Event::Ok::BEGIN@22 # spent 14µs making 1 call to warnings::unimport
23 sub set_todo {
24 my $self = shift;
25 my ($todo) = @_;
26 $self->{+TODO} = $todo;
27 $self->{+EFFECTIVE_PASS} = defined($todo) ? 1 : $self->{+PASS};
28 }
29}
30
311400nssub increments_count { 1 };
32
33sub causes_fail { !$_[0]->{+EFFECTIVE_PASS} }
34
35sub summary {
36 my $self = shift;
37
38 my $name = $self->{+NAME} || "Nameless Assertion";
39
40 my $todo = $self->{+TODO};
41 if ($todo) {
42 $name .= " (TODO: $todo)";
43 }
44 elsif (defined $todo) {
45 $name .= " (TODO)"
46 }
47
48 return $name;
49}
50
51sub extra_amnesty {
52 my $self = shift;
53 return unless defined($self->{+TODO}) || ($self->{+EFFECTIVE_PASS} && !$self->{+PASS});
54 return {
55 tag => 'TODO',
56 details => $self->{+TODO},
57 };
58}
59
60sub facet_data {
61 my $self = shift;
62
63 my $out = $self->common_facet_data;
64
65 $out->{assert} = {
66 no_debug => 1, # Legacy behavior
67 pass => $self->{+PASS},
68 details => $self->{+NAME},
69 };
70
71 if (my @exra_amnesty = $self->extra_amnesty) {
72 my %seen;
73
74 # It is possible the extra amnesty can be a duplicate, so filter it.
75 $out->{amnesty} = [
76 grep { !$seen{defined($_->{tag}) ? $_->{tag} : ''}->{defined($_->{details}) ? $_->{details} : ''}++ }
77 @exra_amnesty,
78 @{$out->{amnesty}},
79 ];
80 }
81
82 return $out;
83}
84
8512µs1;
86
87__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Hub-pm-52-line.html0000644000175000017500000004647014576335353024365 0ustar michamicha Profile of Test2/EventFacet/Hub.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Hub.pm
StatementsExecuted 10 statements in 113µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsTest2::EventFacet::Hub::::BEGIN@2Test2::EventFacet::Hub::BEGIN@2
1119µs9µsTest2::EventFacet::Hub::::BEGIN@10Test2::EventFacet::Hub::BEGIN@10
1115µs96µsTest2::EventFacet::Hub::::BEGIN@11Test2::EventFacet::Hub::BEGIN@11
1113µs20µsTest2::EventFacet::Hub::::BEGIN@3Test2::EventFacet::Hub::BEGIN@3
0000s0sTest2::EventFacet::Hub::::facet_keyTest2::EventFacet::Hub::facet_key
0000s0sTest2::EventFacet::Hub::::is_listTest2::EventFacet::Hub::is_list
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Hub;
2223µs213µs
# spent 11µs (9+2) within Test2::EventFacet::Hub::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Event::BEGIN@24 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::Hub::BEGIN@2 # spent 2µs making 1 call to strict::import
3245µs237µs
# spent 20µs (3+17) within Test2::EventFacet::Hub::BEGIN@3 which was called: # once (3µs+17µs) by Test2::Event::BEGIN@24 at line 3
use warnings;
# spent 20µs making 1 call to Test2::EventFacet::Hub::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7sub is_list { 1 }
8sub facet_key { 'hubs' }
9
10225µs19µs
# spent 9µs within Test2::EventFacet::Hub::BEGIN@10 which was called: # once (9µs+0s) by Test2::Event::BEGIN@24 at line 10
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 9µs making 1 call to Test2::EventFacet::Hub::BEGIN@10
11218µs2187µs
# spent 96µs (5+91) within Test2::EventFacet::Hub::BEGIN@11 which was called: # once (5µs+91µs) by Test2::Event::BEGIN@24 at line 11
use Test2::Util::HashBase qw{-pid -tid -hid -nested -buffered -uuid -ipc};
# spent 96µs making 1 call to Test2::EventFacet::Hub::BEGIN@11 # spent 91µs making 1 call to Test2::Util::HashBase::import
12
1312µs1;
14
15__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-NewFileMember-pm-115-line.html0000644000175000017500000007117214576335353025503 0ustar michamicha Profile of Archive/Zip/NewFileMember.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip/NewFileMember.pm
StatementsExecuted 9 statements in 287µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs11µsArchive::Zip::NewFileMember::::BEGIN@6Archive::Zip::NewFileMember::BEGIN@6
11110µs12µsArchive::Zip::NewFileMember::::BEGIN@3Archive::Zip::NewFileMember::BEGIN@3
1114µs122µsArchive::Zip::NewFileMember::::BEGIN@11Archive::Zip::NewFileMember::BEGIN@11
1114µs21µsArchive::Zip::NewFileMember::::BEGIN@4Archive::Zip::NewFileMember::BEGIN@4
0000s0sArchive::Zip::NewFileMember::::_newFromFileNamedArchive::Zip::NewFileMember::_newFromFileNamed
0000s0sArchive::Zip::NewFileMember::::_readRawChunkArchive::Zip::NewFileMember::_readRawChunk
0000s0sArchive::Zip::NewFileMember::::extractToFileNamedArchive::Zip::NewFileMember::extractToFileNamed
0000s0sArchive::Zip::NewFileMember::::rewindDataArchive::Zip::NewFileMember::rewindData
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip::NewFileMember;
2
3222µs213µs
# spent 12µs (10+2) within Archive::Zip::NewFileMember::BEGIN@3 which was called: # once (10µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 3
use strict;
# spent 12µs making 1 call to Archive::Zip::NewFileMember::BEGIN@3 # spent 2µs making 1 call to strict::import
4224µs239µs
# spent 21µs (4+18) within Archive::Zip::NewFileMember::BEGIN@4 which was called: # once (4µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 4
use vars qw( $VERSION @ISA );
# spent 21µs making 1 call to Archive::Zip::NewFileMember::BEGIN@4 # spent 18µs making 1 call to vars::import
5
6
# spent 11µs within Archive::Zip::NewFileMember::BEGIN@6 which was called: # once (11µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 9
BEGIN {
71200ns $VERSION = '1.68';
8111µs @ISA = qw ( Archive::Zip::FileMember );
9116µs111µs}
# spent 11µs making 1 call to Archive::Zip::NewFileMember::BEGIN@6
10
1112µs1118µs
# spent 122µs (4+118) within Archive::Zip::NewFileMember::BEGIN@11 which was called: # once (4µs+118µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 15
use Archive::Zip qw(
# spent 118µs making 1 call to Exporter::import
12 :CONSTANTS
13 :ERROR_CODES
14 :UTILITY_METHODS
151210µs1122µs);
# spent 122µs making 1 call to Archive::Zip::NewFileMember::BEGIN@11
16
17# Given a file name, set up for eventual writing.
18sub _newFromFileNamed {
19 my $class = shift;
20 my $fileName = shift; # local FS format
21 my $newName = shift;
22 $newName = _asZipDirName($fileName) unless defined($newName);
23 return undef unless (stat($fileName) && -r _ && !-d _ );
24 my $self = $class->new(@_);
25 $self->{'fileName'} = $newName;
26 $self->{'externalFileName'} = $fileName;
27 $self->{'compressionMethod'} = COMPRESSION_STORED;
28 my @stat = stat(_);
29 $self->{'compressedSize'} = $self->{'uncompressedSize'} = $stat[7];
30 $self->desiredCompressionMethod(
31 ($self->compressedSize() > 0)
32 ? COMPRESSION_DEFLATED
33 : COMPRESSION_STORED
34 );
35 $self->unixFileAttributes($stat[2]);
36 $self->setLastModFileDateTimeFromUnix($stat[9]);
37 $self->isTextFile(-T _ );
38 return $self;
39}
40
41sub rewindData {
42 my $self = shift;
43
44 my $status = $self->SUPER::rewindData(@_);
45 return $status unless $status == AZ_OK;
46
47 return AZ_IO_ERROR unless $self->fh();
48 $self->fh()->clearerr();
49 $self->fh()->seek(0, IO::Seekable::SEEK_SET)
50 or return _ioError("rewinding", $self->externalFileName());
51 return AZ_OK;
52}
53
54# Return bytes read. Note that first parameter is a ref to a buffer.
55# my $data;
56# my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize );
57sub _readRawChunk {
58 my ($self, $dataRef, $chunkSize) = @_;
59 return (0, AZ_OK) unless $chunkSize;
60 my $bytesRead = $self->fh()->read($$dataRef, $chunkSize)
61 or return (0, _ioError("reading data"));
62 return ($bytesRead, AZ_OK);
63}
64
65# If I already exist, extraction is a no-op.
66sub extractToFileNamed {
67 my $self = shift;
68 my $name = shift; # local FS name
69 if (File::Spec->rel2abs($name) eq
70 File::Spec->rel2abs($self->externalFileName()) and -r $name) {
71 return AZ_OK;
72 } else {
73 return $self->SUPER::extractToFileNamed($name, @_);
74 }
75}
76
7712µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-Workbook-pm-122-line.html0000644000175000017500000013234614576335353026775 0ustar michamicha Profile of Spreadsheet/ParseExcel/Workbook.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel/Workbook.pm
StatementsExecuted 13 statements in 336µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsSpreadsheet::ParseExcel::Workbook::::BEGIN@19Spreadsheet::ParseExcel::Workbook::BEGIN@19
1115µs18µsSpreadsheet::ParseExcel::Workbook::::BEGIN@189Spreadsheet::ParseExcel::Workbook::BEGIN@189
1114µs21µsSpreadsheet::ParseExcel::Workbook::::BEGIN@20Spreadsheet::ParseExcel::Workbook::BEGIN@20
1112µs2µsSpreadsheet::ParseExcel::Workbook::::newSpreadsheet::ParseExcel::Workbook::new
0000s0sSpreadsheet::ParseExcel::Workbook::::ParseSpreadsheet::ParseExcel::Workbook::Parse
0000s0sSpreadsheet::ParseExcel::Workbook::::ParseAbortSpreadsheet::ParseExcel::Workbook::ParseAbort
0000s0sSpreadsheet::ParseExcel::Workbook::::color_idx_to_rgbSpreadsheet::ParseExcel::Workbook::color_idx_to_rgb
0000s0sSpreadsheet::ParseExcel::Workbook::::get_active_sheetSpreadsheet::ParseExcel::Workbook::get_active_sheet
0000s0sSpreadsheet::ParseExcel::Workbook::::get_filenameSpreadsheet::ParseExcel::Workbook::get_filename
0000s0sSpreadsheet::ParseExcel::Workbook::::get_print_areasSpreadsheet::ParseExcel::Workbook::get_print_areas
0000s0sSpreadsheet::ParseExcel::Workbook::::get_print_titlesSpreadsheet::ParseExcel::Workbook::get_print_titles
0000s0sSpreadsheet::ParseExcel::Workbook::::using_1904_dateSpreadsheet::ParseExcel::Workbook::using_1904_date
0000s0sSpreadsheet::ParseExcel::Workbook::::worksheetSpreadsheet::ParseExcel::Workbook::worksheet
0000s0sSpreadsheet::ParseExcel::Workbook::::worksheet_countSpreadsheet::ParseExcel::Workbook::worksheet_count
0000s0sSpreadsheet::ParseExcel::Workbook::::worksheetsSpreadsheet::ParseExcel::Workbook::worksheets
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel::Workbook;
2
3###############################################################################
4#
5# Spreadsheet::ParseExcel::Workbook - A class for Workbooks.
6#
7# Used in conjunction with Spreadsheet::ParseExcel.
8#
9# Copyright (c) 2014 Douglas Wilson
10# Copyright (c) 2009-2013 John McNamara
11# Copyright (c) 2006-2008 Gabor Szabo
12# Copyright (c) 2000-2006 Kawai Takanori
13#
14# perltidy with standard settings.
15#
16# Documentation after __END__
17#
18
19219µs213µs
# spent 11µs (10+2) within Spreadsheet::ParseExcel::Workbook::BEGIN@19 which was called: # once (10µs+2µs) by Spreadsheet::ParseExcel::BEGIN@31 at line 19
use strict;
# spent 11µs making 1 call to Spreadsheet::ParseExcel::Workbook::BEGIN@19 # spent 2µs making 1 call to strict::import
202284µs237µs
# spent 21µs (4+17) within Spreadsheet::ParseExcel::Workbook::BEGIN@20 which was called: # once (4µs+17µs) by Spreadsheet::ParseExcel::BEGIN@31 at line 20
use warnings;
# spent 21µs making 1 call to Spreadsheet::ParseExcel::Workbook::BEGIN@20 # spent 17µs making 1 call to warnings::import
21
221300nsour $VERSION = '0.66';
23
24###############################################################################
25#
26# new()
27#
28# Constructor.
29#
30
# spent 2µs within Spreadsheet::ParseExcel::Workbook::new which was called: # once (2µs+0s) by Spreadsheet::ParseXLSX::parse at line 76 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
sub new {
311600ns my ($class) = @_;
321400ns my $self = {};
3312µs bless $self, $class;
34}
35
36###############################################################################
37sub color_idx_to_rgb {
38 my( $workbook, $iidx ) = @_;
39
40 my $palette = $workbook->{aColor};
41 return ( ( defined $palette->[$iidx] ) ? $palette->[$iidx] : $palette->[0] );
42}
43
44###############################################################################
45#
46# worksheet()
47#
48# This method returns a single Worksheet object using either its name or index.
49#
50sub worksheet {
51 my ( $oBook, $sName ) = @_;
52 my $oWkS;
53 foreach $oWkS ( @{ $oBook->{Worksheet} } ) {
54 return $oWkS if ( $oWkS->{Name} eq $sName );
55 }
56 if ( $sName =~ /^\d+$/ ) {
57 return $oBook->{Worksheet}->[$sName];
58 }
59 return undef;
60}
61
62###############################################################################
63#
64# worksheets()
65#
66# Returns an array of Worksheet objects.
67#
68sub worksheets {
69 my $self = shift;
70
71 return @{ $self->{Worksheet} };
72}
73
74###############################################################################
75#
76# worksheet_count()
77#
78# Returns the number Woksheet objects in the Workbook.
79#
80sub worksheet_count {
81
82 my $self = shift;
83
84 return $self->{SheetCount};
85}
86
87###############################################################################
88#
89# get_filename()
90#
91# Returns the name of the Excel file of C<undef> if the data was read from a filehandle rather than a file.
92#
93sub get_filename {
94
95 my $self = shift;
96
97 return $self->{File};
98}
99
100###############################################################################
101#
102# get_print_areas()
103#
104# Returns an array ref of print areas.
105#
106# TODO. This should really be a Worksheet method.
107#
108sub get_print_areas {
109
110 my $self = shift;
111
112 return $self->{PrintArea};
113}
114
115###############################################################################
116#
117# get_print_titles()
118#
119# Returns an array ref of print title hash refs.
120#
121# TODO. This should really be a Worksheet method.
122#
123sub get_print_titles {
124
125 my $self = shift;
126
127 return $self->{PrintTitle};
128}
129
130###############################################################################
131#
132# using_1904_date()
133#
134# Returns true if the Excel file is using the 1904 date epoch.
135#
136sub using_1904_date {
137
138 my $self = shift;
139
140 return $self->{Flg1904};
141}
142
143###############################################################################
144#
145# ParseAbort()
146#
147# Todo
148#
149sub ParseAbort {
150 my ( $self, $val ) = @_;
151 $self->{_ParseAbort} = $val;
152}
153
154=head2 get_active_sheet()
155
156Return the number of the active (open) worksheet (at the time the workbook
157was saved. May return undef.
158
159=cut
160
161sub get_active_sheet {
162 my $workbook = shift;
163
164 return $workbook->{ActiveSheet};
165}
166
167###############################################################################
168#
169# Parse(). Deprecated.
170#
171# Syntactic wrapper around Spreadsheet::ParseExcel::Parse().
172# This method is *deprecated* since it doesn't conform to the current
173# error handling in the S::PE Parse() method.
174#
175sub Parse {
176
177 my ( $class, $source, $formatter ) = @_;
178 my $excel = Spreadsheet::ParseExcel->new();
179 my $workbook = $excel->Parse( $source, $formatter );
180 $workbook->{_Excel} = $excel;
181 return $workbook;
182}
183
184###############################################################################
185#
186# Mapping between legacy method names and new names.
187#
188{
189328µs231µs
# spent 18µs (5+13) within Spreadsheet::ParseExcel::Workbook::BEGIN@189 which was called: # once (5µs+13µs) by Spreadsheet::ParseExcel::BEGIN@31 at line 189
no warnings; # Ignore warnings about variables used only once.
# spent 18µs making 1 call to Spreadsheet::ParseExcel::Workbook::BEGIN@189 # spent 13µs making 1 call to warnings::unimport
1901900ns *Worksheet = *worksheet;
191}
192
19312µs1;
194
195__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Archive-Zip-Member-pm-109-line.html0000644000175000017500000111237114576335353024232 0ustar michamicha Profile of Archive/Zip/Member.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Archive/Zip/Member.pm
StatementsExecuted 5597 statements in 22.9ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
7114.16ms19.1msArchive::Zip::Member::::contentsArchive::Zip::Member::contents
111838µs942µsArchive::Zip::Member::::BEGIN@27Archive::Zip::Member::BEGIN@27
128021398µs398µsArchive::Zip::Member::::_revbeArchive::Zip::Member::_revbe
711136µs912µsArchive::Zip::Member::::rewindDataArchive::Zip::Member::rewindData
111117µs119µsArchive::Zip::Member::::BEGIN@1517Archive::Zip::Member::BEGIN@1517
71190µs13.0msArchive::Zip::Member::::readChunkArchive::Zip::Member::readChunk
111185µs210µsArchive::Zip::Member::::newArchive::Zip::Member::new
71178µs12.3msArchive::Zip::Member::::_inflateChunkArchive::Zip::Member::_inflateChunk
314271µs75µsArchive::Zip::Member::::desiredCompressionMethodArchive::Zip::Member::desiredCompressionMethod
1013257µs57µsArchive::Zip::Member::::fileNameArchive::Zip::Member::fileName
111151µs122µsArchive::Zip::Member::::unixFileAttributesArchive::Zip::Member::unixFileAttributes
311147µs72µsArchive::Zip::Member::::endReadArchive::Zip::Member::endRead
111131µs41µsArchive::Zip::Member::::_mapPermissionsToUnixArchive::Zip::Member::_mapPermissionsToUnix
142129µs37µsArchive::Zip::Member::::readIsDoneArchive::Zip::Member::readIsDone
111119µs266µsArchive::Zip::Member::::_newFromZipFileArchive::Zip::Member::_newFromZipFile
455215µs15µsArchive::Zip::Member::::compressionMethodArchive::Zip::Member::compressionMethod
11110µs11µsArchive::Zip::Member::::BEGIN@578Archive::Zip::Member::BEGIN@578
11110µs11µsArchive::Zip::Member::::BEGIN@5Archive::Zip::Member::BEGIN@5
111110µs10µsArchive::Zip::Member::::localExtraFieldArchive::Zip::Member::localExtraField
21319µs9µsArchive::Zip::Member::::uncompressedSizeArchive::Zip::Member::uncompressedSize
11119µs9µsArchive::Zip::Member::::_mapPermissionsFromUnixArchive::Zip::Member::_mapPermissionsFromUnix
1118µs8µsArchive::Zip::Member::::BEGIN@8Archive::Zip::Member::BEGIN@8
1117µs26µsArchive::Zip::Member::::BEGIN@37Archive::Zip::Member::BEGIN@37
14117µs7µsArchive::Zip::Member::::_dataEndedArchive::Zip::Member::_dataEnded
1117µs70µsArchive::Zip::Member::::BEGIN@28Archive::Zip::Member::BEGIN@28
21316µs6µsArchive::Zip::Member::::_readDataRemainingArchive::Zip::Member::_readDataRemaining
7115µs5µsArchive::Zip::Member::::isEncryptedArchive::Zip::Member::isEncrypted
1114µs18µsArchive::Zip::Member::::BEGIN@29Archive::Zip::Member::BEGIN@29
1114µs19µsArchive::Zip::Member::::BEGIN@30Archive::Zip::Member::BEGIN@30
1114µs240µsArchive::Zip::Member::::BEGIN@19Archive::Zip::Member::BEGIN@19
7114µs4µsArchive::Zip::Member::::compressedSizeArchive::Zip::Member::compressedSize
1113µs24µsArchive::Zip::Member::::BEGIN@33Archive::Zip::Member::BEGIN@33
1113µs21µsArchive::Zip::Member::::BEGIN@6Archive::Zip::Member::BEGIN@6
7113µs3µsArchive::Zip::Member::::_inflaterArchive::Zip::Member::_inflater
11113µs3µsArchive::Zip::Member::::DEFAULT_FILE_PERMISSIONSArchive::Zip::Member::DEFAULT_FILE_PERMISSIONS (xsub)
1112µs19µsArchive::Zip::Member::::BEGIN@34Archive::Zip::Member::BEGIN@34
1112µs16µsArchive::Zip::Member::::BEGIN@35Archive::Zip::Member::BEGIN@35
1112µs16µsArchive::Zip::Member::::BEGIN@36Archive::Zip::Member::BEGIN@36
111400ns400nsArchive::Zip::Member::::__ANON__Archive::Zip::Member::__ANON__ (xsub)
0000s0sArchive::Zip::Member::::_becomeArchive::Zip::Member::_become
0000s0sArchive::Zip::Member::::_copyChunkArchive::Zip::Member::_copyChunk
0000s0sArchive::Zip::Member::::_crc32Archive::Zip::Member::_crc32
0000s0sArchive::Zip::Member::::_decodeArchive::Zip::Member::_decode
0000s0sArchive::Zip::Member::::_deflateChunkArchive::Zip::Member::_deflateChunk
0000s0sArchive::Zip::Member::::_deflaterArchive::Zip::Member::_deflater
0000s0sArchive::Zip::Member::::_dosToUnixTimeArchive::Zip::Member::_dosToUnixTime
0000s0sArchive::Zip::Member::::_extractZip64ExtraFieldArchive::Zip::Member::_extractZip64ExtraField
0000s0sArchive::Zip::Member::::_noChunkArchive::Zip::Member::_noChunk
0000s0sArchive::Zip::Member::::_readOffsetArchive::Zip::Member::_readOffset
0000s0sArchive::Zip::Member::::_readRawChunkArchive::Zip::Member::_readRawChunk
0000s0sArchive::Zip::Member::::_refreshLocalFileHeaderArchive::Zip::Member::_refreshLocalFileHeader
0000s0sArchive::Zip::Member::::_unixToDosTimeArchive::Zip::Member::_unixToDosTime
0000s0sArchive::Zip::Member::::_update_keysArchive::Zip::Member::_update_keys
0000s0sArchive::Zip::Member::::_usesFileNamedArchive::Zip::Member::_usesFileNamed
0000s0sArchive::Zip::Member::::_writeCentralDirectoryFileHeaderArchive::Zip::Member::_writeCentralDirectoryFileHeader
0000s0sArchive::Zip::Member::::_writeDataArchive::Zip::Member::_writeData
0000s0sArchive::Zip::Member::::_writeDataDescriptorArchive::Zip::Member::_writeDataDescriptor
0000s0sArchive::Zip::Member::::_writeLocalFileHeaderArchive::Zip::Member::_writeLocalFileHeader
0000s0sArchive::Zip::Member::::_writeOffsetArchive::Zip::Member::_writeOffset
0000s0sArchive::Zip::Member::::_writeToFileHandleArchive::Zip::Member::_writeToFileHandle
0000s0sArchive::Zip::Member::::_zdecodeArchive::Zip::Member::_zdecode
0000s0sArchive::Zip::Member::::bitFlagArchive::Zip::Member::bitFlag
0000s0sArchive::Zip::Member::::cdExtraFieldArchive::Zip::Member::cdExtraField
0000s0sArchive::Zip::Member::::crc32Archive::Zip::Member::crc32
0000s0sArchive::Zip::Member::::crc32StringArchive::Zip::Member::crc32String
0000s0sArchive::Zip::Member::::desiredCompressionLevelArchive::Zip::Member::desiredCompressionLevel
0000s0sArchive::Zip::Member::::desiredZip64ModeArchive::Zip::Member::desiredZip64Mode
0000s0sArchive::Zip::Member::::externalFileAttributesArchive::Zip::Member::externalFileAttributes
0000s0sArchive::Zip::Member::::externalFileNameArchive::Zip::Member::externalFileName
0000s0sArchive::Zip::Member::::extraFieldsArchive::Zip::Member::extraFields
0000s0sArchive::Zip::Member::::extractToFileHandleArchive::Zip::Member::extractToFileHandle
0000s0sArchive::Zip::Member::::extractToFileNamedArchive::Zip::Member::extractToFileNamed
0000s0sArchive::Zip::Member::::fileAttributeFormatArchive::Zip::Member::fileAttributeFormat
0000s0sArchive::Zip::Member::::fileCommentArchive::Zip::Member::fileComment
0000s0sArchive::Zip::Member::::fileNameAsBytesArchive::Zip::Member::fileNameAsBytes
0000s0sArchive::Zip::Member::::hasDataDescriptorArchive::Zip::Member::hasDataDescriptor
0000s0sArchive::Zip::Member::::internalFileAttributesArchive::Zip::Member::internalFileAttributes
0000s0sArchive::Zip::Member::::isBinaryFileArchive::Zip::Member::isBinaryFile
0000s0sArchive::Zip::Member::::isDirectoryArchive::Zip::Member::isDirectory
0000s0sArchive::Zip::Member::::isSymbolicLinkArchive::Zip::Member::isSymbolicLink
0000s0sArchive::Zip::Member::::isTextFileArchive::Zip::Member::isTextFile
0000s0sArchive::Zip::Member::::lastModFileDateTimeArchive::Zip::Member::lastModFileDateTime
0000s0sArchive::Zip::Member::::lastModTimeArchive::Zip::Member::lastModTime
0000s0sArchive::Zip::Member::::mkpath_win32Archive::Zip::Member::mkpath_win32
0000s0sArchive::Zip::Member::::newDirectoryNamedArchive::Zip::Member::newDirectoryNamed
0000s0sArchive::Zip::Member::::newFromFileArchive::Zip::Member::newFromFile
0000s0sArchive::Zip::Member::::newFromStringArchive::Zip::Member::newFromString
0000s0sArchive::Zip::Member::::passwordArchive::Zip::Member::password
0000s0sArchive::Zip::Member::::setLastModFileDateTimeFromUnixArchive::Zip::Member::setLastModFileDateTimeFromUnix
0000s0sArchive::Zip::Member::::versionMadeByArchive::Zip::Member::versionMadeBy
0000s0sArchive::Zip::Member::::versionNeededToExtractArchive::Zip::Member::versionNeededToExtract
0000s0sArchive::Zip::Member::::wasWrittenArchive::Zip::Member::wasWritten
0000s0sArchive::Zip::Member::::writeLocalHeaderRelativeOffsetArchive::Zip::Member::writeLocalHeaderRelativeOffset
0000s0sArchive::Zip::Member::::zip64Archive::Zip::Member::zip64
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Archive::Zip::Member;
2
3# A generic member of an archive
4
5222µs213µs
# spent 11µs (10+2) within Archive::Zip::Member::BEGIN@5 which was called: # once (10µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 5
use strict;
# spent 11µs making 1 call to Archive::Zip::Member::BEGIN@5 # spent 2µs making 1 call to strict::import
6242µs238µs
# spent 21µs (3+18) within Archive::Zip::Member::BEGIN@6 which was called: # once (3µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 6
use vars qw( $VERSION @ISA );
# spent 21µs making 1 call to Archive::Zip::Member::BEGIN@6 # spent 18µs making 1 call to vars::import
7
8
# spent 8µs within Archive::Zip::Member::BEGIN@8 which was called: # once (8µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 17
BEGIN {
91200ns $VERSION = '1.68';
1016µs @ISA = qw( Archive::Zip );
11
1213µs if ($^O eq 'MSWin32') {
13 require Win32;
14 require Encode;
15 Encode->import(qw{ decode_utf8 });
16 }
17121µs18µs}
# spent 8µs making 1 call to Archive::Zip::Member::BEGIN@8
18
1912µs1237µs
# spent 240µs (4+237) within Archive::Zip::Member::BEGIN@19 which was called: # once (4µs+237µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 25
use Archive::Zip qw(
# spent 237µs making 1 call to Exporter::import
20 :CONSTANTS
21 :MISC_CONSTANTS
22 :ERROR_CODES
23 :PKZIP_CONSTANTS
24 :UTILITY_METHODS
25117µs1240µs);
# spent 240µs making 1 call to Archive::Zip::Member::BEGIN@19
26
27280µs1942µs
# spent 942µs (838+105) within Archive::Zip::Member::BEGIN@27 which was called: # once (838µs+105µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 27
use Time::Local ();
# spent 942µs making 1 call to Archive::Zip::Member::BEGIN@27
28220µs2134µs
# spent 70µs (7+63) within Archive::Zip::Member::BEGIN@28 which was called: # once (7µs+63µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 28
use Compress::Raw::Zlib qw( Z_OK Z_STREAM_END MAX_WBITS );
# spent 70µs making 1 call to Archive::Zip::Member::BEGIN@28 # spent 63µs making 1 call to Exporter::import
29214µs231µs
# spent 18µs (4+14) within Archive::Zip::Member::BEGIN@29 which was called: # once (4µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 29
use File::Path;
# spent 18µs making 1 call to Archive::Zip::Member::BEGIN@29 # spent 14µs making 1 call to Exporter::import
30216µs234µs
# spent 19µs (4+15) within Archive::Zip::Member::BEGIN@30 which was called: # once (4µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 30
use File::Basename;
# spent 19µs making 1 call to Archive::Zip::Member::BEGIN@30 # spent 15µs making 1 call to Exporter::import
31
32# Unix perms for default creation of files/dirs.
33214µs245µs
# spent 24µs (3+21) within Archive::Zip::Member::BEGIN@33 which was called: # once (3µs+21µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 33
use constant DEFAULT_DIRECTORY_PERMISSIONS => 040755;
# spent 24µs making 1 call to Archive::Zip::Member::BEGIN@33 # spent 21µs making 1 call to constant::import
34212µs236µs
# spent 19µs (2+16) within Archive::Zip::Member::BEGIN@34 which was called: # once (2µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 34
use constant DEFAULT_FILE_PERMISSIONS => 0100666;
# spent 19µs making 1 call to Archive::Zip::Member::BEGIN@34 # spent 16µs making 1 call to constant::import
35212µs230µs
# spent 16µs (2+14) within Archive::Zip::Member::BEGIN@35 which was called: # once (2µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 35
use constant DIRECTORY_ATTRIB => 040000;
# spent 16µs making 1 call to Archive::Zip::Member::BEGIN@35 # spent 14µs making 1 call to constant::import
36226µs229µs
# spent 16µs (2+13) within Archive::Zip::Member::BEGIN@36 which was called: # once (2µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 36
use constant FILE_ATTRIB => 0100000;
# spent 16µs making 1 call to Archive::Zip::Member::BEGIN@36 # spent 13µs making 1 call to constant::import
3712µs116µs
# spent 26µs (7+19) within Archive::Zip::Member::BEGIN@37 which was called: # once (7µs+19µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 40
use constant OS_SUPPORTS_SYMLINK => do {
# spent 16µs making 1 call to constant::import
381100ns local $@;
3937µs13µs !!eval { symlink("",""); 1 };
# spent 3µs making 1 call to CORE::symlink
4011.36ms126µs};
# spent 26µs making 1 call to Archive::Zip::Member::BEGIN@37
41
42# Returns self if successful, else undef
43# Assumes that fh is positioned at beginning of central directory file header.
44# Leaves fh positioned immediately after file header or EOCD signature.
45
# spent 266µs (19+247) within Archive::Zip::Member::_newFromZipFile which was called 11 times, avg 24µs/call: # 11 times (19µs+247µs) by Archive::Zip::Archive::readFromFileHandle at line 780 of Archive/Zip/Archive.pm, avg 24µs/call
sub _newFromZipFile {
46111µs my $class = shift;
47118µs11247µs my $self = Archive::Zip::ZipFileMember->_newFromZipFile(@_);
# spent 247µs making 11 calls to Archive::Zip::ZipFileMember::_newFromZipFile, avg 22µs/call
48118µs return $self;
49}
50
51sub newFromString {
52 my $class = shift;
53
54 my ($stringOrStringRef, $fileName);
55 if (ref($_[0]) eq 'HASH') {
56 $stringOrStringRef = $_[0]->{string};
57 $fileName = $_[0]->{zipName};
58 } else {
59 ($stringOrStringRef, $fileName) = @_;
60 }
61
62 my $self =
63 Archive::Zip::StringMember->_newFromString($stringOrStringRef, $fileName);
64 return $self;
65}
66
67sub newFromFile {
68 my $class = shift;
69
70 my ($fileName, $zipName);
71 if (ref($_[0]) eq 'HASH') {
72 $fileName = $_[0]->{fileName};
73 $zipName = $_[0]->{zipName};
74 } else {
75 ($fileName, $zipName) = @_;
76 }
77
78 my $self =
79 Archive::Zip::NewFileMember->_newFromFileNamed($fileName, $zipName);
80 return $self;
81}
82
83sub newDirectoryNamed {
84 my $class = shift;
85
86 my ($directoryName, $newName);
87 if (ref($_[0]) eq 'HASH') {
88 $directoryName = $_[0]->{directoryName};
89 $newName = $_[0]->{zipName};
90 } else {
91 ($directoryName, $newName) = @_;
92 }
93
94 my $self =
95 Archive::Zip::DirectoryMember->_newNamed($directoryName, $newName);
96 return $self;
97}
98
99
# spent 210µs (85+125) within Archive::Zip::Member::new which was called 11 times, avg 19µs/call: # 11 times (85µs+125µs) by Archive::Zip::ZipFileMember::_newFromZipFile at line 28 of Archive/Zip/ZipFileMember.pm, avg 19µs/call
sub new {
100111µs my $class = shift;
101 # Info-Zip 3.0 (I guess) seems to use the following values
102 # for the version fields in local and central directory
103 # headers, regardless of whether the member has an zip64
104 # extended information extra field or not:
105 #
106 # version made by:
107 # 30
108 #
109 # version needed to extract:
110 # 10 for directory and stored entries
111 # 20 for anything else
1121149µs my $self = {
113 'lastModFileDateTime' => 0,
114 'fileAttributeFormat' => FA_UNIX,
115 'zip64' => 0,
116 'desiredZip64Mode' => ZIP64_AS_NEEDED,
117 'versionMadeBy' => 20,
118 'versionNeededToExtract' => 20,
119 'bitFlag' => ($Archive::Zip::UNICODE ? 0x0800 : 0),
120 'compressionMethod' => COMPRESSION_STORED,
121 'desiredCompressionMethod' => COMPRESSION_STORED,
122 'desiredCompressionLevel' => COMPRESSION_LEVEL_NONE,
123 'internalFileAttributes' => 0,
124 'externalFileAttributes' => 0, # set later
125 'fileName' => '',
126 'cdExtraField' => '',
127 'localExtraField' => '',
128 'fileComment' => '',
129 'crc32' => 0,
130 'compressedSize' => 0,
131 'uncompressedSize' => 0,
132 'password' => undef, # password for encrypted data
133 'crc32c' => -1, # crc for decrypted data
134 @_
135 };
136113µs bless($self, $class);
1371126µs22125µs $self->unixFileAttributes($self->DEFAULT_FILE_PERMISSIONS);
# spent 122µs making 11 calls to Archive::Zip::Member::unixFileAttributes, avg 11µs/call # spent 3µs making 11 calls to Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS, avg 236ns/call
1381113µs return $self;
139}
140
141# Morph into given class (do whatever cleanup I need to do)
142sub _become {
143 return bless($_[0], $_[1]);
144}
145
146sub fileAttributeFormat {
147 my $self = shift;
148
149 if (@_) {
150 $self->{fileAttributeFormat} =
151 (ref($_[0]) eq 'HASH') ? $_[0]->{format} : $_[0];
152 } else {
153 return $self->{fileAttributeFormat};
154 }
155}
156
157sub zip64 {
158 shift->{'zip64'};
159}
160
161sub desiredZip64Mode {
162 my $self = shift;
163 my $desiredZip64Mode = $self->{'desiredZip64Mode'};
164 if (@_) {
165 $self->{'desiredZip64Mode'} =
166 ref($_[0]) eq 'HASH' ? shift->{desiredZip64Mode} : shift;
167 }
168 return $desiredZip64Mode;
169}
170
171sub versionMadeBy {
172 shift->{'versionMadeBy'};
173}
174
175sub versionNeededToExtract {
176 shift->{'versionNeededToExtract'};
177}
178
179sub bitFlag {
180 my $self = shift;
181
182# Set General Purpose Bit Flags according to the desiredCompressionLevel setting
183 if ( $self->desiredCompressionLevel == 1
184 || $self->desiredCompressionLevel == 2) {
185 $self->{'bitFlag'} |= DEFLATING_COMPRESSION_FAST;
186 } elsif ($self->desiredCompressionLevel == 3
187 || $self->desiredCompressionLevel == 4
188 || $self->desiredCompressionLevel == 5
189 || $self->desiredCompressionLevel == 6
190 || $self->desiredCompressionLevel == 7) {
191 $self->{'bitFlag'} |= DEFLATING_COMPRESSION_NORMAL;
192 } elsif ($self->desiredCompressionLevel == 8
193 || $self->desiredCompressionLevel == 9) {
194 $self->{'bitFlag'} |= DEFLATING_COMPRESSION_MAXIMUM;
195 }
196
197 if ($Archive::Zip::UNICODE) {
198 $self->{'bitFlag'} |= 0x0800;
199 }
200 $self->{'bitFlag'};
201}
202
203sub password {
204 my $self = shift;
205 $self->{'password'} = shift if @_;
206 $self->{'password'};
207}
208
209
# spent 15µs within Archive::Zip::Member::compressionMethod which was called 45 times, avg 329ns/call: # 14 times (2µs+0s) by Archive::Zip::Member::rewindData at line 1212, avg 150ns/call # 10 times (5µs+0s) by Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader at line 432 of Archive/Zip/ZipFileMember.pm, avg 470ns/call # 7 times (3µs+0s) by Archive::Zip::Member::rewindData at line 1243, avg 457ns/call # 7 times (3µs+0s) by Archive::Zip::Member::rewindData at line 1208, avg 371ns/call # 7 times (2µs+0s) by Archive::Zip::Member::readChunk at line 1125, avg 314ns/call
sub compressionMethod {
2104534µs shift->{'compressionMethod'};
211}
212
213
# spent 75µs (71+4) within Archive::Zip::Member::desiredCompressionMethod which was called 31 times, avg 2µs/call: # 10 times (24µs+0s) by Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader at line 432 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # 7 times (26µs+4µs) by Archive::Zip::Member::contents at line 1288, avg 4µs/call # 7 times (15µs+0s) by Archive::Zip::Member::contents at line 1307, avg 2µs/call # 7 times (6µs+0s) by Archive::Zip::Member::rewindData at line 1212, avg 843ns/call
sub desiredCompressionMethod {
214314µs my $self = shift;
215 my $newDesiredCompressionMethod =
2163110µs (ref($_[0]) eq 'HASH') ? shift->{compressionMethod} : shift;
217316µs my $oldDesiredCompressionMethod = $self->{'desiredCompressionMethod'};
218317µs if (defined($newDesiredCompressionMethod)) {
219244µs $self->{'desiredCompressionMethod'} = $newDesiredCompressionMethod;
2202417µs if ($newDesiredCompressionMethod == COMPRESSION_STORED) {
22172µs $self->{'desiredCompressionLevel'} = 0;
22277µs74µs $self->{'bitFlag'} &= ~GPBF_HAS_DATA_DESCRIPTOR_MASK
# spent 4µs making 7 calls to Archive::Zip::Member::uncompressedSize, avg 629ns/call
223 if $self->uncompressedSize() == 0;
224 } elsif ($oldDesiredCompressionMethod == COMPRESSION_STORED) {
225 $self->{'desiredCompressionLevel'} = COMPRESSION_LEVEL_DEFAULT;
226 }
227 }
2283138µs return $oldDesiredCompressionMethod;
229}
230
231sub desiredCompressionLevel {
232 my $self = shift;
233 my $newDesiredCompressionLevel =
234 (ref($_[0]) eq 'HASH') ? shift->{compressionLevel} : shift;
235 my $oldDesiredCompressionLevel = $self->{'desiredCompressionLevel'};
236 if (defined($newDesiredCompressionLevel)) {
237 $self->{'desiredCompressionLevel'} = $newDesiredCompressionLevel;
238 $self->{'desiredCompressionMethod'} = (
239 $newDesiredCompressionLevel
240 ? COMPRESSION_DEFLATED
241 : COMPRESSION_STORED
242 );
243 }
244 return $oldDesiredCompressionLevel;
245}
246
247
# spent 57µs within Archive::Zip::Member::fileName which was called 101 times, avg 563ns/call: # 70 times (37µs+0s) by Archive::Zip::Archive::membersMatching at line 106 of Archive/Zip/Archive.pm, avg 530ns/call # 21 times (13µs+0s) by Archive::Zip::ZipFileMember::isDirectory at line 44 of Archive/Zip/ZipFileMember.pm, avg 633ns/call # 10 times (6µs+0s) by Archive::Zip::Archive::memberNamed at line 98 of Archive/Zip/Archive.pm, avg 650ns/call
sub fileName {
2481016µs my $self = shift;
2491019µs my $newName = shift;
2501017µs if (defined $newName) {
251 $newName =~ y{\\/}{/}s; # deal with dos/windoze problems
252 $self->{'fileName'} = $newName;
253 }
25410174µs return $self->{'fileName'};
255}
256
257sub fileNameAsBytes {
258 my $self = shift;
259 my $bytes = $self->{'fileName'};
260 if($self->{'bitFlag'} & 0x800){
261 $bytes = Encode::encode_utf8($bytes);
262 }
263 return $bytes;
264}
265
266sub lastModFileDateTime {
267 my $modTime = shift->{'lastModFileDateTime'};
268 $modTime =~ m/^(\d+)$/; # untaint
269 return $1;
270}
271
272sub lastModTime {
273 my $self = shift;
274 return _dosToUnixTime($self->lastModFileDateTime());
275}
276
277sub setLastModFileDateTimeFromUnix {
278 my $self = shift;
279 my $time_t = shift;
280 $self->{'lastModFileDateTime'} = _unixToDosTime($time_t);
281}
282
283sub internalFileAttributes {
284 shift->{'internalFileAttributes'};
285}
286
287sub externalFileAttributes {
288 shift->{'externalFileAttributes'};
289}
290
291# Convert UNIX permissions into proper value for zip file
292# Usable as a function or a method
293
# spent 9µs within Archive::Zip::Member::_mapPermissionsFromUnix which was called 11 times, avg 800ns/call: # 11 times (9µs+0s) by Archive::Zip::Member::unixFileAttributes at line 407, avg 800ns/call
sub _mapPermissionsFromUnix {
29411900ns my $self = shift;
295111µs my $mode = shift;
296112µs my $attribs = $mode << 16;
297
298 # Microsoft Windows Explorer needs this bit set for directories
299112µs if ($mode & DIRECTORY_ATTRIB) {
300 $attribs |= 16;
301 }
302
303118µs return $attribs;
304
305 # TODO: map more MS-DOS perms
306}
307
308# Convert ZIP permissions into Unix ones
309#
310# This was taken from Info-ZIP group's portable UnZip
311# zipfile-extraction program, version 5.50.
312# http://www.info-zip.org/pub/infozip/
313#
314# See the mapattr() function in unix/unix.c
315# See the attribute format constants in unzpriv.h
316#
317# XXX Note that there's one situation that is not implemented
318# yet that depends on the "extra field."
319
# spent 41µs (31+10) within Archive::Zip::Member::_mapPermissionsToUnix which was called 11 times, avg 4µs/call: # 11 times (31µs+10µs) by Archive::Zip::Member::unixFileAttributes at line 393, avg 4µs/call
sub _mapPermissionsToUnix {
32011900ns my $self = shift;
321
322113µs my $format = $self->{'fileAttributeFormat'};
323111µs my $attribs = $self->{'externalFileAttributes'};
324
325111µs my $mode = 0;
326
327111µs if ($format == FA_AMIGA) {
328 $attribs = $attribs >> 17 & 7; # Amiga RWE bits
329 $mode = $attribs << 6 | $attribs << 3 | $attribs;
330 return $mode;
331 }
332
333111µs if ($format == FA_THEOS) {
334 $attribs &= 0xF1FFFFFF;
335 if (($attribs & 0xF0000000) != 0x40000000) {
336 $attribs &= 0x01FFFFFF; # not a dir, mask all ftype bits
337 } else {
338 $attribs &= 0x41FFFFFF; # leave directory bit as set
339 }
340 }
341
342111µs if ( $format == FA_UNIX
343 || $format == FA_VAX_VMS
344 || $format == FA_ACORN
345 || $format == FA_ATARI_ST
346 || $format == FA_BEOS
347 || $format == FA_QDOS
348 || $format == FA_TANDEM) {
349111µs $mode = $attribs >> 16;
3501117µs1110µs return $mode if $mode != 0 or not $self->localExtraField;
# spent 10µs making 11 calls to Archive::Zip::Member::localExtraField, avg 873ns/call
351
352 # warn("local extra field is: ", $self->localExtraField, "\n");
353
354 # XXX This condition is not implemented
355 # I'm just including the comments from the info-zip section for now.
356
357 # Some (non-Info-ZIP) implementations of Zip for Unix and
358 # VMS (and probably others ??) leave 0 in the upper 16-bit
359 # part of the external_file_attributes field. Instead, they
360 # store file permission attributes in some extra field.
361 # As a work-around, we search for the presence of one of
362 # these extra fields and fall back to the MSDOS compatible
363 # part of external_file_attributes if one of the known
364 # e.f. types has been detected.
365 # Later, we might implement extraction of the permission
366 # bits from the VMS extra field. But for now, the work-around
367 # should be sufficient to provide "readable" extracted files.
368 # (For ASI Unix e.f., an experimental remap from the e.f.
369 # mode value IS already provided!)
370 }
371
372 # PKWARE's PKZip for Unix marks entries as FA_MSDOS, but stores the
373 # Unix attributes in the upper 16 bits of the external attributes
374 # field, just like Info-ZIP's Zip for Unix. We try to use that
375 # value, after a check for consistency with the MSDOS attribute
376 # bits (see below).
377 if ($format == FA_MSDOS) {
378 $mode = $attribs >> 16;
379 }
380
381 # FA_MSDOS, FA_OS2_HPFS, FA_WINDOWS_NTFS, FA_MACINTOSH, FA_TOPS20
382 $attribs = !($attribs & 1) << 1 | ($attribs & 0x10) >> 4;
383
384 # keep previous $mode setting when its "owner"
385 # part appears to be consistent with DOS attribute flags!
386 return $mode if ($mode & 0700) == (0400 | $attribs << 6);
387 $mode = 0444 | $attribs << 6 | $attribs << 3 | $attribs;
388 return $mode;
389}
390
391
# spent 122µs (51+72) within Archive::Zip::Member::unixFileAttributes which was called 11 times, avg 11µs/call: # 11 times (51µs+72µs) by Archive::Zip::Member::new at line 137, avg 11µs/call
sub unixFileAttributes {
392111µs my $self = shift;
393118µs1141µs my $oldPerms = $self->_mapPermissionsToUnix;
# spent 41µs making 11 calls to Archive::Zip::Member::_mapPermissionsToUnix, avg 4µs/call
394
39511800ns my $perms;
396113µs if (@_) {
397112µs $perms = (ref($_[0]) eq 'HASH') ? $_[0]->{attributes} : $_[0];
398
399117µs1122µs if ($self->isDirectory) {
# spent 22µs making 11 calls to Archive::Zip::ZipFileMember::isDirectory, avg 2µs/call
400 $perms &= ~FILE_ATTRIB;
401 $perms |= DIRECTORY_ATTRIB;
402 } else {
403111µs $perms &= ~DIRECTORY_ATTRIB;
404112µs $perms |= FILE_ATTRIB;
405 }
406 $self->{externalFileAttributes} =
407119µs119µs $self->_mapPermissionsFromUnix($perms);
# spent 9µs making 11 calls to Archive::Zip::Member::_mapPermissionsFromUnix, avg 800ns/call
408 }
409
410118µs return $oldPerms;
411}
412
413
# spent 10µs within Archive::Zip::Member::localExtraField which was called 11 times, avg 873ns/call: # 11 times (10µs+0s) by Archive::Zip::Member::_mapPermissionsToUnix at line 350, avg 873ns/call
sub localExtraField {
414111µs my $self = shift;
415
416112µs if (@_) {
417 my $localExtraField =
418 (ref($_[0]) eq 'HASH') ? $_[0]->{field} : $_[0];
419 my ($status, $zip64) =
420 $self->_extractZip64ExtraField($localExtraField, undef, undef);
421 if ($status != AZ_OK) {
422 return $status;
423 }
424 elsif ($zip64) {
425 return _formatError('invalid extra field (contains zip64 information)');
426 }
427 else {
428 $self->{localExtraField} = $localExtraField;
429 return AZ_OK;
430 }
431 } else {
4321112µs return $self->{localExtraField};
433 }
434}
435
436sub cdExtraField {
437 my $self = shift;
438
439 if (@_) {
440 my $cdExtraField =
441 (ref($_[0]) eq 'HASH') ? $_[0]->{field} : $_[0];
442 my ($status, $zip64) =
443 $self->_extractZip64ExtraField($cdExtraField, undef, undef);
444 if ($status != AZ_OK) {
445 return $status;
446 }
447 elsif ($zip64) {
448 return _formatError('invalid extra field (contains zip64 information)');
449 }
450 else {
451 $self->{cdExtraField} = $cdExtraField;
452 return AZ_OK;
453 }
454 } else {
455 return $self->{cdExtraField};
456 }
457}
458
459sub extraFields {
460 my $self = shift;
461 return $self->localExtraField() . $self->cdExtraField();
462}
463
464sub fileComment {
465 my $self = shift;
466
467 if (@_) {
468 $self->{fileComment} =
469 (ref($_[0]) eq 'HASH')
470 ? pack('C0a*', $_[0]->{comment})
471 : pack('C0a*', $_[0]);
472 } else {
473 return $self->{fileComment};
474 }
475}
476
477sub hasDataDescriptor {
478 my $self = shift;
479 if (@_) {
480 my $shouldHave = shift;
481 if ($shouldHave) {
482 $self->{'bitFlag'} |= GPBF_HAS_DATA_DESCRIPTOR_MASK;
483 } else {
484 $self->{'bitFlag'} &= ~GPBF_HAS_DATA_DESCRIPTOR_MASK;
485 }
486 }
487 return $self->{'bitFlag'} & GPBF_HAS_DATA_DESCRIPTOR_MASK;
488}
489
490sub crc32 {
491 shift->{'crc32'};
492}
493
494sub crc32String {
495 sprintf("%08x", shift->{'crc32'});
496}
497
498
# spent 4µs within Archive::Zip::Member::compressedSize which was called 7 times, avg 514ns/call: # 7 times (4µs+0s) by Archive::Zip::Member::rewindData at line 1243, avg 514ns/call
sub compressedSize {
49976µs shift->{'compressedSize'};
500}
501
502
# spent 9µs within Archive::Zip::Member::uncompressedSize which was called 21 times, avg 433ns/call: # 7 times (4µs+0s) by Archive::Zip::Member::desiredCompressionMethod at line 222, avg 629ns/call # 7 times (3µs+0s) by Archive::Zip::Member::contents at line 1301, avg 429ns/call # 7 times (2µs+0s) by Archive::Zip::Member::rewindData at line 1204, avg 243ns/call
sub uncompressedSize {
5032124µs shift->{'uncompressedSize'};
504}
505
506
# spent 5µs within Archive::Zip::Member::isEncrypted which was called 7 times, avg 686ns/call: # 7 times (5µs+0s) by Archive::Zip::Member::readChunk at line 1121, avg 686ns/call
sub isEncrypted {
50777µs shift->{'bitFlag'} & GPBF_ENCRYPTED_MASK;
508}
509
510sub isTextFile {
511 my $self = shift;
512 my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK;
513 if (@_) {
514 my $flag = (ref($_[0]) eq 'HASH') ? shift->{flag} : shift;
515 $self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK;
516 $self->{'internalFileAttributes'} |=
517 ($flag ? IFA_TEXT_FILE : IFA_BINARY_FILE);
518 }
519 return $bit == IFA_TEXT_FILE;
520}
521
522sub isBinaryFile {
523 my $self = shift;
524 my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK;
525 if (@_) {
526 my $flag = shift;
527 $self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK;
528 $self->{'internalFileAttributes'} |=
529 ($flag ? IFA_BINARY_FILE : IFA_TEXT_FILE);
530 }
531 return $bit == IFA_BINARY_FILE;
532}
533
534sub extractToFileNamed {
535 my $self = shift;
536
537 # local FS name
538 my $name = (ref($_[0]) eq 'HASH') ? $_[0]->{name} : $_[0];
539
540 # Create directory for regular files as well as for symbolic
541 # links
542 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
543 $name = decode_utf8(Win32::GetFullPathName($name));
544 mkpath_win32($name);
545 } else {
546 mkpath(dirname($name)); # croaks on error
547 }
548
549 # Check if the file / directory is a symbolic link *and* if
550 # the operating system supports these. Only in that case
551 # call method extractToFileHandle with the name of the
552 # symbolic link. If the operating system does not support
553 # symbolic links, process the member using the usual
554 # extraction routines, which creates a file containing the
555 # link target.
556 if ($self->isSymbolicLink() && OS_SUPPORTS_SYMLINK) {
557 return $self->extractToFileHandle($name);
558 } else {
559 my ($status, $fh);
560 if ($^O eq 'MSWin32' && $Archive::Zip::UNICODE) {
561 Win32::CreateFile($name);
562 ($status, $fh) = _newFileHandle(Win32::GetANSIPathName($name), 'w');
563 } else {
564 ($status, $fh) = _newFileHandle($name, 'w');
565 }
566 return _ioError("Can't open file $name for write") unless $status;
567 $status = $self->extractToFileHandle($fh);
568 $fh->close();
569 chmod($self->unixFileAttributes(), $name)
570 or return _error("Can't chmod() ${name}: $!");
571 utime($self->lastModTime(), $self->lastModTime(), $name);
572 return $status;
573 }
574}
575
576sub mkpath_win32 {
577 my $path = shift;
57822.02ms211µs
# spent 11µs (10+400ns) within Archive::Zip::Member::BEGIN@578 which was called: # once (10µs+400ns) by Spreadsheet::ParseXLSX::BEGIN@11 at line 578
use File::Spec;
# spent 11µs making 1 call to Archive::Zip::Member::BEGIN@578 # spent 400ns making 1 call to Archive::Zip::Member::__ANON__
579
580 my ($volume, @path) = File::Spec->splitdir($path);
581 $path = File::Spec->catfile($volume, shift @path);
582 pop @path;
583 while (@path) {
584 $path = File::Spec->catfile($path, shift @path);
585 Win32::CreateDirectory($path);
586 }
587}
588
589sub isSymbolicLink {
590 return shift->{'externalFileAttributes'} == 0xA1FF0000;
591}
592
593sub isDirectory {
594 return 0;
595}
596
597sub externalFileName {
598 return undef;
599}
600
601# Search the given extra field string for a zip64 extended
602# information extra field and "correct" the header fields given
603# in the remaining parameters with the information from that
604# extra field, if required. Writes back the extra field string
605# sans the zip64 information. The extra field string and all
606# header fields must be passed as lvalues or the undefined value.
607#
608# This method returns a pair ($status, $zip64) in list context,
609# where the latter flag specifies whether a zip64 extended
610# information extra field was found.
611#
612# This method must be called with two header fields for local
613# file headers and with four header fields for Central Directory
614# headers.
615sub _extractZip64ExtraField
616{
617 my $classOrSelf = shift;
618
619 my $extraField = $_[0];
620
621 my ($zip64Data, $newExtraField) = (undef, '');
622 while (length($extraField) >= 4) {
623 my ($headerId, $dataSize) = unpack('v v', $extraField);
624 if (length($extraField) < 4 + $dataSize) {
625 return _formatError('invalid extra field (bad data)');
626 }
627 elsif ($headerId != 0x0001) {
628 $newExtraField .= substr($extraField, 0, 4 + $dataSize);
629 $extraField = substr($extraField, 4 + $dataSize);
630 }
631 else {
632 $zip64Data = substr($extraField, 4, $dataSize);
633 $extraField = substr($extraField, 4 + $dataSize);
634 }
635 }
636 if (length($extraField) != 0) {
637 return _formatError('invalid extra field (bad header ID or data size)');
638 }
639
640 my $zip64 = 0;
641 if (defined($zip64Data)) {
642 return _zip64NotSupported() unless ZIP64_SUPPORTED;
643
644 my $dataLength = length($zip64Data);
645
646 # Try to be tolerant with respect to the fields to be
647 # extracted from the zip64 extended information extra
648 # field and derive that information from the data itself,
649 # if possible. This works around, for example, incorrect
650 # extra fields written by certain versions of package
651 # IO::Compress::Zip. That package provides the disk
652 # number start in the extra field without setting the
653 # corresponding regular field to 0xffff. Plus it
654 # provides the full set of fields even for the local file
655 # header.
656 #
657 # Field zero is the extra field string which we must keep
658 # in @_ for future modification, so account for that.
659 my @fields;
660 if (@_ == 3 && $dataLength == 16) {
661 @fields = (undef, 0xffffffff, 0xffffffff);
662 }
663 elsif (@_ == 3 && $dataLength == 24) {
664 push(@_, undef);
665 @fields = (undef, 0xffffffff, 0xffffffff, 0xffffffff);
666 }
667 elsif (@_ == 3 && $dataLength == 28) {
668 push(@_, undef, undef);
669 @fields = (undef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff);
670 }
671 elsif (@_ == 5 && $dataLength == 24) {
672 @fields = (undef, 0xffffffff, 0xffffffff, 0xffffffff);
673 }
674 elsif (@_ == 5 && $dataLength == 28) {
675 @fields = (undef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff);
676 }
677 else {
678 @fields = map { defined $_ ? $_ : 0 } @_;
679 }
680
681 my @fieldIndexes = (0);
682 my $fieldFormat = '';
683 my $expDataLength = 0;
684 if ($fields[1] == 0xffffffff) {
685 push(@fieldIndexes, 1);
686 $fieldFormat .= 'Q< ';
687 $expDataLength += 8;
688 }
689 if ($fields[2] == 0xffffffff) {
690 push(@fieldIndexes, 2);
691 $fieldFormat .= 'Q< ';
692 $expDataLength += 8;
693 }
694 if (@fields > 3 && $fields[3] == 0xffffffff) {
695 push(@fieldIndexes, 3);
696 $fieldFormat .= 'Q< ';
697 $expDataLength += 8;
698 }
699 if (@fields > 3 && $fields[4] == 0xffff) {
700 push(@fieldIndexes, 4);
701 $fieldFormat .= 'L< ';
702 $expDataLength += 4;
703 }
704
705 if ($dataLength == $expDataLength) {
706 @_[@fieldIndexes] = ($newExtraField, unpack($fieldFormat, $zip64Data));
707 $zip64 = 1;
708 }
709 else {
710 return _formatError('invalid zip64 extended information extra field');
711 }
712 }
713
714 return (AZ_OK, $zip64);
715}
716
717# The following are used when copying data
718sub _writeOffset {
719 shift->{'writeOffset'};
720}
721
722sub _readOffset {
723 shift->{'readOffset'};
724}
725
726sub writeLocalHeaderRelativeOffset {
727 shift->{'writeLocalHeaderRelativeOffset'};
728}
729
730# Maintained in method Archive::Zip::Archive::writeToFileHandle
731sub wasWritten {
732 shift->{'wasWritten'}
733}
734
735
# spent 7µs within Archive::Zip::Member::_dataEnded which was called 14 times, avg 493ns/call: # 14 times (7µs+0s) by Archive::Zip::Member::readIsDone at line 1264, avg 493ns/call
sub _dataEnded {
7361414µs shift->{'dataEnded'};
737}
738
739
# spent 6µs within Archive::Zip::Member::_readDataRemaining which was called 21 times, avg 305ns/call: # 7 times (4µs+0s) by Archive::Zip::Member::contents at line 1298, avg 543ns/call # 7 times (1µs+0s) by Archive::Zip::Member::readIsDone at line 1264, avg 186ns/call # 7 times (1µs+0s) by Archive::Zip::Member::readChunk at line 1113, avg 186ns/call
sub _readDataRemaining {
7402115µs shift->{'readDataRemaining'};
741}
742
743
# spent 3µs within Archive::Zip::Member::_inflater which was called 7 times, avg 457ns/call: # 7 times (3µs+0s) by Archive::Zip::Member::_inflateChunk at line 1183, avg 457ns/call
sub _inflater {
74476µs shift->{'inflater'};
745}
746
747sub _deflater {
748 shift->{'deflater'};
749}
750
751# DOS date/time format
752# 0-4 (5) Second divided by 2
753# 5-10 (6) Minute (0-59)
754# 11-15 (5) Hour (0-23 on a 24-hour clock)
755# 16-20 (5) Day of the month (1-31)
756# 21-24 (4) Month (1 = January, 2 = February, etc.)
757# 25-31 (7) Year offset from 1980 (add 1980 to get actual year)
758
759# Convert DOS date/time format to unix time_t format
760# NOT AN OBJECT METHOD!
761sub _dosToUnixTime {
762 my $dt = shift;
763 return time() unless defined($dt);
764
765 my $year = (($dt >> 25) & 0x7f) + 1980;
766 my $mon = (($dt >> 21) & 0x0f) - 1;
767 my $mday = (($dt >> 16) & 0x1f);
768
769 my $hour = (($dt >> 11) & 0x1f);
770 my $min = (($dt >> 5) & 0x3f);
771 my $sec = (($dt << 1) & 0x3e);
772
773 # catch errors
774 my $time_t =
775 eval { Time::Local::timelocal($sec, $min, $hour, $mday, $mon, $year); };
776 return time() if ($@);
777 return $time_t;
778}
779
780# Note, this is not exactly UTC 1980, it's 1980 + 12 hours and 1
781# minute so that nothing timezoney can muck us up.
7821200nsmy $safe_epoch = 31.686060;
783
784# convert a unix time to DOS date/time
785# NOT AN OBJECT METHOD!
786sub _unixToDosTime {
787 my $time_t = shift;
788 unless ($time_t) {
789 _error("Tried to add member with zero or undef value for time");
790 $time_t = $safe_epoch;
791 }
792 if ($time_t < $safe_epoch) {
793 _ioError("Unsupported date before 1980 encountered, moving to 1980");
794 $time_t = $safe_epoch;
795 }
796 my ($sec, $min, $hour, $mday, $mon, $year) = localtime($time_t);
797 my $dt = 0;
798 $dt += ($sec >> 1);
799 $dt += ($min << 5);
800 $dt += ($hour << 11);
801 $dt += ($mday << 16);
802 $dt += (($mon + 1) << 21);
803 $dt += (($year - 80) << 25);
804 return $dt;
805}
806
807# Write my local header to a file handle.
808# Returns a pair (AZ_OK, $headerSize) on success.
809sub _writeLocalFileHeader {
810 my $self = shift;
811 my $fh = shift;
812 my $refresh = @_ ? shift : 0;
813
814 my $zip64 = $self->zip64();
815 my $hasDataDescriptor = $self->hasDataDescriptor();
816
817 my $versionNeededToExtract = $self->versionNeededToExtract();
818 my $crc32;
819 my $compressedSize;
820 my $uncompressedSize;
821 my $localExtraField = $self->localExtraField();
822
823 if (! $zip64) {
824 if ($refresh) {
825 $crc32 = $self->crc32();
826 $compressedSize = $self->_writeOffset();
827 $uncompressedSize = $self->uncompressedSize();
828
829 # Handle a brain-dead corner case gracefully.
830 # Otherwise we a) would always need to write zip64
831 # format or b) re-write the complete member data on
832 # refresh (which might not always be possible).
833 if ($compressedSize > 0xffffffff) {
834 return _formatError('compressed size too large for refresh');
835 }
836 }
837 elsif ($hasDataDescriptor) {
838 $crc32 = 0;
839 $compressedSize = 0;
840 $uncompressedSize = 0;
841 }
842 else {
843 $crc32 = $self->crc32();
844 $compressedSize = $self->_writeOffset();
845 $uncompressedSize = $self->uncompressedSize();
846 }
847 }
848 else {
849 return _zip64NotSupported() unless ZIP64_SUPPORTED;
850
851 $versionNeededToExtract = 45 if ($versionNeededToExtract < 45);
852
853 my $zip64CompressedSize;
854 my $zip64UncompressedSize;
855 if ($refresh) {
856 $crc32 = $self->crc32();
857 $compressedSize = 0xffffffff;
858 $uncompressedSize = 0xffffffff;
859 $zip64CompressedSize = $self->_writeOffset();
860 $zip64UncompressedSize = $self->uncompressedSize();
861 }
862 elsif ($hasDataDescriptor) {
863 $crc32 = 0;
864 $compressedSize = 0xffffffff;
865 $uncompressedSize = 0xffffffff;
866 $zip64CompressedSize = 0;
867 $zip64UncompressedSize = 0;
868 }
869 else {
870 $crc32 = $self->crc32();
871 $compressedSize = 0xffffffff;
872 $uncompressedSize = 0xffffffff;
873 $zip64CompressedSize = $self->_writeOffset();
874 $zip64UncompressedSize = $self->uncompressedSize();
875 }
876
877 $localExtraField .= pack('S< S< Q< Q<',
878 0x0001, 16,
879 $zip64UncompressedSize,
880 $zip64CompressedSize);
881 }
882
883 my $fileNameLength = length($self->fileNameAsBytes());
884 my $localFieldLength = length($localExtraField);
885
88611µs my $signatureData = pack(SIGNATURE_FORMAT, LOCAL_FILE_HEADER_SIGNATURE);
# spent 1µs making 1 call to CORE::pack
887 $self->_print($fh, $signatureData)
888 or return _ioError("writing local header signature");
889
890 my $header =
891 pack(LOCAL_FILE_HEADER_FORMAT,
892 $versionNeededToExtract,
893 $self->{'bitFlag'},
894 $self->desiredCompressionMethod(),
895 $self->lastModFileDateTime(),
896 $crc32,
897 $compressedSize,
898 $uncompressedSize,
899 $fileNameLength,
900 $localFieldLength);
901 $self->_print($fh, $header)
902 or return _ioError("writing local header");
903
904 # Write these only if required
905 if (! $refresh || $zip64) {
906 if ($fileNameLength) {
907 $self->_print($fh, $self->fileNameAsBytes())
908 or return _ioError("writing local header filename");
909 }
910 if ($localFieldLength) {
911 $self->_print($fh, $localExtraField)
912 or return _ioError("writing local extra field");
913 }
914 }
915
916 return
917 (AZ_OK,
918 LOCAL_FILE_HEADER_LENGTH +
919 SIGNATURE_LENGTH +
920 $fileNameLength +
921 $localFieldLength);
922}
923
924# Re-writes the local file header with new crc32 and compressedSize fields.
925# To be called after writing the data stream.
926# Assumes that filename and extraField sizes didn't change since last written.
927sub _refreshLocalFileHeader {
928 my $self = shift;
929 my $fh = shift;
930
931 my $here = $fh->tell();
932 $fh->seek($self->writeLocalHeaderRelativeOffset(), IO::Seekable::SEEK_SET)
933 or return _ioError("seeking to rewrite local header");
934
935 my ($status, undef) = $self->_writeLocalFileHeader($fh, 1);
936 return $status if $status != AZ_OK;
937
938 $fh->seek($here, IO::Seekable::SEEK_SET)
939 or return _ioError("seeking after rewrite of local header");
940
941 return AZ_OK;
942}
943
944# Write central directory file header.
945# Returns a pair (AZ_OK, $headerSize) on success.
946sub _writeCentralDirectoryFileHeader {
947 my $self = shift;
948 my $fh = shift;
949 my $adz64m = shift; # $archiveDesiredZip64Mode
950
951 # (Re-)Determine whether to write zip64 format. Assume
952 # {'diskNumberStart'} is always zero.
953 my $zip64 = $adz64m == ZIP64_HEADERS
954 || $self->desiredZip64Mode() == ZIP64_HEADERS
955 || $self->_writeOffset() > 0xffffffff
956 || $self->uncompressedSize() > 0xffffffff
957 || $self->writeLocalHeaderRelativeOffset() > 0xffffffff;
958
959 $self->{'zip64'} ||= $zip64;
960
961 my $versionMadeBy = $self->versionMadeBy();
962 my $versionNeededToExtract = $self->versionNeededToExtract();
963 my $compressedSize = $self->_writeOffset();
964 my $uncompressedSize = $self->uncompressedSize();
965 my $localHeaderRelativeOffset = $self->writeLocalHeaderRelativeOffset();
966 my $cdExtraField = $self->cdExtraField();
967
968 if (!$zip64) {
969 # no-op
970 }
971 else {
972 return _zip64NotSupported() unless ZIP64_SUPPORTED;
973
974 $versionNeededToExtract = 45 if ($versionNeededToExtract < 45);
975
976 my $extraFieldFormat = '';
977 my @extraFieldValues = ();
978 my $extraFieldSize = 0;
979 if ($uncompressedSize > 0xffffffff) {
980 $extraFieldFormat .= 'Q< ';
981 push(@extraFieldValues, $uncompressedSize);
982 $extraFieldSize += 8;
983 $uncompressedSize = 0xffffffff;
984 }
985 if ($compressedSize > 0xffffffff) {
986 $extraFieldFormat .= 'Q< ';
987 push(@extraFieldValues, $compressedSize);
988 $extraFieldSize += 8;
989 $compressedSize = 0xffffffff;
990 }
991 # Avoid empty zip64 extended information extra fields
992 if ( $localHeaderRelativeOffset > 0xffffffff
993 || @extraFieldValues == 0) {
994 $extraFieldFormat .= 'Q< ';
995 push(@extraFieldValues, $localHeaderRelativeOffset);
996 $extraFieldSize += 8;
997 $localHeaderRelativeOffset = 0xffffffff;
998 }
999
1000 $cdExtraField .=
1001 pack("S< S< $extraFieldFormat",
1002 0x0001, $extraFieldSize,
1003 @extraFieldValues);
1004 }
1005
1006 my $fileNameLength = length($self->fileNameAsBytes());
1007 my $extraFieldLength = length($cdExtraField);
1008 my $fileCommentLength = length($self->fileComment());
1009
1010 my $sigData =
10111900ns pack(SIGNATURE_FORMAT, CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE);
# spent 900ns making 1 call to CORE::pack
1012 $self->_print($fh, $sigData)
1013 or return _ioError("writing central directory header signature");
1014
1015 my $header = pack(
1016 CENTRAL_DIRECTORY_FILE_HEADER_FORMAT,
1017 $versionMadeBy,
1018 $self->fileAttributeFormat(),
1019 $versionNeededToExtract,
1020 $self->bitFlag(),
1021 $self->desiredCompressionMethod(),
1022 $self->lastModFileDateTime(),
1023 $self->crc32(), # these three fields should have been updated
1024 $compressedSize, # by writing the data stream out
1025 $uncompressedSize, #
1026 $fileNameLength,
1027 $extraFieldLength,
1028 $fileCommentLength,
1029 0, # {'diskNumberStart'},
1030 $self->internalFileAttributes(),
1031 $self->externalFileAttributes(),
1032 $localHeaderRelativeOffset);
1033
1034 $self->_print($fh, $header)
1035 or return _ioError("writing central directory header");
1036
1037 if ($fileNameLength) {
1038 $self->_print($fh, $self->fileNameAsBytes())
1039 or return _ioError("writing central directory header signature");
1040 }
1041 if ($extraFieldLength) {
1042 $self->_print($fh, $cdExtraField)
1043 or return _ioError("writing central directory extra field");
1044 }
1045 if ($fileCommentLength) {
1046 $self->_print($fh, $self->fileComment())
1047 or return _ioError("writing central directory file comment");
1048 }
1049
1050 # Update object members with information which might have
1051 # changed while writing this member. We already did the
1052 # zip64 flag. We must not update the extra fields with any
1053 # zip64 information, since we consider that internal.
1054 $self->{'versionNeededToExtract'} = $versionNeededToExtract;
1055 $self->{'compressedSize'} = $self->_writeOffset();
1056
1057 return
1058 (AZ_OK,
1059 CENTRAL_DIRECTORY_FILE_HEADER_LENGTH +
1060 SIGNATURE_LENGTH +
1061 $fileNameLength +
1062 $extraFieldLength +
1063 $fileCommentLength)
1064}
1065
1066# This writes a data descriptor to the given file handle.
1067# Assumes that crc32, writeOffset, and uncompressedSize are
1068# set correctly (they should be after a write).
1069# Returns a pair (AZ_OK, $dataDescriptorSize) on success.
1070# Further, the local file header should have the
1071# GPBF_HAS_DATA_DESCRIPTOR_MASK bit set.
1072sub _writeDataDescriptor {
1073 my $self = shift;
1074 my $fh = shift;
1075
1076 my $descriptor;
1077 if (! $self->zip64()) {
1078 $descriptor =
1079 pack(SIGNATURE_FORMAT . DATA_DESCRIPTOR_FORMAT,
1080 DATA_DESCRIPTOR_SIGNATURE,
1081 $self->crc32(),
1082 $self->_writeOffset(), # compressed size
1083 $self->uncompressedSize());
1084 }
1085 else {
1086 return _zip64NotSupported() unless ZIP64_SUPPORTED;
1087
1088 $descriptor =
1089 pack(SIGNATURE_FORMAT . DATA_DESCRIPTOR_ZIP64_FORMAT,
1090 DATA_DESCRIPTOR_SIGNATURE,
1091 $self->crc32(),
1092 $self->_writeOffset(), # compressed size
1093 $self->uncompressedSize());
1094 }
1095
1096 $self->_print($fh, $descriptor)
1097 or return _ioError("writing data descriptor");
1098
1099 return (AZ_OK, length($descriptor));
1100}
1101
1102
# spent 13.0ms (90µs+13.0) within Archive::Zip::Member::readChunk which was called 7 times, avg 1.86ms/call: # 7 times (90µs+13.0ms) by Archive::Zip::Member::contents at line 1298, avg 1.86ms/call
sub readChunk {
110371µs my $self = shift;
110473µs my $chunkSize = (ref($_[0]) eq 'HASH') ? $_[0]->{chunkSize} : $_[0];
1105
110675µs724µs if ($self->readIsDone()) {
# spent 24µs making 7 calls to Archive::Zip::Member::readIsDone, avg 3µs/call
1107 $self->endRead();
1108 my $dummy = '';
1109 return (\$dummy, AZ_STREAM_END);
1110 }
1111
111272µs $chunkSize = $Archive::Zip::ChunkSize if not defined($chunkSize);
111374µs71µs $chunkSize = $self->_readDataRemaining()
# spent 1µs making 7 calls to Archive::Zip::Member::_readDataRemaining, avg 186ns/call
1114 if $chunkSize > $self->_readDataRemaining();
1115
111671µs my $buffer = '';
11177400ns my $outputRef;
111877µs7591µs my ($bytesRead, $status) = $self->_readRawChunk(\$buffer, $chunkSize);
# spent 591µs making 7 calls to Archive::Zip::ZipFileMember::_readRawChunk, avg 84µs/call
111971µs return (\$buffer, $status) unless $status == AZ_OK;
1120
112177µs75µs $buffer && $self->isEncrypted and $buffer = $self->_decode($buffer);
# spent 5µs making 7 calls to Archive::Zip::Member::isEncrypted, avg 686ns/call
112272µs $self->{'readDataRemaining'} -= $bytesRead;
112372µs $self->{'readOffset'} += $bytesRead;
1124
112574µs72µs if ($self->compressionMethod() == COMPRESSION_STORED) {
# spent 2µs making 7 calls to Archive::Zip::Member::compressionMethod, avg 314ns/call
1126 $self->{'crc32'} = $self->computeCRC32($buffer, $self->{'crc32'});
1127 }
1128
112978µs712.3ms ($outputRef, $status) = &{$self->{'chunkHandler'}}($self, \$buffer);
# spent 12.3ms making 7 calls to Archive::Zip::Member::_inflateChunk, avg 1.76ms/call
113075µs $self->{'writeOffset'} += length($$outputRef);
1131
113278µs1427µs $self->endRead()
# spent 14µs making 7 calls to Archive::Zip::FileMember::endRead, avg 2µs/call # spent 13µs making 7 calls to Archive::Zip::Member::readIsDone, avg 2µs/call
1133 if $self->readIsDone();
1134
113578µs return ($outputRef, $status);
1136}
1137
1138# Read the next raw chunk of my data. Subclasses MUST implement.
1139# my ( $bytesRead, $status) = $self->_readRawChunk( \$buffer, $chunkSize );
1140sub _readRawChunk {
1141 my $self = shift;
1142 return $self->_subclassResponsibility();
1143}
1144
1145# A place holder to catch rewindData errors if someone ignores
1146# the error code.
1147sub _noChunk {
1148 my $self = shift;
1149 return (\undef, _error("trying to copy chunk when init failed"));
1150}
1151
1152# Basically a no-op so that I can have a consistent interface.
1153# ( $outputRef, $status) = $self->_copyChunk( \$buffer );
1154sub _copyChunk {
1155 my ($self, $dataRef) = @_;
1156 return ($dataRef, AZ_OK);
1157}
1158
1159# ( $outputRef, $status) = $self->_deflateChunk( \$buffer );
1160sub _deflateChunk {
1161 my ($self, $buffer) = @_;
1162 my ($status) = $self->_deflater()->deflate($buffer, my $out);
1163
1164 if ($self->_readDataRemaining() == 0) {
1165 my $extraOutput;
1166 ($status) = $self->_deflater()->flush($extraOutput);
1167 $out .= $extraOutput;
1168 $self->endRead();
1169 return (\$out, AZ_STREAM_END);
1170 } elsif ($status == Z_OK) {
1171 return (\$out, AZ_OK);
1172 } else {
1173 $self->endRead();
1174 my $retval = _error('deflate error', $status);
1175 my $dummy = '';
1176 return (\$dummy, $retval);
1177 }
1178}
1179
1180# ( $outputRef, $status) = $self->_inflateChunk( \$buffer );
1181
# spent 12.3ms (78µs+12.2) within Archive::Zip::Member::_inflateChunk which was called 7 times, avg 1.76ms/call: # 7 times (78µs+12.2ms) by Archive::Zip::Member::readChunk at line 1129, avg 1.76ms/call
sub _inflateChunk {
118272µs my ($self, $buffer) = @_;
1183712.1ms1412.1ms my ($status) = $self->_inflater()->inflate($buffer, my $out);
# spent 12.1ms making 7 calls to Compress::Raw::Zlib::inflateStream::inflate, avg 1.73ms/call # spent 3µs making 7 calls to Archive::Zip::Member::_inflater, avg 457ns/call
11847600ns my $retval;
1185717µs14109µs $self->endRead() unless $status == Z_OK;
# spent 102µs making 7 calls to Archive::Zip::FileMember::endRead, avg 15µs/call # spent 8µs making 7 calls to Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122], avg 1µs/call
1186712µs1416µs if ($status == Z_OK || $status == Z_STREAM_END) {
# spent 10µs making 1 call to Compress::Raw::Zlib::AUTOLOAD # spent 6µs making 13 calls to Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122], avg 469ns/call
118774µs72µs $retval = ($status == Z_STREAM_END) ? AZ_STREAM_END : AZ_OK;
# spent 2µs making 7 calls to Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122], avg 214ns/call
1188712µs return (\$out, $retval);
1189 } else {
1190 $retval = _error('inflate error', $status);
1191 my $dummy = '';
1192 return (\$dummy, $retval);
1193 }
1194}
1195
1196
# spent 912µs (136+775) within Archive::Zip::Member::rewindData which was called 7 times, avg 130µs/call: # 7 times (136µs+775µs) by Archive::Zip::ZipFileMember::rewindData at line 440 of Archive/Zip/ZipFileMember.pm, avg 130µs/call
sub rewindData {
11977500ns my $self = shift;
11987700ns my $status;
1199
1200 # set to trap init errors
1201718µs75µs $self->{'chunkHandler'} = $self->can('_noChunk');
# spent 5µs making 7 calls to UNIVERSAL::can, avg 771ns/call
1202
1203 # Work around WinZip bug with 0-length DEFLATED files
120474µs72µs $self->desiredCompressionMethod(COMPRESSION_STORED)
# spent 2µs making 7 calls to Archive::Zip::Member::uncompressedSize, avg 243ns/call
1205 if $self->uncompressedSize() == 0;
1206
1207 # assume that we're going to read the whole file, and compute the CRC anew.
120874µs73µs $self->{'crc32'} = 0
# spent 3µs making 7 calls to Archive::Zip::Member::compressionMethod, avg 371ns/call
1209 if ($self->compressionMethod() == COMPRESSION_STORED);
1210
1211 # These are the only combinations of methods we deal with right now.
1212710µs218µs if ( $self->compressionMethod() == COMPRESSION_STORED
# spent 6µs making 7 calls to Archive::Zip::Member::desiredCompressionMethod, avg 843ns/call # spent 2µs making 14 calls to Archive::Zip::Member::compressionMethod, avg 150ns/call
1213 and $self->desiredCompressionMethod() == COMPRESSION_DEFLATED) {
1214 ($self->{'deflater'}, $status) = Compress::Raw::Zlib::Deflate->new(
1215 '-Level' => $self->desiredCompressionLevel(),
1216 '-WindowBits' => -MAX_WBITS(), # necessary magic
1217 '-Bufsize' => $Archive::Zip::ChunkSize,
1218 @_
1219 ); # pass additional options
1220 return _error('deflateInit error:', $status)
1221 unless $status == Z_OK;
1222 $self->{'chunkHandler'} = $self->can('_deflateChunk');
1223 } elsif ($self->compressionMethod() == COMPRESSION_DEFLATED
1224 and $self->desiredCompressionMethod() == COMPRESSION_STORED) {
1225729µs14728µs ($self->{'inflater'}, $status) = Compress::Raw::Zlib::Inflate->new(
# spent 722µs making 7 calls to Compress::Raw::Zlib::Inflate::new, avg 103µs/call # spent 6µs making 7 calls to Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122], avg 829ns/call
1226 '-WindowBits' => -MAX_WBITS(), # necessary magic
1227 '-Bufsize' => $Archive::Zip::ChunkSize,
1228 @_
1229 ); # pass additional options
123079µs717µs return _error('inflateInit error:', $status)
# spent 13µs making 1 call to Compress::Raw::Zlib::AUTOLOAD # spent 4µs making 6 calls to Compress::Raw::Zlib::__ANON__[Compress/Raw/Zlib.pm:122], avg 733ns/call
1231 unless $status == Z_OK;
1232715µs75µs $self->{'chunkHandler'} = $self->can('_inflateChunk');
# spent 5µs making 7 calls to UNIVERSAL::can, avg 743ns/call
1233 } elsif ($self->compressionMethod() == $self->desiredCompressionMethod()) {
1234 $self->{'chunkHandler'} = $self->can('_copyChunk');
1235 } else {
1236 return _error(
1237 sprintf(
1238 "Unsupported compression combination: read %d, write %d",
1239 $self->compressionMethod(),
1240 $self->desiredCompressionMethod()));
1241 }
1242
1243712µs147µs $self->{'readDataRemaining'} =
# spent 4µs making 7 calls to Archive::Zip::Member::compressedSize, avg 514ns/call # spent 3µs making 7 calls to Archive::Zip::Member::compressionMethod, avg 457ns/call
1244 ($self->compressionMethod() == COMPRESSION_STORED)
1245 ? $self->uncompressedSize()
1246 : $self->compressedSize();
124772µs $self->{'dataEnded'} = 0;
124872µs $self->{'readOffset'} = 0;
1249
125078µs return AZ_OK;
1251}
1252
1253
# spent 72µs (47+25) within Archive::Zip::Member::endRead which was called 31 times, avg 2µs/call: # 31 times (47µs+25µs) by Archive::Zip::FileMember::endRead at line 52 of Archive/Zip/FileMember.pm, avg 2µs/call
sub endRead {
1254312µs my $self = shift;
12553146µs725µs delete $self->{'inflater'};
# spent 25µs making 7 calls to Compress::Raw::Zlib::inflateStream::DESTROY, avg 4µs/call
1256314µs delete $self->{'deflater'};
1257316µs $self->{'dataEnded'} = 1;
1258315µs $self->{'readDataRemaining'} = 0;
12593122µs return AZ_OK;
1260}
1261
1262
# spent 37µs (29+8) within Archive::Zip::Member::readIsDone which was called 14 times, avg 3µs/call: # 7 times (20µs+5µs) by Archive::Zip::Member::readChunk at line 1106, avg 3µs/call # 7 times (9µs+3µs) by Archive::Zip::Member::readChunk at line 1132, avg 2µs/call
sub readIsDone {
1263142µs my $self = shift;
12641425µs218µs return ($self->_dataEnded() or !$self->_readDataRemaining());
# spent 7µs making 14 calls to Archive::Zip::Member::_dataEnded, avg 493ns/call # spent 1µs making 7 calls to Archive::Zip::Member::_readDataRemaining, avg 186ns/call
1265}
1266
1267
# spent 19.1ms (4.16+15.0) within Archive::Zip::Member::contents which was called 7 times, avg 2.73ms/call: # 7 times (4.16ms+15.0ms) by Spreadsheet::ParseXLSX::_zip_file_member at line 1045 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm, avg 2.73ms/call
sub contents {
12687800ns my $self = shift;
12697900ns my $newContents = shift;
1270
127172µs if (defined($newContents)) {
1272
1273 # Change our type and ensure that succeeded to avoid
1274 # endless recursion
1275 $self->_become('Archive::Zip::StringMember');
1276 $self->_ISA('Archive::Zip::StringMember') or
1277 return
1278 wantarray
1279 ? (undef, $self->_error('becoming Archive::Zip::StringMember'))
1280 : undef;
1281
1282 # Now call the subclass contents method
1283 my $retval =
1284 $self->contents(pack('C0a*', $newContents)); # in case of Unicode
1285
1286 return wantarray ? ($retval, AZ_OK) : $retval;
1287 } else {
128875µs730µs my $oldCompression =
# spent 30µs making 7 calls to Archive::Zip::Member::desiredCompressionMethod, avg 4µs/call
1289 $self->desiredCompressionMethod(COMPRESSION_STORED);
129077µs71.85ms my $status = $self->rewindData(@_);
# spent 1.85ms making 7 calls to Archive::Zip::ZipFileMember::rewindData, avg 264µs/call
129172µs if ($status != AZ_OK) {
1292 $self->endRead();
1293 return wantarray ? (undef, $status) : undef;
1294 }
129572µs my $retval = '';
129673µs while ($status == AZ_OK) {
12977500ns my $ref;
1298713µs1413.1ms ($ref, $status) = $self->readChunk($self->_readDataRemaining());
# spent 13.0ms making 7 calls to Archive::Zip::Member::readChunk, avg 1.86ms/call # spent 4µs making 7 calls to Archive::Zip::Member::_readDataRemaining, avg 543ns/call
1299
1300 # did we get it in one chunk?
130174.09ms73µs if (length($$ref) == $self->uncompressedSize()) {
# spent 3µs making 7 calls to Archive::Zip::Member::uncompressedSize, avg 429ns/call
1302 $retval = $$ref;
1303 } else {
1304 $retval .= $$ref
1305 }
1306 }
130776µs715µs $self->desiredCompressionMethod($oldCompression);
# spent 15µs making 7 calls to Archive::Zip::Member::desiredCompressionMethod, avg 2µs/call
130873µs714µs $self->endRead();
# spent 14µs making 7 calls to Archive::Zip::FileMember::endRead, avg 2µs/call
130972µs $status = AZ_OK if $status == AZ_STREAM_END;
13107800ns $retval = undef unless $status == AZ_OK;
1311711µs return wantarray ? ($retval, $status) : $retval;
1312 }
1313}
1314
1315sub extractToFileHandle {
1316 my $self = shift;
1317 # This can be the link name when "extracting" symbolic links
1318 my $fhOrName = (ref($_[0]) eq 'HASH') ? shift->{fileHandle} : shift;
1319 _binmode($fhOrName) if ref($fhOrName);
1320 my $oldCompression = $self->desiredCompressionMethod(COMPRESSION_STORED);
1321 my $status = $self->rewindData(@_);
1322 $status = $self->_writeData($fhOrName) if $status == AZ_OK;
1323 $self->desiredCompressionMethod($oldCompression);
1324 $self->endRead();
1325 return $status;
1326}
1327
1328# write local header and data stream to file handle.
1329# Returns a pair ($status, $memberSize) if successful.
1330# Stores the offset to the start of the header in my
1331# writeLocalHeaderRelativeOffset member.
1332sub _writeToFileHandle {
1333 my $self = shift;
1334 my $fh = shift;
1335 my $fhIsSeekable = shift;
1336 my $offset = shift;
1337 my $adz64m = shift; # $archiveDesiredZip64Mode
1338
1339 return _error("no member name given for $self")
1340 if $self->fileName() eq '';
1341
1342 $self->{'writeLocalHeaderRelativeOffset'} = $offset;
1343
1344 # Determine if I need to refresh the header in a second pass
1345 # later. If in doubt, I'd rather refresh, since it does not
1346 # seem to be worth the hassle to save the extra seeks and
1347 # writes. In addition, having below condition independent of
1348 # any specific compression methods helps me piping through
1349 # members with unknown compression methods unchanged. See
1350 # test t/26_bzip2.t for details.
1351 my $headerFieldsUnknown = $self->uncompressedSize() > 0;
1352
1353 # Determine if I need to write a data descriptor
1354 # I need to do this if I can't refresh the header
1355 # and I don't know compressed size or crc32 fields.
1356 my $shouldWriteDataDescriptor =
1357 ($headerFieldsUnknown and not $fhIsSeekable);
1358
1359 $self->hasDataDescriptor(1)
1360 if ($shouldWriteDataDescriptor);
1361
1362 # Determine whether to write zip64 format
1363 my $zip64 = $adz64m == ZIP64_HEADERS
1364 || $self->desiredZip64Mode() == ZIP64_HEADERS
1365 || $self->uncompressedSize() > 0xffffffff;
1366
1367 $self->{'zip64'} ||= $zip64;
1368
1369 $self->{'writeOffset'} = 0;
1370
1371 my $status = $self->rewindData();
1372 return $status if $status != AZ_OK;
1373
1374 my $memberSize;
1375 ($status, $memberSize) = $self->_writeLocalFileHeader($fh);
1376 return $status if $status != AZ_OK;
1377
1378 $status = $self->_writeData($fh);
1379 return $status if $status != AZ_OK;
1380 $memberSize += $self->_writeOffset();
1381
1382 if ($self->hasDataDescriptor()) {
1383 my $ddSize;
1384 ($status, $ddSize) = $self->_writeDataDescriptor($fh);
1385 $memberSize += $ddSize;
1386 } elsif ($headerFieldsUnknown) {
1387 $status = $self->_refreshLocalFileHeader($fh);
1388 }
1389 return $status if $status != AZ_OK;
1390
1391 return ($status, $memberSize);
1392}
1393
1394# Copy my (possibly compressed) data to given file handle.
1395# Returns C<AZ_OK> on success
1396sub _writeData {
1397 my $self = shift;
1398 my $fhOrName = shift;
1399
1400 if ($self->isSymbolicLink() && OS_SUPPORTS_SYMLINK) {
1401 my $chunkSize = $Archive::Zip::ChunkSize;
1402 my ($outRef, $status) = $self->readChunk($chunkSize);
1403 symlink($$outRef, $fhOrName)
1404 or return _ioError("creating symbolic link");
1405 } else {
1406 return AZ_OK if ($self->uncompressedSize() == 0);
1407 my $status;
1408 my $chunkSize = $Archive::Zip::ChunkSize;
1409 while ($self->_readDataRemaining() > 0) {
1410 my $outRef;
1411 ($outRef, $status) = $self->readChunk($chunkSize);
1412 return $status if ($status != AZ_OK and $status != AZ_STREAM_END);
1413
1414 if (length($$outRef) > 0) {
1415 $self->_print($fhOrName, $$outRef)
1416 or return _ioError("write error during copy");
1417 }
1418
1419 last if $status == AZ_STREAM_END;
1420 }
1421 }
1422 return AZ_OK;
1423}
1424
1425# Return true if I depend on the named file
1426sub _usesFileNamed {
1427 return 0;
1428}
1429
1430# ##############################################################################
1431#
1432# Decrypt section
1433#
1434# H.Merijn Brand (Tux) 2011-06-28
1435#
1436# ##############################################################################
1437
1438# This code is derived from the crypt source of unzip-6.0 dated 05 Jan 2007
1439# Its license states:
1440#
1441# --8<---
1442# Copyright (c) 1990-2007 Info-ZIP. All rights reserved.
1443
1444# See the accompanying file LICENSE, version 2005-Feb-10 or later
1445# (the contents of which are also included in (un)zip.h) for terms of use.
1446# If, for some reason, all these files are missing, the Info-ZIP license
1447# also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
1448#
1449# crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h]
1450
1451# The main encryption/decryption source code for Info-Zip software was
1452# originally written in Europe. To the best of our knowledge, it can
1453# be freely distributed in both source and object forms from any country,
1454# including the USA under License Exception TSU of the U.S. Export
1455# Administration Regulations (section 740.13(e)) of 6 June 2002.
1456
1457# NOTE on copyright history:
1458# Previous versions of this source package (up to version 2.8) were
1459# not copyrighted and put in the public domain. If you cannot comply
1460# with the Info-Zip LICENSE, you may want to look for one of those
1461# public domain versions.
1462#
1463# This encryption code is a direct transcription of the algorithm from
1464# Roger Schlafly, described by Phil Katz in the file appnote.txt. This
1465# file (appnote.txt) is distributed with the PKZIP program (even in the
1466# version without encryption capabilities).
1467# -->8---
1468
1469# As of January 2000, US export regulations were amended to allow export
1470# of free encryption source code from the US. As of June 2002, these
1471# regulations were further relaxed to allow export of encryption binaries
1472# associated with free encryption source code. The Zip 2.31, UnZip 5.52
1473# and Wiz 5.02 archives now include full crypto source code. As of the
1474# Zip 2.31 release, all official binaries include encryption support; the
1475# former "zcr" archives ceased to exist.
1476# (Note that restrictions may still exist in other countries, of course.)
1477
1478# For now, we just support the decrypt stuff
1479# All below methods are supposed to be private
1480
1481# use Data::Peek;
1482
14831200nsmy @keys;
148417µsmy @crct = do {
14851100ns my $xor = 0xedb88320;
1486113µs my @crc = (0) x 1024;
1487
1488 # generate a crc for every 8-bit value
14891900ns foreach my $n (0 .. 255) {
149025615µs my $c = $n;
1491256274µs $c = $c & 1 ? $xor ^ ($c >> 1) : $c >> 1 for 1 .. 8;
149225698µs25680µs $crc[$n] = _revbe($c);
# spent 80µs making 256 calls to Archive::Zip::Member::_revbe, avg 314ns/call
1493 }
1494
1495 # generate crc for each value followed by one, two, and three zeros */
14961500ns foreach my $n (0 .. 255) {
149725638µs my $c = ($crc[($crc[$n] >> 24) ^ 0] ^ ($crc[$n] << 8)) & 0xffffffff;
1498256144µs $crc[$_ * 256 + $n] = $c for 1 .. 3;
1499 }
15001311µs1024318µs map { _revbe($crc[$_]) } 0 .. 1023;
# spent 318µs making 1024 calls to Archive::Zip::Member::_revbe, avg 310ns/call
1501};
1502
1503sub _crc32 {
1504 my ($c, $b) = @_;
1505 return ($crct[($c ^ $b) & 0xff] ^ ($c >> 8));
1506} # _crc32
1507
1508
# spent 398µs within Archive::Zip::Member::_revbe which was called 1280 times, avg 311ns/call: # 1024 times (318µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 1500, avg 310ns/call # 256 times (80µs+0s) by Spreadsheet::ParseXLSX::BEGIN@11 at line 1492, avg 314ns/call
sub _revbe {
1509128086µs my $w = shift;
15101280833µs return (($w >> 24) +
1511 (($w >> 8) & 0xff00) +
1512 (($w & 0xff00) << 8) +
1513 (($w & 0xff) << 24));
1514} # _revbe
1515
1516sub _update_keys {
15172305µs2121µs
# spent 119µs (117+2) within Archive::Zip::Member::BEGIN@1517 which was called: # once (117µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@11 at line 1517
use integer;
# spent 119µs making 1 call to Archive::Zip::Member::BEGIN@1517 # spent 2µs making 1 call to integer::import
1518 my $c = shift; # signed int
1519 $keys[0] = _crc32($keys[0], $c);
1520 $keys[1] = (($keys[1] + ($keys[0] & 0xff)) * 0x08088405 + 1) & 0xffffffff;
1521 my $keyshift = $keys[1] >> 24;
1522 $keys[2] = _crc32($keys[2], $keyshift);
1523} # _update_keys
1524
1525sub _zdecode ($) {
1526 my $c = shift;
1527 my $t = ($keys[2] & 0xffff) | 2;
1528 _update_keys($c ^= ((($t * ($t ^ 1)) >> 8) & 0xff));
1529 return $c;
1530} # _zdecode
1531
1532sub _decode {
1533 my $self = shift;
1534 my $buff = shift;
1535
1536 $self->isEncrypted or return $buff;
1537
1538 my $pass = $self->password;
1539 defined $pass or return "";
1540
1541 @keys = (0x12345678, 0x23456789, 0x34567890);
1542 _update_keys($_) for unpack "C*", $pass;
1543
1544 # DDumper { uk => [ @keys ] };
1545
1546 my $head = substr $buff, 0, 12, "";
1547 my @head = map { _zdecode($_) } unpack "C*", $head;
1548 my $x =
1549 $self->{externalFileAttributes}
1550 ? ($self->{lastModFileDateTime} >> 8) & 0xff
1551 : $self->{crc32} >> 24;
1552 $head[-1] == $x or return ""; # Password fail
1553
1554 # Worth checking ...
1555 $self->{crc32c} = (unpack LOCAL_FILE_HEADER_FORMAT, pack "C*", @head)[3];
1556
1557 # DHexDump ($buff);
1558 $buff = pack "C*" => map { _zdecode($_) } unpack "C*" => $buff;
1559
1560 # DHexDump ($buff);
1561 return $buff;
1562} # _decode
1563
1564113µs1;
 
# spent 3µs within Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS which was called 11 times, avg 236ns/call: # 11 times (3µs+0s) by Archive::Zip::Member::new at line 137, avg 236ns/call
sub Archive::Zip::Member::DEFAULT_FILE_PERMISSIONS; # xsub
# spent 400ns within Archive::Zip::Member::__ANON__ which was called: # once (400ns+0s) by Archive::Zip::Member::BEGIN@578 at line 578
sub Archive::Zip::Member::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Util-Trace-pm-36-line.html0000644000175000017500000004107414576335353023573 0ustar michamicha Profile of Test2/Util/Trace.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Util/Trace.pm
StatementsExecuted 8 statements in 57µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs29µsTest2::Util::Trace::::BEGIN@4Test2::Util::Trace::BEGIN@4
1114µs5µsTest2::Util::Trace::::BEGIN@5Test2::Util::Trace::BEGIN@5
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Util::Trace;
21200nsrequire Test2::EventFacet::Trace;
3
4218µs248µs
# spent 29µs (11+18) within Test2::Util::Trace::BEGIN@4 which was called: # once (11µs+18µs) by Test2::API::BEGIN@86 at line 4
use warnings;
# spent 29µs making 1 call to Test2::Util::Trace::BEGIN@4 # spent 18µs making 1 call to warnings::import
5231µs26µs
# spent 5µs (4+1) within Test2::Util::Trace::BEGIN@5 which was called: # once (4µs+1µs) by Test2::API::BEGIN@86 at line 5
use strict;
# spent 5µs making 1 call to Test2::Util::Trace::BEGIN@5 # spent 1µs making 1 call to strict::import
6
716µsour @ISA = ('Test2::EventFacet::Trace');
8
91200nsour $VERSION = '1.302198';
10
1112µs1;
12
13__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Graphics-ColorUtils-pm-117-line.html0000644000175000017500000053443414576335353024547 0ustar michamicha Profile of Graphics/ColorUtils.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Graphics/ColorUtils.pm
StatementsExecuted 18 statements in 3.38ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111235µs235µsGraphics::ColorUtils::::BEGIN@492Graphics::ColorUtils::BEGIN@492
111181µs181µsGraphics::ColorUtils::::BEGIN@242Graphics::ColorUtils::BEGIN@242
11110µs10µsGraphics::ColorUtils::::BEGIN@4Graphics::ColorUtils::BEGIN@4
1114µs23µsGraphics::ColorUtils::::BEGIN@8Graphics::ColorUtils::BEGIN@8
1114µs5µsGraphics::ColorUtils::::BEGIN@5Graphics::ColorUtils::BEGIN@5
1113µs18µsGraphics::ColorUtils::::BEGIN@6Graphics::ColorUtils::BEGIN@6
0000s0sGraphics::ColorUtils::::_fmtGraphics::ColorUtils::_fmt
0000s0sGraphics::ColorUtils::::_normalize_nameGraphics::ColorUtils::_normalize_name
0000s0sGraphics::ColorUtils::::_valueGraphics::ColorUtils::_value
0000s0sGraphics::ColorUtils::::available_gradientsGraphics::ColorUtils::available_gradients
0000s0sGraphics::ColorUtils::::available_namesGraphics::ColorUtils::available_names
0000s0sGraphics::ColorUtils::::cmy2rgbGraphics::ColorUtils::cmy2rgb
0000s0sGraphics::ColorUtils::::get_default_namespaceGraphics::ColorUtils::get_default_namespace
0000s0sGraphics::ColorUtils::::grad2rgbGraphics::ColorUtils::grad2rgb
0000s0sGraphics::ColorUtils::::gradientGraphics::ColorUtils::gradient
0000s0sGraphics::ColorUtils::::hls2rgbGraphics::ColorUtils::hls2rgb
0000s0sGraphics::ColorUtils::::hsv2rgbGraphics::ColorUtils::hsv2rgb
0000s0sGraphics::ColorUtils::::name2rgbGraphics::ColorUtils::name2rgb
0000s0sGraphics::ColorUtils::::register_gradientGraphics::ColorUtils::register_gradient
0000s0sGraphics::ColorUtils::::register_nameGraphics::ColorUtils::register_name
0000s0sGraphics::ColorUtils::::rgb2cmyGraphics::ColorUtils::rgb2cmy
0000s0sGraphics::ColorUtils::::rgb2hlsGraphics::ColorUtils::rgb2hls
0000s0sGraphics::ColorUtils::::rgb2hsvGraphics::ColorUtils::rgb2hsv
0000s0sGraphics::ColorUtils::::rgb2yiqGraphics::ColorUtils::rgb2yiq
0000s0sGraphics::ColorUtils::::set_default_namespaceGraphics::ColorUtils::set_default_namespace
0000s0sGraphics::ColorUtils::::yiq2rgbGraphics::ColorUtils::yiq2rgb
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2package Graphics::ColorUtils;
3
4226µs110µs
# spent 10µs within Graphics::ColorUtils::BEGIN@4 which was called: # once (10µs+0s) by Spreadsheet::ParseXLSX::BEGIN@12 at line 4
use 5.008003;
# spent 10µs making 1 call to Graphics::ColorUtils::BEGIN@4
5214µs26µs
# spent 5µs (4+1) within Graphics::ColorUtils::BEGIN@5 which was called: # once (4µs+1µs) by Spreadsheet::ParseXLSX::BEGIN@12 at line 5
use strict;
# spent 5µs making 1 call to Graphics::ColorUtils::BEGIN@5 # spent 1µs making 1 call to strict::import
6218µs234µs
# spent 18µs (3+15) within Graphics::ColorUtils::BEGIN@6 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@12 at line 6
use warnings;
# spent 18µs making 1 call to Graphics::ColorUtils::BEGIN@6 # spent 15µs making 1 call to warnings::import
7
821.60ms242µs
# spent 23µs (4+19) within Graphics::ColorUtils::BEGIN@8 which was called: # once (4µs+19µs) by Spreadsheet::ParseXLSX::BEGIN@12 at line 8
use Carp;
# spent 23µs making 1 call to Graphics::ColorUtils::BEGIN@8 # spent 19µs making 1 call to Exporter::import
9
101500nsrequire Exporter;
11
1215µsour @ISA = qw(Exporter);
13
1412µsour %EXPORT_TAGS = ( 'gradients' => [ qw( gradient
15 grad2rgb
16 available_gradients
17 register_gradient) ],
18 'names' => [ qw( name2rgb
19 available_names
20 register_name
21 set_default_namespace
22 get_default_namespace ) ],
23 'all' => [ qw( rgb2yiq yiq2rgb
24 rgb2cmy cmy2rgb
25 rgb2hls hls2rgb
26 rgb2hsv hsv2rgb
27 gradient
28 grad2rgb
29 available_gradients
30 register_gradient
31 name2rgb
32 available_names
33 register_name
34 set_default_namespace
35 get_default_namespace ) ],
36 );
37
3811µsour @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
39
401500nsour @EXPORT = qw( rgb2yiq yiq2rgb
41 rgb2cmy cmy2rgb
42 rgb2hls hls2rgb
43 rgb2hsv hsv2rgb );
44
451200nsour $VERSION = '0.17';
46
47# ==================================================
48# ++++++++++++++++++++++++++++++++++++++++++++++++++
49# ==================================================
50
51# ==================================================
52# Utility
53
54# Takes a (r,g,b) triple of numbers (possibly floats) and returns
55# - a string like '#33FF21' in scalar context
56# - a triple of corresponding integers in array context
57sub _fmt {
58 return wantarray ? map { int } @_ : sprintf( "#%02x%02x%02x", @_ );
59}
60
61# ==================================================
62# YIQ
63
64sub rgb2yiq {
65 # $r, $g, $b : 0..255
66 my ( $r, $g, $b ) = map { $_/255.0 } @_; # Scale RGB to 0..1
67
68 my $y = 0.299*$r + 0.587*$g + 0.114*$b;
69 my $i = 0.596*$r - 0.275*$g - 0.321*$b;
70 my $q = 0.212*$r - 0.523*$g + 0.311*$b;
71
72 return ( $y, $i, $q );
73}
74
75sub yiq2rgb {
76 # $y, $i, $q : 0..1
77 my ( $y, $i, $q ) = @_;
78
79 my $r = 255.0*( $y + 0.956*$i + 0.621*$q );
80 my $g = 255.0*( $y - 0.272*$i - 0.647*$q );
81 my $b = 255.0*( $y - 1.105*$i + 1.705*$q );
82
83 return _fmt( $r, $g, $b );
84}
85
86# ==================================================
87# CMY
88
89sub rgb2cmy {
90 # $r, $g, $b : 0..255
91 my ( $r, $g, $b ) = map { $_/255.0 } @_; # Scale RGB to 0..1
92
93 return ( 1.0 - $r, 1.0 - $g, 1.0 - $b );
94}
95
96sub cmy2rgb {
97 # $c, $m, $y : 0..1
98 my ( $c, $m, $y ) = @_;
99
100 return _fmt( 255*(1.0-$c), 255*(1.0-$m), 255*(1.0-$y) );
101}
102
103# ==================================================
104# HLS
105
106# Foley, van Dam, et al:
107# Computer Grapics-Principles and Practice (1990) p595f
108
109sub rgb2hls {
110 # $r, $g, $b : 0..255
111 # Note special name '$bb' to avoid conflict with ($a,$b) in sort()
112 my ( $r, $g, $bb ) = map { $_/255.0 } @_; # Scale RGB to 0..1
113
114 my ( $minc, $maxc ) = ( sort { $a <=> $b } ( $r, $g, $bb ) )[0,2];
115
116 my $m = $minc + $maxc; # "Mean"
117
118 if( $maxc == $minc ) { return ( 0, 0.5*$m, 0 ); } # Achromatic case
119
120 my $d = $maxc - $minc; # "Delta"
121 my $s = ( $m <= 1.0 ) ? $d/$m : $d/(2.0-$m ); # Saturation
122
123 my $h = 0; # Hue
124 if( $r == $maxc ) { $h = ( $g-$bb )/$d; }
125 elsif( $g == $maxc ) { $h = 2 + ( $bb-$r )/$d; }
126 elsif( $bb == $maxc ) { $h = 4 + ( $r-$g )/$d; }
127 else {
128 # Never get here!
129 croak "Internal Error: Unexpected value ,$maxc, in Graphics::ColorUtils::rgb2hls( $r, $g, $bb )";
130 }
131
132 $h *= 60; # Convert to degrees
133 if( $h < 0 ) { $h += 360; } # Ensure positive hue
134
135 return ( $h, 0.5*$m, $s );
136}
137
138sub hls2rgb {
139 # $h: 0..360 (red=0->yellow->green=120->cyan->blue=240->magenta steps of 60)
140 # $l, $s : 0..1 (inclusive)
141 my ( $h, $l, $s ) = @_;
142
143 if( $s == 0.0 ) { return _fmt(255*$l, 255*$l, 255*$l); } # achromatic (grey)
144
145# This is the INCORRECT line as it is in the book quoted above:
146# my $m2 = ( $l <= 0.5 ) ? ($l*($l+$s)) : ($l - $l*$s + $s);
147# This is the CORRECT line: (first alternative: 1 vs $l)
148 my $m2 = ( $l <= 0.5 ) ? ($l*(1+$s)) : ($l - $l*$s + $s);
149 my $m1 = 2.0*$l - $m2;
150
151 my $r = 255 * _value( $m1, $m2, $h + 120 );
152 my $g = 255 * _value( $m1, $m2, $h );
153 my $b = 255 * _value( $m1, $m2, $h - 120 );
154
155 return _fmt( $r, $g, $b );
156}
157
158sub _value {
159 my ( $n1, $n2, $hue ) = @_;
160
161 if( $hue > 360 ) { $hue -= 360; }
162 elsif( $hue < 0 ) { $hue += 360; }
163
164 if( $hue < 60 ) { return $n1 + $hue * ( $n2-$n1 )/60.0; }
165 elsif( $hue < 180 ) { return $n2; }
166 elsif( $hue < 240 ) { return $n1 + ( 240-$hue ) * ( $n2-$n1 )/60.0; }
167 else { return $n1; }
168}
169
170# ==================================================
171# HSV
172
173# Foley, van Dam, et al:
174# Computer Grapics-Principles and Practice (1990) p592f
175
176sub rgb2hsv {
177 # $r, $g, $b : 0..25
178 # Note special name '$bb' to avoid conflict with ($a,$b) in sort()
179 my ( $r, $g, $bb ) = map { $_/255.0 } @_; # Scale RGB to 0..1
180
181 my ( $minc, $maxc ) = ( sort { $a <=> $b } ( $r, $g, $bb ) )[0,2];
182
183 my $v = $maxc; # Value
184 my $d = $maxc - $minc; # "Delta"
185 my $s = ( $maxc == 0 ) ? 0 : $d/$maxc; # No saturation if R=G=B=0
186
187 if( $s == 0 ) { return ( 0, 0, $v ); } # Achromatic case
188
189 my $h = 0; # Hue
190 if( $r == $maxc ) { $h = ( $g-$bb )/$d; }
191 elsif( $g == $maxc ) { $h = 2 + ( $bb-$r )/$d; }
192 elsif( $bb == $maxc ) { $h = 4 + ( $r-$g )/$d; }
193 else {
194 # Never get here!
195 croak "Internal Error: Unexpected value ,$maxc, in Graphics::ColorUtils::rgb2hsv( $r, $g, $bb )";
196 }
197
198 $h *= 60; # Convert to degrees
199 if( $h < 0 ) { $h += 360; } # Ensure positive hue
200
201 return ( $h, $s, $v );
202}
203
204sub hsv2rgb {
205 # $h: 0..360 (red=0->yellow->green=120->cyan->blue=240->magenta steps of 60)
206 # (tolerates larger values of $h by reducing them to the standard circle)
207 # $s, $v : 0..1 (inclusive)
208 my ( $h, $s, $v ) = @_;
209
210 $v *= 255;
211 if( $s == 0 ) { return _fmt( $v, $v, $v ); } # achromatic (grey)
212
213 my $i = int( $h/60 ); # sector 0 to 5
214 my $f = ($h/60) - $i; # fractional part of h/60
215
216 my $p = $v * ( 1 - $s );
217 my $q = $v * ( 1 - $s * $f );
218 my $t = $v * ( 1 - $s * ( 1 - $f ) );
219
220 $i %= 6; # tolerate values of $h larger than 360
221 if( $i==0 ) { return _fmt( $v, $t, $p ); }
222 elsif( $i==1 ) { return _fmt( $q, $v, $p ); }
223 elsif( $i==2 ) { return _fmt( $p, $v, $t ); }
224 elsif( $i==3 ) { return _fmt( $p, $q, $v ); }
225 elsif( $i==4 ) { return _fmt( $t, $p, $v ); }
226 elsif( $i==5 ) { return _fmt( $v, $p, $q ); }
227 else {
228 # Never get here!
229 croak "Internal Error: Unexpected value ,$i, in Graphics::ColorUtils::hsv2rgb( $h, $s, $v )";
230 }
231}
232
233# ==================================================
234# Gradients
235
236# Gradients grey, heat, map, and rainbow have been inspired by similar
237# ideas in Yorick.
238# For Yorick, cf http://yorick.sourceforge.net
239# and also http://www.maumae.net/yorick/doc/index.php
240# as well as http://www.mhatt.aps.anl.gov/dohn/software/yorick/
241
242
# spent 181µs within Graphics::ColorUtils::BEGIN@242 which was called: # once (181µs+0s) by Spreadsheet::ParseXLSX::BEGIN@12 at line 487
BEGIN {
2431183µsmy %_gradients = (
244 'grey' => [
245 [ 0, 0, 0],[ 1, 1, 1],[ 2, 2, 2],[ 3, 3, 3],[ 4, 4, 4],
246 [ 5, 5, 5],[ 6, 6, 6],[ 7, 7, 7],[ 9, 9, 9],[ 10, 10, 10],
247 [ 11, 11, 11],[ 12, 12, 12],[ 13, 13, 13],[ 14, 14, 14],[ 15, 15, 15],
248 [ 16, 16, 16],[ 17, 17, 17],[ 18, 18, 18],[ 19, 19, 19],[ 20, 20, 20],
249 [ 21, 21, 21],[ 22, 22, 22],[ 23, 23, 23],[ 25, 25, 25],[ 26, 26, 26],
250 [ 27, 27, 27],[ 28, 28, 28],[ 29, 29, 29],[ 30, 30, 30],[ 31, 31, 31],
251 [ 32, 32, 32],[ 33, 33, 33],[ 34, 34, 34],[ 35, 35, 35],[ 36, 36, 36],
252 [ 37, 37, 37],[ 38, 38, 38],[ 39, 39, 39],[ 41, 41, 41],[ 42, 42, 42],
253 [ 43, 43, 43],[ 44, 44, 44],[ 45, 45, 45],[ 46, 46, 46],[ 47, 47, 47],
254 [ 48, 48, 48],[ 49, 49, 49],[ 50, 50, 50],[ 51, 51, 51],[ 52, 52, 52],
255 [ 53, 53, 53],[ 54, 54, 54],[ 55, 55, 55],[ 57, 57, 57],[ 58, 58, 58],
256 [ 59, 59, 59],[ 60, 60, 60],[ 61, 61, 61],[ 62, 62, 62],[ 63, 63, 63],
257 [ 64, 64, 64],[ 65, 65, 65],[ 66, 66, 66],[ 67, 67, 67],[ 68, 68, 68],
258 [ 69, 69, 69],[ 70, 70, 70],[ 71, 71, 71],[ 73, 73, 73],[ 74, 74, 74],
259 [ 75, 75, 75],[ 76, 76, 76],[ 77, 77, 77],[ 78, 78, 78],[ 79, 79, 79],
260 [ 80, 80, 80],[ 81, 81, 81],[ 82, 82, 82],[ 83, 83, 83],[ 84, 84, 84],
261 [ 85, 85, 85],[ 86, 86, 86],[ 87, 87, 87],[ 89, 89, 89],[ 90, 90, 90],
262 [ 91, 91, 91],[ 92, 92, 92],[ 93, 93, 93],[ 94, 94, 94],[ 95, 95, 95],
263 [ 96, 96, 96],[ 97, 97, 97],[ 98, 98, 98],[ 99, 99, 99],[100,100,100],
264 [101,101,101],[102,102,102],[103,103,103],[105,105,105],[106,106,106],
265 [107,107,107],[108,108,108],[109,109,109],[110,110,110],[111,111,111],
266 [112,112,112],[113,113,113],[114,114,114],[115,115,115],[116,116,116],
267 [117,117,117],[118,118,118],[119,119,119],[121,121,121],[122,122,122],
268 [123,123,123],[124,124,124],[125,125,125],[126,126,126],[127,127,127],
269 [128,128,128],[129,129,129],[130,130,130],[131,131,131],[132,132,132],
270 [133,133,133],[134,134,134],[135,135,135],[137,137,137],[138,138,138],
271 [139,139,139],[140,140,140],[141,141,141],[142,142,142],[143,143,143],
272 [144,144,144],[145,145,145],[146,146,146],[147,147,147],[148,148,148],
273 [149,149,149],[150,150,150],[151,151,151],[153,153,153],[154,154,154],
274 [155,155,155],[156,156,156],[157,157,157],[158,158,158],[159,159,159],
275 [160,160,160],[161,161,161],[162,162,162],[163,163,163],[164,164,164],
276 [165,165,165],[166,166,166],[167,167,167],[169,169,169],[170,170,170],
277 [171,171,171],[172,172,172],[173,173,173],[174,174,174],[175,175,175],
278 [176,176,176],[177,177,177],[178,178,178],[179,179,179],[180,180,180],
279 [181,181,181],[182,182,182],[183,183,183],[185,185,185],[186,186,186],
280 [187,187,187],[188,188,188],[189,189,189],[190,190,190],[191,191,191],
281 [192,192,192],[193,193,193],[194,194,194],[195,195,195],[196,196,196],
282 [197,197,197],[198,198,198],[199,199,199],[201,201,201],[202,202,202],
283 [203,203,203],[204,204,204],[205,205,205],[206,206,206],[207,207,207],
284 [208,208,208],[209,209,209],[210,210,210],[211,211,211],[212,212,212],
285 [213,213,213],[214,214,214],[215,215,215],[217,217,217],[218,218,218],
286 [219,219,219],[220,220,220],[221,221,221],[222,222,222],[223,223,223],
287 [224,224,224],[225,225,225],[226,226,226],[227,227,227],[228,228,228],
288 [229,229,229],[230,230,230],[231,231,231],[233,233,233],[234,234,234],
289 [235,235,235],[236,236,236],[237,237,237],[238,238,238],[239,239,239],
290 [240,240,240],[241,241,241],[242,242,242],[243,243,243],[244,244,244],
291 [245,245,245],[246,246,246],[247,247,247],[249,249,249],[250,250,250],
292 [251,251,251],[252,252,252],[253,253,253],[254,254,254],[255,255,255]
293 ],
294 'heat' => [
295 [ 0, 0, 0],[ 1, 0, 0],[ 2, 0, 0],[ 4, 0, 0],[ 5, 0, 0],
296 [ 7, 0, 0],[ 8, 0, 0],[ 10, 0, 0],[ 11, 0, 0],[ 13, 0, 0],
297 [ 15, 0, 0],[ 17, 0, 0],[ 18, 0, 0],[ 20, 0, 0],[ 21, 0, 0],
298 [ 23, 0, 0],[ 24, 0, 0],[ 26, 0, 0],[ 27, 0, 0],[ 28, 0, 0],
299 [ 30, 0, 0],[ 31, 0, 0],[ 33, 0, 0],[ 34, 0, 0],[ 36, 0, 0],
300 [ 37, 0, 0],[ 39, 0, 0],[ 40, 0, 0],[ 42, 0, 0],[ 43, 0, 0],
301 [ 46, 0, 0],[ 47, 0, 0],[ 49, 0, 0],[ 50, 0, 0],[ 52, 0, 0],
302 [ 53, 0, 0],[ 55, 0, 0],[ 56, 0, 0],[ 57, 0, 0],[ 59, 0, 0],
303 [ 60, 0, 0],[ 62, 0, 0],[ 63, 0, 0],[ 65, 0, 0],[ 66, 0, 0],
304 [ 68, 0, 0],[ 69, 0, 0],[ 70, 0, 0],[ 72, 0, 0],[ 73, 0, 0],
305 [ 76, 0, 0],[ 78, 0, 0],[ 79, 0, 0],[ 81, 0, 0],[ 82, 0, 0],
306 [ 84, 0, 0],[ 85, 0, 0],[ 86, 0, 0],[ 88, 0, 0],[ 89, 0, 0],
307 [ 92, 0, 0],[ 94, 0, 0],[ 95, 0, 0],[ 97, 0, 0],[ 98, 0, 0],
308 [ 99, 0, 0],[101, 0, 0],[102, 0, 0],[104, 0, 0],[105, 0, 0],
309 [108, 0, 0],[110, 0, 0],[111, 0, 0],[113, 0, 0],[114, 0, 0],
310 [115, 0, 0],[117, 0, 0],[118, 0, 0],[120, 0, 0],[121, 0, 0],
311 [123, 0, 0],[124, 0, 0],[126, 0, 0],[127, 0, 0],[128, 0, 0],
312 [130, 0, 0],[131, 0, 0],[133, 0, 0],[134, 0, 0],[136, 0, 0],
313 [139, 0, 0],[140, 0, 0],[141, 0, 0],[143, 0, 0],[144, 0, 0],
314 [146, 0, 0],[147, 0, 0],[149, 0, 0],[150, 0, 0],[152, 0, 0],
315 [153, 0, 0],[155, 0, 0],[156, 0, 0],[157, 0, 0],[159, 0, 0],
316 [160, 0, 0],[162, 0, 0],[163, 0, 0],[165, 0, 0],[166, 0, 0],
317 [169, 0, 0],[170, 0, 0],[172, 0, 0],[173, 0, 0],[175, 1, 0],
318 [176, 3, 0],[178, 5, 0],[179, 7, 0],[181, 9, 0],[182, 11, 0],
319 [185, 15, 0],[186, 17, 0],[188, 18, 0],[189, 20, 0],[191, 22, 0],
320 [192, 24, 0],[194, 26, 0],[195, 28, 0],[197, 30, 0],[198, 32, 0],
321 [201, 35, 0],[202, 37, 0],[204, 39, 0],[205, 41, 0],[207, 43, 0],
322 [208, 45, 0],[210, 47, 0],[211, 49, 0],[212, 51, 0],[214, 52, 0],
323 [215, 54, 0],[217, 56, 0],[218, 58, 0],[220, 60, 0],[221, 62, 0],
324 [223, 64, 0],[224, 66, 0],[226, 68, 0],[227, 69, 0],[228, 71, 0],
325 [231, 75, 0],[233, 77, 0],[234, 79, 0],[236, 81, 0],[237, 83, 0],
326 [239, 85, 0],[240, 86, 0],[241, 88, 0],[243, 90, 0],[244, 92, 0],
327 [246, 94, 0],[247, 96, 0],[249, 98, 0],[250,100, 0],[252,102, 0],
328 [253,103, 0],[255,105, 0],[255,107, 0],[255,109, 0],[255,111, 0],
329 [255,115, 0],[255,117, 0],[255,119, 0],[255,120, 0],[255,122, 0],
330 [255,124, 0],[255,126, 0],[255,128, 0],[255,130, 0],[255,132, 0],
331 [255,136, 7],[255,137, 11],[255,139, 15],[255,141, 19],[255,143, 23],
332 [255,145, 27],[255,147, 31],[255,149, 35],[255,151, 39],[255,153, 43],
333 [255,156, 51],[255,158, 54],[255,160, 58],[255,162, 62],[255,164, 66],
334 [255,166, 70],[255,168, 74],[255,170, 78],[255,171, 82],[255,173, 86],
335 [255,175, 90],[255,177, 94],[255,179, 98],[255,181,102],[255,183,105],
336 [255,185,109],[255,187,113],[255,188,117],[255,190,121],[255,192,125],
337 [255,196,133],[255,198,137],[255,200,141],[255,202,145],[255,204,149],
338 [255,205,153],[255,207,156],[255,209,160],[255,211,164],[255,213,168],
339 [255,215,172],[255,217,176],[255,219,180],[255,221,184],[255,222,188],
340 [255,224,192],[255,226,196],[255,228,200],[255,230,204],[255,232,207],
341 [255,236,215],[255,238,219],[255,239,223],[255,241,227],[255,243,231],
342 [255,245,235],[255,247,239],[255,249,243],[255,251,247],[255,253,251]
343 ],
344 'map' => [
345 [ 0, 0, 0],[ 0, 0, 46],[ 0, 0, 58],[ 0, 0, 69],[ 0, 0, 81],
346 [ 0, 0, 92],[ 0, 0,104],[ 0, 0,116],[ 0, 3,116],[ 1, 6,116],
347 [ 2, 8,116],[ 2, 11,116],[ 3, 13,117],[ 4, 16,117],[ 5, 18,117],
348 [ 5, 21,117],[ 6, 23,117],[ 7, 26,118],[ 8, 28,118],[ 8, 31,118],
349 [ 9, 33,118],[ 10, 36,118],[ 11, 38,119],[ 11, 41,119],[ 12, 43,119],
350 [ 13, 45,119],[ 14, 48,119],[ 15, 50,120],[ 15, 52,120],[ 16, 55,120],
351 [ 17, 57,120],[ 18, 59,120],[ 18, 61,121],[ 19, 64,121],[ 20, 66,121],
352 [ 21, 68,121],[ 22, 70,121],[ 22, 72,122],[ 23, 74,122],[ 24, 77,122],
353 [ 25, 79,122],[ 26, 81,122],[ 26, 83,123],[ 27, 85,123],[ 28, 87,123],
354 [ 29, 89,123],[ 30, 91,123],[ 31, 93,124],[ 31, 95,124],[ 32, 97,124],
355 [ 33, 99,124],[ 34,100,124],[ 35,102,125],[ 36,104,125],[ 36,106,125],
356 [ 37,108,125],[ 38,109,125],[ 39,111,126],[ 40,113,126],[ 41,115,126],
357 [ 41,116,126],[ 42,118,126],[ 43,120,127],[ 44,121,127],[ 45,123,127],
358 [ 46,125,127],[ 47,126,127],[ 48,128,128],[ 48,128,126],[ 48,129,125],
359 [ 49,129,124],[ 49,130,123],[ 50,131,122],[ 50,131,120],[ 51,132,119],
360 [ 51,133,118],[ 52,133,117],[ 52,134,115],[ 53,134,114],[ 53,135,113],
361 [ 54,136,111],[ 54,136,110],[ 55,137,109],[ 55,138,108],[ 56,138,106],
362 [ 56,139,105],[ 57,140,104],[ 57,140,102],[ 58,141,101],[ 58,141,100],
363 [ 59,142, 98],[ 59,143, 97],[ 60,143, 96],[ 61,144, 94],[ 61,145, 93],
364 [ 62,145, 92],[ 62,146, 90],[ 63,146, 89],[ 63,147, 88],[ 64,148, 86],
365 [ 64,148, 85],[ 65,149, 84],[ 65,150, 82],[ 66,150, 81],[ 67,151, 80],
366 [ 67,151, 78],[ 68,152, 77],[ 68,153, 76],[ 69,153, 74],[ 69,154, 73],
367 [ 70,155, 71],[ 71,155, 70],[ 73,156, 71],[ 76,156, 72],[ 78,157, 72],
368 [ 81,158, 73],[ 83,158, 73],[ 86,159, 74],[ 88,160, 75],[ 91,160, 75],
369 [ 94,161, 76],[ 96,161, 76],[ 99,162, 77],[101,163, 77],[104,163, 78],
370 [106,164, 79],[109,165, 79],[111,165, 80],[114,166, 80],[117,166, 81],
371 [119,167, 82],[121,168, 82],[122,168, 82],[124,168, 83],[126,169, 83],
372 [128,169, 83],[129,170, 84],[131,170, 84],[133,171, 84],[135,171, 85],
373 [136,172, 85],[138,172, 85],[140,172, 86],[141,173, 86],[143,173, 86],
374 [145,174, 87],[147,174, 87],[149,175, 87],[150,175, 88],[152,175, 88],
375 [154,176, 88],[156,176, 89],[157,177, 89],[159,177, 89],[161,178, 90],
376 [163,178, 90],[165,179, 90],[166,179, 91],[168,179, 91],[170,180, 91],
377 [172,180, 92],[174,181, 92],[175,181, 92],[177,182, 93],[179,182, 93],
378 [181,183, 93],[183,183, 94],[183,182, 94],[184,181, 94],[184,181, 95],
379 [185,180, 95],[185,179, 95],[186,178, 96],[186,177, 96],[187,176, 97],
380 [187,175, 97],[187,174, 97],[188,173, 98],[188,172, 98],[189,171, 98],
381 [189,170, 99],[190,169, 99],[190,168, 99],[190,167,100],[191,166,100],
382 [191,165,100],[192,164,101],[192,163,101],[193,163,104],[195,164,106],
383 [196,164,108],[197,165,111],[198,165,113],[199,166,116],[201,167,118],
384 [202,167,121],[203,168,123],[204,169,126],[205,170,129],[207,171,131],
385 [208,172,134],[209,173,137],[210,174,139],[211,175,142],[213,176,145],
386 [214,177,148],[215,178,150],[216,179,153],[217,181,156],[219,182,159],
387 [220,184,162],[221,185,165],[222,187,168],[223,188,170],[225,190,173],
388 [226,192,176],[227,194,179],[228,196,182],[229,198,185],[231,200,189],
389 [232,202,192],[233,204,195],[234,206,198],[235,208,201],[237,211,204],
390 [238,213,207],[239,215,211],[240,218,214],[241,221,217],[243,223,220],
391 [244,226,224],[245,229,227],[246,232,230],[247,235,234],[249,238,237],
392 [250,241,241],[251,244,244],[252,248,248],[253,251,251],[255,255,255]
393 ],
394 'rainbow' => [
395 [255, 0, 42],[255, 0, 36],[255, 0, 31],[255, 0, 26],[255, 0, 20],
396 [255, 0, 15],[255, 0, 10],[255, 0, 4],[255, 5, 0],[255, 11, 0],
397 [255, 16, 0],[255, 22, 0],[255, 27, 0],[255, 32, 0],[255, 38, 0],
398 [255, 43, 0],[255, 48, 0],[255, 54, 0],[255, 59, 0],[255, 65, 0],
399 [255, 70, 0],[255, 75, 0],[255, 81, 0],[255, 91, 0],[255, 97, 0],
400 [255,102, 0],[255,108, 0],[255,113, 0],[255,118, 0],[255,124, 0],
401 [255,129, 0],[255,135, 0],[255,140, 0],[255,145, 0],[255,151, 0],
402 [255,156, 0],[255,161, 0],[255,167, 0],[255,178, 0],[255,183, 0],
403 [255,188, 0],[255,194, 0],[255,199, 0],[255,204, 0],[255,210, 0],
404 [255,215, 0],[255,221, 0],[255,226, 0],[255,231, 0],[255,237, 0],
405 [255,242, 0],[255,247, 0],[255,253, 0],[245,255, 0],[240,255, 0],
406 [235,255, 0],[229,255, 0],[224,255, 0],[219,255, 0],[213,255, 0],
407 [208,255, 0],[202,255, 0],[197,255, 0],[192,255, 0],[186,255, 0],
408 [181,255, 0],[175,255, 0],[170,255, 0],[159,255, 0],[154,255, 0],
409 [149,255, 0],[143,255, 0],[138,255, 0],[132,255, 0],[127,255, 0],
410 [122,255, 0],[116,255, 0],[111,255, 0],[106,255, 0],[100,255, 0],
411 [ 95,255, 0],[ 89,255, 0],[ 84,255, 0],[ 73,255, 0],[ 68,255, 0],
412 [ 63,255, 0],[ 57,255, 0],[ 52,255, 0],[ 46,255, 0],[ 41,255, 0],
413 [ 36,255, 0],[ 30,255, 0],[ 25,255, 0],[ 19,255, 0],[ 14,255, 0],
414 [ 9,255, 0],[ 3,255, 0],[ 0,255, 1],[ 0,255, 12],[ 0,255, 17],
415 [ 0,255, 23],[ 0,255, 28],[ 0,255, 33],[ 0,255, 39],[ 0,255, 44],
416 [ 0,255, 49],[ 0,255, 55],[ 0,255, 60],[ 0,255, 66],[ 0,255, 71],
417 [ 0,255, 76],[ 0,255, 82],[ 0,255, 87],[ 0,255, 98],[ 0,255,103],
418 [ 0,255,109],[ 0,255,114],[ 0,255,119],[ 0,255,125],[ 0,255,130],
419 [ 0,255,135],[ 0,255,141],[ 0,255,146],[ 0,255,152],[ 0,255,157],
420 [ 0,255,162],[ 0,255,168],[ 0,255,173],[ 0,255,184],[ 0,255,189],
421 [ 0,255,195],[ 0,255,200],[ 0,255,205],[ 0,255,211],[ 0,255,216],
422 [ 0,255,222],[ 0,255,227],[ 0,255,232],[ 0,255,238],[ 0,255,243],
423 [ 0,255,248],[ 0,255,254],[ 0,250,255],[ 0,239,255],[ 0,234,255],
424 [ 0,228,255],[ 0,223,255],[ 0,218,255],[ 0,212,255],[ 0,207,255],
425 [ 0,201,255],[ 0,196,255],[ 0,191,255],[ 0,185,255],[ 0,180,255],
426 [ 0,174,255],[ 0,169,255],[ 0,164,255],[ 0,153,255],[ 0,148,255],
427 [ 0,142,255],[ 0,137,255],[ 0,131,255],[ 0,126,255],[ 0,121,255],
428 [ 0,115,255],[ 0,110,255],[ 0,105,255],[ 0, 99,255],[ 0, 94,255],
429 [ 0, 88,255],[ 0, 83,255],[ 0, 78,255],[ 0, 67,255],[ 0, 62,255],
430 [ 0, 56,255],[ 0, 51,255],[ 0, 45,255],[ 0, 40,255],[ 0, 35,255],
431 [ 0, 29,255],[ 0, 24,255],[ 0, 18,255],[ 0, 13,255],[ 0, 8,255],
432 [ 0, 2,255],[ 2, 0,255],[ 7, 0,255],[ 18, 0,255],[ 24, 0,255],
433 [ 29, 0,255],[ 34, 0,255],[ 40, 0,255],[ 45, 0,255],[ 50, 0,255],
434 [ 56, 0,255],[ 61, 0,255],[ 67, 0,255],[ 72, 0,255],[ 77, 0,255],
435 [ 83, 0,255],[ 88, 0,255],[ 93, 0,255],[104, 0,255],[110, 0,255],
436 [115, 0,255],[120, 0,255],[126, 0,255],[131, 0,255],[136, 0,255],
437 [142, 0,255],[147, 0,255],[153, 0,255],[158, 0,255],[163, 0,255],
438 [169, 0,255],[174, 0,255],[180, 0,255],[190, 0,255],[196, 0,255],
439 [201, 0,255],[206, 0,255],[212, 0,255],[217, 0,255],[223, 0,255],
440 [228, 0,255],[233, 0,255],[239, 0,255],[244, 0,255],[249, 0,255],
441 [255, 0,254],[255, 0,249],[255, 0,243],[255, 0,233],[255, 0,227],
442 [255, 0,222],[255, 0,217],[255, 0,211],[255, 0,206],[255, 0,201]
443 ]
444 );
445
446# Returns a hash: gradient-name => color-count
447sub available_gradients {
448 return map { $_, scalar( @{ $_gradients{$_} } ) } keys %_gradients;
449}
450
451# Returns array-ref of rgb-triples, undef if gradient-name not found
452sub gradient {
453 my ( $name ) = @_;
454
455 unless( exists $_gradients{ $name } ) { return; }
456
457 return $_gradients{$name};
458}
459
460# Returns the color corresponding to the position in the gradient given by f.
461# Returns undef when gradient not found or f outside valid range.
462sub grad2rgb {
463 my ( $name, $frac ) = @_;
464
465 unless( exists $_gradients{ $name } ) { return; }
466 if( $frac < 0.0 || $frac >= 1.0 ) { return; }
467
468 my $idx = int( $frac * scalar( @{$_gradients{$name}} ) );
469 return _fmt( @{ $_gradients{$name}[$idx] } );
470}
471
472# Expects a gradient and and array-ref to an array of rgb triples.
473# If the name already exists, the function returns the old array; undef otherws
474sub register_gradient {
475 my ( $name, $array_ref ) = @_;
476
477 if( exists $_gradients{ $name } ) {
478 my $old = $_gradients{ $name };
479 $_gradients{ $name } = $array_ref;
480 return $old;
481 }
482
483 $_gradients{ $name } = $array_ref;
484 return undef;
485}
486
48711.26ms1181µs} # end BEGIN (Gradients)
# spent 181µs making 1 call to Graphics::ColorUtils::BEGIN@242
488
489# ==================================================
490# Names
491
492
# spent 235µs within Graphics::ColorUtils::BEGIN@492 which was called: # once (235µs+0s) by Spreadsheet::ParseXLSX::BEGIN@12 at line 957
BEGIN {
493
4941300nsmy $_default_namespace = 'x11';
495
4961236µsmy %_colors = (
497 'www:aqua' => [ 0,255,255],'www:black' => [ 0, 0, 0],
498 'www:blue' => [ 0, 0,255],'www:fuchsia' => [255, 0,255],
499 'www:gray' => [190,190,190],'www:green' => [ 0,128, 0],
500 'www:lime' => [ 0,255, 0],'www:maroon' => [128, 0, 0],
501 'www:navy' => [ 0, 0,128],'www:olive' => [128,128, 0],
502 'www:purple' => [128, 0,128],'www:red' => [255, 0, 0],
503 'www:silver' => [192,192,192],'www:teal' => [ 0,128,128],
504 'www:white' => [255,255,255],'www:yellow' => [255,255, 0],
505 'www:orange' => [255,165, 0],
506
507'svg:palevioletred' => [219,112,147],'svg:mediumslateblue' => [123,104,238],
508'svg:gold' => [255,215,0],'svg:gainsboro' => [220,220,220],
509'svg:yellow' => [255,255,0],'svg:limegreen' => [50,205,50],
510'svg:lightgoldenrodyellow' => [250,250,210],'svg:lavenderblush' => [255,240,245],
511'svg:darkmagenta' => [139,0,139],'svg:darkgrey' => [169,169,169],
512'svg:blanchedalmond' => [255,235,205],'svg:ghostwhite' => [248,248,255],
513'svg:floralwhite' => [255,250,240],'svg:coral' => [255,127,80],
514'svg:honeydew' => [240,255,240],'svg:mistyrose' => [255,228,225],
515'svg:slateblue' => [106,90,205],'svg:goldenrod' => [218,165,32],
516'svg:darkcyan' => [0,139,139],'svg:moccasin' => [255,228,181],
517'svg:mediumvioletred' => [199,21,133],'svg:maroon' => [128,0,0],
518'svg:lightpink' => [255,182,193],'svg:lightsalmon' => [255,160,122],
519'svg:paleturquoise' => [175,238,238],'svg:darksalmon' => [233,150,122],
520'svg:yellowgreen' => [154,205,50],'svg:mediumturquoise' => [72,209,204],
521'svg:chartreuse' => [127,255,0],'svg:peru' => [205,133,63],
522'svg:palegoldenrod' => [238,232,170],'svg:red' => [255,0,0],
523'svg:lavender' => [230,230,250],'svg:lightseagreen' => [32,178,170],
524'svg:powderblue' => [176,224,230],'svg:orchid' => [218,112,214],
525'svg:cornsilk' => [255,248,220],'svg:seagreen' => [46,139,87],
526'svg:royalblue' => [65,105,225],'svg:ivory' => [255,255,240],
527'svg:tan' => [210,180,140],'svg:linen' => [250,240,230],
528'svg:darkorchid' => [153,50,204],'svg:tomato' => [255,99,71],
529'svg:lightcyan' => [224,255,255],'svg:darkolivegreen' => [85,107,47],
530'svg:sienna' => [160,82,45],'svg:lightsteelblue' => [176,196,222],
531'svg:indigo' => [75,0,130],'svg:peachpuff' => [255,218,185],
532'svg:lime' => [0,255,0],'svg:mediumspringgreen' => [0,250,154],
533'svg:silver' => [192,192,192],'svg:saddlebrown' => [139,69,19],
534'svg:lightyellow' => [255,255,224],'svg:grey' => [128,128,128],
535'svg:thistle' => [216,191,216],'svg:deepskyblue' => [0,191,255],
536'svg:lightgreen' => [144,238,144],'svg:blueviolet' => [138,43,226],
537'svg:aqua' => [0,255,255],'svg:cyan' => [0,255,255],
538'svg:papayawhip' => [255,239,213],'svg:deeppink' => [255,20,147],
539'svg:firebrick' => [178,34,34],'svg:navy' => [0,0,128],
540'svg:hotpink' => [255,105,180],'svg:pink' => [255,192,203],
541'svg:darkturquoise' => [0,206,209],'svg:navajowhite' => [255,222,173],
542'svg:lightslategrey' => [119,136,153],'svg:lawngreen' => [124,252,0],
543'svg:lightcoral' => [240,128,128],'svg:palegreen' => [152,251,152],
544'svg:dodgerblue' => [30,144,255],'svg:greenyellow' => [173,255,47],
545'svg:lightskyblue' => [135,206,250],'svg:brown' => [165,42,42],
546'svg:dimgrey' => [105,105,105],'svg:aquamarine' => [127,255,212],
547'svg:darkseagreen' => [143,188,143],'svg:fuchsia' => [255,0,255],
548'svg:magenta' => [255,0,255],'svg:chocolate' => [210,105,30],
549'svg:mediumseagreen' => [60,179,113],'svg:cadetblue' => [95,158,160],
550'svg:purple' => [128,0,128],'svg:turquoise' => [64,224,208],
551'svg:darkkhaki' => [189,183,107],'svg:antiquewhite' => [250,235,215],
552'svg:skyblue' => [135,206,235],'svg:sandybrown' => [244,164,96],
553'svg:mediumblue' => [0,0,205],'svg:steelblue' => [70,130,180],
554'svg:indianred' => [205,92,92],'svg:khaki' => [240,230,140],
555'svg:lightblue' => [173,216,230],'svg:green' => [0,128,0],
556'svg:olive' => [128,128,0],'svg:mediumorchid' => [186,85,211],
557'svg:blue' => [0,0,255],'svg:snow' => [255,250,250],
558'svg:rosybrown' => [188,143,143],'svg:orange' => [255,165,0],
559'svg:slategrey' => [112,128,144],'svg:darkorange' => [255,140,0],
560'svg:violet' => [238,130,238],'svg:darkslategrey' => [47,79,79],
561'svg:whitesmoke' => [245,245,245],'svg:burlywood' => [222,184,135],
562'svg:darkgreen' => [0,100,0],'svg:lemonchiffon' => [255,250,205],
563'svg:midnightblue' => [25,25,112],'svg:mintcream' => [245,255,250],
564'svg:oldlace' => [253,245,230],'svg:black' => [0,0,0],
565'svg:bisque' => [255,228,196],'svg:mediumaquamarine' => [102,205,170],
566'svg:olivedrab' => [107,142,35],'svg:salmon' => [250,128,114],
567'svg:teal' => [0,128,128],'svg:seashell' => [255,245,238],
568'svg:springgreen' => [0,255,127],'svg:plum' => [221,160,221],
569'svg:darkviolet' => [148,0,211],'svg:wheat' => [245,222,179],
570'svg:mediumpurple' => [147,112,219],'svg:cornflowerblue' => [100,149,237],
571'svg:forestgreen' => [34,139,34],'svg:darkgoldenrod' => [184,134,11],
572'svg:aliceblue' => [240,248,255],'svg:white' => [255,255,255],
573'svg:darkblue' => [0,0,139],'svg:azure' => [240,255,255],
574'svg:darkred' => [139,0,0],'svg:orangered' => [255,69,0],
575'svg:darkslateblue' => [72,61,139],'svg:crimson' => [220,20,60],
576'svg:lightgrey' => [211,211,211],'svg:beige' => [245,245,220],
577
578'x11:deepskyblue3' => [0,154,205],'x11:gold' => [255,215,0],
579'x11:gold1' => [255,215,0],'x11:mediumpurple3' => [137,104,205],
580'x11:royalblue3' => [58,95,205],'x11:lightgoldenrodyellow' => [250,250,210],
581'x11:lavenderblush' => [255,240,245],'x11:lavenderblush1' => [255,240,245],
582'x11:pink1' => [255,181,197],'x11:green3' => [0,205,0],
583'x11:lightsteelblue1' => [202,225,255],'x11:blanchedalmond' => [255,235,205],
584'x11:salmon1' => [255,140,105],'x11:ghostwhite' => [248,248,255],
585'x11:floralwhite' => [255,250,240],'x11:dodgerblue4' => [16,78,139],
586'x11:grey43' => [110,110,110],'x11:indianred4' => [139,58,58],
587'x11:mistyrose1' => [255,228,225],'x11:mistyrose' => [255,228,225],
588'x11:dodgerblue2' => [28,134,238],'x11:grey37' => [94,94,94],
589'x11:grey9' => [23,23,23],'x11:purple4' => [85,26,139],
590'x11:orchid2' => [238,122,233],'x11:cornsilk3' => [205,200,177],
591'x11:goldenrod' => [218,165,32],'x11:hotpink4' => [139,58,98],
592'x11:lightpink' => [255,182,193],'x11:coral2' => [238,106,80],
593'x11:cyan2' => [0,238,238],'x11:grey87' => [222,222,222],
594'x11:grey91' => [232,232,232],'x11:violetred4' => [139,34,82],
595'x11:violetred2' => [238,58,140],'x11:indianred2' => [238,99,99],
596'x11:lightyellow3' => [205,205,180],'x11:darkolivegreen2' => [188,238,104],
597'x11:magenta3' => [205,0,205],'x11:grey64' => [163,163,163],
598'x11:honeydew3' => [193,205,193],'x11:lightsalmon3' => [205,129,98],
599'x11:springgreen4' => [0,139,69],'x11:grey57' => [145,145,145],
600'x11:grey50' => [127,127,127],'x11:grey66' => [168,168,168],
601'x11:antiquewhite1' => [255,239,219],'x11:paleturquoise' => [175,238,238],
602'x11:navajowhite2' => [238,207,161],'x11:lightpink3' => [205,140,149],
603'x11:darksalmon' => [233,150,122],'x11:grey52' => [133,133,133],
604'x11:slategrey3' => [159,182,205],'x11:darkseagreen4' => [105,139,105],
605'x11:chartreuse' => [127,255,0],'x11:chartreuse1' => [127,255,0],
606'x11:grey42' => [107,107,107],'x11:peru' => [205,133,63],
607'x11:tan3' => [205,133,63],'x11:grey19' => [48,48,48],
608'x11:palegreen3' => [124,205,124],'x11:lavender' => [230,230,250],
609'x11:red3' => [205,0,0],'x11:orchid' => [218,112,214],
610'x11:powderblue' => [176,224,230],'x11:grey35' => [89,89,89],
611'x11:plum4' => [139,102,139],'x11:cornsilk' => [255,248,220],
612'x11:cornsilk1' => [255,248,220],'x11:royalblue' => [65,105,225],
613'x11:darkgoldenrod2' => [238,173,14],'x11:lightpink4' => [139,95,101],
614'x11:springgreen2' => [0,238,118],'x11:tan' => [210,180,140],
615'x11:lightslateblue' => [132,112,255],'x11:darkorchid' => [153,50,204],
616'x11:orangered2' => [238,64,0],'x11:palevioletred1' => [255,130,171],
617'x11:grey63' => [161,161,161],'x11:maroon2' => [238,48,167],
618'x11:blue2' => [0,0,238],'x11:turquoise4' => [0,134,139],
619'x11:lightcyan1' => [224,255,255],'x11:lightcyan' => [224,255,255],
620'x11:springgreen3' => [0,205,102],'x11:darkorchid4' => [104,34,139],
621'x11:sienna' => [160,82,45],'x11:goldenrod2' => [238,180,34],
622'x11:lightgoldenrod3' => [205,190,112],'x11:green' => [0,255,0],
623'x11:green1' => [0,255,0],'x11:peachpuff1' => [255,218,185],
624'x11:peachpuff' => [255,218,185],'x11:yellow3' => [205,205,0],
625'x11:mediumspringgreen' => [0,250,154],'x11:cadetblue3' => [122,197,205],
626'x11:royalblue1' => [72,118,255],'x11:deepskyblue1' => [0,191,255],
627'x11:deepskyblue' => [0,191,255],'x11:firebrick1' => [255,48,48],
628'x11:grey80' => [204,204,204],'x11:grey28' => [71,71,71],
629'x11:palegreen2' => [144,238,144],'x11:lightgreen' => [144,238,144],
630'x11:blueviolet' => [138,43,226],'x11:deeppink1' => [255,20,147],
631'x11:deeppink' => [255,20,147],'x11:deeppink2' => [238,18,137],
632'x11:lightskyblue2' => [164,211,238],'x11:grey77' => [196,196,196],
633'x11:grey72' => [184,184,184],'x11:tomato2' => [238,92,66],
634'x11:steelblue2' => [92,172,238],'x11:hotpink' => [255,105,180],
635'x11:slateblue4' => [71,60,139],'x11:pink' => [255,192,203],
636'x11:darkturquoise' => [0,206,209],'x11:antiquewhite3' => [205,192,176],
637'x11:grey32' => [82,82,82],'x11:lightyellow2' => [238,238,209],
638'x11:olivedrab4' => [105,139,34],'x11:lightblue4' => [104,131,139],
639'x11:royalblue2' => [67,110,238],'x11:navajowhite1' => [255,222,173],
640'x11:navajowhite' => [255,222,173],'x11:lightgoldenrod' => [238,221,130],
641'x11:grey85' => [217,217,217],'x11:maroon4' => [139,28,98],
642'x11:grey90' => [229,229,229],'x11:grey17' => [43,43,43],
643'x11:seashell4' => [139,134,130],'x11:greenyellow' => [173,255,47],
644'x11:dodgerblue1' => [30,144,255],'x11:dodgerblue' => [30,144,255],
645'x11:grey89' => [227,227,227],'x11:brown2' => [238,59,59],
646'x11:paleturquoise2' => [174,238,238],'x11:lightskyblue' => [135,206,250],
647'x11:salmon4' => [139,76,57],'x11:chocolate3' => [205,102,29],
648'x11:grey70' => [179,179,179],'x11:grey25' => [64,64,64],
649'x11:darkolivegreen4' => [110,139,61],'x11:mediumorchid2' => [209,95,238],
650'x11:brown' => [165,42,42],'x11:grey67' => [171,171,171],
651'x11:grey41' => [105,105,105],'x11:dimgrey' => [105,105,105],
652'x11:grey60' => [153,153,153],'x11:indianred3' => [205,85,85],
653'x11:chocolate' => [210,105,30],'x11:darkslategrey1' => [151,255,255],
654'x11:grey2' => [5,5,5],'x11:firebrick3' => [205,38,38],
655'x11:snow4' => [139,137,137],'x11:mediumseagreen' => [60,179,113],
656'x11:darkorchid1' => [191,62,255],'x11:pink3' => [205,145,158],
657'x11:violetred1' => [255,62,150],'x11:grey83' => [212,212,212],
658'x11:olivedrab1' => [192,255,62],'x11:darkkhaki' => [189,183,107],
659'x11:deepskyblue4' => [0,104,139],'x11:darkorchid2' => [178,58,238],
660'x11:skyblue' => [135,206,235],'x11:mediumorchid3' => [180,82,205],
661'x11:rosybrown4' => [139,105,105],'x11:grey16' => [41,41,41],
662'x11:yellow4' => [139,139,0],'x11:maroon' => [176,48,96],
663'x11:turquoise2' => [0,229,238],'x11:mistyrose2' => [238,213,210],
664'x11:blue3' => [0,0,205],'x11:mediumblue' => [0,0,205],
665'x11:grey4' => [10,10,10],'x11:pink2' => [238,169,184],
666'x11:chocolate2' => [238,118,33],'x11:lightyellow4' => [139,139,122],
667'x11:grey99' => [252,252,252],'x11:red2' => [238,0,0],
668'x11:tan4' => [139,90,43],'x11:yellow2' => [238,238,0],
669'x11:grey12' => [31,31,31],'x11:deeppink4' => [139,10,80],
670'x11:lightsalmon4' => [139,87,66],'x11:lightcyan4' => [122,139,139],
671'x11:snow1' => [255,250,250],'x11:snow' => [255,250,250],
672'x11:brown4' => [139,35,35],'x11:darkseagreen2' => [180,238,180],
673'x11:lightsteelblue2' => [188,210,238],'x11:rosybrown' => [188,143,143],
674'x11:maroon1' => [255,52,179],'x11:slategrey' => [112,128,144],
675'x11:orange' => [255,165,0],'x11:orange1' => [255,165,0],
676'x11:orangered3' => [205,55,0],'x11:plum3' => [205,150,205],
677'x11:turquoise3' => [0,197,205],'x11:pink4' => [139,99,108],
678'x11:violet' => [238,130,238],'x11:grey96' => [245,245,245],
679'x11:whitesmoke' => [245,245,245],'x11:lightgoldenrod1' => [255,236,139],
680'x11:darkorange1' => [255,127,0],'x11:seashell2' => [238,229,222],
681'x11:midnightblue' => [25,25,112],'x11:grey27' => [69,69,69],
682'x11:mediumpurple2' => [159,121,238],'x11:bisque4' => [139,125,107],
683'x11:black' => [0,0,0],'x11:grey0' => [0,0,0],
684'x11:lavenderblush4' => [139,131,134],'x11:bisque1' => [255,228,196],
685'x11:bisque' => [255,228,196],'x11:mediumaquamarine' => [102,205,170],
686'x11:aquamarine3' => [102,205,170],'x11:goldenrod1' => [255,193,37],
687'x11:green4' => [0,139,0],'x11:bisque3' => [205,183,158],
688'x11:salmon' => [250,128,114],'x11:grey1' => [3,3,3],
689'x11:purple3' => [125,38,205],'x11:khaki4' => [139,134,78],
690'x11:grey' => [190,190,190],'x11:cadetblue4' => [83,134,139],
691'x11:cadetblue1' => [152,245,255],'x11:hotpink3' => [205,96,144],
692'x11:antiquewhite2' => [238,223,204],'x11:darkorange4' => [139,69,0],
693'x11:cornsilk2' => [238,232,205],'x11:grey93' => [237,237,237],
694'x11:thistle3' => [205,181,205],'x11:plum2' => [238,174,238],
695'x11:burlywood2' => [238,197,145],'x11:skyblue4' => [74,112,139],
696'x11:peachpuff2' => [238,203,173],'x11:grey62' => [158,158,158],
697'x11:paleturquoise3' => [150,205,205],'x11:lightblue1' => [191,239,255],
698'x11:mediumpurple' => [147,112,219],'x11:peachpuff3' => [205,175,149],
699'x11:grey49' => [125,125,125],'x11:grey3' => [8,8,8],
700'x11:steelblue1' => [99,184,255],'x11:grey73' => [186,186,186],
701'x11:grey44' => [112,112,112],'x11:palevioletred4' => [139,71,93],
702'x11:khaki2' => [238,230,133],'x11:gold3' => [205,173,0],
703'x11:grey47' => [120,120,120],'x11:aliceblue' => [240,248,255],
704'x11:grey58' => [148,148,148],'x11:darkslategrey4' => [82,139,139],
705'x11:mediumorchid4' => [122,55,139],'x11:thistle1' => [255,225,255],
706'x11:mistyrose4' => [139,125,123],'x11:orchid1' => [255,131,250],
707'x11:hotpink2' => [238,106,167],'x11:azure' => [240,255,255],
708'x11:azure1' => [240,255,255],'x11:darkred' => [139,0,0],
709'x11:red4' => [139,0,0],'x11:chartreuse2' => [118,238,0],
710'x11:slateblue1' => [131,111,255],'x11:grey15' => [38,38,38],
711'x11:grey71' => [181,181,181],'x11:darkslategrey2' => [141,238,238],
712'x11:snow3' => [205,201,201],'x11:bisque2' => [238,213,183],
713'x11:darkslateblue' => [72,61,139],'x11:coral4' => [139,62,47],
714'x11:grey69' => [176,176,176],'x11:burlywood4' => [139,115,85],
715'x11:coral3' => [205,91,69],'x11:purple' => [160,32,240],
716'x11:grey36' => [92,92,92],'x11:grey94' => [240,240,240],
717'x11:palevioletred2' => [238,121,159],'x11:grey46' => [117,117,117],
718'x11:palevioletred' => [219,112,147],'x11:mediumslateblue' => [123,104,238],
719'x11:seagreen1' => [84,255,159],'x11:gainsboro' => [220,220,220],
720'x11:yellow1' => [255,255,0],'x11:yellow' => [255,255,0],
721'x11:limegreen' => [50,205,50],'x11:darkgrey' => [169,169,169],
722'x11:darkmagenta' => [139,0,139],'x11:magenta4' => [139,0,139],
723'x11:grey59' => [150,150,150],'x11:firebrick2' => [238,44,44],
724'x11:coral' => [255,127,80],'x11:honeydew' => [240,255,240],
725'x11:honeydew1' => [240,255,240],'x11:grey86' => [219,219,219],
726'x11:grey13' => [33,33,33],'x11:purple1' => [155,48,255],
727'x11:grey82' => [209,209,209],'x11:grey65' => [166,166,166],
728'x11:grey97' => [247,247,247],'x11:azure4' => [131,139,139],
729'x11:darkslategrey3' => [121,205,205],'x11:lightcyan3' => [180,205,205],
730'x11:aquamarine2' => [118,238,198],'x11:grey92' => [235,235,235],
731'x11:slateblue' => [106,90,205],'x11:darkcyan' => [0,139,139],
732'x11:cyan4' => [0,139,139],'x11:chartreuse3' => [102,205,0],
733'x11:moccasin' => [255,228,181],'x11:mediumvioletred' => [199,21,133],
734'x11:tomato3' => [205,79,57],'x11:grey31' => [79,79,79],
735'x11:sienna2' => [238,121,66],'x11:grey98' => [250,250,250],
736'x11:gold4' => [139,117,0],'x11:slateblue3' => [105,89,205],
737'x11:grey14' => [36,36,36],'x11:honeydew4' => [131,139,131],
738'x11:grey61' => [156,156,156],'x11:violetred3' => [205,50,120],
739'x11:grey39' => [99,99,99],'x11:aquamarine4' => [69,139,116],
740'x11:darkgoldenrod4' => [139,101,8],'x11:mediumpurple1' => [171,130,255],
741'x11:lightsalmon1' => [255,160,122],'x11:lightsalmon' => [255,160,122],
742'x11:darkolivegreen3' => [162,205,90],'x11:grey10' => [26,26,26],
743'x11:khaki3' => [205,198,115],'x11:navajowhite3' => [205,179,139],
744'x11:lightpink1' => [255,174,185],'x11:grey81' => [207,207,207],
745'x11:grey45' => [115,115,115],'x11:wheat3' => [205,186,150],
746'x11:steelblue4' => [54,100,139],'x11:grey48' => [122,122,122],
747'x11:olivedrab3' => [154,205,50],'x11:yellowgreen' => [154,205,50],
748'x11:mediumturquoise' => [72,209,204],'x11:palegoldenrod' => [238,232,170],
749'x11:ivory2' => [238,238,224],'x11:darkolivegreen1' => [202,255,112],
750'x11:red1' => [255,0,0],'x11:red' => [255,0,0],
751'x11:lemonchiffon4' => [139,137,112],'x11:lightseagreen' => [32,178,170],
752'x11:seagreen4' => [46,139,87],'x11:seagreen' => [46,139,87],
753'x11:ivory' => [255,255,240],'x11:ivory1' => [255,255,240],
754'x11:linen' => [250,240,230],'x11:grey34' => [87,87,87],
755'x11:thistle2' => [238,210,238],'x11:tomato' => [255,99,71],
756'x11:tomato1' => [255,99,71],'x11:slategrey1' => [198,226,255],
757'x11:orchid3' => [205,105,201],'x11:lightcyan2' => [209,238,238],
758'x11:grey54' => [138,138,138],'x11:darkolivegreen' => [85,107,47],
759'x11:lightsteelblue' => [176,196,222],'x11:grey33' => [84,84,84],
760'x11:chocolate4' => [139,69,19],'x11:saddlebrown' => [139,69,19],
761'x11:orange3' => [205,133,0],'x11:lightyellow' => [255,255,224],
762'x11:lightyellow1' => [255,255,224],'x11:grey75' => [191,191,191],
763'x11:khaki1' => [255,246,143],'x11:thistle' => [216,191,216],
764'x11:grey79' => [201,201,201],'x11:plum1' => [255,187,255],
765'x11:paleturquoise4' => [102,139,139],'x11:cyan1' => [0,255,255],
766'x11:cyan' => [0,255,255],'x11:maroon3' => [205,41,144],
767'x11:papayawhip' => [255,239,213],'x11:seagreen3' => [67,205,128],
768'x11:lightgoldenrod4' => [139,129,76],'x11:lightskyblue1' => [176,226,255],
769'x11:firebrick' => [178,34,34],'x11:grey30' => [77,77,77],
770'x11:grey26' => [66,66,66],'x11:antiquewhite4' => [139,131,120],
771'x11:navyblue' => [0,0,128],'x11:navy' => [0,0,128],
772'x11:grey7' => [18,18,18],'x11:grey5' => [13,13,13],
773'x11:grey29' => [74,74,74],'x11:turquoise1' => [0,245,255],
774'x11:darkgoldenrod3' => [205,149,12],'x11:goldenrod4' => [139,105,20],
775'x11:palevioletred3' => [205,104,137],'x11:lightslategrey' => [119,136,153],
776'x11:snow2' => [238,233,233],'x11:grey24' => [61,61,61],
777'x11:slategrey4' => [108,123,139],'x11:grey55' => [140,140,140],
778'x11:seashell3' => [205,197,191],'x11:deeppink3' => [205,16,118],
779'x11:lawngreen' => [124,252,0],'x11:darkorchid3' => [154,50,205],
780'x11:lightcoral' => [240,128,128],'x11:palegreen' => [152,251,152],
781'x11:grey56' => [143,143,143],'x11:grey23' => [59,59,59],
782'x11:grey74' => [189,189,189],'x11:azure2' => [224,238,238],
783'x11:darkseagreen3' => [155,205,155],'x11:grey20' => [51,51,51],
784'x11:cadetblue2' => [142,229,238],'x11:grey84' => [214,214,214],
785'x11:cornsilk4' => [139,136,120],'x11:grey38' => [97,97,97],
786'x11:magenta1' => [255,0,255],'x11:magenta' => [255,0,255],
787'x11:darkseagreen' => [143,188,143],'x11:aquamarine1' => [127,255,212],
788'x11:aquamarine' => [127,255,212],'x11:lightblue3' => [154,192,205],
789'x11:olivedrab2' => [179,238,58],'x11:grey40' => [102,102,102],
790'x11:peachpuff4' => [139,119,101],'x11:paleturquoise1' => [187,255,255],
791'x11:darkseagreen1' => [193,255,193],'x11:darkorange3' => [205,102,0],
792'x11:brown3' => [205,51,51],'x11:grey51' => [130,130,130],
793'x11:mediumpurple4' => [93,71,139],'x11:lightpink2' => [238,162,173],
794'x11:cadetblue' => [95,158,160],'x11:lemonchiffon2' => [238,233,191],
795'x11:green2' => [0,238,0],'x11:azure3' => [193,205,205],
796'x11:turquoise' => [64,224,208],'x11:brown1' => [255,64,64],
797'x11:lightsteelblue4' => [110,123,139],'x11:orange2' => [238,154,0],
798'x11:antiquewhite' => [250,235,215],'x11:wheat2' => [238,216,174],
799'x11:rosybrown2' => [238,180,180],'x11:lightsteelblue3' => [162,181,205],
800'x11:grey78' => [199,199,199],'x11:grey21' => [54,54,54],
801'x11:sandybrown' => [244,164,96],'x11:lavenderblush2' => [238,224,229],
802'x11:steelblue' => [70,130,180],'x11:grey95' => [242,242,242],
803'x11:indianred' => [205,92,92],'x11:skyblue1' => [135,206,255],
804'x11:khaki' => [240,230,140],'x11:orchid4' => [139,71,137],
805'x11:chocolate1' => [255,127,36],'x11:goldenrod3' => [205,155,29],
806'x11:sienna4' => [139,71,38],'x11:lightblue' => [173,216,230],
807'x11:grey88' => [224,224,224],'x11:palegreen4' => [84,139,84],
808'x11:mediumorchid' => [186,85,211],'x11:blue' => [0,0,255],
809'x11:blue1' => [0,0,255],'x11:dodgerblue3' => [24,116,205],
810'x11:indianred1' => [255,106,106],'x11:cyan3' => [0,205,205],
811'x11:tan1' => [255,165,79],'x11:darkorange' => [255,140,0],
812'x11:skyblue2' => [126,192,238],'x11:coral1' => [255,114,86],
813'x11:darkslategrey' => [47,79,79],'x11:burlywood' => [222,184,135],
814'x11:sienna3' => [205,104,57],'x11:darkgreen' => [0,100,0],
815'x11:mistyrose3' => [205,183,181],'x11:grey68' => [173,173,173],
816'x11:grey53' => [135,135,135],'x11:lemonchiffon' => [255,250,205],
817'x11:lemonchiffon1' => [255,250,205],'x11:palegreen1' => [154,255,154],
818'x11:grey76' => [194,194,194],'x11:steelblue3' => [79,148,205],
819'x11:grey11' => [28,28,28],'x11:oldlace' => [253,245,230],
820'x11:mintcream' => [245,255,250],'x11:firebrick4' => [139,26,26],
821'x11:lemonchiffon3' => [205,201,165],'x11:olivedrab' => [107,142,35],
822'x11:honeydew2' => [224,238,224],'x11:deepskyblue2' => [0,178,238],
823'x11:slateblue2' => [122,103,238],'x11:slategrey2' => [185,211,238],
824'x11:seagreen2' => [78,238,148],'x11:salmon2' => [238,130,98],
825'x11:ivory3' => [205,205,193],'x11:mediumorchid1' => [224,102,255],
826'x11:tan2' => [238,154,73],'x11:springgreen' => [0,255,127],
827'x11:springgreen1' => [0,255,127],'x11:seashell1' => [255,245,238],
828'x11:seashell' => [255,245,238],'x11:skyblue3' => [108,166,205],
829'x11:chartreuse4' => [69,139,0],'x11:burlywood3' => [205,170,125],
830'x11:plum' => [221,160,221],'x11:ivory4' => [139,139,131],
831'x11:darkviolet' => [148,0,211],'x11:lightblue2' => [178,223,238],
832'x11:wheat' => [245,222,179],'x11:darkgoldenrod1' => [255,185,15],
833'x11:cornflowerblue' => [100,149,237],'x11:purple2' => [145,44,238],
834'x11:grey6' => [15,15,15],'x11:magenta2' => [238,0,238],
835'x11:sienna1' => [255,130,71],'x11:darkgoldenrod' => [184,134,11],
836'x11:forestgreen' => [34,139,34],'x11:navajowhite4' => [139,121,94],
837'x11:royalblue4' => [39,64,139],'x11:wheat1' => [255,231,186],
838'x11:lightskyblue4' => [96,123,139],'x11:grey18' => [46,46,46],
839'x11:orangered4' => [139,37,0],'x11:salmon3' => [205,112,84],
840'x11:white' => [255,255,255],'x11:grey100' => [255,255,255],
841'x11:orange4' => [139,90,0],'x11:wheat4' => [139,126,102],
842'x11:rosybrown1' => [255,193,193],'x11:grey8' => [20,20,20],
843'x11:lightgoldenrod2' => [238,220,130],'x11:lightskyblue3' => [141,182,205],
844'x11:violetred' => [208,32,144],'x11:blue4' => [0,0,139],
845'x11:darkblue' => [0,0,139],'x11:lavenderblush3' => [205,193,197],
846'x11:thistle4' => [139,123,139],'x11:hotpink1' => [255,110,180],
847'x11:darkorange2' => [238,118,0],'x11:lightsalmon2' => [238,149,114],
848'x11:orangered1' => [255,69,0],'x11:orangered' => [255,69,0],
849'x11:burlywood1' => [255,211,155],'x11:lightgrey' => [211,211,211],
850'x11:grey22' => [56,56,56],'x11:tomato4' => [139,54,38],
851'x11:rosybrown3' => [205,155,155],'x11:gold2' => [238,201,0],
852'x11:beige' => [245,245,220]
853 );
854
855# Returns a hash-ref: color-name => RGB triple
856sub available_names {
857 return \%_colors;
858}
859
860# Returns the RGB triple for a name, undef if name not found
861# The name is normalized before lookup is attempted. Normalization consists
862# of: lowercasing and elimination of whitespace. Also, "gray" is replaced
863# with "grey".
864# If the name is prefixed with a namespace (separated by colon ':'),
865# only this namespace is searched. If no namespace is specified, then
866# the lookup occurs first in the global namespace, then in the default
867# namespace.
868
869sub name2rgb {
870 my ( $name ) = @_;
871
872 my ( $ns, $core, $norm ) = _normalize_name( $name );
873
874 # If explicit namespace:
875 if( $ns ne '' ) {
876 if( exists $_colors{ $norm } ) {
877 return _fmt( @{ $_colors{ $norm } } );
878 } else {
879 return; # Do not search further if explicit namespace is given
880 }
881 }
882
883 # No explicit namespace
884 if( exists $_colors{ $core } ) {
885 return _fmt( @{ $_colors{ $core } } ); # global namespace
886 }
887
888 # No namespace, but ':' prefix: search global ONLY, but not default ns
889 if( $core ne $norm ) { return; }
890
891 $norm = get_default_namespace() . ':' . $core;
892 if( exists $_colors{ $norm } ) {
893 return _fmt( @{ $_colors{ $norm } } ); # default namespace
894 }
895
896 # Not found
897 return;
898}
899
900# Takes a name and an RGB triple. Registers the triple for the given name.
901# The name will be normalized (lowercased, whitespace eliminated, 'gray'
902# replaced by 'grey') before assignment is made.
903# If the name is not prefixed by a namespace, the color will be entered
904# into the global namespace.
905# Returns the old value for the name, if the name already exists.
906
907sub register_name {
908 my ( $name, $r, $g, $b ) = @_;
909
910 my ( $ns, $core, $norm ) = _normalize_name( $name );
911
912 # If no explicit ns is given, lookup and replace for $core, which is
913 # guaranteed not preceeded by ':'. Otherwise, use fully qualified name.
914 my $crr = ( $ns eq '' ) ? $core : $norm;
915
916 if( exists $_colors{ $crr } ) {
917 my $old = $_colors{ $crr };
918 $_colors{ $crr } = [ $r, $g, $b ];
919
920 return _fmt( @$old );
921 }
922
923 $_colors{ $crr } = [ $r, $g, $b ];
924
925 return;
926}
927
928sub _normalize_name {
929 my ( $name ) = @_;
930
931 $name = lc( $name ); # Lowercase
932 $name =~ s/\s//g; # Eliminate whitespace
933 $name =~ s/gray/grey/; # gray -> grey
934
935 my ( $ns, $core ) = ( '', $name );
936 if( $name =~ /:/ ) {
937 ( $ns, $core ) = split ':', $name;
938 }
939
940 return ( $ns, $core, $name );
941}
942
943# Sets the default namespace. Returns the previous value.
944# Giving an empty string as argument makes the global namespace the default.
945# Note that the global namespace is initially EMPTY!
946
947sub set_default_namespace {
948 my $old = $_default_namespace;
949 $_default_namespace = $_[0];
950 return $old;
951}
952
953sub get_default_namespace {
954 return $_default_namespace;
955}
956
957125µs1235µs} # end BEGIN (Names)
# spent 235µs making 1 call to Graphics::ColorUtils::BEGIN@492
958
- -
96115µs1;
962__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test-Builder-Formatter-pm-67-line.html0000644000175000017500000007325314576335353025077 0ustar michamicha Profile of Test/Builder/Formatter.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder/Formatter.pm
StatementsExecuted 20 statements in 391µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.78ms2.16msTest::Builder::Formatter::::BEGIN@7Test::Builder::Formatter::BEGIN@7
11118µs20µsTest::Builder::Formatter::::BEGIN@11Test::Builder::Formatter::BEGIN@11
1119µs11µsTest::Builder::Formatter::::BEGIN@2Test::Builder::Formatter::BEGIN@2
1115µs51µsTest::Builder::Formatter::::BEGIN@9Test::Builder::Formatter::BEGIN@9
1115µs9µsTest::Builder::Formatter::::plan_tapTest::Builder::Formatter::plan_tap
1114µs20µsTest::Builder::Formatter::::BEGIN@3Test::Builder::Formatter::BEGIN@3
1113µs86µsTest::Builder::Formatter::::initTest::Builder::Formatter::init
0000s0sTest::Builder::Formatter::::__ANON__[:16]Test::Builder::Formatter::__ANON__[:16]
0000s0sTest::Builder::Formatter::::debug_tapTest::Builder::Formatter::debug_tap
0000s0sTest::Builder::Formatter::::info_tapTest::Builder::Formatter::info_tap
0000s0sTest::Builder::Formatter::::no_subtest_spaceTest::Builder::Formatter::no_subtest_space
0000s0sTest::Builder::Formatter::::redirectTest::Builder::Formatter::redirect
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test::Builder::Formatter;
2218µs213µs
# spent 11µs (9+2) within Test::Builder::Formatter::BEGIN@2 which was called: # once (9µs+2µs) by Test::Builder::BEGIN@36 at line 2
use strict;
# spent 11µs making 1 call to Test::Builder::Formatter::BEGIN@2 # spent 2µs making 1 call to strict::import
3233µs237µs
# spent 20µs (4+17) within Test::Builder::Formatter::BEGIN@3 which was called: # once (4µs+17µs) by Test::Builder::BEGIN@36 at line 3
use warnings;
# spent 20µs making 1 call to Test::Builder::Formatter::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7280µs12.16ms
# spent 2.16ms (1.78+384µs) within Test::Builder::Formatter::BEGIN@7 which was called: # once (1.78ms+384µs) by Test::Builder::BEGIN@36 at line 7
BEGIN { require Test2::Formatter::TAP; our @ISA = qw(Test2::Formatter::TAP) }
# spent 2.16ms making 1 call to Test::Builder::Formatter::BEGIN@7
8
9248µs297µs
# spent 51µs (5+46) within Test::Builder::Formatter::BEGIN@9 which was called: # once (5µs+46µs) by Test::Builder::BEGIN@36 at line 9
use Test2::Util::HashBase qw/no_header no_diag/;
# spent 51µs making 1 call to Test::Builder::Formatter::BEGIN@9 # spent 46µs making 1 call to Test2::Util::HashBase::import
10
11
# spent 20µs (18+2) within Test::Builder::Formatter::BEGIN@11 which was called: # once (18µs+2µs) by Test::Builder::BEGIN@36 at line 17
BEGIN {
1215µs1900ns *OUT_STD = Test2::Formatter::TAP->can('OUT_STD');
# spent 900ns making 1 call to UNIVERSAL::can
1317µs1500ns *OUT_ERR = Test2::Formatter::TAP->can('OUT_ERR');
# spent 500ns making 1 call to UNIVERSAL::can
14
1513µs1300ns my $todo = OUT_ERR() + 1;
# spent 300ns making 1 call to Test2::Formatter::TAP::OUT_ERR
1615µs *OUT_TODO = sub() { $todo };
171182µs120µs}
# spent 20µs making 1 call to Test::Builder::Formatter::BEGIN@11
18
19
# spent 86µs (3+82) within Test::Builder::Formatter::init which was called: # once (3µs+82µs) by Test2::Util::HashBase::_new at line 155 of Test2/Util/HashBase.pm
sub init {
201100ns my $self = shift;
2111µs182µs $self->SUPER::init(@_);
# spent 82µs making 1 call to Test2::Formatter::TAP::init
2212µs $self->{+HANDLES}->[OUT_TODO] = $self->{+HANDLES}->[OUT_STD];
23}
24
25
# spent 9µs (5+4) within Test::Builder::Formatter::plan_tap which was called: # once (5µs+4µs) by Test2::Formatter::TAP::event_tap at line 169 of Test2/Formatter/TAP.pm
sub plan_tap {
261300ns my ($self, $f) = @_;
27
281400ns return if $self->{+NO_HEADER};
2914µs14µs return $self->SUPER::plan_tap($f);
# spent 4µs making 1 call to Test2::Formatter::TAP::plan_tap
30}
31
32sub debug_tap {
33 my ($self, $f, $num) = @_;
34 return if $self->{+NO_DIAG};
35 my @out = $self->SUPER::debug_tap($f, $num);
36 $self->redirect(\@out) if @out && ref $f->{about} && defined $f->{about}->{package}
37 && $f->{about}->{package} eq 'Test::Builder::TodoDiag';
38 return @out;
39}
40
41sub info_tap {
42 my ($self, $f) = @_;
43 return if $self->{+NO_DIAG};
44 my @out = $self->SUPER::info_tap($f);
45 $self->redirect(\@out) if @out && ref $f->{about} && defined $f->{about}->{package}
46 && $f->{about}->{package} eq 'Test::Builder::TodoDiag';
47 return @out;
48}
49
50sub redirect {
51 my ($self, $out) = @_;
52 $_->[0] = OUT_TODO for @$out;
53}
54
55sub no_subtest_space { 1 }
56
5712µs1;
58
59__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Error-pm-46-line.html0000644000175000017500000004655014576335353024742 0ustar michamicha Profile of Test2/EventFacet/Error.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Error.pm
StatementsExecuted 10 statements in 106µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs11µsTest2::EventFacet::Error::::BEGIN@2Test2::EventFacet::Error::BEGIN@2
1117µs7µsTest2::EventFacet::Error::::BEGIN@10Test2::EventFacet::Error::BEGIN@10
1114µs50µsTest2::EventFacet::Error::::BEGIN@11Test2::EventFacet::Error::BEGIN@11
1113µs20µsTest2::EventFacet::Error::::BEGIN@3Test2::EventFacet::Error::BEGIN@3
0000s0sTest2::EventFacet::Error::::facet_keyTest2::EventFacet::Error::facet_key
0000s0sTest2::EventFacet::Error::::is_listTest2::EventFacet::Error::is_list
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Error;
2218µs213µs
# spent 11µs (9+2) within Test2::EventFacet::Error::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Event::BEGIN@18 at line 2
use strict;
# spent 11µs making 1 call to Test2::EventFacet::Error::BEGIN@2 # spent 2µs making 1 call to strict::import
3246µs236µs
# spent 20µs (3+17) within Test2::EventFacet::Error::BEGIN@3 which was called: # once (3µs+17µs) by Test2::Event::BEGIN@18 at line 3
use warnings;
# spent 20µs making 1 call to Test2::EventFacet::Error::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51400nsour $VERSION = '1.302198';
6
7sub facet_key { 'errors' }
8sub is_list { 1 }
9
10221µs17µs
# spent 7µs within Test2::EventFacet::Error::BEGIN@10 which was called: # once (7µs+0s) by Test2::Event::BEGIN@18 at line 10
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 7µs making 1 call to Test2::EventFacet::Error::BEGIN@10
11219µs296µs
# spent 50µs (4+46) within Test2::EventFacet::Error::BEGIN@11 which was called: # once (4µs+46µs) by Test2::Event::BEGIN@18 at line 11
use Test2::Util::HashBase qw{ -tag -fail };
# spent 50µs making 1 call to Test2::EventFacet::Error::BEGIN@11 # spent 46µs making 1 call to Test2::Util::HashBase::import
12
1312µs1;
14
15__END__










Spreadsheet-ParseXLSX-0.35/nytprof/warnings-pm-2-line.html0000644000175000017500000046300414576335353022365 0ustar michamicha Profile of warnings.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:22 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/warnings.pm
StatementsExecuted 5203 statements in 3.51ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
22321948µs948µswarnings::::_expand_bitswarnings::_expand_bits
12810376929µs1.50mswarnings::::unimportwarnings::unimport
949492688µs1.53mswarnings::::importwarnings::import
9511434µs809µswarnings::::_bitswarnings::_bits
51139µs61µswarnings::::register_categorieswarnings::register_categories
102122µs22µswarnings::::_mkMaskwarnings::_mkMask
0000s0swarnings::::Croakerwarnings::Croaker
0000s0swarnings::::__chkwarnings::__chk
0000s0swarnings::::_error_locwarnings::_error_loc
0000s0swarnings::::bitswarnings::bits
0000s0swarnings::::enabledwarnings::enabled
0000s0swarnings::::enabled_at_levelwarnings::enabled_at_level
0000s0swarnings::::fatal_enabledwarnings::fatal_enabled
0000s0swarnings::::fatal_enabled_at_levelwarnings::fatal_enabled_at_level
0000s0swarnings::::warnwarnings::warn
0000s0swarnings::::warn_at_levelwarnings::warn_at_level
0000s0swarnings::::warnifwarnings::warnif
0000s0swarnings::::warnif_at_levelwarnings::warnif_at_level
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# -*- mode: Perl; buffer-read-only: t -*-
2# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3# This file is built by regen/warnings.pl.
4# Any changes made here will be lost!
5
6package warnings;
7
81600nsour $VERSION = "1.65";
9
10# Verify that we're called correctly so that warnings will work.
11# Can't use Carp, since Carp uses us!
12# String regexps because constant folding = smaller optree = less memory vs regexp literal
13# see also strict.pm.
1419µs13µsdie sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
# spent 3µs making 1 call to CORE::match
15 if __FILE__ !~ ( '(?x) \b '.__PACKAGE__.' \.pmc? \z' )
16 && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
17
18114µsour %Offsets = (
19 # Warnings Categories added in Perl 5.008
20 'all' => 0,
21 'closure' => 2,
22 'deprecated' => 4,
23 'exiting' => 6,
24 'glob' => 8,
25 'io' => 10,
26 'closed' => 12,
27 'exec' => 14,
28 'layer' => 16,
29 'newline' => 18,
30 'pipe' => 20,
31 'unopened' => 22,
32 'misc' => 24,
33 'numeric' => 26,
34 'once' => 28,
35 'overflow' => 30,
36 'pack' => 32,
37 'portable' => 34,
38 'recursion' => 36,
39 'redefine' => 38,
40 'regexp' => 40,
41 'severe' => 42,
42 'debugging' => 44,
43 'inplace' => 46,
44 'internal' => 48,
45 'malloc' => 50,
46 'signal' => 52,
47 'substr' => 54,
48 'syntax' => 56,
49 'ambiguous' => 58,
50 'bareword' => 60,
51 'digit' => 62,
52 'parenthesis' => 64,
53 'precedence' => 66,
54 'printf' => 68,
55 'prototype' => 70,
56 'qw' => 72,
57 'reserved' => 74,
58 'semicolon' => 76,
59 'taint' => 78,
60 'threads' => 80,
61 'uninitialized' => 82,
62 'unpack' => 84,
63 'untie' => 86,
64 'utf8' => 88,
65 'void' => 90,
66
67 # Warnings Categories added in Perl 5.011
68 'imprecision' => 92,
69 'illegalproto' => 94,
70
71 # Warnings Categories added in Perl 5.011003
72 'deprecated::goto_construct' => 96,
73 'deprecated::unicode_property_name' => 98,
74
75 # Warnings Categories added in Perl 5.013
76 'non_unicode' => 100,
77 'nonchar' => 102,
78 'surrogate' => 104,
79
80 # Warnings Categories added in Perl 5.017
81 'experimental' => 106,
82 'experimental::regex_sets' => 108,
83
84 # Warnings Categories added in Perl 5.019
85 'syscalls' => 110,
86
87 # Warnings Categories added in Perl 5.021
88 'experimental::const_attr' => 112,
89 'experimental::re_strict' => 114,
90 'experimental::refaliasing' => 116,
91 'locale' => 118,
92 'missing' => 120,
93 'redundant' => 122,
94
95 # Warnings Categories added in Perl 5.025
96 'experimental::declared_refs' => 124,
97
98 # Warnings Categories added in Perl 5.025011
99 'deprecated::dot_in_inc' => 126,
100
101 # Warnings Categories added in Perl 5.027
102 'shadow' => 128,
103
104 # Warnings Categories added in Perl 5.029
105 'experimental::private_use' => 130,
106 'experimental::uniprop_wildcards' => 132,
107 'experimental::vlb' => 134,
108
109 # Warnings Categories added in Perl 5.033
110 'experimental::try' => 136,
111
112 # Warnings Categories added in Perl 5.035
113 'experimental::args_array_with_signatures'=> 138,
114 'experimental::builtin' => 140,
115 'experimental::defer' => 142,
116 'experimental::extra_paired_delimiters'=> 144,
117 'experimental::for_list' => 146,
118 'scalar' => 148,
119
120 # Warnings Categories added in Perl 5.035009
121 'deprecated::version_downgrade' => 150,
122
123 # Warnings Categories added in Perl 5.03501
124 'deprecated::delimiter_will_be_paired'=> 152,
125
126 # Warnings Categories added in Perl 5.037
127 'experimental::class' => 154,
128
129 # Warnings Categories added in Perl 5.037009
130 'deprecated::apostrophe_as_package_separator'=> 156,
131
132 # Warnings Categories added in Perl 5.03701
133 'deprecated::smartmatch' => 158,
134);
135
136117µsour %Bits = (
137 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55", # [0..79]
138 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
139 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
140 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
141 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
142 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
143 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x40\x00\x00\x40\x51", # [2,48,49,63,75,76,78,79]
144 'deprecated::apostrophe_as_package_separator'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [78]
145 'deprecated::delimiter_will_be_paired'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [76]
146 'deprecated::dot_in_inc' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [63]
147 'deprecated::goto_construct' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [48]
148 'deprecated::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40", # [79]
149 'deprecated::unicode_property_name' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [49]
150 'deprecated::version_downgrade' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [75]
151 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
152 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
153 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
154 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x15\x10\x54\x55\x05\x04", # [53,54,56..58,62,65..73,77]
155 'experimental::args_array_with_signatures'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [69]
156 'experimental::builtin' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [70]
157 'experimental::class' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [77]
158 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [56]
159 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [62]
160 'experimental::defer' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [71]
161 'experimental::extra_paired_delimiters'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [72]
162 'experimental::for_list' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [73]
163 'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [65]
164 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [57]
165 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [58]
166 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [54]
167 'experimental::try' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [68]
168 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [66]
169 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [67]
170 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
171 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [47]
172 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [46]
173 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
174 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
175 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [5..11,55]
176 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
177 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [59]
178 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
179 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
180 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [60]
181 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
182 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [50]
183 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [51]
184 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
185 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
186 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
187 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
188 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
189 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
190 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
191 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
192 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
193 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
194 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [36]
195 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
196 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
197 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [61]
198 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
199 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [37]
200 'scalar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [74]
201 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [38]
202 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
203 'shadow' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [64]
204 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
205 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
206 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [52]
207 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [28..38,47]
208 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [55]
209 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [39]
210 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [40]
211 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [41]
212 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
213 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [42]
214 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [43]
215 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x50\x01\x00\x00\x00\x00\x00\x00", # [44,50..52]
216 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [45]
217);
218
219110µsour %DeadBits = (
220 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", # [0..79]
221 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
222 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
223 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
224 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
225 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
226 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x80\x00\x00\x80\xa2", # [2,48,49,63,75,76,78,79]
227 'deprecated::apostrophe_as_package_separator'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [78]
228 'deprecated::delimiter_will_be_paired'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [76]
229 'deprecated::dot_in_inc' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [63]
230 'deprecated::goto_construct' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [48]
231 'deprecated::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", # [79]
232 'deprecated::unicode_property_name' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [49]
233 'deprecated::version_downgrade' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [75]
234 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
235 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
236 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
237 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x2a\x20\xa8\xaa\x0a\x08", # [53,54,56..58,62,65..73,77]
238 'experimental::args_array_with_signatures'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [69]
239 'experimental::builtin' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [70]
240 'experimental::class' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [77]
241 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [56]
242 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [62]
243 'experimental::defer' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [71]
244 'experimental::extra_paired_delimiters'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [72]
245 'experimental::for_list' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [73]
246 'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [65]
247 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [57]
248 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [58]
249 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [54]
250 'experimental::try' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [68]
251 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [66]
252 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [67]
253 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
254 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [47]
255 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [46]
256 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
257 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
258 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [5..11,55]
259 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
260 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [59]
261 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
262 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
263 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [60]
264 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
265 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [50]
266 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [51]
267 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
268 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
269 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
270 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
271 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
272 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
273 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
274 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
275 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
276 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
277 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [36]
278 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
279 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
280 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [61]
281 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
282 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [37]
283 'scalar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [74]
284 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [38]
285 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
286 'shadow' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [64]
287 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
288 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
289 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [52]
290 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [28..38,47]
291 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [55]
292 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [39]
293 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [40]
294 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [41]
295 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
296 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [42]
297 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [43]
298 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xa0\x02\x00\x00\x00\x00\x00\x00", # [44,50..52]
299 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [45]
300);
301
30216µsour %NoOp = (
303 'experimental::alpha_assertions' => 1,
304 'experimental::bitwise' => 1,
305 'experimental::isa' => 1,
306 'experimental::lexical_subs' => 1,
307 'experimental::postderef' => 1,
308 'experimental::script_run' => 1,
309 'experimental::signatures' => 1,
310 'experimental::smartmatch' => 1,
311);
312
313# These are used by various things, including our own tests
3141300nsour $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
3151100nsour $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x05\x00\x55\x50\x54\x55\x45\x55"; # [2,4,22,23,25,48,49,56..59,62,63,65..73,75..79]
3161100nsour $LAST_BIT = 160 ;
3171100nsour $BYTES = 20 ;
318
319sub Croaker
320{
321 require Carp; # this initializes %CarpInternal
322 local $Carp::CarpInternal{'warnings'};
323 delete $Carp::CarpInternal{'warnings'};
324 Carp::croak(@_);
325}
326
327
# spent 948µs within warnings::_expand_bits which was called 223 times, avg 4µs/call: # 128 times (574µs+0s) by warnings::unimport at line 414, avg 4µs/call # 95 times (375µs+0s) by warnings::_bits at line 352, avg 4µs/call
sub _expand_bits {
32822338µs my $bits = shift;
32922374µs my $want_len = ($LAST_BIT + 7) >> 3;
33022336µs my $len = length($bits);
33122372µs if ($len != $want_len) {
33220894µs if ($bits eq "") {
333 $bits = "\x00" x $want_len;
334 } elsif ($len > $want_len) {
335 substr $bits, $want_len, $len-$want_len, "";
336 } else {
337208133µs my $x = vec($bits, $Offsets{all} >> 1, 2);
33820879µs $x |= $x << 2;
33920830µs $x |= $x << 4;
340208205µs $bits .= chr($x) x ($want_len - $len);
341 }
342 }
343223407µs return $bits;
344}
345
346
# spent 809µs (434+375) within warnings::_bits which was called 95 times, avg 9µs/call: # 95 times (434µs+375µs) by warnings::import at line 397, avg 9µs/call
sub _bits {
3479517µs my $mask = shift ;
348958µs my $catmask ;
3499515µs my $fatal = 0 ;
350957µs my $no_fatal = 0 ;
351
3529583µs95375µs $mask = _expand_bits($mask);
# spent 375µs making 95 calls to warnings::_expand_bits, avg 4µs/call
3539527µs foreach my $word ( @_ ) {
3549530µs next if $NoOp{$word};
3559578µs if ($word eq 'FATAL') {
356 $fatal = 1;
357 $no_fatal = 0;
358 }
359 elsif ($word eq 'NONFATAL') {
360 $fatal = 0;
361 $no_fatal = 1;
362 }
363 elsif ($catmask = $Bits{$word}) {
3649536µs $mask |= $catmask ;
3659511µs $mask |= $DeadBits{$word} if $fatal ;
3669510µs $mask = ~(~$mask | $DeadBits{$word}) if $no_fatal ;
367 }
368 else
369 { Croaker("Unknown warnings category '$word'")}
370 }
371
37295103µs return $mask ;
373}
374
375sub bits
376{
377 # called from B::Deparse.pm
378 push @_, 'all' unless @_ ;
379 return _bits("", @_) ;
380}
381
382sub import
383
# spent 1.53ms (688µs+838µs) within warnings::import which was called 94 times, avg 16µs/call: # once (12µs+14µs) by Test2::EventFacet::Parent::BEGIN@3 at line 3 of Test2/EventFacet/Parent.pm # once (7µs+15µs) by Test2::Event::Exception::BEGIN@3 at line 3 of Test2/Event/Exception.pm # once (12µs+9µs) by main::BEGIN@4 at line 4 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t # once (10µs+11µs) by Test::Builder::BEGIN@693 at line 693 of Test/Builder.pm # once (9µs+12µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@4 at line 4 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm # once (7µs+12µs) by Test::Builder::BEGIN@5 at line 5 of Test/Builder.pm # once (10µs+10µs) by Test2::API::Stack::BEGIN@3 at line 3 of Test2/API/Stack.pm # once (8µs+11µs) by Config::BEGIN@10 at line 10 of Config.pm # once (9µs+9µs) by Test2::Util::Trace::BEGIN@4 at line 4 of Test2/Util/Trace.pm # once (8µs+10µs) by Test2::API::Instance::BEGIN@3 at line 3 of Test2/API/Instance.pm # once (8µs+10µs) by Test2::EventFacet::Plan::BEGIN@3 at line 3 of Test2/EventFacet/Plan.pm # once (8µs+10µs) by Config::BEGIN@6 at line 6 of Config_heavy.pl # once (8µs+9µs) by Test2::Event::Ok::BEGIN@3 at line 3 of Test2/Event/Ok.pm # once (8µs+9µs) by Test2::Event::Diag::BEGIN@3 at line 3 of Test2/Event/Diag.pm # once (10µs+8µs) by overloading::BEGIN@2 at line 2 of overloading.pm # once (8µs+10µs) by Test2::API::Context::BEGIN@3 at line 3 of Test2/API/Context.pm # once (8µs+10µs) by Test2::API::BEGIN@3 at line 3 of Test2/API.pm # once (7µs+10µs) by Test2::Event::Note::BEGIN@3 at line 3 of Test2/Event/Note.pm # once (8µs+9µs) by Test2::Hub::Subtest::BEGIN@3 at line 3 of Test2/Hub/Subtest.pm # once (8µs+9µs) by Test2::Event::Subtest::BEGIN@3 at line 3 of Test2/Event/Subtest.pm # once (8µs+9µs) by Test::Builder::TodoDiag::BEGIN@3 at line 3 of Test/Builder/TodoDiag.pm # once (7µs+9µs) by Test::Builder::Formatter::BEGIN@3 at line 3 of Test/Builder/Formatter.pm # once (8µs+9µs) by Test2::EventFacet::Hub::BEGIN@3 at line 3 of Test2/EventFacet/Hub.pm # once (8µs+9µs) by Test2::Event::Bail::BEGIN@3 at line 3 of Test2/Event/Bail.pm # once (8µs+9µs) by Test2::Event::Fail::BEGIN@3 at line 3 of Test2/Event/Fail.pm # once (8µs+9µs) by mro::BEGIN@11 at line 11 of mro.pm # once (7µs+9µs) by Spreadsheet::ParseExcel::Workbook::BEGIN@20 at line 20 of Spreadsheet/ParseExcel/Workbook.pm # once (7µs+9µs) by File::Copy::BEGIN@12 at line 12 of File/Copy.pm # once (8µs+9µs) by Test2::Event::Waiting::BEGIN@3 at line 3 of Test2/Event/Waiting.pm # once (7µs+9µs) by Test2::Event::V2::BEGIN@3 at line 3 of Test2/Event/V2.pm # once (7µs+9µs) by Test2::EventFacet::Trace::BEGIN@3 at line 3 of Test2/EventFacet/Trace.pm # once (7µs+9µs) by Test2::EventFacet::Error::BEGIN@3 at line 3 of Test2/EventFacet/Error.pm # once (7µs+9µs) by Test2::Event::Pass::BEGIN@3 at line 3 of Test2/Event/Pass.pm # once (8µs+9µs) by Test2::Hub::BEGIN@3 at line 3 of Test2/Hub.pm # once (7µs+9µs) by File::Basename::BEGIN@52 at line 52 of File/Basename.pm # once (7µs+9µs) by Test2::EventFacet::About::BEGIN@3 at line 3 of Test2/EventFacet/About.pm # once (7µs+9µs) by File::Find::BEGIN@4 at line 4 of File/Find.pm # once (7µs+9µs) by Test2::Event::Skip::BEGIN@3 at line 3 of Test2/Event/Skip.pm # once (7µs+9µs) by Encode::Config::BEGIN@8 at line 8 of Encode/Config.pm # once (7µs+9µs) by Test2::Event::BEGIN@3 at line 3 of Test2/Event.pm # once (7µs+9µs) by Compress::Raw::Zlib::BEGIN@9 at line 9 of Compress/Raw/Zlib.pm # once (7µs+9µs) by Test2::Util::ExternalMeta::BEGIN@3 at line 3 of Test2/Util/ExternalMeta.pm # once (7µs+10µs) by Encode::BEGIN@6 at line 6 of Encode.pm # once (7µs+9µs) by Test2::EventFacet::Info::BEGIN@3 at line 3 of Test2/EventFacet/Info.pm # once (7µs+9µs) by Test2::Hub::Interceptor::BEGIN@3 at line 3 of Test2/Hub/Interceptor.pm # once (7µs+9µs) by Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4 at line 4 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm # once (7µs+9µs) by Digest::base::BEGIN@4 at line 4 of Digest/base.pm # once (7µs+9µs) by URI::BEGIN@4 at line 4 of URI.pm # once (7µs+9µs) by Spreadsheet::ParseXLSX::BEGIN@4 at line 4 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (7µs+9µs) by Test2::Event::Plan::BEGIN@3 at line 3 of Test2/Event/Plan.pm # once (8µs+8µs) by Carp::BEGIN@5 at line 5 of Carp.pm # once (7µs+9µs) by Crypt::Mode::ECB::BEGIN@6 at line 6 of Crypt/Mode/ECB.pm # once (8µs+7µs) by List::Util::BEGIN@10 at line 10 of List/Util.pm # once (7µs+9µs) by Encode::MIME::Name::BEGIN@3 at line 3 of Encode/MIME/Name.pm # once (7µs+8µs) by Test2::EventFacet::Amnesty::BEGIN@3 at line 3 of Test2/EventFacet/Amnesty.pm # once (7µs+9µs) by Test2::EventFacet::Control::BEGIN@3 at line 3 of Test2/EventFacet/Control.pm # once (8µs+7µs) by Test::More::BEGIN@5 at line 5 of Test/More.pm # once (7µs+9µs) by MIME::Base64::BEGIN@4 at line 4 of MIME/Base64.pm # once (7µs+9µs) by Encode::Encoding::BEGIN@5 at line 5 of Encode/Encoding.pm # once (7µs+9µs) by Test2::Util::Facets2Legacy::BEGIN@3 at line 3 of Test2/Util/Facets2Legacy.pm # once (7µs+9µs) by JSON::PP::Boolean::BEGIN@4 at line 4 of JSON/PP/Boolean.pm # once (7µs+9µs) by Encode::Alias::BEGIN@3 at line 3 of Encode/Alias.pm # once (7µs+9µs) by Spreadsheet::ParseExcel::BEGIN@18 at line 18 of Spreadsheet/ParseExcel.pm # once (7µs+8µs) by Test2::EventFacet::Meta::BEGIN@3 at line 3 of Test2/EventFacet/Meta.pm # once (7µs+9µs) by Test2::EventFacet::BEGIN@3 at line 3 of Test2/EventFacet.pm # once (7µs+9µs) by Test2::Hub::Interceptor::Terminator::BEGIN@3 at line 3 of Test2/Hub/Interceptor/Terminator.pm # once (7µs+8µs) by Test2::EventFacet::Assert::BEGIN@3 at line 3 of Test2/EventFacet/Assert.pm # once (7µs+8µs) by Test2::Formatter::BEGIN@3 at line 3 of Test2/Formatter.pm # once (6µs+9µs) by Spreadsheet::ParseXLSX::Cell::BEGIN@4 at line 4 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Cell.pm # once (7µs+8µs) by Symbol::BEGIN@4 at line 4 of Symbol.pm # once (7µs+9µs) by IO::BEGIN@8 at line 8 of IO.pm # once (6µs+9µs) by Graphics::ColorUtils::BEGIN@6 at line 6 of Graphics/ColorUtils.pm # once (7µs+8µs) by Spreadsheet::ParseExcel::Font::BEGIN@20 at line 20 of Spreadsheet/ParseExcel/Font.pm # once (6µs+8µs) by Test2::Util::HashBase::BEGIN@3 at line 3 of Test2/Util/HashBase.pm # once (7µs+8µs) by URI::Escape::BEGIN@4 at line 4 of URI/Escape.pm # once (6µs+9µs) by Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@4 at line 4 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm # once (7µs+8µs) by Digest::SHA::BEGIN@6 at line 6 of Digest/SHA.pm # once (8µs+7µs) by Test2::Util::BEGIN@3 at line 3 of Test2/Util.pm # once (6µs+9µs) by utf8::BEGIN@4 at line 4 of utf8.pm # once (7µs+8µs) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@20 at line 20 of Spreadsheet/ParseExcel/FmtDefault.pm # once (6µs+8µs) by Spreadsheet::ParseExcel::Worksheet::BEGIN@20 at line 20 of Spreadsheet/ParseExcel/Worksheet.pm # once (6µs+8µs) by Test2::Formatter::TAP::BEGIN@3 at line 3 of Test2/Formatter/TAP.pm # once (6µs+8µs) by Spreadsheet::ParseXLSX::BEGIN@2 at line 2 of XML/Twig.pm # once (6µs+8µs) by Crypt::Mode::CBC::BEGIN@6 at line 6 of Crypt/Mode/CBC.pm # once (6µs+8µs) by Spreadsheet::ParseExcel::Format::BEGIN@20 at line 20 of Spreadsheet/ParseExcel/Format.pm # once (7µs+7µs) by Test::Builder::BEGIN@133 at line 133 of Test/Builder.pm # once (6µs+8µs) by bytes::BEGIN@4 at line 4 of bytes.pm # once (6µs+7µs) by builtin::BEGIN@4 at line 4 of builtin.pm # once (7µs+7µs) by Scalar::Util::BEGIN@10 at line 10 of Scalar/Util.pm # once (6µs+8µs) by Spreadsheet::ParseExcel::Cell::BEGIN@20 at line 20 of Spreadsheet/ParseExcel/Cell.pm # once (7µs+7µs) by POSIX::BEGIN@3 at line 3 of POSIX.pm # once (6µs+8µs) by Crypt::Cipher::BEGIN@4 at line 4 of Crypt/Cipher.pm # once (6µs+8µs) by CryptX::BEGIN@4 at line 4 of CryptX.pm # once (6µs+7µs) by Spreadsheet::ParseExcel::Utility::BEGIN@20 at line 20 of Spreadsheet/ParseExcel/Utility.pm
{
3849426µs my $invocant = shift;
385
386 # append 'all' when implied (empty import list or after a lone
387 # "FATAL" or "NONFATAL")
3889470µs push @_, 'all'
389 if !@_ || (@_==1 && ($_[0] eq 'FATAL' || $_[0] eq 'NONFATAL'));
390
3919430µs my @fatal = ();
39294223µs foreach my $warning (@_) {
39395278µs9529µs if($warning =~ /^(NON)?FATAL$/) {
# spent 29µs making 95 calls to CORE::match, avg 309ns/call
394 @fatal = ($warning);
395 } elsif(substr($warning, 0, 1) ne '-') {
3969571µs my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
39795121µs95809µs ${^WARNING_BITS} = _bits($mask, @fatal, $warning);
# spent 809µs making 95 calls to warnings::_bits, avg 9µs/call
398 } else {
399 $invocant->unimport(substr($warning, 1));
400 }
401 }
402}
403
404sub unimport
405
# spent 1.50ms (929µs+573µs) within warnings::unimport which was called 128 times, avg 12µs/call: # 4 times (28µs+16µs) by XML::Twig::BEGIN@1.50 or XML::Twig::BEGIN@1.57 or XML::Twig::BEGIN@1.60 or XML::Twig::BEGIN@1.67 at line 1 of (eval 106)[XML/Twig.pm:1750], avg 11µs/call # 4 times (25µs+18µs) by XML::Twig::Elt::BEGIN@1.19 or XML::Twig::Elt::BEGIN@1.28 or XML::Twig::Elt::BEGIN@1.43 or XML::Twig::Elt::BEGIN@1.48 at line 1 of (eval 75)[XML/Twig.pm:5871], avg 11µs/call # 4 times (24µs+15µs) by XML::Twig::Elt::BEGIN@1.21 or XML::Twig::Elt::BEGIN@1.37 or XML::Twig::Elt::BEGIN@1.42 or XML::Twig::Elt::BEGIN@1.49 at line 1 of (eval 77)[XML/Twig.pm:5871], avg 10µs/call # 3 times (18µs+12µs) by XML::Twig::Elt::BEGIN@1.18 or XML::Twig::Elt::BEGIN@1.36 or XML::Twig::Elt::BEGIN@1.74 at line 1 of (eval 74)[XML/Twig.pm:5871], avg 10µs/call # 3 times (18µs+11µs) by XML::Twig::Elt::BEGIN@1.16 or XML::Twig::Elt::BEGIN@1.26 or XML::Twig::Elt::BEGIN@1.32 at line 1 of (eval 72)[XML/Twig.pm:5871], avg 10µs/call # 3 times (17µs+11µs) by XML::Twig::Elt::BEGIN@1.17 or XML::Twig::Elt::BEGIN@1.27 or XML::Twig::Elt::BEGIN@1.33 at line 1 of (eval 73)[XML/Twig.pm:5871], avg 9µs/call # 2 times (23µs+8µs) by XML::Twig::BEGIN@1.52 or XML::Twig::BEGIN@1.62 at line 1 of (eval 108)[XML/Twig.pm:1750], avg 15µs/call # 2 times (13µs+8µs) by XML::Twig::BEGIN@1.53 or XML::Twig::BEGIN@1.63 at line 1 of (eval 109)[XML/Twig.pm:1750], avg 11µs/call # 2 times (13µs+8µs) by XML::Twig::Elt::BEGIN@1.22 or XML::Twig::Elt::BEGIN@1.44 at line 1 of (eval 78)[XML/Twig.pm:5871], avg 11µs/call # 2 times (13µs+8µs) by XML::Twig::BEGIN@1.54 or XML::Twig::BEGIN@1.64 at line 1 of (eval 110)[XML/Twig.pm:1750], avg 11µs/call # 2 times (12µs+8µs) by XML::Twig::BEGIN@1.55 or XML::Twig::BEGIN@1.65 at line 1 of (eval 111)[XML/Twig.pm:1750], avg 10µs/call # 2 times (13µs+8µs) by XML::Twig::BEGIN@1.58 or XML::Twig::BEGIN@1.68 at line 1 of (eval 114)[XML/Twig.pm:1750], avg 10µs/call # 2 times (12µs+8µs) by XML::Twig::BEGIN@1.59 or XML::Twig::BEGIN@1.69 at line 1 of (eval 115)[XML/Twig.pm:1750], avg 10µs/call # 2 times (12µs+8µs) by XML::Twig::BEGIN@1.56 or XML::Twig::BEGIN@1.66 at line 1 of (eval 112)[XML/Twig.pm:1750], avg 10µs/call # 2 times (12µs+8µs) by XML::Twig::Elt::BEGIN@1.15 or XML::Twig::Elt::BEGIN@1.25 at line 1 of (eval 71)[XML/Twig.pm:5871], avg 10µs/call # 2 times (12µs+8µs) by XML::Twig::BEGIN@1.51 or XML::Twig::BEGIN@1.61 at line 1 of (eval 107)[XML/Twig.pm:1750], avg 10µs/call # once (9µs+19µs) by Test::More::BEGIN@1783 at line 1783 of Test/More.pm # once (20µs+4µs) by XML::Twig::Elt::BEGIN@1 at line 1 of (eval 58)[XML/Twig.pm:7113] # once (8µs+15µs) by Test2::API::Instance::BEGIN@63 at line 63 of Test2/API/Instance.pm # once (14µs+9µs) by XML::Twig::Elt::BEGIN@1.73 at line 1 of (eval 129)[XML/Twig.pm:7113] # once (9µs+14µs) by Test::More::BEGIN@1408 at line 1408 of Test/More.pm # once (9µs+11µs) by File::Glob::BEGIN@50 at line 50 of File/Glob.pm # once (10µs+7µs) by XML::Twig::Elt::BEGIN@1.70 at line 1 of (eval 126)[XML/Twig.pm:5871] # once (10µs+5µs) by Test::Builder::BEGIN@684 at line 684 of Test/Builder.pm # once (10µs+5µs) by Exporter::Heavy::BEGIN@202 at line 202 of Exporter/Heavy.pm # once (10µs+5µs) by Test2::Util::BEGIN@72 at line 72 of Test2/Util.pm # once (9µs+5µs) by Test2::API::Stack::BEGIN@81 at line 81 of Test2/API/Stack.pm # once (10µs+4µs) by JSON::PP::BEGIN@209 at line 209 of JSON/PP.pm # once (8µs+6µs) by XML::Twig::Elt::BEGIN@1.7 at line 1 of (eval 63)[XML/Twig.pm:7113] # once (9µs+5µs) by Test2::Event::Ok::BEGIN@22 at line 22 of Test2/Event/Ok.pm # once (9µs+5µs) by JSON::PP::BEGIN@493 at line 493 of JSON/PP.pm # once (9µs+5µs) by Test2::Hub::Interceptor::BEGIN@93 at line 93 of Test2/Hub/Interceptor.pm # once (9µs+5µs) by Test2::Formatter::TAP::BEGIN@89 at line 89 of Test2/Formatter/TAP.pm # once (9µs+5µs) by Test::Builder::BEGIN@1057 at line 1057 of Test/Builder.pm # once (8µs+5µs) by Test2::EventFacet::Meta::BEGIN@12 at line 12 of Test2/EventFacet/Meta.pm # once (9µs+4µs) by JSON::PP::BEGIN@1285 at line 1285 of JSON/PP.pm # once (9µs+5µs) by Test::Builder::BEGIN@1167 at line 1167 of Test/Builder.pm # once (8µs+5µs) by Test2::API::BEGIN@71 at line 71 of Test2/API.pm # once (9µs+4µs) by Test2::API::Context::BEGIN@72 at line 72 of Test2/API/Context.pm # once (8µs+5µs) by Spreadsheet::ParseExcel::BEGIN@2705 at line 2705 of Spreadsheet/ParseExcel.pm # once (9µs+4µs) by URI::Escape::BEGIN@191 at line 191 of URI/Escape.pm # once (8µs+5µs) by Spreadsheet::ParseExcel::Workbook::BEGIN@189 at line 189 of Spreadsheet/ParseExcel/Workbook.pm # once (8µs+5µs) by Test2::Hub::Subtest::BEGIN@24 at line 24 of Test2/Hub/Subtest.pm # once (8µs+5µs) by Test::Builder::BEGIN@797 at line 797 of Test/Builder.pm # once (8µs+5µs) by overload::BEGIN@102 at line 102 of overload.pm # once (8µs+5µs) by Spreadsheet::ParseExcel::Worksheet::BEGIN@625 at line 625 of Spreadsheet/ParseExcel/Worksheet.pm # once (8µs+5µs) by Test2::Event::Subtest::BEGIN@20 at line 20 of Test2/Event/Subtest.pm # once (8µs+4µs) by XML::Twig::BEGIN@812 at line 812 of XML/Twig.pm # once (7µs+5µs) by XML::Twig::Elt::BEGIN@1.8 at line 1 of (eval 64)[XML/Twig.pm:7113] # once (8µs+4µs) by Test2::Util::BEGIN@80 at line 80 of Test2/Util.pm # once (8µs+4µs) by JSON::PP::BEGIN@1471 at line 1471 of JSON/PP.pm # once (8µs+5µs) by Test2::EventFacet::Trace::BEGIN@16 at line 16 of Test2/EventFacet/Trace.pm # once (8µs+4µs) by Storable::BEGIN@66 at line 66 of Storable.pm # once (8µs+4µs) by Test2::Util::BEGIN@113 at line 113 of Test2/Util.pm # once (8µs+4µs) by Spreadsheet::ParseExcel::Cell::BEGIN@169 at line 169 of Spreadsheet/ParseExcel/Cell.pm # once (8µs+4µs) by Test::Builder::BEGIN@1519 at line 1519 of Test/Builder.pm # once (10µs+2µs) by Carp::BEGIN@744 at line 744 of Carp.pm # once (7µs+5µs) by Test2::Hub::Subtest::BEGIN@47 at line 47 of Test2/Hub/Subtest.pm # once (8µs+4µs) by Test2::Formatter::TAP::BEGIN@113 at line 113 of Test2/Formatter/TAP.pm # once (8µs+4µs) by Test::More::BEGIN@1494 at line 1494 of Test/More.pm # once (7µs+4µs) by Test2::Util::BEGIN@89 at line 89 of Test2/Util.pm # once (10µs+2µs) by Carp::BEGIN@6 at line 24 of Carp.pm # once (7µs+4µs) by Test::Builder::BEGIN@62 at line 62 of Test/Builder.pm # once (7µs+4µs) by XML::Twig::Elt::BEGIN@1.6 at line 1 of (eval 62)[XML/Twig.pm:7113] # once (7µs+4µs) by XML::Twig::Elt::BEGIN@1.3 at line 1 of (eval 59)[XML/Twig.pm:5871] # once (7µs+4µs) by XML::Twig::BEGIN@1.46 at line 1 of (eval 102)[XML/Twig.pm:1750] # once (7µs+4µs) by JSON::PP::BEGIN@515 at line 515 of JSON/PP.pm # once (7µs+4µs) by XML::Twig::Elt::BEGIN@1.5 at line 1 of (eval 61)[XML/Twig.pm:7113] # once (7µs+4µs) by Test2::Util::HashBase::BEGIN@18 at line 18 of Test2/Util/HashBase.pm # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.4 at line 1 of (eval 60)[XML/Twig.pm:7113] # once (7µs+4µs) by Test2::Hub::Subtest::BEGIN@66 at line 66 of Test2/Hub/Subtest.pm # once (7µs+4µs) by Test::Builder::BEGIN@1540 at line 1540 of Test/Builder.pm # once (6µs+4µs) by Test::Builder::BEGIN@103 at line 103 of Test/Builder.pm # once (7µs+4µs) by XML::Twig::Elt::BEGIN@1.38 at line 1 of (eval 94)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.20 at line 1 of (eval 76)[XML/Twig.pm:7113] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.47 at line 1 of (eval 103)[XML/Twig.pm:7113] # once (7µs+4µs) by Test2::Util::HashBase::BEGIN@29 at line 29 of Test2/Util/HashBase.pm # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.34 at line 1 of (eval 90)[XML/Twig.pm:5871] # once (6µs+4µs) by Test::Builder::BEGIN@131 at line 131 of Test/Builder.pm # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.23 at line 1 of (eval 79)[XML/Twig.pm:5871] # once (6µs+4µs) by Test::Builder::BEGIN@1557 at line 1557 of Test/Builder.pm # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.13 at line 1 of (eval 69)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.31 at line 1 of (eval 87)[XML/Twig.pm:7113] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.14 at line 1 of (eval 70)[XML/Twig.pm:7113] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.9 at line 1 of (eval 65)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.10 at line 1 of (eval 66)[XML/Twig.pm:7113] # once (6µs+4µs) by Test2::API::BEGIN@76 at line 76 of Test2/API.pm # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.41 at line 1 of (eval 97)[XML/Twig.pm:7113] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.35 at line 1 of (eval 91)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.30 at line 1 of (eval 86)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.39 at line 1 of (eval 95)[XML/Twig.pm:5871] # once (6µs+4µs) by Test::Builder::BEGIN@117 at line 117 of Test/Builder.pm # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.45 at line 1 of (eval 101)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.12 at line 1 of (eval 68)[XML/Twig.pm:7113] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.11 at line 1 of (eval 67)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.71 at line 1 of (eval 127)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.72 at line 1 of (eval 128)[XML/Twig.pm:5871] # once (6µs+3µs) by XML::Twig::Elt::BEGIN@1.40 at line 1 of (eval 96)[XML/Twig.pm:5871] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.29 at line 1 of (eval 85)[XML/Twig.pm:7113] # once (6µs+4µs) by XML::Twig::Elt::BEGIN@1.24 at line 1 of (eval 80)[XML/Twig.pm:5871] # once (6µs+3µs) by File::Copy::BEGIN@12.1 at line 12 of File/Copy.pm # once (6µs+1µs) by Test::Builder::BEGIN@121 at line 121 of Test/Builder.pm # once (4µs+1000ns) by File::Copy::BEGIN@13 at line 13 of File/Copy.pm
{
40612816µs shift;
407
40812815µs my $catmask ;
409128104µs my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
410
411 # append 'all' when implied (empty import list or after a lone "FATAL")
41212889µs push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
413
414128107µs128574µs $mask = _expand_bits($mask);
# spent 574µs making 128 calls to warnings::_expand_bits, avg 4µs/call
41512854µs foreach my $word ( @_ ) {
41612937µs next if $NoOp{$word};
417129204µs if ($word eq 'FATAL') {
418 next;
419 }
420 elsif ($catmask = $Bits{$word}) {
421 $mask = ~(~$mask | $catmask | $DeadBits{$word});
422 }
423 else
424 { Croaker("Unknown warnings category '$word'")}
425 }
426
427128316µs ${^WARNING_BITS} = $mask ;
428}
429
43022µsmy %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
431
432sub LEVEL () { 8 };
433sub MESSAGE () { 4 };
434sub FATAL () { 2 };
435sub NORMAL () { 1 };
436
437sub __chk
438{
439 my $category ;
440 my $offset ;
441 my $isobj = 0 ;
442 my $wanted = shift;
443 my $has_message = $wanted & MESSAGE;
444 my $has_level = $wanted & LEVEL ;
445
446 if ($has_level) {
447 if (@_ != ($has_message ? 3 : 2)) {
448 my $sub = (caller 1)[3];
449 my $syntax = $has_message
450 ? "category, level, 'message'"
451 : 'category, level';
452 Croaker("Usage: $sub($syntax)");
453 }
454 }
455 elsif (not @_ == 1 || @_ == ($has_message ? 2 : 0)) {
456 my $sub = (caller 1)[3];
457 my $syntax = $has_message ? "[category,] 'message'" : '[category]';
458 Croaker("Usage: $sub($syntax)");
459 }
460
461 my $message = pop if $has_message;
462
463 if (@_) {
464 # check the category supplied.
465 $category = shift ;
466 if (my $type = ref $category) {
467 Croaker("not an object")
468 if exists $builtin_type{$type};
469 $category = $type;
470 $isobj = 1 ;
471 }
472 $offset = $Offsets{$category};
473 Croaker("Unknown warnings category '$category'")
474 unless defined $offset;
475 }
476 else {
477 $category = caller(1);
478 $offset = $Offsets{$category};
479 Croaker("package '$category' not registered for warnings")
480 unless defined $offset ;
481 }
482
483 my $i;
484
485 if ($isobj) {
486 my $pkg;
487 $i = 2;
488 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
489 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
490 }
491 $i -= 2 ;
492 }
493 elsif ($has_level) {
494 $i = 2 + shift;
495 }
496 else {
497 $i = _error_loc(); # see where Carp will allocate the error
498 }
499
500 # Default to 0 if caller returns nothing. Default to $DEFAULT if it
501 # explicitly returns undef.
502 my(@callers_bitmask) = (caller($i))[9] ;
503 my $callers_bitmask =
504 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
505 length($callers_bitmask) > ($offset >> 3) or $offset = $Offsets{all};
506
507 my @results;
508 foreach my $type (FATAL, NORMAL) {
509 next unless $wanted & $type;
510
511 push @results, vec($callers_bitmask, $offset + $type - 1, 1);
512 }
513
514 # &enabled and &fatal_enabled
515 return $results[0] unless $has_message;
516
517 # &warnif, and the category is neither enabled as warning nor as fatal
518 return if ($wanted & (NORMAL | FATAL | MESSAGE))
519 == (NORMAL | FATAL | MESSAGE)
520 && !($results[0] || $results[1]);
521
522 # If we have an explicit level, bypass Carp.
523 if ($has_level and @callers_bitmask) {
524 # logic copied from util.c:mess_sv
525 my $stuff = " at " . join " line ", (caller $i)[1,2];
526 $stuff .= sprintf ", <%s> %s %d",
527 *${^LAST_FH}{NAME},
528 ($/ eq "\n" ? "line" : "chunk"), $.
529 if $. && ${^LAST_FH};
530 die "$message$stuff.\n" if $results[0];
531 return warn "$message$stuff.\n";
532 }
533
534 require Carp;
535 Carp::croak($message) if $results[0];
536 # will always get here for &warn. will only get here for &warnif if the
537 # category is enabled
538 Carp::carp($message);
539}
540
541sub _mkMask
542
# spent 22µs within warnings::_mkMask which was called 10 times, avg 2µs/call: # 5 times (17µs+0s) by warnings::register_categories at line 557, avg 3µs/call # 5 times (6µs+0s) by warnings::register_categories at line 558, avg 1µs/call
{
543102µs my ($bit) = @_;
544102µs my $mask = "";
545
5461012µs vec($mask, $bit, 1) = 1;
5471017µs return $mask;
548}
549
550sub register_categories
551
# spent 61µs (39+22) within warnings::register_categories which was called 5 times, avg 12µs/call: # 5 times (39µs+22µs) by warnings::register::import at line 22 of warnings/register.pm, avg 12µs/call
{
55252µs my @names = @_;
553
55458µs for my $name (@names) {
55554µs if (! defined $Bits{$name}) {
55652µs $Offsets{$name} = $LAST_BIT;
55756µs517µs $Bits{$name} = _mkMask($LAST_BIT++);
# spent 17µs making 5 calls to warnings::_mkMask, avg 3µs/call
55854µs56µs $DeadBits{$name} = _mkMask($LAST_BIT++);
# spent 6µs making 5 calls to warnings::_mkMask, avg 1µs/call
55953µs if (length($Bits{$name}) > length($Bits{all})) {
56021µs $Bits{all} .= "\x55";
5612700ns $DeadBits{all} .= "\xaa";
562 }
563 }
564 }
565}
566
567sub _error_loc {
568 require Carp;
569 goto &Carp::short_error_loc; # don't introduce another stack frame
570}
571
572sub enabled
573{
574 return __chk(NORMAL, @_);
575}
576
577sub fatal_enabled
578{
579 return __chk(FATAL, @_);
580}
581
582sub warn
583{
584 return __chk(FATAL | MESSAGE, @_);
585}
586
587sub warnif
588{
589 return __chk(NORMAL | FATAL | MESSAGE, @_);
590}
591
592sub enabled_at_level
593{
594 return __chk(NORMAL | LEVEL, @_);
595}
596
597sub fatal_enabled_at_level
598{
599 return __chk(FATAL | LEVEL, @_);
600}
601
602sub warn_at_level
603{
604 return __chk(FATAL | MESSAGE | LEVEL, @_);
605}
606
607sub warnif_at_level
608{
609 return __chk(NORMAL | FATAL | MESSAGE | LEVEL, @_);
610}
611
612# These are not part of any public interface, so we can delete them to save
613# space.
61414µsdelete @warnings::{qw(NORMAL FATAL MESSAGE LEVEL)};
615
616126µs1;
617__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 11)[Errno-pm-17]-93-line.html0000644000175000017500000003011514576335353023615 0ustar michamicha Profile of (eval 11)[Errno.pm:17]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 11)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Errno.pm:17]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Errno.pm line 17
Line State
ments
Time
on line
Calls Time
in subs
Code
112µs1.37
2;










Spreadsheet-ParseXLSX-0.35/nytprof/Config_heavy-pl-22-line.html0000644000175000017500000072301014576335353023213 0ustar michamicha Profile of Config_heavy.pl
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Config_heavy.pl
StatementsExecuted 45 statements in 1.61ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs12µsConfig::::BEGIN@5Config::BEGIN@5
1119µs37µsConfig::::fetch_stringConfig::fetch_string
1115µs5µsConfig::::launcherConfig::launcher
1113µs21µsConfig::::BEGIN@6Config::BEGIN@6
0000s0sConfig::::EXISTSConfig::EXISTS
0000s0sConfig::::FIRSTKEYConfig::FIRSTKEY
0000s0sConfig::::NEXTKEYConfig::NEXTKEY
0000s0sConfig::::STOREConfig::STORE
0000s0sConfig::::_VConfig::_V
0000s0sConfig::::bincompat_optionsConfig::bincompat_options
0000s0sConfig::::compile_dateConfig::compile_date
0000s0sConfig::::config_reConfig::config_re
0000s0sConfig::::config_shConfig::config_sh
0000s0sConfig::::config_varsConfig::config_vars
0000s0sConfig::::header_filesConfig::header_files
0000s0sConfig::::local_patchesConfig::local_patches
0000s0sConfig::::myconfigConfig::myconfig
0000s0sConfig::::non_bincompat_optionsConfig::non_bincompat_options
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# This file was created by configpm when Perl was built. Any changes
2# made to this file will be lost the next time perl is built.
3
4package Config;
5223µs213µs
# spent 12µs (10+2) within Config::BEGIN@5 which was called: # once (10µs+2µs) by Config::AUTOLOAD at line 5
use strict;
# spent 12µs making 1 call to Config::BEGIN@5 # spent 2µs making 1 call to strict::import
621.31ms239µs
# spent 21µs (3+18) within Config::BEGIN@6 which was called: # once (3µs+18µs) by Config::AUTOLOAD at line 6
use warnings;
# spent 21µs making 1 call to Config::BEGIN@6 # spent 18µs making 1 call to warnings::import
7our %Config;
8
9sub bincompat_options {
10 return split ' ', (Internals::V())[0];
11}
12
13sub non_bincompat_options {
14 return split ' ', (Internals::V())[1];
15}
16
17sub compile_date {
18 return (Internals::V())[2]
19}
20
21sub local_patches {
22 my (undef, undef, undef, @patches) = Internals::V();
23 return @patches;
24}
25
26sub _V {
27 die "Perl lib was built for 'linux' but is being run on '$^O'"
28 unless "linux" eq $^O;
29
30 my ($bincompat, $non_bincompat, $date, @patches) = Internals::V();
31
32 my @opts = sort split ' ', "$bincompat $non_bincompat";
33
34 print Config::myconfig();
35 print "\nCharacteristics of this binary (from libperl): \n";
36
37 print " Compile-time options:\n";
38 print " $_\n" for @opts;
39
40 if (@patches) {
41 print " Locally applied patches:\n";
42 print " $_\n" foreach @patches;
43 }
44
45 print " Built under linux\n";
46
47 print " $date\n" if defined $date;
48
49 my @env = map { "$_=\"$ENV{$_}\"" } sort grep {/^PERL/} keys %ENV;
50
51 if (@env) {
52 print " \%ENV:\n";
53 print " $_\n" foreach @env;
54 }
55 print " \@INC:\n";
56 print " $_\n" foreach @INC;
57}
58
59sub header_files {
60 return qw(EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h
61 dosish.h embed.h embedvar.h form.h gv.h handy.h hv.h hv_func.h
62 intrpvar.h iperlsys.h keywords.h mg.h nostdio.h op.h opcode.h
63 pad.h parser.h patchlevel.h perl.h perlio.h perliol.h perlsdio.h
64 perlvars.h perly.h pp.h pp_proto.h proto.h regcomp.h regexp.h
65 regnodes.h scope.h sv.h thread.h time64.h unixish.h utf8.h
66 util.h);
67}
68
69##
70## This file was produced by running the Configure script. It holds all the
71## definitions figured out by Configure. Should you modify one of these values,
72## do not forget to propagate your changes by running "Configure -der". You may
73## instead choose to run each of the .SH files by yourself, or "Configure -S".
74##
75#
76## Package name : perl5
77## Source directory : .
78## Configuration time: Tue Jan 2 08:48:43 CET 2024
79## Configured by : micha
80## Target system : linux intra 6.2.0-39-generic #40~22.04.1-ubuntu smp preempt_dynamic thu nov 16 10:53:04 utc 2 x86_64 x86_64 x86_64 gnulinux
81#
82#: Configure command line arguments.
83#
84#: Variables propagated from previous config.sh file.
85
861500nsour $summary = <<'!END!';
87Summary of my $package (revision $revision $version_patchlevel_string) configuration:
88 $git_commit_id_title $git_commit_id$git_ancestor_line
89 Platform:
90 osname=$osname
91 osvers=$osvers
92 archname=$archname
93 uname='$myuname'
94 config_args='$config_args'
95 hint=$hint
96 useposix=$useposix
97 d_sigaction=$d_sigaction
98 useithreads=$useithreads
99 usemultiplicity=$usemultiplicity
100 use64bitint=$use64bitint
101 use64bitall=$use64bitall
102 uselongdouble=$uselongdouble
103 usemymalloc=$usemymalloc
104 default_inc_excludes_dot=$default_inc_excludes_dot
105 Compiler:
106 cc='$cc'
107 ccflags ='$ccflags'
108 optimize='$optimize'
109 cppflags='$cppflags'
110 ccversion='$ccversion'
111 gccversion='$gccversion'
112 gccosandvers='$gccosandvers'
113 intsize=$intsize
114 longsize=$longsize
115 ptrsize=$ptrsize
116 doublesize=$doublesize
117 byteorder=$byteorder
118 doublekind=$doublekind
119 d_longlong=$d_longlong
120 longlongsize=$longlongsize
121 d_longdbl=$d_longdbl
122 longdblsize=$longdblsize
123 longdblkind=$longdblkind
124 ivtype='$ivtype'
125 ivsize=$ivsize
126 nvtype='$nvtype'
127 nvsize=$nvsize
128 Off_t='$lseektype'
129 lseeksize=$lseeksize
130 alignbytes=$alignbytes
131 prototype=$prototype
132 Linker and Libraries:
133 ld='$ld'
134 ldflags ='$ldflags'
135 libpth=$libpth
136 libs=$libs
137 perllibs=$perllibs
138 libc=$libc
139 so=$so
140 useshrplib=$useshrplib
141 libperl=$libperl
142 gnulibc_version='$gnulibc_version'
143 Dynamic Linking:
144 dlsrc=$dlsrc
145 dlext=$dlext
146 d_dlsymun=$d_dlsymun
147 ccdlflags='$ccdlflags'
148 cccdlflags='$cccdlflags'
149 lddlflags='$lddlflags'
150
151!END!
1521200nsmy $summary_expanded;
153
154sub myconfig {
155 return $summary_expanded if $summary_expanded;
156 ($summary_expanded = $summary) =~ s{\$(\w+)}
157 {
158 my $c;
159 if ($1 eq 'git_ancestor_line') {
160 if ($Config::Config{git_ancestor}) {
161 $c= "\n Ancestor: $Config::Config{git_ancestor}";
162 } else {
163 $c= "";
164 }
165 } else {
166 $c = $Config::Config{$1};
167 }
168 defined($c) ? $c : 'undef'
169 }ge;
170 $summary_expanded;
171}
172
17311µslocal *_ = \my $a;
1741200ns$_ = <<'!END!';
175Author=''
176CONFIG='true'
177Date=''
178Header=''
179Id=''
180Locker=''
181Log=''
182PATCHLEVEL='38'
183PERL_API_REVISION='5'
184PERL_API_SUBVERSION='0'
185PERL_API_VERSION='38'
186PERL_CONFIG_SH='true'
187PERL_PATCHLEVEL=''
188PERL_REVISION='5'
189PERL_SUBVERSION='2'
190PERL_VERSION='38'
191RCSfile=''
192Revision=''
193SUBVERSION='2'
194Source=''
195State=''
196_a='.a'
197_exe=''
198_o='.o'
199afs='false'
200afsroot='/afs'
201alignbytes='8'
202aphostname='/usr/bin/hostname'
203api_revision='5'
204api_subversion='0'
205api_version='38'
206api_versionstring='5.38.0'
207ar='ar'
208archlib='/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux'
209archlibexp='/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux'
210archname='x86_64-linux'
211archname64=''
212archobjs=''
213asctime_r_proto='0'
214awk='awk'
215baserev='5.0'
216bash=''
217bin='/home/micha/.plenv/versions/5.38.2/bin'
218bin_ELF='define'
219binexp='/home/micha/.plenv/versions/5.38.2/bin'
220bison='bison'
221byacc='byacc'
222byteorder='12345678'
223c=''
224castflags='0'
225cat='cat'
226cc='cc'
227cccdlflags='-fPIC'
228ccdlflags='-Wl,-E'
229ccflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
230ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
231ccname='gcc'
232ccsymbols=''
233ccversion=''
234cf_by='micha'
235cf_email='micha@mdc.hopto.org'
236cf_time='Tue Jan 2 08:48:43 CET 2024'
237charbits='8'
238charsize='1'
239chgrp=''
240chmod='chmod'
241chown=''
242clocktype='clock_t'
243comm='comm'
244compiler_warning='grep -i warning'
245compress=''
246config_arg0='Configure'
247config_arg1='-Dprefix=/home/micha/.plenv/versions/5.38.2'
248config_arg2='-de'
249config_arg3='-Dversiononly'
250config_arg4='-A'eval:scriptdir=/home/micha/.plenv/versions/5.38.2/bin''
251config_argc='4'
252config_args='-Dprefix=/home/micha/.plenv/versions/5.38.2 -de -Dversiononly -A'eval:scriptdir=/home/micha/.plenv/versions/5.38.2/bin''
253contains='grep'
254cp='cp'
255cpio=''
256cpp='cpp'
257cpp_stuff='42'
258cppccsymbols=''
259cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
260cpplast='-'
261cppminus='-'
262cpprun='cc -E'
263cppstdin='cc -E'
264cppsymbols='__amd64=1 __amd64__=1 __ATOMIC_ACQ_REL=4 __ATOMIC_ACQUIRE=2 __ATOMIC_CONSUME=1 __ATOMIC_HLE_ACQUIRE=65536 __ATOMIC_HLE_RELEASE=131072 __ATOMIC_RELAXED=0 __ATOMIC_RELEASE=3 __ATOMIC_SEQ_CST=5 __BIGGEST_ALIGNMENT__=16 __BYTE_ORDER__=1234 __CET__=3 __CHAR16_TYPE__=short\ unsigned\ int __CHAR32_TYPE__=unsigned\ int __CHAR_BIT__=8 __code_model_small__=1 __DBL_DECIMAL_DIG__=17 __DBL_DENORM_MIN__=((double)4.94065645841246544176568792868221372e-324L) __DBL_DIG__=15 __DBL_EPSILON__=((double)2.22044604925031308084726333618164062e-16L) __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_IS_IEC_60559__=2 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX__=((double)1.79769313486231570814527423731704357e+308L) __DBL_MAX_EXP__=1024 __DBL_MIN_10_EXP__=(-307) __DBL_MIN__=((double)2.22507385850720138309023271733240406e-308L) __DBL_MIN_EXP__=(-1021) __DBL_NORM_MAX__=((double)1.79769313486231570814527423731704357e+308L) __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MAX_EXP__=6145 __DEC128_MIN__=1E-6143DL __DEC128_MIN_EXP__=(-6142) __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX__=9.999999E96DF __DEC32_MAX_EXP__=97 __DEC32_MIN__=1E-95DF __DEC32_MIN_EXP__=(-94) __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MAX_EXP__=385 __DEC64_MIN__=1E-383DD __DEC64_MIN_EXP__=(-382) __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DEC_EVAL_METHOD__=2 __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __ELF__=1 _FILE_OFFSET_BITS=64 __FINITE_MATH_ONLY__=0 __FLOAT_WORD_ORDER__=1234 __FLT128_DECIMAL_DIG__=36 __FLT128_DENORM_MIN__=6.47517511943802511092443895822764655e-4966F128 __FLT128_DIG__=33 __FLT128_EPSILON__=1.92592994438723585305597794258492732e-34F128 __FLT128_HAS_DENORM__=1 __FLT128_HAS_INFINITY__=1 __FLT128_HAS_QUIET_NAN__=1 __FLT128_IS_IEC_60559__=2 __FLT128_MANT_DIG__=113 __FLT128_MAX_10_EXP__=4932 __FLT128_MAX__=1.18973149535723176508575932662800702e+4932F128 __FLT128_MAX_EXP__=16384 __FLT128_MIN_10_EXP__=(-4931) __FLT128_MIN__=3.36210314311209350626267781732175260e-4932F128 __FLT128_MIN_EXP__=(-16381) __FLT128_NORM_MAX__=1.18973149535723176508575932662800702e+4932F128 __FLT32_DECIMAL_DIG__=9 __FLT32_DENORM_MIN__=1.40129846432481707092372958328991613e-45F32 __FLT32_DIG__=6 __FLT32_EPSILON__=1.19209289550781250000000000000000000e-7F32 __FLT32_HAS_DENORM__=1 __FLT32_HAS_INFINITY__=1 __FLT32_HAS_QUIET_NAN__=1 __FLT32_IS_IEC_60559__=2 __FLT32_MANT_DIG__=24 __FLT32_MAX_10_EXP__=38 __FLT32_MAX__=3.40282346638528859811704183484516925e+38F32 __FLT32_MAX_EXP__=128 __FLT32_MIN_10_EXP__=(-37) __FLT32_MIN__=1.17549435082228750796873653722224568e-38F32 __FLT32_MIN_EXP__=(-125) __FLT32_NORM_MAX__=3.40282346638528859811704183484516925e+38F32 __FLT32X_DECIMAL_DIG__=17 __FLT32X_DENORM_MIN__=4.94065645841246544176568792868221372e-324F32x __FLT32X_DIG__=15 __FLT32X_EPSILON__=2.22044604925031308084726333618164062e-16F32x __FLT32X_HAS_DENORM__=1 __FLT32X_HAS_INFINITY__=1 __FLT32X_HAS_QUIET_NAN__=1 __FLT32X_IS_IEC_60559__=2 __FLT32X_MANT_DIG__=53 __FLT32X_MAX_10_EXP__=308 __FLT32X_MAX__=1.79769313486231570814527423731704357e+308F32x __FLT32X_MAX_EXP__=1024 __FLT32X_MIN_10_EXP__=(-307) __FLT32X_MIN__=2.22507385850720138309023271733240406e-308F32x __FLT32X_MIN_EXP__=(-1021) __FLT32X_NORM_MAX__=1.79769313486231570814527423731704357e+308F32x __FLT64_DECIMAL_DIG__=17 __FLT64_DENORM_MIN__=4.94065645841246544176568792868221372e-324F64 __FLT64_DIG__=15 __FLT64_EPSILON__=2.22044604925031308084726333618164062e-16F64 __FLT64_HAS_DENORM__=1 __FLT64_HAS_INFINITY__=1 __FLT64_HAS_QUIET_NAN__=1 __FLT64_IS_IEC_60559__=2 __FLT64_MANT_DIG__=53 __FLT64_MAX_10_EXP__=308 __FLT64_MAX__=1.79769313486231570814527423731704357e+308F64 __FLT64_MAX_EXP__=1024 __FLT64_MIN_10_EXP__=(-307) __FLT64_MIN__=2.22507385850720138309023271733240406e-308F64 __FLT64_MIN_EXP__=(-1021) __FLT64_NORM_MAX__=1.79769313486231570814527423731704357e+308F64 __FLT64X_DECIMAL_DIG__=21 __FLT64X_DENORM_MIN__=3.64519953188247460252840593361941982e-4951F64x __FLT64X_DIG__=18 __FLT64X_EPSILON__=1.08420217248550443400745280086994171e-19F64x __FLT64X_HAS_DENORM__=1 __FLT64X_HAS_INFINITY__=1 __FLT64X_HAS_QUIET_NAN__=1 __FLT64X_IS_IEC_60559__=2 __FLT64X_MANT_DIG__=64 __FLT64X_MAX_10_EXP__=4932 __FLT64X_MAX__=1.18973149535723176502126385303097021e+4932F64x __FLT64X_MAX_EXP__=16384 __FLT64X_MIN_10_EXP__=(-4931) __FLT64X_MIN__=3.36210314311209350626267781732175260e-4932F64x __FLT64X_MIN_EXP__=(-16381) __FLT64X_NORM_MAX__=1.18973149535723176502126385303097021e+4932F64x __FLT_DECIMAL_DIG__=9 __FLT_DENORM_MIN__=1.40129846432481707092372958328991613e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209289550781250000000000000000000e-7F __FLT_EVAL_METHOD__=0 __FLT_EVAL_METHOD_TS_18661_3__=0 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_IS_IEC_60559__=2 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX__=3.40282346638528859811704183484516925e+38F __FLT_MAX_EXP__=128 __FLT_MIN_10_EXP__=(-37) __FLT_MIN__=1.17549435082228750796873653722224568e-38F __FLT_MIN_EXP__=(-125) __FLT_NORM_MAX__=3.40282346638528859811704183484516925e+38F __FLT_RADIX__=2 _FORTIFY_SOURCE=2 __FXSR__=1 __GCC_ASM_FLAG_OUTPUTS__=1 __GCC_ATOMIC_BOOL_LOCK_FREE=2 __GCC_ATOMIC_CHAR16_T_LOCK_FREE=2 __GCC_ATOMIC_CHAR32_T_LOCK_FREE=2 __GCC_ATOMIC_CHAR_LOCK_FREE=2 __GCC_ATOMIC_INT_LOCK_FREE=2 __GCC_ATOMIC_LLONG_LOCK_FREE=2 __GCC_ATOMIC_LONG_LOCK_FREE=2 __GCC_ATOMIC_POINTER_LOCK_FREE=2 __GCC_ATOMIC_SHORT_LOCK_FREE=2 __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 __GCC_ATOMIC_WCHAR_T_LOCK_FREE=2 __GCC_HAVE_DWARF2_CFI_ASM=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __GCC_IEC_559=2 __GCC_IEC_559_COMPLEX=2 __GLIBC__=2 __GLIBC_MINOR__=35 __GNUC__=11 __GNUC_EXECUTION_CHARSET_NAME="UTF-8" __GNUC_MINOR__=4 __GNUC_PATCHLEVEL__=0 __GNUC_STDC_INLINE__=1 __GNUC_WIDE_EXECUTION_CHARSET_NAME="UTF-32LE" __GNU_LIBRARY__=6 __gnu_linux__=1 __GXX_ABI_VERSION=1016 __HAVE_SPECULATION_SAFE_VALUE=1 __INT16_C=__INT16_C __INT16_MAX__=0x7fff __INT16_TYPE__=short\ int __INT32_C=__INT32_C __INT32_MAX__=0x7fffffff __INT32_TYPE__=int __INT64_C=__INT64_C __INT64_MAX__=0x7fffffffffffffffL __INT64_TYPE__=long\ int __INT8_C=__INT8_C __INT8_MAX__=0x7f __INT8_TYPE__=signed\ char __INT_FAST16_MAX__=0x7fffffffffffffffL __INT_FAST16_TYPE__=long\ int __INT_FAST16_WIDTH__=64 __INT_FAST32_MAX__=0x7fffffffffffffffL __INT_FAST32_TYPE__=long\ int __INT_FAST32_WIDTH__=64 __INT_FAST64_MAX__=0x7fffffffffffffffL __INT_FAST64_TYPE__=long\ int __INT_FAST64_WIDTH__=64 __INT_FAST8_MAX__=0x7f __INT_FAST8_TYPE__=signed\ char __INT_FAST8_WIDTH__=8 __INT_LEAST16_MAX__=0x7fff __INT_LEAST16_TYPE__=short\ int __INT_LEAST16_WIDTH__=16 __INT_LEAST32_MAX__=0x7fffffff __INT_LEAST32_TYPE__=int __INT_LEAST32_WIDTH__=32 __INT_LEAST64_MAX__=0x7fffffffffffffffL __INT_LEAST64_TYPE__=long\ int __INT_LEAST64_WIDTH__=64 __INT_LEAST8_MAX__=0x7f __INT_LEAST8_TYPE__=signed\ char __INT_LEAST8_WIDTH__=8 __INT_MAX__=0x7fffffff __INTMAX_C=__INTMAX_C __INTMAX_MAX__=0x7fffffffffffffffL __INTMAX_TYPE__=long\ int __INTMAX_WIDTH__=64 __INTPTR_MAX__=0x7fffffffffffffffL __INTPTR_TYPE__=long\ int __INTPTR_WIDTH__=64 __INT_WIDTH__=32 __k8=1 __k8__=1 _LARGEFILE_SOURCE=1 __LDBL_DECIMAL_DIG__=21 __LDBL_DENORM_MIN__=3.64519953188247460252840593361941982e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443400745280086994171e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_IS_IEC_60559__=2 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX__=1.18973149535723176502126385303097021e+4932L __LDBL_MAX_EXP__=16384 __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN__=3.36210314311209350626267781732175260e-4932L __LDBL_MIN_EXP__=(-16381) __LDBL_NORM_MAX__=1.18973149535723176502126385303097021e+4932L __linux=1 __linux__=1 linux=1 __LONG_LONG_MAX__=0x7fffffffffffffffLL __LONG_LONG_WIDTH__=64 __LONG_MAX__=0x7fffffffffffffffL __LONG_WIDTH__=64 __LP64__=1 _LP64=1 __MMX__=1 __MMX_WITH_SSE__=1 __ORDER_BIG_ENDIAN__=4321 __ORDER_LITTLE_ENDIAN__=1234 __ORDER_PDP_ENDIAN__=3412 __pic__=2 __PIC__=2 __pie__=2 __PIE__=2 _POSIX_C_SOURCE=200809L _POSIX_SOURCE=1 __PRAGMA_REDEFINE_EXTNAME=1 __PTRDIFF_MAX__=0x7fffffffffffffffL __PTRDIFF_TYPE__=long\ int __PTRDIFF_WIDTH__=64 __REGISTER_PREFIX__= __SCHAR_MAX__=0x7f __SCHAR_WIDTH__=8 __SEG_FS=1 __SEG_GS=1 __SHRT_MAX__=0x7fff __SHRT_WIDTH__=16 __SIG_ATOMIC_MAX__=0x7fffffff __SIG_ATOMIC_MIN__=(-0x7fffffff\ -\ 1) __SIG_ATOMIC_TYPE__=int __SIG_ATOMIC_WIDTH__=32 __SIZE_MAX__=0xffffffffffffffffUL __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT128__=16 __SIZEOF_FLOAT__=4 __SIZEOF_FLOAT80__=16 __SIZEOF_INT128__=16 __SIZEOF_INT__=4 __SIZEOF_LONG__=8 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=8 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=long\ unsigned\ int __SIZE_WIDTH__=64 __SSE__=1 __SSE2__=1 __SSE2_MATH__=1 __SSE_MATH__=1 __SSP_STRONG__=3 __STDC__=1 __STDC_HOSTED__=1 __STDC_IEC_559__=1 __STDC_IEC_559_COMPLEX__=1 __STDC_IEC_60559_BFP__=201404L __STDC_IEC_60559_COMPLEX__=201404L __STDC_ISO_10646__=201706L _STDC_PREDEF_H=1 __STDC_UTF_16__=1 __STDC_UTF_32__=1 __STDC_VERSION__=201710L __UINT16_C=__UINT16_C __UINT16_MAX__=0xffff __UINT16_TYPE__=short\ unsigned\ int __UINT32_C=__UINT32_C __UINT32_MAX__=0xffffffffU __UINT32_TYPE__=unsigned\ int __UINT64_C=__UINT64_C __UINT64_MAX__=0xffffffffffffffffUL __UINT64_TYPE__=long\ unsigned\ int __UINT8_C=__UINT8_C __UINT8_MAX__=0xff __UINT8_TYPE__=unsigned\ char __UINT_FAST16_MAX__=0xffffffffffffffffUL __UINT_FAST16_TYPE__=long\ unsigned\ int __UINT_FAST32_MAX__=0xffffffffffffffffUL __UINT_FAST32_TYPE__=long\ unsigned\ int __UINT_FAST64_MAX__=0xffffffffffffffffUL __UINT_FAST64_TYPE__=long\ unsigned\ int __UINT_FAST8_MAX__=0xff __UINT_FAST8_TYPE__=unsigned\ char __UINT_LEAST16_MAX__=0xffff __UINT_LEAST16_TYPE__=short\ unsigned\ int __UINT_LEAST32_MAX__=0xffffffffU __UINT_LEAST32_TYPE__=unsigned\ int __UINT_LEAST64_MAX__=0xffffffffffffffffUL __UINT_LEAST64_TYPE__=long\ unsigned\ int __UINT_LEAST8_MAX__=0xff __UINT_LEAST8_TYPE__=unsigned\ char __UINTMAX_C=__UINTMAX_C __UINTMAX_MAX__=0xffffffffffffffffUL __UINTMAX_TYPE__=long\ unsigned\ int __UINTPTR_MAX__=0xffffffffffffffffUL __UINTPTR_TYPE__=long\ unsigned\ int __unix=1 __unix__=1 unix=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USER_LABEL_PREFIX__= __VERSION__="11.4.0" __WCHAR_MAX__=0x7fffffff __WCHAR_MIN__=(-0x7fffffff\ -\ 1) __WCHAR_TYPE__=int __WCHAR_WIDTH__=32 __WINT_MAX__=0xffffffffU __WINT_MIN__=0U __WINT_TYPE__=unsigned\ int __WINT_WIDTH__=32 __x86_64=1 __x86_64__=1'
265crypt_r_proto='0'
266cryptlib=''
267csh='csh'
268ctermid_r_proto='0'
269ctime_r_proto='0'
270d_Gconvert='sprintf((b),"%.*g",(n),(x))'
271d_PRIEUldbl='define'
272d_PRIFUldbl='define'
273d_PRIGUldbl='define'
274d_PRIXU64='define'
275d_PRId64='define'
276d_PRIeldbl='define'
277d_PRIfldbl='define'
278d_PRIgldbl='define'
279d_PRIi64='define'
280d_PRIo64='define'
281d_PRIu64='define'
282d_PRIx64='define'
283d_SCNfldbl='define'
284d__fwalk='undef'
285d_accept4='define'
286d_access='define'
287d_accessx='undef'
288d_acosh='define'
289d_aintl='undef'
290d_alarm='define'
291d_archlib='define'
292d_asctime64='undef'
293d_asctime_r='undef'
294d_asinh='define'
295d_atanh='define'
296d_atolf='undef'
297d_atoll='define'
298d_attribute_always_inline='define'
299d_attribute_deprecated='define'
300d_attribute_format='define'
301d_attribute_malloc='define'
302d_attribute_nonnull='define'
303d_attribute_noreturn='define'
304d_attribute_pure='define'
305d_attribute_unused='define'
306d_attribute_visibility='define'
307d_attribute_warn_unused_result='define'
308d_backtrace='define'
309d_bsd='undef'
310d_bsdgetpgrp='undef'
311d_bsdsetpgrp='undef'
312d_builtin_add_overflow='define'
313d_builtin_choose_expr='define'
314d_builtin_expect='define'
315d_builtin_mul_overflow='define'
316d_builtin_sub_overflow='define'
317d_c99_variadic_macros='define'
318d_casti32='undef'
319d_castneg='define'
320d_cbrt='define'
321d_chown='define'
322d_chroot='define'
323d_chsize='undef'
324d_class='undef'
325d_clearenv='define'
326d_closedir='define'
327d_cmsghdr_s='define'
328d_copysign='define'
329d_copysignl='define'
330d_cplusplus='undef'
331d_crypt='define'
332d_crypt_r='undef'
333d_csh='undef'
334d_ctermid='define'
335d_ctermid_r='undef'
336d_ctime64='undef'
337d_ctime_r='undef'
338d_cuserid='define'
339d_dbminitproto='undef'
340d_difftime='define'
341d_difftime64='undef'
342d_dir_dd_fd='undef'
343d_dirfd='define'
344d_dirnamlen='undef'
345d_dladdr='define'
346d_dlerror='define'
347d_dlopen='define'
348d_dlsymun='undef'
349d_dosuid='undef'
350d_double_has_inf='define'
351d_double_has_nan='define'
352d_double_has_negative_zero='define'
353d_double_has_subnormals='define'
354d_double_style_cray='undef'
355d_double_style_ibm='undef'
356d_double_style_ieee='define'
357d_double_style_vax='undef'
358d_drand48_r='undef'
359d_drand48proto='define'
360d_dup2='define'
361d_dup3='define'
362d_duplocale='define'
363d_eaccess='define'
364d_endgrent='define'
365d_endgrent_r='undef'
366d_endhent='define'
367d_endhostent_r='undef'
368d_endnent='define'
369d_endnetent_r='undef'
370d_endpent='define'
371d_endprotoent_r='undef'
372d_endpwent='define'
373d_endpwent_r='undef'
374d_endsent='define'
375d_endservent_r='undef'
376d_eofnblk='define'
377d_erf='define'
378d_erfc='define'
379d_eunice='undef'
380d_exp2='define'
381d_expm1='define'
382d_faststdio='undef'
383d_fchdir='define'
384d_fchmod='define'
385d_fchmodat='define'
386d_fchown='define'
387d_fcntl='define'
388d_fcntl_can_lock='define'
389d_fd_macros='define'
390d_fd_set='define'
391d_fdclose='undef'
392d_fdim='define'
393d_fds_bits='undef'
394d_fegetround='define'
395d_ffs='define'
396d_ffsl='define'
397d_fgetpos='define'
398d_finite='define'
399d_finitel='define'
400d_flexfnam='define'
401d_flock='define'
402d_flockproto='define'
403d_fma='define'
404d_fmax='define'
405d_fmin='define'
406d_fork='define'
407d_fp_class='undef'
408d_fp_classify='undef'
409d_fp_classl='undef'
410d_fpathconf='define'
411d_fpclass='undef'
412d_fpclassify='define'
413d_fpclassl='undef'
414d_fpgetround='undef'
415d_fpos64_t='undef'
416d_freelocale='define'
417d_frexpl='define'
418d_fs_data_s='undef'
419d_fseeko='define'
420d_fsetpos='define'
421d_fstatfs='define'
422d_fstatvfs='define'
423d_fsync='define'
424d_ftello='define'
425d_ftime='undef'
426d_futimes='define'
427d_gai_strerror='define'
428d_gdbm_ndbm_h_uses_prototypes='undef'
429d_gdbmndbm_h_uses_prototypes='undef'
430d_getaddrinfo='define'
431d_getcwd='define'
432d_getenv_preserves_other_thread='define'
433d_getespwnam='undef'
434d_getfsstat='undef'
435d_getgrent='define'
436d_getgrent_r='undef'
437d_getgrgid_r='undef'
438d_getgrnam_r='undef'
439d_getgrps='define'
440d_gethbyaddr='define'
441d_gethbyname='define'
442d_gethent='define'
443d_gethname='define'
444d_gethostbyaddr_r='undef'
445d_gethostbyname_r='undef'
446d_gethostent_r='undef'
447d_gethostprotos='define'
448d_getitimer='define'
449d_getlogin='define'
450d_getlogin_r='undef'
451d_getmnt='undef'
452d_getmntent='define'
453d_getnameinfo='define'
454d_getnbyaddr='define'
455d_getnbyname='define'
456d_getnent='define'
457d_getnetbyaddr_r='undef'
458d_getnetbyname_r='undef'
459d_getnetent_r='undef'
460d_getnetprotos='define'
461d_getpagsz='define'
462d_getpbyname='define'
463d_getpbynumber='define'
464d_getpent='define'
465d_getpgid='define'
466d_getpgrp='define'
467d_getpgrp2='undef'
468d_getppid='define'
469d_getprior='define'
470d_getprotobyname_r='undef'
471d_getprotobynumber_r='undef'
472d_getprotoent_r='undef'
473d_getprotoprotos='define'
474d_getprpwnam='undef'
475d_getpwent='define'
476d_getpwent_r='undef'
477d_getpwnam_r='undef'
478d_getpwuid_r='undef'
479d_getsbyname='define'
480d_getsbyport='define'
481d_getsent='define'
482d_getservbyname_r='undef'
483d_getservbyport_r='undef'
484d_getservent_r='undef'
485d_getservprotos='define'
486d_getspnam='define'
487d_getspnam_r='undef'
488d_gettimeod='define'
489d_gmtime64='undef'
490d_gmtime_r='undef'
491d_gnulibc='define'
492d_grpasswd='define'
493d_has_C_UTF8='true'
494d_hasmntopt='define'
495d_htonl='define'
496d_hypot='define'
497d_ilogb='define'
498d_ilogbl='define'
499d_inc_version_list='undef'
500d_inetaton='define'
501d_inetntop='define'
502d_inetpton='define'
503d_int64_t='define'
504d_ip_mreq='define'
505d_ip_mreq_source='define'
506d_ipv6_mreq='define'
507d_ipv6_mreq_source='undef'
508d_isascii='define'
509d_isblank='define'
510d_isfinite='define'
511d_isfinitel='undef'
512d_isinf='define'
513d_isinfl='define'
514d_isless='define'
515d_isnan='define'
516d_isnanl='define'
517d_isnormal='define'
518d_j0='define'
519d_j0l='define'
520d_killpg='define'
521d_lc_monetary_2008='define'
522d_lchown='define'
523d_ldbl_dig='define'
524d_ldexpl='define'
525d_lgamma='define'
526d_lgamma_r='define'
527d_libm_lib_version='undef'
528d_libname_unique='undef'
529d_link='define'
530d_linkat='define'
531d_llrint='define'
532d_llrintl='define'
533d_llround='define'
534d_llroundl='define'
535d_localeconv_l='undef'
536d_localtime64='undef'
537d_localtime_r='undef'
538d_localtime_r_needs_tzset='undef'
539d_locconv='define'
540d_lockf='define'
541d_log1p='define'
542d_log2='define'
543d_logb='define'
544d_long_double_style_ieee='define'
545d_long_double_style_ieee_doubledouble='undef'
546d_long_double_style_ieee_extended='define'
547d_long_double_style_ieee_std='undef'
548d_long_double_style_vax='undef'
549d_longdbl='define'
550d_longlong='define'
551d_lrint='define'
552d_lrintl='define'
553d_lround='define'
554d_lroundl='define'
555d_lseekproto='define'
556d_lstat='define'
557d_madvise='define'
558d_malloc_good_size='undef'
559d_malloc_size='undef'
560d_malloc_usable_size='define'
561d_mblen='define'
562d_mbrlen='define'
563d_mbrtowc='define'
564d_mbstowcs='define'
565d_mbtowc='define'
566d_memmem='define'
567d_memrchr='define'
568d_mkdir='define'
569d_mkdtemp='define'
570d_mkfifo='define'
571d_mkostemp='define'
572d_mkstemp='define'
573d_mkstemps='define'
574d_mktime='define'
575d_mktime64='undef'
576d_mmap='define'
577d_modfl='define'
578d_modflproto='define'
579d_mprotect='define'
580d_msg='define'
581d_msg_ctrunc='define'
582d_msg_dontroute='define'
583d_msg_oob='define'
584d_msg_peek='define'
585d_msg_proxy='define'
586d_msgctl='define'
587d_msgget='define'
588d_msghdr_s='define'
589d_msgrcv='define'
590d_msgsnd='define'
591d_msync='define'
592d_munmap='define'
593d_mymalloc='undef'
594d_nan='define'
595d_nanosleep='define'
596d_ndbm='undef'
597d_ndbm_h_uses_prototypes='undef'
598d_nearbyint='define'
599d_newlocale='define'
600d_nextafter='define'
601d_nexttoward='define'
602d_nice='define'
603d_nl_langinfo='define'
604d_nl_langinfo_l='undef'
605d_non_int_bitfields='define'
606d_nv_preserves_uv='undef'
607d_nv_zero_is_allbits_zero='define'
608d_off64_t='undef'
609d_old_pthread_create_joinable='undef'
610d_oldpthreads='undef'
611d_oldsock='undef'
612d_open3='define'
613d_openat='define'
614d_pathconf='define'
615d_pause='define'
616d_perl_otherlibdirs='undef'
617d_phostname='undef'
618d_pipe='define'
619d_pipe2='define'
620d_poll='define'
621d_portable='define'
622d_prctl='define'
623d_prctl_set_name='define'
624d_printf_format_null='define'
625d_procselfexe='define'
626d_pseudofork='undef'
627d_pthread_atfork='define'
628d_pthread_attr_setscope='define'
629d_pthread_yield='undef'
630d_ptrdiff_t='define'
631d_pwage='undef'
632d_pwchange='undef'
633d_pwclass='undef'
634d_pwcomment='undef'
635d_pwexpire='undef'
636d_pwgecos='define'
637d_pwpasswd='define'
638d_pwquota='undef'
639d_qgcvt='define'
640d_quad='define'
641d_querylocale='undef'
642d_random_r='undef'
643d_re_comp='undef'
644d_readdir='define'
645d_readdir64_r='undef'
646d_readdir_r='undef'
647d_readlink='define'
648d_readv='define'
649d_recvmsg='define'
650d_regcmp='undef'
651d_regcomp='define'
652d_remainder='define'
653d_remquo='define'
654d_rename='define'
655d_renameat='define'
656d_rewinddir='define'
657d_rint='define'
658d_rmdir='define'
659d_round='define'
660d_sbrkproto='define'
661d_scalbn='define'
662d_scalbnl='define'
663d_sched_yield='define'
664d_scm_rights='define'
665d_seekdir='define'
666d_select='define'
667d_sem='define'
668d_semctl='define'
669d_semctl_semid_ds='define'
670d_semctl_semun='define'
671d_semget='define'
672d_semop='define'
673d_sendmsg='define'
674d_setegid='define'
675d_setenv='define'
676d_seteuid='define'
677d_setgrent='define'
678d_setgrent_r='undef'
679d_setgrps='define'
680d_sethent='define'
681d_sethostent_r='undef'
682d_setitimer='define'
683d_setlinebuf='define'
684d_setlocale='define'
685d_setlocale_accepts_any_locale_name='undef'
686d_setlocale_r='undef'
687d_setnent='define'
688d_setnetent_r='undef'
689d_setpent='define'
690d_setpgid='define'
691d_setpgrp='define'
692d_setpgrp2='undef'
693d_setprior='define'
694d_setproctitle='undef'
695d_setprotoent_r='undef'
696d_setpwent='define'
697d_setpwent_r='undef'
698d_setregid='define'
699d_setresgid='define'
700d_setresuid='define'
701d_setreuid='define'
702d_setrgid='undef'
703d_setruid='undef'
704d_setsent='define'
705d_setservent_r='undef'
706d_setsid='define'
707d_setvbuf='define'
708d_shm='define'
709d_shmat='define'
710d_shmatprototype='define'
711d_shmctl='define'
712d_shmdt='define'
713d_shmget='define'
714d_sigaction='define'
715d_siginfo_si_addr='define'
716d_siginfo_si_band='define'
717d_siginfo_si_errno='define'
718d_siginfo_si_fd='define'
719d_siginfo_si_pid='define'
720d_siginfo_si_status='define'
721d_siginfo_si_uid='define'
722d_siginfo_si_value='define'
723d_signbit='define'
724d_sigprocmask='define'
725d_sigsetjmp='define'
726d_sin6_scope_id='define'
727d_sitearch='define'
728d_snprintf='define'
729d_sockaddr_in6='define'
730d_sockaddr_sa_len='undef'
731d_sockaddr_storage='define'
732d_sockatmark='define'
733d_sockatmarkproto='define'
734d_socket='define'
735d_socklen_t='define'
736d_sockpair='define'
737d_socks5_init='undef'
738d_sqrtl='define'
739d_srand48_r='undef'
740d_srandom_r='undef'
741d_sresgproto='undef'
742d_sresuproto='undef'
743d_stat='define'
744d_statblks='define'
745d_statfs_f_flags='define'
746d_statfs_s='define'
747d_static_inline='define'
748d_statvfs='define'
749d_stdio_cnt_lval='undef'
750d_stdio_ptr_lval='undef'
751d_stdio_ptr_lval_nochange_cnt='undef'
752d_stdio_ptr_lval_sets_cnt='undef'
753d_stdio_stream_array='undef'
754d_stdiobase='undef'
755d_stdstdio='undef'
756d_strcoll='define'
757d_strerror_l='define'
758d_strerror_r='undef'
759d_strftime='define'
760d_strlcat='undef'
761d_strlcpy='undef'
762d_strnlen='define'
763d_strtod='define'
764d_strtod_l='define'
765d_strtol='define'
766d_strtold='define'
767d_strtold_l='define'
768d_strtoll='define'
769d_strtoq='define'
770d_strtoul='define'
771d_strtoull='define'
772d_strtouq='define'
773d_strxfrm='define'
774d_strxfrm_l='define'
775d_suidsafe='undef'
776d_symlink='define'
777d_syscall='define'
778d_syscallproto='define'
779d_sysconf='define'
780d_sysernlst=''
781d_syserrlst='undef'
782d_system='define'
783d_tcgetpgrp='define'
784d_tcsetpgrp='define'
785d_telldir='define'
786d_telldirproto='define'
787d_tgamma='define'
788d_thread_local='define'
789d_thread_safe_nl_langinfo_l='undef'
790d_time='define'
791d_timegm='define'
792d_times='define'
793d_tm_tm_gmtoff='define'
794d_tm_tm_zone='define'
795d_tmpnam_r='undef'
796d_towlower='define'
797d_towupper='define'
798d_trunc='define'
799d_truncate='define'
800d_truncl='define'
801d_ttyname_r='undef'
802d_tzname='define'
803d_u32align='define'
804d_ualarm='define'
805d_umask='define'
806d_uname='define'
807d_union_semun='undef'
808d_unlinkat='define'
809d_unordered='undef'
810d_unsetenv='define'
811d_uselocale='define'
812d_usleep='define'
813d_usleepproto='define'
814d_ustat='undef'
815d_vendorarch='undef'
816d_vendorbin='undef'
817d_vendorlib='undef'
818d_vendorscript='undef'
819d_vfork='undef'
820d_void_closedir='undef'
821d_voidsig='define'
822d_voidtty=''
823d_vsnprintf='define'
824d_wait4='define'
825d_waitpid='define'
826d_wcrtomb='define'
827d_wcscmp='define'
828d_wcstombs='define'
829d_wcsxfrm='define'
830d_wctomb='define'
831d_writev='define'
832d_xenix='undef'
833date='date'
834db_hashtype='u_int32_t'
835db_prefixtype='size_t'
836db_version_major='5'
837db_version_minor='3'
838db_version_patch='28'
839default_inc_excludes_dot='define'
840direntrytype='struct dirent'
841dlext='so'
842dlsrc='dl_dlopen.xs'
843doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
844doublekind='3'
845doublemantbits='52'
846doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff'
847doublesize='8'
848drand01='Perl_drand48()'
849drand48_r_proto='0'
850dtrace=''
851dtraceobject=''
852dtracexnolibs=''
853dynamic_ext='attributes B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 mro Opcode PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads threads/shared Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap'
854eagain='EAGAIN'
855ebcdic='undef'
856echo='echo'
857egrep='egrep'
858emacs=''
859endgrent_r_proto='0'
860endhostent_r_proto='0'
861endnetent_r_proto='0'
862endprotoent_r_proto='0'
863endpwent_r_proto='0'
864endservent_r_proto='0'
865eunicefix=':'
866exe_ext=''
867expr='expr'
868extensions='attributes B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 mro Opcode PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads threads/shared Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap Archive/Tar Attribute/Handlers autodie AutoLoader autouse base bignum Carp Config/Perl/V constant CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Devel/SelfStubber Digest Dumpvalue encoding/warnings Env Errno experimental Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS ExtUtils/PL2Bat FileCache File/Fetch File/Find File/Path File/Temp Filter/Simple FindBin Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags if IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP lib libnet Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata Net/Ping NEXT Params/Check parent perlfaq PerlIO/via/QuotedPrint Perl/OSType Pod/Checker Pod/Escapes Pod/Functions Pod/Html podlators Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/Local version XSLoader'
869extern_C='extern'
870extras=''
871fflushNULL='define'
872fflushall='undef'
873find=''
874firstmakefile='makefile'
875flex=''
876fpossize='16'
877fpostype='fpos_t'
878freetype='void'
879from=':'
880full_ar='/usr/bin/ar'
881full_csh='csh'
882full_sed='/usr/bin/sed'
883gccansipedantic=''
884gccosandvers=''
885gccversion='11.4.0'
886getgrent_r_proto='0'
887getgrgid_r_proto='0'
888getgrnam_r_proto='0'
889gethostbyaddr_r_proto='0'
890gethostbyname_r_proto='0'
891gethostent_r_proto='0'
892getlogin_r_proto='0'
893getnetbyaddr_r_proto='0'
894getnetbyname_r_proto='0'
895getnetent_r_proto='0'
896getprotobyname_r_proto='0'
897getprotobynumber_r_proto='0'
898getprotoent_r_proto='0'
899getpwent_r_proto='0'
900getpwnam_r_proto='0'
901getpwuid_r_proto='0'
902getservbyname_r_proto='0'
903getservbyport_r_proto='0'
904getservent_r_proto='0'
905getspnam_r_proto='0'
906gidformat='"u"'
907gidsign='1'
908gidsize='4'
909gidtype='gid_t'
910glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib /lib64 /usr/lib64 /usr/local/lib64 '
911gmake='gmake'
912gmtime_r_proto='0'
913gnulibc_version='2.35'
914grep='grep'
915groupcat='cat /etc/group'
916groupstype='gid_t'
917gzip='gzip'
918h_fcntl='false'
919h_sysfile='true'
920hint='recommended'
921hostcat='cat /etc/hosts'
922hostgenerate=''
923hostosname=''
924hostperl=''
925html1dir=' '
926html1direxp=''
927html3dir=' '
928html3direxp=''
929i16size='2'
930i16type='short'
931i32dformat='"d"'
932i32size='4'
933i32type='int'
934i64size='8'
935i64type='long'
936i8size='1'
937i8type='signed char'
938i_arpainet='define'
939i_bfd='undef'
940i_bsdioctl=''
941i_crypt='define'
942i_db='define'
943i_dbm='undef'
944i_dirent='define'
945i_dlfcn='define'
946i_execinfo='define'
947i_fcntl='undef'
948i_fenv='define'
949i_fp='undef'
950i_fp_class='undef'
951i_gdbm='undef'
952i_gdbm_ndbm='undef'
953i_gdbmndbm='undef'
954i_grp='define'
955i_ieeefp='undef'
956i_inttypes='define'
957i_langinfo='define'
958i_libutil='undef'
959i_limits='define'
960i_locale='define'
961i_machcthr='undef'
962i_malloc='define'
963i_mallocmalloc='undef'
964i_mntent='define'
965i_ndbm='undef'
966i_netdb='define'
967i_neterrno='undef'
968i_netinettcp='define'
969i_niin='define'
970i_poll='define'
971i_prot='undef'
972i_pthread='define'
973i_pwd='define'
974i_quadmath='define'
975i_rpcsvcdbm='undef'
976i_sgtty='undef'
977i_shadow='define'
978i_socks='undef'
979i_stdbool='define'
980i_stdint='define'
981i_stdlib='define'
982i_string='define'
983i_sunmath='undef'
984i_sysaccess='undef'
985i_sysdir='define'
986i_sysfile='define'
987i_sysfilio='undef'
988i_sysin='undef'
989i_sysioctl='define'
990i_syslog='define'
991i_sysmman='define'
992i_sysmode='undef'
993i_sysmount='define'
994i_sysndir='undef'
995i_sysparam='define'
996i_syspoll='define'
997i_sysresrc='define'
998i_syssecrt='undef'
999i_sysselct='define'
1000i_syssockio='undef'
1001i_sysstat='define'
1002i_sysstatfs='define'
1003i_sysstatvfs='define'
1004i_syssyscall='define'
1005i_systime='define'
1006i_systimek='undef'
1007i_systimes='define'
1008i_systypes='define'
1009i_sysuio='define'
1010i_sysun='define'
1011i_sysutsname='define'
1012i_sysvfs='define'
1013i_syswait='define'
1014i_termio='undef'
1015i_termios='define'
1016i_time='define'
1017i_unistd='define'
1018i_ustat='undef'
1019i_utime='define'
1020i_vfork='undef'
1021i_wchar='define'
1022i_wctype='define'
1023i_xlocale='define'
1024ignore_versioned_solibs='y'
1025inc_version_list=''
1026inc_version_list_init='0'
1027incpath=''
1028incpth='/usr/lib/gcc/x86_64-linux-gnu/11/include /usr/local/include /usr/include/x86_64-linux-gnu /usr/include'
1029inews=''
1030initialinstalllocation='/home/micha/.plenv/versions/5.38.2/bin'
1031installarchlib='/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux'
1032installbin='/home/micha/.plenv/versions/5.38.2/bin'
1033installhtml1dir=''
1034installhtml3dir=''
1035installman1dir='/home/micha/.plenv/versions/5.38.2/man/man1'
1036installman3dir='/home/micha/.plenv/versions/5.38.2/man/man3'
1037installprefix='/home/micha/.plenv/versions/5.38.2'
1038installprefixexp='/home/micha/.plenv/versions/5.38.2'
1039installprivlib='/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2'
1040installscript='/home/micha/.plenv/versions/5.38.2/bin'
1041installsitearch='/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux'
1042installsitebin='/home/micha/.plenv/versions/5.38.2/bin'
1043installsitehtml1dir=''
1044installsitehtml3dir=''
1045installsitelib='/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2'
1046installsiteman1dir='/home/micha/.plenv/versions/5.38.2/man/man1'
1047installsiteman3dir='/home/micha/.plenv/versions/5.38.2/man/man3'
1048installsitescript='/home/micha/.plenv/versions/5.38.2/bin'
1049installstyle='lib/perl5'
1050installusrbinperl='undef'
1051installvendorarch=''
1052installvendorbin=''
1053installvendorhtml1dir=''
1054installvendorhtml3dir=''
1055installvendorlib=''
1056installvendorman1dir=''
1057installvendorman3dir=''
1058installvendorscript=''
1059intsize='4'
1060issymlink='test -h'
1061ivdformat='"ld"'
1062ivsize='8'
1063ivtype='long'
1064known_extensions='Amiga/ARexx Amiga/Exec Archive/Tar Attribute/Handlers attributes autodie AutoLoader autouse B base bignum Carp Compress/Raw/Bzip2 Compress/Raw/Zlib Config/Perl/V constant CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Cwd Data/Dumper DB_File Devel/Peek Devel/PPPort Devel/SelfStubber Digest Digest/MD5 Digest/SHA Dumpvalue Encode encoding/warnings Env Errno experimental Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS ExtUtils/PL2Bat Fcntl FileCache File/DosGlob File/Fetch File/Find File/Glob File/Path File/Temp Filter/Simple Filter/Util/Call FindBin GDBM_File Getopt/Long Hash/Util Hash/Util/FieldHash HTTP/Tiny I18N/Collate I18N/Langinfo I18N/LangTags if IO IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 IPC/SysV JSON/PP lib libnet List/Util Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigInt/FastCalc Math/BigRat Math/Complex Memoize MIME/Base64 Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata mro NDBM_File Net/Ping NEXT ODBM_File Opcode Params/Check parent perlfaq PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via PerlIO/via/QuotedPrint Perl/OSType Pod/Checker Pod/Escapes Pod/Functions Pod/Html podlators Pod/Perldoc Pod/Simple Pod/Usage POSIX re Safe SDBM_File Search/Dict SelfLoader Socket Storable Sys/Hostname Sys/Syslog Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue threads Thread/Semaphore threads/shared Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/HiRes Time/Local Time/Piece Unicode/Collate Unicode/Normalize version VMS/DCLsym VMS/Filespec VMS/Stdio Win32 Win32API/File Win32CORE XS/APItest XSLoader XS/Typemap '
1065ksh=''
1066ld='cc'
1067ld_can_script='define'
1068lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong'
1069ldflags=' -fstack-protector-strong -L/usr/local/lib'
1070ldflags_uselargefiles=''
1071ldlibpthname='LD_LIBRARY_PATH'
1072less='less'
1073lib_ext='.a'
1074libc='/lib/x86_64-linux-gnu/libc.so.6'
1075libdb_needs_pthread='N'
1076libperl='libperl.a'
1077libpth='/usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib /usr/lib64'
1078libs='-lpthread -ldb -ldl -lm -lcrypt -lutil -lc'
1079libsdirs=' /usr/lib/x86_64-linux-gnu'
1080libsfiles=' libpthread.a libdb.so libdl.a libm.so libcrypt.so libutil.a libc.so'
1081libsfound=' /usr/lib/x86_64-linux-gnu/libpthread.a /usr/lib/x86_64-linux-gnu/libdb.so /usr/lib/x86_64-linux-gnu/libdl.a /usr/lib/x86_64-linux-gnu/libm.so /usr/lib/x86_64-linux-gnu/libcrypt.so /usr/lib/x86_64-linux-gnu/libutil.a /usr/lib/x86_64-linux-gnu/libc.so'
1082libspath=' /usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib /usr/lib64'
1083libswanted='cl pthread socket inet gdbm dbm db malloc dl ld sun m crypt sec util c cposix posix ucb BSD gdbm_compat'
1084libswanted_uselargefiles=''
1085line=''
1086lint=''
1087lkflags=''
1088ln='ln'
1089lns='/usr/bin/ln -s'
1090localtime_r_proto='0'
1091locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
1092loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
1093longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
1094longdblkind='3'
1095longdblmantbits='64'
1096longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
1097longdblsize='16'
1098longlongsize='8'
1099longsize='8'
1100lp=''
1101lpr=''
1102ls='ls'
1103lseeksize='8'
1104lseektype='off_t'
1105mail=''
1106mailx=''
1107make='make'
1108make_set_make='#'
1109mallocobj=''
1110mallocsrc=''
1111malloctype='void *'
1112man1dir='/home/micha/.plenv/versions/5.38.2/man/man1'
1113man1direxp='/home/micha/.plenv/versions/5.38.2/man/man1'
1114man1ext='1'
1115man3dir='/home/micha/.plenv/versions/5.38.2/man/man3'
1116man3direxp='/home/micha/.plenv/versions/5.38.2/man/man3'
1117man3ext='3'
1118mips_type=''
1119mistrustnm=''
1120mkdir='mkdir'
1121mmaptype='void *'
1122modetype='mode_t'
1123more='more'
1124multiarch='undef'
1125mv=''
1126myarchname='x86_64-linux'
1127mydomain='.michaeldaumconsulting.com'
1128myhostname='intra'
1129myuname='linux intra 6.2.0-39-generic #40~22.04.1-ubuntu smp preempt_dynamic thu nov 16 10:53:04 utc 2 x86_64 x86_64 x86_64 gnulinux '
1130n='-n'
1131need_va_copy='define'
1132netdb_hlen_type='size_t'
1133netdb_host_type='char *'
1134netdb_name_type='const char *'
1135netdb_net_type='in_addr_t'
1136nm='nm'
1137nm_opt=''
1138nm_so_opt='--dynamic'
1139nonxs_ext='Archive/Tar Attribute/Handlers autodie AutoLoader autouse base bignum Carp Config/Perl/V constant CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Devel/SelfStubber Digest Dumpvalue encoding/warnings Env Errno experimental Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS ExtUtils/PL2Bat FileCache File/Fetch File/Find File/Path File/Temp Filter/Simple FindBin Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags if IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP lib libnet Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata Net/Ping NEXT Params/Check parent perlfaq PerlIO/via/QuotedPrint Perl/OSType Pod/Checker Pod/Escapes Pod/Functions Pod/Html podlators Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/Local version XSLoader'
1140nroff='nroff'
1141nvEUformat='"E"'
1142nvFUformat='"F"'
1143nvGUformat='"G"'
1144nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
1145nv_preserves_uv_bits='53'
1146nveformat='"e"'
1147nvfformat='"f"'
1148nvgformat='"g"'
1149nvmantbits='52'
1150nvsize='8'
1151nvtype='double'
1152o_nonblock='O_NONBLOCK'
1153obj_ext='.o'
1154old_pthread_create_joinable=''
1155optimize='-O2'
1156orderlib='false'
1157osname='linux'
1158osvers='6.2.0-39-generic'
1159otherlibdirs=' '
1160package='perl5'
1161pager='/usr/bin/less -R'
1162passcat='cat /etc/passwd'
1163patchlevel='38'
1164path_sep=':'
1165perl='perl'
1166perl5='/usr/bin/perl'
1167perl_patchlevel=''
1168perl_static_inline='static __inline__'
1169perl_thread_local='_Thread_local'
1170perladmin='micha@mdc.hopto.org'
1171perllibs='-lpthread -ldl -lm -lcrypt -lutil -lc'
1172perlpath='/home/micha/.plenv/versions/5.38.2/bin/perl5.38.2'
1173pg='pg'
1174phostname='hostname'
1175pidtype='pid_t'
1176plibpth='/lib/x86_64-linux-gnu/11 /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu/11 /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib'
1177pmake=''
1178pr=''
1179prefix='/home/micha/.plenv/versions/5.38.2'
1180prefixexp='/home/micha/.plenv/versions/5.38.2'
1181privlib='/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2'
1182privlibexp='/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2'
1183procselfexe='"/proc/self/exe"'
1184prototype='define'
1185ptrsize='8'
1186quadkind='2'
1187quadtype='long'
1188randbits='48'
1189randfunc='Perl_drand48'
1190random_r_proto='0'
1191randseedtype='U32'
1192ranlib=':'
1193rd_nodata='-1'
1194readdir64_r_proto='0'
1195readdir_r_proto='0'
1196revision='5'
1197rm='rm'
1198rm_try='/usr/bin/rm -f try try a.out .out try.[cho] try..o core core.try* try.core*'
1199rmail=''
1200run=''
1201runnm='false'
1202sGMTIME_max='67768036191676799'
1203sGMTIME_min='-62167219200'
1204sLOCALTIME_max='67768036191673199'
1205sLOCALTIME_min='-62167222408'
1206sPRIEUldbl='"LE"'
1207sPRIFUldbl='"LF"'
1208sPRIGUldbl='"LG"'
1209sPRIXU64='"lX"'
1210sPRId64='"ld"'
1211sPRIeldbl='"Le"'
1212sPRIfldbl='"Lf"'
1213sPRIgldbl='"Lg"'
1214sPRIi64='"li"'
1215sPRIo64='"lo"'
1216sPRIu64='"lu"'
1217sPRIx64='"lx"'
1218sSCNfldbl='"Lf"'
1219sched_yield='sched_yield()'
1220scriptdir='/home/micha/.plenv/versions/5.38.2/bin'
1221scriptdirexp='/home/micha/.plenv/versions/5.38.2/bin'
1222sed='sed'
1223seedfunc='Perl_drand48_init'
1224selectminbits='64'
1225selecttype='fd_set *'
1226sendmail=''
1227setgrent_r_proto='0'
1228sethostent_r_proto='0'
1229setlocale_r_proto='0'
1230setnetent_r_proto='0'
1231setprotoent_r_proto='0'
1232setpwent_r_proto='0'
1233setservent_r_proto='0'
1234sh='/bin/sh'
1235shar=''
1236sharpbang='#!'
1237shmattype='void *'
1238shortsize='2'
1239shrpenv=''
1240shsharp='true'
1241sig_count='65'
1242sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL '
1243sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", 0'
1244sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 '
1245sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 0'
1246sig_size='68'
1247signal_t='void'
1248sitearch='/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux'
1249sitearchexp='/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux'
1250sitebin='/home/micha/.plenv/versions/5.38.2/bin'
1251sitebinexp='/home/micha/.plenv/versions/5.38.2/bin'
1252sitehtml1dir=''
1253sitehtml1direxp=''
1254sitehtml3dir=''
1255sitehtml3direxp=''
1256sitelib='/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2'
1257sitelib_stem='/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl'
1258sitelibexp='/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2'
1259siteman1dir='/home/micha/.plenv/versions/5.38.2/man/man1'
1260siteman1direxp='/home/micha/.plenv/versions/5.38.2/man/man1'
1261siteman3dir='/home/micha/.plenv/versions/5.38.2/man/man3'
1262siteman3direxp='/home/micha/.plenv/versions/5.38.2/man/man3'
1263siteprefix='/home/micha/.plenv/versions/5.38.2'
1264siteprefixexp='/home/micha/.plenv/versions/5.38.2'
1265sitescript='/home/micha/.plenv/versions/5.38.2/bin'
1266sitescriptexp='/home/micha/.plenv/versions/5.38.2/bin'
1267sizesize='8'
1268sizetype='size_t'
1269sleep=''
1270smail=''
1271so='so'
1272sockethdr=''
1273socketlib=''
1274socksizetype='socklen_t'
1275sort='sort'
1276spackage='Perl5'
1277spitshell='cat'
1278srand48_r_proto='0'
1279srandom_r_proto='0'
1280src='.'
1281ssizetype='ssize_t'
1282st_dev_sign='1'
1283st_dev_size='8'
1284st_ino_sign='1'
1285st_ino_size='8'
1286startperl='#!/home/micha/.plenv/versions/5.38.2/bin/perl5.38.2'
1287startsh='#!/bin/sh'
1288static_ext=' '
1289stdchar='char'
1290stdio_base='((fp)->_base)'
1291stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
1292stdio_cnt='((fp)->_cnt)'
1293stdio_filbuf=''
1294stdio_ptr='((fp)->_ptr)'
1295stdio_stream_array=''
1296strerror_r_proto='0'
1297submit=''
1298subversion='2'
1299sysman='/usr/share/man/man1'
1300sysroot=''
1301tail=''
1302taint_disabled=''
1303taint_support=''
1304tar=''
1305targetarch=''
1306targetdir=''
1307targetenv=''
1308targethost=''
1309targetmkdir=''
1310targetport=''
1311targetsh='/bin/sh'
1312tbl=''
1313tee=''
1314test='test'
1315timeincl='/usr/include/x86_64-linux-gnu/sys/time.h '
1316timetype='time_t'
1317tmpnam_r_proto='0'
1318to=':'
1319touch='touch'
1320tr='tr'
1321trnl='\n'
1322troff=''
1323ttyname_r_proto='0'
1324u16size='2'
1325u16type='unsigned short'
1326u32XUformat='"X"'
1327u32oformat='"o"'
1328u32size='4'
1329u32type='unsigned int'
1330u32uformat='"u"'
1331u32xformat='"x"'
1332u64size='8'
1333u64type='unsigned long'
1334u8size='1'
1335u8type='unsigned char'
1336uidformat='"u"'
1337uidsign='1'
1338uidsize='4'
1339uidtype='uid_t'
1340uname='uname'
1341uniq='uniq'
1342uquadtype='unsigned long'
1343use64bitall='define'
1344use64bitint='define'
1345usecbacktrace='undef'
1346usecrosscompile='undef'
1347usedefaultstrict='undef'
1348usedevel='undef'
1349usedl='define'
1350usedtrace='undef'
1351usefaststdio='undef'
1352useithreads='undef'
1353usekernprocpathname='undef'
1354uselanginfo='true'
1355uselargefiles='define'
1356uselongdouble='undef'
1357usemallocwrap='define'
1358usemorebits='undef'
1359usemultiplicity='undef'
1360usemymalloc='n'
1361usenm='false'
1362usensgetexecutablepath='undef'
1363useopcode='true'
1364useperlio='define'
1365useposix='true'
1366usequadmath='undef'
1367usereentrant='undef'
1368userelocatableinc='undef'
1369useshrplib='false'
1370usesitecustomize='undef'
1371usesocks='undef'
1372usethreads='undef'
1373usevendorprefix='undef'
1374useversionedarchname='undef'
1375usevfork='false'
1376usrinc='/usr/include'
1377uuname=''
1378uvXUformat='"lX"'
1379uvoformat='"lo"'
1380uvsize='8'
1381uvtype='unsigned long'
1382uvuformat='"lu"'
1383uvxformat='"lx"'
1384vendorarch=''
1385vendorarchexp=''
1386vendorbin=''
1387vendorbinexp=''
1388vendorhtml1dir=' '
1389vendorhtml1direxp=''
1390vendorhtml3dir=' '
1391vendorhtml3direxp=''
1392vendorlib=''
1393vendorlib_stem=''
1394vendorlibexp=''
1395vendorman1dir=' '
1396vendorman1direxp=''
1397vendorman3dir=' '
1398vendorman3direxp=''
1399vendorprefix=''
1400vendorprefixexp=''
1401vendorscript=''
1402vendorscriptexp=''
1403version='5.38.2'
1404version_patchlevel_string='version 38 subversion 2'
1405versiononly='define'
1406vi=''
1407xlibpth='/usr/lib/386 /lib/386'
1408xlocale_needed='undef'
1409yacc='yacc'
1410yaccflags=''
1411zcat=''
1412zip='zip'
1413!END!
1414
14151100nsmy $i = ord(8);
1416152µsforeach my $c (7,6,5,4,3,2,1) { $i <<= 8; $i |= ord($c); }
1417123µs211µsour $byteorder = join('', unpack('aaaaaaaa', pack('L!', $i)));
# spent 9µs making 1 call to CORE::pack # spent 2µs making 1 call to CORE::unpack
1418123µs317µss/(byteorder=)(['"]).*?\2/$1$2$Config::byteorder$2/m;
# spent 12µs making 2 calls to CORE::substcont, avg 6µs/call # spent 5µs making 1 call to CORE::subst
1419
1420{
1421 # We have to set this up late as Win32 does not build miniperl
1422 # with the same defines and CC flags as it builds perl itself.
142325µs12µs my $defines = join " ", (Internals::V)[0,1];
# spent 2µs making 1 call to Internals::V
142414µs21µs if (
# spent 1µs making 2 calls to CORE::match, avg 650ns/call
1425 $defines =~ /\b(SILENT_NO_TAINT_SUPPORT)\b/ ||
1426 $defines =~ /\b(NO_TAINT_SUPPORT)\b/
1427 ){
1428 my $which = $1;
1429 my $taint_disabled = ($which eq "SILENT_NO_TAINT_SUPPORT")
1430 ? "silent" : "define";
1431 s/^(taint_disabled=['"])(["'])/$1$taint_disabled$2/m;
1432 }
1433 else {
14341200ns my $taint_support = 'define';
1435168µs362µs s/^(taint_support=['"])(["'])/$1$taint_support$2/m;
# spent 43µs making 1 call to CORE::subst # spent 19µs making 2 calls to CORE::substcont, avg 9µs/call
1436 }
1437}
14381400nsmy $config_sh_len = length $_;
1439
1440139µsour $Config_SH_expanded = "\n$_" . << 'EOVIRTUAL';
1441ccflags_nolargefiles='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include '
1442ldflags_nolargefiles=' -fstack-protector-strong -L/usr/local/lib'
1443libs_nolargefiles='-lpthread -ldb -ldl -lm -lcrypt -lutil -lc'
1444libswanted_nolargefiles='cl pthread socket inet gdbm dbm db malloc dl ld sun m crypt sec util c cposix posix ucb BSD gdbm_compat'
1445ccwarnflags=' -Wall -Werror=pointer-arith -Werror=vla -Wextra -Wno-long-long -Wno-declaration-after-statement -Wc++-compat -Wwrite-strings'
1446ccstdflags=' -std=c99'
1447EOVIRTUAL
14481500nseval {
1449 # do not have hairy conniptions if this isnt available
1450149µs require 'Config_git.pl';
145113µs $Config_SH_expanded .= $Config::Git_Data;
14521200ns 1;
1453} or warn "Warning: failed to load Config_git.pl, something strange about this perl...\n";
1454
1455# Search for it in the big string
1456
# spent 37µs (9+28) within Config::fetch_string which was called: # once (9µs+28µs) by Config::FETCH at line 1524
sub fetch_string {
14571700ns my($self, $key) = @_;
1458
1459132µs228µs return undef unless $Config_SH_expanded =~ /\n$key=\'(.*?)\'\n/s;
# spent 19µs making 1 call to CORE::match # spent 9µs making 1 call to CORE::regcomp
1460 # So we can say "if $Config{'foo'}".
146116µs $self->{$key} = $1 eq 'undef' ? undef : $1;
1462}
1463
14641200nsmy $prevpos = 0;
1465
1466sub FIRSTKEY {
1467 $prevpos = 0;
1468 substr($Config_SH_expanded, 1, index($Config_SH_expanded, '=') - 1 );
1469}
1470
1471sub NEXTKEY {
1472 my $pos = index($Config_SH_expanded, qq('\n), $prevpos) + 2;
1473 my $len = index($Config_SH_expanded, "=", $pos) - $pos;
1474 $prevpos = $pos;
1475 $len > 0 ? substr($Config_SH_expanded, $pos, $len) : undef;
1476}
1477
1478sub EXISTS {
1479 return 1 if exists($_[0]->{$_[1]});
1480
1481 return(index($Config_SH_expanded, "\n$_[1]='") != -1
1482 );
1483}
1484
1485sub STORE { die "\%Config::Config is read-only\n" }
148612µs*DELETE = *CLEAR = \*STORE; # Typeglob aliasing uses less space
1487
1488sub config_sh {
1489 substr $Config_SH_expanded, 1, $config_sh_len;
1490}
1491
1492sub config_re {
1493 my $re = shift;
1494 return map { chomp; $_ } grep eval{ /^(?:$re)=/ }, split /^/,
1495 $Config_SH_expanded;
1496}
1497
1498sub config_vars {
1499 # implements -V:cfgvar option (see perlrun -V:)
1500 foreach (@_) {
1501 # find optional leading, trailing colons; and query-spec
1502 my ($notag,$qry,$lncont) = m/^(:)?(.*?)(:)?$/; # flags fore and aft,
1503 # map colon-flags to print decorations
1504 my $prfx = $notag ? '': "$qry="; # tag-prefix for print
1505 my $lnend = $lncont ? ' ' : ";\n"; # line ending for print
1506
1507 # all config-vars are by definition \w only, any \W means regex
1508 if ($qry =~ /\W/) {
1509 my @matches = config_re($qry);
1510 print map "$_$lnend", @matches ? @matches : "$qry: not found" if !$notag;
1511 print map { s/\w+=//; "$_$lnend" } @matches ? @matches : "$qry: not found" if $notag;
1512 } else {
1513 my $v = (exists $Config::Config{$qry}) ? $Config::Config{$qry}
1514 : 'UNKNOWN';
1515 $v = 'undef' unless defined $v;
1516 print "${prfx}'${v}'$lnend";
1517 }
1518 }
1519}
1520
1521# Called by the real AUTOLOAD
1522
# spent 5µs within Config::launcher which was called: # once (5µs+0s) by Config::FETCH at line 81 of Config.pm
sub launcher {
152313µs undef &AUTOLOAD;
152413µs137µs goto \&$Config::AUTOLOAD;
# spent 37µs making 1 call to Config::fetch_string
1525}
1526
1527112µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 7)[Test2-API-Instance-pm-319]-71-line.html0000644000175000017500000003437614576335353025725 0ustar michamicha Profile of (eval 7)[Test2/API/Instance.pm:319]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 7)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm:319]
StatementsExecuted 2 statements in 3µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/API/Instance.pm line 319
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112µs3µsTest2::API::Instance::::ENDTest2::API::Instance::END
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
123µs1800ns
# spent 3µs (2+800ns) within Test2::API::Instance::END which was called: # once (2µs+800ns) by main::RUNTIME at line 0 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
END { Test2::API::test2_set_is_end() }; 1
# spent 800ns making 1 call to Test2::API::test2_set_is_end
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 129)[XML-Twig-pm-7113]-246-line.html0000644000175000017500000004056614576335353024431 0ustar michamicha Profile of (eval 129)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 129)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 9 statements in 118µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs34µsXML::Twig::Elt::::BEGIN@1.73XML::Twig::Elt::BEGIN@1.73
11110µs196µsXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
19118µs5244µs
# spent 34µs (11+24) within XML::Twig::Elt::BEGIN@1.73 which was called: # once (11µs+24µs) by XML::Twig::Elt::_install_xpath at line 1 # spent 196µs (10+186) within XML::Twig::Elt::__ANON__[(eval 129)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (10µs+186µs) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:workbookView') } @results;return XML::Twig::_unique_elts( @results); }
# spent 172µs making 1 call to XML::Twig::descendants # spent 34µs making 1 call to XML::Twig::Elt::BEGIN@1.73 # spent 24µs making 1 call to warnings::unimport # spent 9µs making 1 call to XML::Twig::Elt::twig # spent 5µs making 1 call to XML::Twig::_unique_elts
2;










Spreadsheet-ParseXLSX-0.35/nytprof/File-Glob-pm-136-line.html0000644000175000017500000006511514576335353022446 0ustar michamicha Profile of File/Glob.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/File/Glob.pm
StatementsExecuted 15 statements in 392µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs12µsFile::Glob::::BEGIN@3File::Glob::BEGIN@3
1117µs9µsFile::Glob::::BEGIN@54File::Glob::BEGIN@54
1114µs24µsFile::Glob::::BEGIN@50File::Glob::BEGIN@50
111600ns600nsFile::Glob::::GLOB_CSHFile::Glob::GLOB_CSH (xsub)
0000s0sFile::Glob::::importFile::Glob::import
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Glob;
2
32108µs213µs
# spent 12µs (10+2) within File::Glob::BEGIN@3 which was called: # once (10µs+2µs) by XML::Twig::BEGIN@1125 at line 3
use strict;
# spent 12µs making 1 call to File::Glob::BEGIN@3 # spent 2µs making 1 call to strict::import
4our($DEFAULT_FLAGS);
5
61300nsrequire XSLoader;
7
8# NOTE: The glob() export is only here for compatibility with 5.6.0.
9# csh_glob() should not be used directly, unless you know what you're doing.
10
1112µsour %EXPORT_TAGS = (
12 'glob' => [ qw(
13 GLOB_ABEND
14 GLOB_ALPHASORT
15 GLOB_ALTDIRFUNC
16 GLOB_BRACE
17 GLOB_CSH
18 GLOB_ERR
19 GLOB_ERROR
20 GLOB_LIMIT
21 GLOB_MARK
22 GLOB_NOCASE
23 GLOB_NOCHECK
24 GLOB_NOMAGIC
25 GLOB_NOSORT
26 GLOB_NOSPACE
27 GLOB_QUOTE
28 GLOB_TILDE
29 bsd_glob
30 ) ],
31);
3211µs$EXPORT_TAGS{bsd_glob} = [@{$EXPORT_TAGS{glob}}];
33
3412µsour @EXPORT_OK = (@{$EXPORT_TAGS{'glob'}}, 'csh_glob');
35
361100nsour $VERSION = '1.40';
37
38sub import {
39 require Exporter;
40 local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
41 Exporter::import(grep {
42 my $passthrough;
43 if ($_ eq ':case') {
44 $DEFAULT_FLAGS &= ~GLOB_NOCASE()
45 }
46 elsif ($_ eq ':nocase') {
47 $DEFAULT_FLAGS |= GLOB_NOCASE();
48 }
49 elsif ($_ eq ':globally') {
50231µs244µs
# spent 24µs (4+20) within File::Glob::BEGIN@50 which was called: # once (4µs+20µs) by XML::Twig::BEGIN@1125 at line 50
no warnings 'redefine';
# spent 24µs making 1 call to File::Glob::BEGIN@50 # spent 20µs making 1 call to warnings::unimport
51 *CORE::GLOBAL::glob = \&File::Glob::csh_glob;
52 }
53 elsif ($_ eq ':bsd_glob') {
542101µs211µs
# spent 9µs (7+2) within File::Glob::BEGIN@54 which was called: # once (7µs+2µs) by XML::Twig::BEGIN@1125 at line 54
no strict; *{caller."::glob"} = \&bsd_glob_override;
# spent 9µs making 1 call to File::Glob::BEGIN@54 # spent 2µs making 1 call to strict::unimport
55 $passthrough = 1;
56 }
57 else {
58 $passthrough = 1;
59 }
60 $passthrough;
61 } @_);
62}
63
641132µs1126µsXSLoader::load();
# spent 126µs making 1 call to XSLoader::load
65
6613µs1600ns$DEFAULT_FLAGS = GLOB_CSH();
# spent 600ns making 1 call to File::Glob::GLOB_CSH
6713µs12µsif ($^O =~ /^(?:MSWin32|VMS|os2|riscos)$/) {
# spent 2µs making 1 call to CORE::match
68 $DEFAULT_FLAGS |= GLOB_NOCASE();
69}
70
7118µs1;
72__END__
 
# spent 600ns within File::Glob::GLOB_CSH which was called: # once (600ns+0s) by XML::Twig::BEGIN@1125 at line 66
sub File::Glob::GLOB_CSH; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 3)[Carp-pm-116]-15-line.html0000644000175000017500000003406714576335353023422 0ustar michamicha Profile of (eval 3)[Carp.pm:116]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 3)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm:116]
StatementsExecuted 1 statements in 3µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/Carp.pm line 116
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
0000s0sCarp::::__ANON__[:4]Carp::__ANON__[:4]
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1sub ($) {
2 my $u = utf8::native_to_unicode($_[0]);
3 $u >= 0x20 && $u <= 0x7e;
413µs }
5;










Spreadsheet-ParseXLSX-0.35/nytprof/Spreadsheet-ParseExcel-pm-118-line.html0000644000175000017500000156476514576335353025226 0ustar michamicha Profile of Spreadsheet/ParseExcel.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Spreadsheet/ParseExcel.pm
StatementsExecuted 76 statements in 7.43ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1114.23ms5.79msSpreadsheet::ParseExcel::::BEGIN@21Spreadsheet::ParseExcel::BEGIN@21
111960µs2.77msSpreadsheet::ParseExcel::::BEGIN@27Spreadsheet::ParseExcel::BEGIN@27
111818µs884µsSpreadsheet::ParseExcel::::BEGIN@32Spreadsheet::ParseExcel::BEGIN@32
111439µs3.80msSpreadsheet::ParseExcel::::BEGIN@36Spreadsheet::ParseExcel::BEGIN@36
111383µs434µsSpreadsheet::ParseExcel::::BEGIN@31Spreadsheet::ParseExcel::BEGIN@31
111349µs404µsSpreadsheet::ParseExcel::::BEGIN@26Spreadsheet::ParseExcel::BEGIN@26
111314µs364µsSpreadsheet::ParseExcel::::BEGIN@35Spreadsheet::ParseExcel::BEGIN@35
111117µs145µsSpreadsheet::ParseExcel::::BEGIN@34Spreadsheet::ParseExcel::BEGIN@34
111105µs134µsSpreadsheet::ParseExcel::::BEGIN@33Spreadsheet::ParseExcel::BEGIN@33
11113µs14µsSpreadsheet::ParseExcel::::BEGIN@17Spreadsheet::ParseExcel::BEGIN@17
1118µs20µsSpreadsheet::ParseExcel::::BEGIN@63Spreadsheet::ParseExcel::BEGIN@63
1117µs10µsSpreadsheet::ParseExcel::::BEGIN@2628Spreadsheet::ParseExcel::BEGIN@2628
1116µs6µsSpreadsheet::ParseExcel::::BEGIN@19Spreadsheet::ParseExcel::BEGIN@19
1116µs30µsSpreadsheet::ParseExcel::::BEGIN@58Spreadsheet::ParseExcel::BEGIN@58
1115µs18µsSpreadsheet::ParseExcel::::BEGIN@2705Spreadsheet::ParseExcel::BEGIN@2705
1115µs17µsSpreadsheet::ParseExcel::::BEGIN@66Spreadsheet::ParseExcel::BEGIN@66
1115µs23µsSpreadsheet::ParseExcel::::BEGIN@22Spreadsheet::ParseExcel::BEGIN@22
1114µs10µsSpreadsheet::ParseExcel::::BEGIN@24Spreadsheet::ParseExcel::BEGIN@24
6614µs4µsSpreadsheet::ParseExcel::::__ANON__Spreadsheet::ParseExcel::__ANON__ (xsub)
1114µs60µsSpreadsheet::ParseExcel::::BEGIN@23Spreadsheet::ParseExcel::BEGIN@23
1114µs19µsSpreadsheet::ParseExcel::::BEGIN@18Spreadsheet::ParseExcel::BEGIN@18
1113µs19µsSpreadsheet::ParseExcel::::BEGIN@59Spreadsheet::ParseExcel::BEGIN@59
1113µs18µsSpreadsheet::ParseExcel::::BEGIN@76Spreadsheet::ParseExcel::BEGIN@76
1113µs17µsSpreadsheet::ParseExcel::::BEGIN@60Spreadsheet::ParseExcel::BEGIN@60
1113µs17µsSpreadsheet::ParseExcel::::BEGIN@75Spreadsheet::ParseExcel::BEGIN@75
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@61Spreadsheet::ParseExcel::BEGIN@61
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@70Spreadsheet::ParseExcel::BEGIN@70
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@67Spreadsheet::ParseExcel::BEGIN@67
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@78Spreadsheet::ParseExcel::BEGIN@78
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@64Spreadsheet::ParseExcel::BEGIN@64
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@68Spreadsheet::ParseExcel::BEGIN@68
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@72Spreadsheet::ParseExcel::BEGIN@72
1113µs16µsSpreadsheet::ParseExcel::::BEGIN@77Spreadsheet::ParseExcel::BEGIN@77
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@81Spreadsheet::ParseExcel::BEGIN@81
1113µs15µsSpreadsheet::ParseExcel::::BEGIN@62Spreadsheet::ParseExcel::BEGIN@62
0000s0sSpreadsheet::ParseExcel::::ColorIdxToRGBSpreadsheet::ParseExcel::ColorIdxToRGB
0000s0sSpreadsheet::ParseExcel::::DecodeBoolErrSpreadsheet::ParseExcel::DecodeBoolErr
0000s0sSpreadsheet::ParseExcel::::InitStreamSpreadsheet::ParseExcel::InitStream
0000s0sSpreadsheet::ParseExcel::::MakeKeySpreadsheet::ParseExcel::MakeKey
0000s0sSpreadsheet::ParseExcel::::QueryNextSpreadsheet::ParseExcel::QueryNext
0000s0sSpreadsheet::ParseExcel::::SetDecryptSpreadsheet::ParseExcel::SetDecrypt
0000s0sSpreadsheet::ParseExcel::::SetEventHandlerSpreadsheet::ParseExcel::SetEventHandler
0000s0sSpreadsheet::ParseExcel::::SetEventHandlersSpreadsheet::ParseExcel::SetEventHandlers
0000s0sSpreadsheet::ParseExcel::::SkipBytesSpreadsheet::ParseExcel::SkipBytes
0000s0sSpreadsheet::ParseExcel::::VerifyPasswordSpreadsheet::ParseExcel::VerifyPassword
0000s0sSpreadsheet::ParseExcel::::_NewCellSpreadsheet::ParseExcel::_NewCell
0000s0sSpreadsheet::ParseExcel::::_ParseNameAreaSpreadsheet::ParseExcel::_ParseNameArea
0000s0sSpreadsheet::ParseExcel::::_ParseNameArea95Spreadsheet::ParseExcel::_ParseNameArea95
0000s0sSpreadsheet::ParseExcel::::_SetDimensionSpreadsheet::ParseExcel::_SetDimension
0000s0sSpreadsheet::ParseExcel::::_SwapForUnicodeSpreadsheet::ParseExcel::_SwapForUnicode
0000s0sSpreadsheet::ParseExcel::::_convBIFF8StringSpreadsheet::ParseExcel::_convBIFF8String
0000s0sSpreadsheet::ParseExcel::::_convDvalSpreadsheet::ParseExcel::_convDval
0000s0sSpreadsheet::ParseExcel::::_convert_col_widthSpreadsheet::ParseExcel::_convert_col_width
0000s0sSpreadsheet::ParseExcel::::_decode_rk_numberSpreadsheet::ParseExcel::_decode_rk_number
0000s0sSpreadsheet::ParseExcel::::_get_contentSpreadsheet::ParseExcel::_get_content
0000s0sSpreadsheet::ParseExcel::::_getguidSpreadsheet::ParseExcel::_getguid
0000s0sSpreadsheet::ParseExcel::::_getustrSpreadsheet::ParseExcel::_getustr
0000s0sSpreadsheet::ParseExcel::::_subArraySpreadsheet::ParseExcel::_subArray
0000s0sSpreadsheet::ParseExcel::::_subBOFSpreadsheet::ParseExcel::_subBOF
0000s0sSpreadsheet::ParseExcel::::_subBlankSpreadsheet::ParseExcel::_subBlank
0000s0sSpreadsheet::ParseExcel::::_subBoolErrSpreadsheet::ParseExcel::_subBoolErr
0000s0sSpreadsheet::ParseExcel::::_subBoundSheetSpreadsheet::ParseExcel::_subBoundSheet
0000s0sSpreadsheet::ParseExcel::::_subColInfoSpreadsheet::ParseExcel::_subColInfo
0000s0sSpreadsheet::ParseExcel::::_subContinueSpreadsheet::ParseExcel::_subContinue
0000s0sSpreadsheet::ParseExcel::::_subDefColWidthSpreadsheet::ParseExcel::_subDefColWidth
0000s0sSpreadsheet::ParseExcel::::_subDefaultRowHeightSpreadsheet::ParseExcel::_subDefaultRowHeight
0000s0sSpreadsheet::ParseExcel::::_subFlg1904Spreadsheet::ParseExcel::_subFlg1904
0000s0sSpreadsheet::ParseExcel::::_subFontSpreadsheet::ParseExcel::_subFont
0000s0sSpreadsheet::ParseExcel::::_subFooterSpreadsheet::ParseExcel::_subFooter
0000s0sSpreadsheet::ParseExcel::::_subFormatSpreadsheet::ParseExcel::_subFormat
0000s0sSpreadsheet::ParseExcel::::_subFormulaSpreadsheet::ParseExcel::_subFormula
0000s0sSpreadsheet::ParseExcel::::_subGetContentSpreadsheet::ParseExcel::_subGetContent
0000s0sSpreadsheet::ParseExcel::::_subHPageBreakSpreadsheet::ParseExcel::_subHPageBreak
0000s0sSpreadsheet::ParseExcel::::_subHcenterSpreadsheet::ParseExcel::_subHcenter
0000s0sSpreadsheet::ParseExcel::::_subHeaderSpreadsheet::ParseExcel::_subHeader
0000s0sSpreadsheet::ParseExcel::::_subHyperlinkSpreadsheet::ParseExcel::_subHyperlink
0000s0sSpreadsheet::ParseExcel::::_subIntegerSpreadsheet::ParseExcel::_subInteger
0000s0sSpreadsheet::ParseExcel::::_subLabelSpreadsheet::ParseExcel::_subLabel
0000s0sSpreadsheet::ParseExcel::::_subLabelSSTSpreadsheet::ParseExcel::_subLabelSST
0000s0sSpreadsheet::ParseExcel::::_subMarginSpreadsheet::ParseExcel::_subMargin
0000s0sSpreadsheet::ParseExcel::::_subMergeAreaSpreadsheet::ParseExcel::_subMergeArea
0000s0sSpreadsheet::ParseExcel::::_subMulBlankSpreadsheet::ParseExcel::_subMulBlank
0000s0sSpreadsheet::ParseExcel::::_subMulRKSpreadsheet::ParseExcel::_subMulRK
0000s0sSpreadsheet::ParseExcel::::_subNameSpreadsheet::ParseExcel::_subName
0000s0sSpreadsheet::ParseExcel::::_subNumberSpreadsheet::ParseExcel::_subNumber
0000s0sSpreadsheet::ParseExcel::::_subPaletteSpreadsheet::ParseExcel::_subPalette
0000s0sSpreadsheet::ParseExcel::::_subPrintGridlinesSpreadsheet::ParseExcel::_subPrintGridlines
0000s0sSpreadsheet::ParseExcel::::_subPrintHeadersSpreadsheet::ParseExcel::_subPrintHeaders
0000s0sSpreadsheet::ParseExcel::::_subRKSpreadsheet::ParseExcel::_subRK
0000s0sSpreadsheet::ParseExcel::::_subRStringSpreadsheet::ParseExcel::_subRString
0000s0sSpreadsheet::ParseExcel::::_subRowSpreadsheet::ParseExcel::_subRow
0000s0sSpreadsheet::ParseExcel::::_subSETUPSpreadsheet::ParseExcel::_subSETUP
0000s0sSpreadsheet::ParseExcel::::_subSSTSpreadsheet::ParseExcel::_subSST
0000s0sSpreadsheet::ParseExcel::::_subSheetLayoutSpreadsheet::ParseExcel::_subSheetLayout
0000s0sSpreadsheet::ParseExcel::::_subStandardWidthSpreadsheet::ParseExcel::_subStandardWidth
0000s0sSpreadsheet::ParseExcel::::_subStrWkSpreadsheet::ParseExcel::_subStrWk
0000s0sSpreadsheet::ParseExcel::::_subStringSpreadsheet::ParseExcel::_subString
0000s0sSpreadsheet::ParseExcel::::_subVPageBreakSpreadsheet::ParseExcel::_subVPageBreak
0000s0sSpreadsheet::ParseExcel::::_subVcenterSpreadsheet::ParseExcel::_subVcenter
0000s0sSpreadsheet::ParseExcel::::_subWSBOOLSpreadsheet::ParseExcel::_subWSBOOL
0000s0sSpreadsheet::ParseExcel::::_subWindow1Spreadsheet::ParseExcel::_subWindow1
0000s0sSpreadsheet::ParseExcel::::_subWriteAccessSpreadsheet::ParseExcel::_subWriteAccess
0000s0sSpreadsheet::ParseExcel::::_subXFSpreadsheet::ParseExcel::_subXF
0000s0sSpreadsheet::ParseExcel::::errorSpreadsheet::ParseExcel::error
0000s0sSpreadsheet::ParseExcel::::error_codeSpreadsheet::ParseExcel::error_code
0000s0sSpreadsheet::ParseExcel::::md5stateSpreadsheet::ParseExcel::md5state
0000s0sSpreadsheet::ParseExcel::::newSpreadsheet::ParseExcel::new
0000s0sSpreadsheet::ParseExcel::::parseSpreadsheet::ParseExcel::parse
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseExcel;
2
3##############################################################################
4#
5# Spreadsheet::ParseExcel - Extract information from an Excel file.
6#
7# Copyright (c) 2014 Douglas Wilson
8# Copyright (c) 2009-2013 John McNamara
9# Copyright (c) 2006-2008 Gabor Szabo
10# Copyright (c) 2000-2008 Takanori Kawai
11#
12# perltidy with standard settings.
13#
14# Documentation after __END__
15#
16
17224µs216µs
# spent 14µs (13+2) within Spreadsheet::ParseExcel::BEGIN@17 which was called: # once (13µs+2µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 17
use strict;
# spent 14µs making 1 call to Spreadsheet::ParseExcel::BEGIN@17 # spent 2µs making 1 call to strict::import
18213µs234µs
# spent 19µs (4+16) within Spreadsheet::ParseExcel::BEGIN@18 which was called: # once (4µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 18
use warnings;
# spent 19µs making 1 call to Spreadsheet::ParseExcel::BEGIN@18 # spent 16µs making 1 call to warnings::import
19228µs16µs
# spent 6µs within Spreadsheet::ParseExcel::BEGIN@19 which was called: # once (6µs+0s) by Spreadsheet::ParseXLSX::BEGIN@14 at line 19
use 5.008;
# spent 6µs making 1 call to Spreadsheet::ParseExcel::BEGIN@19
20
21299µs25.80ms
# spent 5.79ms (4.23+1.56) within Spreadsheet::ParseExcel::BEGIN@21 which was called: # once (4.23ms+1.56ms) by Spreadsheet::ParseXLSX::BEGIN@14 at line 21
use OLE::Storage_Lite;
# spent 5.79ms making 1 call to Spreadsheet::ParseExcel::BEGIN@21 # spent 9µs making 1 call to Exporter::import
22216µs241µs
# spent 23µs (5+18) within Spreadsheet::ParseExcel::BEGIN@22 which was called: # once (5µs+18µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 22
use File::Basename qw(fileparse);
# spent 23µs making 1 call to Spreadsheet::ParseExcel::BEGIN@22 # spent 18µs making 1 call to Exporter::import
23214µs2116µs
# spent 60µs (4+56) within Spreadsheet::ParseExcel::BEGIN@23 which was called: # once (4µs+56µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 23
use IO::File;
# spent 60µs making 1 call to Spreadsheet::ParseExcel::BEGIN@23 # spent 56µs making 1 call to Exporter::import
24212µs217µs
# spent 10µs (4+6) within Spreadsheet::ParseExcel::BEGIN@24 which was called: # once (4µs+6µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 24
use Config;
# spent 10µs making 1 call to Spreadsheet::ParseExcel::BEGIN@24 # spent 6µs making 1 call to Config::import
25
26280µs2420µs
# spent 404µs (349+55) within Spreadsheet::ParseExcel::BEGIN@26 which was called: # once (349µs+55µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 26
use Crypt::RC4;
# spent 404µs making 1 call to Spreadsheet::ParseExcel::BEGIN@26 # spent 17µs making 1 call to Exporter::import
27283µs22.78ms
# spent 2.77ms (960µs+1.81) within Spreadsheet::ParseExcel::BEGIN@27 which was called: # once (960µs+1.81ms) by Spreadsheet::ParseXLSX::BEGIN@14 at line 27
use Digest::Perl::MD5;
# spent 2.77ms making 1 call to Spreadsheet::ParseExcel::BEGIN@27 # spent 12µs making 1 call to Exporter::import
28
291400nsour $VERSION = '0.66';
30
31281µs2434µs
# spent 434µs (383+51) within Spreadsheet::ParseExcel::BEGIN@31 which was called: # once (383µs+51µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 31
use Spreadsheet::ParseExcel::Workbook;
# spent 434µs making 1 call to Spreadsheet::ParseExcel::BEGIN@31 # spent 600ns making 1 call to Spreadsheet::ParseExcel::__ANON__
32288µs2885µs
# spent 884µs (818+66) within Spreadsheet::ParseExcel::BEGIN@32 which was called: # once (818µs+66µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 32
use Spreadsheet::ParseExcel::Worksheet;
# spent 884µs making 1 call to Spreadsheet::ParseExcel::BEGIN@32 # spent 600ns making 1 call to Spreadsheet::ParseExcel::__ANON__
33272µs2135µs
# spent 134µs (105+29) within Spreadsheet::ParseExcel::BEGIN@33 which was called: # once (105µs+29µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 33
use Spreadsheet::ParseExcel::Font;
# spent 134µs making 1 call to Spreadsheet::ParseExcel::BEGIN@33 # spent 700ns making 1 call to Spreadsheet::ParseExcel::__ANON__
34275µs2146µs
# spent 145µs (117+28) within Spreadsheet::ParseExcel::BEGIN@34 which was called: # once (117µs+28µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 34
use Spreadsheet::ParseExcel::Format;
# spent 145µs making 1 call to Spreadsheet::ParseExcel::BEGIN@34 # spent 700ns making 1 call to Spreadsheet::ParseExcel::__ANON__
35286µs2364µs
# spent 364µs (314+50) within Spreadsheet::ParseExcel::BEGIN@35 which was called: # once (314µs+50µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 35
use Spreadsheet::ParseExcel::Cell;
# spent 364µs making 1 call to Spreadsheet::ParseExcel::BEGIN@35 # spent 600ns making 1 call to Spreadsheet::ParseExcel::__ANON__
362118µs23.80ms
# spent 3.80ms (439µs+3.36) within Spreadsheet::ParseExcel::BEGIN@36 which was called: # once (439µs+3.36ms) by Spreadsheet::ParseXLSX::BEGIN@14 at line 36
use Spreadsheet::ParseExcel::FmtDefault;
# spent 3.80ms making 1 call to Spreadsheet::ParseExcel::BEGIN@36 # spent 800ns making 1 call to Spreadsheet::ParseExcel::__ANON__
37
381100nsmy $currentbook;
3914µsmy @aColor = (
40 '000000', # 0x00
41 'FFFFFF', 'FFFFFF', 'FFFFFF', 'FFFFFF',
42 'FFFFFF', 'FFFFFF', 'FFFFFF', '000000', # 0x08
43 'FFFFFF', 'FF0000', '00FF00', '0000FF',
44 'FFFF00', 'FF00FF', '00FFFF', '800000', # 0x10
45 '008000', '000080', '808000', '800080',
46 '008080', 'C0C0C0', '808080', '9999FF', # 0x18
47 '993366', 'FFFFCC', 'CCFFFF', '660066',
48 'FF8080', '0066CC', 'CCCCFF', '000080', # 0x20
49 'FF00FF', 'FFFF00', '00FFFF', '800080',
50 '800000', '008080', '0000FF', '00CCFF', # 0x28
51 'CCFFFF', 'CCFFCC', 'FFFF99', '99CCFF',
52 'FF99CC', 'CC99FF', 'FFCC99', '3366FF', # 0x30
53 '33CCCC', '99CC00', 'FFCC00', 'FF9900',
54 'FF6600', '666699', '969696', '003366', # 0x38
55 '339966', '003300', '333300', '993300',
56 '993366', '333399', '333333', '000000' # 0x40
57);
58219µs255µs
# spent 30µs (6+24) within Spreadsheet::ParseExcel::BEGIN@58 which was called: # once (6µs+24µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 58
use constant verExcel95 => 0x500;
# spent 30µs making 1 call to Spreadsheet::ParseExcel::BEGIN@58 # spent 24µs making 1 call to constant::import
59214µs235µs
# spent 19µs (3+16) within Spreadsheet::ParseExcel::BEGIN@59 which was called: # once (3µs+16µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 59
use constant verExcel97 => 0x600;
# spent 19µs making 1 call to Spreadsheet::ParseExcel::BEGIN@59 # spent 16µs making 1 call to constant::import
60211µs231µs
# spent 17µs (3+14) within Spreadsheet::ParseExcel::BEGIN@60 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 60
use constant verBIFF2 => 0x00;
# spent 17µs making 1 call to Spreadsheet::ParseExcel::BEGIN@60 # spent 14µs making 1 call to constant::import
61211µs229µs
# spent 16µs (3+13) within Spreadsheet::ParseExcel::BEGIN@61 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 61
use constant verBIFF3 => 0x02;
# spent 16µs making 1 call to Spreadsheet::ParseExcel::BEGIN@61 # spent 13µs making 1 call to constant::import
62211µs227µs
# spent 15µs (3+12) within Spreadsheet::ParseExcel::BEGIN@62 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 62
use constant verBIFF4 => 0x04;
# spent 15µs making 1 call to Spreadsheet::ParseExcel::BEGIN@62 # spent 12µs making 1 call to constant::import
63213µs232µs
# spent 20µs (8+12) within Spreadsheet::ParseExcel::BEGIN@63 which was called: # once (8µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 63
use constant verBIFF5 => 0x08;
# spent 20µs making 1 call to Spreadsheet::ParseExcel::BEGIN@63 # spent 12µs making 1 call to constant::import
64211µs228µs
# spent 16µs (3+13) within Spreadsheet::ParseExcel::BEGIN@64 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 64
use constant verBIFF8 => 0x18;
# spent 16µs making 1 call to Spreadsheet::ParseExcel::BEGIN@64 # spent 13µs making 1 call to constant::import
65
66212µs230µs
# spent 17µs (5+12) within Spreadsheet::ParseExcel::BEGIN@66 which was called: # once (5µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 66
use constant MS_BIFF_CRYPTO_NONE => 0;
# spent 17µs making 1 call to Spreadsheet::ParseExcel::BEGIN@66 # spent 12µs making 1 call to constant::import
67211µs230µs
# spent 16µs (3+13) within Spreadsheet::ParseExcel::BEGIN@67 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 67
use constant MS_BIFF_CRYPTO_XOR => 1;
# spent 16µs making 1 call to Spreadsheet::ParseExcel::BEGIN@67 # spent 13µs making 1 call to constant::import
68215µs227µs
# spent 15µs (3+12) within Spreadsheet::ParseExcel::BEGIN@68 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 68
use constant MS_BIFF_CRYPTO_RC4 => 2;
# spent 15µs making 1 call to Spreadsheet::ParseExcel::BEGIN@68 # spent 12µs making 1 call to constant::import
69
70212µs230µs
# spent 16µs (3+14) within Spreadsheet::ParseExcel::BEGIN@70 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 70
use constant sizeof_BIFF_8_FILEPASS => ( 6 + 3 * 16 );
# spent 16µs making 1 call to Spreadsheet::ParseExcel::BEGIN@70 # spent 14µs making 1 call to constant::import
71
72216µs226µs
# spent 15µs (3+12) within Spreadsheet::ParseExcel::BEGIN@72 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 72
use constant REKEY_BLOCK => 0x400;
# spent 15µs making 1 call to Spreadsheet::ParseExcel::BEGIN@72 # spent 12µs making 1 call to constant::import
73
74# Error code for some of the common parsing errors.
75212µs230µs
# spent 17µs (3+14) within Spreadsheet::ParseExcel::BEGIN@75 which was called: # once (3µs+14µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 75
use constant ErrorNone => 0;
# spent 17µs making 1 call to Spreadsheet::ParseExcel::BEGIN@75 # spent 14µs making 1 call to constant::import
76212µs234µs
# spent 18µs (3+15) within Spreadsheet::ParseExcel::BEGIN@76 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 76
use constant ErrorNoFile => 1;
# spent 18µs making 1 call to Spreadsheet::ParseExcel::BEGIN@76 # spent 15µs making 1 call to constant::import
77211µs229µs
# spent 16µs (3+13) within Spreadsheet::ParseExcel::BEGIN@77 which was called: # once (3µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 77
use constant ErrorNoExcelData => 2;
# spent 16µs making 1 call to Spreadsheet::ParseExcel::BEGIN@77 # spent 13µs making 1 call to constant::import
78211µs227µs
# spent 15µs (3+12) within Spreadsheet::ParseExcel::BEGIN@78 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 78
use constant ErrorFileEncrypted => 3;
# spent 15µs making 1 call to Spreadsheet::ParseExcel::BEGIN@78 # spent 12µs making 1 call to constant::import
79
80# Color index for the 'auto' color
8126.05ms227µs
# spent 15µs (3+12) within Spreadsheet::ParseExcel::BEGIN@81 which was called: # once (3µs+12µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 81
use constant AutoColor => 64;
# spent 15µs making 1 call to Spreadsheet::ParseExcel::BEGIN@81 # spent 12µs making 1 call to constant::import
82
8312µsour %error_strings = (
84 ErrorNone, '', # 0
85 ErrorNoFile, 'File not found', # 1
86 ErrorNoExcelData, 'No Excel data found in file', # 2
87 ErrorFileEncrypted, 'File is encrypted', # 3
88
89);
90
91
92116µsour %ProcTbl = (
93
94 #Develpers' Kit P291
95 0x14 => \&_subHeader, # Header
96 0x15 => \&_subFooter, # Footer
97 0x18 => \&_subName, # NAME(?)
98 0x1A => \&_subVPageBreak, # Vertical Page Break
99 0x1B => \&_subHPageBreak, # Horizontal Page Break
100 0x22 => \&_subFlg1904, # 1904 Flag
101 0x26 => \&_subMargin, # Left Margin
102 0x27 => \&_subMargin, # Right Margin
103 0x28 => \&_subMargin, # Top Margin
104 0x29 => \&_subMargin, # Bottom Margin
105 0x2A => \&_subPrintHeaders, # Print Headers
106 0x2B => \&_subPrintGridlines, # Print Gridlines
107 0x3C => \&_subContinue, # Continue
108 0x3D => \&_subWindow1, # Window1
109 0x43 => \&_subXF, # XF for Excel < 4.
110 0x0443 => \&_subXF, # XF for Excel = 4.
111 0x862 => \&_subSheetLayout, # Sheet Layout
112 0x1B8 => \&_subHyperlink, # HYPERLINK
113
114 #Develpers' Kit P292
115 0x55 => \&_subDefColWidth, # Consider
116 0x5C => \&_subWriteAccess, # WRITEACCESS
117 0x7D => \&_subColInfo, # Colinfo
118 0x7E => \&_subRK, # RK
119 0x81 => \&_subWSBOOL, # WSBOOL
120 0x83 => \&_subHcenter, # HCENTER
121 0x84 => \&_subVcenter, # VCENTER
122 0x85 => \&_subBoundSheet, # BoundSheet
123
124 0x92 => \&_subPalette, # Palette, fgp
125
126 0x99 => \&_subStandardWidth, # Standard Col
127
128 #Develpers' Kit P293
129 0xA1 => \&_subSETUP, # SETUP
130 0xBD => \&_subMulRK, # MULRK
131 0xBE => \&_subMulBlank, # MULBLANK
132 0xD6 => \&_subRString, # RString
133
134 #Develpers' Kit P294
135 0xE0 => \&_subXF, # ExTended Format
136 0xE5 => \&_subMergeArea, # MergeArea (Not Documented)
137 0xFC => \&_subSST, # Shared String Table
138 0xFD => \&_subLabelSST, # Label SST
139
140 #Develpers' Kit P295
141 0x201 => \&_subBlank, # Blank
142
143 0x202 => \&_subInteger, # Integer(Not Documented)
144 0x203 => \&_subNumber, # Number
145 0x204 => \&_subLabel, # Label
146 0x205 => \&_subBoolErr, # BoolErr
147 0x207 => \&_subString, # STRING
148 0x208 => \&_subRow, # RowData
149 0x221 => \&_subArray, # Array (Consider)
150 0x225 => \&_subDefaultRowHeight, # Consider
151
152 0x31 => \&_subFont, # Font
153 0x231 => \&_subFont, # Font
154
155 0x27E => \&_subRK, # RK
156 0x41E => \&_subFormat, # Format
157
158 0x06 => \&_subFormula, # Formula
159 0x406 => \&_subFormula, # Formula
160
161 0x009 => \&_subBOF, # BOF(BIFF2)
162 0x209 => \&_subBOF, # BOF(BIFF3)
163 0x409 => \&_subBOF, # BOF(BIFF4)
164 0x809 => \&_subBOF, # BOF(BIFF5-8)
165);
166
167our $BIGENDIAN;
168our $PREFUNC;
169our $_use_perlio;
170
171#------------------------------------------------------------------------------
172# Spreadsheet::ParseExcel->new
173#------------------------------------------------------------------------------
174sub new {
175 my ( $class, %hParam ) = @_;
176
177 if ( not defined $_use_perlio ) {
178 if ( exists $Config{useperlio}
179 && defined $Config{useperlio}
180 && $Config{useperlio} eq "define" )
181 {
182 $_use_perlio = 1;
183 }
184 else {
185 $_use_perlio = 0;
186 require IO::Scalar;
187 import IO::Scalar;
188 }
189 }
190
191 # Check ENDIAN(Little: Intel etc. BIG: Sparc etc)
192 $BIGENDIAN =
193 ( defined $hParam{Endian} ) ? $hParam{Endian}
19411µs : ( unpack( "H08", pack( "L", 2 ) ) eq '02000000' ) ? 0
# spent 1µs making 1 call to CORE::pack
195 : 1;
196 my $self = {};
197 bless $self, $class;
198
199 $self->{GetContent} = \&_subGetContent;
200
201 if ( $hParam{EventHandlers} ) {
202 $self->SetEventHandlers( $hParam{EventHandlers} );
203 }
204 else {
205 $self->SetEventHandlers( \%ProcTbl );
206 }
207 if ( $hParam{AddHandlers} ) {
208 foreach my $sKey ( keys( %{ $hParam{AddHandlers} } ) ) {
209 $self->SetEventHandler( $sKey, $hParam{AddHandlers}->{$sKey} );
210 }
211 }
212 $self->{CellHandler} = $hParam{CellHandler};
213 $self->{NotSetCell} = $hParam{NotSetCell};
214 $self->{Object} = $hParam{Object};
215
216
217 if ( defined $hParam{Password} ) {
218 $self->{Password} = $hParam{Password};
219 }
220 else {
221 $self->{Password} = 'VelvetSweatshop';
222 }
223
224 $self->{_error_status} = ErrorNone;
225 return $self;
226}
227
228#------------------------------------------------------------------------------
229# Spreadsheet::ParseExcel->SetEventHandler
230#------------------------------------------------------------------------------
231sub SetEventHandler {
232 my ( $self, $key, $sub_ref ) = @_;
233 $self->{FuncTbl}->{$key} = $sub_ref;
234}
235
236#------------------------------------------------------------------------------
237# Spreadsheet::ParseExcel->SetEventHandlers
238#------------------------------------------------------------------------------
239sub SetEventHandlers {
240 my ( $self, $rhTbl ) = @_;
241 $self->{FuncTbl} = undef;
242 foreach my $sKey ( keys %$rhTbl ) {
243 $self->{FuncTbl}->{$sKey} = $rhTbl->{$sKey};
244 }
245}
246
247#------------------------------------------------------------------------------
248# Decryption routines
249# based on sources of gnumeric (ms-biff.c ms-excel-read.c)
250#------------------------------------------------------------------------------
251sub md5state {
252 my ( $md5 ) = @_;
253 my $s = '';
254 for ( my $i = 0 ; $i < 4 ; $i++ ) {
255 my $v = $md5->{_state}[$i];
256 $s .= chr( $v & 0xff );
257 $s .= chr( ( $v >> 8 ) & 0xff );
258 $s .= chr( ( $v >> 16 ) & 0xff );
259 $s .= chr( ( $v >> 24 ) & 0xff );
260 }
261
262 return $s;
263}
264
265sub MakeKey {
266 my ( $block, $key, $valContext ) = @_;
267
268 my $pwarray = "\0" x 64;
269
270 substr( $pwarray, 0, 5 ) = substr( $valContext, 0, 5 );
271
272 substr( $pwarray, 5, 1 ) = chr( $block & 0xff );
273 substr( $pwarray, 6, 1 ) = chr( ( $block >> 8 ) & 0xff );
274 substr( $pwarray, 7, 1 ) = chr( ( $block >> 16 ) & 0xff );
275 substr( $pwarray, 8, 1 ) = chr( ( $block >> 24 ) & 0xff );
276
277 substr( $pwarray, 9, 1 ) = "\x80";
278 substr( $pwarray, 56, 1 ) = "\x48";
279
280 my $md5 = Digest::Perl::MD5->new();
281 $md5->add( $pwarray );
282
283 my $s = md5state( $md5 );
284
285 ${$key} = Crypt::RC4->new( $s );
286}
287
288sub VerifyPassword {
289 my ( $password, $docid, $salt_data, $hashedsalt_data, $valContext ) = @_;
290
291 my $pwarray = "\0" x 64;
292 my $i;
293 my $md5 = Digest::Perl::MD5->new();
294
295 for ( $i = 0 ; $i < length( $password ) ; $i++ ) {
296 my $o = ord( substr( $password, $i, 1 ) );
297 substr( $pwarray, 2 * $i, 1 ) = chr( $o & 0xff );
298 substr( $pwarray, 2 * $i + 1, 1 ) = chr( ( $o >> 8 ) & 0xff );
299 }
300 substr( $pwarray, 2 * $i, 1 ) = chr( 0x80 );
301 substr( $pwarray, 56, 1 ) = chr( ( $i << 4 ) & 0xff );
302
303 $md5->add( $pwarray );
304
305 my $mdContext1 = md5state( $md5 );
306
307 my $offset = 0;
308 my $keyoffset = 0;
309 my $tocopy = 5;
310
311 $md5->reset;
312
313 while ( $offset != 16 ) {
314 if ( ( 64 - $offset ) < 5 ) {
315 $tocopy = 64 - $offset;
316 }
317
318 substr( $pwarray, $offset, $tocopy ) =
319 substr( $mdContext1, $keyoffset, $tocopy );
320
321 $offset += $tocopy;
322
323 if ( $offset == 64 ) {
324 $md5->add( $pwarray );
325 $keyoffset = $tocopy;
326 $tocopy = 5 - $tocopy;
327 $offset = 0;
328 next;
329 }
330
331 $keyoffset = 0;
332 $tocopy = 5;
333 substr( $pwarray, $offset, 16 ) = $docid;
334 $offset += 16;
335 }
336
337 substr( $pwarray, 16, 1 ) = "\x80";
338 substr( $pwarray, 17, 47 ) = "\0" x 47;
339 substr( $pwarray, 56, 1 ) = "\x80";
340 substr( $pwarray, 57, 1 ) = "\x0a";
341
342 $md5->add( $pwarray );
343 ${$valContext} = md5state( $md5 );
344
345 my $key;
346
347 MakeKey( 0, \$key, ${$valContext} );
348
349 my $salt = $key->RC4( $salt_data );
350 my $hashedsalt = $key->RC4( $hashedsalt_data );
351
352 $salt .= "\x80" . "\0" x 47;
353
354 substr( $salt, 56, 1 ) = "\x80";
355
356 $md5->reset;
357 $md5->add( $salt );
358 my $mdContext2 = md5state( $md5 );
359
360 return ( $mdContext2 eq $hashedsalt );
361}
362
363sub SkipBytes {
364 my ( $q, $start, $count ) = @_;
365
366 my $scratch = "\0" x REKEY_BLOCK;
367 my $block;
368
369 $block = int( ( $start + $count ) / REKEY_BLOCK );
370
371 if ( $block != $q->{block} ) {
372 MakeKey( $q->{block} = $block, \$q->{rc4_key}, $q->{md5_ctxt} );
373 $count = ( $start + $count ) % REKEY_BLOCK;
374 }
375
376 $q->{rc4_key}->RC4( substr( $scratch, 0, $count ) );
377
378 return 1;
379}
380
381sub SetDecrypt {
382 my ( $q, $version, $password ) = @_;
383
384 if ( $q->{opcode} != 0x2f ) {
385 return 0;
386 }
387
388 if ( $password eq '' ) {
389 return 0;
390 }
391
392 # TODO old versions decryption
393 #if (version < MS_BIFF_V8 || q->data[0] == 0)
394 # return ms_biff_pre_biff8_query_set_decrypt (q, password);
395
396 if ( $q->{length} != sizeof_BIFF_8_FILEPASS ) {
397 return 0;
398 }
399
400 unless (
401 VerifyPassword(
402 $password,
403 substr( $q->{data}, 6, 16 ),
404 substr( $q->{data}, 22, 16 ),
405 substr( $q->{data}, 38, 16 ),
406 \$q->{md5_ctxt}
407 )
408 )
409 {
410 return 0;
411 }
412
413 $q->{encryption} = MS_BIFF_CRYPTO_RC4;
414 $q->{block} = -1;
415
416 # The first record after FILEPASS seems to be unencrypted
417 $q->{dont_decrypt_next_record} = 1;
418
419 # Pretend to decrypt the entire stream up till this point, it was
420 # encrypted, but do it anyway to keep the rc4 state in sync
421
422 SkipBytes( $q, 0, $q->{streamPos} );
423
424 return 1;
425}
426
427sub InitStream {
428 my ( $stream_data ) = @_;
429 my %q;
430
431 $q{opcode} = 0;
432 $q{length} = 0;
433 $q{data} = '';
434
435 $q{stream} = $stream_data; # data stream
436 $q{streamLen} = length( $stream_data ); # stream length
437 $q{streamPos} = 0; # stream position
438
439 $q{encryption} = 0;
440 $q{xor_key} = '';
441 $q{rc4_key} = '';
442 $q{md5_ctxt} = '';
443 $q{block} = 0;
444 $q{dont_decrypt_next_record} = 0;
445
446 return \%q;
447}
448
449sub QueryNext {
450 my ( $q ) = @_;
451
452 if ( $q->{streamPos} + 4 >= $q->{streamLen} ) {
453 return 0;
454 }
455
456 my $data = substr( $q->{stream}, $q->{streamPos}, 4 );
457
458 ( $q->{opcode}, $q->{length} ) = unpack( 'v2', $data );
459
460 # No biff record should be larger than around 20,000.
461 if ( $q->{length} >= 20000 ) {
462 return 0;
463 }
464
465 if ( $q->{length} > 0 ) {
466 $q->{data} = substr( $q->{stream}, $q->{streamPos} + 4, $q->{length} );
467 }
468 else {
469 $q->{data} = undef;
470 $q->{dont_decrypt_next_record} = 1;
471 }
472
473 if ( $q->{encryption} == MS_BIFF_CRYPTO_RC4 ) {
474 if ( $q->{dont_decrypt_next_record} ) {
475 SkipBytes( $q, $q->{streamPos}, 4 + $q->{length} );
476 $q->{dont_decrypt_next_record} = 0;
477 }
478 else {
479 my $pos = $q->{streamPos};
480 my $data = $q->{data};
481 my $len = $q->{length};
482 my $res = '';
483
484 # Pretend to decrypt header.
485 SkipBytes( $q, $pos, 4 );
486 $pos += 4;
487
488 while ( $q->{block} != int( ( $pos + $len ) / REKEY_BLOCK ) ) {
489 my $step = REKEY_BLOCK - ( $pos % REKEY_BLOCK );
490 $res .= $q->{rc4_key}->RC4( substr( $data, 0, $step ) );
491 $data = substr( $data, $step );
492 $pos += $step;
493 $len -= $step;
494 MakeKey( ++$q->{block}, \$q->{rc4_key}, $q->{md5_ctxt} );
495 }
496
497 $res .= $q->{rc4_key}->RC4( substr( $data, 0, $len ) );
498 $q->{data} = $res;
499 }
500 }
501 elsif ( $q->{encryption} == MS_BIFF_CRYPTO_XOR ) {
502
503 # not implemented
504 return 0;
505 }
506 elsif ( $q->{encryption} == MS_BIFF_CRYPTO_NONE ) {
507
508 }
509
510 $q->{streamPos} += 4 + $q->{length};
511
512 return 1;
513}
514
515###############################################################################
516#
517# Parse()
518#
519# Parse the Excel file and convert it into a tree of objects..
520#
521sub parse {
522
523 my ( $self, $source, $formatter ) = @_;
524
525 my $workbook = Spreadsheet::ParseExcel::Workbook->new();
526 $currentbook = $workbook;
527 $workbook->{SheetCount} = 0;
528 $workbook->{CellHandler} = $self->{CellHandler};
529 $workbook->{NotSetCell} = $self->{NotSetCell};
530 $workbook->{Object} = $self->{Object};
531 $workbook->{aColor} = [ @aColor ];
532
533 my ( $biff_data, $data_length ) = $self->_get_content( $source, $workbook );
534 return undef if not $biff_data;
535
536 if ( $formatter ) {
537 $workbook->{FmtClass} = $formatter;
538 }
539 else {
540 $workbook->{FmtClass} = Spreadsheet::ParseExcel::FmtDefault->new();
541 }
542
543 # Parse the BIFF data.
544 my $stream = InitStream( $biff_data );
545
546 while ( QueryNext( $stream ) ) {
547
548 my $record = $stream->{opcode};
549 my $record_length = $stream->{length};
550
551 my $record_header = $stream->{data};
552
553 # If the file contains a FILEPASS record we assume that it is encrypted
554 # and cannot be parsed.
555 if ( $record == 0x002F ) {
556 unless ( SetDecrypt( $stream, '', $self->{Password} ) ) {
557 $self->{_error_status} = ErrorFileEncrypted;
558 return undef;
559 }
560 }
561
562 # Special case of a formula String with no string.
563 if ( $workbook->{_PrevPos}
564 && ( defined $self->{FuncTbl}->{$record} )
565 && ( $record != 0x207 ) )
566 {
567 my $iPos = $workbook->{_PrevPos};
568 $workbook->{_PrevPos} = undef;
569
570 my ( $row, $col, $format_index ) = @$iPos;
571 _NewCell(
572 $workbook, $row, $col,
573 Kind => 'Formula String',
574 Val => '',
575 FormatNo => $format_index,
576 Format => $workbook->{Format}[$format_index],
577 Numeric => 0,
578 Code => undef,
579 Book => $workbook,
580 );
581 }
582
583 # If the BIFF record matches 0x0*09 then it is a BOF record.
584 # We reset the _skip_chart flag to ensure we check the sheet type.
585 if ( ( $record & 0xF0FF ) == 0x09 ) {
586 $workbook->{_skip_chart} = 0;
587 }
588
589 if ( defined $self->{FuncTbl}->{$record} && !$workbook->{_skip_chart} )
590 {
591 $self->{FuncTbl}->{$record}
592 ->( $workbook, $record, $record_length, $record_header );
593 }
594
595 $PREFUNC = $record if ( $record != 0x3C ); #Not Continue
596
597 last if defined $workbook->{_ParseAbort};
598 }
599
600 foreach my $worksheet (@{$workbook->{Worksheet}} ) {
601 # Install hyperlinks into each cell
602 # Range is undocumented for user; allows reuse of data
603
604 if ($worksheet->{HyperLinks}) {
605 foreach my $link (@{$worksheet->{HyperLinks}}) {
606 for( my $row = $link->[3]; $row <= $link->[4]; $row++ ) {
607 for( my $col = $link->[5]; $col <= $link->[6]; $col++ ) {
608 $worksheet->{Cells}[$row][$col]{Hyperlink} = $link;
609 }
610 }
611 }
612 }
613 }
614 return $workbook;
615}
616
617###############################################################################
618#
619# _get_content()
620#
621# Get the Excel BIFF content from the file or filehandle.
622#
623sub _get_content {
624
625 my ( $self, $source, $workbook ) = @_;
626 my ( $biff_data, $data_length );
627
628 # Reset the error status in case method is called more than once.
629 $self->{_error_status} = ErrorNone;
630
631 my $ref = ref($source);
632
633 if ( $ref ) {
634 if ( $ref eq 'SCALAR' ) {
635
636 # Specified by a scalar buffer.
637 ( $biff_data, $data_length ) = $self->{GetContent}->( $source );
638
639 }
640 elsif ( $ref eq 'ARRAY' ) {
641
642 # Specified by file content
643 $workbook->{File} = undef;
644 my $sData = join( '', @$source );
645 ( $biff_data, $data_length ) = $self->{GetContent}->( \$sData );
646 }
647 else {
648
649 # Assume filehandle
650
651 # For CGI.pm (Light FileHandle)
652 my $sBuff = '';
653 if ( eval { binmode( $source ) } ) {
654 my $sWk;
655
656 while ( read( $source, $sWk, 4096 ) ) {
657 $sBuff .= $sWk;
658 }
659 }
660 else {
661
662 # Assume IO::Wrap or some other filehandle-like OO-only object
663 my $sWk;
664
665 # IO::Wrap does not implement binmode
666 eval { $source->binmode() };
667
668 while ( $source->read( $sWk, 4096 ) ) {
669 $sBuff .= $sWk;
670 }
671 }
672
673 ( $biff_data, $data_length ) = $self->{GetContent}->( \$sBuff );
674
675 }
676 }
677 else {
678
679 # Specified by filename .
680 $workbook->{File} = $source;
681
682 if ( !-e $source ) {
683 $self->{_error_status} = ErrorNoFile;
684 return undef;
685 }
686
687 ( $biff_data, $data_length ) = $self->{GetContent}->( $source );
688 }
689
690 # If the read was successful return the data.
691 if ( $data_length ) {
692 return ( $biff_data, $data_length );
693 }
694 else {
695 $self->{_error_status} = ErrorNoExcelData;
696 return undef;
697 }
698
699}
700
701#------------------------------------------------------------------------------
702# _subGetContent (for Spreadsheet::ParseExcel)
703#------------------------------------------------------------------------------
704sub _subGetContent {
705 my ( $sFile ) = @_;
706
707 my $oOl = OLE::Storage_Lite->new( $sFile );
708 return ( undef, undef ) unless ( $oOl );
709 my @aRes = $oOl->getPpsSearch(
710 [
711 OLE::Storage_Lite::Asc2Ucs( 'Book' ),
712 OLE::Storage_Lite::Asc2Ucs( 'Workbook' )
713 ],
714 1, 1
715 );
716 return ( undef, undef ) if ( $#aRes < 0 );
717
718 #Hack from Herbert
719 if ( $aRes[0]->{Data} ) {
720 return ( $aRes[0]->{Data}, length( $aRes[0]->{Data} ) );
721 }
722
723 #Same as OLE::Storage_Lite
724 my $oIo;
725
726 #1. $sFile is Ref of scalar
727 if ( ref( $sFile ) eq 'SCALAR' ) {
728 if ( $_use_perlio ) {
729 open $oIo, "<", \$sFile;
730 }
731 else {
732 $oIo = IO::Scalar->new;
733 $oIo->open( $sFile );
734 }
735 }
736
737 #2. $sFile is a IO::Handle object
738 elsif ( UNIVERSAL::isa( $sFile, 'IO::Handle' ) ) {
739 $oIo = $sFile;
740 binmode( $oIo );
741 }
742
743 #3. $sFile is a simple filename string
744 elsif ( !ref( $sFile ) ) {
745 $oIo = IO::File->new;
746 $oIo->open( "<$sFile" ) || return undef;
747 binmode( $oIo );
748 }
749 my $sWk;
750 my $sBuff = '';
751
752 while ( $oIo->read( $sWk, 4096 ) ) { #4_096 has no special meanings
753 $sBuff .= $sWk;
754 }
755 $oIo->close();
756
757 #Not Excel file (simple method)
758 return ( undef, undef ) if ( substr( $sBuff, 0, 1 ) ne "\x09" );
759 return ( $sBuff, length( $sBuff ) );
760}
761
762#------------------------------------------------------------------------------
763# _subBOF (for Spreadsheet::ParseExcel) Developers' Kit : P303
764#------------------------------------------------------------------------------
765sub _subBOF {
766 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
767 my ( $iVer, $iDt ) = unpack( "v2", $sWk );
768
769 #Workbook Global
770 if ( $iDt == 0x0005 ) {
771 $oBook->{Version} = unpack( "v", $sWk );
772 $oBook->{BIFFVersion} =
773 ( $oBook->{Version} == verExcel95 ) ? verBIFF5 : verBIFF8;
774 $oBook->{_CurSheet} = undef;
775 $oBook->{_CurSheet_} = -1;
776 }
777
778 #Worksheet or Dialogsheet
779 elsif ( $iDt != 0x0020 ) { #if($iDt == 0x0010)
780 if ( defined $oBook->{_CurSheet_} ) {
781 $oBook->{_CurSheet} = $oBook->{_CurSheet_} + 1;
782 $oBook->{_CurSheet_}++;
783
784 (
785 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{SheetVersion},
786 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{SheetType},
787 )
788 = unpack( "v2", $sWk )
789 if ( length( $sWk ) > 4 );
790 }
791 else {
792 $oBook->{BIFFVersion} = int( $bOp / 0x100 );
793 if ( ( $oBook->{BIFFVersion} == verBIFF2 )
794 || ( $oBook->{BIFFVersion} == verBIFF3 )
795 || ( $oBook->{BIFFVersion} == verBIFF4 ) )
796 {
797 $oBook->{Version} = $oBook->{BIFFVersion};
798 $oBook->{_CurSheet} = 0;
799 $oBook->{Worksheet}[ $oBook->{SheetCount} ] =
800 Spreadsheet::ParseExcel::Worksheet->new(
801 _Name => '',
802 Name => '',
803 _Book => $oBook,
804 _SheetNo => $oBook->{SheetCount},
805 );
806 $oBook->{SheetCount}++;
807 }
808 }
809 }
810 else {
811
812 # Set flag to ignore all chart records until we reach another BOF.
813 $oBook->{_skip_chart} = 1;
814 }
815}
816
817#------------------------------------------------------------------------------
818# _subBlank (for Spreadsheet::ParseExcel) DK:P303
819#------------------------------------------------------------------------------
820sub _subBlank {
821 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
822 my ( $iR, $iC, $iF ) = unpack( "v3", $sWk );
823 _NewCell(
824 $oBook, $iR, $iC,
825 Kind => 'BLANK',
826 Val => '',
827 FormatNo => $iF,
828 Format => $oBook->{Format}[$iF],
829 Numeric => 0,
830 Code => undef,
831 Book => $oBook,
832 );
833
834 #2.MaxRow, MaxCol, MinRow, MinCol
835 _SetDimension( $oBook, $iR, $iC, $iC );
836}
837
838#------------------------------------------------------------------------------
839# _subInteger (for Spreadsheet::ParseExcel) Not in DK
840#------------------------------------------------------------------------------
841sub _subInteger {
842 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
843 my ( $iR, $iC, $iF, $sTxt, $sDum );
844
845 ( $iR, $iC, $iF, $sDum, $sTxt ) = unpack( "v3cv", $sWk );
846 _NewCell(
847 $oBook, $iR, $iC,
848 Kind => 'INTEGER',
849 Val => $sTxt,
850 FormatNo => $iF,
851 Format => $oBook->{Format}[$iF],
852 Numeric => 0,
853 Code => undef,
854 Book => $oBook,
855 );
856
857 #2.MaxRow, MaxCol, MinRow, MinCol
858 _SetDimension( $oBook, $iR, $iC, $iC );
859}
860
861#------------------------------------------------------------------------------
862# _subNumber (for Spreadsheet::ParseExcel) : DK: P354
863#------------------------------------------------------------------------------
864sub _subNumber {
865 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
866
867 my ( $iR, $iC, $iF ) = unpack( "v3", $sWk );
868 my $dVal = _convDval( substr( $sWk, 6, 8 ) );
869 _NewCell(
870 $oBook, $iR, $iC,
871 Kind => 'Number',
872 Val => $dVal,
873 FormatNo => $iF,
874 Format => $oBook->{Format}[$iF],
875 Numeric => 1,
876 Code => undef,
877 Book => $oBook,
878 );
879
880 #2.MaxRow, MaxCol, MinRow, MinCol
881 _SetDimension( $oBook, $iR, $iC, $iC );
882}
883
884#------------------------------------------------------------------------------
885# _convDval (for Spreadsheet::ParseExcel)
886#------------------------------------------------------------------------------
887sub _convDval {
888 my ( $sWk ) = @_;
889 return
890 unpack( "d",
891 ( $BIGENDIAN ) ? pack( "c8", reverse( unpack( "c8", $sWk ) ) ) : $sWk );
892}
893
894#------------------------------------------------------------------------------
895# _subRString (for Spreadsheet::ParseExcel) DK:P405
896#------------------------------------------------------------------------------
897sub _subRString {
898 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
899 my ( $iR, $iC, $iF, $iL, $sTxt );
900 ( $iR, $iC, $iF, $iL ) = unpack( "v4", $sWk );
901 $sTxt = substr( $sWk, 8, $iL );
902
903 #Has STRUN
904 if ( length( $sWk ) > ( 8 + $iL ) ) {
905 _NewCell(
906 $oBook, $iR, $iC,
907 Kind => 'RString',
908 Val => $sTxt,
909 FormatNo => $iF,
910 Format => $oBook->{Format}[$iF],
911 Numeric => 0,
912 Code => '_native_', #undef,
913 Book => $oBook,
914 Rich => substr( $sWk, ( 8 + $iL ) + 1 ),
915 );
916 }
917 else {
918 _NewCell(
919 $oBook, $iR, $iC,
920 Kind => 'RString',
921 Val => $sTxt,
922 FormatNo => $iF,
923 Format => $oBook->{Format}[$iF],
924 Numeric => 0,
925 Code => '_native_',
926 Book => $oBook,
927 );
928 }
929
930 #2.MaxRow, MaxCol, MinRow, MinCol
931 _SetDimension( $oBook, $iR, $iC, $iC );
932}
933
934#------------------------------------------------------------------------------
935# _subBoolErr (for Spreadsheet::ParseExcel) DK:P306
936#------------------------------------------------------------------------------
937sub _subBoolErr {
938 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
939 my ( $iR, $iC, $iF ) = unpack( "v3", $sWk );
940 my ( $iVal, $iFlg ) = unpack( "cc", substr( $sWk, 6, 2 ) );
941 my $sTxt = DecodeBoolErr( $iVal, $iFlg );
942
943 _NewCell(
944 $oBook, $iR, $iC,
945 Kind => 'BoolError',
946 Val => $sTxt,
947 FormatNo => $iF,
948 Format => $oBook->{Format}[$iF],
949 Numeric => 0,
950 Code => undef,
951 Book => $oBook,
952 );
953
954 #2.MaxRow, MaxCol, MinRow, MinCol
955 _SetDimension( $oBook, $iR, $iC, $iC );
956}
957
958###############################################################################
959#
960# _subRK()
961#
962# Decode the RK BIFF record.
963#
964sub _subRK {
965
966 my ( $workbook, $biff_number, $length, $data ) = @_;
967
968 my ( $row, $col, $format_index, $rk_number ) = unpack( 'vvvV', $data );
969
970 my $number = _decode_rk_number( $rk_number );
971
972 _NewCell(
973 $workbook, $row, $col,
974 Kind => 'RK',
975 Val => $number,
976 FormatNo => $format_index,
977 Format => $workbook->{Format}->[$format_index],
978 Numeric => 1,
979 Code => undef,
980 Book => $workbook,
981 );
982
983 # Store the max and min row/col values.
984 _SetDimension( $workbook, $row, $col, $col );
985}
986
987#------------------------------------------------------------------------------
988# _subArray (for Spreadsheet::ParseExcel) DK:P297
989#------------------------------------------------------------------------------
990sub _subArray {
991 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
992 my ( $iBR, $iER, $iBC, $iEC ) = unpack( "v2c2", $sWk );
993
994}
995
996#------------------------------------------------------------------------------
997# _subFormula (for Spreadsheet::ParseExcel) DK:P336
998#------------------------------------------------------------------------------
999sub _subFormula {
1000 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1001 my ( $iR, $iC, $iF ) = unpack( "v3", $sWk );
1002
1003 my ( $iFlg ) = unpack( "v", substr( $sWk, 12, 2 ) );
1004 if ( $iFlg == 0xFFFF ) {
1005 my ( $iKind ) = unpack( "c", substr( $sWk, 6, 1 ) );
1006 my ( $iVal ) = unpack( "c", substr( $sWk, 8, 1 ) );
1007
1008 if ( ( $iKind == 1 ) or ( $iKind == 2 ) ) {
1009 my $sTxt =
1010 ( $iKind == 1 )
1011 ? DecodeBoolErr( $iVal, 0 )
1012 : DecodeBoolErr( $iVal, 1 );
1013 _NewCell(
1014 $oBook, $iR, $iC,
1015 Kind => 'Formula Bool',
1016 Val => $sTxt,
1017 FormatNo => $iF,
1018 Format => $oBook->{Format}[$iF],
1019 Numeric => 0,
1020 Code => undef,
1021 Book => $oBook,
1022 );
1023 }
1024 else { # Result (Reserve Only)
1025 $oBook->{_PrevPos} = [ $iR, $iC, $iF ];
1026 }
1027 }
1028 else {
1029 my $dVal = _convDval( substr( $sWk, 6, 8 ) );
1030 _NewCell(
1031 $oBook, $iR, $iC,
1032 Kind => 'Formula Number',
1033 Val => $dVal,
1034 FormatNo => $iF,
1035 Format => $oBook->{Format}[$iF],
1036 Numeric => 1,
1037 Code => undef,
1038 Book => $oBook,
1039 );
1040 }
1041
1042 #2.MaxRow, MaxCol, MinRow, MinCol
1043 _SetDimension( $oBook, $iR, $iC, $iC );
1044}
1045
1046#------------------------------------------------------------------------------
1047# _subString (for Spreadsheet::ParseExcel) DK:P414
1048#------------------------------------------------------------------------------
1049sub _subString {
1050 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1051
1052 #Position (not enough for ARRAY)
1053
1054 my $iPos = $oBook->{_PrevPos};
1055 return undef unless ( $iPos );
1056 $oBook->{_PrevPos} = undef;
1057 my ( $iR, $iC, $iF ) = @$iPos;
1058
1059 my ( $iLen, $sTxt, $sCode );
1060 if ( $oBook->{BIFFVersion} == verBIFF8 ) {
1061 my ( $raBuff, $iLen ) = _convBIFF8String( $oBook, $sWk, 1 );
1062 $sTxt = $raBuff->[0];
1063 $sCode = ( $raBuff->[1] ) ? 'ucs2' : undef;
1064 }
1065 elsif ( $oBook->{BIFFVersion} == verBIFF5 ) {
1066 $sCode = '_native_';
1067 $iLen = unpack( "v", $sWk );
1068 $sTxt = substr( $sWk, 2, $iLen );
1069 }
1070 else {
1071 $sCode = '_native_';
1072 $iLen = unpack( "c", $sWk );
1073 $sTxt = substr( $sWk, 1, $iLen );
1074 }
1075 _NewCell(
1076 $oBook, $iR, $iC,
1077 Kind => 'String',
1078 Val => $sTxt,
1079 FormatNo => $iF,
1080 Format => $oBook->{Format}[$iF],
1081 Numeric => 0,
1082 Code => $sCode,
1083 Book => $oBook,
1084 );
1085
1086 #2.MaxRow, MaxCol, MinRow, MinCol
1087 _SetDimension( $oBook, $iR, $iC, $iC );
1088}
1089
1090#------------------------------------------------------------------------------
1091# _subLabel (for Spreadsheet::ParseExcel) DK:P344
1092#------------------------------------------------------------------------------
1093sub _subLabel {
1094 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1095 my ( $iR, $iC, $iF ) = unpack( "v3", $sWk );
1096 my ( $sLbl, $sCode );
1097
1098 #BIFF8
1099 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
1100 my ( $raBuff, $iLen, $iStPos, $iLenS ) =
1101 _convBIFF8String( $oBook, substr( $sWk, 6 ), 1 );
1102 $sLbl = $raBuff->[0];
1103 $sCode = ( $raBuff->[1] ) ? 'ucs2' : undef;
1104 }
1105
1106 #Before BIFF8
1107 else {
1108 $sLbl = substr( $sWk, 8 );
1109 $sCode = '_native_';
1110 }
1111 _NewCell(
1112 $oBook, $iR, $iC,
1113 Kind => 'Label',
1114 Val => $sLbl,
1115 FormatNo => $iF,
1116 Format => $oBook->{Format}[$iF],
1117 Numeric => 0,
1118 Code => $sCode,
1119 Book => $oBook,
1120 );
1121
1122 #2.MaxRow, MaxCol, MinRow, MinCol
1123 _SetDimension( $oBook, $iR, $iC, $iC );
1124}
1125
1126###############################################################################
1127#
1128# _subMulRK()
1129#
1130# Decode the Multiple RK BIFF record.
1131#
1132sub _subMulRK {
1133
1134 my ( $workbook, $biff_number, $length, $data ) = @_;
1135
1136 # JMN: I don't know why this is here.
1137 return if $workbook->{SheetCount} <= 0;
1138
1139 my ( $row, $first_col ) = unpack( "v2", $data );
1140 my $last_col = unpack( "v", substr( $data, length( $data ) - 2, 2 ) );
1141
1142 # Iterate over the RK array and decode the data.
1143 my $pos = 4;
1144 for my $col ( $first_col .. $last_col ) {
1145
1146 my $data = substr( $data, $pos, 6 );
1147 my ( $format_index, $rk_number ) = unpack 'vV', $data;
1148 my $number = _decode_rk_number( $rk_number );
1149
1150 _NewCell(
1151 $workbook, $row, $col,
1152 Kind => 'MulRK',
1153 Val => $number,
1154 FormatNo => $format_index,
1155 Format => $workbook->{Format}->[$format_index],
1156 Numeric => 1,
1157 Code => undef,
1158 Book => $workbook,
1159 );
1160 $pos += 6;
1161 }
1162
1163 # Store the max and min row/col values.
1164 _SetDimension( $workbook, $row, $first_col, $last_col );
1165}
1166
1167#------------------------------------------------------------------------------
1168# _subMulBlank (for Spreadsheet::ParseExcel) DK:P349
1169#------------------------------------------------------------------------------
1170sub _subMulBlank {
1171 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1172 my ( $iR, $iSc ) = unpack( "v2", $sWk );
1173 my $iEc = unpack( "v", substr( $sWk, length( $sWk ) - 2, 2 ) );
1174 my $iPos = 4;
1175 for ( my $iC = $iSc ; $iC <= $iEc ; $iC++ ) {
1176 my $iF = unpack( 'v', substr( $sWk, $iPos, 2 ) );
1177 _NewCell(
1178 $oBook, $iR, $iC,
1179 Kind => 'MulBlank',
1180 Val => '',
1181 FormatNo => $iF,
1182 Format => $oBook->{Format}[$iF],
1183 Numeric => 0,
1184 Code => undef,
1185 Book => $oBook,
1186 );
1187 $iPos += 2;
1188 }
1189
1190 #2.MaxRow, MaxCol, MinRow, MinCol
1191 _SetDimension( $oBook, $iR, $iSc, $iEc );
1192}
1193
1194#------------------------------------------------------------------------------
1195# _subLabelSST (for Spreadsheet::ParseExcel) DK: P345
1196#------------------------------------------------------------------------------
1197sub _subLabelSST {
1198 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1199 my ( $iR, $iC, $iF, $iIdx ) = unpack( 'v3V', $sWk );
1200
1201 _NewCell(
1202 $oBook, $iR, $iC,
1203 Kind => 'PackedIdx',
1204 Val => $oBook->{PkgStr}[$iIdx]->{Text},
1205 FormatNo => $iF,
1206 Format => $oBook->{Format}[$iF],
1207 Numeric => 0,
1208 Code => ( $oBook->{PkgStr}[$iIdx]->{Unicode} ) ? 'ucs2' : undef,
1209 Book => $oBook,
1210 Rich => $oBook->{PkgStr}[$iIdx]->{Rich},
1211 );
1212
1213 #2.MaxRow, MaxCol, MinRow, MinCol
1214 _SetDimension( $oBook, $iR, $iC, $iC );
1215}
1216
1217#------------------------------------------------------------------------------
1218# _subFlg1904 (for Spreadsheet::ParseExcel) DK:P296
1219#------------------------------------------------------------------------------
1220sub _subFlg1904 {
1221 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1222 $oBook->{Flg1904} = unpack( "v", $sWk );
1223}
1224
1225#------------------------------------------------------------------------------
1226# _subRow (for Spreadsheet::ParseExcel) DK:P403
1227#------------------------------------------------------------------------------
1228sub _subRow {
1229 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1230 return undef unless ( defined $oBook->{_CurSheet} );
1231
1232 #0. Get Worksheet info (MaxRow, MaxCol, MinRow, MinCol)
1233 my ( $iR, $iSc, $iEc, $iHght, $undef1, $undef2, $iGr, $iXf ) =
1234 unpack( "v8", $sWk );
1235 $iEc--;
1236
1237 if ( $iGr & 0x20 ) {
1238 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{RowHidden}[$iR] = 1;
1239 }
1240
1241 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{RowHeight}[$iR] = $iHght / 20;
1242
1243 #2.MaxRow, MaxCol, MinRow, MinCol
1244 _SetDimension( $oBook, $iR, $iSc, $iEc );
1245}
1246
1247#------------------------------------------------------------------------------
1248# _SetDimension (for Spreadsheet::ParseExcel)
1249#------------------------------------------------------------------------------
1250sub _SetDimension {
1251 my ( $oBook, $iR, $iSc, $iEc ) = @_;
1252 return undef unless ( defined $oBook->{_CurSheet} );
1253
1254 #2.MaxRow, MaxCol, MinRow, MinCol
1255 #2.1 MinRow
1256 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MinRow} = $iR
1257 unless ( defined $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MinRow} )
1258 and ( $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MinRow} <= $iR );
1259
1260 #2.2 MaxRow
1261 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MaxRow} = $iR
1262 unless ( defined $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MaxRow} )
1263 and ( $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MaxRow} > $iR );
1264
1265 #2.3 MinCol
1266 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MinCol} = $iSc
1267 unless ( defined $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MinCol} )
1268 and ( $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MinCol} <= $iSc );
1269
1270 #2.4 MaxCol
1271 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MaxCol} = $iEc
1272 unless ( defined $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MaxCol} )
1273 and ( $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{MaxCol} > $iEc );
1274
1275}
1276
1277#------------------------------------------------------------------------------
1278# _subDefaultRowHeight (for Spreadsheet::ParseExcel) DK: P318
1279#------------------------------------------------------------------------------
1280sub _subDefaultRowHeight {
1281 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1282 return undef unless ( defined $oBook->{_CurSheet} );
1283
1284 #1. RowHeight
1285 my ( $iDum, $iHght ) = unpack( "v2", $sWk );
1286 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{DefRowHeight} = $iHght / 20;
1287
1288}
1289
1290#------------------------------------------------------------------------------
1291# _subStandardWidth(for Spreadsheet::ParseExcel) DK:P413
1292#------------------------------------------------------------------------------
1293sub _subStandardWidth {
1294 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1295 my $iW = unpack( "v", $sWk );
1296 $oBook->{StandardWidth} = _convert_col_width( $oBook, $iW );
1297}
1298
1299###############################################################################
1300#
1301# _subDefColWidth()
1302#
1303# Read the DEFCOLWIDTH Biff record. This gives the width in terms of chars
1304# and is different from the width in the COLINFO record.
1305#
1306sub _subDefColWidth {
1307
1308 my ( $self, $record, $length, $data ) = @_;
1309
1310 my $width = unpack 'v', $data;
1311
1312 # Adjustment for default Arial 10 width.
1313 $width = 8.43 if $width == 8;
1314
1315 $self->{Worksheet}->[ $self->{_CurSheet} ]->{DefColWidth} = $width;
1316}
1317
1318###############################################################################
1319#
1320# _convert_col_width()
1321#
1322# Converts from the internal Excel column width units to user units seen in the
1323# interface. It is first necessary to convert the internal width to pixels and
1324# then to user units. The conversion is specific to a default font of Arial 10.
1325# TODO, the conversion should be extended to other fonts and sizes.
1326#
1327sub _convert_col_width {
1328
1329 my $self = shift;
1330 my $excel_width = shift;
1331
1332 # Convert from Excel units to pixels (rounded up).
1333 my $pixels = int( 0.5 + $excel_width * 7 / 256 );
1334
1335 # Convert from pixels to user units.
1336 # The conversion is different for columns <= 1 user unit (12 pixels).
1337 my $user_width;
1338 if ( $pixels <= 12 ) {
1339 $user_width = $pixels / 12;
1340 }
1341 else {
1342 $user_width = ( $pixels - 5 ) / 7;
1343 }
1344
1345 # Round up to 2 decimal places.
1346 $user_width = int( $user_width * 100 + 0.5 ) / 100;
1347
1348 return $user_width;
1349}
1350
1351#------------------------------------------------------------------------------
1352# _subColInfo (for Spreadsheet::ParseExcel) DK:P309
1353#------------------------------------------------------------------------------
1354sub _subColInfo {
1355
1356 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1357
1358 return undef unless defined $oBook->{_CurSheet};
1359
1360 my ( $iSc, $iEc, $iW, $iXF, $iGr ) = unpack( "v5", $sWk );
1361
1362 for ( my $i = $iSc ; $i <= $iEc ; $i++ ) {
1363
1364 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{ColWidth}[$i] =
1365 _convert_col_width( $oBook, $iW );
1366
1367 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{ColFmtNo}[$i] = $iXF;
1368
1369 if ( $iGr & 0x01 ) {
1370 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{ColHidden}[$i] = 1;
1371 }
1372 }
1373}
1374
1375#------------------------------------------------------------------------------
1376# _subWindow1 Window information P 273
1377#------------------------------------------------------------------------------
1378sub _subWindow1 {
1379 my ( $workbook, $op, $len, $wk ) = @_;
1380
1381 return if ( $workbook->{BIFFVersion} <= verBIFF4() );
1382
1383 my (
1384 $hpos, $vpos, $width,
1385 $height, $options, $active,
1386 $firsttab, $numselected, $tabbarwidth
1387 ) = unpack( "v9", $wk );
1388
1389 $workbook->{ActiveSheet} = $active;
1390}
1391
1392#------------------------------------------------------------------------------
1393# _subSheetLayout OpenOffice 5.96 (P207)
1394#------------------------------------------------------------------------------
1395sub _subSheetLayout {
1396 my ( $workbook, $op, $len, $wk ) = @_;
1397
1398 my @unused;
1399 (
1400 my $rc,
1401 @unused[ 1 .. 10 ],
1402 @unused[ 11 .. 14 ],
1403 my $color, @unused[ 15, 16 ]
1404 ) = unpack( "vC10C4vC2", $wk );
1405
1406 return unless ( $rc == 0x0862 );
1407
1408 $workbook->{Worksheet}[ $workbook->{_CurSheet} ]->{TabColor} = $color;
1409}
1410
1411#------------------------------------------------------------------------------
1412# _subHyperlink OpenOffice 5.96 (P182)
1413#
1414# Also see: http://msdn.microsoft.com/en-us/library/gg615407(v=office.14).aspx
1415#------------------------------------------------------------------------------
1416
1417# Helper: Extract a GID, returns as text string
1418
1419sub _getguid {
1420 my( $wk ) = @_;
1421 my( $text, $guidl, $guids1, $guids2, @guidb );
1422
1423 ( $guidl, $guids1, $guids2, @guidb[0..7] ) = unpack( 'Vv2C8', $wk );
1424
1425 $text = sprintf( '%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X', $guidl, $guids1, $guids2, @guidb);
1426 return $text;
1427}
1428
1429# Helper: Extract a counted (16-bit) unicode string, returns string,
1430# updates $offset
1431# $zterm == 1 if string is null-terminated.
1432# $bc if length is in bytes (not chars)
1433
1434sub _getustr {
1435 my( $wk, $offset, $zterm, $bc ) = @_;
1436
1437 my $len = unpack( 'V', substr( $wk, $offset ) );
1438 $offset += 4;
1439
1440 if( $bc ) {
1441 $len /= 2;
1442 }
1443 $len -= $zterm;
1444 my $text = join( '', map { chr $_ } unpack( "v$len", substr( $wk, $offset ) ) );
1445 $text =~ s/\0.*\z// if( $zterm );
1446 $_[1] = ( $offset += ($len + $zterm) *2 );
1447 return $text;
1448}
1449
1450# HYPERLINK record
1451
1452sub _subHyperlink {
1453 my ( $workbook, $op, $len, $wk ) = @_;
1454
1455 # REF
1456 my( $srow, $erow, $scol, $ecol ) = unpack( 'v4', $wk );
1457
1458 my $guid = _getguid( substr( $wk, 8 ) );
1459 return unless( $guid eq '79EAC9D0-BAF9-11CE-8C82-00AA004BA90B' );
1460
1461 my( $stmvers, $flags ) = unpack( 'VV', substr( $wk, 24 ) );
1462 return if( $flags & 0x60 || $stmvers != 2 );
1463
1464 my $offset = 32;
1465 my( $desc,$frame, $link, $mark );
1466
1467 if( ($flags & 0x14) == 0x14 ) {
1468 $desc = _getustr( $wk, $offset, 1, 0 );
1469 }
1470
1471 if( $flags & 0x80 ) {
1472 $frame = _getustr( $wk, $offset, 1, 0 );
1473 }
1474
1475 $link = '';
1476 if( $flags & 0x100 ) {
1477 # UNC path
1478 $link = 'file:///' . _getustr( $wk, $offset, 1, 0 );
1479 } elsif( $flags & 0x1 ) {
1480 # Has link (URI)
1481 $guid = _getguid( substr( $wk, $offset ) );
1482 $offset += 16;
1483 if( $guid eq '79EAC9E0-BAF9-11CE-8C82-00AA004BA90B' ) {
1484 # URI
1485 $link = _getustr( $wk, $offset, 1, 1 );
1486 } elsif( $guid eq '00000303-0000-0000-C000-000000000046' ) {
1487 # Local file
1488 $link = 'file:///';
1489 # !($flags & 2) = 'relative path'
1490 if( !($flags & 0x2) ) {
1491 my $file = $workbook->{File};
1492 if( defined $file && length $file ) {
1493 $link .= (fileparse($file))[1];
1494 }
1495 else {
1496 $link .= '%REL%'
1497 }
1498 }
1499 my $dirn = unpack( 'v', substr( $wk, $offset ) );
1500 $offset += 2;
1501 $link .= '..\\' x $dirn;
1502 my $namelen = unpack( 'V', substr( $wk, $offset ) );
1503 $offset += 4;
1504 my $name = unpack( 'Z*', substr( $wk, $offset ) );
1505 $offset += $namelen;
1506 $offset += 24;
1507 my $size = unpack( 'V', substr( $wk, $offset ) );
1508 $offset += 4;
1509 if( $size ) {
1510 my $xlen = unpack( 'V', substr( $wk, $offset ) ) / 2;
1511 $name = join( '', map { chr $_} unpack( "v$xlen", substr( $wk, $offset+4+2) ) );
1512 $offset += $size;
1513 }
1514 $link .= $name;
1515 } else {
1516 return;
1517 }
1518 }
1519
1520 # Text mark (Fragment identifier)
1521 if( $flags & 0x8 ) {
1522 # Cellrefs contain reserved characters, so url-encode
1523 my $fragment = _getustr( $wk, $offset, 1 );
1524 $fragment =~ s/([^\w.~-])/sprintf( '%%%02X', ord( $1 ) )/gems;
1525 $link .= '#' . $fragment;
1526 }
1527
1528 # Update loop at end of parse() if this changes
1529
1530 push @{ $workbook->{Worksheet}[ $workbook->{_CurSheet} ]->{HyperLinks} }, [
1531 $desc, $link, $frame, $srow, $erow, $scol, $ecol ];
1532}
1533
1534#------------------------------------------------------------------------------
1535# _subSST (for Spreadsheet::ParseExcel) DK:P413
1536#------------------------------------------------------------------------------
1537sub _subSST {
1538 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1539 _subStrWk( $oBook, substr( $sWk, 8 ) );
1540}
1541
1542#------------------------------------------------------------------------------
1543# _subContinue (for Spreadsheet::ParseExcel) DK:P311
1544#------------------------------------------------------------------------------
1545sub _subContinue {
1546 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1547
1548 #if(defined $self->{FuncTbl}->{$bOp}) {
1549 # $self->{FuncTbl}->{$PREFUNC}->($oBook, $bOp, $bLen, $sWk);
1550 #}
1551
1552 _subStrWk( $oBook, $sWk, 1 ) if ( $PREFUNC == 0xFC );
1553}
1554
1555#------------------------------------------------------------------------------
1556# _subWriteAccess (for Spreadsheet::ParseExcel) DK:P451
1557#------------------------------------------------------------------------------
1558sub _subWriteAccess {
1559 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1560 return if ( defined $oBook->{_Author} );
1561
1562 #BIFF8
1563 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
1564 $oBook->{Author} = _convBIFF8String( $oBook, $sWk );
1565 }
1566
1567 #Before BIFF8
1568 else {
1569 my ( $iLen ) = unpack( "c", $sWk );
1570 $oBook->{Author} =
1571 $oBook->{FmtClass}->TextFmt( substr( $sWk, 1, $iLen ), '_native_' );
1572 }
1573}
1574
1575#------------------------------------------------------------------------------
1576# _convBIFF8String (for Spreadsheet::ParseExcel)
1577#------------------------------------------------------------------------------
1578sub _convBIFF8String {
1579 my ( $oBook, $sWk, $iCnvFlg ) = @_;
1580 my ( $iLen, $iFlg ) = unpack( "vc", $sWk );
1581 my ( $iHigh, $iExt, $iRich ) = ( $iFlg & 0x01, $iFlg & 0x04, $iFlg & 0x08 );
1582 my ( $iStPos, $iExtCnt, $iRichCnt, $sStr );
1583
1584 #2. Rich and Ext
1585 if ( $iRich && $iExt ) {
1586 $iStPos = 9;
1587 ( $iRichCnt, $iExtCnt ) = unpack( 'vV', substr( $sWk, 3, 6 ) );
1588 }
1589 elsif ( $iRich ) { #Only Rich
1590 $iStPos = 5;
1591 $iRichCnt = unpack( 'v', substr( $sWk, 3, 2 ) );
1592 $iExtCnt = 0;
1593 }
1594 elsif ( $iExt ) { #Only Ext
1595 $iStPos = 7;
1596 $iRichCnt = 0;
1597 $iExtCnt = unpack( 'V', substr( $sWk, 3, 4 ) );
1598 }
1599 else { #Nothing Special
1600 $iStPos = 3;
1601 $iExtCnt = 0;
1602 $iRichCnt = 0;
1603 }
1604
1605 #3.Get String
1606 if ( $iHigh ) { #Compressed
1607 $iLen *= 2;
1608 $sStr = substr( $sWk, $iStPos, $iLen );
1609 _SwapForUnicode( \$sStr );
1610 $sStr = $oBook->{FmtClass}->TextFmt( $sStr, 'ucs2' )
1611 unless ( $iCnvFlg );
1612 }
1613 else { #Not Compressed
1614 $sStr = substr( $sWk, $iStPos, $iLen );
1615 $sStr = $oBook->{FmtClass}->TextFmt( $sStr, undef ) unless ( $iCnvFlg );
1616 }
1617
1618 #4. return
1619 if ( wantarray ) {
1620
1621 #4.1 Get Rich and Ext
1622 if ( length( $sWk ) < $iStPos + $iLen + $iRichCnt * 4 + $iExtCnt ) {
1623 return (
1624 [ undef, $iHigh, undef, undef ],
1625 $iStPos + $iLen + $iRichCnt * 4 + $iExtCnt,
1626 $iStPos, $iLen
1627 );
1628 }
1629 else {
1630 return (
1631 [
1632 $sStr,
1633 $iHigh,
1634 substr( $sWk, $iStPos + $iLen, $iRichCnt * 4 ),
1635 substr( $sWk, $iStPos + $iLen + $iRichCnt * 4, $iExtCnt )
1636 ],
1637 $iStPos + $iLen + $iRichCnt * 4 + $iExtCnt,
1638 $iStPos, $iLen
1639 );
1640 }
1641 }
1642 else {
1643 return $sStr;
1644 }
1645}
1646
1647#------------------------------------------------------------------------------
1648# _subXF (for Spreadsheet::ParseExcel) DK:P453
1649#------------------------------------------------------------------------------
1650sub _subXF {
1651 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1652
1653 my ( $iFnt, $iIdx );
1654 my (
1655 $iLock, $iHidden, $iStyle, $i123, $iAlH, $iWrap,
1656 $iAlV, $iJustL, $iRotate, $iInd, $iShrink, $iMerge,
1657 $iReadDir, $iBdrD, $iBdrSL, $iBdrSR, $iBdrST, $iBdrSB,
1658 $iBdrSD, $iBdrCL, $iBdrCR, $iBdrCT, $iBdrCB, $iBdrCD,
1659 $iFillP, $iFillCF, $iFillCB
1660 );
1661
1662
1663 if ( $oBook->{BIFFVersion} == verBIFF4 ) {
1664
1665 # Minimal support for Excel 4. We just get the font and format indices
1666 # so that the cell data value can be formatted.
1667 ( $iFnt, $iIdx, ) = unpack( "CC", $sWk );
1668 }
1669 elsif ( $oBook->{BIFFVersion} == verBIFF8 ) {
1670 my ( $iGen, $iAlign, $iGen2, $iBdr1, $iBdr2, $iBdr3, $iPtn );
1671
1672 ( $iFnt, $iIdx, $iGen, $iAlign, $iGen2, $iBdr1, $iBdr2, $iBdr3, $iPtn )
1673 = unpack( "v7Vv", $sWk );
1674 $iLock = ( $iGen & 0x01 ) ? 1 : 0;
1675 $iHidden = ( $iGen & 0x02 ) ? 1 : 0;
1676 $iStyle = ( $iGen & 0x04 ) ? 1 : 0;
1677 $i123 = ( $iGen & 0x08 ) ? 1 : 0;
1678 $iAlH = ( $iAlign & 0x07 );
1679 $iWrap = ( $iAlign & 0x08 ) ? 1 : 0;
1680 $iAlV = ( $iAlign & 0x70 ) / 0x10;
1681 $iJustL = ( $iAlign & 0x80 ) ? 1 : 0;
1682
1683 $iRotate = ( ( $iAlign & 0xFF00 ) / 0x100 ) & 0x00FF;
1684 $iRotate = 90 if ( $iRotate == 255 );
1685 $iRotate = 90 - $iRotate if ( $iRotate > 90 );
1686
1687 $iInd = ( $iGen2 & 0x0F );
1688 $iShrink = ( $iGen2 & 0x10 ) ? 1 : 0;
1689 $iMerge = ( $iGen2 & 0x20 ) ? 1 : 0;
1690 $iReadDir = ( ( $iGen2 & 0xC0 ) / 0x40 ) & 0x03;
1691 $iBdrSL = $iBdr1 & 0x0F;
1692 $iBdrSR = ( ( $iBdr1 & 0xF0 ) / 0x10 ) & 0x0F;
1693 $iBdrST = ( ( $iBdr1 & 0xF00 ) / 0x100 ) & 0x0F;
1694 $iBdrSB = ( ( $iBdr1 & 0xF000 ) / 0x1000 ) & 0x0F;
1695
1696 $iBdrCL = ( ( $iBdr2 & 0x7F ) ) & 0x7F;
1697 $iBdrCR = ( ( $iBdr2 & 0x3F80 ) / 0x80 ) & 0x7F;
1698 $iBdrD = ( ( $iBdr2 & 0xC000 ) / 0x4000 ) & 0x3;
1699
1700 $iBdrCT = ( ( $iBdr3 & 0x7F ) ) & 0x7F;
1701 $iBdrCB = ( ( $iBdr3 & 0x3F80 ) / 0x80 ) & 0x7F;
1702 $iBdrCD = ( ( $iBdr3 & 0x1FC000 ) / 0x4000 ) & 0x7F;
1703 $iBdrSD = ( ( $iBdr3 & 0x1E00000 ) / 0x200000 ) & 0xF;
1704 $iFillP = ( ( $iBdr3 & 0xFC000000 ) / 0x4000000 ) & 0x3F;
1705
1706 $iFillCF = ( $iPtn & 0x7F );
1707 $iFillCB = ( ( $iPtn & 0x3F80 ) / 0x80 ) & 0x7F;
1708 }
1709 else {
1710 my ( $iGen, $iAlign, $iPtn, $iPtn2, $iBdr1, $iBdr2 );
1711
1712 ( $iFnt, $iIdx, $iGen, $iAlign, $iPtn, $iPtn2, $iBdr1, $iBdr2 ) =
1713 unpack( "v8", $sWk );
1714 $iLock = ( $iGen & 0x01 ) ? 1 : 0;
1715 $iHidden = ( $iGen & 0x02 ) ? 1 : 0;
1716 $iStyle = ( $iGen & 0x04 ) ? 1 : 0;
1717 $i123 = ( $iGen & 0x08 ) ? 1 : 0;
1718
1719 $iAlH = ( $iAlign & 0x07 );
1720 $iWrap = ( $iAlign & 0x08 ) ? 1 : 0;
1721 $iAlV = ( $iAlign & 0x70 ) / 0x10;
1722 $iJustL = ( $iAlign & 0x80 ) ? 1 : 0;
1723
1724 $iRotate = ( ( $iAlign & 0x300 ) / 0x100 ) & 0x3;
1725
1726 $iFillCF = ( $iPtn & 0x7F );
1727 $iFillCB = ( ( $iPtn & 0x1F80 ) / 0x80 ) & 0x7F;
1728
1729 $iFillP = ( $iPtn2 & 0x3F );
1730 $iBdrSB = ( ( $iPtn2 & 0x1C0 ) / 0x40 ) & 0x7;
1731 $iBdrCB = ( ( $iPtn2 & 0xFE00 ) / 0x200 ) & 0x7F;
1732
1733 $iBdrST = ( $iBdr1 & 0x07 );
1734 $iBdrSL = ( ( $iBdr1 & 0x38 ) / 0x8 ) & 0x07;
1735 $iBdrSR = ( ( $iBdr1 & 0x1C0 ) / 0x40 ) & 0x07;
1736 $iBdrCT = ( ( $iBdr1 & 0xFE00 ) / 0x200 ) & 0x7F;
1737
1738 $iBdrCL = ( $iBdr2 & 0x7F ) & 0x7F;
1739 $iBdrCR = ( ( $iBdr2 & 0x3F80 ) / 0x80 ) & 0x7F;
1740 }
1741
1742 push @{ $oBook->{Format} }, Spreadsheet::ParseExcel::Format->new(
1743 FontNo => $iFnt,
1744 Font => $oBook->{Font}[$iFnt],
1745 FmtIdx => $iIdx,
1746
1747 Lock => $iLock,
1748 Hidden => $iHidden,
1749 Style => $iStyle,
1750 Key123 => $i123,
1751 AlignH => $iAlH,
1752 Wrap => $iWrap,
1753 AlignV => $iAlV,
1754 JustLast => $iJustL,
1755 Rotate => $iRotate,
1756
1757 Indent => $iInd,
1758 Shrink => $iShrink,
1759 Merge => $iMerge,
1760 ReadDir => $iReadDir,
1761
1762 BdrStyle => [ $iBdrSL, $iBdrSR, $iBdrST, $iBdrSB ],
1763 BdrColor => [ $iBdrCL, $iBdrCR, $iBdrCT, $iBdrCB ],
1764 BdrDiag => [ $iBdrD, $iBdrSD, $iBdrCD ],
1765 Fill => [ $iFillP, $iFillCF, $iFillCB ],
1766 );
1767}
1768
1769#------------------------------------------------------------------------------
1770# _subFormat (for Spreadsheet::ParseExcel) DK: P336
1771#------------------------------------------------------------------------------
1772sub _subFormat {
1773
1774 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1775 my $sFmt;
1776
1777 if ( $oBook->{BIFFVersion} <= verBIFF5 ) {
1778 $sFmt = substr( $sWk, 3, unpack( 'c', substr( $sWk, 2, 1 ) ) );
1779 $sFmt = $oBook->{FmtClass}->TextFmt( $sFmt, '_native_' );
1780 }
1781 else {
1782 $sFmt = _convBIFF8String( $oBook, substr( $sWk, 2 ) );
1783 }
1784
1785 my $format_index = unpack( 'v', substr( $sWk, 0, 2 ) );
1786
1787 # Excel 4 and earlier used an index of 0 to indicate that a built-in format
1788 # that was stored implicitly.
1789 if ( $oBook->{BIFFVersion} <= verBIFF4 && $format_index == 0 ) {
1790 $format_index = keys %{ $oBook->{FormatStr} };
1791 }
1792
1793 $oBook->{FormatStr}->{$format_index} = $sFmt;
1794}
1795
1796#------------------------------------------------------------------------------
1797# _subPalette (for Spreadsheet::ParseExcel) DK: P393
1798#------------------------------------------------------------------------------
1799sub _subPalette {
1800 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1801 for ( my $i = 0 ; $i < unpack( 'v', $sWk ) ; $i++ ) {
1802
1803 # push @aColor, unpack('H6', substr($sWk, $i*4+2));
1804 $oBook->{aColor}[ $i + 8 ] = unpack( 'H6', substr( $sWk, $i * 4 + 2 ) );
1805 }
1806}
1807
1808#------------------------------------------------------------------------------
1809# _subFont (for Spreadsheet::ParseExcel) DK:P333
1810#------------------------------------------------------------------------------
1811sub _subFont {
1812 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1813 my ( $iHeight, $iAttr, $iCIdx, $iBold, $iSuper, $iUnderline, $sFntName );
1814 my ( $bBold, $bItalic, $bUnderline, $bStrikeout );
1815
1816 if ( $oBook->{BIFFVersion} == verBIFF8 ) {
1817 ( $iHeight, $iAttr, $iCIdx, $iBold, $iSuper, $iUnderline ) =
1818 unpack( "v5c", $sWk );
1819 my ( $iSize, $iHigh ) = unpack( 'cc', substr( $sWk, 14, 2 ) );
1820 if ( $iHigh ) {
1821 $sFntName = substr( $sWk, 16, $iSize * 2 );
1822 _SwapForUnicode( \$sFntName );
1823 $sFntName = $oBook->{FmtClass}->TextFmt( $sFntName, 'ucs2' );
1824 }
1825 else {
1826 $sFntName = substr( $sWk, 16, $iSize );
1827 $sFntName = $oBook->{FmtClass}->TextFmt( $sFntName, '_native_' );
1828 }
1829 $bBold = ( $iBold >= 0x2BC ) ? 1 : 0;
1830 $bItalic = ( $iAttr & 0x02 ) ? 1 : 0;
1831 $bStrikeout = ( $iAttr & 0x08 ) ? 1 : 0;
1832 $bUnderline = ( $iUnderline ) ? 1 : 0;
1833 }
1834 elsif ( $oBook->{BIFFVersion} == verBIFF5 ) {
1835 ( $iHeight, $iAttr, $iCIdx, $iBold, $iSuper, $iUnderline ) =
1836 unpack( "v5c", $sWk );
1837 $sFntName =
1838 $oBook->{FmtClass}
1839 ->TextFmt( substr( $sWk, 15, unpack( "c", substr( $sWk, 14, 1 ) ) ),
1840 '_native_' );
1841 $bBold = ( $iBold >= 0x2BC ) ? 1 : 0;
1842 $bItalic = ( $iAttr & 0x02 ) ? 1 : 0;
1843 $bStrikeout = ( $iAttr & 0x08 ) ? 1 : 0;
1844 $bUnderline = ( $iUnderline ) ? 1 : 0;
1845 }
1846 else {
1847 ( $iHeight, $iAttr ) = unpack( "v2", $sWk );
1848 $iCIdx = undef;
1849 $iSuper = 0;
1850
1851 $bBold = ( $iAttr & 0x01 ) ? 1 : 0;
1852 $bItalic = ( $iAttr & 0x02 ) ? 1 : 0;
1853 $bUnderline = ( $iAttr & 0x04 ) ? 1 : 0;
1854 $bStrikeout = ( $iAttr & 0x08 ) ? 1 : 0;
1855
1856 $sFntName = substr( $sWk, 5, unpack( "c", substr( $sWk, 4, 1 ) ) );
1857 }
1858 push @{ $oBook->{Font} }, Spreadsheet::ParseExcel::Font->new(
1859 Height => $iHeight / 20.0,
1860 Attr => $iAttr,
1861 Color => $iCIdx,
1862 Super => $iSuper,
1863 UnderlineStyle => $iUnderline,
1864 Name => $sFntName,
1865
1866 Bold => $bBold,
1867 Italic => $bItalic,
1868 Underline => $bUnderline,
1869 Strikeout => $bStrikeout,
1870 );
1871
1872 #Skip Font[4]
1873 push @{ $oBook->{Font} }, {} if ( scalar( @{ $oBook->{Font} } ) == 4 );
1874
1875}
1876
1877#------------------------------------------------------------------------------
1878# _subBoundSheet (for Spreadsheet::ParseExcel): DK: P307
1879#------------------------------------------------------------------------------
1880sub _subBoundSheet {
1881 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1882 my ( $iPos, $iGr, $iKind ) = unpack( "Lc2", $sWk );
1883 $iKind &= 0x0F;
1884 return if ( ( $iKind != 0x00 ) && ( $iKind != 0x01 ) );
1885
1886 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
1887 my ( $iSize, $iUni ) = unpack( "cc", substr( $sWk, 6, 2 ) );
1888 my $sWsName = substr( $sWk, 8 );
1889 if ( $iUni & 0x01 ) {
1890 _SwapForUnicode( \$sWsName );
1891 $sWsName = $oBook->{FmtClass}->TextFmt( $sWsName, 'ucs2' );
1892 }
1893 $oBook->{Worksheet}[ $oBook->{SheetCount} ] =
1894 Spreadsheet::ParseExcel::Worksheet->new(
1895 Name => $sWsName,
1896 Kind => $iKind,
1897 _Pos => $iPos,
1898 _Book => $oBook,
1899 _SheetNo => $oBook->{SheetCount},
1900 SheetHidden => $iGr & 0x03
1901 );
1902 }
1903 else {
1904 $oBook->{Worksheet}[ $oBook->{SheetCount} ] =
1905 Spreadsheet::ParseExcel::Worksheet->new(
1906 Name =>
1907 $oBook->{FmtClass}->TextFmt( substr( $sWk, 7 ), '_native_' ),
1908 Kind => $iKind,
1909 _Pos => $iPos,
1910 _Book => $oBook,
1911 _SheetNo => $oBook->{SheetCount},
1912 SheetHidden => $iGr & 0x03
1913 );
1914 }
1915 $oBook->{SheetCount}++;
1916}
1917
1918#------------------------------------------------------------------------------
1919# _subHeader (for Spreadsheet::ParseExcel) DK: P340
1920#------------------------------------------------------------------------------
1921sub _subHeader {
1922 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1923 return undef unless ( defined $oBook->{_CurSheet} );
1924 my $sW;
1925
1926 if ( !defined $sWk ) {
1927 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{Header} = undef;
1928 return;
1929 }
1930
1931 #BIFF8
1932 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
1933 $sW = _convBIFF8String( $oBook, $sWk );
1934 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{Header} =
1935 ( $sW eq "\x00" ) ? undef : $sW;
1936 }
1937
1938 #Before BIFF8
1939 else {
1940 my ( $iLen ) = unpack( "c", $sWk );
1941 $sW =
1942 $oBook->{FmtClass}->TextFmt( substr( $sWk, 1, $iLen ), '_native_' );
1943 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{Header} =
1944 ( $sW eq "\x00\x00\x00" ) ? undef : $sW;
1945 }
1946}
1947
1948#------------------------------------------------------------------------------
1949# _subFooter (for Spreadsheet::ParseExcel) DK: P335
1950#------------------------------------------------------------------------------
1951sub _subFooter {
1952 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1953 return undef unless ( defined $oBook->{_CurSheet} );
1954 my $sW;
1955
1956 if ( !defined $sWk ) {
1957 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{Footer} = undef;
1958 return;
1959 }
1960
1961 #BIFF8
1962 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
1963 $sW = _convBIFF8String( $oBook, $sWk );
1964 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{Footer} =
1965 ( $sW eq "\x00" ) ? undef : $sW;
1966 }
1967
1968 #Before BIFF8
1969 else {
1970 my ( $iLen ) = unpack( "c", $sWk );
1971 $sW =
1972 $oBook->{FmtClass}->TextFmt( substr( $sWk, 1, $iLen ), '_native_' );
1973 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{Footer} =
1974 ( $sW eq "\x00\x00\x00" ) ? undef : $sW;
1975 }
1976}
1977
1978#------------------------------------------------------------------------------
1979# _subHPageBreak (for Spreadsheet::ParseExcel) DK: P341
1980#------------------------------------------------------------------------------
1981sub _subHPageBreak {
1982 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
1983 my @aBreak;
1984 my $iCnt = unpack( "v", $sWk );
1985
1986 return undef unless ( defined $oBook->{_CurSheet} );
1987
1988 #BIFF8
1989 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
1990 for ( my $i = 0 ; $i < $iCnt ; $i++ ) {
1991 my ( $iRow, $iColB, $iColE ) =
1992 unpack( 'v3', substr( $sWk, 2 + $i * 6, 6 ) );
1993
1994 # push @aBreak, [$iRow, $iColB, $iColE];
1995 push @aBreak, $iRow;
1996 }
1997 }
1998
1999 #Before BIFF8
2000 else {
2001 for ( my $i = 0 ; $i < $iCnt ; $i++ ) {
2002 my ( $iRow ) = unpack( 'v', substr( $sWk, 2 + $i * 2, 2 ) );
2003 push @aBreak, $iRow;
2004
2005 # push @aBreak, [$iRow, 0, 255];
2006 }
2007 }
2008 @aBreak = sort { $a <=> $b } @aBreak;
2009 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{HPageBreak} = \@aBreak;
2010}
2011
2012#------------------------------------------------------------------------------
2013# _subVPageBreak (for Spreadsheet::ParseExcel) DK: P447
2014#------------------------------------------------------------------------------
2015sub _subVPageBreak {
2016 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2017 return undef unless ( defined $oBook->{_CurSheet} );
2018
2019 my @aBreak;
2020 my $iCnt = unpack( "v", $sWk );
2021
2022 #BIFF8
2023 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
2024 for ( my $i = 0 ; $i < $iCnt ; $i++ ) {
2025 my ( $iCol, $iRowB, $iRowE ) =
2026 unpack( 'v3', substr( $sWk, 2 + $i * 6, 6 ) );
2027 push @aBreak, $iCol;
2028
2029 # push @aBreak, [$iCol, $iRowB, $iRowE];
2030 }
2031 }
2032
2033 #Before BIFF8
2034 else {
2035 for ( my $i = 0 ; $i < $iCnt ; $i++ ) {
2036 my ( $iCol ) = unpack( 'v', substr( $sWk, 2 + $i * 2, 2 ) );
2037 push @aBreak, $iCol;
2038
2039 # push @aBreak, [$iCol, 0, 65535];
2040 }
2041 }
2042 @aBreak = sort { $a <=> $b } @aBreak;
2043 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{VPageBreak} = \@aBreak;
2044}
2045
2046#------------------------------------------------------------------------------
2047# _subMargin (for Spreadsheet::ParseExcel) DK: P306, 345, 400, 440
2048#------------------------------------------------------------------------------
2049sub _subMargin {
2050 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2051 return undef unless ( defined $oBook->{_CurSheet} );
2052
2053 # The "Mergin" options are a workaround for a backward compatible typo.
2054
2055 my $dWk = _convDval( substr( $sWk, 0, 8 ) );
2056 if ( $bOp == 0x26 ) {
2057 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{LeftMergin} = $dWk;
2058 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{LeftMargin} = $dWk;
2059 }
2060 elsif ( $bOp == 0x27 ) {
2061 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{RightMergin} = $dWk;
2062 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{RightMargin} = $dWk;
2063 }
2064 elsif ( $bOp == 0x28 ) {
2065 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{TopMergin} = $dWk;
2066 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{TopMargin} = $dWk;
2067 }
2068 elsif ( $bOp == 0x29 ) {
2069 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{BottomMergin} = $dWk;
2070 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{BottomMargin} = $dWk;
2071 }
2072}
2073
2074#------------------------------------------------------------------------------
2075# _subHcenter (for Spreadsheet::ParseExcel) DK: P340
2076#------------------------------------------------------------------------------
2077sub _subHcenter {
2078 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2079 return undef unless ( defined $oBook->{_CurSheet} );
2080
2081 my $iWk = unpack( "v", $sWk );
2082 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{HCenter} = $iWk;
2083
2084}
2085
2086#------------------------------------------------------------------------------
2087# _subVcenter (for Spreadsheet::ParseExcel) DK: P447
2088#------------------------------------------------------------------------------
2089sub _subVcenter {
2090 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2091 return undef unless ( defined $oBook->{_CurSheet} );
2092
2093 my $iWk = unpack( "v", $sWk );
2094 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{VCenter} = $iWk;
2095}
2096
2097#------------------------------------------------------------------------------
2098# _subPrintGridlines (for Spreadsheet::ParseExcel) DK: P397
2099#------------------------------------------------------------------------------
2100sub _subPrintGridlines {
2101 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2102 return undef unless ( defined $oBook->{_CurSheet} );
2103
2104 my $iWk = unpack( "v", $sWk );
2105 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{PrintGrid} = $iWk;
2106
2107}
2108
2109#------------------------------------------------------------------------------
2110# _subPrintHeaders (for Spreadsheet::ParseExcel) DK: P397
2111#------------------------------------------------------------------------------
2112sub _subPrintHeaders {
2113 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2114 return undef unless ( defined $oBook->{_CurSheet} );
2115
2116 my $iWk = unpack( "v", $sWk );
2117 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{PrintHeaders} = $iWk;
2118}
2119
2120#------------------------------------------------------------------------------
2121# _subSETUP (for Spreadsheet::ParseExcel) DK: P409
2122#------------------------------------------------------------------------------
2123sub _subSETUP {
2124 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2125 return undef unless ( defined $oBook->{_CurSheet} );
2126
2127 # Workaround for some apps and older Excels that don't write a
2128 # complete SETUP record.
2129 return undef if $bLen != 34;
2130
2131 my $oWkS = $oBook->{Worksheet}[ $oBook->{_CurSheet} ];
2132 my $iGrBit;
2133
2134 (
2135 $oWkS->{PaperSize}, $oWkS->{Scale}, $oWkS->{PageStart},
2136 $oWkS->{FitWidth}, $oWkS->{FitHeight}, $iGrBit,
2137 $oWkS->{Res}, $oWkS->{VRes},
2138 ) = unpack( 'v8', $sWk );
2139
2140 $oWkS->{HeaderMargin} = _convDval( substr( $sWk, 16, 8 ) );
2141 $oWkS->{FooterMargin} = _convDval( substr( $sWk, 24, 8 ) );
2142 $oWkS->{Copis} = unpack( 'v2', substr( $sWk, 32, 2 ) );
2143 $oWkS->{LeftToRight} = ( ( $iGrBit & 0x01 ) ? 1 : 0 );
2144 $oWkS->{Landscape} = ( ( $iGrBit & 0x02 ) ? 1 : 0 );
2145 $oWkS->{NoPls} = ( ( $iGrBit & 0x04 ) ? 1 : 0 );
2146 $oWkS->{NoColor} = ( ( $iGrBit & 0x08 ) ? 1 : 0 );
2147 $oWkS->{Draft} = ( ( $iGrBit & 0x10 ) ? 1 : 0 );
2148 $oWkS->{Notes} = ( ( $iGrBit & 0x20 ) ? 1 : 0 );
2149 $oWkS->{NoOrient} = ( ( $iGrBit & 0x40 ) ? 1 : 0 );
2150 $oWkS->{UsePage} = ( ( $iGrBit & 0x80 ) ? 1 : 0 );
2151
2152 # The NoPls flag indicates that the values have not been taken from an
2153 # actual printer and thus may not be accurate.
2154
2155 # Set default scale if NoPls otherwise it may be an invalid value of 0XFF.
2156 $oWkS->{Scale} = 100 if $oWkS->{NoPls};
2157
2158 # Workaround for a backward compatible typo.
2159 $oWkS->{HeaderMergin} = $oWkS->{HeaderMargin};
2160 $oWkS->{FooterMergin} = $oWkS->{FooterMargin};
2161
2162}
2163
2164#------------------------------------------------------------------------------
2165# _subName (for Spreadsheet::ParseExcel) DK: P350
2166#------------------------------------------------------------------------------
2167sub _subName {
2168 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2169 my (
2170 $iGrBit, $cKey, $cCh, $iCce, $ixAls,
2171 $iTab, $cchCust, $cchDsc, $cchHep, $cchStatus
2172 ) = unpack( 'vc2v3c4', $sWk );
2173
2174 #Builtin Name + Length == 1
2175 if ( ( $iGrBit & 0x20 ) && ( $cCh == 1 ) ) {
2176
2177 #BIFF8
2178 if ( $oBook->{BIFFVersion} >= verBIFF8 ) {
2179 my $iName = unpack( 'n', substr( $sWk, 14 ) );
2180 my $iSheet = unpack( 'v', substr( $sWk, 8 ) ) - 1;
2181
2182 # Workaround for mal-formed Excel workbooks where Print_Title is
2183 # set as Global (i.e. itab = 0). Note, this will have to be
2184 # treated differently when we get around to handling global names.
2185 return undef if $iSheet == -1;
2186
2187 if ( $iName == 6 ) { #PrintArea
2188 my ( $iSheetW, $raArea ) = _ParseNameArea( substr( $sWk, 16 ) );
2189 $oBook->{PrintArea}[$iSheet] = $raArea;
2190 }
2191 elsif ( $iName == 7 ) { #Title
2192 my ( $iSheetW, $raArea ) = _ParseNameArea( substr( $sWk, 16 ) );
2193 my @aTtlR = ();
2194 my @aTtlC = ();
2195 foreach my $raI ( @$raArea ) {
2196 if ( $raI->[3] == 0xFF ) { #Row Title
2197 push @aTtlR, [ $raI->[0], $raI->[2] ];
2198 }
2199 else { #Col Title
2200 push @aTtlC, [ $raI->[1], $raI->[3] ];
2201 }
2202 }
2203 $oBook->{PrintTitle}[$iSheet] =
2204 { Row => \@aTtlR, Column => \@aTtlC };
2205 }
2206 }
2207 else {
2208 my $iName = unpack( 'c', substr( $sWk, 14 ) );
2209 if ( $iName == 6 ) { #PrintArea
2210 my ( $iSheet, $raArea ) =
2211 _ParseNameArea95( substr( $sWk, 15 ) );
2212 $oBook->{PrintArea}[$iSheet] = $raArea;
2213 }
2214 elsif ( $iName == 7 ) { #Title
2215 my ( $iSheet, $raArea ) =
2216 _ParseNameArea95( substr( $sWk, 15 ) );
2217 my @aTtlR = ();
2218 my @aTtlC = ();
2219 foreach my $raI ( @$raArea ) {
2220 if ( $raI->[3] == 0xFF ) { #Row Title
2221 push @aTtlR, [ $raI->[0], $raI->[2] ];
2222 }
2223 else { #Col Title
2224 push @aTtlC, [ $raI->[1], $raI->[3] ];
2225 }
2226 }
2227 $oBook->{PrintTitle}[$iSheet] =
2228 { Row => \@aTtlR, Column => \@aTtlC };
2229 }
2230 }
2231 }
2232}
2233
2234#------------------------------------------------------------------------------
2235# ParseNameArea (for Spreadsheet::ParseExcel) DK: 494 (ptgAread3d)
2236#------------------------------------------------------------------------------
2237sub _ParseNameArea {
2238 my ( $sObj ) = @_;
2239 my ( $iOp );
2240 my @aRes = ();
2241 $iOp = unpack( 'C', $sObj );
2242 my $iSheet;
2243 if ( $iOp == 0x3b ) {
2244 my ( $iWkS, $iRs, $iRe, $iCs, $iCe ) =
2245 unpack( 'v5', substr( $sObj, 1 ) );
2246 $iSheet = $iWkS;
2247 push @aRes, [ $iRs, $iCs, $iRe, $iCe ];
2248 }
2249 elsif ( $iOp == 0x29 ) {
2250 my $iLen = unpack( 'v', substr( $sObj, 1, 2 ) );
2251 my $iSt = 0;
2252 while ( $iSt < $iLen ) {
2253 my ( $iOpW, $iWkS, $iRs, $iRe, $iCs, $iCe ) =
2254 unpack( 'cv5', substr( $sObj, $iSt + 3, 11 ) );
2255
2256 if ( $iOpW == 0x3b ) {
2257 $iSheet = $iWkS;
2258 push @aRes, [ $iRs, $iCs, $iRe, $iCe ];
2259 }
2260
2261 if ( $iSt == 0 ) {
2262 $iSt += 11;
2263 }
2264 else {
2265 $iSt += 12; #Skip 1 byte;
2266 }
2267 }
2268 }
2269 return ( $iSheet, \@aRes );
2270}
2271
2272#------------------------------------------------------------------------------
2273# ParseNameArea95 (for Spreadsheet::ParseExcel) DK: 494 (ptgAread3d)
2274#------------------------------------------------------------------------------
2275sub _ParseNameArea95 {
2276 my ( $sObj ) = @_;
2277 my ( $iOp );
2278 my @aRes = ();
2279 $iOp = unpack( 'C', $sObj );
2280 my $iSheet;
2281 if ( $iOp == 0x3b ) {
2282 $iSheet = unpack( 'v', substr( $sObj, 11, 2 ) );
2283 my ( $iRs, $iRe, $iCs, $iCe ) =
2284 unpack( 'v2C2', substr( $sObj, 15, 6 ) );
2285 push @aRes, [ $iRs, $iCs, $iRe, $iCe ];
2286 }
2287 elsif ( $iOp == 0x29 ) {
2288 my $iLen = unpack( 'v', substr( $sObj, 1, 2 ) );
2289 my $iSt = 0;
2290 while ( $iSt < $iLen ) {
2291 my $iOpW = unpack( 'c', substr( $sObj, $iSt + 3, 6 ) );
2292 $iSheet = unpack( 'v', substr( $sObj, $iSt + 14, 2 ) );
2293 my ( $iRs, $iRe, $iCs, $iCe ) =
2294 unpack( 'v2C2', substr( $sObj, $iSt + 18, 6 ) );
2295 push @aRes, [ $iRs, $iCs, $iRe, $iCe ] if ( $iOpW == 0x3b );
2296
2297 if ( $iSt == 0 ) {
2298 $iSt += 21;
2299 }
2300 else {
2301 $iSt += 22; #Skip 1 byte;
2302 }
2303 }
2304 }
2305 return ( $iSheet, \@aRes );
2306}
2307
2308#------------------------------------------------------------------------------
2309# _subBOOL (for Spreadsheet::ParseExcel) DK: P452
2310#------------------------------------------------------------------------------
2311sub _subWSBOOL {
2312 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2313 return undef unless ( defined $oBook->{_CurSheet} );
2314
2315 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{PageFit} =
2316 ( ( unpack( 'v', $sWk ) & 0x100 ) ? 1 : 0 );
2317}
2318
2319#------------------------------------------------------------------------------
2320# _subMergeArea (for Spreadsheet::ParseExcel) DK: (Not)
2321#------------------------------------------------------------------------------
2322sub _subMergeArea {
2323 my ( $oBook, $bOp, $bLen, $sWk ) = @_;
2324 return undef unless ( defined $oBook->{_CurSheet} );
2325
2326 my $iCnt = unpack( "v", $sWk );
2327 my $oWkS = $oBook->{Worksheet}[ $oBook->{_CurSheet} ];
2328 $oWkS->{MergedArea} = [] unless ( defined $oWkS->{MergedArea} );
2329 for ( my $i = 0 ; $i < $iCnt ; $i++ ) {
2330 my ( $iRs, $iRe, $iCs, $iCe ) =
2331 unpack( 'v4', substr( $sWk, $i * 8 + 2, 8 ) );
2332 for ( my $iR = $iRs ; $iR <= $iRe ; $iR++ ) {
2333 for ( my $iC = $iCs ; $iC <= $iCe ; $iC++ ) {
2334 $oWkS->{Cells}[$iR][$iC]->{Merged} = 1
2335 if ( defined $oWkS->{Cells}[$iR][$iC] );
2336 }
2337 }
2338 push @{ $oWkS->{MergedArea} }, [ $iRs, $iCs, $iRe, $iCe ];
2339 }
2340}
2341
2342#------------------------------------------------------------------------------
2343# DecodeBoolErr (for Spreadsheet::ParseExcel) DK: P306
2344#------------------------------------------------------------------------------
2345sub DecodeBoolErr {
2346 my ( $iVal, $iFlg ) = @_;
2347 if ( $iFlg ) { # ERROR
2348 if ( $iVal == 0x00 ) {
2349 return "#NULL!";
2350 }
2351 elsif ( $iVal == 0x07 ) {
2352 return "#DIV/0!";
2353 }
2354 elsif ( $iVal == 0x0F ) {
2355 return "#VALUE!";
2356 }
2357 elsif ( $iVal == 0x17 ) {
2358 return "#REF!";
2359 }
2360 elsif ( $iVal == 0x1D ) {
2361 return "#NAME?";
2362 }
2363 elsif ( $iVal == 0x24 ) {
2364 return "#NUM!";
2365 }
2366 elsif ( $iVal == 0x2A ) {
2367 return "#N/A!";
2368 }
2369 else {
2370 return "#ERR";
2371 }
2372 }
2373 else {
2374 return ( $iVal ) ? "TRUE" : "FALSE";
2375 }
2376}
2377
2378###############################################################################
2379#
2380# _decode_rk_number()
2381#
2382# Convert an encoded RK number into a real number. The RK encoding is
2383# explained in some detail in the MS docs. It is a way of storing applicable
2384# ints and doubles in 32bits (30 data + 2 info bits) in order to save space.
2385#
2386sub _decode_rk_number {
2387
2388 my $rk_number = shift;
2389 my $number;
2390
2391 # Check the main RK type.
2392 if ( $rk_number & 0x02 ) {
2393
2394 # RK Type 2 and 4, a packed integer.
2395
2396 # Shift off the info bits.
2397 $number = $rk_number >> 2;
2398
2399 # Convert from unsigned to signed if required.
2400 $number -= 0x40000000 if $number & 0x20000000;
2401 }
2402 else {
2403
2404 # RK Type 1 and 3, a truncated IEEE Double.
2405
2406 # Pack the RK number into the high 30 bits of an IEEE double.
2407 $number = pack "VV", 0x0000, $rk_number & 0xFFFFFFFC;
2408
2409 # Reverse the packed IEEE double on big-endian machines.
2410 $number = reverse $number if $BIGENDIAN;
2411
2412 # Unpack the number.
2413 $number = unpack "d", $number;
2414 }
2415
2416 # RK Types 3 and 4 were multiplied by 100 prior to encoding.
2417 $number /= 100 if $rk_number & 0x01;
2418
2419 return $number;
2420}
2421
2422###############################################################################
2423#
2424# _subStrWk()
2425#
2426# Extract the workbook strings from the SST (Shared String Table) record and
2427# any following CONTINUE records.
2428#
2429# The workbook strings are initially contained in the SST block but may also
2430# occupy one or more CONTINUE blocks. Reading the CONTINUE blocks is made a
2431# little tricky by the fact that they can contain an additional initial byte
2432# if a string is continued from a previous block.
2433#
2434# Parsing is further complicated by the fact that the continued section of the
2435# string may have a different encoding (ASCII or UTF-8) from the previous
2436# section. Excel does this to save space.
2437#
2438sub _subStrWk {
2439
2440 my ( $self, $biff_data, $is_continue ) = @_;
2441
2442 if ( $is_continue ) {
2443
2444 # We are reading a CONTINUE record.
2445
2446 if ( $self->{_buffer} eq '' ) {
2447
2448 # A CONTINUE block with no previous SST.
2449 $self->{_buffer} .= $biff_data;
2450 }
2451 elsif ( !defined $self->{_string_continued} ) {
2452
2453 # The CONTINUE block starts with a new (non-continued) string.
2454
2455 # Strip the Grbit byte and store the string data.
2456 $self->{_buffer} .= substr $biff_data, 1;
2457 }
2458 else {
2459
2460 # A CONTINUE block that starts with a continued string.
2461
2462 # The first byte (Grbit) of the CONTINUE record indicates if (0)
2463 # the continued string section is single bytes or (1) double bytes.
2464 my $grbit = ord $biff_data;
2465
2466 my ( $str_position, $str_length ) = @{ $self->{_previous_info} };
2467 my $buff_length = length $self->{_buffer};
2468
2469 if ( $buff_length >= ( $str_position + $str_length ) ) {
2470
2471 # Not in a string.
2472 $self->{_buffer} .= $biff_data;
2473 }
2474 elsif ( ( $self->{_string_continued} & 0x01 ) == ( $grbit & 0x01 ) )
2475 {
2476
2477 # Same encoding as the previous block of the string.
2478 $self->{_buffer} .= substr( $biff_data, 1 );
2479 }
2480 else {
2481
2482 # Different encoding to the previous block of the string.
2483 if ( $grbit & 0x01 ) {
2484
2485 # Current block is UTF-16, previous was ASCII.
2486 my ( undef, $cch ) = unpack 'vc', $self->{_buffer};
2487 substr( $self->{_buffer}, 2, 1 ) = pack( 'C', $cch | 0x01 );
2488
2489 # Convert the previous ASCII, single character, portion of
2490 # the string into a double character UTF-16 string by
2491 # inserting zero bytes.
2492 for (
2493 my $i = ( $buff_length - $str_position ) ;
2494 $i >= 1 ;
2495 $i--
2496 )
2497 {
2498 substr( $self->{_buffer}, $str_position + $i, 0 ) =
2499 "\x00";
2500 }
2501
2502 }
2503 else {
2504
2505 # Current block is ASCII, previous was UTF-16.
2506
2507 # Convert the current ASCII, single character, portion of
2508 # the string into a double character UTF-16 string by
2509 # inserting null bytes.
2510 my $change_length =
2511 ( $str_position + $str_length ) - $buff_length;
2512
2513 # Length of the current CONTINUE record data.
2514 my $biff_length = length $biff_data;
2515
2516 # Restrict the portion to be changed to the current block
2517 # if the string extends over more than one block.
2518 if ( $change_length > ( $biff_length - 1 ) * 2 ) {
2519 $change_length = ( $biff_length - 1 ) * 2;
2520 }
2521
2522 # Insert the null bytes.
2523 for ( my $i = ( $change_length / 2 ) ; $i >= 1 ; $i-- ) {
2524 substr( $biff_data, $i + 1, 0 ) = "\x00";
2525 }
2526
2527 }
2528
2529 # Strip the Grbit byte and store the string data.
2530 $self->{_buffer} .= substr $biff_data, 1;
2531 }
2532 }
2533 }
2534 else {
2535
2536 # Not a CONTINUE block therefore an SST block.
2537 $self->{_buffer} .= $biff_data;
2538 }
2539
2540 # Reset the state variables.
2541 $self->{_string_continued} = undef;
2542 $self->{_previous_info} = undef;
2543
2544 # Extract out any full strings from the current buffer leaving behind a
2545 # partial string that is continued into the next block, or an empty
2546 # buffer is no string is continued.
2547 while ( length $self->{_buffer} >= 4 ) {
2548 my ( $str_info, $length, $str_position, $str_length ) =
2549 _convBIFF8String( $self, $self->{_buffer}, 1 );
2550
2551 if ( defined $str_info->[0] ) {
2552 push @{ $self->{PkgStr} },
2553 {
2554 Text => $str_info->[0],
2555 Unicode => $str_info->[1],
2556 Rich => $str_info->[2],
2557 Ext => $str_info->[3],
2558 };
2559 $self->{_buffer} = substr( $self->{_buffer}, $length );
2560 }
2561 else {
2562 $self->{_string_continued} = $str_info->[1];
2563 $self->{_previous_info} = [ $str_position, $str_length ];
2564 last;
2565 }
2566 }
2567}
2568
2569#------------------------------------------------------------------------------
2570# _SwapForUnicode (for Spreadsheet::ParseExcel)
2571#------------------------------------------------------------------------------
2572sub _SwapForUnicode {
2573 my ( $sObj ) = @_;
2574
2575 # for(my $i = 0; $i<length($$sObj); $i+=2){
2576 for ( my $i = 0 ; $i < ( int( length( $$sObj ) / 2 ) * 2 ) ; $i += 2 ) {
2577 my $sIt = substr( $$sObj, $i, 1 );
2578 substr( $$sObj, $i, 1 ) = substr( $$sObj, $i + 1, 1 );
2579 substr( $$sObj, $i + 1, 1 ) = $sIt;
2580 }
2581}
2582
2583#------------------------------------------------------------------------------
2584# _NewCell (for Spreadsheet::ParseExcel)
2585#------------------------------------------------------------------------------
2586sub _NewCell {
2587 my ( $oBook, $iR, $iC, %rhKey ) = @_;
2588 my ( $sWk, $iLen );
2589 return undef unless ( defined $oBook->{_CurSheet} );
2590
2591 my $FmtClass = $oBook->{FmtClass};
2592 $rhKey{Type} =
2593 $FmtClass->ChkType( $rhKey{Numeric}, $rhKey{Format}{FmtIdx} );
2594 my $FmtStr = $oBook->{FormatStr}{ $rhKey{Format}{FmtIdx} };
2595
2596 # Set "Date" type if required for numbers in a MulRK BIFF block.
2597 if ( defined $FmtStr && $rhKey{Type} eq "Numeric" ) {
2598
2599 # Match a range of possible date formats. Note: this isn't important
2600 # except for reporting. The number will still be converted to a date
2601 # by ExcelFmt() even if 'Type' isn't set to 'Date'.
2602 if ( $FmtStr =~ m{^[dmy][-\\/dmy]*$}i ) {
2603 $rhKey{Type} = "Date";
2604 }
2605 }
2606
2607 my $oCell = Spreadsheet::ParseExcel::Cell->new(
2608 Val => $rhKey{Val},
2609 FormatNo => $rhKey{FormatNo},
2610 Format => $rhKey{Format},
2611 Code => $rhKey{Code},
2612 Type => $rhKey{Type},
2613 );
2614 $oCell->{_Kind} = $rhKey{Kind};
2615 $oCell->{_Value} = $FmtClass->ValFmt( $oCell, $oBook );
2616 if ( $rhKey{Rich} ) {
2617 my @aRich = ();
2618 my $sRich = $rhKey{Rich};
2619 for ( my $iWk = 0 ; $iWk < length( $sRich ) ; $iWk += 4 ) {
2620 my ( $iPos, $iFnt ) = unpack( 'v2', substr( $sRich, $iWk ) );
2621 push @aRich, [ $iPos, $oBook->{Font}[$iFnt] ];
2622 }
2623 $oCell->{Rich} = \@aRich;
2624 }
2625
2626 if ( defined $oBook->{CellHandler} ) {
2627 if ( defined $oBook->{Object} ) {
26282190µs213µs
# spent 10µs (7+3) within Spreadsheet::ParseExcel::BEGIN@2628 which was called: # once (7µs+3µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 2628
no strict;
# spent 10µs making 1 call to Spreadsheet::ParseExcel::BEGIN@2628 # spent 3µs making 1 call to strict::unimport
2629 ref( $oBook->{CellHandler} ) eq "CODE"
2630 ? $oBook->{CellHandler}->(
2631 $_Object, $oBook, $oBook->{_CurSheet}, $iR, $iC, $oCell
2632 )
2633 : $oBook->{CellHandler}->callback( $_Object, $oBook, $oBook->{_CurSheet},
2634 $iR, $iC, $oCell );
2635 }
2636 else {
2637 $oBook->{CellHandler}->( $oBook, $oBook->{_CurSheet}, $iR, $iC, $oCell );
2638 }
2639 }
2640 unless ( $oBook->{NotSetCell} ) {
2641 $oBook->{Worksheet}[ $oBook->{_CurSheet} ]->{Cells}[$iR][$iC] = $oCell;
2642 }
2643 return $oCell;
2644}
2645
2646#------------------------------------------------------------------------------
2647# ColorIdxToRGB (for Spreadsheet::ParseExcel)
2648#
2649# Returns for most recently opened book for compatibility, use
2650# Workbook::color_idx_to_rgb instead
2651#
2652#------------------------------------------------------------------------------
2653sub ColorIdxToRGB {
2654 my ( $sPkg, $iIdx ) = @_;
2655
2656
2657 unless( defined $currentbook ) {
2658 return ( ( defined $aColor[$iIdx] ) ? $aColor[$iIdx] : $aColor[0] );
2659 }
2660
2661 return $currentbook->color_idx_to_rgb( $iIdx );
2662}
2663
2664
2665###############################################################################
2666#
2667# error().
2668#
2669# Return an error string for a failed parse().
2670#
2671sub error {
2672
2673 my $self = shift;
2674
2675 my $parse_error = $self->{_error_status};
2676
2677 if ( exists $error_strings{$parse_error} ) {
2678 return $error_strings{$parse_error};
2679 }
2680 else {
2681 return 'Unknown parse error';
2682 }
2683}
2684
2685
2686###############################################################################
2687#
2688# error_code().
2689#
2690# Return an error code for a failed parse().
2691#
2692sub error_code {
2693
2694 my $self = shift;
2695
2696 return $self->{_error_status};
2697}
2698
2699
2700###############################################################################
2701#
2702# Mapping between legacy method names and new names.
2703#
2704{
2705357µs231µs
# spent 18µs (5+13) within Spreadsheet::ParseExcel::BEGIN@2705 which was called: # once (5µs+13µs) by Spreadsheet::ParseXLSX::BEGIN@14 at line 2705
no warnings; # Ignore warnings about variables used only once.
# spent 18µs making 1 call to Spreadsheet::ParseExcel::BEGIN@2705 # spent 13µs making 1 call to warnings::unimport
270611µs *Parse = *parse;
2707}
2708
2709114µs1;
2710
2711__END__
 
# spent 4µs within Spreadsheet::ParseExcel::__ANON__ which was called 6 times, avg 667ns/call: # once (800ns+0s) by Spreadsheet::ParseExcel::BEGIN@36 at line 36 # once (700ns+0s) by Spreadsheet::ParseExcel::BEGIN@33 at line 33 # once (700ns+0s) by Spreadsheet::ParseExcel::BEGIN@34 at line 34 # once (600ns+0s) by Spreadsheet::ParseExcel::BEGIN@32 at line 32 # once (600ns+0s) by Spreadsheet::ParseExcel::BEGIN@31 at line 31 # once (600ns+0s) by Spreadsheet::ParseExcel::BEGIN@35 at line 35
sub Spreadsheet::ParseExcel::__ANON__; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 6)[Time-HiRes-pm-55]-26-line.html0000644000175000017500000003014114576335353024357 0ustar michamicha Profile of (eval 6)[Time/HiRes.pm:55]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 6)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Time/HiRes.pm:55]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Time/HiRes.pm line 55
Line State
ments
Time
on line
Calls Time
in subs
Code
112µs1.9775
2;










Spreadsheet-ParseXLSX-0.35/nytprof/subs-treemap-excl.html0000644000175000017500000223702314576335353022401 0ustar michamicha Subroutine Exclusive Time Treemap - NYTProf
Subroutine Exclusive Time Treemap
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:31:26 2024

Boxes represent time spent in a subroutine. Coloring represents packages. Click to drill-down into package hierarchy, reload page to reset.











Spreadsheet-ParseXLSX-0.35/nytprof/Test-More-pm-3-line.html0000644000175000017500000113235414576335353022357 0ustar michamicha Profile of Test/More.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:22 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/More.pm
StatementsExecuted 40 statements in 2.99ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111261µs50.1msTest::More::::BEGIN@22Test::More::BEGIN@22
11114µs14µsTest::More::::BEGIN@3Test::More::BEGIN@3
11113µs275µsTest::More::::okTest::More::ok
11111µs13µsTest::More::::import_extraTest::More::import_extra
1117µs11µsTest::More::::BEGIN@209Test::More::BEGIN@209
1117µs363µsTest::More::::done_testingTest::More::done_testing
1116µs29µsTest::More::::BEGIN@1408Test::More::BEGIN@1408
1115µs34µsTest::More::::BEGIN@1783Test::More::BEGIN@1783
1114µs16µsTest::More::::BEGIN@1494Test::More::BEGIN@1494
1114µs6µsTest::More::::BEGIN@4Test::More::BEGIN@4
1113µs19µsTest::More::::BEGIN@5Test::More::BEGIN@5
0000s0sTest::More::::BAIL_OUTTest::More::BAIL_OUT
0000s0sTest::More::::__ANON__[:584]Test::More::__ANON__[:584]
0000s0sTest::More::::__ANON__[:653]Test::More::__ANON__[:653]
0000s0sTest::More::::__ANON__[:741]Test::More::__ANON__[:741]
0000s0sTest::More::::_carpTest::More::_carp
0000s0sTest::More::::_deep_checkTest::More::_deep_check
0000s0sTest::More::::_dneTest::More::_dne
0000s0sTest::More::::_eq_arrayTest::More::_eq_array
0000s0sTest::More::::_eq_hashTest::More::_eq_hash
0000s0sTest::More::::_equal_nonrefsTest::More::_equal_nonrefs
0000s0sTest::More::::_evalTest::More::_eval
0000s0sTest::More::::_format_stackTest::More::_format_stack
0000s0sTest::More::::_is_module_nameTest::More::_is_module_name
0000s0sTest::More::::_typeTest::More::_type
0000s0sTest::More::::_whoaTest::More::_whoa
0000s0sTest::More::::can_okTest::More::can_ok
0000s0sTest::More::::cmp_okTest::More::cmp_ok
0000s0sTest::More::::diagTest::More::diag
0000s0sTest::More::::eq_arrayTest::More::eq_array
0000s0sTest::More::::eq_hashTest::More::eq_hash
0000s0sTest::More::::eq_setTest::More::eq_set
0000s0sTest::More::::explainTest::More::explain
0000s0sTest::More::::failTest::More::fail
0000s0sTest::More::::isTest::More::is
0000s0sTest::More::::is_deeplyTest::More::is_deeply
0000s0sTest::More::::isa_okTest::More::isa_ok
0000s0sTest::More::::isntTest::More::isnt
0000s0sTest::More::::likeTest::More::like
0000s0sTest::More::::new_okTest::More::new_ok
0000s0sTest::More::::noteTest::More::note
0000s0sTest::More::::passTest::More::pass
0000s0sTest::More::::planTest::More::plan
0000s0sTest::More::::require_okTest::More::require_ok
0000s0sTest::More::::skipTest::More::skip
0000s0sTest::More::::subtestTest::More::subtest
0000s0sTest::More::::todo_skipTest::More::todo_skip
0000s0sTest::More::::unlikeTest::More::unlike
0000s0sTest::More::::use_okTest::More::use_ok
0000s0sisn::::t isn::t
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test::More;
2
3232µs114µs
# spent 14µs within Test::More::BEGIN@3 which was called: # once (14µs+0s) by main::BEGIN@5 at line 3
use 5.006;
# spent 14µs making 1 call to Test::More::BEGIN@3
4215µs28µs
# spent 6µs (4+2) within Test::More::BEGIN@4 which was called: # once (4µs+2µs) by main::BEGIN@5 at line 4
use strict;
# spent 6µs making 1 call to Test::More::BEGIN@4 # spent 2µs making 1 call to strict::import
5270µs234µs
# spent 19µs (3+16) within Test::More::BEGIN@5 which was called: # once (3µs+16µs) by main::BEGIN@5 at line 5
use warnings;
# spent 19µs making 1 call to Test::More::BEGIN@5 # spent 16µs making 1 call to warnings::import
6
7#---- perlcritic exemptions. ----#
8
9# We use a lot of subroutine prototypes
10## no critic (Subroutines::ProhibitSubroutinePrototypes)
11
12# Can't use Carp because it might cause C<use_ok()> to accidentally succeed
13# even though the module being used forgot to use Carp. Yes, this
14# actually happened.
15sub _carp {
16 my( $file, $line ) = ( caller(1) )[ 1, 2 ];
17 return warn @_, " at $file line $line\n";
18}
19
201400nsour $VERSION = '1.302198';
21
222271µs250.6ms
# spent 50.1ms (261µs+49.8) within Test::More::BEGIN@22 which was called: # once (261µs+49.8ms) by main::BEGIN@5 at line 22
use Test::Builder::Module;
# spent 50.1ms making 1 call to Test::More::BEGIN@22 # spent 494µs making 1 call to Test::Builder::Module::import
2318µsour @ISA = qw(Test::Builder::Module);
2412µsour @EXPORT = qw(ok use_ok require_ok
25 is isnt like unlike is_deeply
26 cmp_ok
27 skip todo todo_skip
28 pass fail
29 eq_array eq_hash eq_set
30 $TODO
31 plan
32 done_testing
33 can_ok isa_ok new_ok
34 diag note explain
35 subtest
36 BAIL_OUT
37);
38
39=head1 NAME
40
41Test::More - yet another framework for writing test scripts
42
43=head1 SYNOPSIS
44
45 use Test::More tests => 23;
46 # or
47 use Test::More skip_all => $reason;
48 # or
49 use Test::More; # see done_testing()
50
51 require_ok( 'Some::Module' );
52
53 # Various ways to say "ok"
54 ok($got eq $expected, $test_name);
55
56 is ($got, $expected, $test_name);
57 isnt($got, $expected, $test_name);
58
59 # Rather than print STDERR "# here's what went wrong\n"
60 diag("here's what went wrong");
61
62 like ($got, qr/expected/, $test_name);
63 unlike($got, qr/expected/, $test_name);
64
65 cmp_ok($got, '==', $expected, $test_name);
66
67 is_deeply($got_complex_structure, $expected_complex_structure, $test_name);
68
69 SKIP: {
70 skip $why, $how_many unless $have_some_feature;
71
72 ok( foo(), $test_name );
73 is( foo(42), 23, $test_name );
74 };
75
76 TODO: {
77 local $TODO = $why;
78
79 ok( foo(), $test_name );
80 is( foo(42), 23, $test_name );
81 };
82
83 can_ok($module, @methods);
84 isa_ok($object, $class);
85
86 pass($test_name);
87 fail($test_name);
88
89 BAIL_OUT($why);
90
91 # UNIMPLEMENTED!!!
92 my @status = Test::More::status;
93
94
95=head1 DESCRIPTION
96
97B<STOP!> If you're just getting started writing tests, have a look at
98L<Test2::Suite> first.
99
100This is a drop in replacement for Test::Simple which you can switch to once you
101get the hang of basic testing.
102
103The purpose of this module is to provide a wide range of testing
104utilities. Various ways to say "ok" with better diagnostics,
105facilities to skip tests, test future features and compare complicated
106data structures. While you can do almost anything with a simple
107C<ok()> function, it doesn't provide good diagnostic output.
108
109
110=head2 I love it when a plan comes together
111
112Before anything else, you need a testing plan. This basically declares
113how many tests your script is going to run to protect against premature
114failure.
115
116The preferred way to do this is to declare a plan when you C<use Test::More>.
117
118 use Test::More tests => 23;
119
120There are cases when you will not know beforehand how many tests your
121script is going to run. In this case, you can declare your tests at
122the end.
123
124 use Test::More;
125
126 ... run your tests ...
127
128 done_testing( $number_of_tests_run );
129
130B<NOTE> C<done_testing()> should never be called in an C<END { ... }> block.
131
132Sometimes you really don't know how many tests were run, or it's too
133difficult to calculate. In which case you can leave off
134$number_of_tests_run.
135
136In some cases, you'll want to completely skip an entire testing script.
137
138 use Test::More skip_all => $skip_reason;
139
140Your script will declare a skip with the reason why you skipped and
141exit immediately with a zero (success). See L<Test::Harness> for
142details.
143
144If you want to control what functions Test::More will export, you
145have to use the 'import' option. For example, to import everything
146but 'fail', you'd do:
147
148 use Test::More tests => 23, import => ['!fail'];
149
150Alternatively, you can use the C<plan()> function. Useful for when you
151have to calculate the number of tests.
152
153 use Test::More;
154 plan tests => keys %Stuff * 3;
155
156or for deciding between running the tests at all:
157
158 use Test::More;
159 if( $^O eq 'MacOS' ) {
160 plan skip_all => 'Test irrelevant on MacOS';
161 }
162 else {
163 plan tests => 42;
164 }
165
166=cut
167
168sub plan {
169 my $tb = Test::More->builder;
170
171 return $tb->plan(@_);
172}
173
174# This implements "use Test::More 'no_diag'" but the behavior is
175# deprecated.
176
# spent 13µs (11+2) within Test::More::import_extra which was called: # once (11µs+2µs) by Test::Builder::Module::import at line 89 of Test/Builder/Module.pm
sub import_extra {
1771200ns my $class = shift;
1781200ns my $list = shift;
179
1801200ns my @other = ();
1811100ns my $idx = 0;
1821100ns my $import;
1831500ns while( $idx <= $#{$list} ) {
184 my $item = $list->[$idx];
185
186 if( defined $item and $item eq 'no_diag' ) {
187 $class->builder->no_diag(1);
188 }
189 elsif( defined $item and $item eq 'import' ) {
190 if ($import) {
191 push @$import, @{$list->[ ++$idx ]};
192 }
193 else {
194 $import = $list->[ ++$idx ];
195 push @other, $item, $import;
196 }
197 }
198 else {
199 push @other, $item;
200 }
201
202 $idx++;
203 }
204
2051300ns @$list = @other;
206
2071500ns if ($class eq __PACKAGE__ && (!$import || grep $_ eq '$TODO', @$import)) {
20811µs22µs my $to = $class->builder->exported_to;
# spent 2µs making 1 call to Test::Builder::Module::builder # spent 800ns making 1 call to Test::Builder::exported_to
20921.77ms216µs
# spent 11µs (7+4) within Test::More::BEGIN@209 which was called: # once (7µs+4µs) by main::BEGIN@5 at line 209
no strict 'refs';
# spent 11µs making 1 call to Test::More::BEGIN@209 # spent 4µs making 1 call to strict::unimport
21012µs *{"$to\::TODO"} = \our $TODO;
2111600ns if ($import) {
212 @$import = grep $_ ne '$TODO', @$import;
213 }
214 else {
21513µs push @$list, import => [grep $_ ne '$TODO', @EXPORT];
216 }
217 }
218
21912µs return;
220}
221
222=over 4
223
224=item B<done_testing>
225
226 done_testing();
227 done_testing($number_of_tests);
228
229If you don't know how many tests you're going to run, you can issue
230the plan when you're done running tests.
231
232$number_of_tests is the same as C<plan()>, it's the number of tests you
233expected to run. You can omit this, in which case the number of tests
234you ran doesn't matter, just the fact that your tests ran to
235conclusion.
236
237This is safer than and replaces the "no_plan" plan.
238
239B<Note:> You must never put C<done_testing()> inside an C<END { ... }> block.
240The plan is there to ensure your test does not exit before testing has
241completed. If you use an END block you completely bypass this protection.
242
243=back
244
245=cut
246
247
# spent 363µs (7+356) within Test::More::done_testing which was called: # once (7µs+356µs) by main::RUNTIME at line 16 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
sub done_testing {
24811µs12µs my $tb = Test::More->builder;
# spent 2µs making 1 call to Test::Builder::Module::builder
24914µs1353µs $tb->done_testing(@_);
# spent 353µs making 1 call to Test::Builder::done_testing
250}
251
252=head2 Test names
253
254By convention, each test is assigned a number in order. This is
255largely done automatically for you. However, it's often very useful to
256assign a name to each test. Which would you rather see:
257
258 ok 4
259 not ok 5
260 ok 6
261
262or
263
264 ok 4 - basic multi-variable
265 not ok 5 - simple exponential
266 ok 6 - force == mass * acceleration
267
268The later gives you some idea of what failed. It also makes it easier
269to find the test in your script, simply search for "simple
270exponential".
271
272All test functions take a name argument. It's optional, but highly
273suggested that you use it.
274
275=head2 I'm ok, you're not ok.
276
277The basic purpose of this module is to print out either "ok #" or "not
278ok #" depending on if a given test succeeded or failed. Everything
279else is just gravy.
280
281All of the following print "ok" or "not ok" depending on if the test
282succeeded or failed. They all also return true or false,
283respectively.
284
285=over 4
286
287=item B<ok>
288
289 ok($got eq $expected, $test_name);
290
291This simply evaluates any expression (C<$got eq $expected> is just a
292simple example) and uses that to determine if the test succeeded or
293failed. A true expression passes, a false one fails. Very simple.
294
295For example:
296
297 ok( $exp{9} == 81, 'simple exponential' );
298 ok( Film->can('db_Main'), 'set_db()' );
299 ok( $p->tests == 4, 'saw tests' );
300 ok( !grep(!defined $_, @items), 'all items defined' );
301
302(Mnemonic: "This is ok.")
303
304$test_name is a very short description of the test that will be printed
305out. It makes it very easy to find a test in your script when it fails
306and gives others an idea of your intentions. $test_name is optional,
307but we B<very> strongly encourage its use.
308
309Should an C<ok()> fail, it will produce some diagnostics:
310
311 not ok 18 - sufficient mucus
312 # Failed test 'sufficient mucus'
313 # in foo.t at line 42.
314
315This is the same as L<Test::Simple>'s C<ok()> routine.
316
317=cut
318
319
# spent 275µs (13+263) within Test::More::ok which was called: # once (13µs+263µs) by main::RUNTIME at line 14 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
sub ok ($;$) {
3201700ns my( $test, $name ) = @_;
32117µs17µs my $tb = Test::More->builder;
# spent 7µs making 1 call to Test::Builder::Module::builder
322
32314µs1256µs return $tb->ok( $test, $name );
# spent 256µs making 1 call to Test::Builder::ok
324}
325
326=item B<is>
327
328=item B<isnt>
329
330 is ( $got, $expected, $test_name );
331 isnt( $got, $expected, $test_name );
332
333Similar to C<ok()>, C<is()> and C<isnt()> compare their two arguments
334with C<eq> and C<ne> respectively and use the result of that to
335determine if the test succeeded or failed. So these:
336
337 # Is the ultimate answer 42?
338 is( ultimate_answer(), 42, "Meaning of Life" );
339
340 # $foo isn't empty
341 isnt( $foo, '', "Got some foo" );
342
343are similar to these:
344
345 ok( ultimate_answer() eq 42, "Meaning of Life" );
346 ok( $foo ne '', "Got some foo" );
347
348C<undef> will only ever match C<undef>. So you can test a value
349against C<undef> like this:
350
351 is($not_defined, undef, "undefined as expected");
352
353(Mnemonic: "This is that." "This isn't that.")
354
355So why use these? They produce better diagnostics on failure. C<ok()>
356cannot know what you are testing for (beyond the name), but C<is()> and
357C<isnt()> know what the test was and why it failed. For example this
358test:
359
360 my $foo = 'waffle'; my $bar = 'yarblokos';
361 is( $foo, $bar, 'Is foo the same as bar?' );
362
363Will produce something like this:
364
365 not ok 17 - Is foo the same as bar?
366 # Failed test 'Is foo the same as bar?'
367 # in foo.t at line 139.
368 # got: 'waffle'
369 # expected: 'yarblokos'
370
371So you can figure out what went wrong without rerunning the test.
372
373You are encouraged to use C<is()> and C<isnt()> over C<ok()> where possible,
374however do not be tempted to use them to find out if something is
375true or false!
376
377 # XXX BAD!
378 is( exists $brooklyn{tree}, 1, 'A tree grows in Brooklyn' );
379
380This does not check if C<exists $brooklyn{tree}> is true, it checks if
381it returns 1. Very different. Similar caveats exist for false and 0.
382In these cases, use C<ok()>.
383
384 ok( exists $brooklyn{tree}, 'A tree grows in Brooklyn' );
385
386A simple call to C<isnt()> usually does not provide a strong test but there
387are cases when you cannot say much more about a value than that it is
388different from some other value:
389
390 new_ok $obj, "Foo";
391
392 my $clone = $obj->clone;
393 isa_ok $obj, "Foo", "Foo->clone";
394
395 isnt $obj, $clone, "clone() produces a different object";
396
397Historically we supported an C<isn't()> function as an alias of
398C<isnt()>, however in Perl 5.37.9 support for the use of aprostrophe as
399a package separator was deprecated and by Perl 5.42.0 support for it
400will have been removed completely. Accordingly use of C<isn't()> is also
401deprecated, and will produce warnings when used unless 'deprecated'
402warnings are specifically disabled in the scope where it is used. You
403are strongly advised to migrate to using C<isnt()> instead.
404
405=cut
406
407sub is ($$;$) {
408 my $tb = Test::More->builder;
409
410 return $tb->is_eq(@_);
411}
412
413sub isnt ($$;$) {
414 my $tb = Test::More->builder;
415
416 return $tb->isnt_eq(@_);
417}
418
419# Historically it was possible to use apostrophes as a package
420# separator. make this available as isn't() for perl's that support it.
421# However in 5.37.9 the apostrophe as a package separator was
422# deprecated, so warn users of isn't() that they should use isnt()
423# instead. We assume that if they are calling isn::t() they are doing so
424# via isn't() as we have no way to be sure that they aren't spelling it
425# with a double colon. We only trigger the warning if deprecation
426# warnings are enabled, so the user can silence the warning if they
427# wish.
428sub isn::t {
429 local ($@, $!, $?);
430 if (warnings::enabled("deprecated")) {
431 _carp
432 "Use of apostrophe as package separator was deprecated in Perl 5.37.9,\n",
433 "and will be removed in Perl 5.42.0. You should change code that uses\n",
434 "Test::More::isn't() to use Test::More::isnt() as a replacement";
435 }
436 goto &isnt;
437}
438
439=item B<like>
440
441 like( $got, qr/expected/, $test_name );
442
443Similar to C<ok()>, C<like()> matches $got against the regex C<qr/expected/>.
444
445So this:
446
447 like($got, qr/expected/, 'this is like that');
448
449is similar to:
450
451 ok( $got =~ m/expected/, 'this is like that');
452
453(Mnemonic "This is like that".)
454
455The second argument is a regular expression. It may be given as a
456regex reference (i.e. C<qr//>) or (for better compatibility with older
457perls) as a string that looks like a regex (alternative delimiters are
458currently not supported):
459
460 like( $got, '/expected/', 'this is like that' );
461
462Regex options may be placed on the end (C<'/expected/i'>).
463
464Its advantages over C<ok()> are similar to that of C<is()> and C<isnt()>. Better
465diagnostics on failure.
466
467=cut
468
469sub like ($$;$) {
470 my $tb = Test::More->builder;
471
472 return $tb->like(@_);
473}
474
475=item B<unlike>
476
477 unlike( $got, qr/expected/, $test_name );
478
479Works exactly as C<like()>, only it checks if $got B<does not> match the
480given pattern.
481
482=cut
483
484sub unlike ($$;$) {
485 my $tb = Test::More->builder;
486
487 return $tb->unlike(@_);
488}
489
490=item B<cmp_ok>
491
492 cmp_ok( $got, $op, $expected, $test_name );
493
494Halfway between C<ok()> and C<is()> lies C<cmp_ok()>. This allows you
495to compare two arguments using any binary perl operator. The test
496passes if the comparison is true and fails otherwise.
497
498 # ok( $got eq $expected );
499 cmp_ok( $got, 'eq', $expected, 'this eq that' );
500
501 # ok( $got == $expected );
502 cmp_ok( $got, '==', $expected, 'this == that' );
503
504 # ok( $got && $expected );
505 cmp_ok( $got, '&&', $expected, 'this && that' );
506 ...etc...
507
508Its advantage over C<ok()> is when the test fails you'll know what $got
509and $expected were:
510
511 not ok 1
512 # Failed test in foo.t at line 12.
513 # '23'
514 # &&
515 # undef
516
517It's also useful in those cases where you are comparing numbers and
518C<is()>'s use of C<eq> will interfere:
519
520 cmp_ok( $big_hairy_number, '==', $another_big_hairy_number );
521
522It's especially useful when comparing greater-than or smaller-than
523relation between values:
524
525 cmp_ok( $some_value, '<=', $upper_limit );
526
527
528=cut
529
530sub cmp_ok($$$;$) {
531 my $tb = Test::More->builder;
532
533 return $tb->cmp_ok(@_);
534}
535
536=item B<can_ok>
537
538 can_ok($module, @methods);
539 can_ok($object, @methods);
540
541Checks to make sure the $module or $object can do these @methods
542(works with functions, too).
543
544 can_ok('Foo', qw(this that whatever));
545
546is almost exactly like saying:
547
548 ok( Foo->can('this') &&
549 Foo->can('that') &&
550 Foo->can('whatever')
551 );
552
553only without all the typing and with a better interface. Handy for
554quickly testing an interface.
555
556No matter how many @methods you check, a single C<can_ok()> call counts
557as one test. If you desire otherwise, use:
558
559 foreach my $meth (@methods) {
560 can_ok('Foo', $meth);
561 }
562
563=cut
564
565sub can_ok ($@) {
566 my( $proto, @methods ) = @_;
567 my $class = ref $proto || $proto;
568 my $tb = Test::More->builder;
569
570 unless($class) {
571 my $ok = $tb->ok( 0, "->can(...)" );
572 $tb->diag(' can_ok() called with empty class or reference');
573 return $ok;
574 }
575
576 unless(@methods) {
577 my $ok = $tb->ok( 0, "$class->can(...)" );
578 $tb->diag(' can_ok() called with no methods');
579 return $ok;
580 }
581
582 my @nok = ();
583 foreach my $method (@methods) {
584 $tb->_try( sub { $proto->can($method) } ) or push @nok, $method;
585 }
586
587 my $name = (@methods == 1) ? "$class->can('$methods[0]')" :
588 "$class->can(...)" ;
589
590 my $ok = $tb->ok( !@nok, $name );
591
592 $tb->diag( map " $class->can('$_') failed\n", @nok );
593
594 return $ok;
595}
596
597=item B<isa_ok>
598
599 isa_ok($object, $class, $object_name);
600 isa_ok($subclass, $class, $object_name);
601 isa_ok($ref, $type, $ref_name);
602
603Checks to see if the given C<< $object->isa($class) >>. Also checks to make
604sure the object was defined in the first place. Handy for this sort
605of thing:
606
607 my $obj = Some::Module->new;
608 isa_ok( $obj, 'Some::Module' );
609
610where you'd otherwise have to write
611
612 my $obj = Some::Module->new;
613 ok( defined $obj && $obj->isa('Some::Module') );
614
615to safeguard against your test script blowing up.
616
617You can also test a class, to make sure that it has the right ancestor:
618
619 isa_ok( 'Vole', 'Rodent' );
620
621It works on references, too:
622
623 isa_ok( $array_ref, 'ARRAY' );
624
625The diagnostics of this test normally just refer to 'the object'. If
626you'd like them to be more specific, you can supply an $object_name
627(for example 'Test customer').
628
629=cut
630
631sub isa_ok ($$;$) {
632 my( $thing, $class, $thing_name ) = @_;
633 my $tb = Test::More->builder;
634
635 my $whatami;
636 if( !defined $thing ) {
637 $whatami = 'undef';
638 }
639 elsif( ref $thing ) {
640 $whatami = 'reference';
641
642 local($@,$!);
643 require Scalar::Util;
644 if( Scalar::Util::blessed($thing) ) {
645 $whatami = 'object';
646 }
647 }
648 else {
649 $whatami = 'class';
650 }
651
652 # We can't use UNIVERSAL::isa because we want to honor isa() overrides
653 my( $rslt, $error ) = $tb->_try( sub { $thing->isa($class) } );
654
655 if($error) {
656 die <<WHOA unless $error =~ /^Can't (locate|call) method "isa"/;
657WHOA! I tried to call ->isa on your $whatami and got some weird error.
658Here's the error.
659$error
660WHOA
661 }
662
663 # Special case for isa_ok( [], "ARRAY" ) and like
664 if( $whatami eq 'reference' ) {
665 $rslt = UNIVERSAL::isa($thing, $class);
666 }
667
668 my($diag, $name);
669 if( defined $thing_name ) {
670 $name = "'$thing_name' isa '$class'";
671 $diag = defined $thing ? "'$thing_name' isn't a '$class'" : "'$thing_name' isn't defined";
672 }
673 elsif( $whatami eq 'object' ) {
674 my $my_class = ref $thing;
675 $thing_name = qq[An object of class '$my_class'];
676 $name = "$thing_name isa '$class'";
677 $diag = "The object of class '$my_class' isn't a '$class'";
678 }
679 elsif( $whatami eq 'reference' ) {
680 my $type = ref $thing;
681 $thing_name = qq[A reference of type '$type'];
682 $name = "$thing_name isa '$class'";
683 $diag = "The reference of type '$type' isn't a '$class'";
684 }
685 elsif( $whatami eq 'undef' ) {
686 $thing_name = 'undef';
687 $name = "$thing_name isa '$class'";
688 $diag = "$thing_name isn't defined";
689 }
690 elsif( $whatami eq 'class' ) {
691 $thing_name = qq[The class (or class-like) '$thing'];
692 $name = "$thing_name isa '$class'";
693 $diag = "$thing_name isn't a '$class'";
694 }
695 else {
696 die;
697 }
698
699 my $ok;
700 if($rslt) {
701 $ok = $tb->ok( 1, $name );
702 }
703 else {
704 $ok = $tb->ok( 0, $name );
705 $tb->diag(" $diag\n");
706 }
707
708 return $ok;
709}
710
711=item B<new_ok>
712
713 my $obj = new_ok( $class );
714 my $obj = new_ok( $class => \@args );
715 my $obj = new_ok( $class => \@args, $object_name );
716
717A convenience function which combines creating an object and calling
718C<isa_ok()> on that object.
719
720It is basically equivalent to:
721
722 my $obj = $class->new(@args);
723 isa_ok $obj, $class, $object_name;
724
725If @args is not given, an empty list will be used.
726
727This function only works on C<new()> and it assumes C<new()> will return
728just a single object which isa C<$class>.
729
730=cut
731
732sub new_ok {
733 my $tb = Test::More->builder;
734 $tb->croak("new_ok() must be given at least a class") unless @_;
735
736 my( $class, $args, $object_name ) = @_;
737
738 $args ||= [];
739
740 my $obj;
741 my( $success, $error ) = $tb->_try( sub { $obj = $class->new(@$args); 1 } );
742 if($success) {
743 local $Test::Builder::Level = $Test::Builder::Level + 1;
744 isa_ok $obj, $class, $object_name;
745 }
746 else {
747 $class = 'undef' if !defined $class;
748 $tb->ok( 0, "$class->new() died" );
749 $tb->diag(" Error was: $error");
750 }
751
752 return $obj;
753}
754
755=item B<subtest>
756
757 subtest $name => \&code, @args;
758
759C<subtest()> runs the &code as its own little test with its own plan and
760its own result. The main test counts this as a single test using the
761result of the whole subtest to determine if its ok or not ok.
762
763For example...
764
765 use Test::More tests => 3;
766
767 pass("First test");
768
769 subtest 'An example subtest' => sub {
770 plan tests => 2;
771
772 pass("This is a subtest");
773 pass("So is this");
774 };
775
776 pass("Third test");
777
778This would produce.
779
780 1..3
781 ok 1 - First test
782 # Subtest: An example subtest
783 1..2
784 ok 1 - This is a subtest
785 ok 2 - So is this
786 ok 2 - An example subtest
787 ok 3 - Third test
788
789A subtest may call C<skip_all>. No tests will be run, but the subtest is
790considered a skip.
791
792 subtest 'skippy' => sub {
793 plan skip_all => 'cuz I said so';
794 pass('this test will never be run');
795 };
796
797Returns true if the subtest passed, false otherwise.
798
799Due to how subtests work, you may omit a plan if you desire. This adds an
800implicit C<done_testing()> to the end of your subtest. The following two
801subtests are equivalent:
802
803 subtest 'subtest with implicit done_testing()', sub {
804 ok 1, 'subtests with an implicit done testing should work';
805 ok 1, '... and support more than one test';
806 ok 1, '... no matter how many tests are run';
807 };
808
809 subtest 'subtest with explicit done_testing()', sub {
810 ok 1, 'subtests with an explicit done testing should work';
811 ok 1, '... and support more than one test';
812 ok 1, '... no matter how many tests are run';
813 done_testing();
814 };
815
816Extra arguments given to C<subtest> are passed to the callback. For example:
817
818 sub my_subtest {
819 my $range = shift;
820 ...
821 }
822
823 for my $range (1, 10, 100, 1000) {
824 subtest "testing range $range", \&my_subtest, $range;
825 }
826
827=cut
828
829sub subtest {
830 my $tb = Test::More->builder;
831 return $tb->subtest(@_);
832}
833
834=item B<pass>
835
836=item B<fail>
837
838 pass($test_name);
839 fail($test_name);
840
841Sometimes you just want to say that the tests have passed. Usually
842the case is you've got some complicated condition that is difficult to
843wedge into an C<ok()>. In this case, you can simply use C<pass()> (to
844declare the test ok) or fail (for not ok). They are synonyms for
845C<ok(1)> and C<ok(0)>.
846
847Use these very, very, very sparingly.
848
849=cut
850
851sub pass (;$) {
852 my $tb = Test::More->builder;
853
854 return $tb->ok( 1, @_ );
855}
856
857sub fail (;$) {
858 my $tb = Test::More->builder;
859
860 return $tb->ok( 0, @_ );
861}
862
863=back
864
865
866=head2 Module tests
867
868Sometimes you want to test if a module, or a list of modules, can
869successfully load. For example, you'll often want a first test which
870simply loads all the modules in the distribution to make sure they
871work before going on to do more complicated testing.
872
873For such purposes we have C<use_ok> and C<require_ok>.
874
875=over 4
876
877=item B<require_ok>
878
879 require_ok($module);
880 require_ok($file);
881
882Tries to C<require> the given $module or $file. If it loads
883successfully, the test will pass. Otherwise it fails and displays the
884load error.
885
886C<require_ok> will guess whether the input is a module name or a
887filename.
888
889No exception will be thrown if the load fails.
890
891 # require Some::Module
892 require_ok "Some::Module";
893
894 # require "Some/File.pl";
895 require_ok "Some/File.pl";
896
897 # stop testing if any of your modules will not load
898 for my $module (@module) {
899 require_ok $module or BAIL_OUT "Can't load $module";
900 }
901
902=cut
903
904sub require_ok ($) {
905 my($module) = shift;
906 my $tb = Test::More->builder;
907
908 my $pack = caller;
909
910 # Try to determine if we've been given a module name or file.
911 # Module names must be barewords, files not.
912 $module = qq['$module'] unless _is_module_name($module);
913
914 my $code = <<REQUIRE;
915package $pack;
916require $module;
9171;
918REQUIRE
919
920 my( $eval_result, $eval_error ) = _eval($code);
921 my $ok = $tb->ok( $eval_result, "require $module;" );
922
923 unless($ok) {
924 chomp $eval_error;
925 $tb->diag(<<DIAGNOSTIC);
926 Tried to require '$module'.
927 Error: $eval_error
928DIAGNOSTIC
929
930 }
931
932 return $ok;
933}
934
935sub _is_module_name {
936 my $module = shift;
937
938 # Module names start with a letter.
939 # End with an alphanumeric.
940 # The rest is an alphanumeric or ::
941 $module =~ s/\b::\b//g;
942
943 return $module =~ /^[a-zA-Z]\w*$/ ? 1 : 0;
944}
945
946
947=item B<use_ok>
948
949 BEGIN { use_ok($module); }
950 BEGIN { use_ok($module, @imports); }
951
952Like C<require_ok>, but it will C<use> the $module in question and
953only loads modules, not files.
954
955If you just want to test a module can be loaded, use C<require_ok>.
956
957If you just want to load a module in a test, we recommend simply using
958C<use> directly. It will cause the test to stop.
959
960It's recommended that you run C<use_ok()> inside a BEGIN block so its
961functions are exported at compile-time and prototypes are properly
962honored.
963
964If @imports are given, they are passed through to the use. So this:
965
966 BEGIN { use_ok('Some::Module', qw(foo bar)) }
967
968is like doing this:
969
970 use Some::Module qw(foo bar);
971
972Version numbers can be checked like so:
973
974 # Just like "use Some::Module 1.02"
975 BEGIN { use_ok('Some::Module', 1.02) }
976
977Don't try to do this:
978
979 BEGIN {
980 use_ok('Some::Module');
981
982 ...some code that depends on the use...
983 ...happening at compile time...
984 }
985
986because the notion of "compile-time" is relative. Instead, you want:
987
988 BEGIN { use_ok('Some::Module') }
989 BEGIN { ...some code that depends on the use... }
990
991If you want the equivalent of C<use Foo ()>, use a module but not
992import anything, use C<require_ok>.
993
994 BEGIN { require_ok "Foo" }
995
996=cut
997
998sub use_ok ($;@) {
999 my( $module, @imports ) = @_;
1000 @imports = () unless @imports;
1001 my $tb = Test::More->builder;
1002
1003 my %caller;
1004 @caller{qw/pack file line sub args want eval req strict warn/} = caller(0);
1005
1006 my ($pack, $filename, $line, $warn) = @caller{qw/pack file line warn/};
1007 $filename =~ y/\n\r/_/; # so it doesn't run off the "#line $line $f" line
1008
1009 my $code;
1010 if( @imports == 1 and $imports[0] =~ /^\d+(?:\.\d+)?$/ ) {
1011 # probably a version check. Perl needs to see the bare number
1012 # for it to work with non-Exporter based modules.
1013 $code = <<USE;
1014package $pack;
1015BEGIN { \${^WARNING_BITS} = \$args[-1] if defined \$args[-1] }
1016#line $line $filename
1017use $module $imports[0];
10181;
1019USE
1020 }
1021 else {
1022 $code = <<USE;
1023package $pack;
1024BEGIN { \${^WARNING_BITS} = \$args[-1] if defined \$args[-1] }
1025#line $line $filename
1026use $module \@{\$args[0]};
10271;
1028USE
1029 }
1030
1031 my ($eval_result, $eval_error) = _eval($code, \@imports, $warn);
1032 my $ok = $tb->ok( $eval_result, "use $module;" );
1033
1034 unless($ok) {
1035 chomp $eval_error;
1036 $@ =~ s{^BEGIN failed--compilation aborted at .*$}
1037 {BEGIN failed--compilation aborted at $filename line $line.}m;
1038 $tb->diag(<<DIAGNOSTIC);
1039 Tried to use '$module'.
1040 Error: $eval_error
1041DIAGNOSTIC
1042
1043 }
1044
1045 return $ok;
1046}
1047
1048sub _eval {
1049 my( $code, @args ) = @_;
1050
1051 # Work around oddities surrounding resetting of $@ by immediately
1052 # storing it.
1053 my( $sigdie, $eval_result, $eval_error );
1054 {
1055 local( $@, $!, $SIG{__DIE__} ); # isolate eval
1056 $eval_result = eval $code; ## no critic (BuiltinFunctions::ProhibitStringyEval)
1057 $eval_error = $@;
1058 $sigdie = $SIG{__DIE__} || undef;
1059 }
1060 # make sure that $code got a chance to set $SIG{__DIE__}
1061 $SIG{__DIE__} = $sigdie if defined $sigdie;
1062
1063 return( $eval_result, $eval_error );
1064}
1065
1066
1067=back
1068
1069
1070=head2 Complex data structures
1071
1072Not everything is a simple eq check or regex. There are times you
1073need to see if two data structures are equivalent. For these
1074instances Test::More provides a handful of useful functions.
1075
1076B<NOTE> I'm not quite sure what will happen with filehandles.
1077
1078=over 4
1079
1080=item B<is_deeply>
1081
1082 is_deeply( $got, $expected, $test_name );
1083
1084Similar to C<is()>, except that if $got and $expected are references, it
1085does a deep comparison walking each data structure to see if they are
1086equivalent. If the two structures are different, it will display the
1087place where they start differing.
1088
1089C<is_deeply()> compares the dereferenced values of references, the
1090references themselves (except for their type) are ignored. This means
1091aspects such as blessing and ties are not considered "different".
1092
1093C<is_deeply()> currently has very limited handling of function reference
1094and globs. It merely checks if they have the same referent. This may
1095improve in the future.
1096
1097L<Test::Differences> and L<Test::Deep> provide more in-depth functionality
1098along these lines.
1099
1100B<NOTE> is_deeply() has limitations when it comes to comparing strings and
1101refs:
1102
1103 my $path = path('.');
1104 my $hash = {};
1105 is_deeply( $path, "$path" ); # ok
1106 is_deeply( $hash, "$hash" ); # fail
1107
1108This happens because is_deeply will unoverload all arguments unconditionally.
1109It is probably best not to use is_deeply with overloading. For legacy reasons
1110this is not likely to ever be fixed. If you would like a much better tool for
1111this you should see L<Test2::Suite> Specifically L<Test2::Tools::Compare> has
1112an C<is()> function that works like C<is_deeply> with many improvements.
1113
1114=cut
1115
1116our( @Data_Stack, %Refs_Seen );
111713µsmy $DNE = bless [], 'Does::Not::Exist';
1118
1119sub _dne {
1120 return ref $_[0] eq ref $DNE;
1121}
1122
1123## no critic (Subroutines::RequireArgUnpacking)
1124sub is_deeply {
1125 my $tb = Test::More->builder;
1126
1127 unless( @_ == 2 or @_ == 3 ) {
1128 my $msg = <<'WARNING';
1129is_deeply() takes two or three args, you gave %d.
1130This usually means you passed an array or hash instead
1131of a reference to it
1132WARNING
1133 chop $msg; # clip off newline so carp() will put in line/file
1134
1135 _carp sprintf $msg, scalar @_;
1136
1137 return $tb->ok(0);
1138 }
1139
1140 my( $got, $expected, $name ) = @_;
1141
1142 $tb->_unoverload_str( \$expected, \$got );
1143
1144 my $ok;
1145 if( !ref $got and !ref $expected ) { # neither is a reference
1146 $ok = $tb->is_eq( $got, $expected, $name );
1147 }
1148 elsif( !ref $got xor !ref $expected ) { # one's a reference, one isn't
1149 $ok = $tb->ok( 0, $name );
1150 $tb->diag( _format_stack({ vals => [ $got, $expected ] }) );
1151 }
1152 else { # both references
1153 local @Data_Stack = ();
1154 if( _deep_check( $got, $expected ) ) {
1155 $ok = $tb->ok( 1, $name );
1156 }
1157 else {
1158 $ok = $tb->ok( 0, $name );
1159 $tb->diag( _format_stack(@Data_Stack) );
1160 }
1161 }
1162
1163 return $ok;
1164}
1165
1166sub _format_stack {
1167 my(@Stack) = @_;
1168
1169 my $var = '$FOO';
1170 my $did_arrow = 0;
1171 foreach my $entry (@Stack) {
1172 my $type = $entry->{type} || '';
1173 my $idx = $entry->{'idx'};
1174 if( $type eq 'HASH' ) {
1175 $var .= "->" unless $did_arrow++;
1176 $var .= "{$idx}";
1177 }
1178 elsif( $type eq 'ARRAY' ) {
1179 $var .= "->" unless $did_arrow++;
1180 $var .= "[$idx]";
1181 }
1182 elsif( $type eq 'REF' ) {
1183 $var = "\${$var}";
1184 }
1185 }
1186
1187 my @vals = @{ $Stack[-1]{vals} }[ 0, 1 ];
1188 my @vars = ();
1189 ( $vars[0] = $var ) =~ s/\$FOO/ \$got/;
1190 ( $vars[1] = $var ) =~ s/\$FOO/\$expected/;
1191
1192 my $out = "Structures begin differing at:\n";
1193 foreach my $idx ( 0 .. $#vals ) {
1194 my $val = $vals[$idx];
1195 $vals[$idx]
1196 = !defined $val ? 'undef'
1197 : _dne($val) ? "Does not exist"
1198 : ref $val ? "$val"
1199 : "'$val'";
1200 }
1201
1202 $out .= "$vars[0] = $vals[0]\n";
1203 $out .= "$vars[1] = $vals[1]\n";
1204
1205 $out =~ s/^/ /msg;
1206 return $out;
1207}
1208
120914µsmy %_types = (
1210 (map +($_ => $_), qw(
1211 Regexp
1212 ARRAY
1213 HASH
1214 SCALAR
1215 REF
1216 GLOB
1217 CODE
1218 )),
1219 'LVALUE' => 'SCALAR',
1220 'REF' => 'SCALAR',
1221 'VSTRING' => 'SCALAR',
1222);
1223
1224sub _type {
1225 my $thing = shift;
1226
1227 return '' if !ref $thing;
1228
1229 for my $type (keys %_types) {
1230 return $_types{$type} if UNIVERSAL::isa( $thing, $type );
1231 }
1232
1233 return '';
1234}
1235
1236=back
1237
1238
1239=head2 Diagnostics
1240
1241If you pick the right test function, you'll usually get a good idea of
1242what went wrong when it failed. But sometimes it doesn't work out
1243that way. So here we have ways for you to write your own diagnostic
1244messages which are safer than just C<print STDERR>.
1245
1246=over 4
1247
1248=item B<diag>
1249
1250 diag(@diagnostic_message);
1251
1252Prints a diagnostic message which is guaranteed not to interfere with
1253test output. Like C<print> @diagnostic_message is simply concatenated
1254together.
1255
1256Returns false, so as to preserve failure.
1257
1258Handy for this sort of thing:
1259
1260 ok( grep(/foo/, @users), "There's a foo user" ) or
1261 diag("Since there's no foo, check that /etc/bar is set up right");
1262
1263which would produce:
1264
1265 not ok 42 - There's a foo user
1266 # Failed test 'There's a foo user'
1267 # in foo.t at line 52.
1268 # Since there's no foo, check that /etc/bar is set up right.
1269
1270You might remember C<ok() or diag()> with the mnemonic C<open() or
1271die()>.
1272
1273B<NOTE> The exact formatting of the diagnostic output is still
1274changing, but it is guaranteed that whatever you throw at it won't
1275interfere with the test.
1276
1277=item B<note>
1278
1279 note(@diagnostic_message);
1280
1281Like C<diag()>, except the message will not be seen when the test is run
1282in a harness. It will only be visible in the verbose TAP stream.
1283
1284Handy for putting in notes which might be useful for debugging, but
1285don't indicate a problem.
1286
1287 note("Tempfile is $tempfile");
1288
1289=cut
1290
1291sub diag {
1292 return Test::More->builder->diag(@_);
1293}
1294
1295sub note {
1296 return Test::More->builder->note(@_);
1297}
1298
1299=item B<explain>
1300
1301 my @dump = explain @diagnostic_message;
1302
1303Will dump the contents of any references in a human readable format.
1304Usually you want to pass this into C<note> or C<diag>.
1305
1306Handy for things like...
1307
1308 is_deeply($have, $want) || diag explain $have;
1309
1310or
1311
1312 note explain \%args;
1313 Some::Class->method(%args);
1314
1315=cut
1316
1317sub explain {
1318 return Test::More->builder->explain(@_);
1319}
1320
1321=back
1322
1323
1324=head2 Conditional tests
1325
1326Sometimes running a test under certain conditions will cause the
1327test script to die. A certain function or method isn't implemented
1328(such as C<fork()> on MacOS), some resource isn't available (like a
1329net connection) or a module isn't available. In these cases it's
1330necessary to skip tests, or declare that they are supposed to fail
1331but will work in the future (a todo test).
1332
1333For more details on the mechanics of skip and todo tests see
1334L<Test::Harness>.
1335
1336The way Test::More handles this is with a named block. Basically, a
1337block of tests which can be skipped over or made todo. It's best if I
1338just show you...
1339
1340=over 4
1341
1342=item B<SKIP: BLOCK>
1343
1344 SKIP: {
1345 skip $why, $how_many if $condition;
1346
1347 ...normal testing code goes here...
1348 }
1349
1350This declares a block of tests that might be skipped, $how_many tests
1351there are, $why and under what $condition to skip them. An example is
1352the easiest way to illustrate:
1353
1354 SKIP: {
1355 eval { require HTML::Lint };
1356
1357 skip "HTML::Lint not installed", 2 if $@;
1358
1359 my $lint = new HTML::Lint;
1360 isa_ok( $lint, "HTML::Lint" );
1361
1362 $lint->parse( $html );
1363 is( $lint->errors, 0, "No errors found in HTML" );
1364 }
1365
1366If the user does not have HTML::Lint installed, the whole block of
1367code I<won't be run at all>. Test::More will output special ok's
1368which Test::Harness interprets as skipped, but passing, tests.
1369
1370It's important that $how_many accurately reflects the number of tests
1371in the SKIP block so the # of tests run will match up with your plan.
1372If your plan is C<no_plan> $how_many is optional and will default to 1.
1373
1374It's perfectly safe to nest SKIP blocks. Each SKIP block must have
1375the label C<SKIP>, or Test::More can't work its magic.
1376
1377You don't skip tests which are failing because there's a bug in your
1378program, or for which you don't yet have code written. For that you
1379use TODO. Read on.
1380
1381=cut
1382
1383## no critic (Subroutines::RequireFinalReturn)
1384sub skip {
1385 my( $why, $how_many ) = @_;
1386 my $tb = Test::More->builder;
1387
1388 # If the plan is set, and is static, then skip needs a count. If the plan
1389 # is 'no_plan' we are fine. As well if plan is undefined then we are
1390 # waiting for done_testing.
1391 unless (defined $how_many) {
1392 my $plan = $tb->has_plan;
1393 _carp "skip() needs to know \$how_many tests are in the block"
1394 if $plan && $plan =~ m/^\d+$/;
1395 $how_many = 1;
1396 }
1397
1398 if( defined $how_many and $how_many =~ /\D/ ) {
1399 _carp
1400 "skip() was passed a non-numeric number of tests. Did you get the arguments backwards?";
1401 $how_many = 1;
1402 }
1403
1404 for( 1 .. $how_many ) {
1405 $tb->skip($why);
1406 }
1407
1408289µs252µs
# spent 29µs (6+23) within Test::More::BEGIN@1408 which was called: # once (6µs+23µs) by main::BEGIN@5 at line 1408
no warnings 'exiting';
# spent 29µs making 1 call to Test::More::BEGIN@1408 # spent 23µs making 1 call to warnings::unimport
1409 last SKIP;
1410}
1411
1412=item B<TODO: BLOCK>
1413
1414 TODO: {
1415 local $TODO = $why if $condition;
1416
1417 ...normal testing code goes here...
1418 }
1419
1420Declares a block of tests you expect to fail and $why. Perhaps it's
1421because you haven't fixed a bug or haven't finished a new feature:
1422
1423 TODO: {
1424 local $TODO = "URI::Geller not finished";
1425
1426 my $card = "Eight of clubs";
1427 is( URI::Geller->your_card, $card, 'Is THIS your card?' );
1428
1429 my $spoon;
1430 URI::Geller->bend_spoon;
1431 is( $spoon, 'bent', "Spoon bending, that's original" );
1432 }
1433
1434With a todo block, the tests inside are expected to fail. Test::More
1435will run the tests normally, but print out special flags indicating
1436they are "todo". L<Test::Harness> will interpret failures as being ok.
1437Should anything succeed, it will report it as an unexpected success.
1438You then know the thing you had todo is done and can remove the
1439TODO flag.
1440
1441The nice part about todo tests, as opposed to simply commenting out a
1442block of tests, is that it is like having a programmatic todo list. You know
1443how much work is left to be done, you're aware of what bugs there are,
1444and you'll know immediately when they're fixed.
1445
1446Once a todo test starts succeeding, simply move it outside the block.
1447When the block is empty, delete it.
1448
1449Note that, if you leave $TODO unset or undef, Test::More reports failures
1450as normal. This can be useful to mark the tests as expected to fail only
1451in certain conditions, e.g.:
1452
1453 TODO: {
1454 local $TODO = "$^O doesn't work yet. :(" if !_os_is_supported($^O);
1455
1456 ...
1457 }
1458
1459=item B<todo_skip>
1460
1461 TODO: {
1462 todo_skip $why, $how_many if $condition;
1463
1464 ...normal testing code...
1465 }
1466
1467With todo tests, it's best to have the tests actually run. That way
1468you'll know when they start passing. Sometimes this isn't possible.
1469Often a failing test will cause the whole program to die or hang, even
1470inside an C<eval BLOCK> with and using C<alarm>. In these extreme
1471cases you have no choice but to skip over the broken tests entirely.
1472
1473The syntax and behavior is similar to a C<SKIP: BLOCK> except the
1474tests will be marked as failing but todo. L<Test::Harness> will
1475interpret them as passing.
1476
1477=cut
1478
1479sub todo_skip {
1480 my( $why, $how_many ) = @_;
1481 my $tb = Test::More->builder;
1482
1483 unless( defined $how_many ) {
1484 # $how_many can only be avoided when no_plan is in use.
1485 _carp "todo_skip() needs to know \$how_many tests are in the block"
1486 unless $tb->has_plan eq 'no_plan';
1487 $how_many = 1;
1488 }
1489
1490 for( 1 .. $how_many ) {
1491 $tb->todo_skip($why);
1492 }
1493
14942569µs228µs
# spent 16µs (4+12) within Test::More::BEGIN@1494 which was called: # once (4µs+12µs) by main::BEGIN@5 at line 1494
no warnings 'exiting';
# spent 16µs making 1 call to Test::More::BEGIN@1494 # spent 12µs making 1 call to warnings::unimport
1495 last TODO;
1496}
1497
1498=item When do I use SKIP vs. TODO?
1499
1500B<If it's something the user might not be able to do>, use SKIP.
1501This includes optional modules that aren't installed, running under
1502an OS that doesn't have some feature (like C<fork()> or symlinks), or maybe
1503you need an Internet connection and one isn't available.
1504
1505B<If it's something the programmer hasn't done yet>, use TODO. This
1506is for any code you haven't written yet, or bugs you have yet to fix,
1507but want to put tests in your testing script (always a good idea).
1508
1509
1510=back
1511
1512
1513=head2 Test control
1514
1515=over 4
1516
1517=item B<BAIL_OUT>
1518
1519 BAIL_OUT($reason);
1520
1521Indicates to the harness that things are going so badly all testing
1522should terminate. This includes the running of any additional test scripts.
1523
1524This is typically used when testing cannot continue such as a critical
1525module failing to compile or a necessary external utility not being
1526available such as a database connection failing.
1527
1528The test will exit with 255.
1529
1530For even better control look at L<Test::Most>.
1531
1532=cut
1533
1534sub BAIL_OUT {
1535 my $reason = shift;
1536 my $tb = Test::More->builder;
1537
1538 $tb->BAIL_OUT($reason);
1539}
1540
1541=back
1542
1543
1544=head2 Discouraged comparison functions
1545
1546The use of the following functions is discouraged as they are not
1547actually testing functions and produce no diagnostics to help figure
1548out what went wrong. They were written before C<is_deeply()> existed
1549because I couldn't figure out how to display a useful diff of two
1550arbitrary data structures.
1551
1552These functions are usually used inside an C<ok()>.
1553
1554 ok( eq_array(\@got, \@expected) );
1555
1556C<is_deeply()> can do that better and with diagnostics.
1557
1558 is_deeply( \@got, \@expected );
1559
1560They may be deprecated in future versions.
1561
1562=over 4
1563
1564=item B<eq_array>
1565
1566 my $is_eq = eq_array(\@got, \@expected);
1567
1568Checks if two arrays are equivalent. This is a deep check, so
1569multi-level structures are handled correctly.
1570
1571=cut
1572
1573#'#
1574sub eq_array {
1575 local @Data_Stack = ();
1576 _deep_check(@_);
1577}
1578
1579sub _eq_array {
1580 my( $a1, $a2 ) = @_;
1581
1582 if( grep _type($_) ne 'ARRAY', $a1, $a2 ) {
1583 warn "eq_array passed a non-array ref";
1584 return 0;
1585 }
1586
1587 return 1 if $a1 eq $a2;
1588
1589 my $ok = 1;
1590 my $max = $#$a1 > $#$a2 ? $#$a1 : $#$a2;
1591 for( 0 .. $max ) {
1592 my $e1 = $_ > $#$a1 ? $DNE : $a1->[$_];
1593 my $e2 = $_ > $#$a2 ? $DNE : $a2->[$_];
1594
1595 next if _equal_nonrefs($e1, $e2);
1596
1597 push @Data_Stack, { type => 'ARRAY', idx => $_, vals => [ $e1, $e2 ] };
1598 $ok = _deep_check( $e1, $e2 );
1599 pop @Data_Stack if $ok;
1600
1601 last unless $ok;
1602 }
1603
1604 return $ok;
1605}
1606
1607sub _equal_nonrefs {
1608 my( $e1, $e2 ) = @_;
1609
1610 return if ref $e1 or ref $e2;
1611
1612 if ( defined $e1 ) {
1613 return 1 if defined $e2 and $e1 eq $e2;
1614 }
1615 else {
1616 return 1 if !defined $e2;
1617 }
1618
1619 return;
1620}
1621
1622sub _deep_check {
1623 my( $e1, $e2 ) = @_;
1624 my $tb = Test::More->builder;
1625
1626 my $ok = 0;
1627
1628 # Effectively turn %Refs_Seen into a stack. This avoids picking up
1629 # the same referenced used twice (such as [\$a, \$a]) to be considered
1630 # circular.
1631 local %Refs_Seen = %Refs_Seen;
1632
1633 {
1634 $tb->_unoverload_str( \$e1, \$e2 );
1635
1636 # Either they're both references or both not.
1637 my $same_ref = !( !ref $e1 xor !ref $e2 );
1638 my $not_ref = ( !ref $e1 and !ref $e2 );
1639
1640 if( defined $e1 xor defined $e2 ) {
1641 $ok = 0;
1642 }
1643 elsif( !defined $e1 and !defined $e2 ) {
1644 # Shortcut if they're both undefined.
1645 $ok = 1;
1646 }
1647 elsif( _dne($e1) xor _dne($e2) ) {
1648 $ok = 0;
1649 }
1650 elsif( $same_ref and( $e1 eq $e2 ) ) {
1651 $ok = 1;
1652 }
1653 elsif($not_ref) {
1654 push @Data_Stack, { type => '', vals => [ $e1, $e2 ] };
1655 $ok = 0;
1656 }
1657 else {
1658 if( $Refs_Seen{$e1} ) {
1659 return $Refs_Seen{$e1} eq $e2;
1660 }
1661 else {
1662 $Refs_Seen{$e1} = "$e2";
1663 }
1664
1665 my $type = _type($e1);
1666 $type = 'DIFFERENT' unless _type($e2) eq $type;
1667
1668 if( $type eq 'DIFFERENT' ) {
1669 push @Data_Stack, { type => $type, vals => [ $e1, $e2 ] };
1670 $ok = 0;
1671 }
1672 elsif( $type eq 'ARRAY' ) {
1673 $ok = _eq_array( $e1, $e2 );
1674 }
1675 elsif( $type eq 'HASH' ) {
1676 $ok = _eq_hash( $e1, $e2 );
1677 }
1678 elsif( $type eq 'REF' ) {
1679 push @Data_Stack, { type => $type, vals => [ $e1, $e2 ] };
1680 $ok = _deep_check( $$e1, $$e2 );
1681 pop @Data_Stack if $ok;
1682 }
1683 elsif( $type eq 'SCALAR' ) {
1684 push @Data_Stack, { type => 'REF', vals => [ $e1, $e2 ] };
1685 $ok = _deep_check( $$e1, $$e2 );
1686 pop @Data_Stack if $ok;
1687 }
1688 elsif($type) {
1689 push @Data_Stack, { type => $type, vals => [ $e1, $e2 ] };
1690 $ok = 0;
1691 }
1692 else {
1693 _whoa( 1, "No type in _deep_check" );
1694 }
1695 }
1696 }
1697
1698 return $ok;
1699}
1700
1701sub _whoa {
1702 my( $check, $desc ) = @_;
1703 if($check) {
1704 die <<"WHOA";
1705WHOA! $desc
1706This should never happen! Please contact the author immediately!
1707WHOA
1708 }
1709}
1710
1711=item B<eq_hash>
1712
1713 my $is_eq = eq_hash(\%got, \%expected);
1714
1715Determines if the two hashes contain the same keys and values. This
1716is a deep check.
1717
1718=cut
1719
1720sub eq_hash {
1721 local @Data_Stack = ();
1722 return _deep_check(@_);
1723}
1724
1725sub _eq_hash {
1726 my( $a1, $a2 ) = @_;
1727
1728 if( grep _type($_) ne 'HASH', $a1, $a2 ) {
1729 warn "eq_hash passed a non-hash ref";
1730 return 0;
1731 }
1732
1733 return 1 if $a1 eq $a2;
1734
1735 my $ok = 1;
1736 my $bigger = keys %$a1 > keys %$a2 ? $a1 : $a2;
1737 foreach my $k ( keys %$bigger ) {
1738 my $e1 = exists $a1->{$k} ? $a1->{$k} : $DNE;
1739 my $e2 = exists $a2->{$k} ? $a2->{$k} : $DNE;
1740
1741 next if _equal_nonrefs($e1, $e2);
1742
1743 push @Data_Stack, { type => 'HASH', idx => $k, vals => [ $e1, $e2 ] };
1744 $ok = _deep_check( $e1, $e2 );
1745 pop @Data_Stack if $ok;
1746
1747 last unless $ok;
1748 }
1749
1750 return $ok;
1751}
1752
1753=item B<eq_set>
1754
1755 my $is_eq = eq_set(\@got, \@expected);
1756
1757Similar to C<eq_array()>, except the order of the elements is B<not>
1758important. This is a deep check, but the irrelevancy of order only
1759applies to the top level.
1760
1761 ok( eq_set(\@got, \@expected) );
1762
1763Is better written:
1764
1765 is_deeply( [sort @got], [sort @expected] );
1766
1767B<NOTE> By historical accident, this is not a true set comparison.
1768While the order of elements does not matter, duplicate elements do.
1769
1770B<NOTE> C<eq_set()> does not know how to deal with references at the top
1771level. The following is an example of a comparison which might not work:
1772
1773 eq_set([\1, \2], [\2, \1]);
1774
1775L<Test::Deep> contains much better set comparison functions.
1776
1777=cut
1778
1779sub eq_set {
1780 my( $a1, $a2 ) = @_;
1781 return 0 unless @$a1 == @$a2;
1782
17832127µs262µs
# spent 34µs (5+28) within Test::More::BEGIN@1783 which was called: # once (5µs+28µs) by main::BEGIN@5 at line 1783
no warnings 'uninitialized';
# spent 34µs making 1 call to Test::More::BEGIN@1783 # spent 28µs making 1 call to warnings::unimport
1784
1785 # It really doesn't matter how we sort them, as long as both arrays are
1786 # sorted with the same algorithm.
1787 #
1788 # Ensure that references are not accidentally treated the same as a
1789 # string containing the reference.
1790 #
1791 # Have to inline the sort routine due to a threading/sort bug.
1792 # See [rt.cpan.org 6782]
1793 #
1794 # I don't know how references would be sorted so we just don't sort
1795 # them. This means eq_set doesn't really work with refs.
1796 return eq_array(
1797 [ grep( ref, @$a1 ), sort( grep( !ref, @$a1 ) ) ],
1798 [ grep( ref, @$a2 ), sort( grep( !ref, @$a2 ) ) ],
1799 );
1800}
1801
1802=back
1803
1804
1805=head2 Extending and Embedding Test::More
1806
1807Sometimes the Test::More interface isn't quite enough. Fortunately,
1808Test::More is built on top of L<Test::Builder> which provides a single,
1809unified backend for any test library to use. This means two test
1810libraries which both use L<Test::Builder> B<can> be used together in the
1811same program.
1812
1813If you simply want to do a little tweaking of how the tests behave,
1814you can access the underlying L<Test::Builder> object like so:
1815
1816=over 4
1817
1818=item B<builder>
1819
1820 my $test_builder = Test::More->builder;
1821
1822Returns the L<Test::Builder> object underlying Test::More for you to play
1823with.
1824
1825
1826=back
1827
1828
1829=head1 EXIT CODES
1830
1831If all your tests passed, L<Test::Builder> will exit with zero (which is
1832normal). If anything failed it will exit with how many failed. If
1833you run less (or more) tests than you planned, the missing (or extras)
1834will be considered failures. If no tests were ever run L<Test::Builder>
1835will throw a warning and exit with 255. If the test died, even after
1836having successfully completed all its tests, it will still be
1837considered a failure and will exit with 255.
1838
1839So the exit codes are...
1840
1841 0 all tests successful
1842 255 test died or all passed but wrong # of tests run
1843 any other number how many failed (including missing or extras)
1844
1845If you fail more than 254 tests, it will be reported as 254.
1846
1847B<NOTE> This behavior may go away in future versions.
1848
1849
1850=head1 COMPATIBILITY
1851
1852Test::More works with Perls as old as 5.8.1.
1853
1854Thread support is not very reliable before 5.10.1, but that's
1855because threads are not very reliable before 5.10.1.
1856
1857Although Test::More has been a core module in versions of Perl since 5.6.2, Test::More has evolved since then, and not all of the features you're used to will be present in the shipped version of Test::More. If you are writing a module, don't forget to indicate in your package metadata the minimum version of Test::More that you require. For instance, if you want to use C<done_testing()> but want your test script to run on Perl 5.10.0, you will need to explicitly require Test::More > 0.88.
1858
1859Key feature milestones include:
1860
1861=over 4
1862
1863=item subtests
1864
1865Subtests were released in Test::More 0.94, which came with Perl 5.12.0. Subtests did not implicitly call C<done_testing()> until 0.96; the first Perl with that fix was Perl 5.14.0 with 0.98.
1866
1867=item C<done_testing()>
1868
1869This was released in Test::More 0.88 and first shipped with Perl in 5.10.1 as part of Test::More 0.92.
1870
1871=item C<cmp_ok()>
1872
1873Although C<cmp_ok()> was introduced in 0.40, 0.86 fixed an important bug to make it safe for overloaded objects; the fixed first shipped with Perl in 5.10.1 as part of Test::More 0.92.
1874
1875=item C<new_ok()> C<note()> and C<explain()>
1876
1877These were was released in Test::More 0.82, and first shipped with Perl in 5.10.1 as part of Test::More 0.92.
1878
1879=back
1880
1881There is a full version history in the Changes file, and the Test::More versions included as core can be found using L<Module::CoreList>:
1882
1883 $ corelist -a Test::More
1884
1885
1886=head1 CAVEATS and NOTES
1887
1888=over 4
1889
1890=item utf8 / "Wide character in print"
1891
1892If you use utf8 or other non-ASCII characters with Test::More you
1893might get a "Wide character in print" warning. Using
1894C<< binmode STDOUT, ":utf8" >> will not fix it.
1895L<Test::Builder> (which powers
1896Test::More) duplicates STDOUT and STDERR. So any changes to them,
1897including changing their output disciplines, will not be seen by
1898Test::More.
1899
1900One work around is to apply encodings to STDOUT and STDERR as early
1901as possible and before Test::More (or any other Test module) loads.
1902
1903 use open ':std', ':encoding(utf8)';
1904 use Test::More;
1905
1906A more direct work around is to change the filehandles used by
1907L<Test::Builder>.
1908
1909 my $builder = Test::More->builder;
1910 binmode $builder->output, ":encoding(utf8)";
1911 binmode $builder->failure_output, ":encoding(utf8)";
1912 binmode $builder->todo_output, ":encoding(utf8)";
1913
1914
1915=item Overloaded objects
1916
1917String overloaded objects are compared B<as strings> (or in C<cmp_ok()>'s
1918case, strings or numbers as appropriate to the comparison op). This
1919prevents Test::More from piercing an object's interface allowing
1920better blackbox testing. So if a function starts returning overloaded
1921objects instead of bare strings your tests won't notice the
1922difference. This is good.
1923
1924However, it does mean that functions like C<is_deeply()> cannot be used to
1925test the internals of string overloaded objects. In this case I would
1926suggest L<Test::Deep> which contains more flexible testing functions for
1927complex data structures.
1928
1929
1930=item Threads
1931
1932Test::More will only be aware of threads if C<use threads> has been done
1933I<before> Test::More is loaded. This is ok:
1934
1935 use threads;
1936 use Test::More;
1937
1938This may cause problems:
1939
1940 use Test::More
1941 use threads;
1942
19435.8.1 and above are supported. Anything below that has too many bugs.
1944
1945=back
1946
1947
1948=head1 HISTORY
1949
1950This is a case of convergent evolution with Joshua Pritikin's L<Test>
1951module. I was largely unaware of its existence when I'd first
1952written my own C<ok()> routines. This module exists because I can't
1953figure out how to easily wedge test names into Test's interface (along
1954with a few other problems).
1955
1956The goal here is to have a testing utility that's simple to learn,
1957quick to use and difficult to trip yourself up with while still
1958providing more flexibility than the existing Test.pm. As such, the
1959names of the most common routines are kept tiny, special cases and
1960magic side-effects are kept to a minimum. WYSIWYG.
1961
1962
1963=head1 SEE ALSO
1964
1965=head2
1966
1967=head2 ALTERNATIVES
1968
1969L<Test2::Suite> is the most recent and modern set of tools for testing.
1970
1971L<Test::Simple> if all this confuses you and you just want to write
1972some tests. You can upgrade to Test::More later (it's forward
1973compatible).
1974
1975L<Test::Legacy> tests written with Test.pm, the original testing
1976module, do not play well with other testing libraries. Test::Legacy
1977emulates the Test.pm interface and does play well with others.
1978
1979=head2 ADDITIONAL LIBRARIES
1980
1981L<Test::Differences> for more ways to test complex data structures.
1982And it plays well with Test::More.
1983
1984L<Test::Class> is like xUnit but more perlish.
1985
1986L<Test::Deep> gives you more powerful complex data structure testing.
1987
1988L<Test::Inline> shows the idea of embedded testing.
1989
1990L<Mock::Quick> The ultimate mocking library. Easily spawn objects defined on
1991the fly. Can also override, block, or reimplement packages as needed.
1992
1993L<Test::FixtureBuilder> Quickly define fixture data for unit tests.
1994
1995=head2 OTHER COMPONENTS
1996
1997L<Test::Harness> is the test runner and output interpreter for Perl.
1998It's the thing that powers C<make test> and where the C<prove> utility
1999comes from.
2000
2001=head2 BUNDLES
2002
2003L<Test::Most> Most commonly needed test functions and features.
2004
2005=head1 AUTHORS
2006
2007Michael G Schwern E<lt>schwern@pobox.comE<gt> with much inspiration
2008from Joshua Pritikin's Test module and lots of help from Barrie
2009Slaymaker, Tony Bowden, blackstar.co.uk, chromatic, Fergal Daly and
2010the perl-qa gang.
2011
2012=head1 MAINTAINERS
2013
2014=over 4
2015
2016=item Chad Granum E<lt>exodist@cpan.orgE<gt>
2017
2018=back
2019
2020
2021=head1 BUGS
2022
2023See F<https://github.com/Test-More/test-more/issues> to report and view bugs.
2024
2025
2026=head1 SOURCE
2027
2028The source code repository for Test::More can be found at
2029F<http://github.com/Test-More/test-more/>.
2030
2031
2032=head1 COPYRIGHT
2033
2034Copyright 2001-2008 by Michael G Schwern E<lt>schwern@pobox.comE<gt>.
2035
2036This program is free software; you can redistribute it and/or
2037modify it under the same terms as Perl itself.
2038
2039See F<http://www.perl.com/perl/misc/Artistic.html>
2040
2041=cut
2042
204315µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Agile-pm-169-line.html0000644000175000017500000010150414576335353021726 0ustar michamicha Profile of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm
StatementsExecuted 7 statements in 371µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs12µsSpreadsheet::ParseXLSX::Decryptor::Agile::::BEGIN@3Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3
1113µs48µsSpreadsheet::ParseXLSX::Decryptor::Agile::::BEGIN@10Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10
1113µs19µsSpreadsheet::ParseXLSX::Decryptor::Agile::::BEGIN@4Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4
0000s0sSpreadsheet::ParseXLSX::Decryptor::Agile::::_generateDecryptionKeySpreadsheet::ParseXLSX::Decryptor::Agile::_generateDecryptionKey
0000s0sSpreadsheet::ParseXLSX::Decryptor::Agile::::_generateInitializationVectorSpreadsheet::ParseXLSX::Decryptor::Agile::_generateInitializationVector
0000s0sSpreadsheet::ParseXLSX::Decryptor::Agile::::decryptSpreadsheet::ParseXLSX::Decryptor::Agile::decrypt
0000s0sSpreadsheet::ParseXLSX::Decryptor::Agile::::decryptFileSpreadsheet::ParseXLSX::Decryptor::Agile::decryptFile
0000s0sSpreadsheet::ParseXLSX::Decryptor::Agile::::verifyPasswordSpreadsheet::ParseXLSX::Decryptor::Agile::verifyPassword
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Spreadsheet::ParseXLSX::Decryptor::Agile;
2
3217µs214µs
# spent 12µs (11+2) within Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3 which was called: # once (11µs+2µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 at line 3
use strict;
# spent 12µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3 # spent 2µs making 1 call to strict::import
4221µs235µs
# spent 19µs (3+16) within Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4 which was called: # once (3µs+16µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 at line 4
use warnings;
# spent 19µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@4 # spent 16µs making 1 call to warnings::import
5
6# VERSION
7
8# ABSTRACT: decryptor for files of version 4.4
9
102331µs293µs
# spent 48µs (3+45) within Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10 which was called: # once (3µs+45µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@19 at line 10
use base 'Spreadsheet::ParseXLSX::Decryptor';
# spent 48µs making 1 call to Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@10 # spent 45µs making 1 call to base::import
11
12sub decrypt {
13 my $self = shift;
14 my ($encryptedValue, $blockKey) = @_;
15
16 my $key = $self->_generateDecryptionKey($blockKey);
17 my $iv = $self->_generateInitializationVector('', $self->{blockSize});
18 my $cbc = Crypt::Mode::CBC->new($self->{cipherAlgorithm}, 0);
19 return $cbc->decrypt($encryptedValue, $key, $iv);
20}
21
22sub _generateDecryptionKey {
23 my $self = shift;
24 my ($blockKey) = @_;
25
26 my $hash;
27
28 unless ($self->{pregeneratedKey}) {
29 $hash = $self->{hashProc}->($self->{salt} . Encode::encode('UTF-16LE', $self->{password}));
30 for (my $i = 0 ; $i < $self->{spinCount} ; $i++) {
31 $hash = $self->{hashProc}->(pack('L<', $i) . $hash);
32 }
33 $self->{pregeneratedKey} = $hash;
34 }
35
36 $hash = $self->{hashProc}->($self->{pregeneratedKey} . $blockKey);
37
38 if (length($hash) > $self->{keyLength}) {
39 $hash = substr($hash, 0, $self->{keyLength});
40 } elsif (length($hash) < $self->{keyLength}) {
41 $hash .= "\x36" x ($self->{keyLength} - length($hash));
42 }
43 return $hash;
44}
45
46sub _generateInitializationVector {
47 my $self = shift;
48 my ($blockKey, $blockSize) = @_;
49
50 my $iv;
51 if ($blockKey) {
52 $iv = $self->{hashProc}->($self->{salt} . $blockKey);
53 } else {
54 $iv = $self->{salt};
55 }
56
57 if (length($iv) > $blockSize) {
58 $iv = substr($iv, 0, $blockSize);
59 } elsif (length($iv) < $blockSize) {
60 $iv = $iv . ("\x36" x ($blockSize - length($iv)));
61 }
62
63 return $iv;
64}
65
66sub decryptFile {
67 my $self = shift;
68 my ($inFile, $outFile, $bufferLength, $key, $fileSize) = @_;
69
70 my $cbc = Crypt::Mode::CBC->new($self->{cipherAlgorithm}, 0);
71
72 my $inbuf;
73 my $i = 0;
74
75 while (($fileSize > 0) && (my $inlen = $inFile->read($inbuf, $bufferLength))) {
76 my $blockId = pack('L<', $i);
77
78 my $iv = $self->_generateInitializationVector($blockId, $self->{blockSize});
79
80 if ($inlen < $bufferLength) {
81 $inbuf .= "\x00" x ($bufferLength - $inlen);
82 }
83
84 my $outbuf = $cbc->decrypt($inbuf, $key, $iv);
85 if ($fileSize < $inlen) {
86 $inlen = $fileSize;
87 }
88
89 $outFile->write($outbuf, $inlen);
90 $i++;
91 $fileSize -= $inlen;
92 }
93}
94
95sub verifyPassword {
96 my $self = shift;
97 my ($encryptedVerifier, $encryptedVerifierHash, $hashSize) = @_;
98
99 my $encryptedVerifierHash0 = $self->{hashProc}->($self->decrypt($encryptedVerifier, "\xfe\xa7\xd2\x76\x3b\x4b\x9e\x79"));
100 $encryptedVerifierHash = $self->decrypt($encryptedVerifierHash, "\xd7\xaa\x0f\x6d\x30\x61\x34\x4e");
101 $encryptedVerifierHash0 = substr($encryptedVerifierHash0, 0, $hashSize);
102 $encryptedVerifierHash = substr($encryptedVerifierHash, 0, $hashSize);
103
104 die "Wrong password: $self" unless ($encryptedVerifierHash0 eq $encryptedVerifierHash);
105}
106
107=begin Pod::Coverage
108
109 decrypt
110 decryptFile
111 verifyPassword
112
113=end Pod::Coverage
114
115=cut
116
11712µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-EventFacet-Assert-pm-44-line.html0000644000175000017500000004453414576335353025110 0ustar michamicha Profile of Test2/EventFacet/Assert.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/EventFacet/Assert.pm
StatementsExecuted 10 statements in 95µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs10µsTest2::EventFacet::Assert::::BEGIN@2Test2::EventFacet::Assert::BEGIN@2
1116µs6µsTest2::EventFacet::Assert::::BEGIN@7Test2::EventFacet::Assert::BEGIN@7
1114µs49µsTest2::EventFacet::Assert::::BEGIN@8Test2::EventFacet::Assert::BEGIN@8
1113µs19µsTest2::EventFacet::Assert::::BEGIN@3Test2::EventFacet::Assert::BEGIN@3
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::EventFacet::Assert;
2218µs212µs
# spent 10µs (9+2) within Test2::EventFacet::Assert::BEGIN@2 which was called: # once (9µs+2µs) by Test2::Event::BEGIN@16 at line 2
use strict;
# spent 10µs making 1 call to Test2::EventFacet::Assert::BEGIN@2 # spent 2µs making 1 call to strict::import
3235µs234µs
# spent 19µs (3+15) within Test2::EventFacet::Assert::BEGIN@3 which was called: # once (3µs+15µs) by Test2::Event::BEGIN@16 at line 3
use warnings;
# spent 19µs making 1 call to Test2::EventFacet::Assert::BEGIN@3 # spent 15µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7224µs16µs
# spent 6µs within Test2::EventFacet::Assert::BEGIN@7 which was called: # once (6µs+0s) by Test2::Event::BEGIN@16 at line 7
BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
# spent 6µs making 1 call to Test2::EventFacet::Assert::BEGIN@7
8216µs294µs
# spent 49µs (4+46) within Test2::EventFacet::Assert::BEGIN@8 which was called: # once (4µs+46µs) by Test2::Event::BEGIN@16 at line 8
use Test2::Util::HashBase qw{ -pass -no_debug -number };
# spent 49µs making 1 call to Test2::EventFacet::Assert::BEGIN@8 # spent 46µs making 1 call to Test2::Util::HashBase::import
9
1012µs1;
11
12__END__










Spreadsheet-ParseXLSX-0.35/nytprof/IO-Seekable-pm-78-line.html0000644000175000017500000011232414576335353022646 0ustar michamicha Profile of IO/Seekable.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/IO/Seekable.pm
StatementsExecuted 89 statements in 420µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.43ms1.92msIO::Seekable::::BEGIN@100IO::Seekable::BEGIN@100
2810233µs79µsIO::Seekable::::seekIO::Seekable::seek
93213µs15µsIO::Seekable::::tellIO::Seekable::tell
11111µs11µsIO::Seekable::::BEGIN@97IO::Seekable::BEGIN@97
1115µs26µsIO::Seekable::::BEGIN@103IO::Seekable::BEGIN@103
1114µs24µsIO::Seekable::::BEGIN@98IO::Seekable::BEGIN@98
1114µs5µsIO::Seekable::::BEGIN@99IO::Seekable::BEGIN@99
0000s0sIO::Seekable::::sysseekIO::Seekable::sysseek
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2
3package IO::Seekable;
4
5=head1 NAME
6
7IO::Seekable - supply seek based methods for I/O objects
8
9=head1 SYNOPSIS
10
11 use IO::Seekable;
12 package IO::Something;
13 @ISA = qw(IO::Seekable);
14
15=head1 DESCRIPTION
16
17C<IO::Seekable> does not have a constructor of its own as it is intended to
18be inherited by other C<IO::Handle> based objects. It provides methods
19which allow seeking of the file descriptors.
20
21=over 4
22
23=item $io->getpos
24
25Returns an opaque value that represents the current position of the
26IO::File, or C<undef> if this is not possible (eg an unseekable stream such
27as a terminal, pipe or socket). If the fgetpos() function is available in
28your C library it is used to implements getpos, else perl emulates getpos
29using C's ftell() function.
30
31=item $io->setpos
32
33Uses the value of a previous getpos call to return to a previously visited
34position. Returns "0 but true" on success, C<undef> on failure.
35
36=back
37
38See L<perlfunc> for complete descriptions of each of the following
39supported C<IO::Seekable> methods, which are just front ends for the
40corresponding built-in functions:
41
42=over 4
43
44=item $io->seek ( POS, WHENCE )
45
46Seek the IO::File to position POS, relative to WHENCE:
47
48=over 8
49
50=item WHENCE=0 (SEEK_SET)
51
52POS is absolute position. (Seek relative to the start of the file)
53
54=item WHENCE=1 (SEEK_CUR)
55
56POS is an offset from the current position. (Seek relative to current)
57
58=item WHENCE=2 (SEEK_END)
59
60POS is an offset from the end of the file. (Seek relative to end)
61
62=back
63
64The SEEK_* constants can be imported from the C<Fcntl> module if you
65don't wish to use the numbers C<0> C<1> or C<2> in your code.
66
67Returns C<1> upon success, C<0> otherwise.
68
69=item $io->sysseek( POS, WHENCE )
70
71Similar to $io->seek, but sets the IO::File's position using the system
72call lseek(2) directly, so will confuse most perl IO operators except
73sysread and syswrite (see L<perlfunc> for full details)
74
75Returns the new position, or C<undef> on failure. A position
76of zero is returned as the string C<"0 but true">
77
78=item $io->tell
79
80Returns the IO::File's current position, or -1 on error.
81
82=back
83
84=head1 SEE ALSO
85
86L<perlfunc>,
87L<perlop/"I/O Operators">,
88L<IO::Handle>
89L<IO::File>
90
91=head1 HISTORY
92
93Derived from FileHandle.pm by Graham Barr E<lt>gbarr@pobox.comE<gt>
94
95=cut
96
97230µs111µs
# spent 11µs within IO::Seekable::BEGIN@97 which was called: # once (11µs+0s) by IO::File::BEGIN@124 at line 97
use 5.008_001;
# spent 11µs making 1 call to IO::Seekable::BEGIN@97
98213µs243µs
# spent 24µs (4+20) within IO::Seekable::BEGIN@98 which was called: # once (4µs+20µs) by IO::File::BEGIN@124 at line 98
use Carp;
# spent 24µs making 1 call to IO::Seekable::BEGIN@98 # spent 20µs making 1 call to Exporter::import
99218µs26µs
# spent 5µs (4+1) within IO::Seekable::BEGIN@99 which was called: # once (4µs+1µs) by IO::File::BEGIN@124 at line 99
use strict;
# spent 5µs making 1 call to IO::Seekable::BEGIN@99 # spent 1µs making 1 call to strict::import
1002150µs11.92ms
# spent 1.92ms (1.43+486µs) within IO::Seekable::BEGIN@100 which was called: # once (1.43ms+486µs) by IO::File::BEGIN@124 at line 100
use IO::Handle ();
# spent 1.92ms making 1 call to IO::Seekable::BEGIN@100
101# XXX we can't get these from IO::Handle or we'll get prototype
102# mismatch warnings on C<use POSIX; use IO::File;> :-(
103284µs246µs
# spent 26µs (5+20) within IO::Seekable::BEGIN@103 which was called: # once (5µs+20µs) by IO::File::BEGIN@124 at line 103
use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END);
# spent 26µs making 1 call to IO::Seekable::BEGIN@103 # spent 20µs making 1 call to Exporter::import
1041300nsrequire Exporter;
105
1061800nsour @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END);
10718µsour @ISA = qw(Exporter);
108
1091200nsour $VERSION = "1.55";
110
111
# spent 79µs (33+46) within IO::Seekable::seek which was called 28 times, avg 3µs/call: # 7 times (8µs+16µs) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 157 of Archive/Zip/ZipFileMember.pm, avg 3µs/call # 7 times (10µs+10µs) by Archive::Zip::ZipFileMember::_seekToLocalHeader at line 67 of Archive/Zip/ZipFileMember.pm, avg 3µs/call # 7 times (6µs+11µs) by Archive::Zip::ZipFileMember::rewindData at line 458 of Archive/Zip/ZipFileMember.pm, avg 2µs/call # once (3µs+2µs) by Archive::Zip::Archive::readFromFileHandle at line 759 of Archive/Zip/Archive.pm # once (1µs+2µs) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 949 of Archive/Zip/Archive.pm # once (1µs+1µs) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 1026 of Archive/Zip/Archive.pm # once (1µs+1µs) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 1039 of Archive/Zip/Archive.pm # once (900ns+1µs) by Archive::Zip::Archive::readFromFileHandle at line 770 of Archive/Zip/Archive.pm # once (900ns+1µs) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 1053 of Archive/Zip/Archive.pm # once (900ns+1µs) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 862 of Archive/Zip/Archive.pm
sub seek {
112283µs @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)';
1132889µs2846µs seek($_[0], $_[1], $_[2]);
# spent 46µs making 28 calls to CORE::seek, avg 2µs/call
114}
115
116sub sysseek {
117 @_ == 3 or croak 'usage: $io->sysseek(POS, WHENCE)';
118 sysseek($_[0], $_[1], $_[2]);
119}
120
121
# spent 15µs (13+2) within IO::Seekable::tell which was called 9 times, avg 2µs/call: # 7 times (8µs+2µs) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 178 of Archive/Zip/ZipFileMember.pm, avg 1µs/call # once (4µs+400ns) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 1029 of Archive/Zip/Archive.pm # once (800ns+200ns) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 839 of Archive/Zip/Archive.pm
sub tell {
12292µs @_ == 1 or croak 'usage: $io->tell()';
123918µs92µs tell($_[0]);
# spent 2µs making 9 calls to CORE::tell, avg 233ns/call
124}
125
12613µs1;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 10)[Errno-pm-172]-92-line.html0000644000175000017500000003014214576335353023675 0ustar michamicha Profile of (eval 10)[Errno.pm:172]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 10)[/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Errno.pm:172]
StatementsExecuted 1 statements in 2µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Errno.pm line 172
Line State
ments
Time
on line
Calls Time
in subs
Code
112µssub ENOENT() { 2 }; 1
2;










Spreadsheet-ParseXLSX-0.35/nytprof/IO-Handle-pm-79-line.html0000644000175000017500000036546214576335353022344 0ustar michamicha Profile of IO/Handle.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/IO/Handle.pm
StatementsExecuted 368 statements in 2.32ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111222µs408µsIO::Handle::::BEGIN@276IO::Handle::BEGIN@276
5910472µs688µsIO::Handle::::readIO::Handle::read
91154µs83µsIO::Handle::::_open_mode_stringIO::Handle::_open_mode_string
692230µs30µsIO::Handle::::openedIO::Handle::opened
91124µs56µsIO::Handle::::newIO::Handle::new
81118µs22µsIO::Handle::::binmodeIO::Handle::binmode
11110µs10µsIO::Handle::::BEGIN@271IO::Handle::BEGIN@271
1117µs11µsIO::Handle::::BEGIN@617IO::Handle::BEGIN@617
7117µs7µsIO::Handle::::clearerrIO::Handle::clearerr (xsub)
1116µs6µsIO::Handle::::BEGIN@275IO::Handle::BEGIN@275
2225µs13µsIO::Handle::::closeIO::Handle::close
1114µs6µsIO::Handle::::BEGIN@272IO::Handle::BEGIN@272
1113µs25µsIO::Handle::::BEGIN@273IO::Handle::BEGIN@273
1113µs20µsIO::Handle::::BEGIN@274IO::Handle::BEGIN@274
111300ns300nsIO::Handle::::__ANON__IO::Handle::__ANON__ (xsub)
0000s0sIO::Handle::::DESTROYIO::Handle::DESTROY
0000s0sIO::Handle::::autoflushIO::Handle::autoflush
0000s0sIO::Handle::::constantIO::Handle::constant
0000s0sIO::Handle::::eofIO::Handle::eof
0000s0sIO::Handle::::fcntlIO::Handle::fcntl
0000s0sIO::Handle::::fdopenIO::Handle::fdopen
0000s0sIO::Handle::::filenoIO::Handle::fileno
0000s0sIO::Handle::::format_formfeedIO::Handle::format_formfeed
0000s0sIO::Handle::::format_line_break_charactersIO::Handle::format_line_break_characters
0000s0sIO::Handle::::format_lines_leftIO::Handle::format_lines_left
0000s0sIO::Handle::::format_lines_per_pageIO::Handle::format_lines_per_page
0000s0sIO::Handle::::format_nameIO::Handle::format_name
0000s0sIO::Handle::::format_page_numberIO::Handle::format_page_number
0000s0sIO::Handle::::format_top_nameIO::Handle::format_top_name
0000s0sIO::Handle::::format_writeIO::Handle::format_write
0000s0sIO::Handle::::formlineIO::Handle::formline
0000s0sIO::Handle::::getcIO::Handle::getc
0000s0sIO::Handle::::input_line_numberIO::Handle::input_line_number
0000s0sIO::Handle::::input_record_separatorIO::Handle::input_record_separator
0000s0sIO::Handle::::ioctlIO::Handle::ioctl
0000s0sIO::Handle::::new_from_fdIO::Handle::new_from_fd
0000s0sIO::Handle::::output_field_separatorIO::Handle::output_field_separator
0000s0sIO::Handle::::output_record_separatorIO::Handle::output_record_separator
0000s0sIO::Handle::::printIO::Handle::print
0000s0sIO::Handle::::printfIO::Handle::printf
0000s0sIO::Handle::::printflushIO::Handle::printflush
0000s0sIO::Handle::::sayIO::Handle::say
0000s0sIO::Handle::::statIO::Handle::stat
0000s0sIO::Handle::::sysreadIO::Handle::sysread
0000s0sIO::Handle::::syswriteIO::Handle::syswrite
0000s0sIO::Handle::::truncateIO::Handle::truncate
0000s0sIO::Handle::::writeIO::Handle::write
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package IO::Handle;
2
3=head1 NAME
4
5IO::Handle - supply object methods for I/O handles
6
7=head1 SYNOPSIS
8
9 use IO::Handle;
10
11 my $io = IO::Handle->new();
12 if ($io->fdopen(fileno(STDIN),"r")) {
13 print $io->getline;
14 $io->close;
15 }
16
17 my $io = IO::Handle->new();
18 if ($io->fdopen(fileno(STDOUT),"w")) {
19 $io->print("Some text\n");
20 }
21
22 # setvbuf is not available by default on Perls 5.8.0 and later.
23 use IO::Handle '_IOLBF';
24 $io->setvbuf(my $buffer_var, _IOLBF, 1024);
25
26 undef $io; # automatically closes the file if it's open
27
28 autoflush STDOUT 1;
29
30=head1 DESCRIPTION
31
32C<IO::Handle> is the base class for all other IO handle classes. It is
33not intended that objects of C<IO::Handle> would be created directly,
34but instead C<IO::Handle> is inherited from by several other classes
35in the IO hierarchy.
36
37If you are reading this documentation, looking for a replacement for
38the C<FileHandle> package, then I suggest you read the documentation
39for C<IO::File> too.
40
41=head1 CONSTRUCTOR
42
43=over 4
44
45=item new ()
46
47Creates a new C<IO::Handle> object.
48
49=item new_from_fd ( FD, MODE )
50
51Creates an C<IO::Handle> like C<new> does.
52It requires two parameters, which are passed to the method C<fdopen>;
53if the fdopen fails, the object is destroyed. Otherwise, it is returned
54to the caller.
55
56=back
57
58=head1 METHODS
59
60See L<perlfunc> for complete descriptions of each of the following
61supported C<IO::Handle> methods, which are just front ends for the
62corresponding built-in functions:
63
64 $io->close
65 $io->eof
66 $io->fcntl( FUNCTION, SCALAR )
67 $io->fileno
68 $io->format_write( [FORMAT_NAME] )
69 $io->getc
70 $io->ioctl( FUNCTION, SCALAR )
71 $io->read ( BUF, LEN, [OFFSET] )
72 $io->print ( ARGS )
73 $io->printf ( FMT, [ARGS] )
74 $io->say ( ARGS )
75 $io->stat
76 $io->sysread ( BUF, LEN, [OFFSET] )
77 $io->syswrite ( BUF, [LEN, [OFFSET]] )
78 $io->truncate ( LEN )
79
80See L<perlvar> for complete descriptions of each of the following
81supported C<IO::Handle> methods. All of them return the previous
82value of the attribute and takes an optional single argument that when
83given will set the value. If no argument is given the previous value
84is unchanged (except for $io->autoflush will actually turn ON
85autoflush by default).
86
87 $io->autoflush ( [BOOL] ) $|
88 $io->format_page_number( [NUM] ) $%
89 $io->format_lines_per_page( [NUM] ) $=
90 $io->format_lines_left( [NUM] ) $-
91 $io->format_name( [STR] ) $~
92 $io->format_top_name( [STR] ) $^
93 $io->input_line_number( [NUM]) $.
94
95The following methods are not supported on a per-filehandle basis.
96
97 IO::Handle->format_line_break_characters( [STR] ) $:
98 IO::Handle->format_formfeed( [STR]) $^L
99 IO::Handle->output_field_separator( [STR] ) $,
100 IO::Handle->output_record_separator( [STR] ) $\
101
102 IO::Handle->input_record_separator( [STR] ) $/
103
104Furthermore, for doing normal I/O you might need these:
105
106=over 4
107
108=item $io->fdopen ( FD, MODE )
109
110C<fdopen> is like an ordinary C<open> except that its first parameter
111is not a filename but rather a file handle name, an IO::Handle object,
112or a file descriptor number. (For the documentation of the C<open>
113method, see L<IO::File>.)
114
115=item $io->opened
116
117Returns true if the object is currently a valid file descriptor, false
118otherwise.
119
120=item $io->getline
121
122This works like <$io> described in L<perlop/"I/O Operators">
123except that it's more readable and can be safely called in a
124list context but still returns just one line. If used as the conditional
125within a C<while> or C-style C<for> loop, however, you will need to
126emulate the functionality of <$io> with C<< defined($_ = $io->getline) >>.
127
128=item $io->getlines
129
130This works like <$io> when called in a list context to read all
131the remaining lines in a file, except that it's more readable.
132It will also croak() if accidentally called in a scalar context.
133
134=item $io->ungetc ( ORD )
135
136Pushes a character with the given ordinal value back onto the given
137handle's input stream. Only one character of pushback per handle is
138guaranteed.
139
140=item $io->write ( BUF, LEN [, OFFSET ] )
141
142This C<write> is somewhat like C<write> found in C, in that it is the
143opposite of read. The wrapper for the perl C<write> function is
144called C<format_write>. However, whilst the C C<write> function returns
145the number of bytes written, this C<write> function simply returns true
146if successful (like C<print>). A more C-like C<write> is C<syswrite>
147(see above).
148
149=item $io->error
150
151Returns a true value if the given handle has experienced any errors
152since it was opened or since the last call to C<clearerr>, or if the
153handle is invalid. It only returns false for a valid handle with no
154outstanding errors.
155
156=item $io->clearerr
157
158Clear the given handle's error indicator. Returns -1 if the handle is
159invalid, 0 otherwise.
160
161=item $io->sync
162
163C<sync> synchronizes a file's in-memory state with that on the
164physical medium. C<sync> does not operate at the perlio api level, but
165operates on the file descriptor (similar to sysread, sysseek and
166systell). This means that any data held at the perlio api level will not
167be synchronized. To synchronize data that is buffered at the perlio api
168level you must use the flush method. C<sync> is not implemented on all
169platforms. Returns "0 but true" on success, C<undef> on error, C<undef>
170for an invalid handle. See L<fsync(3c)>.
171
172=item $io->flush
173
174C<flush> causes perl to flush any buffered data at the perlio api level.
175Any unread data in the buffer will be discarded, and any unwritten data
176will be written to the underlying file descriptor. Returns "0 but true"
177on success, C<undef> on error.
178
179=item $io->printflush ( ARGS )
180
181Turns on autoflush, print ARGS and then restores the autoflush status of the
182C<IO::Handle> object. Returns the return value from print.
183
184=item $io->blocking ( [ BOOL ] )
185
186If called with an argument C<blocking> will turn on non-blocking IO if
187C<BOOL> is false, and turn it off if C<BOOL> is true.
188
189C<blocking> will return the value of the previous setting, or the
190current setting if C<BOOL> is not given.
191
192If an error occurs C<blocking> will return undef and C<$!> will be set.
193
194=item binmode( [LAYER] )
195
196C<binmode> sets C<binmode> on the underlying C<IO> object, as documented
197in C<perldoc -f binmode>.
198
199C<binmode> accepts one optional parameter, which is the layer to be
200passed on to the C<binmode> call.
201
202=back
203
204
205If the C functions setbuf() and/or setvbuf() are available, then
206C<IO::Handle::setbuf> and C<IO::Handle::setvbuf> set the buffering
207policy for an IO::Handle. The calling sequences for the Perl functions
208are the same as their C counterparts--including the constants C<_IOFBF>,
209C<_IOLBF>, and C<_IONBF> for setvbuf()--except that the buffer parameter
210specifies a scalar variable to use as a buffer. You should only
211change the buffer before any I/O, or immediately after calling flush.
212
213WARNING: The IO::Handle::setvbuf() is not available by default on
214Perls 5.8.0 and later because setvbuf() is rather specific to using
215the stdio library, while Perl prefers the new perlio subsystem instead.
216
217WARNING: A variable used as a buffer by C<setbuf> or C<setvbuf> B<must not
218be modified> in any way until the IO::Handle is closed or C<setbuf> or
219C<setvbuf> is called again, or memory corruption may result! Remember that
220the order of global destruction is undefined, so even if your buffer
221variable remains in scope until program termination, it may be undefined
222before the file IO::Handle is closed. Note that you need to import the
223constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
224returns nothing. setvbuf returns "0 but true", on success, C<undef> on
225failure.
226
227Lastly, there is a special method for working under B<-T> and setuid/gid
228scripts:
229
230=over 4
231
232=item $io->untaint
233
234Marks the object as taint-clean, and as such data read from it will also
235be considered taint-clean. Note that this is a very trusting action to
236take, and appropriate consideration for the data source and potential
237vulnerability should be kept in mind. Returns 0 on success, -1 if setting
238the taint-clean flag failed. (eg invalid handle)
239
240=back
241
242=head1 NOTE
243
244An C<IO::Handle> object is a reference to a symbol/GLOB reference (see
245the L<Symbol> package). Some modules that
246inherit from C<IO::Handle> may want to keep object related variables
247in the hash table part of the GLOB. In an attempt to prevent modules
248trampling on each other I propose the that any such module should prefix
249its variables with its own name separated by _'s. For example the IO::Socket
250module keeps a C<timeout> variable in 'io_socket_timeout'.
251
252=head1 SEE ALSO
253
254L<perlfunc>,
255L<perlop/"I/O Operators">,
256L<IO::File>
257
258=head1 BUGS
259
260Due to backwards compatibility, all filehandles resemble objects
261of class C<IO::Handle>, or actually classes derived from that class.
262They actually aren't. Which means you can't derive your own
263class from C<IO::Handle> and inherit those methods.
264
265=head1 HISTORY
266
267Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
268
269=cut
270
271242µs110µs
# spent 10µs within IO::Handle::BEGIN@271 which was called: # once (10µs+0s) by IO::Seekable::BEGIN@100 at line 271
use 5.008_001;
# spent 10µs making 1 call to IO::Handle::BEGIN@271
272214µs27µs
# spent 6µs (4+1) within IO::Handle::BEGIN@272 which was called: # once (4µs+1µs) by IO::Seekable::BEGIN@100 at line 272
use strict;
# spent 6µs making 1 call to IO::Handle::BEGIN@272 # spent 1µs making 1 call to strict::import
273213µs248µs
# spent 25µs (3+22) within IO::Handle::BEGIN@273 which was called: # once (3µs+22µs) by IO::Seekable::BEGIN@100 at line 273
use Carp;
# spent 25µs making 1 call to IO::Handle::BEGIN@273 # spent 22µs making 1 call to Exporter::import
274215µs236µs
# spent 20µs (3+17) within IO::Handle::BEGIN@274 which was called: # once (3µs+17µs) by IO::Seekable::BEGIN@100 at line 274
use Symbol;
# spent 20µs making 1 call to IO::Handle::BEGIN@274 # spent 17µs making 1 call to Exporter::import
275214µs26µs
# spent 6µs (6+300ns) within IO::Handle::BEGIN@275 which was called: # once (6µs+300ns) by IO::Seekable::BEGIN@100 at line 275
use SelectSaver;
# spent 6µs making 1 call to IO::Handle::BEGIN@275 # spent 300ns making 1 call to IO::Handle::__ANON__
27621.13ms1408µs
# spent 408µs (222+186) within IO::Handle::BEGIN@276 which was called: # once (222µs+186µs) by IO::Seekable::BEGIN@100 at line 276
use IO (); # Load the XS module
# spent 408µs making 1 call to IO::Handle::BEGIN@276
277
2781500nsrequire Exporter;
27919µsour @ISA = qw(Exporter);
280
2811300nsour $VERSION = "1.55";
282
28311µsour @EXPORT_OK = qw(
284 autoflush
285 output_field_separator
286 output_record_separator
287 input_record_separator
288 input_line_number
289 format_page_number
290 format_lines_per_page
291 format_lines_left
292 format_name
293 format_top_name
294 format_line_break_characters
295 format_formfeed
296 format_write
297
298 print
299 printf
300 say
301 getline
302 getlines
303
304 printflush
305 flush
306
307 SEEK_SET
308 SEEK_CUR
309 SEEK_END
310 _IOFBF
311 _IOLBF
312 _IONBF
313);
314
315################################################
316## Constructors, destructors.
317##
318
319
# spent 56µs (24+32) within IO::Handle::new which was called 9 times, avg 6µs/call: # 9 times (24µs+32µs) by IO::File::new at line 151 of IO/File.pm, avg 6µs/call
sub new {
32093µs my $class = ref($_[0]) || $_[0] || "IO::Handle";
32192µs if (@_ != 1) {
322 # Since perl will automatically require IO::File if needed, but
323 # also initialises IO::File's @ISA as part of the core we must
324 # ensure IO::File is loaded if IO::Handle is. This avoids effect-
325 # ively "half-loading" IO::File.
326 if ($] > 5.013 && $class eq 'IO::File' && !$INC{"IO/File.pm"}) {
327 require IO::File;
328 shift;
329 return IO::File::->new(@_);
330 }
331 croak "usage: $class->new()";
332 }
33397µs932µs my $io = gensym;
# spent 32µs making 9 calls to Symbol::gensym, avg 4µs/call
334912µs bless $io, $class;
335}
336
337sub new_from_fd {
338 my $class = ref($_[0]) || $_[0] || "IO::Handle";
339 @_ == 3 or croak "usage: $class->new_from_fd(FD, MODE)";
340 my $io = gensym;
341 shift;
342 IO::Handle::fdopen($io, @_)
343 or return undef;
344 bless $io, $class;
345}
346
347#
348# There is no need for DESTROY to do anything, because when the
349# last reference to an IO object is gone, Perl automatically
350# closes its associated files (if any). However, to avoid any
351# attempts to autoload DESTROY, we here define it to do nothing.
352#
353sub DESTROY {}
354
355
356################################################
357## Open and close.
358##
359
360
# spent 83µs (54+30) within IO::Handle::_open_mode_string which was called 9 times, avg 9µs/call: # 9 times (54µs+30µs) by IO::File::open at line 175 of IO/File.pm, avg 9µs/call
sub _open_mode_string {
36193µs my ($mode) = @_;
362972µs3630µs $mode =~ /^\+?(<|>>?)$/
# spent 10µs making 9 calls to CORE::subst, avg 1µs/call # spent 10µs making 18 calls to CORE::substcont, avg 544ns/call # spent 10µs making 9 calls to CORE::match, avg 1µs/call
363 or $mode =~ s/^r(\+?)$/$1</
364 or $mode =~ s/^w(\+?)$/$1>/
365 or $mode =~ s/^a(\+?)$/$1>>/
366 or croak "IO::Handle: bad open mode: $mode";
367912µs $mode;
368}
369
370sub fdopen {
371 @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
372 my ($io, $fd, $mode) = @_;
373 local(*GLOB);
374
375 if (ref($fd) && "$fd" =~ /GLOB\(/o) {
376 # It's a glob reference; Alias it as we cannot get name of anon GLOBs
377 my $n = qualify(*GLOB);
378 *GLOB = *{*$fd};
379 $fd = $n;
380 } elsif ($fd =~ m#^\d+$#) {
381 # It's an FD number; prefix with "=".
382 $fd = "=$fd";
383 }
384
385 open($io, _open_mode_string($mode) . '&' . $fd)
386 ? $io : undef;
387}
388
389
# spent 13µs (5+8) within IO::Handle::close which was called 2 times, avg 7µs/call: # once (4µs+4µs) by Spreadsheet::ParseXLSX::_check_signature at line 124 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (2µs+4µs) by Archive::Zip::Archive::read at line 732 of Archive/Zip/Archive.pm
sub close {
3902600ns @_ == 1 or croak 'usage: $io->close()';
3912600ns my($io) = @_;
392
393213µs28µs close($io);
# spent 8µs making 2 calls to CORE::close, avg 4µs/call
394}
395
396################################################
397## Normal I/O functions.
398##
399
400# flock
401# select
402
403
# spent 30µs within IO::Handle::opened which was called 69 times, avg 430ns/call: # 68 times (28µs+0s) by Archive::Zip::FileMember::fh at line 31 of Archive/Zip/FileMember.pm, avg 412ns/call # once (2µs+0s) by Archive::Zip::Archive::readFromFileHandle at line 750 of Archive/Zip/Archive.pm
sub opened {
404696µs @_ == 1 or croak 'usage: $io->opened()';
4056954µs defined fileno($_[0]);
406}
407
408sub fileno {
409 @_ == 1 or croak 'usage: $io->fileno()';
410 fileno($_[0]);
411}
412
413sub getc {
414 @_ == 1 or croak 'usage: $io->getc()';
415 getc($_[0]);
416}
417
418sub eof {
419 @_ == 1 or croak 'usage: $io->eof()';
420 eof($_[0]);
421}
422
423sub print {
424 @_ or croak 'usage: $io->print(ARGS)';
425 my $this = shift;
426 print $this @_;
427}
428
429sub printf {
430 @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
431 my $this = shift;
432 printf $this @_;
433}
434
435sub say {
436 @_ or croak 'usage: $io->say(ARGS)';
437 my $this = shift;
438 local $\ = "\n";
439 print $this @_;
440}
441
442sub truncate {
443 @_ == 2 or croak 'usage: $io->truncate(LEN)';
444 truncate($_[0], $_[1]);
445}
446
447
# spent 688µs (72+617) within IO::Handle::read which was called 59 times, avg 12µs/call: # 19 times (27µs+43µs) by Archive::Zip::_readSignature at line 516 of Archive/Zip.pm, avg 4µs/call # 10 times (9µs+4µs) by Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader at line 371 of Archive/Zip/ZipFileMember.pm, avg 1µs/call # 10 times (9µs+2µs) by Archive::Zip::ZipFileMember::_readCentralDirectoryFileHeader at line 398 of Archive/Zip/ZipFileMember.pm, avg 1µs/call # 7 times (10µs+548µs) by Archive::Zip::ZipFileMember::_readRawChunk at line 470 of Archive/Zip/ZipFileMember.pm, avg 80µs/call # 7 times (7µs+2µs) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 138 of Archive/Zip/ZipFileMember.pm, avg 1µs/call # 2 times (2µs+4µs) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 165 of Archive/Zip/ZipFileMember.pm, avg 3µs/call # once (4µs+9µs) by Spreadsheet::ParseXLSX::_check_signature at line 123 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm # once (2µs+3µs) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 1041 of Archive/Zip/Archive.pm # once (1µs+1µs) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 953 of Archive/Zip/Archive.pm # once (1µs+400ns) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 884 of Archive/Zip/Archive.pm
sub read {
448596µs @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
44959710µs59617µs read($_[0], $_[1], $_[2], $_[3] || 0);
# spent 617µs making 59 calls to CORE::read, avg 10µs/call
450}
451
452sub sysread {
453 @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
454 sysread($_[0], $_[1], $_[2], $_[3] || 0);
455}
456
457sub write {
458 @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
459 local($\) = "";
460 $_[2] = length($_[1]) unless defined $_[2];
461 print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
462}
463
464sub syswrite {
465 @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
466 if (defined($_[2])) {
467 syswrite($_[0], $_[1], $_[2], $_[3] || 0);
468 } else {
469 syswrite($_[0], $_[1]);
470 }
471}
472
473sub stat {
474 @_ == 1 or croak 'usage: $io->stat()';
475 stat($_[0]);
476}
477
478################################################
479## State modification functions.
480##
481
482sub autoflush {
483 my $old = SelectSaver->new(qualify($_[0], caller));
484 my $prev = $|;
485 $| = @_ > 1 ? $_[1] : 1;
486 $prev;
487}
488
489sub output_field_separator {
490 carp "output_field_separator is not supported on a per-handle basis"
491 if ref($_[0]);
492 my $prev = $,;
493 $, = $_[1] if @_ > 1;
494 $prev;
495}
496
497sub output_record_separator {
498 carp "output_record_separator is not supported on a per-handle basis"
499 if ref($_[0]);
500 my $prev = $\;
501 $\ = $_[1] if @_ > 1;
502 $prev;
503}
504
505sub input_record_separator {
506 carp "input_record_separator is not supported on a per-handle basis"
507 if ref($_[0]);
508 my $prev = $/;
509 $/ = $_[1] if @_ > 1;
510 $prev;
511}
512
513sub input_line_number {
514 local $.;
515 () = tell qualify($_[0], caller) if ref($_[0]);
516 my $prev = $.;
517 $. = $_[1] if @_ > 1;
518 $prev;
519}
520
521sub format_page_number {
522 my $old;
523 $old = SelectSaver->new(qualify($_[0], caller)) if ref($_[0]);
524 my $prev = $%;
525 $% = $_[1] if @_ > 1;
526 $prev;
527}
528
529sub format_lines_per_page {
530 my $old;
531 $old = SelectSaver->new(qualify($_[0], caller)) if ref($_[0]);
532 my $prev = $=;
533 $= = $_[1] if @_ > 1;
534 $prev;
535}
536
537sub format_lines_left {
538 my $old;
539 $old = SelectSaver->new(qualify($_[0], caller)) if ref($_[0]);
540 my $prev = $-;
541 $- = $_[1] if @_ > 1;
542 $prev;
543}
544
545sub format_name {
546 my $old;
547 $old = SelectSaver->new(qualify($_[0], caller)) if ref($_[0]);
548 my $prev = $~;
549 $~ = qualify($_[1], caller) if @_ > 1;
550 $prev;
551}
552
553sub format_top_name {
554 my $old;
555 $old = SelectSaver->new(qualify($_[0], caller)) if ref($_[0]);
556 my $prev = $^;
557 $^ = qualify($_[1], caller) if @_ > 1;
558 $prev;
559}
560
561sub format_line_break_characters {
562 carp "format_line_break_characters is not supported on a per-handle basis"
563 if ref($_[0]);
564 my $prev = $:;
565 $: = $_[1] if @_ > 1;
566 $prev;
567}
568
569sub format_formfeed {
570 carp "format_formfeed is not supported on a per-handle basis"
571 if ref($_[0]);
572 my $prev = $^L;
573 $^L = $_[1] if @_ > 1;
574 $prev;
575}
576
577sub formline {
578 my $io = shift;
579 my $picture = shift;
580 local($^A) = $^A;
581 local($\) = "";
582 formline($picture, @_);
583 print $io $^A;
584}
585
586sub format_write {
587 @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
588 if (@_ == 2) {
589 my ($io, $fmt) = @_;
590 my $oldfmt = $io->format_name(qualify($fmt,caller));
591 CORE::write($io);
592 $io->format_name($oldfmt);
593 } else {
594 CORE::write($_[0]);
595 }
596}
597
598sub fcntl {
599 @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
600 my ($io, $op) = @_;
601 return fcntl($io, $op, $_[2]);
602}
603
604sub ioctl {
605 @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
606 my ($io, $op) = @_;
607 return ioctl($io, $op, $_[2]);
608}
609
610# this sub is for compatibility with older releases of IO that used
611# a sub called constant to determine if a constant existed -- GMB
612#
613# The SEEK_* and _IO?BF constants were the only constants at that time
614# any new code should just check defined(&CONSTANT_NAME)
615
616sub constant {
6172158µs216µs
# spent 11µs (7+4) within IO::Handle::BEGIN@617 which was called: # once (7µs+4µs) by IO::Seekable::BEGIN@100 at line 617
no strict 'refs';
# spent 11µs making 1 call to IO::Handle::BEGIN@617 # spent 4µs making 1 call to strict::unimport
618 my $name = shift;
619 (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
620 ? &{$name}() : undef;
621}
622
623
624# so that flush.pl can be deprecated
625
626sub printflush {
627 my $io = shift;
628 my $old;
629 $old = SelectSaver->new(qualify($io, caller)) if ref($io);
630 local $| = 1;
631 if(ref($io)) {
632 print $io @_;
633 }
634 else {
635 print @_;
636 }
637}
638
639################################################
640## Binmode
641##
642
643
# spent 22µs (18+4) within IO::Handle::binmode which was called 8 times, avg 3µs/call: # 8 times (18µs+4µs) by Archive::Zip::_binmode at line 432 of Archive/Zip.pm, avg 3µs/call
sub binmode {
64482µs ( @_ == 1 or @_ == 2 ) or croak 'usage $fh->binmode([LAYER])';
645
64682µs my($fh, $layer) = @_;
647
648822µs84µs return binmode $$fh unless $layer;
# spent 4µs making 8 calls to CORE::binmode, avg 562ns/call
649 return binmode $$fh, $layer;
650}
651
65214µs1;
 
# spent 300ns within IO::Handle::__ANON__ which was called: # once (300ns+0s) by IO::Handle::BEGIN@275 at line 275
sub IO::Handle::__ANON__; # xsub
# spent 7µs within IO::Handle::clearerr which was called 7 times, avg 957ns/call: # 7 times (7µs+0s) by Archive::Zip::ZipFileMember::rewindData at line 445 of Archive/Zip/ZipFileMember.pm, avg 957ns/call
sub IO::Handle::clearerr; # xsub










Spreadsheet-ParseXLSX-0.35/nytprof/Test-Builder-TodoDiag-pm-70-line.html0000644000175000017500000004570114576335353024615 0ustar michamicha Profile of Test/Builder/TodoDiag.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder/TodoDiag.pm
StatementsExecuted 8 statements in 120µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsTest::Builder::TodoDiag::::BEGIN@2Test::Builder::TodoDiag::BEGIN@2
1117µs7µsTest::Builder::TodoDiag::::BEGIN@7Test::Builder::TodoDiag::BEGIN@7
1113µs20µsTest::Builder::TodoDiag::::BEGIN@3Test::Builder::TodoDiag::BEGIN@3
0000s0sTest::Builder::TodoDiag::::diagnosticsTest::Builder::TodoDiag::diagnostics
0000s0sTest::Builder::TodoDiag::::facet_dataTest::Builder::TodoDiag::facet_data
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test::Builder::TodoDiag;
2218µs213µs
# spent 11µs (10+2) within Test::Builder::TodoDiag::BEGIN@2 which was called: # once (10µs+2µs) by Test::Builder::BEGIN@37 at line 2
use strict;
# spent 11µs making 1 call to Test::Builder::TodoDiag::BEGIN@2 # spent 2µs making 1 call to strict::import
3232µs237µs
# spent 20µs (3+17) within Test::Builder::TodoDiag::BEGIN@3 which was called: # once (3µs+17µs) by Test::Builder::BEGIN@37 at line 3
use warnings;
# spent 20µs making 1 call to Test::Builder::TodoDiag::BEGIN@3 # spent 17µs making 1 call to warnings::import
4
51200nsour $VERSION = '1.302198';
6
7268µs17µs
# spent 7µs within Test::Builder::TodoDiag::BEGIN@7 which was called: # once (7µs+0s) by Test::Builder::BEGIN@37 at line 7
BEGIN { require Test2::Event::Diag; our @ISA = qw(Test2::Event::Diag) }
# spent 7µs making 1 call to Test::Builder::TodoDiag::BEGIN@7
8
9sub diagnostics { 0 }
10
11sub facet_data {
12 my $self = shift;
13 my $out = $self->SUPER::facet_data();
14 $out->{info}->[0]->{debug} = 0;
15 return $out;
16}
17
1812µs1;
19
20__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Digest-SHA-pm-165-line.html0000644000175000017500000016545414576335353022547 0ustar michamicha Profile of Digest/SHA.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/x86_64-linux/Digest/SHA.pm
StatementsExecuted 30 statements in 1.25ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119µs10µsDigest::SHA::::BEGIN@5Digest::SHA::BEGIN@5
1118µs10µsDigest::SHA::::BEGIN@202Digest::SHA::BEGIN@202
1115µs19µsDigest::SHA::::BEGIN@9Digest::SHA::BEGIN@9
1115µs7µsDigest::SHA::::BEGIN@10Digest::SHA::BEGIN@10
1114µs31µsDigest::SHA::::BEGIN@7Digest::SHA::BEGIN@7
1114µs20µsDigest::SHA::::BEGIN@8Digest::SHA::BEGIN@8
1113µs3µsDigest::SHA::::BEGIN@56Digest::SHA::BEGIN@56
1113µs18µsDigest::SHA::::BEGIN@6Digest::SHA::BEGIN@6
0000s0sDigest::SHA::::_addfileDigest::SHA::_addfile
0000s0sDigest::SHA::::_bailDigest::SHA::_bail
0000s0sDigest::SHA::::_istextDigest::SHA::_istext
0000s0sDigest::SHA::::add_bitsDigest::SHA::add_bits
0000s0sDigest::SHA::::addfileDigest::SHA::addfile
0000s0sDigest::SHA::::dumpDigest::SHA::dump
0000s0sDigest::SHA::::getstateDigest::SHA::getstate
0000s0sDigest::SHA::::loadDigest::SHA::load
0000s0sDigest::SHA::::newDigest::SHA::new
0000s0sDigest::SHA::::putstateDigest::SHA::putstate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Digest::SHA;
2
316µsrequire 5.003000;
4
5216µs212µs
# spent 10µs (9+1) within Digest::SHA::BEGIN@5 which was called: # once (9µs+1µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 5
use strict;
# spent 10µs making 1 call to Digest::SHA::BEGIN@5 # spent 1µs making 1 call to strict::import
6222µs232µs
# spent 18µs (3+15) within Digest::SHA::BEGIN@6 which was called: # once (3µs+15µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 6
use warnings;
# spent 18µs making 1 call to Digest::SHA::BEGIN@6 # spent 15µs making 1 call to warnings::import
7216µs258µs
# spent 31µs (4+27) within Digest::SHA::BEGIN@7 which was called: # once (4µs+27µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 7
use vars qw($VERSION @ISA @EXPORT_OK $errmsg);
# spent 31µs making 1 call to Digest::SHA::BEGIN@7 # spent 27µs making 1 call to vars::import
8214µs236µs
# spent 20µs (4+16) within Digest::SHA::BEGIN@8 which was called: # once (4µs+16µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 8
use Fcntl qw(O_RDONLY O_RDWR);
# spent 20µs making 1 call to Digest::SHA::BEGIN@8 # spent 16µs making 1 call to Exporter::import
9216µs234µs
# spent 19µs (5+14) within Digest::SHA::BEGIN@9 which was called: # once (5µs+14µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 9
use Cwd qw(getcwd);
# spent 19µs making 1 call to Digest::SHA::BEGIN@9 # spent 14µs making 1 call to Exporter::import
102130µs29µs
# spent 7µs (5+2) within Digest::SHA::BEGIN@10 which was called: # once (5µs+2µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 10
use integer;
# spent 7µs making 1 call to Digest::SHA::BEGIN@10 # spent 2µs making 1 call to integer::import
11
121200ns$VERSION = '6.04';
13
141300nsrequire Exporter;
1515µs@ISA = qw(Exporter);
1612µs@EXPORT_OK = qw(
17 $errmsg
18 hmac_sha1 hmac_sha1_base64 hmac_sha1_hex
19 hmac_sha224 hmac_sha224_base64 hmac_sha224_hex
20 hmac_sha256 hmac_sha256_base64 hmac_sha256_hex
21 hmac_sha384 hmac_sha384_base64 hmac_sha384_hex
22 hmac_sha512 hmac_sha512_base64 hmac_sha512_hex
23 hmac_sha512224 hmac_sha512224_base64 hmac_sha512224_hex
24 hmac_sha512256 hmac_sha512256_base64 hmac_sha512256_hex
25 sha1 sha1_base64 sha1_hex
26 sha224 sha224_base64 sha224_hex
27 sha256 sha256_base64 sha256_hex
28 sha384 sha384_base64 sha384_hex
29 sha512 sha512_base64 sha512_hex
30 sha512224 sha512224_base64 sha512224_hex
31 sha512256 sha512256_base64 sha512256_hex);
32
33# Inherit from Digest::base if possible
34
351200nseval {
36162µs require Digest::base;
3715µs push(@ISA, 'Digest::base');
38};
39
40# The following routines aren't time-critical, so they can be left in Perl
41
42sub new {
43 my($class, $alg) = @_;
44 $alg =~ s/\D+//g if defined $alg;
45 if (ref($class)) { # instance method
46 if (!defined($alg) || ($alg == $class->algorithm)) {
47 sharewind($class);
48 return($class);
49 }
50 return shainit($class, $alg) ? $class : undef;
51 }
52 $alg = 1 unless defined $alg;
53 return $class->newSHA($alg);
54}
55
561588µs13µs
# spent 3µs within Digest::SHA::BEGIN@56 which was called: # once (3µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 56
BEGIN { *reset = \&new }
# spent 3µs making 1 call to Digest::SHA::BEGIN@56
57
58sub add_bits {
59 my($self, $data, $nbits) = @_;
60 unless (defined $nbits) {
61 $nbits = length($data);
62 $data = pack("B*", $data);
63 }
64 $nbits = length($data) * 8 if $nbits > length($data) * 8;
65 shawrite($data, $nbits, $self);
66 return($self);
67}
68
69sub _bail {
70 my $msg = shift;
71
72 $errmsg = $!;
73 $msg .= ": $!";
74 require Carp;
75 Carp::croak($msg);
76}
77
78{
791300ns my $_can_T_filehandle;
80
81 sub _istext {
82 local *FH = shift;
83 my $file = shift;
84
85 if (! defined $_can_T_filehandle) {
86 local $^W = 0;
87 my $istext = eval { -T FH };
88 $_can_T_filehandle = $@ ? 0 : 1;
89 return $_can_T_filehandle ? $istext : -T $file;
90 }
91 return $_can_T_filehandle ? -T FH : -T $file;
92 }
93}
94
951200nssub _addfile {
96 my ($self, $handle) = @_;
97
98 my $n;
99 my $buf = "";
100
101 while (($n = read($handle, $buf, 4096))) {
102 $self->add($buf);
103 }
104 _bail("Read failed") unless defined $n;
105
106 $self;
107}
108
109sub addfile {
110 my ($self, $file, $mode) = @_;
111
112 return(_addfile($self, $file)) unless ref(\$file) eq 'SCALAR';
113
114 $mode = defined($mode) ? $mode : "";
115 my ($binary, $UNIVERSAL, $BITS) =
116 map { $_ eq $mode } ("b", "U", "0");
117
118 ## Always interpret "-" to mean STDIN; otherwise use
119 ## sysopen to handle full range of POSIX file names.
120 ## If $file is a directory, force an EISDIR error
121 ## by attempting to open with mode O_RDWR
122
123 local *FH;
124 if ($file eq '-') {
125 if (-d STDIN) {
126 sysopen(FH, getcwd(), O_RDWR)
127 or _bail('Open failed');
128 }
129 open(FH, '< -')
130 or _bail('Open failed');
131 }
132 else {
133 sysopen(FH, $file, -d $file ? O_RDWR : O_RDONLY)
134 or _bail('Open failed');
135 }
136
137 if ($BITS) {
138 my ($n, $buf) = (0, "");
139 while (($n = read(FH, $buf, 4096))) {
140 $buf =~ tr/01//cd;
141 $self->add_bits($buf);
142 }
143 _bail("Read failed") unless defined $n;
144 close(FH);
145 return($self);
146 }
147
148 binmode(FH) if $binary || $UNIVERSAL;
149 if ($UNIVERSAL && _istext(*FH, $file)) {
150 $self->_addfileuniv(*FH);
151 }
152 else { $self->_addfilebin(*FH) }
153 close(FH);
154
155 $self;
156}
157
158sub getstate {
159 my $self = shift;
160
161 my $alg = $self->algorithm or return;
162 my $state = $self->_getstate or return;
163 my $nD = $alg <= 256 ? 8 : 16;
164 my $nH = $alg <= 256 ? 32 : 64;
165 my $nB = $alg <= 256 ? 64 : 128;
166 my($H, $block, $blockcnt, $lenhh, $lenhl, $lenlh, $lenll) =
167 $state =~ /^(.{$nH})(.{$nB})(.{4})(.{4})(.{4})(.{4})(.{4})$/s;
168 for ($alg, $H, $block, $blockcnt, $lenhh, $lenhl, $lenlh, $lenll) {
169 return unless defined $_;
170 }
171
172 my @s = ();
173 push(@s, "alg:" . $alg);
174 push(@s, "H:" . join(":", unpack("H*", $H) =~ /.{$nD}/g));
175 push(@s, "block:" . join(":", unpack("H*", $block) =~ /.{2}/g));
176 push(@s, "blockcnt:" . unpack("N", $blockcnt));
177 push(@s, "lenhh:" . unpack("N", $lenhh));
178 push(@s, "lenhl:" . unpack("N", $lenhl));
179 push(@s, "lenlh:" . unpack("N", $lenlh));
180 push(@s, "lenll:" . unpack("N", $lenll));
181 join("\n", @s) . "\n";
182}
183
184sub putstate {
185 my($class, $state) = @_;
186
187 my %s = ();
188 for (split(/\n/, $state)) {
189 s/^\s+//;
190 s/\s+$//;
191 next if (/^(#|$)/);
192 my @f = split(/[:\s]+/);
193 my $tag = shift(@f);
194 $s{$tag} = join('', @f);
195 }
196
197 # H and block may contain arbitrary values, but check everything else
198 grep { $_ == $s{'alg'} } (1,224,256,384,512,512224,512256) or return;
199 length($s{'H'}) == ($s{'alg'} <= 256 ? 64 : 128) or return;
200 length($s{'block'}) == ($s{'alg'} <= 256 ? 128 : 256) or return;
201 {
2022208µs212µs
# spent 10µs (8+2) within Digest::SHA::BEGIN@202 which was called: # once (8µs+2µs) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@12 at line 202
no integer;
# spent 10µs making 1 call to Digest::SHA::BEGIN@202 # spent 2µs making 1 call to integer::unimport
203 for (qw(blockcnt lenhh lenhl lenlh lenll)) {
204 0 <= $s{$_} or return;
205 $s{$_} <= 4294967295 or return;
206 }
207 $s{'blockcnt'} < ($s{'alg'} <= 256 ? 512 : 1024) or return;
208 }
209
210 my $packed_state = (
211 pack("H*", $s{'H'}) .
212 pack("H*", $s{'block'}) .
213 pack("N", $s{'blockcnt'}) .
214 pack("N", $s{'lenhh'}) .
215 pack("N", $s{'lenhl'}) .
216 pack("N", $s{'lenlh'}) .
217 pack("N", $s{'lenll'})
218 );
219
220 return $class->new($s{'alg'})->_putstate($packed_state);
221}
222
223sub dump {
224 my $self = shift;
225 my $file = shift;
226
227 my $state = $self->getstate or return;
228 $file = "-" if (!defined($file) || $file eq "");
229
230 local *FH;
231 open(FH, "> $file") or return;
232 print FH $state;
233 close(FH);
234
235 return($self);
236}
237
238sub load {
239 my $class = shift;
240 my $file = shift;
241
242 $file = "-" if (!defined($file) || $file eq "");
243
244 local *FH;
245 open(FH, "< $file") or return;
246 my $str = join('', <FH>);
247 close(FH);
248
249 $class->putstate($str);
250}
251
252eval {
2531500ns require XSLoader;
2541153µs1148µs XSLoader::load('Digest::SHA', $VERSION);
# spent 148µs making 1 call to XSLoader::load
2551500ns 1;
2561500ns} or do {
257 require DynaLoader;
258 push @ISA, 'DynaLoader';
259 Digest::SHA->bootstrap($VERSION);
260};
261
26217µs1;
263__END__










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 109)[XML-Twig-pm-1750]-226-line.html0000644000175000017500000005300514576335353024416 0ustar michamicha Profile of (eval 109)[XML/Twig.pm:1750]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 109)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]
StatementsExecuted 727206 statements in 246ms
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 1750
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10

NOTE!
The data used to generate this report page was merged from 2 of the 21 executions
of the string eval on line 1750 of /home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm.
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3636011136ms136msXML::Twig::::__ANON__[:26]XML::Twig::__ANON__[:26] (merge of 2 subs)
1116µs17µsXML::Twig::::BEGIN@1.53XML::Twig::BEGIN@1.53
1116µs17µsXML::Twig::::BEGIN@1.63XML::Twig::BEGIN@1.63
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
14229µs456µs
# spent 17µs (6+11) within XML::Twig::BEGIN@1.63 which was called: # once (6µs+11µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 17µs (6+11) within XML::Twig::BEGIN@1.53 which was called: # once (6µs+11µs) by XML::Twig::_parse_xpath_handler at line 1 # spent 136ms within XML::Twig::__ANON__[(eval 109)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:1750]:26] which was called 36360 times, avg 4µs/call: # (data for this subroutine includes 1 others that were merged with it) # 36360 times (136ms+0s) by XML::Twig::_handler at line 2405 of XML/Twig.pm, avg 4µs/call
sub { no warnings;
# spent 22µs making 2 calls to warnings::unimport, avg 11µs/call # spent 17µs making 1 call to XML::Twig::BEGIN@1.63 # spent 17µs making 1 call to XML::Twig::BEGIN@1.53
2363603.92msmy( $stack)= @_;
3363609.69msmy @current_elts= (scalar @$stack);
4363603.40msmy @new_current_elts;
5my $elt;
6
7363608.36msforeach my $current_elt (@current_elts)
8363603.67ms { next if( !$current_elt);
9363603.98ms $current_elt--;
10363606.53ms $elt= $stack->[$current_elt];
113636016.8ms if( ($elt->{'##tag'} eq "s:mergeCell")) { push @new_current_elts, $current_elt;}
12 }
13363603.81msunless( @new_current_elts) { return 0; }
14363606.81ms@current_elts= @new_current_elts;
15363605.50ms@new_current_elts=();
16363606.33msforeach my $current_elt (@current_elts)
17363602.85ms { next if( !$current_elt);
18363602.40ms $current_elt--;
19363606.51ms $elt= $stack->[$current_elt];
203636011.4ms if( ($elt->{'##tag'} eq "s:mergeCells")) { push @new_current_elts, $current_elt;}
21 }
22363603.40msunless( @new_current_elts) { return 0; }
23363606.03ms@current_elts= @new_current_elts;
24363604.06ms@new_current_elts=();
2536360130msreturn q{s:mergeCells/s:mergeCell};
2626µs }
27;










Spreadsheet-ParseXLSX-0.35/nytprof/JSON-PP-pm-145-line.html0000644000175000017500000115302114576335353021767 0ustar michamicha Profile of JSON/PP.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/JSON/PP.pm
StatementsExecuted 242 statements in 6.47ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111981µs981µsJSON::PP::::BEGIN@68 JSON::PP::BEGIN@68
111158µs220µsJSON::PP::::BEGIN@12 JSON::PP::BEGIN@12
111100µs109µsJSON::PP::::BEGIN@688 JSON::PP::BEGIN@688
11126µs40µsJSON::PP::::BEGIN@53 JSON::PP::BEGIN@53
11115µs30µsJSON::PP::::BEGIN@26 JSON::PP::BEGIN@26
11111µs24µsJSON::PP::IncrParser::::BEGIN@1493JSON::PP::IncrParser::BEGIN@1493
11111µs11µsJSON::PP::::BEGIN@5 JSON::PP::BEGIN@5
11110µs12µsJSON::PP::::BEGIN@790 JSON::PP::BEGIN@790
1119µs9µsJSON::PP::::BEGIN@9 JSON::PP::BEGIN@9
1116µs7µsJSON::PP::IncrParser::::BEGIN@1547JSON::PP::IncrParser::BEGIN@1547
1116µs18µsJSON::PP::::BEGIN@46 JSON::PP::BEGIN@46
1115µs19µsJSON::PP::::BEGIN@1285 JSON::PP::BEGIN@1285
1115µs19µsJSON::PP::::BEGIN@493 JSON::PP::BEGIN@493
1115µs19µsJSON::PP::::BEGIN@209 JSON::PP::BEGIN@209
1115µs6µsJSON::PP::IncrParser::::BEGIN@1485JSON::PP::IncrParser::BEGIN@1485
1114µs17µsJSON::PP::::BEGIN@1471 JSON::PP::BEGIN@1471
1114µs23µsJSON::PP::::BEGIN@15 JSON::PP::BEGIN@15
1114µs35µsJSON::PP::::BEGIN@25 JSON::PP::BEGIN@25
1114µs6µsJSON::PP::::BEGIN@6 JSON::PP::BEGIN@6
1114µs15µsJSON::PP::::BEGIN@515 JSON::PP::BEGIN@515
1114µs38µsJSON::PP::IncrParser::::BEGIN@1487JSON::PP::IncrParser::BEGIN@1487
1114µs20µsJSON::PP::IncrParser::::BEGIN@1488JSON::PP::IncrParser::BEGIN@1488
1113µs17µsJSON::PP::IncrParser::::BEGIN@1490JSON::PP::IncrParser::BEGIN@1490
1113µs19µsJSON::PP::::BEGIN@39 JSON::PP::BEGIN@39
1113µs18µsJSON::PP::::BEGIN@48 JSON::PP::BEGIN@48
1113µs16µsJSON::PP::IncrParser::::BEGIN@1492JSON::PP::IncrParser::BEGIN@1492
1113µs16µsJSON::PP::IncrParser::::BEGIN@1494JSON::PP::IncrParser::BEGIN@1494
1113µs18µsJSON::PP::::BEGIN@27 JSON::PP::BEGIN@27
1113µs32µsJSON::PP::::BEGIN@29 JSON::PP::BEGIN@29
1113µs15µsJSON::PP::::BEGIN@49 JSON::PP::BEGIN@49
1113µs15µsJSON::PP::::BEGIN@35 JSON::PP::BEGIN@35
1113µs17µsJSON::PP::IncrParser::::BEGIN@1489JSON::PP::IncrParser::BEGIN@1489
1113µs17µsJSON::PP::::BEGIN@38 JSON::PP::BEGIN@38
1113µs16µsJSON::PP::::BEGIN@31 JSON::PP::BEGIN@31
1113µs15µsJSON::PP::::BEGIN@33 JSON::PP::BEGIN@33
1113µs16µsJSON::PP::::BEGIN@45 JSON::PP::BEGIN@45
1112µs17µsJSON::PP::::BEGIN@28 JSON::PP::BEGIN@28
1112µs15µsJSON::PP::::BEGIN@32 JSON::PP::BEGIN@32
1112µs15µsJSON::PP::::BEGIN@36 JSON::PP::BEGIN@36
1112µs18µsJSON::PP::::BEGIN@43 JSON::PP::BEGIN@43
1112µs17µsJSON::PP::IncrParser::::BEGIN@1491JSON::PP::IncrParser::BEGIN@1491
1112µs16µsJSON::PP::::BEGIN@30 JSON::PP::BEGIN@30
1112µs15µsJSON::PP::::BEGIN@41 JSON::PP::BEGIN@41
1112µs15µsJSON::PP::::BEGIN@42 JSON::PP::BEGIN@42
1112µs15µsJSON::PP::::BEGIN@34 JSON::PP::BEGIN@34
1112µs16µsJSON::PP::::BEGIN@40 JSON::PP::BEGIN@40
1112µs2µsJSON::PP::::BEGIN@14 JSON::PP::BEGIN@14
1112µs2µsJSON::PP::::BEGIN@11 JSON::PP::BEGIN@11
1112µs2µsJSON::PP::::BEGIN@62 JSON::PP::BEGIN@62
1111µs1µsJSON::PP::::BEGIN@8 JSON::PP::BEGIN@8
0000s0sJSON::PP::IncrParser::::_incr_parseJSON::PP::IncrParser::_incr_parse
0000s0sJSON::PP::IncrParser::::incr_parseJSON::PP::IncrParser::incr_parse
0000s0sJSON::PP::IncrParser::::incr_resetJSON::PP::IncrParser::incr_reset
0000s0sJSON::PP::IncrParser::::incr_skipJSON::PP::IncrParser::incr_skip
0000s0sJSON::PP::IncrParser::::incr_textJSON::PP::IncrParser::incr_text
0000s0sJSON::PP::IncrParser::::newJSON::PP::IncrParser::new
0000s0sJSON::PP::::PP_decode_box JSON::PP::PP_decode_box
0000s0sJSON::PP::::PP_decode_json JSON::PP::PP_decode_json
0000s0sJSON::PP::::PP_encode_box JSON::PP::PP_encode_box
0000s0sJSON::PP::::PP_encode_json JSON::PP::PP_encode_json
0000s0sJSON::PP::::__ANON__[:359] JSON::PP::__ANON__[:359]
0000s0sJSON::PP::::__ANON__[:364] JSON::PP::__ANON__[:364]
0000s0sJSON::PP::::_decode_surrogates JSON::PP::_decode_surrogates
0000s0sJSON::PP::::_decode_unicode JSON::PP::_decode_unicode
0000s0sJSON::PP::::_detect_utf_encoding JSON::PP::_detect_utf_encoding
0000s0sJSON::PP::::_down_indent JSON::PP::_down_indent
0000s0sJSON::PP::::_encode_ascii JSON::PP::_encode_ascii
0000s0sJSON::PP::::_encode_latin1 JSON::PP::_encode_latin1
0000s0sJSON::PP::::_encode_surrogates JSON::PP::_encode_surrogates
0000s0sJSON::PP::::_is_bignum JSON::PP::_is_bignum
0000s0sJSON::PP::::_json_object_hook JSON::PP::_json_object_hook
0000s0sJSON::PP::::_looks_like_number JSON::PP::_looks_like_number
0000s0sJSON::PP::::_sort JSON::PP::_sort
0000s0sJSON::PP::::_up_indent JSON::PP::_up_indent
0000s0sJSON::PP::::allow_bigint JSON::PP::allow_bigint
0000s0sJSON::PP::::array JSON::PP::array
0000s0sJSON::PP::::array_to_json JSON::PP::array_to_json
0000s0sJSON::PP::::bareKey JSON::PP::bareKey
0000s0sJSON::PP::::blessed_to_json JSON::PP::blessed_to_json
0000s0sJSON::PP::::boolean_values JSON::PP::boolean_values
0000s0sJSON::PP::::core_bools JSON::PP::core_bools
0000s0sJSON::PP::::decode JSON::PP::decode
0000s0sJSON::PP::::decode_error JSON::PP::decode_error
0000s0sJSON::PP::::decode_json JSON::PP::decode_json
0000s0sJSON::PP::::decode_prefix JSON::PP::decode_prefix
0000s0sJSON::PP::::encode JSON::PP::encode
0000s0sJSON::PP::::encode_error JSON::PP::encode_error
0000s0sJSON::PP::::encode_json JSON::PP::encode_json
0000s0sJSON::PP::::false JSON::PP::false
0000s0sJSON::PP::::filter_json_object JSON::PP::filter_json_object
0000s0sJSON::PP::::filter_json_single_key_object JSON::PP::filter_json_single_key_object
0000s0sJSON::PP::::from_json JSON::PP::from_json
0000s0sJSON::PP::::get_boolean_values JSON::PP::get_boolean_values
0000s0sJSON::PP::::get_core_bools JSON::PP::get_core_bools
0000s0sJSON::PP::::get_indent_length JSON::PP::get_indent_length
0000s0sJSON::PP::::get_max_depth JSON::PP::get_max_depth
0000s0sJSON::PP::::get_max_size JSON::PP::get_max_size
0000s0sJSON::PP::::get_unblessed_bool JSON::PP::get_unblessed_bool
0000s0sJSON::PP::::hash_to_json JSON::PP::hash_to_json
0000s0sJSON::PP::::incr_parse JSON::PP::incr_parse
0000s0sJSON::PP::::incr_reset JSON::PP::incr_reset
0000s0sJSON::PP::::incr_skip JSON::PP::incr_skip
0000s0sJSON::PP::::incr_text JSON::PP::incr_text
0000s0sJSON::PP::::indent_length JSON::PP::indent_length
0000s0sJSON::PP::::is_bool JSON::PP::is_bool
0000s0sJSON::PP::::is_valid_utf8 JSON::PP::is_valid_utf8
0000s0sJSON::PP::::max_depth JSON::PP::max_depth
0000s0sJSON::PP::::max_size JSON::PP::max_size
0000s0sJSON::PP::::new JSON::PP::new
0000s0sJSON::PP::::next_chr JSON::PP::next_chr
0000s0sJSON::PP::::null JSON::PP::null
0000s0sJSON::PP::::number JSON::PP::number
0000s0sJSON::PP::::object JSON::PP::object
0000s0sJSON::PP::::object_to_json JSON::PP::object_to_json
0000s0sJSON::PP::::pretty JSON::PP::pretty
0000s0sJSON::PP::::sort_by JSON::PP::sort_by
0000s0sJSON::PP::::string JSON::PP::string
0000s0sJSON::PP::::string_to_json JSON::PP::string_to_json
0000s0sJSON::PP::::tag JSON::PP::tag
0000s0sJSON::PP::::to_json JSON::PP::to_json
0000s0sJSON::PP::::true JSON::PP::true
0000s0sJSON::PP::::unblessed_bool JSON::PP::unblessed_bool
0000s0sJSON::PP::::value JSON::PP::value
0000s0sJSON::PP::::value_to_json JSON::PP::value_to_json
0000s0sJSON::PP::::white JSON::PP::white
0000s0sJSON::PP::::word JSON::PP::word
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package JSON::PP;
2
3# JSON-2.0
4
5228µs111µs
# spent 11µs within JSON::PP::BEGIN@5 which was called: # once (11µs+0s) by JSON::BEGIN@1 at line 5
use 5.008;
# spent 11µs making 1 call to JSON::PP::BEGIN@5
6214µs27µs
# spent 6µs (4+2) within JSON::PP::BEGIN@6 which was called: # once (4µs+2µs) by JSON::BEGIN@1 at line 6
use strict;
# spent 6µs making 1 call to JSON::PP::BEGIN@6 # spent 2µs making 1 call to strict::import
7
8218µs11µs
# spent 1µs within JSON::PP::BEGIN@8 which was called: # once (1µs+0s) by JSON::BEGIN@1 at line 8
use Exporter ();
# spent 1µs making 1 call to JSON::PP::BEGIN@8
9124µs19µs
# spent 9µs within JSON::PP::BEGIN@9 which was called: # once (9µs+0s) by JSON::BEGIN@1 at line 9
BEGIN { our @ISA = ('Exporter') }
# spent 9µs making 1 call to JSON::PP::BEGIN@9
10
11211µs12µs
# spent 2µs within JSON::PP::BEGIN@11 which was called: # once (2µs+0s) by JSON::BEGIN@1 at line 11
use overload ();
# spent 2µs making 1 call to JSON::PP::BEGIN@11
12272µs2220µs
# spent 220µs (158+62) within JSON::PP::BEGIN@12 which was called: # once (158µs+62µs) by JSON::BEGIN@1 at line 12
use JSON::PP::Boolean;
# spent 220µs making 1 call to JSON::PP::BEGIN@12 # spent 700ns making 1 call to UNIVERSAL::import
13
14213µs12µs
# spent 2µs within JSON::PP::BEGIN@14 which was called: # once (2µs+0s) by JSON::BEGIN@1 at line 14
use Carp ();
# spent 2µs making 1 call to JSON::PP::BEGIN@14
15229µs242µs
# spent 23µs (4+19) within JSON::PP::BEGIN@15 which was called: # once (4µs+19µs) by JSON::BEGIN@1 at line 15
use Scalar::Util qw(blessed reftype refaddr);
# spent 23µs making 1 call to JSON::PP::BEGIN@15 # spent 19µs making 1 call to Exporter::import
16#use Devel::Peek;
17
181400nsour $VERSION = '4.16';
19
2011µsour @EXPORT = qw(encode_json decode_json from_json to_json);
21
22# instead of hash-access, i tried index-access for speed.
23# but this method is not faster than what i expected. so it will be changed.
24
25216µs265µs
# spent 35µs (4+30) within JSON::PP::BEGIN@25 which was called: # once (4µs+30µs) by JSON::BEGIN@1 at line 25
use constant P_ASCII => 0;
# spent 35µs making 1 call to JSON::PP::BEGIN@25 # spent 30µs making 1 call to constant::import
26214µs245µs
# spent 30µs (15+15) within JSON::PP::BEGIN@26 which was called: # once (15µs+15µs) by JSON::BEGIN@1 at line 26
use constant P_LATIN1 => 1;
# spent 30µs making 1 call to JSON::PP::BEGIN@26 # spent 15µs making 1 call to constant::import
27212µs234µs
# spent 18µs (3+15) within JSON::PP::BEGIN@27 which was called: # once (3µs+15µs) by JSON::BEGIN@1 at line 27
use constant P_UTF8 => 2;
# spent 18µs making 1 call to JSON::PP::BEGIN@27 # spent 15µs making 1 call to constant::import
28212µs232µs
# spent 17µs (2+14) within JSON::PP::BEGIN@28 which was called: # once (2µs+14µs) by JSON::BEGIN@1 at line 28
use constant P_INDENT => 3;
# spent 17µs making 1 call to JSON::PP::BEGIN@28 # spent 14µs making 1 call to constant::import
29212µs262µs
# spent 32µs (3+29) within JSON::PP::BEGIN@29 which was called: # once (3µs+29µs) by JSON::BEGIN@1 at line 29
use constant P_CANONICAL => 4;
# spent 32µs making 1 call to JSON::PP::BEGIN@29 # spent 29µs making 1 call to constant::import
30211µs229µs
# spent 16µs (2+14) within JSON::PP::BEGIN@30 which was called: # once (2µs+14µs) by JSON::BEGIN@1 at line 30
use constant P_SPACE_BEFORE => 5;
# spent 16µs making 1 call to JSON::PP::BEGIN@30 # spent 14µs making 1 call to constant::import
31212µs228µs
# spent 16µs (3+13) within JSON::PP::BEGIN@31 which was called: # once (3µs+13µs) by JSON::BEGIN@1 at line 31
use constant P_SPACE_AFTER => 6;
# spent 16µs making 1 call to JSON::PP::BEGIN@31 # spent 13µs making 1 call to constant::import
32212µs228µs
# spent 15µs (2+13) within JSON::PP::BEGIN@32 which was called: # once (2µs+13µs) by JSON::BEGIN@1 at line 32
use constant P_ALLOW_NONREF => 7;
# spent 15µs making 1 call to JSON::PP::BEGIN@32 # spent 13µs making 1 call to constant::import
33211µs227µs
# spent 15µs (3+12) within JSON::PP::BEGIN@33 which was called: # once (3µs+12µs) by JSON::BEGIN@1 at line 33
use constant P_SHRINK => 8;
# spent 15µs making 1 call to JSON::PP::BEGIN@33 # spent 12µs making 1 call to constant::import
34211µs228µs
# spent 15µs (2+13) within JSON::PP::BEGIN@34 which was called: # once (2µs+13µs) by JSON::BEGIN@1 at line 34
use constant P_ALLOW_BLESSED => 9;
# spent 15µs making 1 call to JSON::PP::BEGIN@34 # spent 13µs making 1 call to constant::import
35211µs228µs
# spent 15µs (3+12) within JSON::PP::BEGIN@35 which was called: # once (3µs+12µs) by JSON::BEGIN@1 at line 35
use constant P_CONVERT_BLESSED => 10;
# spent 15µs making 1 call to JSON::PP::BEGIN@35 # spent 12µs making 1 call to constant::import
36220µs228µs
# spent 15µs (2+13) within JSON::PP::BEGIN@36 which was called: # once (2µs+13µs) by JSON::BEGIN@1 at line 36
use constant P_RELAXED => 11;
# spent 15µs making 1 call to JSON::PP::BEGIN@36 # spent 13µs making 1 call to constant::import
37
38227µs232µs
# spent 17µs (3+14) within JSON::PP::BEGIN@38 which was called: # once (3µs+14µs) by JSON::BEGIN@1 at line 38
use constant P_LOOSE => 12;
# spent 17µs making 1 call to JSON::PP::BEGIN@38 # spent 14µs making 1 call to constant::import
39213µs234µs
# spent 19µs (3+16) within JSON::PP::BEGIN@39 which was called: # once (3µs+16µs) by JSON::BEGIN@1 at line 39
use constant P_ALLOW_BIGNUM => 13;
# spent 19µs making 1 call to JSON::PP::BEGIN@39 # spent 16µs making 1 call to constant::import
40211µs230µs
# spent 16µs (2+14) within JSON::PP::BEGIN@40 which was called: # once (2µs+14µs) by JSON::BEGIN@1 at line 40
use constant P_ALLOW_BAREKEY => 14;
# spent 16µs making 1 call to JSON::PP::BEGIN@40 # spent 14µs making 1 call to constant::import
41211µs228µs
# spent 15µs (2+13) within JSON::PP::BEGIN@41 which was called: # once (2µs+13µs) by JSON::BEGIN@1 at line 41
use constant P_ALLOW_SINGLEQUOTE => 15;
# spent 15µs making 1 call to JSON::PP::BEGIN@41 # spent 13µs making 1 call to constant::import
42211µs227µs
# spent 15µs (2+12) within JSON::PP::BEGIN@42 which was called: # once (2µs+12µs) by JSON::BEGIN@1 at line 42
use constant P_ESCAPE_SLASH => 16;
# spent 15µs making 1 call to JSON::PP::BEGIN@42 # spent 12µs making 1 call to constant::import
43216µs234µs
# spent 18µs (2+16) within JSON::PP::BEGIN@43 which was called: # once (2µs+16µs) by JSON::BEGIN@1 at line 43
use constant P_AS_NONBLESSED => 17;
# spent 18µs making 1 call to JSON::PP::BEGIN@43 # spent 16µs making 1 call to constant::import
44
45211µs229µs
# spent 16µs (3+13) within JSON::PP::BEGIN@45 which was called: # once (3µs+13µs) by JSON::BEGIN@1 at line 45
use constant P_ALLOW_UNKNOWN => 18;
# spent 16µs making 1 call to JSON::PP::BEGIN@45 # spent 13µs making 1 call to constant::import
46219µs231µs
# spent 18µs (6+13) within JSON::PP::BEGIN@46 which was called: # once (6µs+13µs) by JSON::BEGIN@1 at line 46
use constant P_ALLOW_TAGS => 19;
# spent 18µs making 1 call to JSON::PP::BEGIN@46 # spent 13µs making 1 call to constant::import
47
48217µs233µs
# spent 18µs (3+15) within JSON::PP::BEGIN@48 which was called: # once (3µs+15µs) by JSON::BEGIN@1 at line 48
use constant USE_B => $ENV{PERL_JSON_PP_USE_B} || 0;
# spent 18µs making 1 call to JSON::PP::BEGIN@48 # spent 15µs making 1 call to constant::import
49264µs228µs
# spent 15µs (3+12) within JSON::PP::BEGIN@49 which was called: # once (3µs+12µs) by JSON::BEGIN@1 at line 49
use constant CORE_BOOL => defined &builtin::is_bool;
# spent 15µs making 1 call to JSON::PP::BEGIN@49 # spent 12µs making 1 call to constant::import
50
511100nsmy $invalid_char_re;
52
53
# spent 40µs (26+15) within JSON::PP::BEGIN@53 which was called: # once (26µs+15µs) by JSON::BEGIN@1 at line 60
BEGIN {
541400ns $invalid_char_re = "[";
551700ns for my $i (0 .. 0x01F, 0x22, 0x5c) { # '/' is ok
563413µs $invalid_char_re .= quotemeta chr utf8::unicode_to_native($i);
57 }
58
59126µs215µs $invalid_char_re = qr/$invalid_char_re]/;
# spent 14µs making 1 call to CORE::regcomp # spent 1µs making 1 call to CORE::qr
60125µs140µs}
# spent 40µs making 1 call to JSON::PP::BEGIN@53
61
62
# spent 2µs within JSON::PP::BEGIN@62 which was called: # once (2µs+0s) by JSON::BEGIN@1 at line 66
BEGIN {
6312µs if (USE_B) {
64 require B;
65 }
66164µs12µs}
# spent 2µs making 1 call to JSON::PP::BEGIN@62
67
68
# spent 981µs within JSON::PP::BEGIN@68 which was called: # once (981µs+0s) by JSON::BEGIN@1 at line 102
BEGIN {
6911µs my @xs_compati_bit_properties = qw(
70 latin1 ascii utf8 indent canonical space_before space_after allow_nonref shrink
71 allow_blessed convert_blessed relaxed allow_unknown
72 allow_tags
73 );
741500ns my @pp_bit_properties = qw(
75 allow_singlequote allow_bignum loose
76 allow_barekey escape_slash as_nonblessed
77 );
78
7915µs for my $name (@xs_compati_bit_properties, @pp_bit_properties) {
80207µs my $property_id = 'P_' . uc($name);
81
8220969µs eval qq/
# spent 0s executing statements in string eval
83 sub $name {
84 my \$enable = defined \$_[1] ? \$_[1] : 1;
85
86 if (\$enable) {
87 \$_[0]->{PROPS}->[$property_id] = 1;
88 }
89 else {
90 \$_[0]->{PROPS}->[$property_id] = 0;
91 }
92
93 \$_[0];
94 }
95
96 sub get_$name {
97 \$_[0]->{PROPS}->[$property_id] ? 1 : '';
98 }
99 /;
100 }
101
1021245µs1981µs}
# spent 981µs making 1 call to JSON::PP::BEGIN@68
103
- -
106# Functions
107
108my $JSON; # cache
109
110sub encode_json ($) { # encode
111 ($JSON ||= __PACKAGE__->new->utf8)->encode(@_);
112}
113
114
115sub decode_json { # decode
116 ($JSON ||= __PACKAGE__->new->utf8)->decode(@_);
117}
118
119# Obsoleted
120
121sub to_json($) {
122 Carp::croak ("JSON::PP::to_json has been renamed to encode_json.");
123}
124
125
126sub from_json($) {
127 Carp::croak ("JSON::PP::from_json has been renamed to decode_json.");
128}
129
130
131# Methods
132
133sub new {
134 my $class = shift;
135 my $self = {
136 max_depth => 512,
137 max_size => 0,
138 indent_length => 3,
139 };
140
141 $self->{PROPS}[P_ALLOW_NONREF] = 1;
142
143 bless $self, $class;
144}
145
146
147sub encode {
148 return $_[0]->PP_encode_json($_[1]);
149}
150
151
152sub decode {
153 return $_[0]->PP_decode_json($_[1], 0x00000000);
154}
155
156
157sub decode_prefix {
158 return $_[0]->PP_decode_json($_[1], 0x00000001);
159}
160
161
162# accessor
163
164
165# pretty printing
166
167sub pretty {
168 my ($self, $v) = @_;
169 my $enable = defined $v ? $v : 1;
170
171 if ($enable) { # indent_length(3) for JSON::XS compatibility
172 $self->indent(1)->space_before(1)->space_after(1);
173 }
174 else {
175 $self->indent(0)->space_before(0)->space_after(0);
176 }
177
178 $self;
179}
180
181# etc
182
183sub max_depth {
184 my $max = defined $_[1] ? $_[1] : 0x80000000;
185 $_[0]->{max_depth} = $max;
186 $_[0];
187}
188
189
190sub get_max_depth { $_[0]->{max_depth}; }
191
192
193sub max_size {
194 my $max = defined $_[1] ? $_[1] : 0;
195 $_[0]->{max_size} = $max;
196 $_[0];
197}
198
199
200sub get_max_size { $_[0]->{max_size}; }
201
202sub boolean_values {
203 my $self = shift;
204 if (@_) {
205 my ($false, $true) = @_;
206 $self->{false} = $false;
207 $self->{true} = $true;
208 if (CORE_BOOL) {
2091866µs233µs
# spent 19µs (5+14) within JSON::PP::BEGIN@209 which was called: # once (5µs+14µs) by JSON::BEGIN@1 at line 209
BEGIN { CORE_BOOL and warnings->unimport(qw(experimental::builtin)) }
# spent 19µs making 1 call to JSON::PP::BEGIN@209 # spent 14µs making 1 call to warnings::unimport
210 if (builtin::is_bool($true) && builtin::is_bool($false) && $true && !$false) {
211 $self->{core_bools} = !!1;
212 }
213 else {
214 delete $self->{core_bools};
215 }
216 }
217 } else {
218 delete $self->{false};
219 delete $self->{true};
220 delete $self->{core_bools};
221 }
222 return $self;
223}
224
225sub core_bools {
226 my $self = shift;
227 my $core_bools = defined $_[0] ? $_[0] : 1;
228 if ($core_bools) {
229 $self->{true} = !!1;
230 $self->{false} = !!0;
231 $self->{core_bools} = !!1;
232 }
233 else {
234 $self->{true} = $JSON::PP::true;
235 $self->{false} = $JSON::PP::false;
236 $self->{core_bools} = !!0;
237 }
238 return $self;
239}
240
241sub get_core_bools {
242 my $self = shift;
243 return !!$self->{core_bools};
244}
245
246sub unblessed_bool {
247 my $self = shift;
248 return $self->core_bools(@_);
249}
250
251sub get_unblessed_bool {
252 my $self = shift;
253 return $self->get_core_bools(@_);
254}
255
256sub get_boolean_values {
257 my $self = shift;
258 if (exists $self->{true} and exists $self->{false}) {
259 return @$self{qw/false true/};
260 }
261 return;
262}
263
264sub filter_json_object {
265 if (defined $_[1] and ref $_[1] eq 'CODE') {
266 $_[0]->{cb_object} = $_[1];
267 } else {
268 delete $_[0]->{cb_object};
269 }
270 $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
271 $_[0];
272}
273
274sub filter_json_single_key_object {
275 if (@_ == 1 or @_ > 3) {
276 Carp::croak("Usage: JSON::PP::filter_json_single_key_object(self, key, callback = undef)");
277 }
278 if (defined $_[2] and ref $_[2] eq 'CODE') {
279 $_[0]->{cb_sk_object}->{$_[1]} = $_[2];
280 } else {
281 delete $_[0]->{cb_sk_object}->{$_[1]};
282 delete $_[0]->{cb_sk_object} unless %{$_[0]->{cb_sk_object} || {}};
283 }
284 $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
285 $_[0];
286}
287
288sub indent_length {
289 if (!defined $_[1] or $_[1] > 15 or $_[1] < 0) {
290 Carp::carp "The acceptable range of indent_length() is 0 to 15.";
291 }
292 else {
293 $_[0]->{indent_length} = $_[1];
294 }
295 $_[0];
296}
297
298sub get_indent_length {
299 $_[0]->{indent_length};
300}
301
302sub sort_by {
303 $_[0]->{sort_by} = defined $_[1] ? $_[1] : 1;
304 $_[0];
305}
306
307sub allow_bigint {
308 Carp::carp("allow_bigint() is obsoleted. use allow_bignum() instead.");
309 $_[0]->allow_bignum;
310}
311
312###############################
313
314###
315### Perl => JSON
316###
317
318
319{ # Convert
320
3211100ns my $max_depth;
322 my $indent;
323 my $ascii;
324 my $latin1;
325 my $utf8;
326 my $space_before;
327 my $space_after;
328 my $canonical;
329 my $allow_blessed;
330 my $convert_blessed;
331
332 my $indent_length;
333 my $escape_slash;
334 my $bignum;
335 my $as_nonblessed;
336 my $allow_tags;
337
338 my $depth;
339 my $indent_count;
340 my $keysort;
341
342
343 sub PP_encode_json {
344 my $self = shift;
345 my $obj = shift;
346
347 $indent_count = 0;
348 $depth = 0;
349
350 my $props = $self->{PROPS};
351
352 ($ascii, $latin1, $utf8, $indent, $canonical, $space_before, $space_after, $allow_blessed,
353 $convert_blessed, $escape_slash, $bignum, $as_nonblessed, $allow_tags)
354 = @{$props}[P_ASCII .. P_SPACE_AFTER, P_ALLOW_BLESSED, P_CONVERT_BLESSED,
355 P_ESCAPE_SLASH, P_ALLOW_BIGNUM, P_AS_NONBLESSED, P_ALLOW_TAGS];
356
357 ($max_depth, $indent_length) = @{$self}{qw/max_depth indent_length/};
358
359 $keysort = $canonical ? sub { $a cmp $b } : undef;
360
361 if ($self->{sort_by}) {
362 $keysort = ref($self->{sort_by}) eq 'CODE' ? $self->{sort_by}
363 : $self->{sort_by} =~ /\D+/ ? $self->{sort_by}
364 : sub { $a cmp $b };
365 }
366
367 encode_error("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)")
368 if(!ref $obj and !$props->[ P_ALLOW_NONREF ]);
369
370 my $str = $self->object_to_json($obj);
371
372 $str .= "\n" if ( $indent ); # JSON::XS 2.26 compatible
373
374 return $str;
375 }
376
377
378 sub object_to_json {
379 my ($self, $obj) = @_;
380 my $type = ref($obj);
381
382 if($type eq 'HASH'){
383 return $self->hash_to_json($obj);
384 }
385 elsif($type eq 'ARRAY'){
386 return $self->array_to_json($obj);
387 }
388 elsif ($type) { # blessed object?
389 if (blessed($obj)) {
390
391 return $self->value_to_json($obj) if ( $obj->isa('JSON::PP::Boolean') );
392
393 if ( $allow_tags and $obj->can('FREEZE') ) {
394 my $obj_class = ref $obj || $obj;
395 $obj = bless $obj, $obj_class;
396 my @results = $obj->FREEZE('JSON');
397 if ( @results and ref $results[0] ) {
398 if ( refaddr( $obj ) eq refaddr( $results[0] ) ) {
399 encode_error( sprintf(
400 "%s::FREEZE method returned same object as was passed instead of a new one",
401 ref $obj
402 ) );
403 }
404 }
405 return '("'.$obj_class.'")['.join(',', @results).']';
406 }
407
408 if ( $convert_blessed and $obj->can('TO_JSON') ) {
409 my $result = $obj->TO_JSON();
410 if ( defined $result and ref( $result ) ) {
411 if ( refaddr( $obj ) eq refaddr( $result ) ) {
412 encode_error( sprintf(
413 "%s::TO_JSON method returned same object as was passed instead of a new one",
414 ref $obj
415 ) );
416 }
417 }
418
419 return $self->object_to_json( $result );
420 }
421
422 return "$obj" if ( $bignum and _is_bignum($obj) );
423
424 if ($allow_blessed) {
425 return $self->blessed_to_json($obj) if ($as_nonblessed); # will be removed.
426 return 'null';
427 }
428 encode_error( sprintf("encountered object '%s', but neither allow_blessed, convert_blessed nor allow_tags settings are enabled (or TO_JSON/FREEZE method missing)", $obj)
429 );
430 }
431 else {
432 return $self->value_to_json($obj);
433 }
434 }
435 else{
436 return $self->value_to_json($obj);
437 }
438 }
439
440
441 sub hash_to_json {
442 my ($self, $obj) = @_;
443 my @res;
444
445 encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
446 if (++$depth > $max_depth);
447
448 my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
449 my $del = ($space_before ? ' ' : '') . ':' . ($space_after ? ' ' : '');
450
451 for my $k ( _sort( $obj ) ) {
452 push @res, $self->string_to_json( $k )
453 . $del
454 . ( ref $obj->{$k} ? $self->object_to_json( $obj->{$k} ) : $self->value_to_json( $obj->{$k} ) );
455 }
456
457 --$depth;
458 $self->_down_indent() if ($indent);
459
460 return '{}' unless @res;
461 return '{' . $pre . join( ",$pre", @res ) . $post . '}';
462 }
463
464
465 sub array_to_json {
466 my ($self, $obj) = @_;
467 my @res;
468
469 encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
470 if (++$depth > $max_depth);
471
472 my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
473
474 for my $v (@$obj){
475 push @res, ref($v) ? $self->object_to_json($v) : $self->value_to_json($v);
476 }
477
478 --$depth;
479 $self->_down_indent() if ($indent);
480
481 return '[]' unless @res;
482 return '[' . $pre . join( ",$pre", @res ) . $post . ']';
483 }
484
485 sub _looks_like_number {
486 my $value = shift;
487 if (USE_B) {
488 my $b_obj = B::svref_2object(\$value);
489 my $flags = $b_obj->FLAGS;
490 return 1 if $flags & ( B::SVp_IOK() | B::SVp_NOK() ) and !( $flags & B::SVp_POK() );
491 return;
492 } else {
493278µs233µs
# spent 19µs (5+14) within JSON::PP::BEGIN@493 which was called: # once (5µs+14µs) by JSON::BEGIN@1 at line 493
no warnings 'numeric';
# spent 19µs making 1 call to JSON::PP::BEGIN@493 # spent 14µs making 1 call to warnings::unimport
494 # if the utf8 flag is on, it almost certainly started as a string
495 return if utf8::is_utf8($value);
496 # detect numbers
497 # string & "" -> ""
498 # number & "" -> 0 (with warning)
499 # nan and inf can detect as numbers, so check with * 0
500 return unless length((my $dummy = "") & $value);
501 return unless 0 + $value eq $value;
502 return 1 if $value * 0 == 0;
503 return -1; # inf/nan
504 }
505 }
506
507 sub value_to_json {
508 my ($self, $value) = @_;
509
510 return 'null' if(!defined $value);
511
512 my $type = ref($value);
513
514 if (!$type) {
5151539µs226µs
# spent 15µs (4+11) within JSON::PP::BEGIN@515 which was called: # once (4µs+11µs) by JSON::BEGIN@1 at line 515
BEGIN { CORE_BOOL and warnings->unimport('experimental::builtin') }
# spent 15µs making 1 call to JSON::PP::BEGIN@515 # spent 11µs making 1 call to warnings::unimport
516 if (CORE_BOOL && builtin::is_bool($value)) {
517 return $value ? 'true' : 'false';
518 }
519 elsif (_looks_like_number($value)) {
520 return $value;
521 }
522 return $self->string_to_json($value);
523 }
524 elsif( blessed($value) and $value->isa('JSON::PP::Boolean') ){
525 return $$value == 1 ? 'true' : 'false';
526 }
527 else {
528 if ((overload::StrVal($value) =~ /=(\w+)/)[0]) {
529 return $self->value_to_json("$value");
530 }
531
532 if ($type eq 'SCALAR' and defined $$value) {
533 return $$value eq '1' ? 'true'
534 : $$value eq '0' ? 'false'
535 : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null'
536 : encode_error("cannot encode reference to scalar");
537 }
538
539 if ( $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ) {
540 return 'null';
541 }
542 else {
543 if ( $type eq 'SCALAR' or $type eq 'REF' ) {
544 encode_error("cannot encode reference to scalar");
545 }
546 else {
547 encode_error("encountered $value, but JSON can only represent references to arrays or hashes");
548 }
549 }
550
551 }
552 }
553
554
55513µs my %esc = (
556 "\n" => '\n',
557 "\r" => '\r',
558 "\t" => '\t',
559 "\f" => '\f',
560 "\b" => '\b',
561 "\"" => '\"',
562 "\\" => '\\\\',
563 "\'" => '\\\'',
564 );
565
566
567 sub string_to_json {
568 my ($self, $arg) = @_;
569
570 $arg =~ s/(["\\\n\r\t\f\b])/$esc{$1}/g;
571 $arg =~ s/\//\\\//g if ($escape_slash);
572
573 # On ASCII platforms, matches [\x00-\x08\x0b\x0e-\x1f]
574 $arg =~ s/([^\n\t\c?[:^cntrl:][:^ascii:]])/'\\u00' . unpack('H2', $1)/eg;
575
576 if ($ascii) {
577 $arg = _encode_ascii($arg);
578 }
579
580 if ($latin1) {
581 $arg = _encode_latin1($arg);
582 }
583
584 if ($utf8) {
585 utf8::encode($arg);
586 }
587
588 return '"' . $arg . '"';
589 }
590
591
592 sub blessed_to_json {
593 my $reftype = reftype($_[1]) || '';
594 if ($reftype eq 'HASH') {
595 return $_[0]->hash_to_json($_[1]);
596 }
597 elsif ($reftype eq 'ARRAY') {
598 return $_[0]->array_to_json($_[1]);
599 }
600 else {
601 return 'null';
602 }
603 }
604
605
606 sub encode_error {
607 my $error = shift;
608 Carp::croak "$error";
609 }
610
611
612 sub _sort {
613 defined $keysort ? (sort $keysort (keys %{$_[0]})) : keys %{$_[0]};
614 }
615
616
617 sub _up_indent {
618 my $self = shift;
619 my $space = ' ' x $indent_length;
620
621 my ($pre,$post) = ('','');
622
623 $post = "\n" . $space x $indent_count;
624
625 $indent_count++;
626
627 $pre = "\n" . $space x $indent_count;
628
629 return ($pre,$post);
630 }
631
632
633 sub _down_indent { $indent_count--; }
634
635
636 sub PP_encode_box {
637 {
638 depth => $depth,
639 indent_count => $indent_count,
640 };
641 }
642
643} # Convert
644
645
6461200nssub _encode_ascii {
647 join('',
648 map {
649 chr($_) =~ /[[:ascii:]]/ ?
650 chr($_) :
651 $_ <= 65535 ?
652 sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
653 } unpack('U*', $_[0])
654 );
655}
656
657
658sub _encode_latin1 {
659 join('',
660 map {
661 $_ <= 255 ?
662 chr($_) :
663 $_ <= 65535 ?
664 sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
665 } unpack('U*', $_[0])
666 );
667}
668
669
670sub _encode_surrogates { # from perlunicode
671 my $uni = $_[0] - 0x10000;
672 return ($uni / 0x400 + 0xD800, $uni % 0x400 + 0xDC00);
673}
674
675
676sub _is_bignum {
677 $_[0]->isa('Math::BigInt') or $_[0]->isa('Math::BigFloat');
678}
679
- -
682#
683# JSON => Perl
684#
685
6861200nsmy $max_intsize;
687
688
# spent 109µs (100+9) within JSON::PP::BEGIN@688 which was called: # once (100µs+9µs) by JSON::BEGIN@1 at line 698
BEGIN {
6891200ns my $checkint = 1111;
6901800ns for my $d (5..64) {
691171µs $checkint .= 1;
6921767µs my $int = eval qq| $checkint |;
# spent 2µs executing statements in string eval # spent 800ns executing statements in string eval # spent 700ns executing statements in string eval # spent 600ns executing statements in string eval # spent 600ns executing statements in string eval # spent 600ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 500ns executing statements in string eval # spent 400ns executing statements in string eval # spent 400ns executing statements in string eval
6931726µs179µs if ($int =~ /[eE]/) {
# spent 9µs making 17 calls to CORE::match, avg 524ns/call
6941200ns $max_intsize = $d - 1;
69513µs last;
696 }
697 }
6981222µs1109µs}
# spent 109µs making 1 call to JSON::PP::BEGIN@688
699
700{ # PARSE
701
70212µs my %escapes = ( # by Jeremy Muhlich <jmuhlich [at] bitflood.org>
703 b => "\b",
704 t => "\t",
705 n => "\n",
706 f => "\f",
707 r => "\r",
708 '\\' => '\\',
709 '"' => '"',
710 '/' => '/',
711 );
712
7131100ns my $text; # json data
714 my $at; # offset
715 my $ch; # first character
716 my $len; # text length (changed according to UTF8 or NON UTF8)
717 # INTERNAL
718 my $depth; # nest counter
719 my $encoding; # json text encoding
720 my $is_valid_utf8; # temp variable
721 my $utf8_len; # utf8 byte length
722 # FLAGS
723 my $utf8; # must be utf8
724 my $max_depth; # max nest number of objects and arrays
725 my $max_size;
726 my $relaxed;
727 my $cb_object;
728 my $cb_sk_object;
729
730 my $F_HOOK;
731
732 my $allow_bignum; # using Math::BigInt/BigFloat
733 my $singlequote; # loosely quoting
734 my $loose; #
735 my $allow_barekey; # bareKey
736 my $allow_tags;
737
738 my $alt_true;
739 my $alt_false;
740
741 sub _detect_utf_encoding {
742 my $text = shift;
743 my @octets = unpack('C4', $text);
744 return 'unknown' unless defined $octets[3];
745 return ( $octets[0] and $octets[1]) ? 'UTF-8'
746 : (!$octets[0] and $octets[1]) ? 'UTF-16BE'
747 : (!$octets[0] and !$octets[1]) ? 'UTF-32BE'
748 : ( $octets[2] ) ? 'UTF-16LE'
749 : (!$octets[2] ) ? 'UTF-32LE'
750 : 'unknown';
751 }
752
753 sub PP_decode_json {
754 my ($self, $want_offset);
755
756 ($self, $text, $want_offset) = @_;
757
758 ($at, $ch, $depth) = (0, '', 0);
759
760 if ( !defined $text or ref $text ) {
761 decode_error("malformed JSON string, neither array, object, number, string or atom");
762 }
763
764 my $props = $self->{PROPS};
765
766 ($utf8, $relaxed, $loose, $allow_bignum, $allow_barekey, $singlequote, $allow_tags)
767 = @{$props}[P_UTF8, P_RELAXED, P_LOOSE .. P_ALLOW_SINGLEQUOTE, P_ALLOW_TAGS];
768
769 ($alt_true, $alt_false) = @$self{qw/true false/};
770
771 if ( $utf8 ) {
772 $encoding = _detect_utf_encoding($text);
773 if ($encoding ne 'UTF-8' and $encoding ne 'unknown') {
774 require Encode;
775 Encode::from_to($text, $encoding, 'utf-8');
776 } else {
777 utf8::downgrade( $text, 1 ) or Carp::croak("Wide character in subroutine entry");
778 }
779 }
780 else {
781 utf8::encode( $text );
782 }
783
784 $len = length $text;
785
786 ($max_depth, $max_size, $cb_object, $cb_sk_object, $F_HOOK)
787 = @{$self}{qw/max_depth max_size cb_object cb_sk_object F_HOOK/};
788
789 if ($max_size > 1) {
79021.35ms215µs
# spent 12µs (10+2) within JSON::PP::BEGIN@790 which was called: # once (10µs+2µs) by JSON::BEGIN@1 at line 790
use bytes;
# spent 12µs making 1 call to JSON::PP::BEGIN@790 # spent 2µs making 1 call to bytes::import
791 my $bytes = length $text;
792 decode_error(
793 sprintf("attempted decode of JSON text of %s bytes size, but max_size is set to %s"
794 , $bytes, $max_size), 1
795 ) if ($bytes > $max_size);
796 }
797
798 white(); # remove head white space
799
800 decode_error("malformed JSON string, neither array, object, number, string or atom") unless defined $ch; # Is there a first character for JSON structure?
801
802 my $result = value();
803
804 if ( !$props->[ P_ALLOW_NONREF ] and !ref $result ) {
805 decode_error(
806 'JSON text must be an object or array (but found number, string, true, false or null,'
807 . ' use allow_nonref to allow this)', 1);
808 }
809
810 Carp::croak('something wrong.') if $len < $at; # we won't arrive here.
811
812 my $consumed = defined $ch ? $at - 1 : $at; # consumed JSON text length
813
814 white(); # remove tail white space
815
816 return ( $result, $consumed ) if $want_offset; # all right if decode_prefix
817
818 decode_error("garbage after JSON object") if defined $ch;
819
820 $result;
821 }
822
823
824 sub next_chr {
825 return $ch = undef if($at >= $len);
826 $ch = substr($text, $at++, 1);
827 }
828
829
830 sub value {
831 white();
832 return if(!defined $ch);
833 return object() if($ch eq '{');
834 return array() if($ch eq '[');
835 return tag() if($ch eq '(');
836 return string() if($ch eq '"' or ($singlequote and $ch eq "'"));
837 return number() if($ch =~ /[0-9]/ or $ch eq '-');
838 return word();
839 }
840
841 sub string {
842 my $utf16;
843 my $is_utf8;
844
845 ($is_valid_utf8, $utf8_len) = ('', 0);
846
847 my $s = ''; # basically UTF8 flag on
848
849 if($ch eq '"' or ($singlequote and $ch eq "'")){
850 my $boundChar = $ch;
851
852 OUTER: while( defined(next_chr()) ){
853
854 if($ch eq $boundChar){
855 next_chr();
856
857 if ($utf16) {
858 decode_error("missing low surrogate character in surrogate pair");
859 }
860
861 utf8::decode($s) if($is_utf8);
862
863 return $s;
864 }
865 elsif($ch eq '\\'){
866 next_chr();
867 if(exists $escapes{$ch}){
868 $s .= $escapes{$ch};
869 }
870 elsif($ch eq 'u'){ # UNICODE handling
871 my $u = '';
872
873 for(1..4){
874 $ch = next_chr();
875 last OUTER if($ch !~ /[0-9a-fA-F]/);
876 $u .= $ch;
877 }
878
879 # U+D800 - U+DBFF
880 if ($u =~ /^[dD][89abAB][0-9a-fA-F]{2}/) { # UTF-16 high surrogate?
881 $utf16 = $u;
882 }
883 # U+DC00 - U+DFFF
884 elsif ($u =~ /^[dD][c-fC-F][0-9a-fA-F]{2}/) { # UTF-16 low surrogate?
885 unless (defined $utf16) {
886 decode_error("missing high surrogate character in surrogate pair");
887 }
888 $is_utf8 = 1;
889 $s .= _decode_surrogates($utf16, $u) || next;
890 $utf16 = undef;
891 }
892 else {
893 if (defined $utf16) {
894 decode_error("surrogate pair expected");
895 }
896
897 my $hex = hex( $u );
898 if ( chr $u =~ /[[:^ascii:]]/ ) {
899 $is_utf8 = 1;
900 $s .= _decode_unicode($u) || next;
901 }
902 else {
903 $s .= chr $hex;
904 }
905 }
906
907 }
908 else{
909 unless ($loose) {
910 $at -= 2;
911 decode_error('illegal backslash escape sequence in string');
912 }
913 $s .= $ch;
914 }
915 }
916 else{
917
918 if ( $ch =~ /[[:^ascii:]]/ ) {
919 unless( $ch = is_valid_utf8($ch) ) {
920 $at -= 1;
921 decode_error("malformed UTF-8 character in JSON string");
922 }
923 else {
924 $at += $utf8_len - 1;
925 }
926
927 $is_utf8 = 1;
928 }
929
930 if (!$loose) {
931 if ($ch =~ $invalid_char_re) { # '/' ok
932 if (!$relaxed or $ch ne "\t") {
933 $at--;
934 decode_error(sprintf "invalid character 0x%X"
935 . " encountered while parsing JSON string",
936 ord $ch);
937 }
938 }
939 }
940
941 $s .= $ch;
942 }
943 }
944 }
945
946 decode_error("unexpected end of string while parsing JSON string");
947 }
948
949
950 sub white {
951 while( defined $ch ){
952 if($ch eq '' or $ch =~ /\A[ \t\r\n]\z/){
953 next_chr();
954 }
955 elsif($relaxed and $ch eq '/'){
956 next_chr();
957 if(defined $ch and $ch eq '/'){
958 1 while(defined(next_chr()) and $ch ne "\n" and $ch ne "\r");
959 }
960 elsif(defined $ch and $ch eq '*'){
961 next_chr();
962 while(1){
963 if(defined $ch){
964 if($ch eq '*'){
965 if(defined(next_chr()) and $ch eq '/'){
966 next_chr();
967 last;
968 }
969 }
970 else{
971 next_chr();
972 }
973 }
974 else{
975 decode_error("Unterminated comment");
976 }
977 }
978 next;
979 }
980 else{
981 $at--;
982 decode_error("malformed JSON string, neither array, object, number, string or atom");
983 }
984 }
985 else{
986 if ($relaxed and $ch eq '#') { # correctly?
987 pos($text) = $at;
988 $text =~ /\G([^\n]*(?:\r\n|\r|\n|$))/g;
989 $at = pos($text);
990 next_chr;
991 next;
992 }
993
994 last;
995 }
996 }
997 }
998
999
1000 sub array {
1001 my $a = $_[0] || []; # you can use this code to use another array ref object.
1002
1003 decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
1004 if (++$depth > $max_depth);
1005
1006 next_chr();
1007 white();
1008
1009 if(defined $ch and $ch eq ']'){
1010 --$depth;
1011 next_chr();
1012 return $a;
1013 }
1014 else {
1015 while(defined($ch)){
1016 push @$a, value();
1017
1018 white();
1019
1020 if (!defined $ch) {
1021 last;
1022 }
1023
1024 if($ch eq ']'){
1025 --$depth;
1026 next_chr();
1027 return $a;
1028 }
1029
1030 if($ch ne ','){
1031 last;
1032 }
1033
1034 next_chr();
1035 white();
1036
1037 if ($relaxed and $ch eq ']') {
1038 --$depth;
1039 next_chr();
1040 return $a;
1041 }
1042
1043 }
1044 }
1045
1046 $at-- if defined $ch and $ch ne '';
1047 decode_error(", or ] expected while parsing array");
1048 }
1049
1050 sub tag {
1051 decode_error('malformed JSON string, neither array, object, number, string or atom') unless $allow_tags;
1052
1053 next_chr();
1054 white();
1055
1056 my $tag = value();
1057 return unless defined $tag;
1058 decode_error('malformed JSON string, (tag) must be a string') if ref $tag;
1059
1060 white();
1061
1062 if (!defined $ch or $ch ne ')') {
1063 decode_error(') expected after tag');
1064 }
1065
1066 next_chr();
1067 white();
1068
1069 my $val = value();
1070 return unless defined $val;
1071 decode_error('malformed JSON string, tag value must be an array') unless ref $val eq 'ARRAY';
1072
1073 if (!eval { $tag->can('THAW') }) {
1074 decode_error('cannot decode perl-object (package does not exist)') if $@;
1075 decode_error('cannot decode perl-object (package does not have a THAW method)');
1076 }
1077 $tag->THAW('JSON', @$val);
1078 }
1079
1080 sub object {
1081 my $o = $_[0] || {}; # you can use this code to use another hash ref object.
1082 my $k;
1083
1084 decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
1085 if (++$depth > $max_depth);
1086 next_chr();
1087 white();
1088
1089 if(defined $ch and $ch eq '}'){
1090 --$depth;
1091 next_chr();
1092 if ($F_HOOK) {
1093 return _json_object_hook($o);
1094 }
1095 return $o;
1096 }
1097 else {
1098 while (defined $ch) {
1099 $k = ($allow_barekey and $ch ne '"' and $ch ne "'") ? bareKey() : string();
1100 white();
1101
1102 if(!defined $ch or $ch ne ':'){
1103 $at--;
1104 decode_error("':' expected");
1105 }
1106
1107 next_chr();
1108 $o->{$k} = value();
1109 white();
1110
1111 last if (!defined $ch);
1112
1113 if($ch eq '}'){
1114 --$depth;
1115 next_chr();
1116 if ($F_HOOK) {
1117 return _json_object_hook($o);
1118 }
1119 return $o;
1120 }
1121
1122 if($ch ne ','){
1123 last;
1124 }
1125
1126 next_chr();
1127 white();
1128
1129 if ($relaxed and $ch eq '}') {
1130 --$depth;
1131 next_chr();
1132 if ($F_HOOK) {
1133 return _json_object_hook($o);
1134 }
1135 return $o;
1136 }
1137
1138 }
1139
1140 }
1141
1142 $at-- if defined $ch and $ch ne '';
1143 decode_error(", or } expected while parsing object/hash");
1144 }
1145
1146
1147 sub bareKey { # doesn't strictly follow Standard ECMA-262 3rd Edition
1148 my $key;
1149 while($ch =~ /[\$\w[:^ascii:]]/){
1150 $key .= $ch;
1151 next_chr();
1152 }
1153 return $key;
1154 }
1155
1156
1157 sub word {
1158 my $word = substr($text,$at-1,4);
1159
1160 if($word eq 'true'){
1161 $at += 3;
1162 next_chr;
1163 return defined $alt_true ? $alt_true : $JSON::PP::true;
1164 }
1165 elsif($word eq 'null'){
1166 $at += 3;
1167 next_chr;
1168 return undef;
1169 }
1170 elsif($word eq 'fals'){
1171 $at += 3;
1172 if(substr($text,$at,1) eq 'e'){
1173 $at++;
1174 next_chr;
1175 return defined $alt_false ? $alt_false : $JSON::PP::false;
1176 }
1177 }
1178
1179 $at--; # for decode_error report
1180
1181 decode_error("'null' expected") if ($word =~ /^n/);
1182 decode_error("'true' expected") if ($word =~ /^t/);
1183 decode_error("'false' expected") if ($word =~ /^f/);
1184 decode_error("malformed JSON string, neither array, object, number, string or atom");
1185 }
1186
1187
1188 sub number {
1189 my $n = '';
1190 my $v;
1191 my $is_dec;
1192 my $is_exp;
1193
1194 if($ch eq '-'){
1195 $n = '-';
1196 next_chr;
1197 if (!defined $ch or $ch !~ /\d/) {
1198 decode_error("malformed number (no digits after initial minus)");
1199 }
1200 }
1201
1202 # According to RFC4627, hex or oct digits are invalid.
1203 if($ch eq '0'){
1204 my $peek = substr($text,$at,1);
1205 if($peek =~ /^[0-9a-dfA-DF]/){ # e may be valid (exponential)
1206 decode_error("malformed number (leading zero must not be followed by another digit)");
1207 }
1208 $n .= $ch;
1209 next_chr;
1210 }
1211
1212 while(defined $ch and $ch =~ /\d/){
1213 $n .= $ch;
1214 next_chr;
1215 }
1216
1217 if(defined $ch and $ch eq '.'){
1218 $n .= '.';
1219 $is_dec = 1;
1220
1221 next_chr;
1222 if (!defined $ch or $ch !~ /\d/) {
1223 decode_error("malformed number (no digits after decimal point)");
1224 }
1225 else {
1226 $n .= $ch;
1227 }
1228
1229 while(defined(next_chr) and $ch =~ /\d/){
1230 $n .= $ch;
1231 }
1232 }
1233
1234 if(defined $ch and ($ch eq 'e' or $ch eq 'E')){
1235 $n .= $ch;
1236 $is_exp = 1;
1237 next_chr;
1238
1239 if(defined($ch) and ($ch eq '+' or $ch eq '-')){
1240 $n .= $ch;
1241 next_chr;
1242 if (!defined $ch or $ch =~ /\D/) {
1243 decode_error("malformed number (no digits after exp sign)");
1244 }
1245 $n .= $ch;
1246 }
1247 elsif(defined($ch) and $ch =~ /\d/){
1248 $n .= $ch;
1249 }
1250 else {
1251 decode_error("malformed number (no digits after exp sign)");
1252 }
1253
1254 while(defined(next_chr) and $ch =~ /\d/){
1255 $n .= $ch;
1256 }
1257
1258 }
1259
1260 $v .= $n;
1261
1262 if ($is_dec or $is_exp) {
1263 if ($allow_bignum) {
1264 require Math::BigFloat;
1265 return Math::BigFloat->new($v);
1266 }
1267 } else {
1268 if (length $v > $max_intsize) {
1269 if ($allow_bignum) { # from Adam Sussman
1270 require Math::BigInt;
1271 return Math::BigInt->new($v);
1272 }
1273 else {
1274 return "$v";
1275 }
1276 }
1277 }
1278
1279 return $is_dec ? $v/1.0 : 0+$v;
1280 }
1281
1282 # Compute how many bytes are in the longest legal official Unicode
1283 # character
12841400ns my $max_unicode_length = do {
12852482µs232µs
# spent 19µs (5+13) within JSON::PP::BEGIN@1285 which was called: # once (5µs+13µs) by JSON::BEGIN@1 at line 1285
no warnings 'utf8';
# spent 19µs making 1 call to JSON::PP::BEGIN@1285 # spent 13µs making 1 call to warnings::unimport
12861200ns chr 0x10FFFF;
1287 };
128815µs1800ns utf8::encode($max_unicode_length);
# spent 800ns making 1 call to utf8::encode
12891800ns $max_unicode_length = length $max_unicode_length;
1290
1291 sub is_valid_utf8 {
1292
1293 # Returns undef (setting $utf8_len to 0) unless the next bytes in $text
1294 # comprise a well-formed UTF-8 encoded character, in which case,
1295 # return those bytes, setting $utf8_len to their count.
1296
1297 my $start_point = substr($text, $at - 1);
1298
1299 # Look no further than the maximum number of bytes in a single
1300 # character
1301 my $limit = $max_unicode_length;
1302 $limit = length($start_point) if $limit > length($start_point);
1303
1304 # Find the number of bytes comprising the first character in $text
1305 # (without having to know the details of its internal representation).
1306 # This loop will iterate just once on well-formed input.
1307 while ($limit > 0) { # Until we succeed or exhaust the input
1308 my $copy = substr($start_point, 0, $limit);
1309
1310 # decode() will return true if all bytes are valid; false
1311 # if any aren't.
1312 if (utf8::decode($copy)) {
1313
1314 # Is valid: get the first character, convert back to bytes,
1315 # and return those bytes.
1316 $copy = substr($copy, 0, 1);
1317 utf8::encode($copy);
1318 $utf8_len = length $copy;
1319 return substr($start_point, 0, $utf8_len);
1320 }
1321
1322 # If it didn't work, it could be that there is a full legal character
1323 # followed by a partial or malformed one. Narrow the window and
1324 # try again.
1325 $limit--;
1326 }
1327
1328 # Failed to find a legal UTF-8 character.
1329 $utf8_len = 0;
1330 return;
1331 }
1332
1333
1334 sub decode_error {
1335 my $error = shift;
1336 my $no_rep = shift;
1337 my $str = defined $text ? substr($text, $at) : '';
1338 my $mess = '';
1339 my $type = 'U*';
1340
1341 for my $c ( unpack( $type, $str ) ) { # emulate pv_uni_display() ?
1342 my $chr_c = chr($c);
1343 $mess .= $chr_c eq '\\' ? '\\\\'
1344 : $chr_c =~ /[[:print:]]/ ? $chr_c
1345 : $chr_c eq '\a' ? '\a'
1346 : $chr_c eq '\t' ? '\t'
1347 : $chr_c eq '\n' ? '\n'
1348 : $chr_c eq '\r' ? '\r'
1349 : $chr_c eq '\f' ? '\f'
1350 : sprintf('\x{%x}', $c)
1351 ;
1352 if ( length $mess >= 20 ) {
1353 $mess .= '...';
1354 last;
1355 }
1356 }
1357
1358 unless ( length $mess ) {
1359 $mess = '(end of string)';
1360 }
1361
1362 Carp::croak (
1363 $no_rep ? "$error" : "$error, at character offset $at (before \"$mess\")"
1364 );
1365
1366 }
1367
1368
1369 sub _json_object_hook {
1370 my $o = $_[0];
1371 my @ks = keys %{$o};
1372
1373 if ( $cb_sk_object and @ks == 1 and exists $cb_sk_object->{ $ks[0] } and ref $cb_sk_object->{ $ks[0] } ) {
1374 my @val = $cb_sk_object->{ $ks[0] }->( $o->{$ks[0]} );
1375 if (@val == 0) {
1376 return $o;
1377 }
1378 elsif (@val == 1) {
1379 return $val[0];
1380 }
1381 else {
1382 Carp::croak("filter_json_single_key_object callbacks must not return more than one scalar");
1383 }
1384 }
1385
1386 my @val = $cb_object->($o) if ($cb_object);
1387 if (@val == 0) {
1388 return $o;
1389 }
1390 elsif (@val == 1) {
1391 return $val[0];
1392 }
1393 else {
1394 Carp::croak("filter_json_object callbacks must not return more than one scalar");
1395 }
1396 }
1397
1398
1399 sub PP_decode_box {
1400 {
1401 text => $text,
1402 at => $at,
1403 ch => $ch,
1404 len => $len,
1405 depth => $depth,
1406 encoding => $encoding,
1407 is_valid_utf8 => $is_valid_utf8,
1408 };
1409 }
1410
1411} # PARSE
1412
1413
14141100nssub _decode_surrogates { # from perlunicode
1415 my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00);
1416 my $un = pack('U*', $uni);
1417 utf8::encode( $un );
1418 return $un;
1419}
1420
1421
1422sub _decode_unicode {
1423 my $un = pack('U', hex shift);
1424 utf8::encode( $un );
1425 return $un;
1426}
1427
1428sub incr_parse {
1429 local $Carp::CarpLevel = 1;
1430 ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_parse( @_ );
1431}
1432
1433
1434sub incr_skip {
1435 ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_skip;
1436}
1437
1438
1439sub incr_reset {
1440 ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_reset;
1441}
1442
1443sub incr_text : lvalue {
1444 $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new;
1445
1446 if ( $_[0]->{_incr_parser}->{incr_pos} ) {
1447 Carp::croak("incr_text cannot be called when the incremental parser already started parsing");
1448 }
1449 $_[0]->{_incr_parser}->{incr_text};
1450}
1451
1452
1453###############################
1454# Utilities
1455#
1456
1457# shamelessly copied and modified from JSON::XS code.
1458
14591900ns$JSON::PP::true = do { bless \(my $dummy = 1), "JSON::PP::Boolean" };
14601300ns$JSON::PP::false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" };
1461
1462sub is_bool {
1463 if (blessed $_[0]) {
1464 return (
1465 $_[0]->isa("JSON::PP::Boolean")
1466 or $_[0]->isa("Types::Serialiser::BooleanBase")
1467 or $_[0]->isa("JSON::XS::Boolean")
1468 );
1469 }
1470 elsif (CORE_BOOL) {
1471163µs229µs
# spent 17µs (4+12) within JSON::PP::BEGIN@1471 which was called: # once (4µs+12µs) by JSON::BEGIN@1 at line 1471
BEGIN { CORE_BOOL and warnings->unimport('experimental::builtin') }
# spent 17µs making 1 call to JSON::PP::BEGIN@1471 # spent 12µs making 1 call to warnings::unimport
1472 return builtin::is_bool($_[0]);
1473 }
1474 return !!0;
1475}
1476
1477sub true { $JSON::PP::true }
1478sub false { $JSON::PP::false }
1479sub null { undef; }
1480
1481###############################
1482
1483package JSON::PP::IncrParser;
1484
1485223µs28µs
# spent 6µs (5+1) within JSON::PP::IncrParser::BEGIN@1485 which was called: # once (5µs+1µs) by JSON::BEGIN@1 at line 1485
use strict;
# spent 6µs making 1 call to JSON::PP::IncrParser::BEGIN@1485 # spent 1µs making 1 call to strict::import
1486
1487217µs272µs
# spent 38µs (4+34) within JSON::PP::IncrParser::BEGIN@1487 which was called: # once (4µs+34µs) by JSON::BEGIN@1 at line 1487
use constant INCR_M_WS => 0; # initial whitespace skipping
# spent 38µs making 1 call to JSON::PP::IncrParser::BEGIN@1487 # spent 34µs making 1 call to constant::import
1488213µs237µs
# spent 20µs (4+17) within JSON::PP::IncrParser::BEGIN@1488 which was called: # once (4µs+17µs) by JSON::BEGIN@1 at line 1488
use constant INCR_M_STR => 1; # inside string
# spent 20µs making 1 call to JSON::PP::IncrParser::BEGIN@1488 # spent 17µs making 1 call to constant::import
1489217µs231µs
# spent 17µs (3+14) within JSON::PP::IncrParser::BEGIN@1489 which was called: # once (3µs+14µs) by JSON::BEGIN@1 at line 1489
use constant INCR_M_BS => 2; # inside backslash
# spent 17µs making 1 call to JSON::PP::IncrParser::BEGIN@1489 # spent 14µs making 1 call to constant::import
1490212µs231µs
# spent 17µs (3+14) within JSON::PP::IncrParser::BEGIN@1490 which was called: # once (3µs+14µs) by JSON::BEGIN@1 at line 1490
use constant INCR_M_JSON => 3; # outside anything, count nesting
# spent 17µs making 1 call to JSON::PP::IncrParser::BEGIN@1490 # spent 14µs making 1 call to constant::import
1491215µs231µs
# spent 17µs (2+14) within JSON::PP::IncrParser::BEGIN@1491 which was called: # once (2µs+14µs) by JSON::BEGIN@1 at line 1491
use constant INCR_M_C0 => 4;
# spent 17µs making 1 call to JSON::PP::IncrParser::BEGIN@1491 # spent 14µs making 1 call to constant::import
1492212µs230µs
# spent 16µs (3+13) within JSON::PP::IncrParser::BEGIN@1492 which was called: # once (3µs+13µs) by JSON::BEGIN@1 at line 1492
use constant INCR_M_C1 => 5;
# spent 16µs making 1 call to JSON::PP::IncrParser::BEGIN@1492 # spent 13µs making 1 call to constant::import
1493216µs236µs
# spent 24µs (11+13) within JSON::PP::IncrParser::BEGIN@1493 which was called: # once (11µs+13µs) by JSON::BEGIN@1 at line 1493
use constant INCR_M_TFN => 6;
# spent 24µs making 1 call to JSON::PP::IncrParser::BEGIN@1493 # spent 13µs making 1 call to constant::import
14942156µs230µs
# spent 16µs (3+13) within JSON::PP::IncrParser::BEGIN@1494 which was called: # once (3µs+13µs) by JSON::BEGIN@1 at line 1494
use constant INCR_M_NUM => 7;
# spent 16µs making 1 call to JSON::PP::IncrParser::BEGIN@1494 # spent 13µs making 1 call to constant::import
1495
14961200nsour $VERSION = '1.01';
1497
1498sub new {
1499 my ( $class ) = @_;
1500
1501 bless {
1502 incr_nest => 0,
1503 incr_text => undef,
1504 incr_pos => 0,
1505 incr_mode => 0,
1506 }, $class;
1507}
1508
1509
1510sub incr_parse {
1511 my ( $self, $coder, $text ) = @_;
1512
1513 $self->{incr_text} = '' unless ( defined $self->{incr_text} );
1514
1515 if ( defined $text ) {
1516 $self->{incr_text} .= $text;
1517 }
1518
1519 if ( defined wantarray ) {
1520 my $max_size = $coder->get_max_size;
1521 my $p = $self->{incr_pos};
1522 my @ret;
1523 {
1524 do {
1525 unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) {
1526 $self->_incr_parse( $coder );
1527
1528 if ( $max_size and $self->{incr_pos} > $max_size ) {
1529 Carp::croak("attempted decode of JSON text of $self->{incr_pos} bytes size, but max_size is set to $max_size");
1530 }
1531 unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) {
1532 # as an optimisation, do not accumulate white space in the incr buffer
1533 if ( $self->{incr_mode} == INCR_M_WS and $self->{incr_pos} ) {
1534 $self->{incr_pos} = 0;
1535 $self->{incr_text} = '';
1536 }
1537 last;
1538 }
1539 }
1540
1541 unless ( $coder->get_utf8 ) {
1542 utf8::decode( $self->{incr_text} );
1543 }
1544
1545 my ($obj, $offset) = $coder->PP_decode_json( $self->{incr_text}, 0x00000001 );
1546 push @ret, $obj;
15472547µs28µs
# spent 7µs (6+1) within JSON::PP::IncrParser::BEGIN@1547 which was called: # once (6µs+1µs) by JSON::BEGIN@1 at line 1547
use bytes;
# spent 7µs making 1 call to JSON::PP::IncrParser::BEGIN@1547 # spent 1µs making 1 call to bytes::import
1548 $self->{incr_text} = substr( $self->{incr_text}, $offset || 0 );
1549 $self->{incr_pos} = 0;
1550 $self->{incr_nest} = 0;
1551 $self->{incr_mode} = 0;
1552 last unless wantarray;
1553 } while ( wantarray );
1554 }
1555
1556 if ( wantarray ) {
1557 return @ret;
1558 }
1559 else { # in scalar context
1560 return defined $ret[0] ? $ret[0] : undef;
1561 }
1562 }
1563}
1564
1565
1566sub _incr_parse {
1567 my ($self, $coder) = @_;
1568 my $text = $self->{incr_text};
1569 my $len = length $text;
1570 my $p = $self->{incr_pos};
1571
1572INCR_PARSE:
1573 while ( $len > $p ) {
1574 my $s = substr( $text, $p, 1 );
1575 last INCR_PARSE unless defined $s;
1576 my $mode = $self->{incr_mode};
1577
1578 if ( $mode == INCR_M_WS ) {
1579 while ( $len > $p ) {
1580 $s = substr( $text, $p, 1 );
1581 last INCR_PARSE unless defined $s;
1582 if ( ord($s) > ord " " ) {
1583 if ( $s eq '#' ) {
1584 $self->{incr_mode} = INCR_M_C0;
1585 redo INCR_PARSE;
1586 } else {
1587 $self->{incr_mode} = INCR_M_JSON;
1588 redo INCR_PARSE;
1589 }
1590 }
1591 $p++;
1592 }
1593 } elsif ( $mode == INCR_M_BS ) {
1594 $p++;
1595 $self->{incr_mode} = INCR_M_STR;
1596 redo INCR_PARSE;
1597 } elsif ( $mode == INCR_M_C0 or $mode == INCR_M_C1 ) {
1598 while ( $len > $p ) {
1599 $s = substr( $text, $p, 1 );
1600 last INCR_PARSE unless defined $s;
1601 if ( $s eq "\n" ) {
1602 $self->{incr_mode} = $self->{incr_mode} == INCR_M_C0 ? INCR_M_WS : INCR_M_JSON;
1603 last;
1604 }
1605 $p++;
1606 }
1607 next;
1608 } elsif ( $mode == INCR_M_TFN ) {
1609 last INCR_PARSE if $p >= $len && $self->{incr_nest};
1610 while ( $len > $p ) {
1611 $s = substr( $text, $p++, 1 );
1612 next if defined $s and $s =~ /[rueals]/;
1613 last;
1614 }
1615 $p--;
1616 $self->{incr_mode} = INCR_M_JSON;
1617
1618 last INCR_PARSE unless $self->{incr_nest};
1619 redo INCR_PARSE;
1620 } elsif ( $mode == INCR_M_NUM ) {
1621 last INCR_PARSE if $p >= $len && $self->{incr_nest};
1622 while ( $len > $p ) {
1623 $s = substr( $text, $p++, 1 );
1624 next if defined $s and $s =~ /[0-9eE.+\-]/;
1625 last;
1626 }
1627 $p--;
1628 $self->{incr_mode} = INCR_M_JSON;
1629
1630 last INCR_PARSE unless $self->{incr_nest};
1631 redo INCR_PARSE;
1632 } elsif ( $mode == INCR_M_STR ) {
1633 while ( $len > $p ) {
1634 $s = substr( $text, $p, 1 );
1635 last INCR_PARSE unless defined $s;
1636 if ( $s eq '"' ) {
1637 $p++;
1638 $self->{incr_mode} = INCR_M_JSON;
1639
1640 last INCR_PARSE unless $self->{incr_nest};
1641 redo INCR_PARSE;
1642 }
1643 elsif ( $s eq '\\' ) {
1644 $p++;
1645 if ( !defined substr($text, $p, 1) ) {
1646 $self->{incr_mode} = INCR_M_BS;
1647 last INCR_PARSE;
1648 }
1649 }
1650 $p++;
1651 }
1652 } elsif ( $mode == INCR_M_JSON ) {
1653 while ( $len > $p ) {
1654 $s = substr( $text, $p++, 1 );
1655 if ( $s eq "\x00" ) {
1656 $p--;
1657 last INCR_PARSE;
1658 } elsif ( $s =~ /^[\t\n\r ]$/) {
1659 if ( !$self->{incr_nest} ) {
1660 $p--; # do not eat the whitespace, let the next round do it
1661 last INCR_PARSE;
1662 }
1663 next;
1664 } elsif ( $s eq 't' or $s eq 'f' or $s eq 'n' ) {
1665 $self->{incr_mode} = INCR_M_TFN;
1666 redo INCR_PARSE;
1667 } elsif ( $s =~ /^[0-9\-]$/ ) {
1668 $self->{incr_mode} = INCR_M_NUM;
1669 redo INCR_PARSE;
1670 } elsif ( $s eq '"' ) {
1671 $self->{incr_mode} = INCR_M_STR;
1672 redo INCR_PARSE;
1673 } elsif ( $s eq '[' or $s eq '{' ) {
1674 if ( ++$self->{incr_nest} > $coder->get_max_depth ) {
1675 Carp::croak('json text or perl structure exceeds maximum nesting level (max_depth set too low?)');
1676 }
1677 next;
1678 } elsif ( $s eq ']' or $s eq '}' ) {
1679 if ( --$self->{incr_nest} <= 0 ) {
1680 last INCR_PARSE;
1681 }
1682 } elsif ( $s eq '#' ) {
1683 $self->{incr_mode} = INCR_M_C1;
1684 redo INCR_PARSE;
1685 }
1686 }
1687 }
1688 }
1689
1690 $self->{incr_pos} = $p;
1691 $self->{incr_parsing} = $p ? 1 : 0; # for backward compatibility
1692}
1693
1694
1695sub incr_text {
1696 if ( $_[0]->{incr_pos} ) {
1697 Carp::croak("incr_text cannot be called when the incremental parser already started parsing");
1698 }
1699 $_[0]->{incr_text};
1700}
1701
1702
1703sub incr_skip {
1704 my $self = shift;
1705 $self->{incr_text} = substr( $self->{incr_text}, $self->{incr_pos} );
1706 $self->{incr_pos} = 0;
1707 $self->{incr_mode} = 0;
1708 $self->{incr_nest} = 0;
1709}
1710
1711
1712sub incr_reset {
1713 my $self = shift;
1714 $self->{incr_text} = undef;
1715 $self->{incr_pos} = 0;
1716 $self->{incr_mode} = 0;
1717 $self->{incr_nest} = 0;
1718}
1719
1720###############################
1721
1722
172318µs1;
1724__END__










Spreadsheet-ParseXLSX-0.35/nytprof/Test2-Event-Exception-pm-57-line.html0000644000175000017500000005727614576335353024655 0ustar michamicha Profile of Test2/Event/Exception.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test2/Event/Exception.pm
StatementsExecuted 10 statements in 197µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110µs11µsTest2::Event::Exception::::BEGIN@2Test2::Event::Exception::BEGIN@2
1117µs7µsTest2::Event::Exception::::BEGIN@8Test2::Event::Exception::BEGIN@8
1115µs59µsTest2::Event::Exception::::BEGIN@9Test2::Event::Exception::BEGIN@9
1113µs25µsTest2::Event::Exception::::BEGIN@3Test2::Event::Exception::BEGIN@3
0000s0sTest2::Event::Exception::::causes_failTest2::Event::Exception::causes_fail
0000s0sTest2::Event::Exception::::diagnosticsTest2::Event::Exception::diagnostics
0000s0sTest2::Event::Exception::::facet_dataTest2::Event::Exception::facet_data
0000s0sTest2::Event::Exception::::initTest2::Event::Exception::init
0000s0sTest2::Event::Exception::::summaryTest2::Event::Exception::summary
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test2::Event::Exception;
2218µs213µs
# spent 11µs (10+2) within Test2::Event::Exception::BEGIN@2 which was called: # once (10µs+2µs) by Test2::API::BEGIN@97 at line 2
use strict;
# spent 11µs making 1 call to Test2::Event::Exception::BEGIN@2 # spent 2µs making 1 call to strict::import
3239µs247µs
# spent 25µs (3+22) within Test2::Event::Exception::BEGIN@3 which was called: # once (3µs+22µs) by Test2::API::BEGIN@97 at line 3
use warnings;
# spent 25µs making 1 call to Test2::Event::Exception::BEGIN@3 # spent 22µs making 1 call to warnings::import
4
51300nsour $VERSION = '1.302198';
6
7
8223µs17µs
# spent 7µs within Test2::Event::Exception::BEGIN@8 which was called: # once (7µs+0s) by Test2::API::BEGIN@97 at line 8
BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
# spent 7µs making 1 call to Test2::Event::Exception::BEGIN@8
92115µs2113µs
# spent 59µs (5+54) within Test2::Event::Exception::BEGIN@9 which was called: # once (5µs+54µs) by Test2::API::BEGIN@97 at line 9
use Test2::Util::HashBase qw{error};
# spent 59µs making 1 call to Test2::Event::Exception::BEGIN@9 # spent 54µs making 1 call to Test2::Util::HashBase::import
10
11sub init {
12 my $self = shift;
13 $self->{+ERROR} = "$self->{+ERROR}";
14}
15
16sub causes_fail { 1 }
17
18sub summary {
19 my $self = shift;
20 chomp(my $msg = "Exception: " . $self->{+ERROR});
21 return $msg;
22}
23
24sub diagnostics { 1 }
25
26sub facet_data {
27 my $self = shift;
28 my $out = $self->common_facet_data;
29
30 $out->{errors} = [
31 {
32 tag => 'ERROR',
33 fail => 1,
34 details => $self->{+ERROR},
35 }
36 ];
37
38 return $out;
39}
40
41
4212µs1;
43
44__END__










Spreadsheet-ParseXLSX-0.35/nytprof/CryptX-pm-141-line.html0000644000175000017500000010376214576335353022134 0ustar michamicha Profile of CryptX.pm
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/CryptX.pm
StatementsExecuted 14 statements in 785µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.11ms8.61msCryptX::::BEGIN@13CryptX::BEGIN@13
1118µs9µsCryptX::::BEGIN@3CryptX::BEGIN@3
1114µs22µsCryptX::::BEGIN@10CryptX::BEGIN@10
1113µs16µsCryptX::::BEGIN@4CryptX::BEGIN@4
0000s0sCryptX::::_croakCryptX::_croak
0000s0sCryptX::::_decode_jsonCryptX::_decode_json
0000s0sCryptX::::_encode_jsonCryptX::_encode_json
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package CryptX;
2
3214µs210µs
# spent 9µs (8+1) within CryptX::BEGIN@3 which was called: # once (8µs+1µs) by Crypt::Cipher::BEGIN@9 at line 3
use strict;
# spent 9µs making 1 call to CryptX::BEGIN@3 # spent 1µs making 1 call to strict::import
4226µs229µs
# spent 16µs (3+13) within CryptX::BEGIN@4 which was called: # once (3µs+13µs) by Crypt::Cipher::BEGIN@9 at line 4
use warnings ;
# spent 16µs making 1 call to CryptX::BEGIN@4 # spent 13µs making 1 call to warnings::import
51300nsour $VERSION = '0.080';
6
71500nsrequire XSLoader;
81543µs1537µsXSLoader::load('CryptX', $VERSION);
# spent 537µs making 1 call to XSLoader::load
9
10225µs240µs
# spent 22µs (4+18) within CryptX::BEGIN@10 which was called: # once (4µs+18µs) by Crypt::Cipher::BEGIN@9 at line 10
use Carp;
# spent 22µs making 1 call to CryptX::BEGIN@10 # spent 18µs making 1 call to Exporter::import
111200nsmy $has_json;
12
13
# spent 8.61ms (1.11+7.50) within CryptX::BEGIN@13 which was called: # once (1.11ms+7.50ms) by Crypt::Cipher::BEGIN@9 at line 15
BEGIN {
14347µs $has_json = 1 if eval { require JSON; 1 };
151125µs18.61ms}
# spent 8.61ms making 1 call to CryptX::BEGIN@13
16
17sub _croak {
18 die @_ if ref $_[0] || !$_[-1];
19 if ($_[-1] =~ /^(.*)( at .+ line .+\n$)/s) {
20 pop @_;
21 push @_, $1;
22 }
23 die Carp::shortmess @_;
24}
25
26sub _decode_json {
27 croak "FATAL: cannot find JSON module" if !$has_json;
28 return JSON->new->utf8->decode(shift);
29}
30
31sub _encode_json {
32 croak "FATAL: cannot find JSON module" if !$has_json;
33 return JSON->new->utf8->canonical->encode(shift);
34}
35
3614µs1;
37
38=pod
39
40=head1 NAME
41
42CryptX - Cryptographic toolkit
43
44=head1 DESCRIPTION
45
46Perl modules providing a cryptography based on L<LibTomCrypt|https://github.com/libtom/libtomcrypt> library.
47
48=over
49
50=item * Symmetric ciphers - see L<Crypt::Cipher> and related modules
51
52L<Crypt::Cipher::AES>, L<Crypt::Cipher::Anubis>, L<Crypt::Cipher::Blowfish>, L<Crypt::Cipher::Camellia>, L<Crypt::Cipher::CAST5>, L<Crypt::Cipher::DES>,
53L<Crypt::Cipher::DES_EDE>, L<Crypt::Cipher::IDEA>, L<Crypt::Cipher::KASUMI>, L<Crypt::Cipher::Khazad>, L<Crypt::Cipher::MULTI2>, L<Crypt::Cipher::Noekeon>,
54L<Crypt::Cipher::RC2>, L<Crypt::Cipher::RC5>, L<Crypt::Cipher::RC6>, L<Crypt::Cipher::SAFERP>, L<Crypt::Cipher::SAFER_K128>, L<Crypt::Cipher::SAFER_K64>,
55L<Crypt::Cipher::SAFER_SK128>, L<Crypt::Cipher::SAFER_SK64>, L<Crypt::Cipher::SEED>, L<Crypt::Cipher::Serpent>, L<Crypt::Cipher::Skipjack>,
56L<Crypt::Cipher::Twofish>, L<Crypt::Cipher::XTEA>
57
58=item * Block cipher modes
59
60L<Crypt::Mode::CBC>, L<Crypt::Mode::CFB>, L<Crypt::Mode::CTR>, L<Crypt::Mode::ECB>, L<Crypt::Mode::OFB>
61
62=item * Stream ciphers
63
64L<Crypt::Stream::RC4>, L<Crypt::Stream::ChaCha>, L<Crypt::Stream::Salsa20>, L<Crypt::Stream::Sober128>,
65L<Crypt::Stream::Sosemanuk>, L<Crypt::Stream::Rabbit>
66
67=item * Authenticated encryption modes
68
69L<Crypt::AuthEnc::CCM>, L<Crypt::AuthEnc::EAX>, L<Crypt::AuthEnc::GCM>, L<Crypt::AuthEnc::OCB>, L<Crypt::AuthEnc::ChaCha20Poly1305>
70
71=item * Hash Functions - see L<Crypt::Digest> and related modules
72
73L<Crypt::Digest::BLAKE2b_160>, L<Crypt::Digest::BLAKE2b_256>, L<Crypt::Digest::BLAKE2b_384>, L<Crypt::Digest::BLAKE2b_512>,
74L<Crypt::Digest::BLAKE2s_128>, L<Crypt::Digest::BLAKE2s_160>, L<Crypt::Digest::BLAKE2s_224>, L<Crypt::Digest::BLAKE2s_256>,
75L<Crypt::Digest::CHAES>, L<Crypt::Digest::MD2>, L<Crypt::Digest::MD4>, L<Crypt::Digest::MD5>, L<Crypt::Digest::RIPEMD128>, L<Crypt::Digest::RIPEMD160>,
76L<Crypt::Digest::RIPEMD256>, L<Crypt::Digest::RIPEMD320>, L<Crypt::Digest::SHA1>, L<Crypt::Digest::SHA224>, L<Crypt::Digest::SHA256>, L<Crypt::Digest::SHA384>,
77L<Crypt::Digest::SHA512>, L<Crypt::Digest::SHA512_224>, L<Crypt::Digest::SHA512_256>, L<Crypt::Digest::Tiger192>, L<Crypt::Digest::Whirlpool>,
78L<Crypt::Digest::Keccak224>, L<Crypt::Digest::Keccak256>, L<Crypt::Digest::Keccak384>, L<Crypt::Digest::Keccak512>,
79L<Crypt::Digest::SHA3_224>, L<Crypt::Digest::SHA3_256>, L<Crypt::Digest::SHA3_384>, L<Crypt::Digest::SHA3_512>, L<Crypt::Digest::SHAKE>
80
81=item * Checksums
82
83L<Crypt::Checksum::Adler32>, L<Crypt::Checksum::CRC32>
84
85=item * Message Authentication Codes
86
87L<Crypt::Mac::BLAKE2b>, L<Crypt::Mac::BLAKE2s>, L<Crypt::Mac::F9>, L<Crypt::Mac::HMAC>, L<Crypt::Mac::OMAC>,
88L<Crypt::Mac::Pelican>, L<Crypt::Mac::PMAC>, L<Crypt::Mac::XCBC>, L<Crypt::Mac::Poly1305>
89
90=item * Public key cryptography
91
92L<Crypt::PK::RSA>, L<Crypt::PK::DSA>, L<Crypt::PK::ECC>, L<Crypt::PK::DH>, L<Crypt::PK::Ed25519>, L<Crypt::PK::X25519>
93
94=item * Cryptographically secure random number generators - see L<Crypt::PRNG> and related modules
95
96L<Crypt::PRNG::Fortuna>, L<Crypt::PRNG::Yarrow>, L<Crypt::PRNG::RC4>, L<Crypt::PRNG::Sober128>, L<Crypt::PRNG::ChaCha20>
97
98=item * Key derivation functions - PBKDF1, PBKDF2 and HKDF
99
100L<Crypt::KeyDerivation>
101
102=item * Other handy functions related to cryptography
103
104L<Crypt::Misc>
105
106=back
107
108=head1 LICENSE
109
110This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
111
112=head1 COPYRIGHT
113
114Copyright (c) 2013-2023 DCIT, a.s. L<https://www.dcit.cz> / Karel Miko
115
116=cut










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 126)[XML-Twig-pm-5871]-243-line.html0000644000175000017500000004100414576335353024420 0ustar michamicha Profile of (eval 126)[XML/Twig.pm:5871]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 126)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]
StatementsExecuted 202910 statements in 818ms
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 5871
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
2029072154.5ms54.5msXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1118µs25µsXML::Twig::Elt::::BEGIN@1.70XML::Twig::Elt::BEGIN@1.70
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1202910818ms241µs
# spent 25µs (8+17) within XML::Twig::Elt::BEGIN@1.70 which was called: # once (8µs+17µs) by XML::Twig::Elt::_install_cond at line 1 # spent 54.5ms within XML::Twig::Elt::__ANON__[(eval 126)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:5871]:1] which was called 202907 times, avg 269ns/call: # 187299 times (43.3ms+0s) by XML::Twig::Elt::next_sibling at line 6071 of XML/Twig.pm, avg 231ns/call # 15608 times (11.2ms+0s) by XML::Twig::Elt::first_child at line 6000 of XML/Twig.pm, avg 717ns/call
sub { no warnings; ; return ($_[0]->{gi} == 119) ? $_[0] : undef; }
# spent 25µs making 1 call to XML::Twig::Elt::BEGIN@1.70 # spent 17µs making 1 call to warnings::unimport
2;










Spreadsheet-ParseXLSX-0.35/nytprof/(eval 70)[XML-Twig-pm-7113]-187-line.html0000644000175000017500000004117214576335353024342 0ustar michamicha Profile of (eval 70)[XML/Twig.pm:7113]
NYTProf Performance Profile   
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename(eval 70)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]
StatementsExecuted 22 statements in 109µs
Eval Invoked At/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm line 7113
Sibling evals1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11125µs4.55msXML::Twig::Elt::::__ANON__[:1]XML::Twig::Elt::__ANON__[:1]
1116µs16µsXML::Twig::Elt::::BEGIN@1.14XML::Twig::Elt::BEGIN@1.14
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
122109µs164.55ms
# spent 4.55ms (25µs+4.52) within XML::Twig::Elt::__ANON__[(eval 70)[/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/XML/Twig.pm:7113]:1] which was called: # once (25µs+4.52ms) by XML::Twig::Elt::get_xpath at line 7141 of XML/Twig.pm # spent 16µs (6+10) within XML::Twig::Elt::BEGIN@1.14 which was called: # once (6µs+10µs) by XML::Twig::Elt::_install_xpath at line 1
sub { no warnings; my $elt= shift; my @results;@results= ($elt->twig) || croak "cannot use an XPath query starting with a / on a node not attached to a whole twig";@results= grep defined, map { $_->descendants( 's:fills') } @results;@results= grep defined, map { $_->children( 's:fill') } @results;@results= grep defined, map { $_->children( 's:patternFill') } @results;return XML::Twig::_unique_elts( @results); }
# spent 3.87ms making 1 call to XML::Twig::descendants # spent 372µs making 1 call to XML::Twig::_unique_elts # spent 271µs making 11 calls to XML::Twig::Elt::children, avg 25µs/call # spent 16µs making 1 call to XML::Twig::Elt::BEGIN@1.14 # spent 10µs making 1 call to warnings::unimport # spent 4µs making 1 call to XML::Twig::Elt::twig
2;










Spreadsheet-ParseXLSX-0.35/INSTALL.md0000644000175000017500000000044714576335353016076 0ustar michamichaDo once if required: * cpanm -n Dist::Zilla * dzil setup Install prerequisites: * dzil authordeps --missing | cpanm -n * dzil listdeps --author --missing | cpanm -n Test: * dzil test --all Build: * dzil build Upload new release (for maintainers only): * dzil release