qis 3.0.4__tar.gz → 3.0.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {qis-3.0.4 → qis-3.0.5}/PKG-INFO +1 -1
- {qis-3.0.4 → qis-3.0.5}/pyproject.toml +8 -3
- {qis-3.0.4 → qis-3.0.5}/qis/plots/boxplot.py +1 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/perf_table.py +11 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/multi_portfolio_data.py +34 -9
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/strategy_benchmark_factsheet.py +1 -0
- {qis-3.0.4 → qis-3.0.5}/qis/settings.yaml +1 -0
- {qis-3.0.4 → qis-3.0.5}/LICENSE.txt +0 -0
- {qis-3.0.4 → qis-3.0.5}/README.md +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/best_returns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/bond_futures_portfolio.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/bootstrap_analysis.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/boxplot_conditional_returns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/btc_asset_corr.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/constant_notional.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/constant_weight_portfolios.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/core/perf_bbg_prices.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/core/price_plots.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/core/us_election.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/credit_spreads.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/credit_trackers.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/europe_futures.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/factsheets/multi_assets.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/factsheets/multi_strategy.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/factsheets/pyblogs_reports.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/factsheets/strategy.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/factsheets/strategy_benchmark.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/generate_option_rolls.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/interpolation_infrequent_returns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/leveraged_strategies.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/long_short.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/momentum_indices.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/oakmark_analysis.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/ohlc_vol_analysis.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/overnight_returns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/perf_external_assets.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/perp_pricing.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/readme_performances.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/risk_return_frontier.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/rolling_performance.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/seasonality.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/sharpe_vs_sortino.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/simulate_quant_strats.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/test_ewm.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/test_scatter.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/try_pybloqs.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/universe_corrs.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/vix_beta_to_equities_bonds.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/vix_conditional_returns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/vix_spy_by_year.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/vix_tenor_analysis.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/examples/vol_without_weekends.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/file_utils.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/local_path.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/README.md +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/auto_corr.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/corr_cov_matrix.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/ewm.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/ewm_convolution.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/ewm_factors.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/ewm_winsor_outliers.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/pca.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/plot_correlations.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/linear/ra_returns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/stats/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/stats/bootstrap.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/stats/ohlc_vol.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/stats/rolling_stats.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/models/stats/test_bootstrap.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/README.md +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/cond_regression.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/config.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/desc_table.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/fx_ops.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/perf_stats.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/regime_classifier.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/returns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/perfstats/timeseries_bfill.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/README.md +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/bars.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/contour.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/data_timeseries.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/desc_table.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/drawdowns.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/prices.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/regime_class_table.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/regime_data.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/regime_pdf.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/regime_scatter.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/returns_heatmap.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/derived/returns_scatter.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/errorbar.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/heatmap.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/histogram.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/histplot2d.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/lineplot.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/pie.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/qqplot.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/reports/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/reports/econ_data_single.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/reports/gantt_data_history.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/reports/price_history.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/reports/utils.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/scatter.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/stackplot.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/table.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/time_series.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/plots/utils.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/README.md +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/backtester.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/ewm_portfolio_risk.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/portfolio_data.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/brinson_attribution.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/config.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/multi_assets_factsheet.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/multi_strategy_factseet_pybloqs.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/multi_strategy_factsheet.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/strategy_benchmark_factsheet_pybloqs.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/strategy_factsheet.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/reports/strategy_signal_factsheet.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/strats/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/strats/quant_strats_delta1.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/portfolio/strats/seasonal_strats.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/sql_engine.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/test_data.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/README.md +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/__init__.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/dates.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_agg.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_cut.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_freq.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_groups.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_melt.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_ops.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_str.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_to_scores.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/df_to_weights.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/generic.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/np_ops.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/ols.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/sampling.py +0 -0
- {qis-3.0.4 → qis-3.0.5}/qis/utils/struct_ops.py +0 -0
{qis-3.0.4 → qis-3.0.5}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: qis
|
3
|
-
Version: 3.0.
|
3
|
+
Version: 3.0.5
|
4
4
|
Summary: Implementation of visualisation and reporting analytics for Quantitative Investment Strategies
|
5
5
|
License: LICENSE.txt
|
6
6
|
Keywords: quantitative,investing,portfolio optimization,systematic strategies,volatility
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "qis"
|
3
|
-
version = "3.0.
|
3
|
+
version = "3.0.5"
|
4
4
|
description = "Implementation of visualisation and reporting analytics for Quantitative Investment Strategies"
|
5
5
|
license = "LICENSE.txt"
|
6
6
|
authors = ["Artur Sepp <artursepp@gmail.com>"]
|
@@ -50,6 +50,11 @@ pyarrow = ">=10.0.1"
|
|
50
50
|
fsspec = ">=2022.11.0"
|
51
51
|
yfinance = ">=0.1.38"
|
52
52
|
|
53
|
+
#[build-system]
|
54
|
+
#requires = ["poetry-core>=1.0.0"]
|
55
|
+
#
|
56
|
+
|
53
57
|
[build-system]
|
54
|
-
requires = ["poetry-core>=1.0.0"]
|
55
|
-
build-backend = "
|
58
|
+
requires = ["poetry-core>=1.0.0", "hatchling==1.27.0", "hatch-vcs"]
|
59
|
+
#build-backend = "hatchling.build"
|
60
|
+
build-backend = "poetry.core.masonry.api"
|
@@ -125,6 +125,8 @@ def plot_ra_perf_table_benchmark(prices: pd.DataFrame,
|
|
125
125
|
fontsize: int = 10,
|
126
126
|
transpose: bool = False,
|
127
127
|
alpha_an_factor: float = None,
|
128
|
+
is_convert_to_str: bool = True,
|
129
|
+
df_to_add: pd.DataFrame = None,
|
128
130
|
ax: plt.Subplot = None,
|
129
131
|
**kwargs
|
130
132
|
) -> Tuple[Optional[plt.Figure], pd.DataFrame]:
|
@@ -138,10 +140,19 @@ def plot_ra_perf_table_benchmark(prices: pd.DataFrame,
|
|
138
140
|
perf_columns=perf_columns,
|
139
141
|
column_header=column_header,
|
140
142
|
alpha_an_factor=alpha_an_factor,
|
143
|
+
is_convert_to_str=is_convert_to_str,
|
141
144
|
**kwargs)
|
142
145
|
if not drop_benchmark and special_rows_colors is None:
|
143
146
|
special_rows_colors = [(1, 'skyblue')] # for benchmarl separation
|
144
147
|
kwargs = sop.update_kwargs(kwargs, dict(special_rows_colors=special_rows_colors))
|
148
|
+
|
149
|
+
if df_to_add is not None:
|
150
|
+
df_to_add = df_to_add.reindex(index=ra_perf_table.index)
|
151
|
+
if is_convert_to_str:
|
152
|
+
df_to_add = df_to_add.fillna('')
|
153
|
+
ra_perf_table = pd.concat([ra_perf_table, df_to_add], axis=1)
|
154
|
+
|
155
|
+
|
145
156
|
fig = ptb.plot_df_table(df=ra_perf_table,
|
146
157
|
transpose=transpose,
|
147
158
|
special_columns_colors=special_columns_colors,
|
@@ -427,6 +427,9 @@ class MultiPortfolioData:
|
|
427
427
|
time_period: TimePeriod = None,
|
428
428
|
perf_params: PerfParams = PERF_PARAMS,
|
429
429
|
perf_columns: List[PerfStat] = rpt.BENCHMARK_TABLE_COLUMNS,
|
430
|
+
strategy_idx: int = 0,
|
431
|
+
benchmark_idx: int = 1,
|
432
|
+
add_turnover: bool = False,
|
430
433
|
ax: plt.Subplot = None,
|
431
434
|
**kwargs
|
432
435
|
) -> pd.DataFrame:
|
@@ -437,6 +440,14 @@ class MultiPortfolioData:
|
|
437
440
|
drop_benchmark = False
|
438
441
|
ra_perf_title = f"RA performance table for {perf_params.freq_vol}-freq returns with beta to {benchmark}: " \
|
439
442
|
f"{qis.get_time_period(prices).to_str()}"
|
443
|
+
|
444
|
+
if add_turnover:
|
445
|
+
turnover = self.get_turnover(time_period=time_period, **kwargs)
|
446
|
+
turnover = turnover.mean(axis=0).to_frame('Turnover')
|
447
|
+
df_to_add = qis.df_to_str(turnover, var_format='{:,.0%}')
|
448
|
+
else:
|
449
|
+
df_to_add = None
|
450
|
+
|
440
451
|
fig, ra_perf_table = ppt.plot_ra_perf_table_benchmark(prices=prices,
|
441
452
|
benchmark=benchmark,
|
442
453
|
perf_params=perf_params,
|
@@ -444,6 +455,7 @@ class MultiPortfolioData:
|
|
444
455
|
drop_benchmark=drop_benchmark,
|
445
456
|
title=ra_perf_title,
|
446
457
|
rotation_for_columns_headers=0,
|
458
|
+
df_to_add=df_to_add,
|
447
459
|
ax=ax,
|
448
460
|
**kwargs)
|
449
461
|
return ra_perf_table
|
@@ -598,7 +610,24 @@ class MultiPortfolioData:
|
|
598
610
|
**kwargs)
|
599
611
|
if benchmark is not None:
|
600
612
|
self.add_regime_shadows(ax=ax, regime_benchmark=benchmark, index=diff.index, regime_params=regime_params)
|
601
|
-
|
613
|
+
|
614
|
+
def get_turnover(self,
|
615
|
+
time_period: TimePeriod = None,
|
616
|
+
turnover_rolling_period: Optional[int] = 12,
|
617
|
+
freq_turnover: Optional[str] = 'ME',
|
618
|
+
is_unit_based_traded_volume: bool = True,
|
619
|
+
**kwargs
|
620
|
+
):
|
621
|
+
turnover = []
|
622
|
+
for portfolio in self.portfolio_datas:
|
623
|
+
turnover.append(portfolio.get_turnover(roll_period=turnover_rolling_period, freq=freq_turnover, is_agg=True,
|
624
|
+
is_unit_based_traded_volume=is_unit_based_traded_volume).rename(
|
625
|
+
portfolio.nav.name))
|
626
|
+
turnover = pd.concat(turnover, axis=1)
|
627
|
+
if time_period is not None:
|
628
|
+
turnover = time_period.locate(turnover)
|
629
|
+
return turnover
|
630
|
+
|
602
631
|
def plot_turnover(self,
|
603
632
|
benchmark: str = None,
|
604
633
|
time_period: TimePeriod = None,
|
@@ -609,14 +638,10 @@ class MultiPortfolioData:
|
|
609
638
|
is_unit_based_traded_volume: bool = True,
|
610
639
|
ax: plt.Subplot = None,
|
611
640
|
**kwargs) -> None:
|
612
|
-
|
613
|
-
turnover =
|
614
|
-
|
615
|
-
|
616
|
-
is_unit_based_traded_volume=is_unit_based_traded_volume).rename(portfolio.nav.name))
|
617
|
-
turnover = pd.concat(turnover, axis=1)
|
618
|
-
if time_period is not None:
|
619
|
-
turnover = time_period.locate(turnover)
|
641
|
+
|
642
|
+
turnover = self.get_turnover(turnover_rolling_period=turnover_rolling_period, freq_turnover=freq_turnover,
|
643
|
+
is_unit_based_traded_volume=is_unit_based_traded_volume,
|
644
|
+
time_period=time_period)
|
620
645
|
freq = pd.infer_freq(turnover.index)
|
621
646
|
turnover_title = f"{turnover_rolling_period}-period rolling {freq}-freq Turnover"
|
622
647
|
pts.plot_time_series(df=turnover,
|
@@ -542,6 +542,7 @@ def weights_tracking_error_report(multi_portfolio_data: MultiPortfolioData,
|
|
542
542
|
add_benchmarks_to_navs=add_benchmarks_to_navs,
|
543
543
|
perf_params=perf_params,
|
544
544
|
time_period=time_period,
|
545
|
+
add_turnover=True,
|
545
546
|
ax=ax,
|
546
547
|
**kwargs)
|
547
548
|
dfs['ra_perf_table'] = ra_perf_table
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|